UNPKG

grind-assets

Version:
98 lines (74 loc) 10.1 kB
"use strict"; 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