beyond
Version:
The Full Stack Universal Typescript Framework
39 lines (35 loc) • 1.63 kB
JavaScript
/**
* Build a bundle of a module
*
* @param extname {string} Can be '.js' or '.css'
* @param specs {object} {path, module, bundle, distribution, language, uglifier, builder, exports, externals}
* @specs path {string} The build target path
* @specs module {object} The module
* @specs bundle {object} The bundle being exported
* @specs distribution {object} The distribution specification
* @specs language {string} The language
* @specs uglifier {object}
* @specs builder {object} The builder object
* @specs exports {Set<string>} The resources being exported
* @specs externals {Set<string>} The externals resources
* @specs specs {build: boolean, compile: boolean} Process specs
* @return {Promise<void>}
*/
module.exports = async function (extname, specs) {
const { bundle, language, distribution, builder, processSpecs } = specs;
const packager = await bundle.packagers.get(distribution, language);
const code = packager[extname === '.js' ? 'js' : 'css'];
if (!code) return;
await code.ready;
if (!code.valid) {
const { id, name } = bundle.container;
const error = ` . Bundle "${bundle.name}" on module "${name}" is not valid.`;
builder.emit('error', error, { main: true, module: id });
code.errors?.forEach(message => builder.emit('error', ` -> ${message}`, { module: id }));
return;
}
if (!code.processorsCount || !code.code()) return;
const { build, declarations } = processSpecs;
build && (await require('./save')(packager, code, extname, specs));
declarations && (await require('./declarations')(packager, distribution, builder));
};