import { FINANZAS_EXTENSIONS } from './finanzas/finanzas.extensions'; import { FINANZAS_SCREENS } from './finanzas/finanzas.screens'; import { ARTICULOS_SCREENS } from './articulos/articulos.screens'; import { ARTICULOS_EXTENSIONS } from './articulos/articulos.extensions'; import { LOTES_EXTENSIONS } from './lotes/lotes.extensions'; import { LOTES_SCREENS } from './lotes/lotes.screens'; import { type MasterExtensions, applyMasterExtensions } from './master-extensions'; import { SOCIOS_EXTENSIONS } from './socios-negocio/socios.extensions'; import { SOCIOS_SCREENS } from './socios-negocio/socios.screens'; import type { MasterScreen } from './master-types'; /** Las pantallas de maestros del proyecto base, agrupadas por módulo (una carpeta cada uno). */ export const BASE_MASTER_SCREENS: readonly MasterScreen[] = [...SOCIOS_SCREENS, ...ARTICULOS_SCREENS, ...LOTES_SCREENS, ...FINANZAS_SCREENS]; /** Cada módulo solo puede extender sus propias pantallas: una ruta ajena es un error, no un descuido silencioso. */ function ownedBy(screens: readonly MasterScreen[], extensions: MasterExtensions): MasterExtensions { for (const path of Object.keys(extensions)) { if (!screens.some((s) => s.path === path)) throw new Error(`Extensión con la ruta «${path}», que es de otro módulo`); } return extensions; } /** Lo que el cliente agrega, reunido de los archivos de extensiones de cada módulo. */ export const MASTER_EXTENSIONS: MasterExtensions = { ...ownedBy(SOCIOS_SCREENS, SOCIOS_EXTENSIONS), ...ownedBy(ARTICULOS_SCREENS, ARTICULOS_EXTENSIONS), ...ownedBy(LOTES_SCREENS, LOTES_EXTENSIONS), ...ownedBy(FINANZAS_SCREENS, FINANZAS_EXTENSIONS), }; /** Las pantallas con lo que cada cliente agrega (en `main`, igual al base). */ export const MASTER_SCREENS: readonly MasterScreen[] = applyMasterExtensions(BASE_MASTER_SCREENS, MASTER_EXTENSIONS);