@eaglesong/task-panorama
Version:
Eaglesong task for Panorama
71 lines • 3.01 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const loader_utils_1 = require("loader-utils");
const upath_1 = tslib_1.__importDefault(require("upath"));
const SingleEntryPlugin_1 = tslib_1.__importDefault(require("webpack/lib/SingleEntryPlugin"));
function pitch(request) {
var _a;
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
const target = (_a = loader_utils_1.getOptions(this), (_a !== null && _a !== void 0 ? _a : {}));
const options = {
filename: 'scripts/[name].js',
...target,
};
this.addDependency(request);
const filename = loader_utils_1.interpolateName(this, options.filename, {});
const compiler = createCompiler(this, filename, options);
runCompiler(compiler, this.async());
}
exports.pitch = pitch;
function runCompiler(compiler, callback) {
// @ts-ignore
compiler.runAsChild((error, chunks) => {
if (error) {
callback(error);
}
else if (chunks.length > 0) {
const url = chunks[0].files[0];
callback(null, `module.exports = __webpack_public_path__ + ${JSON.stringify(url)};`);
}
else {
callback(null, '');
}
});
}
function createCompiler(loader, filename, options) {
var _a;
const oldCompilation = loader._compilation;
const oldCompiler = loader._compiler;
const oldOutputOptions = oldCompiler.options.output;
let plugins = [];
if (options.plugins !== false) {
if (options.plugins == null || options.plugins === true) {
const ignoredPlugins = (_a = options.ignoredPlugins, (_a !== null && _a !== void 0 ? _a : []));
plugins = oldCompiler.options.plugins.filter(p => !ignoredPlugins.includes(p.constructor.name));
}
else {
const allowedPlugins = options.plugins.filter((x) => typeof x === 'string');
plugins = [
...oldCompiler.options.plugins.filter(p => allowedPlugins.includes(p.constructor.name)),
...options.plugins.filter(x => typeof x !== 'string'),
];
}
}
// @ts-ignore
const compilerName = upath_1.default.relative(oldCompiler.context, loader.resourcePath);
// @ts-ignore
const childCompiler = oldCompilation.createChildCompiler(compilerName, { ...oldOutputOptions, filename }, plugins);
// eslint-disable-next-line prefer-destructuring
const rawRequest = loader._module.rawRequest;
new SingleEntryPlugin_1.default(loader.context, rawRequest, 'main').apply(childCompiler);
childCompiler.hooks.compilation.tap('entry-loader', childCompilation => {
if (!childCompilation.cache)
return;
if (!childCompilation.cache[compilerName])
childCompilation.cache[compilerName] = {};
childCompilation.cache = childCompilation.cache[compilerName];
});
return childCompiler;
}
//# sourceMappingURL=index.js.map
;