grind-assets
Version:
Asset management for Grind
98 lines (74 loc) • 10.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.JavascriptMinifyPostProcessor = void 0;
var _PostProcessor = require("./PostProcessor.js");
var _makeSyntaxError = require("../Errors/makeSyntaxError.js");
var _optional = require("../Support/optional.js");
var _grindSupport = require("grind-support");
function _isnil(val) { return val === null || typeof val === 'undefined'; }
const INLINE_SOURCE_MAP_REGEX = /\/\/[@#]\s+sourceMappingURL=data:application\/json(?:;charset[:=][^;]+)?;base64,(.*)\n/;
class JavascriptMinifyPostProcessor extends _PostProcessor.PostProcessor {
constructor(app, shouldOptimize, sourceMaps) {
super(app, shouldOptimize, sourceMaps);
this.supportedExtensions = ['js'];
this.options = {};
this.uglify = void 0;
this.options = { ...app.config.get('assets.post_processors.js.minify', {})
};
this.uglify = (0, _optional.optional)(this.options.package || 'uglify-js', '>=3.0.0');
delete this.options.package;
if (typeof this.options.enabled === 'boolean') {
this.shouldOptimize = this.options.enabled;
}
}
process(sourcePath, targetPath, contents) {
if (!this.shouldOptimize || sourcePath.indexOf('.min.') >= 0) {
return Promise.resolve(contents);
}
if (!this.uglify.resolve()) {
return Promise.resolve(contents);
}
const useSourceMap = this.sourceMaps === 'auto';
const inlineSourceMap = useSourceMap && _isnil(targetPath);
let sourceMap = null;
if (useSourceMap) {
contents = contents.toString().replace(INLINE_SOURCE_MAP_REGEX, (_, map) => {
sourceMap = JSON.parse(Buffer.from(map, 'base64').toString());
return '';
});
}
return new Promise((resolve, reject) => {
const targetPathMap = `${targetPath}.map`;
let result = null;
try {
const options = (0, _grindSupport.merge)(this.options, {
sourceMap: {
content: sourceMap
}
});
if (useSourceMap && inlineSourceMap) {
options.sourceMap.url = 'inline';
}
result = this.uglify.pkg.minify(contents.toString(), options);
if (!_isnil(result.error)) {
throw result.error;
}
} catch (err) {
err.file = sourcePath;
delete err.filename;
err.column = err.col;
return (0, _makeSyntaxError.makeSyntaxError)(this.app, {
causedBy: err
}).catch(reject).then(reject);
}
if (_isnil(result.map) || inlineSourceMap || !useSourceMap) {
return resolve(result.code);
}
resolve(_grindSupport.FS.writeFile(targetPathMap, result.map).then(() => result.code));
});
}
}
exports.JavascriptMinifyPostProcessor = JavascriptMinifyPostProcessor;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Qb3N0UHJvY2Vzc29ycy9KYXZhc2NyaXB0TWluaWZ5UG9zdFByb2Nlc3Nvci5qcyJdLCJuYW1lcyI6WyJJTkxJTkVfU09VUkNFX01BUF9SRUdFWCIsIkphdmFzY3JpcHRNaW5pZnlQb3N0UHJvY2Vzc29yIiwiUG9zdFByb2Nlc3NvciIsImNvbnN0cnVjdG9yIiwiYXBwIiwic2hvdWxkT3B0aW1pemUiLCJzb3VyY2VNYXBzIiwic3VwcG9ydGVkRXh0ZW5zaW9ucyIsIm9wdGlvbnMiLCJ1Z2xpZnkiLCJjb25maWciLCJnZXQiLCJwYWNrYWdlIiwiZW5hYmxlZCIsInByb2Nlc3MiLCJzb3VyY2VQYXRoIiwidGFyZ2V0UGF0aCIsImNvbnRlbnRzIiwiaW5kZXhPZiIsIlByb21pc2UiLCJyZXNvbHZlIiwidXNlU291cmNlTWFwIiwiaW5saW5lU291cmNlTWFwIiwic291cmNlTWFwIiwidG9TdHJpbmciLCJyZXBsYWNlIiwiXyIsIm1hcCIsIkpTT04iLCJwYXJzZSIsIkJ1ZmZlciIsImZyb20iLCJyZWplY3QiLCJ0YXJnZXRQYXRoTWFwIiwicmVzdWx0IiwiY29udGVudCIsInVybCIsInBrZyIsIm1pbmlmeSIsImVycm9yIiwiZXJyIiwiZmlsZSIsImZpbGVuYW1lIiwiY29sdW1uIiwiY29sIiwiY2F1c2VkQnkiLCJjYXRjaCIsInRoZW4iLCJjb2RlIiwiRlMiLCJ3cml0ZUZpbGUiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFLQTs7OztBQUVBLE1BQU1BLHVCQUF1QixHQUFHLHdGQUFoQzs7QUFFTyxNQUFNQyw2QkFBTixTQUE0Q0MsNEJBQTVDLENBQTBEO0FBS2hFQyxFQUFBQSxXQUFXLENBQUNDLEdBQUQsRUFBTUMsY0FBTixFQUFzQkMsVUFBdEIsRUFBa0M7QUFDNUMsVUFBTUYsR0FBTixFQUFXQyxjQUFYLEVBQTJCQyxVQUEzQjtBQUQ0QyxTQUo3Q0MsbUJBSTZDLEdBSnZCLENBQUMsSUFBRCxDQUl1QjtBQUFBLFNBSDdDQyxPQUc2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QW5ELEVBQTJEZSxJQUEzRCxDQUFnRWYsTUFBaEUsQ0FBUDtBQUNBOztBQUVELFVBQUksT0FBQUUsTUFBTSxDQUFDUCxHQUFQLEtBQW9CTCxlQUFwQixJQUF1QyxDQUFDRCxZQUE1QyxFQUEwRDtBQUN6RCxlQUFPRCxPQUFPLENBQUNjLE1BQU0sQ0FBQ2MsSUFBUixDQUFkO0FBQ0E7O0FBRUQ1QixNQUFBQSxPQUFPLENBQUM2QixpQkFBR0MsU0FBSCxDQUFhakIsYUFBYixFQUE0QkMsTUFBTSxDQUFDUCxHQUFuQyxFQUF3Q29CLElBQXhDLENBQTZDLE1BQU1iLE1BQU0sQ0FBQ2MsSUFBMUQsQ0FBRCxDQUFQO0FBQ0EsS0FqQ00sQ0FBUDtBQWtDQTs7QUF2RStEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICcuL1Bvc3RQcm9jZXNzb3InXG5cbmltcG9ydCAnLi4vRXJyb3JzL21ha2VTeW50YXhFcnJvcidcbmltcG9ydCAnLi4vU3VwcG9ydC9vcHRpb25hbCdcblxuaW1wb3J0IHsgRlMsIG1lcmdlIH0gZnJvbSAnZ3JpbmQtc3VwcG9ydCdcblxuY29uc3QgSU5MSU5FX1NPVVJDRV9NQVBfUkVHRVggPSAvXFwvXFwvW0AjXVxccytzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb25cXC9qc29uKD86O2NoYXJzZXRbOj1dW147XSspPztiYXNlNjQsKC4qKVxcbi9cblxuZXhwb3J0IGNsYXNzIEphdmFzY3JpcHRNaW5pZnlQb3N0UHJvY2Vzc29yIGV4dGVuZHMgUG9zdFByb2Nlc3NvciB7XG5cdHN1cHBvcnRlZEV4dGVuc2lvbnMgPSBbJ2pzJ11cblx0b3B0aW9ucyA9IHt9XG5cdHVnbGlmeVxuXG5cdGNvbnN0cnVjdG9yKGFwcCwgc2hvdWxkT3B0aW1pemUsIHNvdXJjZU1hcHMpIHtcblx0XHRzdXBlcihhcHAsIHNob3VsZE9wdGltaXplLCBzb3VyY2VNYXBzKVxuXG5cdFx0dGhpcy5vcHRpb25zID0geyAuLi5hcHAuY29uZmlnLmdldCgnYXNzZXRzLnBvc3RfcHJvY2Vzc29ycy5qcy5taW5pZnknLCB7fSkgfVxuXHRcdHRoaXMudWdsaWZ5ID0gb3B0aW9uYWwodGhpcy5vcHRpb25zLnBhY2thZ2UgfHwgJ3VnbGlmeS1qcycsICc+PTMuMC4wJylcblx0XHRkZWxldGUgdGhpcy5vcHRpb25zLnBhY2thZ2VcblxuXHRcdGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLmVuYWJsZWQgPT09ICdib29sZWFuJykge1xuXHRcdFx0dGhpcy5zaG91bGRPcHRpbWl6ZSA9IHRoaXMub3B0aW9ucy5lbmFibGVkXG5cdFx0fVxuXHR9XG5cblx0cHJvY2Vzcyhzb3VyY2VQYXRoLCB0YXJnZXRQYXRoLCBjb250ZW50cykge1xuXHRcdGlmICghdGhpcy5zaG91bGRPcHRpbWl6ZSB8fCBzb3VyY2VQYXRoLmluZGV4T2YoJy5taW4uJykgPj0gMCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShjb250ZW50cylcblx0XHR9XG5cblx0XHRpZiAoIXRoaXMudWdsaWZ5LnJlc29sdmUoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShjb250ZW50cylcblx0XHR9XG5cblx0XHRjb25zdCB1c2VTb3VyY2VNYXAgPSB0aGlzLnNvdXJjZU1hcHMgPT09ICdhdXRvJ1xuXHRcdGNvbnN0IGlubGluZVNvdXJjZU1hcCA9IHVzZVNvdXJjZU1hcCAmJiB0YXJnZXRQYXRoLmlzTmlsXG5cdFx0bGV0IHNvdXJjZU1hcCA9IG51bGxcblxuXHRcdGlmICh1c2VTb3VyY2VNYXApIHtcblx0XHRcdGNvbnRlbnRzID0gY29udGVudHMudG9TdHJpbmcoKS5yZXBsYWNlKElOTElORV9TT1VSQ0VfTUFQX1JFR0VYLCAoXywgbWFwKSA9PiB7XG5cdFx0XHRcdHNvdXJjZU1hcCA9IEpTT04ucGFyc2UoQnVmZmVyLmZyb20obWFwLCAnYmFzZTY0JykudG9TdHJpbmcoKSlcblx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHR9KVxuXHRcdH1cblxuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRjb25zdCB0YXJnZXRQYXRoTWFwID0gYCR7dGFyZ2V0UGF0aH0ubWFwYFxuXHRcdFx0bGV0IHJlc3VsdCA9IG51bGxcblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3Qgb3B0aW9ucyA9IG1lcmdlKHRoaXMub3B0aW9ucywge1xuXHRcdFx0XHRcdHNvdXJjZU1hcDoge1xuXHRcdFx0XHRcdFx0Y29udGVudDogc291cmNlTWFwLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0pXG5cblx0XHRcdFx0aWYgKHVzZVNvdXJjZU1hcCAmJiBpbmxpbmVTb3VyY2VNYXApIHtcblx0XHRcdFx0XHRvcHRpb25zLnNvdXJjZU1hcC51cmwgPSAnaW5saW5lJ1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ID0gdGhpcy51Z2xpZnkucGtnLm1pbmlmeShjb250ZW50cy50b1N0cmluZygpLCBvcHRpb25zKVxuXG5cdFx0XHRcdGlmICghcmVzdWx0LmVycm9yLmlzTmlsKSB7XG5cdFx0XHRcdFx0dGhyb3cgcmVzdWx0LmVycm9yXG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRlcnIuZmlsZSA9IHNvdXJjZVBhdGhcblx0XHRcdFx0ZGVsZXRlIGVyci5maWxlbmFtZVxuXG5cdFx0XHRcdGVyci5jb2x1bW4gPSBlcnIuY29sXG5cdFx0XHRcdHJldHVybiBtYWtlU3ludGF4RXJyb3IodGhpcy5hcHAsIHsgY2F1c2VkQnk6IGVyciB9KS5jYXRjaChyZWplY3QpLnRoZW4ocmVqZWN0KVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAocmVzdWx0Lm1hcC5pc05pbCB8fCBpbmxpbmVTb3VyY2VNYXAgfHwgIXVzZVNvdXJjZU1hcCkge1xuXHRcdFx0XHRyZXR1cm4gcmVzb2x2ZShyZXN1bHQuY29kZSlcblx0XHRcdH1cblxuXHRcdFx0cmVzb2x2ZShGUy53cml0ZUZpbGUodGFyZ2V0UGF0aE1hcCwgcmVzdWx0Lm1hcCkudGhlbigoKSA9PiByZXN1bHQuY29kZSkpXG5cdFx0fSlcblx0fVxufVxuIl19