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
JavaScript
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 };