flecks/packages/core/build/fleckspack.config.js

66 lines
2.1 KiB
JavaScript
Raw Normal View History

2024-01-16 00:28:20 -06:00
require('source-map-support/register');
const D = require('./debug');
const Server = require('./server');
const debug = D('@flecks/core/build/fleckspack.config.js');
const {
FLECKS_CORE_BUILD_LIST = '',
} = process.env;
const buildList = FLECKS_CORE_BUILD_LIST
.split(',')
.map((name) => name.trim())
.filter((e) => e);
module.exports = async (env, argv) => {
debug('bootstrapping flecks...');
const flecks = await Server.from();
debug('bootstrapped');
debug('gathering configs');
const {targets} = flecks;
const building = targets
.filter(([, target]) => 0 === buildList.length || buildList.includes(target));
debug('building: %O', building.map(([target]) => target));
if (0 === building.length) {
debug('no build configuration found! aborting...');
await new Promise(() => {});
}
const entries = await Promise.all(building.map(
async ([fleck, target]) => {
const configFn = require(await flecks.resolveBuildConfig(`${target}.webpack.config.js`, fleck));
if ('function' !== typeof configFn) {
debug(`'${
target
}' build configuration expected function got ${
typeof configFn
}! aborting...`);
return undefined;
}
return [target, await configFn(env, argv, flecks)];
},
));
await Promise.all(
entries.map(async ([target, config]) => (
Promise.all(flecks.invokeFlat('@flecks/core.build', target, config, env, argv))
)),
);
const webpackConfigs = Object.fromEntries(entries);
await Promise.all(flecks.invokeFlat('@flecks/core.build.alter', webpackConfigs, env, argv));
const enterableWebpackConfigs = Object.values(webpackConfigs)
.filter((webpackConfig) => {
if (!webpackConfig.entry) {
debug('webpack configurations %O had no entry... discarding', webpackConfig);
return false;
}
return true;
});
if (0 === enterableWebpackConfigs.length) {
debug('no webpack configuration found! aborting...');
await new Promise(() => {});
}
debug('webpack configurations %O', enterableWebpackConfigs);
return enterableWebpackConfigs;
};