UNPKG

@eaglesong/task-panorama

Version:
71 lines 3.01 kB
"use strict"; 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