| 
									
										
										
										
											2013-02-14 00:00:07 +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-02-22 23:34:10 +08:00
										 |  |  | "use strict"; | 
					
						
							| 
									
										
										
										
											2013-02-14 00:00:07 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | const { | 
					
						
							|  |  |  | 	JAVASCRIPT_MODULE_TYPE_AUTO, | 
					
						
							|  |  |  | 	JAVASCRIPT_MODULE_TYPE_DYNAMIC | 
					
						
							|  |  |  | } = require("./ModuleTypeConstants"); | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | const NodeStuffInWebError = require("./NodeStuffInWebError"); | 
					
						
							| 
									
										
										
										
											2020-09-10 16:42:29 +08:00
										 |  |  | const RuntimeGlobals = require("./RuntimeGlobals"); | 
					
						
							| 
									
										
										
										
											2019-10-22 15:27:52 +08:00
										 |  |  | const CachedConstDependency = require("./dependencies/CachedConstDependency"); | 
					
						
							| 
									
										
										
										
											2020-09-10 16:42:29 +08:00
										 |  |  | const ConstDependency = require("./dependencies/ConstDependency"); | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | const ExternalModuleDependency = require("./dependencies/ExternalModuleDependency"); | 
					
						
							| 
									
										
										
										
											2018-07-03 16:24:29 +08:00
										 |  |  | const { | 
					
						
							|  |  |  | 	evaluateToString, | 
					
						
							| 
									
										
										
										
											2019-05-22 19:36:26 +08:00
										 |  |  | 	expressionIsUnsupported | 
					
						
							| 
									
										
										
										
											2019-10-22 15:27:52 +08:00
										 |  |  | } = require("./javascript/JavascriptParserHelpers"); | 
					
						
							| 
									
										
										
										
											2019-06-11 19:09:42 +08:00
										 |  |  | const { relative } = require("./util/fs"); | 
					
						
							| 
									
										
										
										
											2020-09-10 16:42:29 +08:00
										 |  |  | const { parseResource } = require("./util/identifier"); | 
					
						
							| 
									
										
										
										
											2018-07-27 21:57:03 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */ | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | /** @typedef {import("../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */ | 
					
						
							| 
									
										
										
										
											2021-09-15 03:38:42 +08:00
										 |  |  | /** @typedef {import("../declarations/WebpackOptions").NodeOptions} NodeOptions */ | 
					
						
							| 
									
										
										
										
											2018-11-03 04:05:46 +08:00
										 |  |  | /** @typedef {import("./Compiler")} Compiler */ | 
					
						
							| 
									
										
										
										
											2018-07-27 21:57:03 +08:00
										 |  |  | /** @typedef {import("./Dependency")} Dependency */ | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | /** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */ | 
					
						
							| 
									
										
										
										
											2018-07-27 21:57:03 +08:00
										 |  |  | /** @typedef {import("./DependencyTemplates")} DependencyTemplates */ | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | /** @typedef {import("./NormalModule")} NormalModule */ | 
					
						
							| 
									
										
										
										
											2018-07-27 21:57:03 +08:00
										 |  |  | /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */ | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */ | 
					
						
							|  |  |  | /** @typedef {import("./javascript/JavascriptParser").Range} Range */ | 
					
						
							| 
									
										
										
										
											2024-03-12 00:33:52 +08:00
										 |  |  | /** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */ | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | const PLUGIN_NAME = "NodeStuffPlugin"; | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-22 23:34:10 +08:00
										 |  |  | class NodeStuffPlugin { | 
					
						
							| 
									
										
										
										
											2021-09-14 21:50:03 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * @param {NodeOptions} options options | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-02-22 23:34:10 +08:00
										 |  |  | 	constructor(options) { | 
					
						
							|  |  |  | 		this.options = options; | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2015-07-13 06:20:09 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-03 04:05:46 +08:00
										 |  |  | 	/** | 
					
						
							|  |  |  | 	 * Apply the plugin | 
					
						
							|  |  |  | 	 * @param {Compiler} compiler the compiler instance | 
					
						
							|  |  |  | 	 * @returns {void} | 
					
						
							|  |  |  | 	 */ | 
					
						
							| 
									
										
										
										
											2017-02-22 23:34:10 +08:00
										 |  |  | 	apply(compiler) { | 
					
						
							|  |  |  | 		const options = this.options; | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 		compiler.hooks.compilation.tap( | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 			PLUGIN_NAME, | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			(compilation, { normalModuleFactory }) => { | 
					
						
							| 
									
										
										
										
											2021-09-15 02:23:41 +08:00
										 |  |  | 				compilation.dependencyTemplates.set( | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 					ExternalModuleDependency, | 
					
						
							|  |  |  | 					new ExternalModuleDependency.Template() | 
					
						
							| 
									
										
										
										
											2021-09-15 02:23:41 +08:00
										 |  |  | 				); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | 				/** | 
					
						
							|  |  |  | 				 * @param {JavascriptParser} parser the parser | 
					
						
							|  |  |  | 				 * @param {JavascriptParserOptions} parserOptions options | 
					
						
							|  |  |  | 				 * @returns {void} | 
					
						
							|  |  |  | 				 */ | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				const handler = (parser, parserOptions) => { | 
					
						
							|  |  |  | 					if (parserOptions.node === false) return; | 
					
						
							| 
									
										
										
										
											2017-02-22 23:34:10 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					let localOptions = options; | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 					if (parserOptions.node) { | 
					
						
							| 
									
										
										
										
											2019-06-19 19:16:05 +08:00
										 |  |  | 						localOptions = { ...localOptions, ...parserOptions.node }; | 
					
						
							| 
									
										
										
										
											2018-05-29 20:50:40 +08:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2016-09-14 18:04:42 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 					if (localOptions.global !== false) { | 
					
						
							|  |  |  | 						const withWarning = localOptions.global === "warn"; | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 						parser.hooks.expression.for("global").tap(PLUGIN_NAME, expr => { | 
					
						
							|  |  |  | 							const dep = new ConstDependency( | 
					
						
							|  |  |  | 								RuntimeGlobals.global, | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | 								/** @type {Range} */ (expr.range), | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 								[RuntimeGlobals.global] | 
					
						
							|  |  |  | 							); | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | 							dep.loc = /** @type {DependencyLocation} */ (expr.loc); | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 							parser.state.module.addPresentationalDependency(dep); | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 							// TODO webpack 6 remove
 | 
					
						
							|  |  |  | 							if (withWarning) { | 
					
						
							|  |  |  | 								parser.state.module.addWarning( | 
					
						
							|  |  |  | 									new NodeStuffInWebError( | 
					
						
							|  |  |  | 										dep.loc, | 
					
						
							|  |  |  | 										"global", | 
					
						
							|  |  |  | 										"The global namespace object is a Node.js feature and isn't available in browsers." | 
					
						
							|  |  |  | 									) | 
					
						
							|  |  |  | 								); | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 						}); | 
					
						
							|  |  |  | 						parser.hooks.rename.for("global").tap(PLUGIN_NAME, expr => { | 
					
						
							| 
									
										
										
										
											2022-02-22 18:37:58 +08:00
										 |  |  | 							const dep = new ConstDependency( | 
					
						
							|  |  |  | 								RuntimeGlobals.global, | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | 								/** @type {Range} */ (expr.range), | 
					
						
							| 
									
										
										
										
											2022-02-22 18:37:58 +08:00
										 |  |  | 								[RuntimeGlobals.global] | 
					
						
							|  |  |  | 							); | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | 							dep.loc = /** @type {DependencyLocation} */ (expr.loc); | 
					
						
							| 
									
										
										
										
											2022-02-22 18:37:58 +08:00
										 |  |  | 							parser.state.module.addPresentationalDependency(dep); | 
					
						
							|  |  |  | 							return false; | 
					
						
							|  |  |  | 						}); | 
					
						
							| 
									
										
										
										
											2020-09-10 16:42:29 +08:00
										 |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | 					/** | 
					
						
							|  |  |  | 					 * @param {string} expressionName expression name | 
					
						
							|  |  |  | 					 * @param {(module: NormalModule) => string} fn function | 
					
						
							|  |  |  | 					 * @param {string=} warning warning | 
					
						
							|  |  |  | 					 * @returns {void} | 
					
						
							|  |  |  | 					 */ | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 					const setModuleConstant = (expressionName, fn, warning) => { | 
					
						
							|  |  |  | 						parser.hooks.expression | 
					
						
							|  |  |  | 							.for(expressionName) | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 							.tap(PLUGIN_NAME, expr => { | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								const dep = new CachedConstDependency( | 
					
						
							|  |  |  | 									JSON.stringify(fn(parser.state.module)), | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | 									/** @type {Range} */ (expr.range), | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 									expressionName | 
					
						
							|  |  |  | 								); | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | 								dep.loc = /** @type {DependencyLocation} */ (expr.loc); | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								parser.state.module.addPresentationalDependency(dep); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 								// TODO webpack 6 remove
 | 
					
						
							|  |  |  | 								if (warning) { | 
					
						
							|  |  |  | 									parser.state.module.addWarning( | 
					
						
							|  |  |  | 										new NodeStuffInWebError(dep.loc, expressionName, warning) | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 									); | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 								return true; | 
					
						
							|  |  |  | 							}); | 
					
						
							|  |  |  | 					}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-09 07:50:36 +08:00
										 |  |  | 					/** | 
					
						
							|  |  |  | 					 * @param {string} expressionName expression name | 
					
						
							| 
									
										
										
										
											2024-01-26 22:47:14 +08:00
										 |  |  | 					 * @param {(value: string) => string} fn function | 
					
						
							| 
									
										
										
										
											2024-01-09 07:50:36 +08:00
										 |  |  | 					 * @returns {void} | 
					
						
							|  |  |  | 					 */ | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 					const setUrlModuleConstant = (expressionName, fn) => { | 
					
						
							|  |  |  | 						parser.hooks.expression | 
					
						
							|  |  |  | 							.for(expressionName) | 
					
						
							| 
									
										
										
										
											2024-01-09 07:50:36 +08:00
										 |  |  | 							.tap(PLUGIN_NAME, expr => { | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								const dep = new ExternalModuleDependency( | 
					
						
							|  |  |  | 									"url", | 
					
						
							| 
									
										
										
										
											2022-04-05 15:56:31 +08:00
										 |  |  | 									[ | 
					
						
							|  |  |  | 										{ | 
					
						
							|  |  |  | 											name: "fileURLToPath", | 
					
						
							|  |  |  | 											value: "__webpack_fileURLToPath__" | 
					
						
							|  |  |  | 										} | 
					
						
							|  |  |  | 									], | 
					
						
							|  |  |  | 									undefined, | 
					
						
							|  |  |  | 									fn("__webpack_fileURLToPath__"), | 
					
						
							| 
									
										
										
										
											2024-01-26 22:47:14 +08:00
										 |  |  | 									/** @type {Range} */ (expr.range), | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 									expressionName | 
					
						
							|  |  |  | 								); | 
					
						
							| 
									
										
										
										
											2024-01-26 22:47:14 +08:00
										 |  |  | 								dep.loc = /** @type {DependencyLocation} */ (expr.loc); | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								parser.state.module.addPresentationalDependency(dep); | 
					
						
							| 
									
										
										
										
											2021-09-15 02:23:41 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								return true; | 
					
						
							|  |  |  | 							}); | 
					
						
							|  |  |  | 					}; | 
					
						
							| 
									
										
										
										
											2021-09-14 21:50:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-06-17 01:13:03 +08:00
										 |  |  | 					/** | 
					
						
							|  |  |  | 					 * @param {string} expressionName expression name | 
					
						
							|  |  |  | 					 * @param {string} value value | 
					
						
							|  |  |  | 					 * @param {string=} warning warning | 
					
						
							|  |  |  | 					 * @returns {void} | 
					
						
							|  |  |  | 					 */ | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 					const setConstant = (expressionName, value, warning) => | 
					
						
							|  |  |  | 						setModuleConstant(expressionName, () => value, warning); | 
					
						
							| 
									
										
										
										
											2018-07-23 20:53:50 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					const context = compiler.context; | 
					
						
							| 
									
										
										
										
											2019-04-29 02:41:54 +08:00
										 |  |  | 					if (localOptions.__filename) { | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 						switch (localOptions.__filename) { | 
					
						
							|  |  |  | 							case "mock": | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								setConstant("__filename", "/index.js"); | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 								break; | 
					
						
							|  |  |  | 							case "warn-mock": | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								setConstant( | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 									"__filename", | 
					
						
							|  |  |  | 									"/index.js", | 
					
						
							| 
									
										
										
										
											2022-06-04 22:52:07 +08:00
										 |  |  | 									"__filename is a Node.js feature and isn't available in browsers." | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 								); | 
					
						
							|  |  |  | 								break; | 
					
						
							| 
									
										
										
										
											2021-09-14 21:50:03 +08:00
										 |  |  | 							case "node-module": | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								setUrlModuleConstant( | 
					
						
							| 
									
										
										
										
											2021-09-14 21:53:51 +08:00
										 |  |  | 									"__filename", | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 									functionName => `${functionName}(import.meta.url)` | 
					
						
							| 
									
										
										
										
											2021-09-14 21:53:51 +08:00
										 |  |  | 								); | 
					
						
							| 
									
										
										
										
											2021-09-14 21:50:03 +08:00
										 |  |  | 								break; | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 							case true: | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								setModuleConstant("__filename", module => | 
					
						
							| 
									
										
										
										
											2024-03-12 00:33:52 +08:00
										 |  |  | 									relative( | 
					
						
							|  |  |  | 										/** @type {InputFileSystem} */ (compiler.inputFileSystem), | 
					
						
							|  |  |  | 										context, | 
					
						
							|  |  |  | 										module.resource | 
					
						
							|  |  |  | 									) | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 								); | 
					
						
							|  |  |  | 								break; | 
					
						
							| 
									
										
										
										
											2019-04-29 02:41:54 +08:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-29 02:41:54 +08:00
										 |  |  | 						parser.hooks.evaluateIdentifier | 
					
						
							|  |  |  | 							.for("__filename") | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 							.tap(PLUGIN_NAME, expr => { | 
					
						
							| 
									
										
										
										
											2019-04-29 02:41:54 +08:00
										 |  |  | 								if (!parser.state.module) return; | 
					
						
							| 
									
										
										
										
											2020-09-10 16:42:29 +08:00
										 |  |  | 								const resource = parseResource(parser.state.module.resource); | 
					
						
							|  |  |  | 								return evaluateToString(resource.path)(expr); | 
					
						
							| 
									
										
										
										
											2019-04-29 02:41:54 +08:00
										 |  |  | 							}); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					} | 
					
						
							| 
									
										
										
										
											2019-04-29 02:41:54 +08:00
										 |  |  | 					if (localOptions.__dirname) { | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 						switch (localOptions.__dirname) { | 
					
						
							|  |  |  | 							case "mock": | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								setConstant("__dirname", "/"); | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 								break; | 
					
						
							|  |  |  | 							case "warn-mock": | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								setConstant( | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 									"__dirname", | 
					
						
							|  |  |  | 									"/", | 
					
						
							| 
									
										
										
										
											2022-06-04 22:52:07 +08:00
										 |  |  | 									"__dirname is a Node.js feature and isn't available in browsers." | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 								); | 
					
						
							|  |  |  | 								break; | 
					
						
							| 
									
										
										
										
											2021-09-14 21:50:03 +08:00
										 |  |  | 							case "node-module": | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								setUrlModuleConstant( | 
					
						
							| 
									
										
										
										
											2021-09-15 02:48:55 +08:00
										 |  |  | 									"__dirname", | 
					
						
							| 
									
										
										
										
											2022-04-05 15:56:31 +08:00
										 |  |  | 									functionName => | 
					
						
							|  |  |  | 										`${functionName}(import.meta.url + "/..").slice(0, -1)` | 
					
						
							| 
									
										
										
										
											2021-09-14 21:50:03 +08:00
										 |  |  | 								); | 
					
						
							|  |  |  | 								break; | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 							case true: | 
					
						
							| 
									
										
										
										
											2021-11-30 18:57:32 +08:00
										 |  |  | 								setModuleConstant("__dirname", module => | 
					
						
							| 
									
										
										
										
											2024-03-12 00:33:52 +08:00
										 |  |  | 									relative( | 
					
						
							|  |  |  | 										/** @type {InputFileSystem} */ (compiler.inputFileSystem), | 
					
						
							|  |  |  | 										context, | 
					
						
							| 
									
										
										
										
											2024-03-18 01:15:44 +08:00
										 |  |  | 										/** @type {string} */ (module.context) | 
					
						
							| 
									
										
										
										
											2024-03-12 00:33:52 +08:00
										 |  |  | 									) | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 								); | 
					
						
							|  |  |  | 								break; | 
					
						
							| 
									
										
										
										
											2019-04-29 02:41:54 +08:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2021-09-12 00:15:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-04-29 02:41:54 +08:00
										 |  |  | 						parser.hooks.evaluateIdentifier | 
					
						
							|  |  |  | 							.for("__dirname") | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 							.tap(PLUGIN_NAME, expr => { | 
					
						
							| 
									
										
										
										
											2019-04-29 02:41:54 +08:00
										 |  |  | 								if (!parser.state.module) return; | 
					
						
							| 
									
										
										
										
											2024-03-18 01:15:44 +08:00
										 |  |  | 								return evaluateToString( | 
					
						
							|  |  |  | 									/** @type {string} */ (parser.state.module.context) | 
					
						
							|  |  |  | 								)(expr); | 
					
						
							| 
									
										
										
										
											2019-04-29 02:41:54 +08:00
										 |  |  | 							}); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 					} | 
					
						
							|  |  |  | 					parser.hooks.expression | 
					
						
							|  |  |  | 						.for("require.extensions") | 
					
						
							|  |  |  | 						.tap( | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 							PLUGIN_NAME, | 
					
						
							| 
									
										
										
										
											2018-07-03 16:24:29 +08:00
										 |  |  | 							expressionIsUnsupported( | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 								parser, | 
					
						
							|  |  |  | 								"require.extensions is not supported by webpack. Use a loader instead." | 
					
						
							|  |  |  | 							) | 
					
						
							|  |  |  | 						); | 
					
						
							| 
									
										
										
										
											2017-11-08 18:32:05 +08:00
										 |  |  | 				}; | 
					
						
							| 
									
										
										
										
											2017-12-14 17:22:27 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				normalModuleFactory.hooks.parser | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 					.for(JAVASCRIPT_MODULE_TYPE_AUTO) | 
					
						
							|  |  |  | 					.tap(PLUGIN_NAME, handler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 				normalModuleFactory.hooks.parser | 
					
						
							| 
									
										
										
										
											2023-04-01 01:56:32 +08:00
										 |  |  | 					.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC) | 
					
						
							|  |  |  | 					.tap(PLUGIN_NAME, handler); | 
					
						
							| 
									
										
										
										
											2018-02-25 09:00:20 +08:00
										 |  |  | 			} | 
					
						
							|  |  |  | 		); | 
					
						
							| 
									
										
										
										
											2017-02-22 23:34:10 +08:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2018-07-27 21:57:03 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-22 23:34:10 +08:00
										 |  |  | module.exports = NodeStuffPlugin; |