UNPKG

grind-assets

Version:
85 lines (66 loc) 8.58 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SvgOptimizePostProcessor = void 0; var _PostProcessor = require("./PostProcessor.js"); var _makeSyntaxError = require("../Errors/makeSyntaxError.js"); var _optional = require("../Support/optional.js"); function _isnil(val) { return val === null || typeof val === 'undefined'; } const SVGO = (0, _optional.optional)('svgo', '>=1.1.0'); class SvgOptimizePostProcessor extends _PostProcessor.PostProcessor { constructor(app, shouldOptimize, sourceMaps) { super(app, shouldOptimize, sourceMaps); this.supportedExtensions = ['svg']; this.options = {}; this.options = app.config.get('assets.post_processors.svg.optimize', {}); 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 (!SVGO.resolve()) { return Promise.resolve(contents); } return new SVGO.pkg(this.options).optimize(contents).then(result => { if (_isnil(result)) { const error = new Error('Unknown error optimizing SVG'); error.file = sourcePath; throw error; } if (!_isnil(result.error)) { throw new Error(result.error); } return result.data; }).catch(error => { if (typeof error === 'string') { error = new Error(error); } if (typeof error.file !== 'string') { error.file = sourcePath; } error.message = error.message.replace(/^Line:\s*([0-9]+)\s*$/m, (_, line) => { error.line = Number(line); if (contents.toString().trim().startsWith('<?')) { error.line++; } return ''; }).replace(/^Column:\s*([0-9]+)\s*$/m, (_, column) => { error.column = Number(column); return ''; }).replace(/^Char:\s*.+?$/m, '').trim(); return (0, _makeSyntaxError.makeSyntaxError)(this.app, { causedBy: error }).catch(() => { throw error; }).then(error => { throw error; }); }); } } exports.SvgOptimizePostProcessor = SvgOptimizePostProcessor; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Qb3N0UHJvY2Vzc29ycy9TdmdPcHRpbWl6ZVBvc3RQcm9jZXNzb3IuanMiXSwibmFtZXMiOlsiU1ZHTyIsIlN2Z09wdGltaXplUG9zdFByb2Nlc3NvciIsIlBvc3RQcm9jZXNzb3IiLCJjb25zdHJ1Y3RvciIsImFwcCIsInNob3VsZE9wdGltaXplIiwic291cmNlTWFwcyIsInN1cHBvcnRlZEV4dGVuc2lvbnMiLCJvcHRpb25zIiwiY29uZmlnIiwiZ2V0IiwiZW5hYmxlZCIsInByb2Nlc3MiLCJzb3VyY2VQYXRoIiwidGFyZ2V0UGF0aCIsImNvbnRlbnRzIiwiaW5kZXhPZiIsIlByb21pc2UiLCJyZXNvbHZlIiwicGtnIiwib3B0aW1pemUiLCJ0aGVuIiwicmVzdWx0IiwiZXJyb3IiLCJFcnJvciIsImZpbGUiLCJkYXRhIiwiY2F0Y2giLCJtZXNzYWdlIiwicmVwbGFjZSIsIl8iLCJsaW5lIiwiTnVtYmVyIiwidG9TdHJpbmciLCJ0cmltIiwic3RhcnRzV2l0aCIsImNvbHVtbiIsImNhdXNlZEJ5Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFLQSxNQUFNQSxJQUFJLEdBQUcsd0JBQVMsTUFBVCxFQUFpQixTQUFqQixDQUFiOztBQUVPLE1BQU1DLHdCQUFOLFNBQXVDQyw0QkFBdkMsQ0FBcUQ7QUFJM0RDLEVBQUFBLFdBQVcsQ0FBQ0MsR0FBRCxFQUFNQyxjQUFOLEVBQXNCQyxVQUF0QixFQUFrQztBQUM1QyxVQUFNRixHQUFOLEVBQVdDLGNBQVgsRUFBMkJDLFVBQTNCO0FBRDRDLFNBSDdDQyxtQkFHNkMsR0FIdkIsQ0FBQyxLQUFELENBR3VCO0FBQUEsU0FGN0NDLE9BRTZDLEdBRm5DLEVBRW1DO0FBRzVDLFNBQUtBLE9BQUwsR0FBZUosR0FBRyxDQUFDSyxNQUFKLENBQVdDLEdBQVgsQ0FBZSxxQ0FBZixFQUFzRCxFQUF0RCxDQUFmOztBQUVBLFFBQUksT0FBTyxLQUFLRixPQUFMLENBQWFHLE9BQXBCLEtBQWdDLFNBQXBDLEVBQStDO0FBQzlDLFdBQUtOLGNBQUwsR0FBc0IsS0FBS0csT0FBTCxDQUFhRyxPQUFuQztBQUNBO0FBQ0Q7O0FBRURDLEVBQUFBLE9BQU8sQ0FBQ0MsVUFBRCxFQUFhQyxVQUFiLEVBQXlCQyxRQUF6QixFQUFtQztBQUN6QyxRQUFJLENBQUMsS0FBS1YsY0FBTixJQUF3QlEsVUFBVSxDQUFDRyxPQUFYLENBQW1CLE9BQW5CLEtBQStCLENBQTNELEVBQThEO0FBQzdELGFBQU9DLE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkgsUUFBaEIsQ0FBUDtBQUNBOztBQUVELFFBQUksQ0FBQ2YsSUFBSSxDQUFDa0IsT0FBTCxFQUFMLEVBQXFCO0FBQ3BCLGFBQU9ELE9BQU8sQ0FBQ0MsT0FBUixDQUFnQkgsUUFBaEIsQ0FBUDtBQUNBOztBQUVELFdBQU8sSUFBSWYsSUFBSSxDQUFDbUIsR0FBVCxDQUFhLEtBQUtYLE9BQWxCLEVBQ0xZLFFBREssQ0FDSUwsUUFESixFQUVMTSxJQUZLLENBRUFDLE1BQU0sSUFBSTtBQUNmLGlCQUFJQSxNQUFKLEdBQWtCO0FBQ2pCLGNBQU1DLEtBQUssR0FBRyxJQUFJQyxLQUFKLENBQVUsOEJBQVYsQ0FBZDtBQUNBRCxRQUFBQSxLQUFLLENBQUNFLElBQU4sR0FBYVosVUFBYjtBQUNBLGNBQU1VLEtBQU47QUFDQTs7QUFFRCxVQUFJLFFBQUNELE1BQU0sQ0FBQ0MsS0FBUixDQUFKLEVBQXlCO0FBQ3hCLGNBQU0sSUFBSUMsS0FBSixDQUFVRixNQUFNLENBQUNDLEtBQWpCLENBQU47QUFDQTs7QUFFRCxhQUFPRCxNQUFNLENBQUNJLElBQWQ7QUFDQSxLQWRLLEVBZUxDLEtBZkssQ0FlQ0osS0FBSyxJQUFJO0FBQ2YsVUFBSSxPQUFPQSxLQUFQLEtBQWlCLFFBQXJCLEVBQStCO0FBQzlCQSxRQUFBQSxLQUFLLEdBQUcsSUFBSUMsS0FBSixDQUFVRCxLQUFWLENBQVI7QUFDQTs7QUFFRCxVQUFJLE9BQU9BLEtBQUssQ0FBQ0UsSUFBYixLQUFzQixRQUExQixFQUFvQztBQUNuQ0YsUUFBQUEsS0FBSyxDQUFDRSxJQUFOLEdBQWFaLFVBQWI7QUFDQTs7QUFFRFUsTUFBQUEsS0FBSyxDQUFDSyxPQUFOLEdBQWdCTCxLQUFLLENBQUNLLE9BQU4sQ0FDZEMsT0FEYyxDQUNOLHdCQURNLEVBQ29CLENBQUNDLENBQUQsRUFBSUMsSUFBSixLQUFhO0FBQy9DUixRQUFBQSxLQUFLLENBQUNRLElBQU4sR0FBYUMsTUFBTSxDQUFDRCxJQUFELENBQW5COztBQUVBLFlBQUloQixRQUFRLENBQUNrQixRQUFULEdBQW9CQyxJQUFwQixHQUEyQkMsVUFBM0IsQ0FBc0MsSUFBdEMsQ0FBSixFQUFpRDtBQUNoRFosVUFBQUEsS0FBSyxDQUFDUSxJQUFOO0FBQ0E7O0FBRUQsZUFBTyxFQUFQO0FBQ0EsT0FUYyxFQVVkRixPQVZjLENBVU4sMEJBVk0sRUFVc0IsQ0FBQ0MsQ0FBRCxFQUFJTSxNQUFKLEtBQWU7QUFDbkRiLFFBQUFBLEtBQUssQ0FBQ2EsTUFBTixHQUFlSixNQUFNLENBQUNJLE1BQUQsQ0FBckI7QUFDQSxlQUFPLEVBQVA7QUFDQSxPQWJjLEVBY2RQLE9BZGMsQ0FjTixnQkFkTSxFQWNZLEVBZFosRUFlZEssSUFmYyxFQUFoQjtBQWlCQSxhQUFPLHNDQUFnQixLQUFLOUIsR0FBckIsRUFBMEI7QUFDaENpQyxRQUFBQSxRQUFRLEVBQUVkO0FBRHNCLE9BQTFCLEVBR0xJLEtBSEssQ0FHQyxNQUFNO0FBQ1osY0FBTUosS0FBTjtBQUNBLE9BTEssRUFNTEYsSUFOSyxDQU1BRSxLQUFLLElBQUk7QUFDZCxjQUFNQSxLQUFOO0FBQ0EsT0FSSyxDQUFQO0FBU0EsS0FsREssQ0FBUDtBQW1EQTs7QUExRTBEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICcuL1Bvc3RQcm9jZXNzb3InXG5cbmltcG9ydCAnLi4vRXJyb3JzL21ha2VTeW50YXhFcnJvcidcbmltcG9ydCAnLi4vU3VwcG9ydC9vcHRpb25hbCdcblxuY29uc3QgU1ZHTyA9IG9wdGlvbmFsKCdzdmdvJywgJz49MS4xLjAnKVxuXG5leHBvcnQgY2xhc3MgU3ZnT3B0aW1pemVQb3N0UHJvY2Vzc29yIGV4dGVuZHMgUG9zdFByb2Nlc3NvciB7XG5cdHN1cHBvcnRlZEV4dGVuc2lvbnMgPSBbJ3N2ZyddXG5cdG9wdGlvbnMgPSB7fVxuXG5cdGNvbnN0cnVjdG9yKGFwcCwgc2hvdWxkT3B0aW1pemUsIHNvdXJjZU1hcHMpIHtcblx0XHRzdXBlcihhcHAsIHNob3VsZE9wdGltaXplLCBzb3VyY2VNYXBzKVxuXG5cdFx0dGhpcy5vcHRpb25zID0gYXBwLmNvbmZpZy5nZXQoJ2Fzc2V0cy5wb3N0X3Byb2Nlc3NvcnMuc3ZnLm9wdGltaXplJywge30pXG5cblx0XHRpZiAodHlwZW9mIHRoaXMub3B0aW9ucy5lbmFibGVkID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHRoaXMuc2hvdWxkT3B0aW1pemUgPSB0aGlzLm9wdGlvbnMuZW5hYmxlZFxuXHRcdH1cblx0fVxuXG5cdHByb2Nlc3Moc291cmNlUGF0aCwgdGFyZ2V0UGF0aCwgY29udGVudHMpIHtcblx0XHRpZiAoIXRoaXMuc2hvdWxkT3B0aW1pemUgfHwgc291cmNlUGF0aC5pbmRleE9mKCcubWluLicpID49IDApIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoY29udGVudHMpXG5cdFx0fVxuXG5cdFx0aWYgKCFTVkdPLnJlc29sdmUoKSkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShjb250ZW50cylcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFNWR08ucGtnKHRoaXMub3B0aW9ucylcblx0XHRcdC5vcHRpbWl6ZShjb250ZW50cylcblx0XHRcdC50aGVuKHJlc3VsdCA9PiB7XG5cdFx0XHRcdGlmIChyZXN1bHQuaXNOaWwpIHtcblx0XHRcdFx0XHRjb25zdCBlcnJvciA9IG5ldyBFcnJvcignVW5rbm93biBlcnJvciBvcHRpbWl6aW5nIFNWRycpXG5cdFx0XHRcdFx0ZXJyb3IuZmlsZSA9IHNvdXJjZVBhdGhcblx0XHRcdFx0XHR0aHJvdyBlcnJvclxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFyZXN1bHQuZXJyb3IuaXNOaWwpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IocmVzdWx0LmVycm9yKVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHJlc3VsdC5kYXRhXG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGVycm9yID0+IHtcblx0XHRcdFx0aWYgKHR5cGVvZiBlcnJvciA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRlcnJvciA9IG5ldyBFcnJvcihlcnJvcilcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0eXBlb2YgZXJyb3IuZmlsZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRlcnJvci5maWxlID0gc291cmNlUGF0aFxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZXJyb3IubWVzc2FnZSA9IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0XHQucmVwbGFjZSgvXkxpbmU6XFxzKihbMC05XSspXFxzKiQvbSwgKF8sIGxpbmUpID0+IHtcblx0XHRcdFx0XHRcdGVycm9yLmxpbmUgPSBOdW1iZXIobGluZSlcblxuXHRcdFx0XHRcdFx0aWYgKGNvbnRlbnRzLnRvU3RyaW5nKCkudHJpbSgpLnN0YXJ0c1dpdGgoJzw/JykpIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3IubGluZSsrXG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlcGxhY2UoL15Db2x1bW46XFxzKihbMC05XSspXFxzKiQvbSwgKF8sIGNvbHVtbikgPT4ge1xuXHRcdFx0XHRcdFx0ZXJyb3IuY29sdW1uID0gTnVtYmVyKGNvbHVtbilcblx0XHRcdFx0XHRcdHJldHVybiAnJ1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnJlcGxhY2UoL15DaGFyOlxccyouKz8kL20sICcnKVxuXHRcdFx0XHRcdC50cmltKClcblxuXHRcdFx0XHRyZXR1cm4gbWFrZVN5bnRheEVycm9yKHRoaXMuYXBwLCB7XG5cdFx0XHRcdFx0Y2F1c2VkQnk6IGVycm9yLFxuXHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaCgoKSA9PiB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlcnJvclxuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0LnRoZW4oZXJyb3IgPT4ge1xuXHRcdFx0XHRcdFx0dGhyb3cgZXJyb3Jcblx0XHRcdFx0XHR9KVxuXHRcdFx0fSlcblx0fVxufVxuIl19