134 lines
4.1 KiB
JavaScript
134 lines
4.1 KiB
JavaScript
'use strict';
|
|
|
|
const erectorUtils = require('erector-set/src/utils');
|
|
const fs = require('fs-extra');
|
|
const librarianUtils = require('angular-librarian/commands/utilities');
|
|
const path = require('path');
|
|
const rollup = require('rollup');
|
|
const rollupCommon = require('rollup-plugin-commonjs');
|
|
const rollupNodeResolve = require('rollup-plugin-node-resolve');
|
|
const rollupSourcemaps = require('rollup-plugin-sourcemaps');
|
|
const rollupUglify = require('rollup-plugin-uglify');
|
|
|
|
const doRollup = (libName, dirs) => {
|
|
const nameParts = extractName(libName);
|
|
const es5Entry = path.resolve(dirs.es5, `${ nameParts.package }.js`);
|
|
const es2015Entry = path.resolve(dirs.es2015, `${ nameParts.package }.js`);
|
|
const destinations = generateDestinations(dirs.dist, nameParts);
|
|
const baseConfig = generateConfig({
|
|
entry: es5Entry,
|
|
external: [
|
|
'@angular/common',
|
|
'@angular/core'
|
|
],
|
|
globals: {
|
|
'@angular/common': 'ng.common',
|
|
'@angular/core': 'ng.core'
|
|
},
|
|
moduleName: librarianUtils.caseConvert.dashToCamel(nameParts.package),
|
|
onwarn: function rollupOnWarn(warning) {
|
|
// keeps TypeScript this errors down
|
|
if (warning.code !== 'THIS_IS_UNDEFINED') {
|
|
console.warn(warning.message);
|
|
}
|
|
},
|
|
plugins: [
|
|
rollupNodeResolve({
|
|
jsnext: true,
|
|
module: true
|
|
}),
|
|
rollupSourcemaps()
|
|
],
|
|
sourceMap: true
|
|
}, dirs.root);
|
|
const fesm2015Config = Object.assign({}, baseConfig, {
|
|
entry: es2015Entry,
|
|
dest: destinations.fesm2015,
|
|
format: 'es'
|
|
});
|
|
const fesm5Config = Object.assign({}, baseConfig, {
|
|
dest: destinations.fesm5,
|
|
format: 'es'
|
|
});
|
|
const minUmdConfig = Object.assign({}, baseConfig, {
|
|
dest: destinations.minUmd,
|
|
format: 'umd',
|
|
plugins: baseConfig.plugins.concat([rollupUglify({})])
|
|
});
|
|
const umdConfig = Object.assign({}, baseConfig, {
|
|
dest: destinations.umd,
|
|
format: 'umd'
|
|
});
|
|
|
|
const bundles = [
|
|
fesm2015Config,
|
|
fesm5Config,
|
|
minUmdConfig,
|
|
umdConfig
|
|
].map((config) =>
|
|
rollup.rollup(config).then((bundle) =>
|
|
bundle.write(config)
|
|
)
|
|
);
|
|
|
|
return Promise.all(bundles);
|
|
};
|
|
|
|
const extractName = (libName) => {
|
|
const isScoped = librarianUtils.checkIsScopedName(libName);
|
|
const nameParts = {
|
|
package: libName,
|
|
scope: undefined
|
|
};
|
|
|
|
if (isScoped) {
|
|
const parts = libName.split('/', 2);
|
|
|
|
nameParts.package = parts[1];
|
|
nameParts.scope = parts[0];
|
|
}
|
|
|
|
return nameParts;
|
|
};
|
|
|
|
const generateDestinations = (dist, nameParts) => {
|
|
const bundleDest = path.resolve(dist, 'bundles');
|
|
let fesmDest = path.resolve(dist);
|
|
|
|
if (nameParts.scope) {
|
|
fesmDest = path.resolve(fesmDest, nameParts.scope);
|
|
fs.ensureDirSync(fesmDest);
|
|
}
|
|
|
|
return Object.freeze({
|
|
fesm2015: path.resolve(fesmDest,`${ nameParts.package }.js`),
|
|
fesm5: path.resolve(fesmDest,`${ nameParts.package }.es5.js`),
|
|
minUmd: path.resolve(bundleDest, `${ nameParts.package }.umd.min.js`),
|
|
umd: path.resolve(bundleDest, `${ nameParts.package }.umd.js`)
|
|
});
|
|
};
|
|
|
|
const generateConfig = (base, rootDir) => {
|
|
let commonjsIncludes = ['node_modules/rxjs/**'];
|
|
const customLocation = path.resolve(rootDir, 'configs', 'rollup.config.js');
|
|
|
|
if (fs.existsSync(customLocation)) {
|
|
const custom = require(customLocation);
|
|
const external = (custom.external || []).filter((external) => base.external.indexOf(external) === -1);
|
|
const includes = (custom.commonjs || []).filter((include) => commonjsIncludes.indexOf(include) === -1);
|
|
|
|
base.external = base.external.concat(external);
|
|
base.globals = erectorUtils.mergeDeep(custom.globals, base.globals);
|
|
commonjsIncludes = commonjsIncludes.concat(includes);
|
|
}
|
|
|
|
base.plugins.unshift(
|
|
rollupCommon({
|
|
include: commonjsIncludes
|
|
})
|
|
);
|
|
|
|
return base;
|
|
};
|
|
|
|
module.exports = doRollup;
|