| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 | /*	MIT License http://www.opensource.org/licenses/mit-license.php	Author Tobias Koppers @sokra*/"use strict";const RuntimeGlobals = require("../RuntimeGlobals");const RuntimeModule = require("../RuntimeModule");const Template = require("../Template");/** @typedef {import("../Chunk")} Chunk *//** @typedef {import("../ChunkGraph")} ChunkGraph *//** @typedef {import("../Compilation")} Compilation */class StartupChunkDependenciesRuntimeModule extends RuntimeModule {	/**	 * @param {boolean} asyncChunkLoading use async chunk loading	 */	constructor(asyncChunkLoading) {		super("startup chunk dependencies", RuntimeModule.STAGE_TRIGGER);		this.asyncChunkLoading = asyncChunkLoading;	}	/**	 * @returns {string | null} runtime code	 */	generate() {		const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);		const chunk = /** @type {Chunk} */ (this.chunk);		const chunkIds = [			...chunkGraph.getChunkEntryDependentChunksIterable(chunk)		].map(chunk => chunk.id);		const compilation = /** @type {Compilation} */ (this.compilation);		const { runtimeTemplate } = compilation;		return Template.asString([			`var next = ${RuntimeGlobals.startup};`,			`${RuntimeGlobals.startup} = ${runtimeTemplate.basicFunction(				"",				!this.asyncChunkLoading					? [							...chunkIds.map(								id => `${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)});`							),							"return next();"						]					: chunkIds.length === 1						? `return ${RuntimeGlobals.ensureChunk}(${JSON.stringify(								chunkIds[0]							)}).then(next);`						: chunkIds.length > 2							? [									// using map is shorter for 3 or more chunks									`return Promise.all(${JSON.stringify(chunkIds)}.map(${										RuntimeGlobals.ensureChunk									}, ${RuntimeGlobals.require})).then(next);`								]							: [									// calling ensureChunk directly is shorter for 0 - 2 chunks									"return Promise.all([",									Template.indent(										chunkIds											.map(												id =>													`${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)})`											)											.join(",\n")									),									"]).then(next);"								]			)};`		]);	}}module.exports = StartupChunkDependenciesRuntimeModule;
 |