UNPKG

grind-assets

Version:
103 lines (79 loc) 10.1 kB
"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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9Bc3NldEZhY3RvcnkuanMiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJBc3NldEZhY3RvcnkiLCJjb25zdHJ1Y3RvciIsImFwcCIsInNob3VsZE9wdGltaXplRGVmYXVsdCIsInNvdXJjZU1hcHNEZWZhdWx0IiwibGl2ZVJlbG9hZCIsInB1Ymxpc2hlZCIsIl9jb21waWxlcnMiLCJfcG9zdFByb2Nlc3NvcnMiLCJjb25maWciLCJnZXQiLCJtYWtlIiwiQXNzZXQiLCJnZXRDb21waWxlckZyb21QYXRoIiwicmVnaXN0ZXJDb21waWxlciIsImNvbXBpbGVyIiwiQ29tcGlsZXIiLCJFcnJvciIsInB1c2giLCJzb3J0IiwiYSIsImIiLCJwcmlvcml0eSIsInJlZ2lzdGVyUG9zdFByb2Nlc3NvciIsInBvc3RQcm9jZXNzb3IiLCJQb3N0UHJvY2Vzc29yIiwic3VwcG9ydHMiLCJCYWRSZXF1ZXN0RXJyb3IiLCJnZXRQb3N0UHJvY2Vzc29yc0Zyb21QYXRoIiwiZmlsdGVyIiwiaXNQYXRoU3VwcG9ydGVkIiwiZSIsIm5vcm1hbGl6ZVBhdGgiLCJwYXRobmFtZSIsImluZGV4T2YiLCJyZXBsYWNlIiwicHVibGlzaGVkUGF0aCIsImpvaW4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFJQSxNQUFNQSxJQUFJLEdBQUdDLE9BQU8sQ0FBQyxNQUFELENBQXBCOztBQUVPLE1BQU1DLFlBQU4sQ0FBbUI7QUFVekJDLEVBQUFBLFdBQVcsQ0FDVkMsR0FEVSxFQUVWQyxxQkFBcUIsR0FBRyxLQUZkLEVBR1ZDLGlCQUFpQixHQUFHLE1BSFYsRUFJVkMsVUFBVSxHQUFHLEtBSkgsRUFLVDtBQUFBLFNBZEZILEdBY0UsR0FkSSxJQWNKO0FBQUEsU0FiRkksU0FhRSxHQWJVLElBYVY7QUFBQSxTQVpGSCxxQkFZRSxHQVpzQixJQVl0QjtBQUFBLFNBWEZDLGlCQVdFLEdBWGtCLEtBV2xCO0FBQUEsU0FWRkMsVUFVRSxHQVZXLEtBVVg7QUFBQSxTQVJGRSxV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QVEsQ0FBQ0MsT0FBVCxDQUFpQixLQUFqQixNQUE0QixDQUFDLENBQWpDLEVBQW9DO0FBQ25DLGFBQU9ELFFBQVA7QUFDQTs7QUFFRCxXQUFPQSxRQUFRLENBQUNFLE9BQVQsQ0FBaUIsbUJBQWpCLEVBQXNDLEVBQXRDLENBQVA7QUFDQTs7QUFFREMsRUFBQUEsYUFBYSxDQUFDSCxRQUFELEVBQVc7QUFDdkJBLElBQUFBLFFBQVEsR0FBRyxLQUFLRCxhQUFMLENBQW1CQyxRQUFuQixDQUFYO0FBQ0EsV0FBTyxLQUFLM0IsU0FBTCxDQUFlMkIsUUFBZixLQUE0Qm5DLElBQUksQ0FBQ3VDLElBQUwsQ0FBVSxTQUFWLEVBQXFCSixRQUFyQixDQUFuQztBQUNBOztBQTNGd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgJy4vQXNzZXQnXG5pbXBvcnQgJy4vQ29tcGlsZXJzL0NvbXBpbGVyJ1xuaW1wb3J0ICcuL1Bvc3RQcm9jZXNzb3JzL1Bvc3RQcm9jZXNzb3InXG5cbmNvbnN0IHBhdGggPSByZXF1aXJlKCdwYXRoJylcblxuZXhwb3J0IGNsYXNzIEFzc2V0RmFjdG9yeSB7XG5cdGFwcCA9IG51bGxcblx0cHVibGlzaGVkID0gbnVsbFxuXHRzaG91bGRPcHRpbWl6ZURlZmF1bHQgPSBudWxsXG5cdHNvdXJjZU1hcHNEZWZhdWx0ID0gZmFsc2Vcblx0bGl2ZVJlbG9hZCA9IGZhbHNlXG5cblx0X2NvbXBpbGVycyA9IFtdXG5cdF9wb3N0UHJvY2Vzc29ycyA9IFtdXG5cblx0Y29uc3RydWN0b3IoXG5cdFx0YXBwLFxuXHRcdHNob3VsZE9wdGltaXplRGVmYXVsdCA9IGZhbHNlLFxuXHRcdHNvdXJjZU1hcHNEZWZhdWx0ID0gJ2F1dG8nLFxuXHRcdGxpdmVSZWxvYWQgPSBmYWxzZSxcblx0KSB7XG5cdFx0dGhpcy5hcHAgPSBhcHBcblx0XHR0aGlzLnB1Ymxpc2hlZCA9IGFwcC5jb25maWcuZ2V0KCdhc3NldHMtcHVibGlzaGVkJywge30pXG5cdFx0dGhpcy5zaG91bGRPcHRpbWl6ZURlZmF1bHQgPSBzaG91bGRPcHRpbWl6ZURlZmF1bHRcblx0XHR0aGlzLnNvdXJjZU1hcHNEZWZhdWx0ID0gc291cmNlTWFwc0RlZmF1bHRcblx0XHR0aGlzLmxpdmVSZWxvYWQgPSBsaXZlUmVsb2FkXG5cdH1cblxuXHRtYWtlKHBhdGgpIHtcblx0XHRyZXR1cm4gbmV3IEFzc2V0KHBhdGgsIHRoaXMuZ2V0Q29tcGlsZXJGcm9tUGF0aChwYXRoKSlcblx0fVxuXG5cdHJlZ2lzdGVyQ29tcGlsZXIoY29tcGlsZXIpIHtcblx0XHRpZiAodHlwZW9mIGNvbXBpbGVyID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjb21waWxlciA9IG5ldyBjb21waWxlcih0aGlzLmFwcCwgdGhpcy5zb3VyY2VNYXBzRGVmYXVsdCwgdGhpcy5saXZlUmVsb2FkKVxuXHRcdH1cblxuXHRcdGlmICghKGNvbXBpbGVyIGluc3RhbmNlb2YgQ29tcGlsZXIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ0NvbXBpbGVycyBtdXN0IGV4dGVuZCBDb21waWxlcicpXG5cdFx0fVxuXG5cdFx0dGhpcy5fY29tcGlsZXJzLnB1c2goY29tcGlsZXIpXG5cdFx0dGhpcy5fY29tcGlsZXJzLnNvcnQoKGEsIGIpID0+IChhLnByaW9yaXR5ID4gYi5wcmlvcml0eSA/IC0xIDogMSkpXG5cdH1cblxuXHRyZWdpc3RlclBvc3RQcm9jZXNzb3IocG9zdFByb2Nlc3Nvcikge1xuXHRcdGlmICh0eXBlb2YgcG9zdFByb2Nlc3NvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0cG9zdFByb2Nlc3NvciA9IG5ldyBwb3N0UHJvY2Vzc29yKFxuXHRcdFx0XHR0aGlzLmFwcCxcblx0XHRcdFx0dGhpcy5zaG91bGRPcHRpbWl6ZURlZmF1bHQsXG5cdFx0XHRcdHRoaXMuc291cmNlTWFwc0RlZmF1bHQsXG5cdFx0XHQpXG5cdFx0fVxuXG5cdFx0aWYgKCEocG9zdFByb2Nlc3NvciBpbnN0YW5jZW9mIFBvc3RQcm9jZXNzb3IpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1Bvc3RQcm9jZXNzb3JzIG11c3QgZXh0ZW5kIFBvc3RQcm9jZXNzb3InKVxuXHRcdH1cblxuXHRcdHRoaXMuX3Bvc3RQcm9jZXNzb3JzLnB1c2gocG9zdFByb2Nlc3Nvcilcblx0XHR0aGlzLl9wb3N0UHJvY2Vzc29ycy5zb3J0KChhLCBiKSA9PiAoYS5wcmlvcml0eSA+IGIucHJpb3JpdHkgPyAtMSA6IDEpKVxuXHR9XG5cblx0Z2V0Q29tcGlsZXJGcm9tUGF0aChwYXRoKSB7XG5cdFx0Zm9yIChjb25zdCBjb21waWxlciBvZiB0aGlzLl9jb21waWxlcnMpIHtcblx0XHRcdGlmIChjb21waWxlci5zdXBwb3J0cyhwYXRoKSkge1xuXHRcdFx0XHRyZXR1cm4gY29tcGlsZXJcblx0XHRcdH1cblx0XHR9XG5cblx0XHR0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKGBVbnN1cHBvcnRlZCBhc3NldCBwYXRoOiAke3BhdGh9YClcblx0fVxuXG5cdGdldFBvc3RQcm9jZXNzb3JzRnJvbVBhdGgocGF0aCkge1xuXHRcdHJldHVybiB0aGlzLl9wb3N0UHJvY2Vzc29ycy5maWx0ZXIocG9zdFByb2Nlc3NvciA9PiBwb3N0UHJvY2Vzc29yLnN1cHBvcnRzKHBhdGgpKVxuXHR9XG5cblx0aXNQYXRoU3VwcG9ydGVkKHBhdGgpIHtcblx0XHR0cnkge1xuXHRcdFx0dGhpcy5nZXRDb21waWxlckZyb21QYXRoKHBhdGgpXG5cdFx0XHRyZXR1cm4gdHJ1ZVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiBmYWxzZVxuXHRcdH1cblx0fVxuXG5cdG5vcm1hbGl6ZVBhdGgocGF0aG5hbWUpIHtcblx0XHRpZiAocGF0aG5hbWUuaW5kZXhPZignOi8vJykgIT09IC0xKSB7XG5cdFx0XHRyZXR1cm4gcGF0aG5hbWVcblx0XHR9XG5cblx0XHRyZXR1cm4gcGF0aG5hbWUucmVwbGFjZSgvXihcXC8pPyhhc3NldHNcXC8pPy8sICcnKVxuXHR9XG5cblx0cHVibGlzaGVkUGF0aChwYXRobmFtZSkge1xuXHRcdHBhdGhuYW1lID0gdGhpcy5ub3JtYWxpemVQYXRoKHBhdGhuYW1lKVxuXHRcdHJldHVybiB0aGlzLnB1Ymxpc2hlZFtwYXRobmFtZV0gfHwgcGF0aC5qb2luKCcvYXNzZXRzJywgcGF0aG5hbWUpXG5cdH1cbn1cbiJdfQ==