Skip to content

Commit 5058a81

Browse files
authored
Merge pull request #49 from Turbo87/uglify-js-3
Update to "uglify-js" v3.0.24
2 parents f30d4fe + ada5802 commit 5058a81

File tree

9 files changed

+58
-160
lines changed

9 files changed

+58
-160
lines changed

README.md

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,13 @@ var uglified = uglify(input);
1919

2020
// advanced usage
2121
var uglified = uglify(input, {
22-
mangle: true, // defaults to true
23-
compress: true, // defaults to true
24-
sourceMapIncludeSources: true // defaults to true
25-
exclude: [..] // array of globs, to not minify
26-
//...
27-
sourceMapConfig: {
28-
enabled: true, // defaults to true
29-
extensions: [ 'js' ] // defaults to [ 'js' ]
22+
exclude: [..], // array of globs, to not minify
23+
24+
uglify: {
25+
mangle: false, // defaults to true
26+
compress: false, // defaults to true
27+
sourceMap: false, // defaults to true
28+
//...
3029
}
3130
});
3231
```

index.js

Lines changed: 36 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
'use strict';
2+
13
var walkSync = require('walk-sync');
24
var Plugin = require('broccoli-plugin');
35
var UglifyJS = require('uglify-js');
46
var path = require('path');
57
var fs = require('fs');
6-
var merge = require('lodash.merge');
8+
var defaults = require('lodash.defaultsdeep');
79
var symlinkOrCopy = require('symlink-or-copy');
810
var mkdirp = require('mkdirp');
911
var srcURL = require('source-map-url');
@@ -23,16 +25,12 @@ function UglifyWriter (inputNodes, options) {
2325
inputNodes = Array.isArray(inputNodes) ? inputNodes : [inputNodes];
2426

2527
Plugin.call(this, inputNodes, options);
26-
this.options = merge({
27-
mangle: true,
28-
compress: true,
29-
sourceMapIncludeSources: true
30-
}, options);
3128

32-
this.sourceMapConfig = merge({
33-
enabled: true,
34-
extensions: ['js']
35-
}, this.options.sourceMapConfig);
29+
this.options = defaults(options, {
30+
uglify: {
31+
sourceMap: {},
32+
},
33+
});
3634

3735
this.inputNodes = inputNodes;
3836

@@ -80,67 +78,50 @@ UglifyWriter.prototype.build = function () {
8078
return this.outputPath;
8179
};
8280

83-
UglifyWriter.prototype.enableSourcemaps = function() {
84-
return this.sourceMapConfig.enabled &&
85-
this.sourceMapConfig.extensions.indexOf('js') > -1;
86-
};
87-
88-
UglifyWriter.prototype.mapURL = function(mapName) {
89-
if (this.enableSourcemaps()) {
90-
if (this.sourceMapConfig.mapDir) {
91-
return '/' + path.join(this.sourceMapConfig.mapDir, mapName);
92-
} else {
93-
return mapName;
94-
}
95-
}
96-
};
97-
9881
UglifyWriter.prototype.processFile = function(inFile, outFile, relativePath, outDir) {
9982
var src = fs.readFileSync(inFile, 'utf-8');
10083
var mapName = path.basename(outFile).replace(/\.js$/,'') + '.map';
101-
var mapDir;
10284

103-
if (this.sourceMapConfig.mapDir) {
104-
mapDir = path.join(outDir, this.sourceMapConfig.mapDir);
85+
var mapDir;
86+
if (this.options.sourceMapDir) {
87+
mapDir = path.join(outDir, this.options.sourceMapDir);
10588
} else {
10689
mapDir = path.dirname(path.join(outDir, relativePath));
10790
}
10891

109-
var opts = {
110-
fromString: true,
111-
outSourceMap: this.mapURL(mapName),
112-
enableSourcemaps: this.enableSourcemaps()
113-
};
114-
115-
if (opts.enableSourcemaps && srcURL.existsIn(src)) {
116-
var url = srcURL.getFrom(src);
117-
opts.inSourceMap = path.join(path.dirname(inFile), url);
118-
}
92+
let options = defaults({}, this.options.uglify);
93+
if (options.sourceMap) {
94+
let filename = path.basename(inFile);
95+
let url = this.options.sourceMapDir ? '/' + path.join(this.options.sourceMapDir, mapName) : mapName;
11996

120-
try {
121-
var start = new Date();
122-
debug('[starting]: %s %dKB', relativePath, (src.length / 1000));
123-
var result = UglifyJS.minify(src, merge(opts, this.options));
124-
var end = new Date();
125-
var total = end - start;
126-
debug('[finished]: %s %dKB in %dms', relativePath, (result.code.length / 1000), total);
97+
let sourceMap = { filename, url };
12798

128-
if (total > 20000 && process.argv.indexOf('--silent') === -1) {
129-
console.warn('[WARN] (broccoli-uglify-sourcemap) Minifying: `' + relativePath + '` took: ' + total + 'ms (more than 20,000ms)');
99+
if (srcURL.existsIn(src)) {
100+
let url = srcURL.getFrom(src);
101+
sourceMap.content = JSON.parse(fs.readFileSync(path.join(path.dirname(inFile), url)));
130102
}
131103

104+
options = defaults(options, { sourceMap });
105+
}
106+
107+
var start = new Date();
108+
debug('[starting]: %s %dKB', relativePath, (src.length / 1000));
109+
var result = UglifyJS.minify(src, options);
110+
var end = new Date();
111+
var total = end - start;
112+
debug('[finished]: %s %dKB in %dms', relativePath, (result.code.length / 1000), total);
132113

133-
} catch(e) {
134-
e.filename = relativePath;
135-
throw e;
114+
if (total > 20000 && process.argv.indexOf('--silent') === -1) {
115+
console.warn('[WARN] (broccoli-uglify-sourcemap) Minifying: `' + relativePath + '` took: ' + total + 'ms (more than 20,000ms)');
136116
}
137117

138-
if (opts.enableSourcemaps) {
139-
var newSourceMap = JSON.parse(result.map);
118+
if (result.error) {
119+
result.error.filename = relativePath;
120+
throw result.error;
121+
}
140122

141-
// uglify is wrong about this and always puts the maps own name
142-
// here.
143-
newSourceMap.file = path.basename(inFile);
123+
if (options.sourceMap) {
124+
var newSourceMap = JSON.parse(result.map);
144125

145126
newSourceMap.sources = newSourceMap.sources.map(function(path){
146127
// If out output file has the same name as one of our original

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@
2323
"dependencies": {
2424
"broccoli-plugin": "^1.2.1",
2525
"debug": "^2.2.0",
26-
"lodash.merge": "^4.5.1",
26+
"lodash.defaultsdeep": "^4.6.0",
2727
"matcher-collection": "^1.0.0",
2828
"mkdirp": "^0.5.0",
2929
"source-map-url": "^0.3.0",
3030
"symlink-or-copy": "^1.0.1",
31-
"uglify-js": "^2.7.0",
31+
"uglify-js": "^3.0.24",
3232
"walk-sync": "^0.1.3"
3333
},
3434
"devDependencies": {

test/expected/no-upstream-sourcemap.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/expected/no-upstream-sourcemap.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/expected/with-upstream-sourcemap.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/expected/with-upstream-sourcemap.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

test/test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ describe('broccoli-uglify-sourcemap', function() {
2424
});
2525

2626
it('can disable sourcemaps', function() {
27-
var tree = new uglify(fixtures, { sourceMapConfig: { enabled: false } });
27+
var tree = new uglify(fixtures, { uglify: { sourceMap: false } });
2828
builder = new broccoli.Builder(tree);
2929
return builder.build().then(function(result) {
3030
expectFile('with-upstream-sourcemap.js').withoutSourcemapURL().in(result, 'inside');
@@ -52,7 +52,7 @@ describe('broccoli-uglify-sourcemap', function() {
5252

5353

5454
it('supports alternate sourcemap location', function() {
55-
var tree = new uglify(fixtures, { sourceMapConfig: { mapDir: 'maps'}});
55+
var tree = new uglify(fixtures, { sourceMapDir: 'maps' });
5656
builder = new broccoli.Builder(tree);
5757
return builder.build().then(function(result) {
5858
expectFile('with-upstream-sourcemap.js').withSourcemapURL('/maps/with-upstream-sourcemap.map').in(result, 'inside');

yarn.lock

Lines changed: 7 additions & 89 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,6 @@
22
# yarn lockfile v1
33

44

5-
align-text@^0.1.1, align-text@^0.1.3:
6-
version "0.1.4"
7-
resolved "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
8-
dependencies:
9-
kind-of "^3.0.2"
10-
longest "^1.0.1"
11-
repeat-string "^1.5.2"
12-
135
amdefine@>=0.0.4:
146
version "1.0.1"
157
resolved "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
@@ -86,32 +78,13 @@ bytes@1, [email protected]:
8678
version "1.0.0"
8779
resolved "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8"
8880

89-
camelcase@^1.0.2:
90-
version "1.2.1"
91-
resolved "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
92-
93-
center-align@^0.1.1:
94-
version "0.1.3"
95-
resolved "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
96-
dependencies:
97-
align-text "^0.1.3"
98-
lazy-cache "^1.0.3"
99-
10081
chai@^1.10.0:
10182
version "1.10.0"
10283
resolved "https://registry.npmjs.org/chai/-/chai-1.10.0.tgz#e4031cc87654461a75943e5a35ab46eaf39c1eb9"
10384
dependencies:
10485
assertion-error "1.0.0"
10586
deep-eql "0.1.3"
10687

107-
cliui@^2.1.0:
108-
version "2.1.0"
109-
resolved "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
110-
dependencies:
111-
center-align "^0.1.1"
112-
right-align "^0.1.1"
113-
wordwrap "0.0.2"
114-
11588
11689
version "0.6.1"
11790
resolved "https://registry.npmjs.org/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06"
@@ -120,7 +93,7 @@ [email protected]:
12093
version "2.3.0"
12194
resolved "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873"
12295

123-
commander@^2.0.0:
96+
commander@^2.0.0, commander@~2.9.0:
12497
version "2.9.0"
12598
resolved "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
12699
dependencies:
@@ -161,10 +134,6 @@ debug@~2.0.0:
161134
dependencies:
162135
ms "0.6.2"
163136

164-
decamelize@^1.0.0:
165-
version "1.2.0"
166-
resolved "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
167-
168137
169138
version "0.1.3"
170139
resolved "https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2"
@@ -281,43 +250,25 @@ inherits@2:
281250
version "2.0.3"
282251
resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
283252

284-
is-buffer@^1.0.2:
285-
version "1.1.4"
286-
resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
287-
288253
289254
version "0.26.3"
290255
resolved "https://registry.npmjs.org/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c"
291256
dependencies:
292257
commander "0.6.1"
293258
mkdirp "0.3.0"
294259

295-
kind-of@^3.0.2:
296-
version "3.1.0"
297-
resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
298-
dependencies:
299-
is-buffer "^1.0.2"
300-
301-
lazy-cache@^1.0.3:
302-
version "1.0.4"
303-
resolved "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
304-
305260
livereload-js@^2.2.0:
306261
version "2.2.2"
307262
resolved "https://registry.npmjs.org/livereload-js/-/livereload-js-2.2.2.tgz#6c87257e648ab475bc24ea257457edcc1f8d0bc2"
308263

309-
lodash.merge@^4.5.1:
264+
lodash.defaultsdeep@^4.6.0:
310265
version "4.6.0"
311-
resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5"
266+
resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz#bec1024f85b1bd96cbea405b23c14ad6443a6f81"
312267

313268
lodash@~2.4.1:
314269
version "2.4.2"
315270
resolved "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz#fadd834b9683073da179b3eae6d9c0d15053f73e"
316271

317-
longest@^1.0.1:
318-
version "1.0.1"
319-
resolved "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
320-
321272
lru-cache@2:
322273
version "2.7.3"
323274
resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
@@ -465,16 +416,6 @@ [email protected]:
465416
bytes "1"
466417
iconv-lite "0.4.4"
467418

468-
repeat-string@^1.5.2:
469-
version "1.6.1"
470-
resolved "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
471-
472-
right-align@^0.1.1:
473-
version "0.1.3"
474-
resolved "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
475-
dependencies:
476-
align-text "^0.1.1"
477-
478419
rimraf@^2.3.4:
479420
version "2.5.4"
480421
resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
@@ -545,14 +486,12 @@ type-is@~1.5.1:
545486
media-typer "0.3.0"
546487
mime-types "~2.0.9"
547488

548-
uglify-js@^2.7.0:
549-
version "2.7.5"
550-
resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
489+
uglify-js@^3.0.24:
490+
version "3.0.24"
491+
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.0.24.tgz#ee93400ad9857fb7a1671778db83f6a23f033121"
551492
dependencies:
552-
async "~0.2.6"
493+
commander "~2.9.0"
553494
source-map "~0.5.1"
554-
uglify-to-browserify "~1.0.0"
555-
yargs "~3.10.0"
556495

557496
uglify-js@~2.3:
558497
version "2.3.6"
@@ -562,10 +501,6 @@ uglify-js@~2.3:
562501
optimist "~0.3.5"
563502
source-map "~0.1.7"
564503

565-
uglify-to-browserify@~1.0.0:
566-
version "1.0.2"
567-
resolved "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
568-
569504
underscore.string@~2.3.3:
570505
version "2.3.3"
571506
resolved "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz#71c08bf6b428b1133f37e78fa3a21c82f7329b0d"
@@ -592,27 +527,10 @@ websocket-extensions@>=0.1.1:
592527
version "0.1.1"
593528
resolved "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.1.tgz#76899499c184b6ef754377c2dbb0cd6cb55d29e7"
594529

595-
596-
version "0.1.0"
597-
resolved "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
598-
599-
600-
version "0.0.2"
601-
resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
602-
603530
wordwrap@~0.0.2:
604531
version "0.0.3"
605532
resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
606533

607534
wrappy@1:
608535
version "1.0.2"
609536
resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
610-
611-
yargs@~3.10.0:
612-
version "3.10.0"
613-
resolved "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
614-
dependencies:
615-
camelcase "^1.0.2"
616-
cliui "^2.1.0"
617-
decamelize "^1.0.0"
618-
window-size "0.1.0"

0 commit comments

Comments
 (0)