beyond
Version:
The Full Stack Universal Typescript Framework
54 lines (42 loc) • 2.11 kB
JavaScript
const p = require('path');
const { fs } = global.utils;
/**
* Build module bundles
*
* @param packager {object}
* @param code {code}
* @param extname {string}
* @param specs {builder, module, distribution, processSpecs}
* @returns {Promise<void>}
*/
module.exports = async function (packager, code, extname, specs) {
'use strict';
const { path, module, bundle, distribution, language, uglifier, builder, exports, externals } = specs;
await require('./externals')(packager, distribution, externals);
const { specifier, subpath } = bundle;
const bName = subpath + (language ? `.${language}` : '');
const items = { subpath: bName, extensions: [], platforms: module.platforms };
if (exports.has(specifier)) {
const bundleExport = exports.get(specifier);
bundleExport.extensions && (items.extensions = bundleExport.extensions.concat(items.extensions));
}
exports.set(specifier, subpath.replace(/\\/g, '/'));
const type = extname === '.js' ? 'js' : 'css.js';
const buildCode = await require('./sourcemaps')(bundle, code, extname, path, distribution.maps, type, language);
const processorName = extname === '.css' ? 'scss' : packager.bundle.name === 'txt' ? 'txt' : 'ts';
await require('./sourcemaps/sources')(distribution.maps, packager, processorName, path, builder, language);
const resource =
builder.application.package !== module.container.package ? `packages/${bundle.vspecifier}` : subpath;
const filename = resource + (language ? `.${language}` : '') + extname;
const target = p.join(path, filename);
const ext = extname === '.js' ? 'js' : 'css';
if (!distribution.minify[ext]) {
builder.emit('message', ` . File ${filename} saved.`);
return fs.save(target, buildCode);
}
let css, errors;
({ code, css, errors } = uglifier.uglify(target, buildCode));
errors && builder.emit('error', ` . Error uglifying bundle "${subpath}"`);
errors?.forEach(({ message, line, col }) => builder.emit('error', ` -> [${line}, ${col}] ${message}`));
!errors && (await fs.save(target, ext === 'css' ? css : code));
};