bigint-crypto-utils/build/build.rollup.js

135 lines
3.6 KiB
JavaScript
Raw Normal View History

2019-04-19 07:42:28 +00:00
'use strict';
const rollup = require('rollup');
const replace = require('rollup-plugin-replace');
const minify = require('rollup-plugin-babel-minify');
const fs = require('fs');
const path = require('path');
const pkgJson = require('../package.json');
const rootDir = path.join(__dirname, '..');
const srcDir = path.join(rootDir, 'src');
const dstDir = path.join(rootDir, 'dist');
const buildOptions = [
{ // Browser
input: {
input: path.join(srcDir, 'main.js'),
plugins: [
replace({
'process.browser': true
})
]
},
output: {
file: path.join(dstDir, `${pkgJson.name}-${pkgJson.version}.browser.js`),
format: 'iife',
name: camelise(pkgJson.name)
}
},
// { // Browser minified
// input: {
// input: path.join(srcDir, 'main.js'),
// plugins: [
// replace({
// 'process.browser': true
// }),
// minify({
// 'comments': false
// })
// ],
// },
// output: {
// file: path.join(dstDir, `${pkgJson.name}-${pkgJson.version}.browser.min.js`),
// format: 'iife',
// name: camelise(pkgJson.name)
// }
// },
{ // Browser esm
input: {
input: path.join(srcDir, 'main.js'),
plugins: [
replace({
'process.browser': true
})
]
},
output: {
file: path.join(dstDir, `${pkgJson.name}-${pkgJson.version}.browser.mod.js`),
format: 'esm'
}
},
// { // Browser esm minified
// input: {
// input: path.join(srcDir, 'main.js'),
// plugins: [
// replace({
// 'process.browser': true
// }),
// minify({
// 'comments': false
// })
// ],
// },
// output: {
// file: path.join(dstDir, `${pkgJson.name}-${pkgJson.version}.browser.mod.min.js`),
// format: 'esm'
// }
// },
{ // Node
input: {
input: path.join(srcDir, 'main.js'),
plugins: [
replace({
'process.browser': false
})
]
},
output: {
file: path.join(dstDir, `${pkgJson.name}-${pkgJson.version}.node.js`),
format: 'cjs'
}
}
];
for (const options of buildOptions) {
build(options);
}
// Let's manually build the worker file
const workerFilename = path.join(srcDir, 'workerPrimalityTest.js');
const dstFileName = path.join(dstDir, 'workerPrimalityTest.js');
const workerFile = fs.readFileSync(workerFilename, 'utf-8');
fs.writeFileSync(dstFileName, workerFile.replace('{{IIFE}}', `./${pkgJson.name}-latest.browser.js`));
/* --- HELPLER FUNCTIONS --- */
async function build(options) {
// create a bundle
const bundle = await rollup.rollup(options.input);
// generate code
await bundle.generate(options.output);
// or write the bundle to disk
await bundle.write(options.output);
// copy the latest build as pkg_name-latest
fs.copyFileSync(
options.output.file,
options.output.file.replace(`${pkgJson.name}-${pkgJson.version}.`, `${pkgJson.name}-latest.`)
);
}
function camelise(str) {
return str.replace(/-([a-z])/g,
function (m, w) {
return w.toUpperCase();
});
}