| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const { ConcatSource, PrefixSource, RawSource } = require("webpack-sources");const { RuntimeGlobals } = require("..");const HotUpdateChunk = require("../HotUpdateChunk");const Template = require("../Template");const { getCompilationHooks } = require("./JavascriptModulesPlugin");const {	generateEntryStartup,	updateHashForEntryStartup} = require("./StartupHelpers");/** @typedef {import("../Compiler")} Compiler */class ArrayPushCallbackChunkFormatPlugin {	/**	 * Apply the plugin	 * @param {Compiler} compiler the compiler instance	 * @returns {void}	 */	apply(compiler) {		compiler.hooks.thisCompilation.tap(			"ArrayPushCallbackChunkFormatPlugin",			compilation => {				compilation.hooks.additionalChunkRuntimeRequirements.tap(					"ArrayPushCallbackChunkFormatPlugin",					(chunk, set, { chunkGraph }) => {						if (chunk.hasRuntime()) return;						if (chunkGraph.getNumberOfEntryModules(chunk) > 0) {							set.add(RuntimeGlobals.onChunksLoaded);							set.add(RuntimeGlobals.require);						}						set.add(RuntimeGlobals.chunkCallback);					}				);				const hooks = getCompilationHooks(compilation);				hooks.renderChunk.tap(					"ArrayPushCallbackChunkFormatPlugin",					(modules, renderContext) => {						const { chunk, chunkGraph, runtimeTemplate } = renderContext;						const hotUpdateChunk =							chunk instanceof HotUpdateChunk ? chunk : null;						const globalObject = runtimeTemplate.globalObject;						const source = new ConcatSource();						const runtimeModules =							chunkGraph.getChunkRuntimeModulesInOrder(chunk);						if (hotUpdateChunk) {							const hotUpdateGlobal =								runtimeTemplate.outputOptions.hotUpdateGlobal;							source.add(								`${globalObject}[${JSON.stringify(hotUpdateGlobal)}](`							);							source.add(`${JSON.stringify(chunk.id)},`);							source.add(modules);							if (runtimeModules.length > 0) {								source.add(",\n");								const runtimePart = Template.renderChunkRuntimeModules(									runtimeModules,									renderContext								);								source.add(runtimePart);							}							source.add(")");						} else {							const chunkLoadingGlobal =								runtimeTemplate.outputOptions.chunkLoadingGlobal;							source.add(								`(${globalObject}[${JSON.stringify(									chunkLoadingGlobal								)}] = ${globalObject}[${JSON.stringify(									chunkLoadingGlobal								)}] || []).push([`							);							source.add(`${JSON.stringify(chunk.ids)},`);							source.add(modules);							const entries = Array.from(								chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)							);							if (runtimeModules.length > 0 || entries.length > 0) {								const runtime = new ConcatSource(									(runtimeTemplate.supportsArrowFunction()										? "__webpack_require__ =>"										: "function(__webpack_require__)") +										" { // webpackRuntimeModules\n"								);								if (runtimeModules.length > 0) {									runtime.add(										Template.renderRuntimeModules(runtimeModules, {											...renderContext,											codeGenerationResults: compilation.codeGenerationResults										})									);								}								if (entries.length > 0) {									const startupSource = new RawSource(										generateEntryStartup(											chunkGraph,											runtimeTemplate,											entries,											chunk,											true										)									);									runtime.add(										hooks.renderStartup.call(											startupSource,											entries[entries.length - 1][0],											{												...renderContext,												inlined: false											}										)									);									if (										chunkGraph											.getChunkRuntimeRequirements(chunk)											.has(RuntimeGlobals.returnExportsFromRuntime)									) {										runtime.add("return __webpack_exports__;\n");									}								}								runtime.add("}\n");								source.add(",\n");								source.add(new PrefixSource("/******/ ", runtime));							}							source.add("])");						}						return source;					}				);				hooks.chunkHash.tap(					"ArrayPushCallbackChunkFormatPlugin",					(chunk, hash, { chunkGraph, runtimeTemplate }) => {						if (chunk.hasRuntime()) return;						hash.update(							`ArrayPushCallbackChunkFormatPlugin1${runtimeTemplate.outputOptions.chunkLoadingGlobal}${runtimeTemplate.outputOptions.hotUpdateGlobal}${runtimeTemplate.globalObject}`						);						const entries = Array.from(							chunkGraph.getChunkEntryModulesWithChunkGroupIterable(chunk)						);						updateHashForEntryStartup(hash, chunkGraph, entries, chunk);					}				);			}		);	}}module.exports = ArrayPushCallbackChunkFormatPlugin;
 |