grind-assets
Version:
Asset management for Grind
103 lines (79 loc) • 10.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AssetFactory = void 0;
var _Asset = require("./Asset.js");
var _Compiler = require("./Compilers/Compiler.js");
var _PostProcessor = require("./PostProcessors/PostProcessor.js");
const path = require('path');
class AssetFactory {
constructor(app, shouldOptimizeDefault = false, sourceMapsDefault = 'auto', liveReload = false) {
this.app = null;
this.published = null;
this.shouldOptimizeDefault = null;
this.sourceMapsDefault = false;
this.liveReload = false;
this._compilers = [];
this._postProcessors = [];
this.app = app;
this.published = app.config.get('assets-published', {});
this.shouldOptimizeDefault = shouldOptimizeDefault;
this.sourceMapsDefault = sourceMapsDefault;
this.liveReload = liveReload;
}
make(path) {
return new _Asset.Asset(path, this.getCompilerFromPath(path));
}
registerCompiler(compiler) {
if (typeof compiler === 'function') {
compiler = new compiler(this.app, this.sourceMapsDefault, this.liveReload);
}
if (!(compiler instanceof _Compiler.Compiler)) {
throw new Error('Compilers must extend Compiler');
}
this._compilers.push(compiler);
this._compilers.sort((a, b) => a.priority > b.priority ? -1 : 1);
}
registerPostProcessor(postProcessor) {
if (typeof postProcessor === 'function') {
postProcessor = new postProcessor(this.app, this.shouldOptimizeDefault, this.sourceMapsDefault);
}
if (!(postProcessor instanceof _PostProcessor.PostProcessor)) {
throw new Error('PostProcessors must extend PostProcessor');
}
this._postProcessors.push(postProcessor);
this._postProcessors.sort((a, b) => a.priority > b.priority ? -1 : 1);
}
getCompilerFromPath(path) {
for (const compiler of this._compilers) {
if (compiler.supports(path)) {
return compiler;
}
}
throw new BadRequestError(`Unsupported asset path: ${path}`);
}
getPostProcessorsFromPath(path) {
return this._postProcessors.filter(postProcessor => postProcessor.supports(path));
}
isPathSupported(path) {
try {
this.getCompilerFromPath(path);
return true;
} catch (e) {
return false;
}
}
normalizePath(pathname) {
if (pathname.indexOf('://') !== -1) {
return pathname;
}
return pathname.replace(/^(\/)?(assets\/)?/, '');
}
publishedPath(pathname) {
pathname = this.normalizePath(pathname);
return this.published[pathname] || path.join('/assets', pathname);
}
}
exports.AssetFactory = AssetFactory;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Bc3NldEZhY3RvcnkuanMiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJBc3NldEZhY3RvcnkiLCJjb25zdHJ1Y3RvciIsImFwcCIsInNob3VsZE9wdGltaXplRGVmYXVsdCIsInNvdXJjZU1hcHNEZWZhdWx0IiwibGl2ZVJlbG9hZCIsInB1Ymxpc2hlZCIsIl9jb21waWxlcnMiLCJfcG9zdFByb2Nlc3NvcnMiLCJjb25maWciLCJnZXQiLCJtYWtlIiwiQXNzZXQiLCJnZXRDb21waWxlckZyb21QYXRoIiwicmVnaXN0ZXJDb21waWxlciIsImNvbXBpbGVyIiwiQ29tcGlsZXIiLCJFcnJvciIsInB1c2giLCJzb3J0IiwiYSIsImIiLCJwcmlvcml0eSIsInJlZ2lzdGVyUG9zdFByb2Nlc3NvciIsInBvc3RQcm9jZXNzb3IiLCJQb3N0UHJvY2Vzc29yIiwic3VwcG9ydHMiLCJCYWRSZXF1ZXN0RXJyb3IiLCJnZXRQb3N0UHJvY2Vzc29yc0Zyb21QYXRoIiwiZmlsdGVyIiwiaXNQYXRoU3VwcG9ydGVkIiwiZSIsIm5vcm1hbGl6ZVBhdGgiLCJwYXRobmFtZSIsImluZGV4T2YiLCJyZXBsYWNlIiwicHVibGlzaGVkUGF0aCIsImpvaW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFJQSxNQUFNQSxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUVPLE1BQU1DLFlBQU4sQ0FBbUI7QUFVekJDLEVBQUFBLFdBQVcsQ0FDVkMsR0FEVSxFQUVWQyxxQkFBcUIsR0FBRyxLQUZkLEVBR1ZDLGlCQUFpQixHQUFHLE1BSFYsRUFJVkMsVUFBVSxHQUFHLEtBSkgsRUFLVDtBQUFBLFNBZEZILEdBY0UsR0FkSSxJQWNKO0FBQUEsU0FiRkksU0FhRSxHQWJVLElBYVY7QUFBQSxTQVpGSCxxQkFZRSxHQVpzQixJQVl0QjtBQUFBLFNBWEZDLGlCQVdFLEdBWGtCLEtBV2xCO0FBQUEsU0FWRkMsVUFVRSxHQVZXLEtBVVg7QUFBQSxTQVJGRSxVQVFFLEdBUlcsRUFRWDtBQUFBLFNBUEZDLGVBT0UsR0FQZ0IsRUFPaEI7QUFDRCxTQUFLTixHQUFMLEdBQVdBLEdBQVg7QUFDQSxTQUFLSSxTQUFMLEdBQWlCSixHQUFHLENBQUNPLE1BQUosQ0FBV0MsR0FBWCxDQUFlLGtCQUFmLEVBQW1DLEVBQW5DLENBQWpCO0FBQ0EsU0FBS1AscUJBQUwsR0FBNkJBLHFCQUE3QjtBQUNBLFNBQUtDLGlCQUFMLEdBQXlCQSxpQkFBekI7QUFDQSxTQUFLQyxVQUFMLEdBQWtCQSxVQUFsQjtBQUNBOztBQUVETSxFQUFBQSxJQUFJLENBQUNiLElBQUQsRUFBTztBQUNWLFdBQU8sSUFBSWMsWUFBSixDQUFVZCxJQUFWLEVBQWdCLEtBQUtlLG1CQUFMLENBQXlCZixJQUF6QixDQUFoQixDQUFQO0FBQ0E7O0FBRURnQixFQUFBQSxnQkFBZ0IsQ0FBQ0MsUUFBRCxFQUFXO0FBQzFCLFFBQUksT0FBT0EsUUFBUCxLQUFvQixVQUF4QixFQUFvQztBQUNuQ0EsTUFBQUEsUUFBUSxHQUFHLElBQUlBLFFBQUosQ0FBYSxLQUFLYixHQUFsQixFQUF1QixLQUFLRSxpQkFBNUIsRUFBK0MsS0FBS0MsVUFBcEQsQ0FBWDtBQUNBOztBQUVELFFBQUksRUFBRVUsUUFBUSxZQUFZQyxrQkFBdEIsQ0FBSixFQUFxQztBQUNwQyxZQUFNLElBQUlDLEtBQUosQ0FBVSxnQ0FBVixDQUFOO0FBQ0E7O0FBRUQsU0FBS1YsVUFBTCxDQUFnQlcsSUFBaEIsQ0FBcUJILFFBQXJCOztBQUNBLFNBQUtSLFVBQUwsQ0FBZ0JZLElBQWhCLENBQXFCLENBQUNDLENBQUQsRUFBSUMsQ0FBSixLQUFXRCxDQUFDLENBQUNFLFFBQUYsR0FBYUQsQ0FBQyxDQUFDQyxRQUFmLEdBQTBCLENBQUMsQ0FBM0IsR0FBK0IsQ0FBL0Q7QUFDQTs7QUFFREMsRUFBQUEscUJBQXFCLENBQUNDLGFBQUQsRUFBZ0I7QUFDcEMsUUFBSSxPQUFPQSxhQUFQLEtBQXlCLFVBQTdCLEVBQXlDO0FBQ3hDQSxNQUFBQSxhQUFhLEdBQUcsSUFBSUEsYUFBSixDQUNmLEtBQUt0QixHQURVLEVBRWYsS0FBS0MscUJBRlUsRUFHZixLQUFLQyxpQkFIVSxDQUFoQjtBQUtBOztBQUVELFFBQUksRUFBRW9CLGFBQWEsWUFBWUMsNEJBQTNCLENBQUosRUFBK0M7QUFDOUMsWUFBTSxJQUFJUixLQUFKLENBQVUsMENBQVYsQ0FBTjtBQUNBOztBQUVELFNBQUtULGVBQUwsQ0FBcUJVLElBQXJCLENBQTBCTSxhQUExQjs7QUFDQSxTQUFLaEIsZUFBTCxDQUFxQlcsSUFBckIsQ0FBMEIsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEtBQVdELENBQUMsQ0FBQ0UsUUFBRixHQUFhRCxDQUFDLENBQUNDLFFBQWYsR0FBMEIsQ0FBQyxDQUEzQixHQUErQixDQUFwRTtBQUNBOztBQUVEVCxFQUFBQSxtQkFBbUIsQ0FBQ2YsSUFBRCxFQUFPO0FBQ3pCLFNBQUssTUFBTWlCLFFBQVgsSUFBdUIsS0FBS1IsVUFBNUIsRUFBd0M7QUFDdkMsVUFBSVEsUUFBUSxDQUFDVyxRQUFULENBQWtCNUIsSUFBbEIsQ0FBSixFQUE2QjtBQUM1QixlQUFPaUIsUUFBUDtBQUNBO0FBQ0Q7O0FBRUQsVUFBTSxJQUFJWSxlQUFKLENBQXFCLDJCQUEwQjdCLElBQUssRUFBcEQsQ0FBTjtBQUNBOztBQUVEOEIsRUFBQUEseUJBQXlCLENBQUM5QixJQUFELEVBQU87QUFDL0IsV0FBTyxLQUFLVSxlQUFMLENBQXFCcUIsTUFBckIsQ0FBNEJMLGFBQWEsSUFBSUEsYUFBYSxDQUFDRSxRQUFkLENBQXVCNUIsSUFBdkIsQ0FBN0MsQ0FBUDtBQUNBOztBQUVEZ0MsRUFBQUEsZUFBZSxDQUFDaEMsSUFBRCxFQUFPO0FBQ3JCLFFBQUk7QUFDSCxXQUFLZSxtQkFBTCxDQUF5QmYsSUFBekI7QUFDQSxhQUFPLElBQVA7QUFDQSxLQUhELENBR0UsT0FBT2lDLENBQVAsRUFBVTtBQUNYLGFBQU8sS0FBUDtBQUNBO0FBQ0Q7O0FBRURDLEVBQUFBLGFBQWEsQ0FBQ0MsUUFBRCxFQUFXO0FBQ3ZCLFFBQUlBLFFBQVEsQ0FBQ0MsT0FBVCxDQUFpQixLQUFqQixNQUE0QixDQUFDLENBQWpDLEVBQW9DO0FBQ25DLGFBQU9ELFFBQVA7QUFDQTs7QUFFRCxXQUFPQSxRQUFRLENBQUNFLE9BQVQsQ0FBaUIsbUJBQWpCLEVBQXNDLEVBQXRDLENBQVA7QUFDQTs7QUFFREMsRUFBQUEsYUFBYSxDQUFDSCxRQUFELEVBQVc7QUFDdkJBLElBQUFBLFFBQVEsR0FBRyxLQUFLRCxhQUFMLENBQW1CQyxRQUFuQixDQUFYO0FBQ0EsV0FBTyxLQUFLM0IsU0FBTCxDQUFlMkIsUUFBZixLQUE0Qm5DLElBQUksQ0FBQ3VDLElBQUwsQ0FBVSxTQUFWLEVBQXFCSixRQUFyQixDQUFuQztBQUNBOztBQTNGd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJy4vQXNzZXQnXG5pbXBvcnQgJy4vQ29tcGlsZXJzL0NvbXBpbGVyJ1xuaW1wb3J0ICcuL1Bvc3RQcm9jZXNzb3JzL1Bvc3RQcm9jZXNzb3InXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcblxuZXhwb3J0IGNsYXNzIEFzc2V0RmFjdG9yeSB7XG5cdGFwcCA9IG51bGxcblx0cHVibGlzaGVkID0gbnVsbFxuXHRzaG91bGRPcHRpbWl6ZURlZmF1bHQgPSBudWxsXG5cdHNvdXJjZU1hcHNEZWZhdWx0ID0gZmFsc2Vcblx0bGl2ZVJlbG9hZCA9IGZhbHNlXG5cblx0X2NvbXBpbGVycyA9IFtdXG5cdF9wb3N0UHJvY2Vzc29ycyA9IFtdXG5cblx0Y29uc3RydWN0b3IoXG5cdFx0YXBwLFxuXHRcdHNob3VsZE9wdGltaXplRGVmYXVsdCA9IGZhbHNlLFxuXHRcdHNvdXJjZU1hcHNEZWZhdWx0ID0gJ2F1dG8nLFxuXHRcdGxpdmVSZWxvYWQgPSBmYWxzZSxcblx0KSB7XG5cdFx0dGhpcy5hcHAgPSBhcHBcblx0XHR0aGlzLnB1Ymxpc2hlZCA9IGFwcC5jb25maWcuZ2V0KCdhc3NldHMtcHVibGlzaGVkJywge30pXG5cdFx0dGhpcy5zaG91bGRPcHRpbWl6ZURlZmF1bHQgPSBzaG91bGRPcHRpbWl6ZURlZmF1bHRcblx0XHR0aGlzLnNvdXJjZU1hcHNEZWZhdWx0ID0gc291cmNlTWFwc0RlZmF1bHRcblx0XHR0aGlzLmxpdmVSZWxvYWQgPSBsaXZlUmVsb2FkXG5cdH1cblxuXHRtYWtlKHBhdGgpIHtcblx0XHRyZXR1cm4gbmV3IEFzc2V0KHBhdGgsIHRoaXMuZ2V0Q29tcGlsZXJGcm9tUGF0aChwYXRoKSlcblx0fVxuXG5cdHJlZ2lzdGVyQ29tcGlsZXIoY29tcGlsZXIpIHtcblx0XHRpZiAodHlwZW9mIGNvbXBpbGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjb21waWxlciA9IG5ldyBjb21waWxlcih0aGlzLmFwcCwgdGhpcy5zb3VyY2VNYXBzRGVmYXVsdCwgdGhpcy5saXZlUmVsb2FkKVxuXHRcdH1cblxuXHRcdGlmICghKGNvbXBpbGVyIGluc3RhbmNlb2YgQ29tcGlsZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGVycyBtdXN0IGV4dGVuZCBDb21waWxlcicpXG5cdFx0fVxuXG5cdFx0dGhpcy5fY29tcGlsZXJzLnB1c2goY29tcGlsZXIpXG5cdFx0dGhpcy5fY29tcGlsZXJzLnNvcnQoKGEsIGIpID0+IChhLnByaW9yaXR5ID4gYi5wcmlvcml0eSA/IC0xIDogMSkpXG5cdH1cblxuXHRyZWdpc3RlclBvc3RQcm9jZXNzb3IocG9zdFByb2Nlc3Nvcikge1xuXHRcdGlmICh0eXBlb2YgcG9zdFByb2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cG9zdFByb2Nlc3NvciA9IG5ldyBwb3N0UHJvY2Vzc29yKFxuXHRcdFx0XHR0aGlzLmFwcCxcblx0XHRcdFx0dGhpcy5zaG91bGRPcHRpbWl6ZURlZmF1bHQsXG5cdFx0XHRcdHRoaXMuc291cmNlTWFwc0RlZmF1bHQsXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0aWYgKCEocG9zdFByb2Nlc3NvciBpbnN0YW5jZW9mIFBvc3RQcm9jZXNzb3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1Bvc3RQcm9jZXNzb3JzIG11c3QgZXh0ZW5kIFBvc3RQcm9jZXNzb3InKVxuXHRcdH1cblxuXHRcdHRoaXMuX3Bvc3RQcm9jZXNzb3JzLnB1c2gocG9zdFByb2Nlc3Nvcilcblx0XHR0aGlzLl9wb3N0UHJvY2Vzc29ycy5zb3J0KChhLCBiKSA9PiAoYS5wcmlvcml0eSA+IGIucHJpb3JpdHkgPyAtMSA6IDEpKVxuXHR9XG5cblx0Z2V0Q29tcGlsZXJGcm9tUGF0aChwYXRoKSB7XG5cdFx0Zm9yIChjb25zdCBjb21waWxlciBvZiB0aGlzLl9jb21waWxlcnMpIHtcblx0XHRcdGlmIChjb21waWxlci5zdXBwb3J0cyhwYXRoKSkge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZXJcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKGBVbnN1cHBvcnRlZCBhc3NldCBwYXRoOiAke3BhdGh9YClcblx0fVxuXG5cdGdldFBvc3RQcm9jZXNzb3JzRnJvbVBhdGgocGF0aCkge1xuXHRcdHJldHVybiB0aGlzLl9wb3N0UHJvY2Vzc29ycy5maWx0ZXIocG9zdFByb2Nlc3NvciA9PiBwb3N0UHJvY2Vzc29yLnN1cHBvcnRzKHBhdGgpKVxuXHR9XG5cblx0aXNQYXRoU3VwcG9ydGVkKHBhdGgpIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5nZXRDb21waWxlckZyb21QYXRoKHBhdGgpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0fVxuXG5cdG5vcm1hbGl6ZVBhdGgocGF0aG5hbWUpIHtcblx0XHRpZiAocGF0aG5hbWUuaW5kZXhPZignOi8vJykgIT09IC0xKSB7XG5cdFx0XHRyZXR1cm4gcGF0aG5hbWVcblx0XHR9XG5cblx0XHRyZXR1cm4gcGF0aG5hbWUucmVwbGFjZSgvXihcXC8pPyhhc3NldHNcXC8pPy8sICcnKVxuXHR9XG5cblx0cHVibGlzaGVkUGF0aChwYXRobmFtZSkge1xuXHRcdHBhdGhuYW1lID0gdGhpcy5ub3JtYWxpemVQYXRoKHBhdGhuYW1lKVxuXHRcdHJldHVybiB0aGlzLnB1Ymxpc2hlZFtwYXRobmFtZV0gfHwgcGF0aC5qb2luKCcvYXNzZXRzJywgcGF0aG5hbWUpXG5cdH1cbn1cbiJdfQ==