terser-webpack-plugin
Advanced tools
Comparing version 1.4.5 to 1.4.6
"use strict"; | ||
const plugin = require('./index'); | ||
module.exports = plugin.default; |
@@ -7,35 +7,33 @@ "use strict"; | ||
exports.default = void 0; | ||
var _crypto = _interopRequireDefault(require("crypto")); | ||
var _path = _interopRequireDefault(require("path")); | ||
var _sourceMap = require("source-map"); | ||
var _webpackSources = require("webpack-sources"); | ||
var _RequestShortener = _interopRequireDefault(require("webpack/lib/RequestShortener")); | ||
var _ModuleFilenameHelpers = _interopRequireDefault(require("webpack/lib/ModuleFilenameHelpers")); | ||
var _schemaUtils = _interopRequireDefault(require("schema-utils")); | ||
var _serializeJavascript = _interopRequireDefault(require("serialize-javascript")); | ||
var _package = _interopRequireDefault(require("terser/package.json")); | ||
var _options = _interopRequireDefault(require("./options.json")); | ||
var _TaskRunner = _interopRequireDefault(require("./TaskRunner")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } | ||
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } | ||
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } | ||
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } | ||
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint-disable | ||
no-param-reassign | ||
*/ | ||
const warningRegex = /\[.+:([0-9]+),([0-9]+)\]/; | ||
const internalCreateHash = algorithm => { | ||
try { | ||
// eslint-disable-next-line global-require | ||
const createHash = require('webpack/lib/util/createHash'); | ||
return createHash(algorithm); | ||
} catch (err) { | ||
// Ignore | ||
} | ||
// eslint-disable-next-line global-require | ||
return require('crypto').createHash(algorithm); | ||
}; | ||
class TerserPlugin { | ||
@@ -77,3 +75,2 @@ constructor(options = {}) { | ||
} | ||
static isSourceMap(input) { | ||
@@ -84,3 +81,2 @@ // All required options for `new SourceMapConsumer(...options)` | ||
} | ||
static buildSourceMap(inputSourceMap) { | ||
@@ -90,6 +86,4 @@ if (!inputSourceMap || !TerserPlugin.isSourceMap(inputSourceMap)) { | ||
} | ||
return new _sourceMap.SourceMapConsumer(inputSourceMap); | ||
} | ||
static buildError(err, file, sourceMap, requestShortener) { | ||
@@ -102,7 +96,5 @@ // Handling error which should have line, col, filename and message | ||
}); | ||
if (original && original.source && requestShortener) { | ||
return new Error(`${file} from Terser\n${err.message} [${requestShortener.shorten(original.source)}:${original.line},${original.column}][${file}:${err.line},${err.col}]`); | ||
} | ||
return new Error(`${file} from Terser\n${err.message} [${file}:${err.line},${err.col}]`); | ||
@@ -112,6 +104,4 @@ } else if (err.stack) { | ||
} | ||
return new Error(`${file} from Terser\n${err.message}`); | ||
} | ||
static buildWarning(warning, file, sourceMap, requestShortener, warningsFilter) { | ||
@@ -121,6 +111,4 @@ let warningMessage = warning; | ||
let source = null; | ||
if (sourceMap) { | ||
const match = warningRegex.exec(warning); | ||
if (match) { | ||
@@ -133,3 +121,2 @@ const line = +match[1]; | ||
}); | ||
if (original && original.source && original.source !== file && requestShortener) { | ||
@@ -144,10 +131,7 @@ ({ | ||
} | ||
if (warningsFilter && !warningsFilter(warning, source)) { | ||
return null; | ||
} | ||
return `Terser Plugin: ${warningMessage}${locationMessage}`; | ||
} | ||
apply(compiler) { | ||
@@ -158,3 +142,2 @@ const buildModuleFn = moduleArg => { | ||
}; | ||
const optimizeFn = (compilation, chunks, callback) => { | ||
@@ -173,10 +156,7 @@ const taskRunner = new _TaskRunner.default({ | ||
const asset = compilation.assets[file]; | ||
if (processedAssets.has(asset)) { | ||
return; | ||
} | ||
try { | ||
let input; | ||
if (this.options.sourceMap && asset.sourceAndMap) { | ||
@@ -188,3 +168,2 @@ const { | ||
input = source; | ||
if (TerserPlugin.isSourceMap(map)) { | ||
@@ -199,10 +178,8 @@ inputSourceMap = map; | ||
inputSourceMap = null; | ||
} // Handling comment extraction | ||
} | ||
// Handling comment extraction | ||
let commentsFile = false; | ||
if (this.options.extractComments) { | ||
commentsFile = this.options.extractComments.filename || `${file}.LICENSE`; | ||
if (typeof commentsFile === 'function') { | ||
@@ -212,3 +189,2 @@ commentsFile = commentsFile(file); | ||
} | ||
const task = { | ||
@@ -223,3 +199,2 @@ file, | ||
}; | ||
if (this.options.cache) { | ||
@@ -232,7 +207,6 @@ const defaultCacheKeys = { | ||
'terser-webpack-plugin-options': this.options, | ||
hash: _crypto.default.createHash('md4').update(input).digest('hex') | ||
hash: internalCreateHash('md4').update(input).digest('hex') | ||
}; | ||
task.cacheKeys = this.options.cacheKeys(defaultCacheKeys, file); | ||
} | ||
tasks.push(task); | ||
@@ -248,3 +222,2 @@ } catch (error) { | ||
} | ||
results.forEach((data, index) => { | ||
@@ -267,9 +240,8 @@ const { | ||
let sourceMap = null; | ||
if (error || warnings && warnings.length > 0) { | ||
sourceMap = TerserPlugin.buildSourceMap(inputSourceMap); | ||
} // Handling results | ||
} | ||
// Handling results | ||
// Error case: add errors, and go to next file | ||
if (error) { | ||
@@ -279,5 +251,3 @@ compilation.errors.push(TerserPlugin.buildError(error, file, sourceMap, new _RequestShortener.default(compiler.context))); | ||
} | ||
let outputSource; | ||
if (map) { | ||
@@ -287,5 +257,5 @@ outputSource = new _webpackSources.SourceMapSource(code, file, JSON.parse(map), input, inputSourceMap, true); | ||
outputSource = new _webpackSources.RawSource(code); | ||
} // Write extracted comments to commentsFile | ||
} | ||
// Write extracted comments to commentsFile | ||
if (commentsFile && extractedComments && extractedComments.length > 0) { | ||
@@ -296,3 +266,2 @@ if (commentsFile in compilation.assets) { | ||
} | ||
if (extractedComments.length > 0) { | ||
@@ -302,7 +271,5 @@ // Add a banner to the original file | ||
let banner = this.options.extractComments.banner || `For license information please see ${_path.default.posix.basename(commentsFile)}`; | ||
if (typeof banner === 'function') { | ||
banner = banner(commentsFile); | ||
} | ||
if (banner) { | ||
@@ -312,5 +279,3 @@ outputSource = new _webpackSources.ConcatSource(`/*! ${banner} */\n`, outputSource); | ||
} | ||
const commentsSource = new _webpackSources.RawSource(`${extractedComments.join('\n\n')}\n`); | ||
if (commentsFile in compilation.assets) { | ||
@@ -328,11 +293,11 @@ // commentsFile already exists, append new comments... | ||
} | ||
} // Updating assets | ||
} | ||
// Updating assets | ||
processedAssets.add(compilation.assets[file] = outputSource); | ||
processedAssets.add(compilation.assets[file] = outputSource); // Handling warnings | ||
// Handling warnings | ||
if (warnings && warnings.length > 0) { | ||
warnings.forEach(warning => { | ||
const builtWarning = TerserPlugin.buildWarning(warning, file, sourceMap, new _RequestShortener.default(compiler.context), this.options.warningsFilter); | ||
if (builtWarning) { | ||
@@ -348,3 +313,2 @@ compilation.warnings.push(builtWarning); | ||
}; | ||
const plugin = { | ||
@@ -357,8 +321,8 @@ name: this.constructor.name | ||
} | ||
const { | ||
mainTemplate, | ||
chunkTemplate | ||
} = compilation; // Regenerate `contenthash` for minified assets | ||
} = compilation; | ||
// Regenerate `contenthash` for minified assets | ||
for (const template of [mainTemplate, chunkTemplate]) { | ||
@@ -374,10 +338,6 @@ template.hooks.hashForChunk.tap(plugin, hash => { | ||
} | ||
compilation.hooks.optimizeChunkAssets.tapAsync(plugin, optimizeFn.bind(this, compilation)); | ||
}); | ||
} | ||
} | ||
var _default = TerserPlugin; | ||
exports.default = _default; | ||
var _default = exports.default = TerserPlugin; |
@@ -7,11 +7,10 @@ "use strict"; | ||
exports.default = void 0; | ||
var _terser = require("terser"); | ||
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } | ||
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } | ||
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } | ||
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } | ||
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } | ||
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } | ||
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; } | ||
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } /* eslint-disable | ||
arrow-body-style | ||
*/ | ||
const buildTerserOptions = ({ | ||
@@ -28,7 +27,5 @@ ecma, | ||
ie8, | ||
/* eslint-disable camelcase */ | ||
keep_classnames, | ||
keep_fnames, | ||
/* eslint-enable camelcase */ | ||
@@ -59,7 +56,7 @@ safari10 | ||
}); | ||
const buildComments = (options, terserOptions, extractedComments) => { | ||
const condition = {}; | ||
const commentsOpts = terserOptions.output.comments; // Use /^\**!|@preserve|@license|@cc_on/i RegExp | ||
const commentsOpts = terserOptions.output.comments; | ||
// Use /^\**!|@preserve|@license|@cc_on/i RegExp | ||
if (typeof options.extractComments === 'boolean') { | ||
@@ -83,9 +80,8 @@ condition.preserve = commentsOpts; | ||
condition.extract = commentsOpts; | ||
} // Ensure that both conditions are functions | ||
} | ||
// Ensure that both conditions are functions | ||
['preserve', 'extract'].forEach(key => { | ||
let regexStr; | ||
let regex; | ||
switch (typeof condition[key]) { | ||
@@ -95,13 +91,9 @@ case 'boolean': | ||
break; | ||
case 'function': | ||
break; | ||
case 'string': | ||
if (condition[key] === 'all') { | ||
condition[key] = () => true; | ||
break; | ||
} | ||
if (condition[key] === 'some') { | ||
@@ -111,27 +103,22 @@ condition[key] = (astNode, comment) => { | ||
}; | ||
break; | ||
} | ||
regexStr = condition[key]; | ||
condition[key] = (astNode, comment) => { | ||
return new RegExp(regexStr).test(comment.value); | ||
}; | ||
break; | ||
default: | ||
regex = condition[key]; | ||
condition[key] = (astNode, comment) => regex.test(comment.value); | ||
} | ||
}); | ||
} | ||
}); // Redefine the comments function to extract and preserve | ||
// Redefine the comments function to extract and preserve | ||
// comments according to the two conditions | ||
return (astNode, comment) => { | ||
if (condition.extract(astNode, comment)) { | ||
const commentText = comment.type === 'comment2' ? `/*${comment.value}*/` : `//${comment.value}`; // Don't include duplicate comments | ||
const commentText = comment.type === 'comment2' ? `/*${comment.value}*/` : `//${comment.value}`; | ||
// Don't include duplicate comments | ||
if (!extractedComments.includes(commentText)) { | ||
@@ -141,7 +128,5 @@ extractedComments.push(commentText); | ||
} | ||
return condition.preserve(astNode, comment); | ||
}; | ||
}; | ||
const minify = options => { | ||
@@ -155,3 +140,2 @@ const { | ||
} = options; | ||
if (minifyFn) { | ||
@@ -161,17 +145,15 @@ return minifyFn({ | ||
}, inputSourceMap); | ||
} // Copy terser options | ||
} | ||
// Copy terser options | ||
const terserOptions = buildTerserOptions(options.terserOptions); | ||
const terserOptions = buildTerserOptions(options.terserOptions); // Let terser generate a SourceMap | ||
// Let terser generate a SourceMap | ||
if (inputSourceMap) { | ||
terserOptions.sourceMap = true; | ||
} | ||
const extractedComments = []; | ||
if (extractComments) { | ||
terserOptions.output.comments = buildComments(options, terserOptions, extractedComments); | ||
} | ||
const { | ||
@@ -193,4 +175,2 @@ error, | ||
}; | ||
var _default = minify; | ||
exports.default = _default; | ||
var _default = exports.default = minify; |
@@ -7,21 +7,11 @@ "use strict"; | ||
exports.default = void 0; | ||
var _os = _interopRequireDefault(require("os")); | ||
var _cacache = _interopRequireDefault(require("cacache")); | ||
var _findCacheDir = _interopRequireDefault(require("find-cache-dir")); | ||
var _workerFarm = _interopRequireDefault(require("worker-farm")); | ||
var _serializeJavascript = _interopRequireDefault(require("serialize-javascript")); | ||
var _isWsl = _interopRequireDefault(require("is-wsl")); | ||
var _minify = _interopRequireDefault(require("./minify")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
const worker = require.resolve('./worker'); | ||
class TaskRunner { | ||
@@ -35,13 +25,12 @@ constructor(options = {}) { | ||
name: 'terser-webpack-plugin' | ||
}) || _os.default.tmpdir() : cache; // In some cases cpus() returns undefined | ||
}) || _os.default.tmpdir() : cache; | ||
// In some cases cpus() returns undefined | ||
// https://github.com/nodejs/node/issues/19022 | ||
const cpus = _os.default.cpus() || { | ||
length: 1 | ||
}; // WSL sometimes freezes, error seems to be on the WSL side | ||
}; | ||
// WSL sometimes freezes, error seems to be on the WSL side | ||
// https://github.com/webpack-contrib/terser-webpack-plugin/issues/21 | ||
this.maxConcurrentWorkers = _isWsl.default ? 1 : parallel === true ? cpus.length - 1 : Math.min(Number(parallel) || 0, cpus.length - 1); | ||
} | ||
run(tasks, callback) { | ||
@@ -53,3 +42,2 @@ /* istanbul ignore if */ | ||
} | ||
if (this.maxConcurrentWorkers > 1) { | ||
@@ -63,3 +51,2 @@ const workerOptions = process.platform === 'win32' ? { | ||
this.workers = (0, _workerFarm.default)(workerOptions, worker); | ||
this.boundWorkers = (options, cb) => { | ||
@@ -82,10 +69,7 @@ try { | ||
} | ||
let toRun = tasks.length; | ||
const results = []; | ||
const step = (index, data) => { | ||
toRun -= 1; | ||
results[index] = data; | ||
if (!toRun) { | ||
@@ -95,3 +79,2 @@ callback(null, results); | ||
}; | ||
tasks.forEach((task, index) => { | ||
@@ -103,5 +86,3 @@ const enqueue = () => { | ||
} : data; | ||
const done = () => step(index, result); | ||
if (this.cacheDir && !result.error) { | ||
@@ -114,3 +95,2 @@ _cacache.default.put(this.cacheDir, (0, _serializeJavascript.default)(task.cacheKeys), JSON.stringify(data)).then(done, done); | ||
}; | ||
if (this.cacheDir) { | ||
@@ -125,3 +105,2 @@ _cacache.default.get(this.cacheDir, (0, _serializeJavascript.default)(task.cacheKeys)).then(({ | ||
} | ||
exit() { | ||
@@ -132,5 +111,3 @@ if (this.workers) { | ||
} | ||
} | ||
exports.default = TaskRunner; |
"use strict"; | ||
var _minify = _interopRequireDefault(require("./minify")); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } | ||
module.exports = (options, callback) => { | ||
@@ -8,0 +6,0 @@ try { |
{ | ||
"name": "terser-webpack-plugin", | ||
"version": "1.4.5", | ||
"version": "1.4.6", | ||
"description": "Terser plugin for webpack", | ||
@@ -5,0 +5,0 @@ "license": "MIT", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
754
45485
9