grind-assets
Version:
Asset management for Grind
100 lines (75 loc) • 10.1 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Compiler = void 0;
var _grindSupport = require("grind-support");
function _isnil(val) { return val === null || typeof val === 'undefined'; }
const path = require('path');
class Compiler {
constructor(app, sourceMaps, liveReload) {
this.app = null;
this.kind = null;
this.priority = 0;
this.supportedExtensions = [];
this.wantsHashSuffixOnPublish = true;
this.sourceMaps = 'auto';
this.liveReload = false;
this.app = app;
this.sourceMaps = sourceMaps;
this.liveReload = liveReload;
} // eslint-disable-next-line no-unused-vars
supports(pathname) {
return this.supportedExtensions.indexOf(path.extname(pathname).replace(/^\./, '')) >= 0;
} // eslint-disable-next-line no-unused-vars
compile(pathname, context = null, req = null) {
return Promise.reject('Abstract method, subclasses must implement.');
}
lastModified(pathname, newest = 0) {
return _grindSupport.FS.stat(pathname).then(stats => {
const timestamp = new Date(stats.mtime).getTime() / 1000.0;
newest = Math.max(newest, timestamp);
return this.enumerateImports(pathname, pathname => this.lastModified(pathname, newest).then(timestamp => {
newest = Math.max(newest, timestamp);
})).then(() => newest);
}).catch(err => {
if (err.code === 'ENOENT') {
return newest;
}
throw err;
});
}
async getLiveReloadImports(pathname, sourcePath = null) {
const imports = [];
if (this.liveReload) {
if (_isnil(sourcePath)) {
sourcePath = this.app.paths.base(this.app.config.get('assets.paths.source'));
}
await this.enumerateImports(pathname, async i => {
if (!i.startsWith(sourcePath)) {
return;
}
imports.push(path.relative(this.app.paths.base(), i), ...(await this.getLiveReloadImports(i, sourcePath)));
});
}
return imports;
} // eslint-disable-next-line no-unused-vars
enumerateImports(file, callback) {
// Does nothing by default, subclasses that support imports
// should override and provider their own implementation.
return Promise.resolve();
}
/* eslint-disable no-unused-vars */
mime(asset) {
throw new Error('Abstract method, subclasses must implement.');
}
type(asset) {
throw new Error('Abstract method, subclasses must implement.');
}
extension(asset) {
throw new Error('Abstract method, subclasses must implement.');
}
/* eslint-enable no-unused-vars */
}
exports.Compiler = Compiler;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9Db21waWxlcnMvQ29tcGlsZXIuanMiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJDb21waWxlciIsImNvbnN0cnVjdG9yIiwiYXBwIiwic291cmNlTWFwcyIsImxpdmVSZWxvYWQiLCJraW5kIiwicHJpb3JpdHkiLCJzdXBwb3J0ZWRFeHRlbnNpb25zIiwid2FudHNIYXNoU3VmZml4T25QdWJsaXNoIiwic3VwcG9ydHMiLCJwYXRobmFtZSIsImluZGV4T2YiLCJleHRuYW1lIiwicmVwbGFjZSIsImNvbXBpbGUiLCJjb250ZXh0IiwicmVxIiwiUHJvbWlzZSIsInJlamVjdCIsImxhc3RNb2RpZmllZCIsIm5ld2VzdCIsIkZTIiwic3RhdCIsInRoZW4iLCJzdGF0cyIsInRpbWVzdGFtcCIsIkRhdGUiLCJtdGltZSIsImdldFRpbWUiLCJNYXRoIiwibWF4IiwiZW51bWVyYXRlSW1wb3J0cyIsImNhdGNoIiwiZXJyIiwiY29kZSIsImdldExpdmVSZWxvYWRJbXBvcnRzIiwic291cmNlUGF0aCIsImltcG9ydHMiLCJwYXRocyIsImJhc2UiLCJjb25maWciLCJnZXQiLCJpIiwic3RhcnRzV2l0aCIsInB1c2giLCJyZWxhdGl2ZSIsImZpbGUiLCJjYWxsYmFjayIsInJlc29sdmUiLCJtaW1lIiwiYXNzZXQiLCJFcnJvciIsInR5cGUiLCJleHRlbnNpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7OztBQUNBLE1BQU1BLElBQUksR0FBR0MsT0FBTyxDQUFDLE1BQUQsQ0FBcEI7O0FBRU8sTUFBTUMsUUFBTixDQUFlO0FBU3JCQyxFQUFBQSxXQUFXLENBQUNDLEdBQUQsRUFBTUMsVUFBTixFQUFrQkMsVUFBbEIsRUFBOEI7QUFBQSxTQVJ6Q0YsR0FReUMsR0FSbkMsSUFRbUM7QUFBQSxTQVB6Q0csSUFPeUMsR0FQbEMsSUFPa0M7QUFBQSxTQU56Q0MsUUFNeUMsR0FOOUIsQ0FNOEI7QUFBQSxTQUx6Q0MsbUJBS3lDLEdBTG5CLEVBS21C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Z0IsQ0FBQ2UsSUFBRCxFQUFPQyxRQUFQLEVBQWlCO0FBQ2hDO0FBQ0E7QUFDQSxXQUFPOUIsT0FBTyxDQUFDK0IsT0FBUixFQUFQO0FBQ0E7QUFFRDs7O0FBQ0FDLEVBQUFBLElBQUksQ0FBQ0MsS0FBRCxFQUFRO0FBQ1gsVUFBTSxJQUFJQyxLQUFKLENBQVUsNkNBQVYsQ0FBTjtBQUNBOztBQUNEQyxFQUFBQSxJQUFJLENBQUNGLEtBQUQsRUFBUTtBQUNYLFVBQU0sSUFBSUMsS0FBSixDQUFVLDZDQUFWLENBQU47QUFDQTs7QUFDREUsRUFBQUEsU0FBUyxDQUFDSCxLQUFELEVBQVE7QUFDaEIsVUFBTSxJQUFJQyxLQUFKLENBQVUsNkNBQVYsQ0FBTjtBQUNBO0FBQ0Q7OztBQXRGcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGUyB9IGZyb20gJ2dyaW5kLXN1cHBvcnQnXG5jb25zdCBwYXRoID0gcmVxdWlyZSgncGF0aCcpXG5cbmV4cG9ydCBjbGFzcyBDb21waWxlciB7XG5cdGFwcCA9IG51bGxcblx0a2luZCA9IG51bGxcblx0cHJpb3JpdHkgPSAwXG5cdHN1cHBvcnRlZEV4dGVuc2lvbnMgPSBbXVxuXHR3YW50c0hhc2hTdWZmaXhPblB1Ymxpc2ggPSB0cnVlXG5cdHNvdXJjZU1hcHMgPSAnYXV0bydcblx0bGl2ZVJlbG9hZCA9IGZhbHNlXG5cblx0Y29uc3RydWN0b3IoYXBwLCBzb3VyY2VNYXBzLCBsaXZlUmVsb2FkKSB7XG5cdFx0dGhpcy5hcHAgPSBhcHBcblx0XHR0aGlzLnNvdXJjZU1hcHMgPSBzb3VyY2VNYXBzXG5cdFx0dGhpcy5saXZlUmVsb2FkID0gbGl2ZVJlbG9hZFxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdHN1cHBvcnRzKHBhdGhuYW1lKSB7XG5cdFx0cmV0dXJuIHRoaXMuc3VwcG9ydGVkRXh0ZW5zaW9ucy5pbmRleE9mKHBhdGguZXh0bmFtZShwYXRobmFtZSkucmVwbGFjZSgvXlxcLi8sICcnKSkgPj0gMFxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5cdGNvbXBpbGUocGF0aG5hbWUsIGNvbnRleHQgPSBudWxsLCByZXEgPSBudWxsKSB7XG5cdFx0cmV0dXJuIFByb21pc2UucmVqZWN0KCdBYnN0cmFjdCBtZXRob2QsIHN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQuJylcblx0fVxuXG5cdGxhc3RNb2RpZmllZChwYXRobmFtZSwgbmV3ZXN0ID0gMCkge1xuXHRcdHJldHVybiBGUy5zdGF0KHBhdGhuYW1lKVxuXHRcdFx0LnRoZW4oc3RhdHMgPT4ge1xuXHRcdFx0XHRjb25zdCB0aW1lc3RhbXAgPSBuZXcgRGF0ZShzdGF0cy5tdGltZSkuZ2V0VGltZSgpIC8gMTAwMC4wXG5cdFx0XHRcdG5ld2VzdCA9IE1hdGgubWF4KG5ld2VzdCwgdGltZXN0YW1wKVxuXG5cdFx0XHRcdHJldHVybiB0aGlzLmVudW1lcmF0ZUltcG9ydHMocGF0aG5hbWUsIHBhdGhuYW1lID0+XG5cdFx0XHRcdFx0dGhpcy5sYXN0TW9kaWZpZWQocGF0aG5hbWUsIG5ld2VzdCkudGhlbih0aW1lc3RhbXAgPT4ge1xuXHRcdFx0XHRcdFx0bmV3ZXN0ID0gTWF0aC5tYXgobmV3ZXN0LCB0aW1lc3RhbXApXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdCkudGhlbigoKSA9PiBuZXdlc3QpXG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGVyciA9PiB7XG5cdFx0XHRcdGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcblx0XHRcdFx0XHRyZXR1cm4gbmV3ZXN0XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aHJvdyBlcnJcblx0XHRcdH0pXG5cdH1cblxuXHRhc3luYyBnZXRMaXZlUmVsb2FkSW1wb3J0cyhwYXRobmFtZSwgc291cmNlUGF0aCA9IG51bGwpIHtcblx0XHRjb25zdCBpbXBvcnRzID0gW11cblxuXHRcdGlmICh0aGlzLmxpdmVSZWxvYWQpIHtcblx0XHRcdGlmIChzb3VyY2VQYXRoLmlzTmlsKSB7XG5cdFx0XHRcdHNvdXJjZVBhdGggPSB0aGlzLmFwcC5wYXRocy5iYXNlKHRoaXMuYXBwLmNvbmZpZy5nZXQoJ2Fzc2V0cy5wYXRocy5zb3VyY2UnKSlcblx0XHRcdH1cblxuXHRcdFx0YXdhaXQgdGhpcy5lbnVtZXJhdGVJbXBvcnRzKHBhdGhuYW1lLCBhc3luYyBpID0+IHtcblx0XHRcdFx0aWYgKCFpLnN0YXJ0c1dpdGgoc291cmNlUGF0aCkpIHtcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGltcG9ydHMucHVzaChcblx0XHRcdFx0XHRwYXRoLnJlbGF0aXZlKHRoaXMuYXBwLnBhdGhzLmJhc2UoKSwgaSksXG5cdFx0XHRcdFx0Li4uKGF3YWl0IHRoaXMuZ2V0TGl2ZVJlbG9hZEltcG9ydHMoaSwgc291cmNlUGF0aCkpLFxuXHRcdFx0XHQpXG5cdFx0XHR9KVxuXHRcdH1cblxuXHRcdHJldHVybiBpbXBvcnRzXG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcblx0ZW51bWVyYXRlSW1wb3J0cyhmaWxlLCBjYWxsYmFjaykge1xuXHRcdC8vIERvZXMgbm90aGluZyBieSBkZWZhdWx0LCBzdWJjbGFzc2VzIHRoYXQgc3VwcG9ydCBpbXBvcnRzXG5cdFx0Ly8gc2hvdWxkIG92ZXJyaWRlIGFuZCBwcm92aWRlciB0aGVpciBvd24gaW1wbGVtZW50YXRpb24uXG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG5cdH1cblxuXHQvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuXHRtaW1lKGFzc2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCBtZXRob2QsIHN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQuJylcblx0fVxuXHR0eXBlKGFzc2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCBtZXRob2QsIHN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQuJylcblx0fVxuXHRleHRlbnNpb24oYXNzZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoJ0Fic3RyYWN0IG1ldGhvZCwgc3ViY2xhc3NlcyBtdXN0IGltcGxlbWVudC4nKVxuXHR9XG5cdC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbn1cbiJdfQ==