-
-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Copy pathbundle-package.mjs
80 lines (72 loc) · 2.43 KB
/
bundle-package.mjs
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',
});