UNPKG

1.49 kBJavaScriptView Raw
1const {minify} = require('terser');
2const SourceMap = require('../SourceMap');
3
4module.exports = async function(asset) {
5 await asset.parseIfNeeded();
6
7 // Convert AST into JS
8 let source = (await asset.generate())[0].value;
9
10 let customConfig = await asset.getConfig(['.uglifyrc', '.terserrc']);
11 let options = {
12 warnings: true,
13 safari10: true,
14 mangle: {
15 toplevel: !asset.options.scopeHoist
16 }
17 };
18
19 let sourceMap;
20 if (asset.options.sourceMaps) {
21 sourceMap = new SourceMap();
22 options.output = {
23 source_map: {
24 add(source, gen_line, gen_col, orig_line, orig_col, name) {
25 sourceMap.addMapping({
26 source,
27 name,
28 original: {
29 line: orig_line,
30 column: orig_col
31 },
32 generated: {
33 line: gen_line,
34 column: gen_col
35 }
36 });
37 }
38 }
39 };
40 }
41
42 if (customConfig) {
43 options = Object.assign(options, customConfig);
44 }
45
46 let result = minify(source, options);
47
48 if (result.error) {
49 throw result.error;
50 }
51
52 if (sourceMap) {
53 if (asset.sourceMap) {
54 asset.sourceMap = await new SourceMap().extendSourceMap(
55 asset.sourceMap,
56 sourceMap
57 );
58 } else {
59 asset.sourceMap = sourceMap;
60 }
61 }
62
63 // babel-generator did our code generation for us, so remove the old AST
64 asset.ast = null;
65 asset.outputCode = result.code;
66 asset.isAstDirty = false;
67};