import { IPackageServer } from "@libs/package"; import { Express } from "express"; import { Sequelize } from "sequelize"; import { registerService } from "./service-registry.ts.bak"; const registeredPackages: Map = new Map(); const initializedPackages = new Set(); export function registerPackage(pkg: IPackageServer) { if (registeredPackages.has(pkg.metadata.name)) { throw new Error(`❌ Paquete "${pkg.metadata.name}" ya registrado.`); } registeredPackages.set(pkg.metadata.name, pkg); } export function initPackages(app: Express, sequelize: Sequelize) { for (const [name] of registeredPackages) { loadPackage(name, app, sequelize); } } function loadPackage(name: string, app: Express, sequelize: Sequelize) { if (initializedPackages.has(name)) return; const pkg = registeredPackages.get(name); if (!pkg) throw new Error(`❌ Paquete "${name}" no encontrado.`); // Resolver dependencias primero const deps = pkg.metadata.dependencies || []; deps.forEach((dep) => loadPackage(dep, app, sequelize)); // Inicializar el package pkg.init(app); const pkgApi = pkg.registerDependencies?.(); // Registrar modelos de Sequelize, si los expone if (pkgApi?.models) { for (const initModelFn of pkgApi.models) { initModelFn(sequelize); } } // Registrar sus servicios, si los expone if (pkgApi?.services) { const services = pkgApi.services; if (services && typeof services === "object") { registerService(pkg.metadata.name, services); } } initializedPackages.add(name); console.log(`✅ Paquete "${name}" inicializado.`); }