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.

32 lines (26 loc) 1.1 kB
const _ = require('../core/util'); const eject = session => () => { const deps = session.dependencies; const composedModules = Object.values(session.log).map(log => log.key); const lines = session.log.flatMap(log => { const funKeys = Object.keys(_.flattenObject({ [log.key]: _.get(session.targetModules, log.path) }, { delimiter: '.' })); return [ '', `const ${log.key} = { ...modules.${log.path} };`, `const ${log.key}Dependencies = { ${[log.key, ...log.depKeys].join(', ')} };`, ...funKeys.map(key => `${key} = ${key}({ ...${log.key}Dependencies });`) ]; }).concat( '', `return { ${['...modules', ...composedModules].join(', ')} };`, '' ); const uniqDeps = Array.from(new Set(Object.values(deps).flat())); const args = uniqDeps.filter(dep => !session.targetModules[dep]); return [ `(modules, { ${args.join(', ')} }) => {`, `${lines.map(line => ' '.repeat(line ? 4 : 0) + line).join('\n')}`, '};' ].join('\n'); }; module.exports = { eject };