@roots/bud
Version:
Configurable, extensible build tools for modern single and multi-page web applications
55 lines (54 loc) • 2.18 kB
JavaScript
const CORE_MODULES = [
`/bud-api`,
`/bud-build`,
`/bud-cache`,
`/bud-client`,
`/bud-compiler`,
`/bud-dashboard`,
`/bud-extensions`,
`/bud-framework`,
`/bud-hooks`,
`/bud-server`,
];
const extensions = {
builtIn: [
`/bud-entrypoints`,
`/bud-minify`,
`/bud-extensions/cdn`,
`/bud-extensions/esm`,
`/bud-extensions/fix-style-only-entrypoints`,
`/bud-extensions/clean-webpack-plugin`,
`/bud-extensions/copy-webpack-plugin`,
`/bud-extensions/html-webpack-plugin`,
`/bud-extensions/import-map`,
`/bud-extensions/interpolate-html-webpack-plugin`,
`/bud-extensions/mini-css-extract-plugin`,
`/bud-extensions/webpack-define-plugin`,
`/bud-extensions/webpack-hot-module-replacement-plugin`,
`/bud-extensions/webpack-lifecycle-plugin`,
`/bud-extensions/webpack-manifest-plugin`,
`/bud-extensions/webpack-profile-plugin`,
`/bud-extensions/webpack-provide-plugin`,
`/bud-extensions/tsconfig-values`,
],
discovered: [],
};
export default (manifest, ...sets) => {
sets.forEach(set => set && extensions.discovered.push(...set));
manifest &&
Object.keys({
...(manifest?.devDependencies ?? {}),
...(manifest?.dependencies ?? {}),
})
.filter(signifier => signifier.startsWith(`/bud-`) ||
signifier.startsWith(`/sage`) ||
signifier.startsWith(`bud-`))
.filter(signifier => !CORE_MODULES.some(coreSignifier => signifier === coreSignifier))
.filter(signifier => !manifest.bud?.denylist ||
!manifest.bud.denylist.includes(signifier))
.filter(signifier => !manifest.bud?.allowlist ||
manifest.bud.allowlist.includes(signifier))
.flatMap(signifier => signifier.split(`,`))
.map((signifier) => extensions.discovered.push(signifier));
return extensions;
};