1 | const {minify} = require('terser');
|
2 | const SourceMap = require('../SourceMap');
|
3 |
|
4 | module.exports = async function(asset) {
|
5 | await asset.parseIfNeeded();
|
6 |
|
7 |
|
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 |
|
64 | asset.ast = null;
|
65 | asset.outputCode = result.code;
|
66 | asset.isAstDirty = false;
|
67 | };
|