| 
									
										
										
										
											2017-12-07 17:31:00 +08:00
										 |  |  | /* | 
					
						
							|  |  |  | 	MIT License http://www.opensource.org/licenses/mit-license.php
 | 
					
						
							|  |  |  | 	Author Tobias Koppers @sokra | 
					
						
							|  |  |  | */ | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-07 17:31:00 +08:00
										 |  |  | "use strict"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | const RuntimeGlobals = require("./RuntimeGlobals"); | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | const Template = require("./Template"); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-23 23:33:29 +08:00
										 |  |  | /** @typedef {import("./AsyncDependenciesBlock")} AsyncDependenciesBlock */ | 
					
						
							| 
									
										
										
										
											2018-08-23 02:17:49 +08:00
										 |  |  | /** @typedef {import("./ChunkGraph")} ChunkGraph */ | 
					
						
							| 
									
										
										
										
											2018-07-30 23:08:51 +08:00
										 |  |  | /** @typedef {import("./Module")} Module */ | 
					
						
							| 
									
										
										
										
											2018-08-07 01:39:43 +08:00
										 |  |  | /** @typedef {import("./ModuleGraph")} ModuleGraph */ | 
					
						
							| 
									
										
										
										
											2018-07-31 03:36:46 +08:00
										 |  |  | /** @typedef {import("./RequestShortener")} RequestShortener */ | 
					
						
							| 
									
										
										
										
											2018-07-21 00:17:51 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | class RuntimeTemplate { | 
					
						
							| 
									
										
										
										
											2018-07-31 03:36:46 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {TODO} outputOptions the compilation output options | 
					
						
							|  |  |  | 	 * @param {RequestShortener} requestShortener the request shortener | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-12-07 17:31:00 +08:00
										 |  |  | 	constructor(outputOptions, requestShortener) { | 
					
						
							|  |  |  | 		this.outputOptions = outputOptions || {}; | 
					
						
							| 
									
										
										
										
											2018-07-31 03:36:46 +08:00
										 |  |  | 		/** @type {RequestShortener} */ | 
					
						
							| 
									
										
										
										
											2017-12-07 17:31:00 +08:00
										 |  |  | 		this.requestShortener = requestShortener; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-04-12 00:25:50 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Add a comment | 
					
						
							| 
									
										
										
										
											2018-04-12 16:01:09 +08:00
										 |  |  | 	 * @param {object} options Information content of the comment | 
					
						
							|  |  |  | 	 * @param {string=} options.request request string used originally | 
					
						
							|  |  |  | 	 * @param {string=} options.chunkName name of the chunk referenced | 
					
						
							|  |  |  | 	 * @param {string=} options.chunkReason reason information of the chunk | 
					
						
							|  |  |  | 	 * @param {string=} options.message additional message | 
					
						
							|  |  |  | 	 * @param {string=} options.exportName name of the export | 
					
						
							| 
									
										
										
										
											2018-05-08 20:31:51 +08:00
										 |  |  | 	 * @returns {string} comment | 
					
						
							| 
									
										
										
										
											2018-04-12 00:25:50 +08:00
										 |  |  | 	 */ | 
					
						
							|  |  |  | 	comment({ request, chunkName, chunkReason, message, exportName }) { | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		let content; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (this.outputOptions.pathinfo) { | 
					
						
							|  |  |  | 			content = [message, request, chunkName, chunkReason] | 
					
						
							|  |  |  | 				.filter(Boolean) | 
					
						
							|  |  |  | 				.map(item => this.requestShortener.shorten(item)) | 
					
						
							|  |  |  | 				.join(" | "); | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			content = [message, chunkName, chunkReason] | 
					
						
							|  |  |  | 				.filter(Boolean) | 
					
						
							|  |  |  | 				.map(item => this.requestShortener.shorten(item)) | 
					
						
							|  |  |  | 				.join(" | "); | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (!content) return ""; | 
					
						
							|  |  |  | 		if (this.outputOptions.pathinfo) { | 
					
						
							| 
									
										
										
										
											2017-12-23 15:11:28 +08:00
										 |  |  | 			return Template.toComment(content) + " "; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2017-12-23 15:11:28 +08:00
										 |  |  | 			return Template.toNormalComment(content) + " "; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 03:36:46 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {object} options generation options | 
					
						
							|  |  |  | 	 * @param {string=} options.request request string used originally | 
					
						
							|  |  |  | 	 * @returns {string} generated error block | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	throwMissingModuleErrorBlock({ request }) { | 
					
						
							| 
									
										
										
										
											2018-05-15 14:16:39 +08:00
										 |  |  | 		const err = `Cannot find module '${request}'`; | 
					
						
							| 
									
										
										
										
											2018-07-31 03:36:46 +08:00
										 |  |  | 		return `var e = new Error(${JSON.stringify( | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			err | 
					
						
							| 
									
										
										
										
											2018-07-31 03:36:46 +08:00
										 |  |  | 		)}); e.code = 'MODULE_NOT_FOUND'; throw e;`;
 | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 03:36:46 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {object} options generation options | 
					
						
							|  |  |  | 	 * @param {string=} options.request request string used originally | 
					
						
							|  |  |  | 	 * @returns {string} generated error function | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	throwMissingModuleErrorFunction({ request }) { | 
					
						
							|  |  |  | 		return `function webpackMissingModule() { ${this.throwMissingModuleErrorBlock( | 
					
						
							|  |  |  | 			{ request } | 
					
						
							|  |  |  | 		)} }`;
 | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {object} options generation options | 
					
						
							|  |  |  | 	 * @param {string=} options.request request string used originally | 
					
						
							|  |  |  | 	 * @returns {string} generated error IIFE | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 	missingModule({ request }) { | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		return `!(${this.throwMissingModuleErrorFunction({ request })}())`; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 03:36:46 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {object} options generation options | 
					
						
							|  |  |  | 	 * @param {string=} options.request request string used originally | 
					
						
							|  |  |  | 	 * @returns {string} generated error statement | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 	missingModuleStatement({ request }) { | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		return `${this.missingModule({ request })};\n`; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-31 03:36:46 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {object} options generation options | 
					
						
							|  |  |  | 	 * @param {string=} options.request request string used originally | 
					
						
							|  |  |  | 	 * @returns {string} generated error code | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 	missingModulePromise({ request }) { | 
					
						
							|  |  |  | 		return `Promise.resolve().then(${this.throwMissingModuleErrorFunction({ | 
					
						
							|  |  |  | 			request | 
					
						
							|  |  |  | 		})})`;
 | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Object} options options object | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	 * @param {ChunkGraph} options.chunkGraph the chunk graph | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	 * @param {Module} options.module the module | 
					
						
							|  |  |  | 	 * @param {string} options.request the request that should be printed as comment | 
					
						
							|  |  |  | 	 * @param {string=} options.idExpr expression to use as id expression | 
					
						
							|  |  |  | 	 * @param {"expression" | "promise" | "statements"} options.type which kind of code should be returned | 
					
						
							|  |  |  | 	 * @returns {string} the code | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	weakError({ module, chunkGraph, request, idExpr, type }) { | 
					
						
							| 
									
										
										
										
											2018-08-28 17:56:48 +08:00
										 |  |  | 		const moduleId = chunkGraph.getModuleId(module); | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 		const errorMessage = | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 			moduleId === null | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 				? JSON.stringify("Module is not available (weak dependency)") | 
					
						
							|  |  |  | 				: idExpr | 
					
						
							|  |  |  | 					? `"Module '" + ${idExpr} + "' is not available (weak dependency)"` | 
					
						
							|  |  |  | 					: JSON.stringify( | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 							`Module '${moduleId}' is not available (weak dependency)` | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 					  ); | 
					
						
							|  |  |  | 		const comment = request ? Template.toNormalComment(request) + " " : ""; | 
					
						
							|  |  |  | 		const errorStatements = | 
					
						
							|  |  |  | 			`var e = new Error(${errorMessage}); ` + | 
					
						
							|  |  |  | 			comment + | 
					
						
							|  |  |  | 			"e.code = 'MODULE_NOT_FOUND'; throw e;"; | 
					
						
							|  |  |  | 		switch (type) { | 
					
						
							|  |  |  | 			case "statements": | 
					
						
							|  |  |  | 				return errorStatements; | 
					
						
							|  |  |  | 			case "promise": | 
					
						
							|  |  |  | 				return `Promise.resolve().then(function() { ${errorStatements} })`; | 
					
						
							|  |  |  | 			case "expression": | 
					
						
							|  |  |  | 				return `(function() { ${errorStatements} }())`; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Object} options options object | 
					
						
							|  |  |  | 	 * @param {Module} options.module the module | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	 * @param {ChunkGraph} options.chunkGraph the chunk graph | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	 * @param {string} options.request the request that should be printed as comment | 
					
						
							|  |  |  | 	 * @param {boolean=} options.weak if the dependency is weak (will create a nice error message) | 
					
						
							|  |  |  | 	 * @returns {string} the expression | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	moduleId({ module, chunkGraph, request, weak }) { | 
					
						
							| 
									
										
										
										
											2018-05-28 03:47:23 +08:00
										 |  |  | 		if (!module) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return this.missingModule({ | 
					
						
							|  |  |  | 				request | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2018-05-28 03:47:23 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-28 17:56:48 +08:00
										 |  |  | 		const moduleId = chunkGraph.getModuleId(module); | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 		if (moduleId === null) { | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 			if (weak) { | 
					
						
							|  |  |  | 				return "null /* weak dependency, without id */"; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-05-28 03:47:23 +08:00
										 |  |  | 			throw new Error( | 
					
						
							|  |  |  | 				`RuntimeTemplate.moduleId(): Module ${module.identifier()} has no id. This should not happen.` | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 		return `${this.comment({ request })}${JSON.stringify(moduleId)}`; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Object} options options object | 
					
						
							|  |  |  | 	 * @param {Module} options.module the module | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	 * @param {ChunkGraph} options.chunkGraph the chunk graph | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	 * @param {string} options.request the request that should be printed as comment | 
					
						
							|  |  |  | 	 * @param {boolean=} options.weak if the dependency is weak (will create a nice error message) | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	 * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	 * @returns {string} the expression | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	moduleRaw({ module, chunkGraph, request, weak, runtimeRequirements }) { | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		if (!module) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return this.missingModule({ | 
					
						
							|  |  |  | 				request | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-28 17:56:48 +08:00
										 |  |  | 		const moduleId = chunkGraph.getModuleId(module); | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 		if (moduleId === null) { | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 			if (weak) { | 
					
						
							|  |  |  | 				// only weak referenced modules don't get an id
 | 
					
						
							|  |  |  | 				// we can always emit an error emitting code here
 | 
					
						
							|  |  |  | 				return this.weakError({ | 
					
						
							|  |  |  | 					module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 					chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 					request, | 
					
						
							|  |  |  | 					type: "expression" | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			throw new Error( | 
					
						
							|  |  |  | 				`RuntimeTemplate.moduleId(): Module ${module.identifier()} has no id. This should not happen.` | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 		runtimeRequirements.add(RuntimeGlobals.require); | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 		return `__webpack_require__(${this.moduleId({ | 
					
						
							|  |  |  | 			module, | 
					
						
							|  |  |  | 			chunkGraph, | 
					
						
							|  |  |  | 			request, | 
					
						
							|  |  |  | 			weak | 
					
						
							|  |  |  | 		})})`;
 | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Object} options options object | 
					
						
							|  |  |  | 	 * @param {Module} options.module the module | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	 * @param {ChunkGraph} options.chunkGraph the chunk graph | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	 * @param {string} options.request the request that should be printed as comment | 
					
						
							|  |  |  | 	 * @param {boolean=} options.weak if the dependency is weak (will create a nice error message) | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	 * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	 * @returns {string} the expression | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	moduleExports({ module, chunkGraph, request, weak, runtimeRequirements }) { | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		return this.moduleRaw({ | 
					
						
							|  |  |  | 			module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 			chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 			request, | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 			weak, | 
					
						
							|  |  |  | 			runtimeRequirements | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Object} options options object | 
					
						
							|  |  |  | 	 * @param {Module} options.module the module | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	 * @param {ChunkGraph} options.chunkGraph the chunk graph | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	 * @param {string} options.request the request that should be printed as comment | 
					
						
							|  |  |  | 	 * @param {boolean=} options.strict if the current module is in strict esm mode | 
					
						
							|  |  |  | 	 * @param {boolean=} options.weak if the dependency is weak (will create a nice error message) | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	 * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	 * @returns {string} the expression | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-11-15 00:31:32 +08:00
										 |  |  | 	moduleNamespace({ | 
					
						
							|  |  |  | 		module, | 
					
						
							|  |  |  | 		chunkGraph, | 
					
						
							|  |  |  | 		request, | 
					
						
							|  |  |  | 		strict, | 
					
						
							|  |  |  | 		weak, | 
					
						
							|  |  |  | 		runtimeRequirements | 
					
						
							|  |  |  | 	}) { | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		if (!module) { | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			return this.missingModule({ | 
					
						
							|  |  |  | 				request | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-28 17:56:48 +08:00
										 |  |  | 		if (chunkGraph.getModuleId(module) === null) { | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 			if (weak) { | 
					
						
							|  |  |  | 				// only weak referenced modules don't get an id
 | 
					
						
							|  |  |  | 				// we can always emit an error emitting code here
 | 
					
						
							|  |  |  | 				return this.weakError({ | 
					
						
							|  |  |  | 					module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 					chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 					request, | 
					
						
							|  |  |  | 					type: "expression" | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			throw new Error( | 
					
						
							|  |  |  | 				`RuntimeTemplate.moduleNamespace(): Module ${module.identifier()} has no id. This should not happen.` | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 		const moduleId = this.moduleId({ | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 			module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 			chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 			request, | 
					
						
							|  |  |  | 			weak | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 		const exportsType = module.buildMeta && module.buildMeta.exportsType; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (exportsType === "namespace") { | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			const rawModule = this.moduleRaw({ | 
					
						
							|  |  |  | 				module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 				chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 				request, | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 				weak, | 
					
						
							|  |  |  | 				runtimeRequirements | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 			return rawModule; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} else if (exportsType === "named") { | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 			return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 3)`; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} else if (strict) { | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 			return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 1)`; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 			return `${RuntimeGlobals.createFakeNamespaceObject}(${moduleId}, 7)`; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-23 23:33:29 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Object} options options object | 
					
						
							| 
									
										
										
										
											2018-08-23 02:17:49 +08:00
										 |  |  | 	 * @param {ChunkGraph} options.chunkGraph the chunk graph | 
					
						
							| 
									
										
										
										
											2018-07-23 23:33:29 +08:00
										 |  |  | 	 * @param {AsyncDependenciesBlock=} options.block the current dependencies block | 
					
						
							|  |  |  | 	 * @param {Module} options.module the module | 
					
						
							|  |  |  | 	 * @param {string} options.request the request that should be printed as comment | 
					
						
							|  |  |  | 	 * @param {string} options.message a message for the comment | 
					
						
							|  |  |  | 	 * @param {boolean=} options.strict if the current module is in strict esm mode | 
					
						
							|  |  |  | 	 * @param {boolean=} options.weak if the dependency is weak (will create a nice error message) | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	 * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements | 
					
						
							| 
									
										
										
										
											2018-07-23 23:33:29 +08:00
										 |  |  | 	 * @returns {string} the promise expression | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-08-23 02:17:49 +08:00
										 |  |  | 	moduleNamespacePromise({ | 
					
						
							|  |  |  | 		chunkGraph, | 
					
						
							|  |  |  | 		block, | 
					
						
							|  |  |  | 		module, | 
					
						
							|  |  |  | 		request, | 
					
						
							|  |  |  | 		message, | 
					
						
							|  |  |  | 		strict, | 
					
						
							| 
									
										
										
										
											2018-11-15 00:31:32 +08:00
										 |  |  | 		weak, | 
					
						
							|  |  |  | 		runtimeRequirements | 
					
						
							| 
									
										
										
										
											2018-08-23 02:17:49 +08:00
										 |  |  | 	}) { | 
					
						
							| 
									
										
										
										
											2018-05-28 03:47:23 +08:00
										 |  |  | 		if (!module) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return this.missingModulePromise({ | 
					
						
							|  |  |  | 				request | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2018-05-28 03:47:23 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-28 17:56:48 +08:00
										 |  |  | 		const moduleId = chunkGraph.getModuleId(module); | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 		if (moduleId === null) { | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 			if (weak) { | 
					
						
							|  |  |  | 				// only weak referenced modules don't get an id
 | 
					
						
							|  |  |  | 				// we can always emit an error emitting code here
 | 
					
						
							|  |  |  | 				return this.weakError({ | 
					
						
							|  |  |  | 					module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 					chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 					request, | 
					
						
							|  |  |  | 					type: "promise" | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-05-28 03:47:23 +08:00
										 |  |  | 			throw new Error( | 
					
						
							|  |  |  | 				`RuntimeTemplate.moduleNamespacePromise(): Module ${module.identifier()} has no id. This should not happen.` | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		const promise = this.blockPromise({ | 
					
						
							| 
									
										
										
										
											2018-08-23 02:17:49 +08:00
										 |  |  | 			chunkGraph, | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 			block, | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 			message, | 
					
						
							|  |  |  | 			runtimeRequirements | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		let getModuleFunction; | 
					
						
							| 
									
										
										
										
											2018-08-28 17:56:48 +08:00
										 |  |  | 		let idExpr = JSON.stringify(chunkGraph.getModuleId(module)); | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		const comment = this.comment({ | 
					
						
							|  |  |  | 			request | 
					
						
							|  |  |  | 		}); | 
					
						
							|  |  |  | 		let header = ""; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (weak) { | 
					
						
							|  |  |  | 			if (idExpr.length > 8) { | 
					
						
							|  |  |  | 				// 'var x="nnnnnn";x,"+x+",x' vs '"nnnnnn",nnnnnn,"nnnnnn"'
 | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 				header += `var id = ${idExpr}; `; | 
					
						
							|  |  |  | 				idExpr = "id"; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-11-20 16:31:36 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.moduleFactories); | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 			header += `if(!${ | 
					
						
							|  |  |  | 				RuntimeGlobals.moduleFactories | 
					
						
							|  |  |  | 			}[${idExpr}]) { ${this.weakError({ | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 				module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 				chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 				request, | 
					
						
							|  |  |  | 				idExpr, | 
					
						
							|  |  |  | 				type: "statements" | 
					
						
							|  |  |  | 			})} } `;
 | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 		const moduleIdExpr = this.moduleId({ | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 			module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 			chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 			request, | 
					
						
							|  |  |  | 			weak | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 		const exportsType = module.buildMeta && module.buildMeta.exportsType; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (exportsType === "namespace") { | 
					
						
							|  |  |  | 			if (header) { | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 				const rawModule = this.moduleRaw({ | 
					
						
							|  |  |  | 					module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 					chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 					request, | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 					weak, | 
					
						
							|  |  |  | 					runtimeRequirements | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 				}); | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 				getModuleFunction = `function() { ${header}return ${rawModule}; }`; | 
					
						
							|  |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 				runtimeRequirements.add(RuntimeGlobals.require); | 
					
						
							| 
									
										
										
										
											2018-03-26 22:56:10 +08:00
										 |  |  | 				getModuleFunction = `__webpack_require__.bind(null, ${comment}${idExpr})`; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} else if (exportsType === "named") { | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			if (header) { | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 				getModuleFunction = `function() { ${header}return ${ | 
					
						
							|  |  |  | 					RuntimeGlobals.createFakeNamespaceObject | 
					
						
							|  |  |  | 				}(${moduleIdExpr}, 3); }`;
 | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 				getModuleFunction = `${ | 
					
						
							|  |  |  | 					RuntimeGlobals.createFakeNamespaceObject | 
					
						
							| 
									
										
										
										
											2018-11-28 20:07:40 +08:00
										 |  |  | 				}.bind(__webpack_require__, ${comment}${idExpr}, 3)`;
 | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} else if (strict) { | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			if (header) { | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 				getModuleFunction = `function() { ${header}return ${ | 
					
						
							|  |  |  | 					RuntimeGlobals.createFakeNamespaceObject | 
					
						
							|  |  |  | 				}(${moduleIdExpr}, 1); }`;
 | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 				getModuleFunction = `${ | 
					
						
							|  |  |  | 					RuntimeGlobals.createFakeNamespaceObject | 
					
						
							| 
									
										
										
										
											2018-11-28 20:07:40 +08:00
										 |  |  | 				}.bind(__webpack_require__, ${comment}${idExpr}, 1)`;
 | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			if (header) { | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 				getModuleFunction = `function() { ${header}return ${ | 
					
						
							|  |  |  | 					RuntimeGlobals.createFakeNamespaceObject | 
					
						
							|  |  |  | 				}(${moduleIdExpr}, 7); }`;
 | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 				getModuleFunction = `${ | 
					
						
							|  |  |  | 					RuntimeGlobals.createFakeNamespaceObject | 
					
						
							| 
									
										
										
										
											2018-11-28 20:07:40 +08:00
										 |  |  | 				}.bind(__webpack_require__, ${comment}${idExpr}, 7)`;
 | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return `${promise || "Promise.resolve()"}.then(${getModuleFunction})`; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-21 00:17:51 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * | 
					
						
							|  |  |  | 	 * @param {Object} options options object | 
					
						
							|  |  |  | 	 * @param {boolean=} options.update whether a new variable should be created or the existing one updated | 
					
						
							|  |  |  | 	 * @param {Module} options.module the module | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	 * @param {ChunkGraph} options.chunkGraph the chunk graph | 
					
						
							| 
									
										
										
										
											2018-07-21 00:17:51 +08:00
										 |  |  | 	 * @param {string} options.request the request that should be printed as comment | 
					
						
							|  |  |  | 	 * @param {string} options.importVar name of the import variable | 
					
						
							|  |  |  | 	 * @param {Module} options.originModule module in which the statement is emitted | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 	 * @param {boolean=} options.weak true, if this is a weak dependency | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	 * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements | 
					
						
							| 
									
										
										
										
											2018-07-21 00:17:51 +08:00
										 |  |  | 	 * @returns {string} the import statement | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	importStatement({ | 
					
						
							|  |  |  | 		update, | 
					
						
							|  |  |  | 		module, | 
					
						
							|  |  |  | 		chunkGraph, | 
					
						
							|  |  |  | 		request, | 
					
						
							|  |  |  | 		importVar, | 
					
						
							|  |  |  | 		originModule, | 
					
						
							| 
									
										
										
										
											2018-11-15 00:31:32 +08:00
										 |  |  | 		weak, | 
					
						
							|  |  |  | 		runtimeRequirements | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 	}) { | 
					
						
							| 
									
										
										
										
											2018-05-28 03:47:23 +08:00
										 |  |  | 		if (!module) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return this.missingModuleStatement({ | 
					
						
							|  |  |  | 				request | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2018-05-28 03:47:23 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-28 17:56:48 +08:00
										 |  |  | 		if (chunkGraph.getModuleId(module) === null) { | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 			if (weak) { | 
					
						
							|  |  |  | 				// only weak referenced modules don't get an id
 | 
					
						
							|  |  |  | 				// we can always emit an error emitting code here
 | 
					
						
							|  |  |  | 				return this.weakError({ | 
					
						
							|  |  |  | 					module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 					chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 					request, | 
					
						
							|  |  |  | 					type: "statements" | 
					
						
							|  |  |  | 				}); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			throw new Error( | 
					
						
							|  |  |  | 				`RuntimeTemplate.importStatment(): Module ${module.identifier()} has no id. This should not happen.` | 
					
						
							|  |  |  | 			); | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 		const moduleId = this.moduleId({ | 
					
						
							|  |  |  | 			module, | 
					
						
							| 
									
										
										
										
											2018-08-28 17:50:33 +08:00
										 |  |  | 			chunkGraph, | 
					
						
							| 
									
										
										
										
											2018-07-25 00:22:28 +08:00
										 |  |  | 			request, | 
					
						
							|  |  |  | 			weak | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		}); | 
					
						
							|  |  |  | 		const optDeclaration = update ? "" : "var "; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 		const exportsType = module.buildMeta && module.buildMeta.exportsType; | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 		runtimeRequirements.add(RuntimeGlobals.require); | 
					
						
							| 
									
										
										
										
											2018-05-03 00:09:24 +08:00
										 |  |  | 		let content = `/* harmony import */ ${optDeclaration}${importVar} = __webpack_require__(${moduleId});\n`; | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (!exportsType && !originModule.buildMeta.strictHarmonyModule) { | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.compatGetDefaultExport); | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 			content += `/* harmony import */ ${optDeclaration}${importVar}_default = /*#__PURE__*/${ | 
					
						
							|  |  |  | 				RuntimeGlobals.compatGetDefaultExport | 
					
						
							|  |  |  | 			}(${importVar});\n`;
 | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (exportsType === "named") { | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); | 
					
						
							| 
									
										
										
										
											2018-12-31 19:32:12 +08:00
										 |  |  | 			if (Array.isArray(chunkGraph.moduleGraph.getProvidedExports(module))) { | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 				content += `${optDeclaration}${importVar}_namespace = /*#__PURE__*/${ | 
					
						
							|  |  |  | 					RuntimeGlobals.createFakeNamespaceObject | 
					
						
							|  |  |  | 				}(${moduleId}, 1);\n`;
 | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 				content += `${optDeclaration}${importVar}_namespace = /*#__PURE__*/${ | 
					
						
							|  |  |  | 					RuntimeGlobals.createFakeNamespaceObject | 
					
						
							|  |  |  | 				}(${moduleId});\n`;
 | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 		return content; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-07 01:39:43 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Object} options options | 
					
						
							|  |  |  | 	 * @param {ModuleGraph} options.moduleGraph the module graph | 
					
						
							|  |  |  | 	 * @param {Module} options.module the module | 
					
						
							|  |  |  | 	 * @param {string} options.request the request | 
					
						
							|  |  |  | 	 * @param {string} options.exportName the export name | 
					
						
							|  |  |  | 	 * @param {Module} options.originModule the origin module | 
					
						
							|  |  |  | 	 * @param {boolean} options.asiSafe true, if location is safe for ASI, a bracket can be emitted | 
					
						
							|  |  |  | 	 * @param {boolean} options.isCall true, if expression will be called | 
					
						
							|  |  |  | 	 * @param {boolean} options.callContext when false, call context will not be preserved | 
					
						
							|  |  |  | 	 * @param {string} options.importVar the identifier name of the import variable | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	 * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements | 
					
						
							| 
									
										
										
										
											2018-08-07 01:39:43 +08:00
										 |  |  | 	 * @returns {string} expression | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 	exportFromImport({ | 
					
						
							| 
									
										
										
										
											2018-08-07 01:39:43 +08:00
										 |  |  | 		moduleGraph, | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		module, | 
					
						
							| 
									
										
										
										
											2018-02-10 00:35:28 +08:00
										 |  |  | 		request, | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		exportName, | 
					
						
							|  |  |  | 		originModule, | 
					
						
							|  |  |  | 		asiSafe, | 
					
						
							|  |  |  | 		isCall, | 
					
						
							|  |  |  | 		callContext, | 
					
						
							| 
									
										
										
										
											2018-11-15 00:31:32 +08:00
										 |  |  | 		importVar, | 
					
						
							|  |  |  | 		runtimeRequirements | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 	}) { | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		if (!module) { | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return this.missingModule({ | 
					
						
							|  |  |  | 				request | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 		const exportsType = module.buildMeta && module.buildMeta.exportsType; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (!exportsType) { | 
					
						
							|  |  |  | 			if (exportName === "default") { | 
					
						
							|  |  |  | 				if (!originModule.buildMeta.strictHarmonyModule) { | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 					if (isCall) { | 
					
						
							|  |  |  | 						return `${importVar}_default()`; | 
					
						
							|  |  |  | 					} else if (asiSafe) { | 
					
						
							|  |  |  | 						return `(${importVar}_default())`; | 
					
						
							|  |  |  | 					} else { | 
					
						
							|  |  |  | 						return `${importVar}_default.a`; | 
					
						
							|  |  |  | 					} | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 				} else { | 
					
						
							|  |  |  | 					return importVar; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			} else if (originModule.buildMeta.strictHarmonyModule) { | 
					
						
							|  |  |  | 				if (exportName) { | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 					return "/* non-default import from non-esm module */undefined"; | 
					
						
							| 
									
										
										
										
											2018-04-12 00:23:21 +08:00
										 |  |  | 				} else { | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 					runtimeRequirements.add(RuntimeGlobals.createFakeNamespaceObject); | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 					return `/*#__PURE__*/${ | 
					
						
							|  |  |  | 						RuntimeGlobals.createFakeNamespaceObject | 
					
						
							|  |  |  | 					}(${importVar})`;
 | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (exportsType === "named") { | 
					
						
							|  |  |  | 			if (exportName === "default") { | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 				return importVar; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			} else if (!exportName) { | 
					
						
							| 
									
										
										
										
											2017-12-23 01:23:20 +08:00
										 |  |  | 				return `${importVar}_namespace`; | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (exportName) { | 
					
						
							| 
									
										
										
										
											2018-08-07 03:01:24 +08:00
										 |  |  | 			const used = module.getUsedName(moduleGraph, exportName); | 
					
						
							| 
									
										
										
										
											2018-06-08 16:34:38 +08:00
										 |  |  | 			if (!used) { | 
					
						
							|  |  |  | 				const comment = Template.toNormalComment(`unused export ${exportName}`); | 
					
						
							|  |  |  | 				return `${comment} undefined`; | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			const comment = | 
					
						
							|  |  |  | 				used !== exportName ? Template.toNormalComment(exportName) + " " : ""; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 			const access = `${importVar}[${comment}${JSON.stringify(used)}]`; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			if (isCall) { | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 				if (callContext === false && asiSafe) { | 
					
						
							|  |  |  | 					return `(0,${access})`; | 
					
						
							|  |  |  | 				} else if (callContext === false) { | 
					
						
							|  |  |  | 					return `Object(${access})`; | 
					
						
							|  |  |  | 				} | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 			return access; | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			return importVar; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-15 00:31:32 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Object} options options | 
					
						
							|  |  |  | 	 * @param {AsyncDependenciesBlock} options.block the async block | 
					
						
							|  |  |  | 	 * @param {string} options.message the message | 
					
						
							|  |  |  | 	 * @param {ChunkGraph} options.chunkGraph the chunk graph | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	 * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements | 
					
						
							| 
									
										
										
										
											2018-11-15 00:31:32 +08:00
										 |  |  | 	 * @returns {string} expression | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 	blockPromise({ block, message, chunkGraph, runtimeRequirements }) { | 
					
						
							| 
									
										
										
										
											2018-08-23 02:17:49 +08:00
										 |  |  | 		if (!block) { | 
					
						
							|  |  |  | 			const comment = this.comment({ | 
					
						
							|  |  |  | 				message | 
					
						
							|  |  |  | 			}); | 
					
						
							|  |  |  | 			return `Promise.resolve(${comment.trim()})`; | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		const chunkGroup = chunkGraph.getBlockChunkGroup(block); | 
					
						
							|  |  |  | 		if (!chunkGroup || chunkGroup.chunks.length === 0) { | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 			const comment = this.comment({ | 
					
						
							|  |  |  | 				message | 
					
						
							|  |  |  | 			}); | 
					
						
							| 
									
										
										
										
											2017-12-23 15:11:28 +08:00
										 |  |  | 			return `Promise.resolve(${comment.trim()})`; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} | 
					
						
							| 
									
										
										
										
											2018-08-23 02:17:49 +08:00
										 |  |  | 		const chunks = chunkGroup.chunks.filter( | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			chunk => !chunk.hasRuntime() && chunk.id !== null | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		const comment = this.comment({ | 
					
						
							|  |  |  | 			message, | 
					
						
							| 
									
										
										
										
											2018-11-15 00:31:32 +08:00
										 |  |  | 			chunkName: block.chunkName | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		}); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		if (chunks.length === 1) { | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 			const chunkId = JSON.stringify(chunks[0].id); | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.ensureChunk); | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 			return `${RuntimeGlobals.ensureChunk}(${comment}${chunkId})`; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		} else if (chunks.length > 0) { | 
					
						
							| 
									
										
										
										
											2018-11-20 19:05:12 +08:00
										 |  |  | 			runtimeRequirements.add(RuntimeGlobals.ensureChunk); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			const requireChunkId = chunk => | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 				`${RuntimeGlobals.ensureChunk}(${JSON.stringify(chunk.id)})`; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			return `Promise.all(${comment.trim()}[${chunks | 
					
						
							|  |  |  | 				.map(requireChunkId) | 
					
						
							|  |  |  | 				.join(", ")}])`;
 | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} else { | 
					
						
							| 
									
										
										
										
											2017-12-23 15:11:28 +08:00
										 |  |  | 			return `Promise.resolve(${comment.trim()})`; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {Object} options options | 
					
						
							|  |  |  | 	 * @param {string} options.exportsArgument the name of the exports object | 
					
						
							|  |  |  | 	 * @param {Set<string>} options.runtimeRequirements if set, will be filled with runtime requirements | 
					
						
							| 
									
										
										
										
											2018-11-18 19:59:33 +08:00
										 |  |  | 	 * @returns {string} statement | 
					
						
							| 
									
										
										
										
											2018-11-17 01:18:44 +08:00
										 |  |  | 	 */ | 
					
						
							|  |  |  | 	defineEsModuleFlagStatement({ exportsArgument, runtimeRequirements }) { | 
					
						
							|  |  |  | 		runtimeRequirements.add(RuntimeGlobals.makeNamespaceObject); | 
					
						
							|  |  |  | 		runtimeRequirements.add(RuntimeGlobals.exports); | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | 		return `${RuntimeGlobals.makeNamespaceObject}(${exportsArgument});\n`; | 
					
						
							| 
									
										
										
										
											2017-12-19 22:50:09 +08:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2018-11-05 21:36:15 +08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module.exports = RuntimeTemplate; |