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.
15 lines (10 loc) • 487 B
JavaScript
const _ = require('./util');
module.exports = (callback = c => c, ...initialConfigs) => {
const mergeWith = (customiser, ...configs) => {
const reducer = (acc, c) => _.mergeWith(acc, _.invokeOrReturn(c, acc), customiser);
const config = [...initialConfigs, ...configs].flat().reduce(reducer, {});
return callback(config);
};
const merge = (...configs) => mergeWith(undefined, ...configs);
return Object.assign(merge, { merge, mergeWith });
};