UNPKG

module-composer

Version:

Bring order to chaos. Level up your JS application architecture with Module Composer, a tiny but powerful module composition utility based on functional dependency injection.

19 lines (16 loc) 796 B
const precompose = session => ({ key, deps, self, options }) => { const aliasByModule = session.setState({ [key]: options.moduleAlias }); const selfAlias = Object.fromEntries(options.moduleAlias.map(alias => { if (deps?.[alias]) throw new Error(`${alias} already exists`); return [alias, self]; })); const aliases = Object.fromEntries(Object.keys(deps ?? {}).flatMap(depKey => { const aliases = aliasByModule[depKey] ?? []; return aliases.map(alias => [alias, session.modules[depKey]]); })); return { deps: { ...deps, ...aliases, ...selfAlias } }; }; const postcompose = session => ({ target, options }) => { options.moduleAlias.forEach(alias => session.registerAlias(alias, target)); }; module.exports = { precompose, postcompose };