33 lines
1.8 KiB
TypeScript
33 lines
1.8 KiB
TypeScript
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);
|