1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
import { minify } from 'terser';
import builder from 'core-js-builder';
import config from 'core-js-builder/config.js';
const { cyan, green } = chalk;
const DENO = argv._.includes('deno');
const PATH = DENO ? 'deno/corejs/' : 'packages/core-js-bundle/';
function log(kind, name, code) {
const size = (code.length / 1024).toFixed(2);
echo(green(`${ kind }: ${ cyan(`${ PATH }${ name }.js`) }, size: ${ cyan(`${ size }KB`) }`));
}
async function bundle({ bundled, minified, options = {} }) {
const source = await builder(options);
log('bundling', bundled, source);
await fs.writeFile(`${ PATH }${ bundled }.js`, source);
if (!minified) return;
const { code, map } = await minify(source, {
ecma: 3,
ie8: true,
safari10: true,
keep_fnames: true,
compress: {
hoist_funs: true,
hoist_vars: true,
passes: 2,
pure_getters: true,
// document.all detection case
typeofs: false,
unsafe_proto: true,
unsafe_undefined: true,
},
format: {
max_line_len: 32000,
preamble: config.banner,
webkit: true,
// https://v8.dev/blog/preparser#pife
wrap_func_args: false,
},
sourceMap: {
url: `${ minified }.js.map`,
},
});
await fs.writeFile(`${ PATH }${ minified }.js`, code);
await fs.writeFile(`${ PATH }${ minified }.js.map`, map);
log('minification', minified, code);
}
await bundle(DENO ? {
bundled: 'index',
options: {
targets: { deno: '1.0' },
exclude: [
'esnext.array.filter-out', // obsolete
'esnext.map.update-or-insert', // obsolete
'esnext.map.upsert', // obsolete
'esnext.math.iaddh', // withdrawn
'esnext.math.imulh', // withdrawn
'esnext.math.isubh', // withdrawn
'esnext.math.seeded-prng', // changing of the API, waiting for the spec text
'esnext.math.umulh', // withdrawn
'esnext.object.iterate-entries', // withdrawn
'esnext.object.iterate-keys', // withdrawn
'esnext.object.iterate-values', // withdrawn
'esnext.string.at', // withdrawn
'esnext.symbol.pattern-match', // is not a part of actual proposal, replaced by esnext.symbol.matcher
'esnext.symbol.replace-all', // obsolete
'esnext.typed-array.filter-out', // obsolete
'esnext.weak-map.upsert', // obsolete
],
},
} : {
bundled: 'index',
minified: 'minified',
});
|