UNPKG

grind-assets

Version:
145 lines (118 loc) 15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RollupStage = void 0; var _Stage = require("./Stage.js"); var _makeSyntaxError = require("../../Errors/makeSyntaxError.js"); var _optional = require("../../Support/optional.js"); function _isnil(val) { return val === null || typeof val === 'undefined'; } const rollup = (0, _optional.optional)('rollup', '>=1.0.0'); const rollupBabel = (0, _optional.optional)('@rollup/plugin-babel', '>=5.1.0'); class RollupStage extends _Stage.Stage { constructor(app, sourceMaps, { enabled = false, output = {}, plugins = {}, ...options } = {}) { super(app, sourceMaps); this.plugins = []; this.options = null; this.output = null; this.options = options; this.output = output; this.enabled = enabled; if (_isnil(plugins['@rollup/plugin-babel'])) { plugins['@rollup/plugin-babel'] = true; } for (const [plugin, config] of Object.entries(plugins)) { if (config === false) { continue; } if (plugin === '@rollup/plugin-babel') { if (!_isnil(config) && typeof config.root === 'string') { config.root = this.app.paths.base(config.root); } this.plugins.push([rollupBabel, config]); } else if (plugin[0] === '~') { const name = `Rollup${plugin[1].toUpperCase()}${plugin.substring(2)}Plugin`; this.plugins.push([require(`../../Rollup/${name}`)[name], { grind: app, req: true, ...(!_isnil(config) && typeof config === 'object' ? config : {}) }]); } else { if (plugin === '@rollup/plugin-replace' && _isnil(config['process.env.NODE_ENV'])) { config['process.env.NODE_ENV'] = JSON.stringify(process.env.ROLLUP_ENV || process.env.BABEL_ENV || process.env.NODE_ENV); } this.plugins.push([(0, _optional.optional)(plugin), config]); } } } async compile(pathname, stream = null, req = null) { rollup.assert(); if (this.handleBabel) { rollupBabel.assert(); } if (!_isnil(stream)) { throw new Error('Preprocessed stream not supported'); } const plugins = []; for (const [plugin, config] of this.plugins) { if (plugin.name === '@rollup/plugin-babel' && !this.handleBabel) { continue; } plugin.assert(); if (!plugin.pkg) { continue; } if (!_isnil(config) && typeof config === 'object') { if (config.req === true) { config.req = req; } } plugins.push(plugin.pkg(config || {})); } try { const bundle = await rollup.pkg.rollup({ ...this.options, input: pathname, plugins }); const { output } = await bundle.generate({ format: 'cjs', sourcemap: this.sourceMaps === 'auto', ...this.output }); if (!Array.isArray(output) || output.length !== 1 || output[0].isEntry !== true) { throw new Error('Unsupported file'); } const [{ map, code }] = output; const inlineMap = !_isnil(map) ? `\n//# sourceMappingURL=${map.toUrl()}\n` : null; return `${code}${inlineMap || ''}`; } catch (err) { if (!(err instanceof SyntaxError)) { throw err; } let message = err.message; message = err.message.split(/\n/)[0]; message = message.substring(message.indexOf(':') + 1).trim(); const loc = err.loc || {}; throw await (0, _makeSyntaxError.makeSyntaxError)(this.app, { message, fileName: err.id || loc.file || loc.fileName || pathname, lineNumber: loc.line, columnNumber: loc.column, causedBy: err }); } } } exports.RollupStage = RollupStage; RollupStage.configName = 'rollup'; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9Db21waWxlcnMvQmFiZWxDb21waWxlci9Sb2xsdXBTdGFnZS5qcyJdLCJuYW1lcyI6WyJyb2xsdXAiLCJyb2xsdXBCYWJlbCIsIlJvbGx1cFN0YWdlIiwiU3RhZ2UiLCJjb25zdHJ1Y3RvciIsImFwcCIsInNvdXJjZU1hcHMiLCJlbmFibGVkIiwib3V0cHV0IiwicGx1Z2lucyIsIm9wdGlvbnMiLCJwbHVnaW4iLCJjb25maWciLCJPYmplY3QiLCJlbnRyaWVzIiwicm9vdCIsInBhdGhzIiwiYmFzZSIsInB1c2giLCJuYW1lIiwidG9VcHBlckNhc2UiLCJzdWJzdHJpbmciLCJyZXF1aXJlIiwiZ3JpbmQiLCJyZXEiLCJKU09OIiwic3RyaW5naWZ5IiwicHJvY2VzcyIsImVudiIsIlJPTExVUF9FTlYiLCJCQUJFTF9FTlYiLCJOT0RFX0VOViIsImNvbXBpbGUiLCJwYXRobmFtZSIsInN0cmVhbSIsImFzc2VydCIsImhhbmRsZUJhYmVsIiwiRXJyb3IiLCJwa2ciLCJidW5kbGUiLCJpbnB1dCIsImdlbmVyYXRlIiwiZm9ybWF0Iiwic291cmNlbWFwIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNFbnRyeSIsIm1hcCIsImNvZGUiLCJpbmxpbmVNYXAiLCJ0b1VybCIsImVyciIsIlN5bnRheEVycm9yIiwibWVzc2FnZSIsInNwbGl0IiwiaW5kZXhPZiIsInRyaW0iLCJsb2MiLCJmaWxlTmFtZSIsImlkIiwiZmlsZSIsImxpbmVOdW1iZXIiLCJsaW5lIiwiY29sdW1uTnVtYmVyIiwiY29sdW1uIiwiY2F1c2VkQnkiLCJjb25maWdOYW1lIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFJQSxNQUFNQSxNQUFNLEdBQUcsd0JBQVMsUUFBVCxFQUFtQixTQUFuQixDQUFmO0FBQ0EsTUFBTUMsV0FBVyxHQUFHLHdCQUFTLHNCQUFULEVBQWlDLFNBQWpDLENBQXBCOztBQUVPLE1BQU1DLFdBQU4sU0FBMEJDLFlBQTFCLENBQWdD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QUFDQyxRQUExQixJQUFzQzFCLFFBRlg7QUFHckM2QixRQUFBQSxVQUFVLEVBQUVKLEdBQUcsQ0FBQ0ssSUFIcUI7QUFJckNDLFFBQUFBLFlBQVksRUFBRU4sR0FBRyxDQUFDTyxNQUptQjtBQUtyQ0MsUUFBQUEsUUFBUSxFQUFFZDtBQUwyQixPQUExQixDQUFaO0FBT0E7QUFDRDs7QUExSHFDOzs7QUFBMUJsRCxXLENBQ0xpRSxVLEdBQWEsUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAnLi9TdGFnZSdcbmltcG9ydCAnLi4vLi4vRXJyb3JzL21ha2VTeW50YXhFcnJvcidcbmltcG9ydCAnLi4vLi4vU3VwcG9ydC9vcHRpb25hbCdcblxuY29uc3Qgcm9sbHVwID0gb3B0aW9uYWwoJ3JvbGx1cCcsICc+PTEuMC4wJylcbmNvbnN0IHJvbGx1cEJhYmVsID0gb3B0aW9uYWwoJ0Byb2xsdXAvcGx1Z2luLWJhYmVsJywgJz49NS4xLjAnKVxuXG5leHBvcnQgY2xhc3MgUm9sbHVwU3RhZ2UgZXh0ZW5kcyBTdGFnZSB7XG5cdHN0YXRpYyBjb25maWdOYW1lID0gJ3JvbGx1cCdcblx0cGx1Z2lucyA9IFtdXG5cdG9wdGlvbnMgPSBudWxsXG5cdG91dHB1dCA9IG51bGxcblxuXHRjb25zdHJ1Y3RvcihhcHAsIHNvdXJjZU1hcHMsIHsgZW5hYmxlZCA9IGZhbHNlLCBvdXRwdXQgPSB7fSwgcGx1Z2lucyA9IHt9LCAuLi5vcHRpb25zIH0gPSB7fSkge1xuXHRcdHN1cGVyKGFwcCwgc291cmNlTWFwcylcblxuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblx0XHR0aGlzLm91dHB1dCA9IG91dHB1dFxuXHRcdHRoaXMuZW5hYmxlZCA9IGVuYWJsZWRcblxuXHRcdGlmIChwbHVnaW5zWydAcm9sbHVwL3BsdWdpbi1iYWJlbCddLmlzTmlsKSB7XG5cdFx0XHRwbHVnaW5zWydAcm9sbHVwL3BsdWdpbi1iYWJlbCddID0gdHJ1ZVxuXHRcdH1cblxuXHRcdGZvciAoY29uc3QgW3BsdWdpbiwgY29uZmlnXSBvZiBPYmplY3QuZW50cmllcyhwbHVnaW5zKSkge1xuXHRcdFx0aWYgKGNvbmZpZyA9PT0gZmFsc2UpIHtcblx0XHRcdFx0Y29udGludWVcblx0XHRcdH1cblxuXHRcdFx0aWYgKHBsdWdpbiA9PT0gJ0Byb2xsdXAvcGx1Z2luLWJhYmVsJykge1xuXHRcdFx0XHRpZiAoIWNvbmZpZy5pc05pbCAmJiB0eXBlb2YgY29uZmlnLnJvb3QgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0Y29uZmlnLnJvb3QgPSB0aGlzLmFwcC5wYXRocy5iYXNlKGNvbmZpZy5yb290KVxuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMucGx1Z2lucy5wdXNoKFtyb2xsdXBCYWJlbCwgY29uZmlnXSlcblx0XHRcdH0gZWxzZSBpZiAocGx1Z2luWzBdID09PSAnficpIHtcblx0XHRcdFx0Y29uc3QgbmFtZSA9IGBSb2xsdXAke3BsdWdpblsxXS50b1VwcGVyQ2FzZSgpfSR7cGx1Z2luLnN1YnN0cmluZygyKX1QbHVnaW5gXG5cdFx0XHRcdHRoaXMucGx1Z2lucy5wdXNoKFtcblx0XHRcdFx0XHRyZXF1aXJlKGAuLi8uLi9Sb2xsdXAvJHtuYW1lfWApW25hbWVdLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGdyaW5kOiBhcHAsXG5cdFx0XHRcdFx0XHRyZXE6IHRydWUsXG5cdFx0XHRcdFx0XHQuLi4oIWNvbmZpZy5pc05pbCAmJiB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IHt9KSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRdKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHBsdWdpbiA9PT0gJ0Byb2xsdXAvcGx1Z2luLXJlcGxhY2UnICYmIGNvbmZpZ1sncHJvY2Vzcy5lbnYuTk9ERV9FTlYnXS5pc05pbCkge1xuXHRcdFx0XHRcdGNvbmZpZ1sncHJvY2Vzcy5lbnYuTk9ERV9FTlYnXSA9IEpTT04uc3RyaW5naWZ5KFxuXHRcdFx0XHRcdFx0cHJvY2Vzcy5lbnYuUk9MTFVQX0VOViB8fCBwcm9jZXNzLmVudi5CQUJFTF9FTlYgfHwgcHJvY2Vzcy5lbnYuTk9ERV9FTlYsXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5wbHVnaW5zLnB1c2goW29wdGlvbmFsKHBsdWdpbiksIGNvbmZpZ10pXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgY29tcGlsZShwYXRobmFtZSwgc3RyZWFtID0gbnVsbCwgcmVxID0gbnVsbCkge1xuXHRcdHJvbGx1cC5hc3NlcnQoKVxuXG5cdFx0aWYgKHRoaXMuaGFuZGxlQmFiZWwpIHtcblx0XHRcdHJvbGx1cEJhYmVsLmFzc2VydCgpXG5cdFx0fVxuXG5cdFx0aWYgKCFzdHJlYW0uaXNOaWwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignUHJlcHJvY2Vzc2VkIHN0cmVhbSBub3Qgc3VwcG9ydGVkJylcblx0XHR9XG5cblx0XHRjb25zdCBwbHVnaW5zID0gW11cblxuXHRcdGZvciAoY29uc3QgW3BsdWdpbiwgY29uZmlnXSBvZiB0aGlzLnBsdWdpbnMpIHtcblx0XHRcdGlmIChwbHVnaW4ubmFtZSA9PT0gJ0Byb2xsdXAvcGx1Z2luLWJhYmVsJyAmJiAhdGhpcy5oYW5kbGVCYWJlbCkge1xuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0fVxuXG5cdFx0XHRwbHVnaW4uYXNzZXJ0KClcblxuXHRcdFx0aWYgKCFwbHVnaW4ucGtnKSB7XG5cdFx0XHRcdGNvbnRpbnVlXG5cdFx0XHR9XG5cblx0XHRcdGlmICghY29uZmlnLmlzTmlsICYmIHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGlmIChjb25maWcucmVxID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0Y29uZmlnLnJlcSA9IHJlcVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHBsdWdpbnMucHVzaChwbHVnaW4ucGtnKGNvbmZpZyB8fCB7fSkpXG5cdFx0fVxuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGJ1bmRsZSA9IGF3YWl0IHJvbGx1cC5wa2cucm9sbHVwKHtcblx0XHRcdFx0Li4udGhpcy5vcHRpb25zLFxuXHRcdFx0XHRpbnB1dDogcGF0aG5hbWUsXG5cdFx0XHRcdHBsdWdpbnMsXG5cdFx0XHR9KVxuXG5cdFx0XHRjb25zdCB7IG91dHB1dCB9ID0gYXdhaXQgYnVuZGxlLmdlbmVyYXRlKHtcblx0XHRcdFx0Zm9ybWF0OiAnY2pzJyxcblx0XHRcdFx0c291cmNlbWFwOiB0aGlzLnNvdXJjZU1hcHMgPT09ICdhdXRvJyxcblx0XHRcdFx0Li4udGhpcy5vdXRwdXQsXG5cdFx0XHR9KVxuXG5cdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkob3V0cHV0KSB8fCBvdXRwdXQubGVuZ3RoICE9PSAxIHx8IG91dHB1dFswXS5pc0VudHJ5ICE9PSB0cnVlKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgZmlsZScpXG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IFt7IG1hcCwgY29kZSB9XSA9IG91dHB1dFxuXG5cdFx0XHRjb25zdCBpbmxpbmVNYXAgPSAhbWFwLmlzTmlsID8gYFxcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPSR7bWFwLnRvVXJsKCl9XFxuYCA6IG51bGxcblx0XHRcdHJldHVybiBgJHtjb2RlfSR7aW5saW5lTWFwIHx8ICcnfWBcblx0XHR9IGNhdGNoIChlcnIpIHtcblx0XHRcdGlmICghKGVyciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSkge1xuXHRcdFx0XHR0aHJvdyBlcnJcblx0XHRcdH1cblxuXHRcdFx0bGV0IG1lc3NhZ2UgPSBlcnIubWVzc2FnZVxuXHRcdFx0bWVzc2FnZSA9IGVyci5tZXNzYWdlLnNwbGl0KC9cXG4vKVswXVxuXHRcdFx0bWVzc2FnZSA9IG1lc3NhZ2Uuc3Vic3RyaW5nKG1lc3NhZ2UuaW5kZXhPZignOicpICsgMSkudHJpbSgpXG5cblx0XHRcdGNvbnN0IGxvYyA9IGVyci5sb2MgfHwge31cblxuXHRcdFx0dGhyb3cgYXdhaXQgbWFrZVN5bnRheEVycm9yKHRoaXMuYXBwLCB7XG5cdFx0XHRcdG1lc3NhZ2UsXG5cdFx0XHRcdGZpbGVOYW1lOiBlcnIuaWQgfHwgbG9jLmZpbGUgfHwgbG9jLmZpbGVOYW1lIHx8IHBhdGhuYW1lLFxuXHRcdFx0XHRsaW5lTnVtYmVyOiBsb2MubGluZSxcblx0XHRcdFx0Y29sdW1uTnVtYmVyOiBsb2MuY29sdW1uLFxuXHRcdFx0XHRjYXVzZWRCeTogZXJyLFxuXHRcdFx0fSlcblx0XHR9XG5cdH1cbn1cbiJdfQ==