diff --git a/README.md b/README.md
index 76cca364e..a40a43d24 100644
--- a/README.md
+++ b/README.md
@@ -79,8 +79,8 @@ Repository | Reference | Recent Version
[select2-bootstrap-css][select2-bootstrap-cssGHUrl] | [Documentation][select2-bootstrap-cssDOCUrl] | [![NPM version][select2-bootstrap-cssNPMVersionImage]][select2-bootstrap-cssNPMUrl]
[serve-favicon][serve-faviconGHUrl] | [Documentation][serve-faviconDOCUrl] | [![NPM version][serve-faviconNPMVersionImage]][serve-faviconNPMUrl]
[spdx-license-ids][spdx-license-idsGHUrl] | [Documentation][spdx-license-idsDOCUrl] | [![NPM version][spdx-license-idsNPMVersionImage]][spdx-license-idsNPMUrl]
+[terser][terserGHUrl] | [Documentation][terserDOCUrl] | [![NPM version][terserNPMVersionImage]][terserNPMUrl]
[toobusy-js][toobusy-jsGHUrl]
⋔ [`harmony`][toobusy-jsGHUrlHarmonyUrl] | [Documentation][toobusy-jsDOCUrl] | [![NPM version][toobusy-jsNPMVersionImage]][toobusy-jsNPMUrl]
-[uglifyJS][uglifyJS2GHUrl]
↳ [`harmony`][uglifyJS2GHHarmonyUrl] | [Documentation][uglifyJS2DOCUrl] [¹][uglifyJS2DOC1Url] | [![NPM version][uglifyJS2NPMVersionImage]][uglifyJS2NPMUrl]
↳ [![NPM Harmony version][uglifyJS2NPMHarmonyVersionImage]][uglifyJS2NPMHarmonyUrl]
[underscore][underscoreGHUrl] | [Documentation][underscoreDOCUrl] | [![NPM version][underscoreNPMVersionImage]][underscoreNPMUrl]
[useragent][useragentGHUrl] | [Documentation][useragentDOCUrl] | [![NPM version][useragentNPMVersionImage]][useragentNPMUrl]
[@octokit/rest ᶠᵏᵃ ᵍᶦᵗʰᵘᵇ][githubGHUrl] | [Documentation][githubDOCUrl] | [![NPM version][githubNPMVersionImage]][githubNPMUrl]
@@ -436,21 +436,17 @@ Outdated dependencies list can also be achieved with `$ npm --depth 0 outdated`
[spdx-license-idsNPMUrl]: https://www.npmjs.com/package/spdx-license-ids
[spdx-license-idsNPMVersionImage]: https://img.shields.io/npm/v/spdx-license-ids.svg?style=flat
+[terserGHUrl]: https://github.com/fabiosantoscode/terser
+[terserDOCUrl]: https://github.com/terser-js/terser/blob/master/README.md
+[terserNPMUrl]: https://www.npmjs.com/package/terser
+[terserNPMVersionImage]: https://img.shields.io/npm/v/terser.svg?style=flat
+
[toobusy-jsGHUrl]: https://github.com/STRML/node-toobusy
[toobusy-jsGHUrlHarmonyUrl]: https://github.com/OpenUserJs/node-toobusy/tree/harmony
[toobusy-jsDOCUrl]: https://github.com/STRML/node-toobusy/blob/master/README.md
[toobusy-jsNPMUrl]: https://npmjs.com/package/toobusy-js
[toobusy-jsNPMVersionImage]: https://img.shields.io/npm/v/toobusy-js.svg?style=flat
-[uglifyJS2GHUrl]: https://github.com/mishoo/UglifyJS2
-[uglifyJS2GHHarmonyUrl]: https://github.com/mishoo/UglifyJS2/tree/harmony
-[uglifyJS2DOCUrl]: https://github.com/mishoo/UglifyJS2/blob/master/README.md
-[uglifyJS2DOC1Url]: http://lisperator.net/uglifyjs/
-[uglifyJS2NPMUrl]: https://www.npmjs.com/package/uglify-js
-[uglifyJS2NPMHarmonyUrl]: https://www.npmjs.com/package/uglify-es
-[uglifyJS2NPMVersionImage]: https://img.shields.io/npm/v/uglify-js.svg?style=flat
-[uglifyJS2NPMHarmonyVersionImage]: https://img.shields.io/npm/v/uglify-es.svg?style=flat
-
[underscoreGHUrl]: https://github.com/jashkenas/underscore
[underscoreDOCUrl]: http://underscorejs.org/
[underscoreNPMUrl]: https://www.npmjs.com/package/underscore
diff --git a/app.js b/app.js
index 0ff7e05f7..eeb993b22 100755
--- a/app.js
+++ b/app.js
@@ -28,7 +28,7 @@ var compression = require('compression');
var favicon = require('serve-favicon');
var minify = require('express-minify');
-var uglifyjs = require('uglify-js');
+var Terser = require('terser');
var lessMiddleware = require('less-middleware');
@@ -405,7 +405,7 @@ var minifyErrorHandler = function (aErr, aCallback) {
};
app.use(minify({
- uglifyJsModule: uglifyjs,
+ uglifyJsModule: Terser,
cache: './dev/cache/express-minify/release',
onerror: minifyErrorHandler
}));
@@ -420,7 +420,7 @@ app.use(function(aReq, aRes, aNext) {
/^\/mod\/removed\//.test(pathname)
) {
aRes.minifyOptions = aRes.minifyOptions || {}; // Ensure object exists on response
- aRes.minifyOptions.minify = false; // Skip using release minification because we control this with *uglify-es*
+ aRes.minifyOptions.minify = false; // Skip using release minification because we control this with *terser*
}
aNext();
});
diff --git a/controllers/scriptStorage.js b/controllers/scriptStorage.js
index 854f699df..5d82ffec1 100644
--- a/controllers/scriptStorage.js
+++ b/controllers/scriptStorage.js
@@ -19,7 +19,7 @@ var stream = require('stream');
var peg = require('pegjs');
var AWS = require('aws-sdk');
var S3rver = require('s3rver');
-var UglifyJS = require("uglify-es");
+var Terser = require("terser");
var rfc2047 = require('rfc2047');
var mediaType = require('media-type');
var mediaDB = require('mime-db');
@@ -177,9 +177,9 @@ if (isPro) {
});
}
-// Get UglifyJS harmony installation datestamp once
-var stats = fs.statSync('./node_modules/uglify-es/package.json');
-var mtimeUglifyJS = new Date(util.inspect(stats.mtime));
+// Get Terser installation datestamp once
+var stats = fs.statSync('./node_modules/terser/package.json');
+var mtimeTerser = new Date(util.inspect(stats.mtime));
// Brute initialization
var store = null;
@@ -805,7 +805,7 @@ exports.sendScript = function (aReq, aRes, aNext) {
} else { // Wants to try minified
//
- lastModified = moment(mtimeUglifyJS > aScript.updated ? mtimeUglifyJS : aScript.updated)
+ lastModified = moment(mtimeTerser > aScript.updated ? mtimeTerser : aScript.updated)
.utc().format('ddd, DD MMM YYYY HH:mm:ss') + ' GMT';
// If already client-side... partial HTTP/1.1 Caching
@@ -851,7 +851,7 @@ exports.sendScript = function (aReq, aRes, aNext) {
msg = null;
try {
- result = UglifyJS.minify(source, {
+ result = Terser.minify(source, {
parse: {
bare_returns: true
},
@@ -868,7 +868,7 @@ exports.sendScript = function (aReq, aRes, aNext) {
if (result.error) {
throw result.error; // Passthrough the error if present to our handler
} else if(!result.code) {
- throw new TypeError('UglifyJS error of `code` being absent');
+ throw new TypeError('Terser error of `code` being absent');
} else {
source = result.code;
@@ -878,13 +878,15 @@ exports.sendScript = function (aReq, aRes, aNext) {
' .min.user.js"';
}
} catch (aE) { // On any failure default to unminified
- console.warn([
- 'MINIFICATION WARNING (harmony):',
- ' message: ' + aE.message,
- ' installName: ' + aScript.installName,
- ' line: ' + aE.line + ' col: ' + aE.col + ' pos: ' + aE.pos
-
- ].join('\n'));
+ if (isDev) {
+ console.warn([
+ 'MINIFICATION WARNING (harmony):',
+ ' message: ' + aE.message,
+ ' installName: ' + aScript.installName,
+ ' line: ' + aE.line + ' col: ' + aE.col + ' pos: ' + aE.pos
+
+ ].join('\n'));
+ }
// Set up a `Warning` header with Q encoding under RFC2047
msg = [
diff --git a/package.json b/package.json
index cdcf56157..752236558 100644
--- a/package.json
+++ b/package.json
@@ -63,9 +63,8 @@
"select2-bootstrap-css": "1.4.6",
"serve-favicon": "2.5.0",
"spdx-license-ids": "3.0.1",
+ "terser": "3.8.2",
"toobusy-js": "0.5.1",
- "uglify-js": "3.3.9",
- "uglify-es": "3.3.9",
"underscore": "1.9.1",
"useragent": "2.3.0"
},