@roots/bud-build
Version:
bud.js core module
36 lines (35 loc) • 1.29 kB
JavaScript
import * as items from '@roots/bud-build/items';
import * as loaders from '@roots/bud-build/loaders';
import * as rules from '@roots/bud-build/rules';
import kebabCase from '@roots/bud-support/kebabCase';
/**
* Register built-in {@link loaders}, {@link items} and {@link rules}
*/
async function register(bud) {
await Promise.all([
...Object.entries(loaders).map(makeRegister(bud, bud.build.setLoader)),
...Object.entries(items).map(makeRegister(bud, bud.build.setItem)),
]);
// this is a bit of a hack
// that sets the base stylesheet loader
// to minicss in production and style-loader in development
bud.build.items.precss = bud.isProduction
? bud.build.items.minicss
: bud.build.items.style;
await Promise.all(Object.entries(rules).map(makeRegister(bud, bud.build.setRule))).catch(e => {
throw e;
});
}
/**
* Registry factory
*/
const makeRegister = ({ build, hooks, isProduction, module: { resolve }, path }, setRule) => async ([key, factory]) => setRule(kebabCase(key), await factory({
filter: hooks.filter,
isProduction,
makeItem: build.makeItem,
makeLoader: build.makeLoader,
makeRule: build.makeRule,
path,
resolve,
}));
export { items, loaders, makeRegister, register, rules };