UNPKG

casterly

Version:
70 lines (69 loc) 3.73 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const webpack_1 = require("webpack"); // @ts-ignore: no declaration file const ImportDependency_1 = __importDefault(require("webpack/lib/dependencies/ImportDependency")); // @ts-ignore: no declaration file const runtime_1 = require("webpack/lib/util/runtime"); const paths_1 = __importDefault(require("../../../paths")); const RouteImportDependencyTemplate_1 = __importDefault(require("./RouteImportDependencyTemplate")); const { ReplaceSource } = webpack_1.sources; const { JavascriptModulesPlugin } = webpack_1.javascript; const PLUGIN_NAME = 'RouteAssetsChildPlugin'; class RouteAssetsChildPlugin { apply(compiler) { compiler.hooks.compilation.tap({ name: PLUGIN_NAME, stage: Infinity }, (compilation) => { compilation.dependencyTemplates = compiler.parentCompilation.dependencyTemplates.clone(); compilation.dependencyTemplates.set(ImportDependency_1.default, new RouteImportDependencyTemplate_1.default(compiler.parentCompilation)); }); compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => { // Set the main template to return the exports value in // the main IIFE, so we can export it in the hook below compilation.hooks.additionalModuleRuntimeRequirements.tap(PLUGIN_NAME, (_, set) => { set.add(webpack_1.RuntimeGlobals.returnExportsFromRuntime); }); compilation.hooks.optimizeDependencies.tap(PLUGIN_NAME, (modules) => { let runtime = undefined; for (const [name, { options }] of compilation.entries) { runtime = runtime_1.mergeRuntimeOwned(runtime, runtime_1.getEntryRuntime(compilation, name, options)); } for (const module of modules) { if (module instanceof webpack_1.NormalModule && module.userRequest === paths_1.default.appRoutesJs) { // Mark the exports of the routes files as used (in an unknown way) // so they don't get optimized away from the final build const exportsInfo = compilation.moduleGraph.getExportsInfo(module); exportsInfo.setUsedInUnknownWay(runtime); break; } } }); // Add exports to the main template JavascriptModulesPlugin.getCompilationHooks(compilation).renderMain.tap(PLUGIN_NAME, (source) => { const replaceSource = new ReplaceSource(source, 'export return'); replaceSource.insert(0, 'module.exports = ', 'export return'); return replaceSource; }); // Remove chunks generated from the dynamic imports // of the routes.js file, as so to not conflict with // the chunks generated in the parent compiler compilation.hooks.chunkAsset.tap(PLUGIN_NAME, (chunk) => { var _a; if (chunk.isOnlyInitial()) { return; } (_a = compilation.chunkGraph) === null || _a === void 0 ? void 0 : _a.disconnectChunk(chunk); chunk.files.forEach((file) => { compilation.deleteAsset(file); }); chunk.auxiliaryFiles.forEach((file) => { compilation.deleteAsset(file); }); }); }); } } exports.default = RouteAssetsChildPlugin;