diff --git a/packages/core/src/gather.js b/packages/core/src/gather.js index 5605eb4..aeae7b3 100644 --- a/packages/core/src/gather.js +++ b/packages/core/src/gather.js @@ -13,6 +13,17 @@ const debug = D('@latus/core/gather'); export const hotGathered = new Map(); +const transformPath = (transformer, path) => { + const parts = dirname(path).split('/'); + if ('.' === parts[0]) { + parts.shift(); + } + if ('index' === parts[parts.length - 1]) { + parts.pop(); + } + return transformer(join(parts.join('-'), basename(path, extname(path)))); +}; + export const decorateWithLatus = ( context, { @@ -26,20 +37,30 @@ export const decorateWithLatus = ( `decorateWithLatus: require(${path}).default is not a function (from: ${context.id})`, ); } - const parts = dirname(path).split('/'); - if ('.' === parts[0]) { - parts.shift(); - } - if ('index' === parts[parts.length - 1]) { - parts.pop(); - } - const key = transformer(join(parts.join('-'), basename(path, extname(path)))); + const key = transformPath(transformer, path); // eslint-disable-next-line no-param-reassign Gathered[key] = M(Gathered[key], latus); }); return Gathered; }; +export const gatherFlat = ( + context, + { + transformer = camelCase, + } = {}, +) => () => ( + Object.fromEntries( + context.keys() + .map( + (path) => [ + transformPath(transformer, path), + context(path).default, + ], + ), + ) +); + export const gatherWithLatus = ( context, { diff --git a/packages/core/src/index.js b/packages/core/src/index.js index 3992065..08417f2 100644 --- a/packages/core/src/index.js +++ b/packages/core/src/index.js @@ -11,7 +11,12 @@ export {default as ensureUniqueReduction} from './ensure-unique-reduction'; export {default as EventEmitter} from './event-emitter'; export {deflate, inflate} from './flate'; export {compose, fastApply} from './function'; -export {decorateWithLatus, gatherWithLatus, default as gather} from './gather'; +export { + decorateWithLatus, + gatherFlat, + gatherWithLatus, + default as gather, +} from './gather'; export {default as Middleware} from './middleware'; export {default as Latus} from './latus'; export {default as require} from './require';