grind-assets
Version:
Asset management for Grind
85 lines (66 loc) • 8.58 kB
JavaScript
;
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