webpack 5.76.1 → 5.88.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (442) hide show
  1. package/README.md +10 -4
  2. package/bin/webpack.js +26 -2
  3. package/hot/dev-server.js +2 -1
  4. package/hot/lazy-compilation-node.js +10 -0
  5. package/hot/lazy-compilation-web.js +9 -0
  6. package/hot/log-apply-result.js +5 -0
  7. package/hot/log.js +22 -0
  8. package/hot/only-dev-server.js +2 -1
  9. package/hot/poll.js +3 -0
  10. package/hot/signal.js +4 -0
  11. package/lib/APIPlugin.js +174 -116
  12. package/lib/AsyncDependenciesBlock.js +13 -5
  13. package/lib/AutomaticPrefetchPlugin.js +1 -0
  14. package/lib/BannerPlugin.js +6 -1
  15. package/lib/CacheFacade.js +4 -0
  16. package/lib/CaseSensitiveModulesWarning.js +3 -1
  17. package/lib/Chunk.js +36 -18
  18. package/lib/ChunkGraph.js +4 -4
  19. package/lib/ChunkGroup.js +25 -10
  20. package/lib/CleanPlugin.js +30 -7
  21. package/lib/CodeGenerationResults.js +2 -2
  22. package/lib/CompatibilityPlugin.js +85 -46
  23. package/lib/Compilation.js +17 -8
  24. package/lib/Compiler.js +18 -14
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +95 -47
  28. package/lib/ContextModule.js +20 -6
  29. package/lib/ContextModuleFactory.js +2 -1
  30. package/lib/ContextReplacementPlugin.js +13 -0
  31. package/lib/CssModule.js +169 -0
  32. package/lib/DefinePlugin.js +152 -86
  33. package/lib/DelegatedModule.js +22 -4
  34. package/lib/DelegatedModuleFactoryPlugin.js +6 -0
  35. package/lib/DependenciesBlock.js +17 -1
  36. package/lib/Dependency.js +19 -5
  37. package/lib/DependencyTemplates.js +1 -1
  38. package/lib/DllEntryPlugin.js +16 -1
  39. package/lib/DllModule.js +17 -2
  40. package/lib/DllModuleFactory.js +1 -1
  41. package/lib/DllReferencePlugin.js +13 -1
  42. package/lib/Entrypoint.js +1 -1
  43. package/lib/ErrorHelpers.js +62 -22
  44. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  45. package/lib/ExportsInfo.js +25 -4
  46. package/lib/ExportsInfoApiPlugin.js +30 -14
  47. package/lib/ExternalModule.js +30 -9
  48. package/lib/FileSystemInfo.js +61 -25
  49. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  50. package/lib/FlagDependencyExportsPlugin.js +336 -348
  51. package/lib/FlagDependencyUsagePlugin.js +9 -9
  52. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  53. package/lib/Generator.js +7 -0
  54. package/lib/HookWebpackError.js +1 -1
  55. package/lib/HotModuleReplacementPlugin.js +60 -46
  56. package/lib/IgnoreErrorModuleFactory.js +1 -1
  57. package/lib/InitFragment.js +28 -5
  58. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  59. package/lib/LibManifestPlugin.js +22 -5
  60. package/lib/LoaderOptionsPlugin.js +12 -2
  61. package/lib/MainTemplate.js +2 -2
  62. package/lib/Module.js +44 -12
  63. package/lib/ModuleBuildError.js +9 -0
  64. package/lib/ModuleDependencyError.js +4 -2
  65. package/lib/ModuleDependencyWarning.js +4 -2
  66. package/lib/ModuleError.js +9 -0
  67. package/lib/ModuleFactory.js +1 -1
  68. package/lib/ModuleFilenameHelpers.js +114 -4
  69. package/lib/ModuleGraph.js +33 -23
  70. package/lib/ModuleGraphConnection.js +19 -6
  71. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  72. package/lib/ModuleNotFoundError.js +5 -2
  73. package/lib/ModuleParseError.js +9 -0
  74. package/lib/ModuleProfile.js +1 -0
  75. package/lib/ModuleRestoreError.js +2 -0
  76. package/lib/ModuleStoreError.js +2 -1
  77. package/lib/ModuleTypeConstants.js +169 -0
  78. package/lib/ModuleWarning.js +9 -0
  79. package/lib/MultiWatching.js +4 -0
  80. package/lib/NodeStuffPlugin.js +65 -35
  81. package/lib/NormalModule.js +12 -2
  82. package/lib/NormalModuleFactory.js +56 -8
  83. package/lib/NormalModuleReplacementPlugin.js +5 -3
  84. package/lib/NullFactory.js +1 -1
  85. package/lib/PrefetchPlugin.js +4 -0
  86. package/lib/ProgressPlugin.js +71 -15
  87. package/lib/ProvidePlugin.js +30 -14
  88. package/lib/RawModule.js +13 -2
  89. package/lib/RecordIdsPlugin.js +4 -4
  90. package/lib/RequireJsStuffPlugin.js +22 -15
  91. package/lib/RuntimeGlobals.js +5 -0
  92. package/lib/RuntimeModule.js +12 -11
  93. package/lib/RuntimePlugin.js +10 -3
  94. package/lib/RuntimeTemplate.js +29 -11
  95. package/lib/SelfModuleFactory.js +12 -0
  96. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  97. package/lib/SourceMapDevToolPlugin.js +47 -11
  98. package/lib/Template.js +5 -3
  99. package/lib/UseStrictPlugin.js +29 -11
  100. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  101. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  102. package/lib/WatchIgnorePlugin.js +4 -0
  103. package/lib/Watching.js +62 -25
  104. package/lib/WebpackError.js +14 -5
  105. package/lib/WebpackIsIncludedPlugin.js +22 -13
  106. package/lib/WebpackOptionsApply.js +41 -44
  107. package/lib/WebpackOptionsDefaulter.js +10 -3
  108. package/lib/asset/AssetGenerator.js +24 -9
  109. package/lib/asset/AssetModulesPlugin.js +28 -12
  110. package/lib/asset/AssetParser.js +15 -7
  111. package/lib/asset/AssetSourceParser.js +8 -3
  112. package/lib/asset/RawDataUrlModule.js +15 -4
  113. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  114. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  115. package/lib/buildChunkGraph.js +37 -21
  116. package/lib/cache/IdleFileCachePlugin.js +2 -1
  117. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  118. package/lib/cache/PackFileCacheStrategy.js +59 -22
  119. package/lib/cache/ResolverCachePlugin.js +3 -0
  120. package/lib/config/browserslistTargetHandler.js +10 -10
  121. package/lib/config/defaults.js +306 -105
  122. package/lib/config/normalization.js +110 -71
  123. package/lib/config/target.js +37 -10
  124. package/lib/container/ContainerEntryModule.js +11 -1
  125. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  126. package/lib/container/ContainerExposedDependency.js +9 -0
  127. package/lib/container/ContainerPlugin.js +3 -1
  128. package/lib/container/FallbackDependency.js +13 -0
  129. package/lib/container/FallbackItemDependency.js +3 -0
  130. package/lib/container/FallbackModule.js +12 -2
  131. package/lib/container/FallbackModuleFactory.js +1 -1
  132. package/lib/container/RemoteModule.js +11 -1
  133. package/lib/container/RemoteRuntimeModule.js +3 -2
  134. package/lib/container/RemoteToExternalDependency.js +3 -0
  135. package/lib/css/CssExportsGenerator.js +9 -0
  136. package/lib/css/CssGenerator.js +5 -1
  137. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  138. package/lib/css/CssModulesPlugin.js +253 -74
  139. package/lib/css/CssParser.js +697 -282
  140. package/lib/css/walkCssTokens.js +269 -138
  141. package/lib/debug/ProfilingPlugin.js +33 -12
  142. package/lib/dependencies/AMDDefineDependency.js +54 -10
  143. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  144. package/lib/dependencies/AMDPlugin.js +33 -20
  145. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  146. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  147. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  148. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  149. package/lib/dependencies/AMDRequireDependency.js +16 -1
  150. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  151. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  152. package/lib/dependencies/CachedConstDependency.js +14 -0
  153. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  154. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  155. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  156. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  157. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  158. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  159. package/lib/dependencies/CommonJsPlugin.js +51 -26
  160. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  161. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  162. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  163. package/lib/dependencies/ConstDependency.js +11 -2
  164. package/lib/dependencies/ContextDependency.js +15 -2
  165. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  166. package/lib/dependencies/ContextElementDependency.js +8 -0
  167. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  168. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  169. package/lib/dependencies/CssExportDependency.js +8 -0
  170. package/lib/dependencies/CssImportDependency.js +55 -3
  171. package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
  172. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  173. package/lib/dependencies/CssUrlDependency.js +46 -16
  174. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  175. package/lib/dependencies/DllEntryDependency.js +14 -0
  176. package/lib/dependencies/DynamicExports.js +10 -6
  177. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  178. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  179. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  180. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  181. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  182. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  183. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  184. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  185. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  186. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  187. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  188. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  189. package/lib/dependencies/HarmonyExports.js +11 -5
  190. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  191. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  192. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  193. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  194. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  195. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  196. package/lib/dependencies/ImportContextDependency.js +15 -0
  197. package/lib/dependencies/ImportDependency.js +15 -4
  198. package/lib/dependencies/ImportEagerDependency.js +7 -4
  199. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  200. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  201. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  202. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  203. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  204. package/lib/dependencies/ImportParserPlugin.js +83 -25
  205. package/lib/dependencies/ImportPlugin.js +21 -7
  206. package/lib/dependencies/ImportWeakDependency.js +7 -4
  207. package/lib/dependencies/JsonExportsDependency.js +9 -1
  208. package/lib/dependencies/LocalModule.js +16 -0
  209. package/lib/dependencies/LocalModuleDependency.js +15 -0
  210. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  211. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  212. package/lib/dependencies/ModuleDependency.js +9 -1
  213. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  214. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  215. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  216. package/lib/dependencies/PrefetchDependency.js +3 -0
  217. package/lib/dependencies/ProvidedDependency.js +14 -2
  218. package/lib/dependencies/PureExpressionDependency.js +10 -1
  219. package/lib/dependencies/RequireContextDependency.js +6 -0
  220. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  221. package/lib/dependencies/RequireContextPlugin.js +19 -6
  222. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  223. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  224. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  225. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  226. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  227. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  228. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  229. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  230. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  231. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  232. package/lib/dependencies/RequireResolveDependency.js +6 -0
  233. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  234. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  235. package/lib/dependencies/StaticExportsDependency.js +8 -0
  236. package/lib/dependencies/SystemPlugin.js +48 -21
  237. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  238. package/lib/dependencies/URLDependency.js +13 -4
  239. package/lib/dependencies/URLPlugin.js +31 -18
  240. package/lib/dependencies/UnsupportedDependency.js +13 -0
  241. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  242. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  243. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  244. package/lib/dependencies/WorkerDependency.js +47 -3
  245. package/lib/dependencies/WorkerPlugin.js +105 -32
  246. package/lib/dependencies/getFunctionExpression.js +7 -0
  247. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  248. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  249. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  250. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  251. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  252. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  253. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  254. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  255. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  256. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  257. package/lib/ids/IdHelpers.js +6 -0
  258. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  259. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  260. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  261. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  262. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  263. package/lib/index.js +8 -0
  264. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  265. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  266. package/lib/javascript/ChunkHelpers.js +2 -2
  267. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  268. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  269. package/lib/javascript/JavascriptModulesPlugin.js +217 -198
  270. package/lib/javascript/JavascriptParser.js +941 -256
  271. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  272. package/lib/javascript/StartupHelpers.js +2 -2
  273. package/lib/json/JsonData.js +26 -1
  274. package/lib/json/JsonGenerator.js +21 -7
  275. package/lib/json/JsonModulesPlugin.js +14 -5
  276. package/lib/json/JsonParser.js +27 -13
  277. package/lib/library/AbstractLibraryPlugin.js +4 -0
  278. package/lib/library/AmdLibraryPlugin.js +22 -6
  279. package/lib/library/AssignLibraryPlugin.js +19 -5
  280. package/lib/library/EnableLibraryPlugin.js +4 -0
  281. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  282. package/lib/library/ModuleLibraryPlugin.js +8 -4
  283. package/lib/library/SystemLibraryPlugin.js +2 -1
  284. package/lib/library/UmdLibraryPlugin.js +24 -2
  285. package/lib/logging/runtime.js +1 -1
  286. package/lib/logging/truncateArgs.js +4 -0
  287. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  288. package/lib/node/NodeTargetPlugin.js +3 -0
  289. package/lib/node/NodeTemplatePlugin.js +10 -2
  290. package/lib/node/NodeWatchFileSystem.js +1 -1
  291. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  292. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  293. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  294. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  295. package/lib/node/nodeConsole.js +2 -4
  296. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  297. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  298. package/lib/optimize/ConcatenatedModule.js +8 -6
  299. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  300. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  301. package/lib/optimize/InnerGraph.js +5 -5
  302. package/lib/optimize/InnerGraphPlugin.js +57 -48
  303. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  304. package/lib/optimize/MangleExportsPlugin.js +1 -1
  305. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  306. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  307. package/lib/optimize/RealContentHashPlugin.js +86 -30
  308. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  309. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  310. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  311. package/lib/optimize/SplitChunksPlugin.js +71 -31
  312. package/lib/performance/SizeLimitsPlugin.js +7 -4
  313. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  314. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  315. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  316. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  317. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  318. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  319. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  320. package/lib/rules/RuleSetCompiler.js +3 -3
  321. package/lib/rules/UseEffectRulePlugin.js +6 -4
  322. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  323. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  324. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  325. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  326. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  327. package/lib/runtime/CompatRuntimeModule.js +7 -2
  328. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  329. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  330. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  331. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  332. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  333. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  334. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  335. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  336. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  337. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  338. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  339. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  340. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  341. package/lib/runtime/NonceRuntimeModule.js +1 -1
  342. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  343. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  344. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  345. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  346. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  347. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  348. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  349. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  350. package/lib/schemes/DataUriPlugin.js +16 -3
  351. package/lib/schemes/HttpUriPlugin.js +38 -0
  352. package/lib/serialization/ArraySerializer.js +22 -6
  353. package/lib/serialization/BinaryMiddleware.js +164 -1
  354. package/lib/serialization/DateObjectSerializer.js +15 -4
  355. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  356. package/lib/serialization/FileMiddleware.js +17 -0
  357. package/lib/serialization/MapObjectSerializer.js +24 -8
  358. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  359. package/lib/serialization/ObjectMiddleware.js +33 -2
  360. package/lib/serialization/PlainObjectSerializer.js +23 -12
  361. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  362. package/lib/serialization/SetObjectSerializer.js +21 -6
  363. package/lib/serialization/types.js +1 -1
  364. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  365. package/lib/sharing/ConsumeSharedModule.js +13 -2
  366. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  367. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  368. package/lib/sharing/ProvideSharedDependency.js +17 -0
  369. package/lib/sharing/ProvideSharedModule.js +11 -1
  370. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  371. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  372. package/lib/sharing/ShareRuntimeModule.js +19 -9
  373. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  374. package/lib/sharing/utils.js +320 -7
  375. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  376. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  377. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  378. package/lib/util/AsyncQueue.js +4 -2
  379. package/lib/util/LazySet.js +10 -2
  380. package/lib/util/MapHelpers.js +19 -5
  381. package/lib/util/ParallelismFactorCalculator.js +10 -0
  382. package/lib/util/Semaphore.js +1 -1
  383. package/lib/util/StackedCacheMap.js +7 -1
  384. package/lib/util/StringXor.js +51 -0
  385. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  386. package/lib/util/binarySearchBounds.js +49 -0
  387. package/lib/util/compileBooleanMatcher.js +31 -0
  388. package/lib/util/createHash.js +35 -13
  389. package/lib/util/deprecation.js +18 -3
  390. package/lib/util/deterministicGrouping.js +50 -11
  391. package/lib/util/findGraphRoots.js +4 -2
  392. package/lib/util/hash/md4.js +2 -2
  393. package/lib/util/hash/xxhash64.js +1 -1
  394. package/lib/util/identifier.js +4 -0
  395. package/lib/util/internalSerializables.js +1 -0
  396. package/lib/util/makeSerializable.js +7 -0
  397. package/lib/util/memoize.js +3 -3
  398. package/lib/util/numberHash.js +75 -21
  399. package/lib/util/processAsyncTree.js +7 -1
  400. package/lib/util/propertyAccess.js +9 -54
  401. package/lib/util/propertyName.js +79 -0
  402. package/lib/util/registerExternalSerializer.js +1 -1
  403. package/lib/util/runtime.js +84 -21
  404. package/lib/util/semver.js +2 -1
  405. package/lib/util/serialization.js +10 -0
  406. package/lib/util/smartGrouping.js +1 -1
  407. package/lib/validateSchema.js +6 -2
  408. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  409. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  410. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  411. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  412. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  413. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  414. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  415. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  416. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  417. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  418. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  419. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  420. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  421. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  422. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  423. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  424. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  425. package/lib/webpack.js +12 -3
  426. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  427. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  428. package/module.d.ts +55 -37
  429. package/package.json +59 -56
  430. package/schemas/WebpackOptions.check.js +1 -1
  431. package/schemas/WebpackOptions.json +133 -6
  432. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  433. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  434. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  435. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  436. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  437. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  438. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  439. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  440. package/schemas/plugins/css/CssParserOptions.json +1 -1
  441. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  442. package/types.d.ts +1629 -683
package/README.md CHANGED
@@ -32,8 +32,11 @@
32
32
  <a href="https://github.com/webpack/webpack/graphs/contributors">
33
33
  <img src="https://img.shields.io/github/contributors/webpack/webpack.svg">
34
34
  </a>
35
- <a href="https://gitter.im/webpack/webpack">
36
- <img src="https://badges.gitter.im/webpack/webpack.svg">
35
+ <a href="https://github.com/webpack/webpack/discussions">
36
+ <img src="https://img.shields.io/github/discussions/webpack/webpack">
37
+ </a>
38
+ <a href="https://twitter.com/Webpack">
39
+ <img src="https://img.shields.io/twitter/follow/Webpack?style=social">
37
40
  </a>
38
41
  <h1>webpack</h1>
39
42
  <p>
@@ -229,6 +232,7 @@ or are automatically applied via regex from your webpack configuration.
229
232
  | <a href="https://github.com/webpack-contrib/polymer-webpack-loader"><img width="48" height="48" src="https://worldvectorlogo.com/logos/polymer.svg"></a> | ![polymer-npm] | ![polymer-size] | Process HTML & CSS with preprocessor of choice and `require()` Web Components like first-class modules |
230
233
  | <a href="https://github.com/TheLarkInn/angular2-template-loader"><img width="48" height="48" src="https://worldvectorlogo.com/logos/angular-icon-1.svg"></a> | ![angular-npm] | ![angular-size] | Loads and compiles Angular 2 Components |
231
234
  | <a href="https://github.com/riot/webpack-loader"><img width="48" height="48" src="https://worldvectorlogo.com/logos/riot.svg"></a> | ![riot-npm] | ![riot-size] | Riot official webpack loader |
235
+ | <a href="https://github.com/sveltejs/svelte-loader"><img width="48" height="48" src="https://worldvectorlogo.com/logos/svelte-1.svg"></a> | ![svelte-npm] | ![svelte-size] | Official Svelte loader |
232
236
 
233
237
  [vue-npm]: https://img.shields.io/npm/v/vue-loader.svg
234
238
  [vue-size]: https://packagephobia.com/badge?p=vue-loader
@@ -238,6 +242,8 @@ or are automatically applied via regex from your webpack configuration.
238
242
  [angular-size]: https://packagephobia.com/badge?p=angular2-template-loader
239
243
  [riot-npm]: https://img.shields.io/npm/v/riot-tag-loader.svg
240
244
  [riot-size]: https://packagephobia.com/badge?p=riot-tag-loader
245
+ [svelte-npm]: https://img.shields.io/npm/v/svelte-loader.svg
246
+ [svelte-size]: https://packagephobia.com/badge?p=svelte-loader
241
247
 
242
248
  ### Performance
243
249
 
@@ -711,5 +717,5 @@ src="https://static.monei.net/monei-logo.svg" height="30" alt="MONEI"></a>
711
717
  [builds2-url]: https://dev.azure.com/webpack/webpack/_build/latest?definitionId=3
712
718
  [licenses-url]: https://app.fossa.io/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fwebpack%2Fwebpack?ref=badge_shield
713
719
  [licenses]: https://app.fossa.io/api/projects/git%2Bhttps%3A%2F%2Fgithub.com%2Fwebpack%2Fwebpack.svg?type=shield
714
- [cover]: https://img.shields.io/coveralls/webpack/webpack.svg
715
- [cover-url]: https://coveralls.io/r/webpack/webpack/
720
+ [cover]: https://codecov.io/gh/webpack/webpack/branch/master/graph/badge.svg?token=mDP3mQJNnn
721
+ [cover-url]: https://codecov.io/gh/webpack/webpack
package/bin/webpack.js CHANGED
@@ -53,6 +53,19 @@ const isInstalled = packageName => {
53
53
  }
54
54
  } while (dir !== (dir = path.dirname(dir)));
55
55
 
56
+ // https://github.com/nodejs/node/blob/v18.9.1/lib/internal/modules/cjs/loader.js#L1274
57
+ // eslint-disable-next-line no-warning-comments
58
+ // @ts-ignore
59
+ for (const internalPath of require("module").globalPaths) {
60
+ try {
61
+ if (fs.statSync(path.join(internalPath, packageName)).isDirectory()) {
62
+ return true;
63
+ }
64
+ } catch (_error) {
65
+ // Nothing
66
+ }
67
+ }
68
+
56
69
  return false;
57
70
  };
58
71
 
@@ -65,8 +78,19 @@ const runCli = cli => {
65
78
  const pkgPath = require.resolve(`${cli.package}/package.json`);
66
79
  // eslint-disable-next-line node/no-missing-require
67
80
  const pkg = require(pkgPath);
68
- // eslint-disable-next-line node/no-missing-require
69
- require(path.resolve(path.dirname(pkgPath), pkg.bin[cli.binName]));
81
+
82
+ if (pkg.type === "module" || /\.mjs/i.test(pkg.bin[cli.binName])) {
83
+ // eslint-disable-next-line node/no-unsupported-features/es-syntax
84
+ import(path.resolve(path.dirname(pkgPath), pkg.bin[cli.binName])).catch(
85
+ error => {
86
+ console.error(error);
87
+ process.exitCode = 1;
88
+ }
89
+ );
90
+ } else {
91
+ // eslint-disable-next-line node/no-missing-require
92
+ require(path.resolve(path.dirname(pkgPath), pkg.bin[cli.binName]));
93
+ }
70
94
  };
71
95
 
72
96
  /**
package/hot/dev-server.js CHANGED
@@ -4,9 +4,10 @@
4
4
  */
5
5
  /* globals __webpack_hash__ */
6
6
  if (module.hot) {
7
+ /** @type {undefined|string} */
7
8
  var lastHash;
8
9
  var upToDate = function upToDate() {
9
- return lastHash.indexOf(__webpack_hash__) >= 0;
10
+ return /** @type {string} */ (lastHash).indexOf(__webpack_hash__) >= 0;
10
11
  };
11
12
  var log = require("./log");
12
13
  var check = function check() {
@@ -3,11 +3,17 @@
3
3
  "use strict";
4
4
 
5
5
  var urlBase = decodeURIComponent(__resourceQuery.slice(1));
6
+
7
+ /**
8
+ * @param {{ data: string, onError: (err: Error) => void, active: boolean, module: module }} options options
9
+ * @returns {() => void} function to destroy response
10
+ */
6
11
  exports.keepAlive = function (options) {
7
12
  var data = options.data;
8
13
  var onError = options.onError;
9
14
  var active = options.active;
10
15
  var module = options.module;
16
+ /** @type {import("http").IncomingMessage} */
11
17
  var response;
12
18
  var request = (
13
19
  urlBase.startsWith("https") ? require("https") : require("http")
@@ -27,6 +33,10 @@ exports.keepAlive = function (options) {
27
33
  }
28
34
  }
29
35
  );
36
+
37
+ /**
38
+ * @param {Error} err error
39
+ */
30
40
  function errorHandler(err) {
31
41
  err.message =
32
42
  "Problem communicating active modules to the server: " + err.message;
@@ -9,6 +9,7 @@ if (typeof EventSource !== "function") {
9
9
  }
10
10
 
11
11
  var urlBase = decodeURIComponent(__resourceQuery.slice(1));
12
+ /** @type {EventSource | undefined} */
12
13
  var activeEventSource;
13
14
  var activeKeys = new Map();
14
15
  var errorHandlers = new Set();
@@ -19,6 +20,10 @@ var updateEventSource = function updateEventSource() {
19
20
  activeEventSource = new EventSource(
20
21
  urlBase + Array.from(activeKeys.keys()).join("@")
21
22
  );
23
+ /**
24
+ * @this {EventSource}
25
+ * @param {Event & { message?: string, filename?: string, lineno?: number, colno?: number, error?: Error }} event event
26
+ */
22
27
  activeEventSource.onerror = function (event) {
23
28
  errorHandlers.forEach(function (onError) {
24
29
  onError(
@@ -42,6 +47,10 @@ var updateEventSource = function updateEventSource() {
42
47
  }
43
48
  };
44
49
 
50
+ /**
51
+ * @param {{ data: string, onError: (err: Error) => void, active: boolean, module: module }} options options
52
+ * @returns {() => void} function to destroy response
53
+ */
45
54
  exports.keepAlive = function (options) {
46
55
  var data = options.data;
47
56
  var onError = options.onError;
@@ -2,6 +2,11 @@
2
2
  MIT License http://www.opensource.org/licenses/mit-license.php
3
3
  Author Tobias Koppers @sokra
4
4
  */
5
+
6
+ /**
7
+ * @param {(string | number)[]} updatedModules updated modules
8
+ * @param {(string | number)[] | null} renewedModules renewed modules
9
+ */
5
10
  module.exports = function (updatedModules, renewedModules) {
6
11
  var unacceptedModules = updatedModules.filter(function (moduleId) {
7
12
  return renewedModules && renewedModules.indexOf(moduleId) < 0;
package/hot/log.js CHANGED
@@ -1,7 +1,14 @@
1
+ /** @typedef {"info" | "warning" | "error"} LogLevel */
2
+
3
+ /** @type {LogLevel} */
1
4
  var logLevel = "info";
2
5
 
3
6
  function dummy() {}
4
7
 
8
+ /**
9
+ * @param {LogLevel} level log level
10
+ * @returns {boolean} true, if should log
11
+ */
5
12
  function shouldLog(level) {
6
13
  var shouldLog =
7
14
  (logLevel === "info" && level === "info") ||
@@ -10,6 +17,10 @@ function shouldLog(level) {
10
17
  return shouldLog;
11
18
  }
12
19
 
20
+ /**
21
+ * @param {(msg?: string) => void} logFn log function
22
+ * @returns {(level: LogLevel, msg?: string) => void} function that logs when log level is sufficient
23
+ */
13
24
  function logGroup(logFn) {
14
25
  return function (level, msg) {
15
26
  if (shouldLog(level)) {
@@ -18,6 +29,10 @@ function logGroup(logFn) {
18
29
  };
19
30
  }
20
31
 
32
+ /**
33
+ * @param {LogLevel} level log level
34
+ * @param {string|Error} msg message
35
+ */
21
36
  module.exports = function (level, msg) {
22
37
  if (shouldLog(level)) {
23
38
  if (level === "info") {
@@ -42,10 +57,17 @@ module.exports.groupCollapsed = logGroup(groupCollapsed);
42
57
 
43
58
  module.exports.groupEnd = logGroup(groupEnd);
44
59
 
60
+ /**
61
+ * @param {LogLevel} level log level
62
+ */
45
63
  module.exports.setLogLevel = function (level) {
46
64
  logLevel = level;
47
65
  };
48
66
 
67
+ /**
68
+ * @param {Error} err error
69
+ * @returns {string} formatted error
70
+ */
49
71
  module.exports.formatError = function (err) {
50
72
  var message = err.message;
51
73
  var stack = err.stack;
@@ -4,9 +4,10 @@
4
4
  */
5
5
  /*globals __webpack_hash__ */
6
6
  if (module.hot) {
7
+ /** @type {undefined|string} */
7
8
  var lastHash;
8
9
  var upToDate = function upToDate() {
9
- return lastHash.indexOf(__webpack_hash__) >= 0;
10
+ return /** @type {string} */ (lastHash).indexOf(__webpack_hash__) >= 0;
10
11
  };
11
12
  var log = require("./log");
12
13
  var check = function check() {
package/hot/poll.js CHANGED
@@ -7,6 +7,9 @@ if (module.hot) {
7
7
  var hotPollInterval = +__resourceQuery.slice(1) || 10 * 60 * 1000;
8
8
  var log = require("./log");
9
9
 
10
+ /**
11
+ * @param {boolean=} fromUpdate true when called from update
12
+ */
10
13
  var checkForUpdate = function checkForUpdate(fromUpdate) {
11
14
  if (module.hot.status() === "idle") {
12
15
  module.hot
package/hot/signal.js CHANGED
@@ -5,6 +5,10 @@
5
5
  /*globals __resourceQuery */
6
6
  if (module.hot) {
7
7
  var log = require("./log");
8
+
9
+ /**
10
+ * @param {boolean=} fromUpdate true when called from update
11
+ */
8
12
  var checkForUpdate = function checkForUpdate(fromUpdate) {
9
13
  module.hot
10
14
  .check()
package/lib/APIPlugin.js CHANGED
@@ -5,10 +5,17 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const InitFragment = require("./InitFragment");
9
+ const {
10
+ JAVASCRIPT_MODULE_TYPE_AUTO,
11
+ JAVASCRIPT_MODULE_TYPE_DYNAMIC,
12
+ JAVASCRIPT_MODULE_TYPE_ESM
13
+ } = require("./ModuleTypeConstants");
8
14
  const RuntimeGlobals = require("./RuntimeGlobals");
9
15
  const WebpackError = require("./WebpackError");
10
16
  const ConstDependency = require("./dependencies/ConstDependency");
11
17
  const BasicEvaluatedExpression = require("./javascript/BasicEvaluatedExpression");
18
+ const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
12
19
  const {
13
20
  toConstantDependency,
14
21
  evaluateToString
@@ -19,101 +26,121 @@ const GetFullHashRuntimeModule = require("./runtime/GetFullHashRuntimeModule");
19
26
  /** @typedef {import("./Compiler")} Compiler */
20
27
  /** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
21
28
 
22
- /* eslint-disable camelcase */
23
- const REPLACEMENTS = {
24
- __webpack_require__: {
25
- expr: RuntimeGlobals.require,
26
- req: [RuntimeGlobals.require],
27
- type: "function",
28
- assign: false
29
- },
30
- __webpack_public_path__: {
31
- expr: RuntimeGlobals.publicPath,
32
- req: [RuntimeGlobals.publicPath],
33
- type: "string",
34
- assign: true
35
- },
36
- __webpack_base_uri__: {
37
- expr: RuntimeGlobals.baseURI,
38
- req: [RuntimeGlobals.baseURI],
39
- type: "string",
40
- assign: true
41
- },
42
- __webpack_modules__: {
43
- expr: RuntimeGlobals.moduleFactories,
44
- req: [RuntimeGlobals.moduleFactories],
45
- type: "object",
46
- assign: false
47
- },
48
- __webpack_chunk_load__: {
49
- expr: RuntimeGlobals.ensureChunk,
50
- req: [RuntimeGlobals.ensureChunk],
51
- type: "function",
52
- assign: true
53
- },
54
- __non_webpack_require__: {
55
- expr: "require",
56
- req: null,
57
- type: undefined, // type is not known, depends on environment
58
- assign: true
59
- },
60
- __webpack_nonce__: {
61
- expr: RuntimeGlobals.scriptNonce,
62
- req: [RuntimeGlobals.scriptNonce],
63
- type: "string",
64
- assign: true
65
- },
66
- __webpack_hash__: {
67
- expr: `${RuntimeGlobals.getFullHash}()`,
68
- req: [RuntimeGlobals.getFullHash],
69
- type: "string",
70
- assign: false
71
- },
72
- __webpack_chunkname__: {
73
- expr: RuntimeGlobals.chunkName,
74
- req: [RuntimeGlobals.chunkName],
75
- type: "string",
76
- assign: false
77
- },
78
- __webpack_get_script_filename__: {
79
- expr: RuntimeGlobals.getChunkScriptFilename,
80
- req: [RuntimeGlobals.getChunkScriptFilename],
81
- type: "function",
82
- assign: true
83
- },
84
- __webpack_runtime_id__: {
85
- expr: RuntimeGlobals.runtimeId,
86
- req: [RuntimeGlobals.runtimeId],
87
- assign: false
88
- },
89
- "require.onError": {
90
- expr: RuntimeGlobals.uncaughtErrorHandler,
91
- req: [RuntimeGlobals.uncaughtErrorHandler],
92
- type: undefined, // type is not known, could be function or undefined
93
- assign: true // is never a pattern
94
- },
95
- __system_context__: {
96
- expr: RuntimeGlobals.systemContext,
97
- req: [RuntimeGlobals.systemContext],
98
- type: "object",
99
- assign: false
100
- },
101
- __webpack_share_scopes__: {
102
- expr: RuntimeGlobals.shareScopeMap,
103
- req: [RuntimeGlobals.shareScopeMap],
104
- type: "object",
105
- assign: false
106
- },
107
- __webpack_init_sharing__: {
108
- expr: RuntimeGlobals.initializeSharing,
109
- req: [RuntimeGlobals.initializeSharing],
110
- type: "function",
111
- assign: true
112
- }
113
- };
114
- /* eslint-enable camelcase */
29
+ /**
30
+ * @param {boolean} module true if ES module
31
+ * @param {string} importMetaName `import.meta` name
32
+ * @returns {Record<string, {expr: string, req: string[] | null, type?: string, assign: boolean}>} replacements
33
+ */
34
+ function getReplacements(module, importMetaName) {
35
+ return {
36
+ __webpack_require__: {
37
+ expr: RuntimeGlobals.require,
38
+ req: [RuntimeGlobals.require],
39
+ type: "function",
40
+ assign: false
41
+ },
42
+ __webpack_public_path__: {
43
+ expr: RuntimeGlobals.publicPath,
44
+ req: [RuntimeGlobals.publicPath],
45
+ type: "string",
46
+ assign: true
47
+ },
48
+ __webpack_base_uri__: {
49
+ expr: RuntimeGlobals.baseURI,
50
+ req: [RuntimeGlobals.baseURI],
51
+ type: "string",
52
+ assign: true
53
+ },
54
+ __webpack_modules__: {
55
+ expr: RuntimeGlobals.moduleFactories,
56
+ req: [RuntimeGlobals.moduleFactories],
57
+ type: "object",
58
+ assign: false
59
+ },
60
+ __webpack_chunk_load__: {
61
+ expr: RuntimeGlobals.ensureChunk,
62
+ req: [RuntimeGlobals.ensureChunk],
63
+ type: "function",
64
+ assign: true
65
+ },
66
+ __non_webpack_require__: {
67
+ expr: module
68
+ ? `__WEBPACK_EXTERNAL_createRequire(${importMetaName}.url)`
69
+ : "require",
70
+ req: null,
71
+ type: undefined, // type is not known, depends on environment
72
+ assign: true
73
+ },
74
+ __webpack_nonce__: {
75
+ expr: RuntimeGlobals.scriptNonce,
76
+ req: [RuntimeGlobals.scriptNonce],
77
+ type: "string",
78
+ assign: true
79
+ },
80
+ __webpack_hash__: {
81
+ expr: `${RuntimeGlobals.getFullHash}()`,
82
+ req: [RuntimeGlobals.getFullHash],
83
+ type: "string",
84
+ assign: false
85
+ },
86
+ __webpack_chunkname__: {
87
+ expr: RuntimeGlobals.chunkName,
88
+ req: [RuntimeGlobals.chunkName],
89
+ type: "string",
90
+ assign: false
91
+ },
92
+ __webpack_get_script_filename__: {
93
+ expr: RuntimeGlobals.getChunkScriptFilename,
94
+ req: [RuntimeGlobals.getChunkScriptFilename],
95
+ type: "function",
96
+ assign: true
97
+ },
98
+ __webpack_runtime_id__: {
99
+ expr: RuntimeGlobals.runtimeId,
100
+ req: [RuntimeGlobals.runtimeId],
101
+ assign: false
102
+ },
103
+ "require.onError": {
104
+ expr: RuntimeGlobals.uncaughtErrorHandler,
105
+ req: [RuntimeGlobals.uncaughtErrorHandler],
106
+ type: undefined, // type is not known, could be function or undefined
107
+ assign: true // is never a pattern
108
+ },
109
+ __system_context__: {
110
+ expr: RuntimeGlobals.systemContext,
111
+ req: [RuntimeGlobals.systemContext],
112
+ type: "object",
113
+ assign: false
114
+ },
115
+ __webpack_share_scopes__: {
116
+ expr: RuntimeGlobals.shareScopeMap,
117
+ req: [RuntimeGlobals.shareScopeMap],
118
+ type: "object",
119
+ assign: false
120
+ },
121
+ __webpack_init_sharing__: {
122
+ expr: RuntimeGlobals.initializeSharing,
123
+ req: [RuntimeGlobals.initializeSharing],
124
+ type: "function",
125
+ assign: true
126
+ }
127
+ };
128
+ }
129
+
130
+ const PLUGIN_NAME = "APIPlugin";
131
+
132
+ /**
133
+ * @typedef {Object} APIPluginOptions
134
+ * @property {boolean} [module] the output filename
135
+ */
115
136
 
116
137
  class APIPlugin {
138
+ /**
139
+ * @param {APIPluginOptions} [options] options
140
+ */
141
+ constructor(options = {}) {
142
+ this.options = options;
143
+ }
117
144
  /**
118
145
  * Apply the plugin
119
146
  * @param {Compiler} compiler the compiler instance
@@ -121,8 +148,14 @@ class APIPlugin {
121
148
  */
122
149
  apply(compiler) {
123
150
  compiler.hooks.compilation.tap(
124
- "APIPlugin",
151
+ PLUGIN_NAME,
125
152
  (compilation, { normalModuleFactory }) => {
153
+ const { importMetaName } = compilation.outputOptions;
154
+ const REPLACEMENTS = getReplacements(
155
+ this.options.module,
156
+ importMetaName
157
+ );
158
+
126
159
  compilation.dependencyTemplates.set(
127
160
  ConstDependency,
128
161
  new ConstDependency.Template()
@@ -130,7 +163,7 @@ class APIPlugin {
130
163
 
131
164
  compilation.hooks.runtimeRequirementInTree
132
165
  .for(RuntimeGlobals.chunkName)
133
- .tap("APIPlugin", chunk => {
166
+ .tap(PLUGIN_NAME, chunk => {
134
167
  compilation.addRuntimeModule(
135
168
  chunk,
136
169
  new ChunkNameRuntimeModule(chunk.name)
@@ -140,25 +173,50 @@ class APIPlugin {
140
173
 
141
174
  compilation.hooks.runtimeRequirementInTree
142
175
  .for(RuntimeGlobals.getFullHash)
143
- .tap("APIPlugin", (chunk, set) => {
176
+ .tap(PLUGIN_NAME, (chunk, set) => {
144
177
  compilation.addRuntimeModule(chunk, new GetFullHashRuntimeModule());
145
178
  return true;
146
179
  });
147
180
 
181
+ const hooks = JavascriptModulesPlugin.getCompilationHooks(compilation);
182
+
183
+ hooks.renderModuleContent.tap(
184
+ PLUGIN_NAME,
185
+ (source, module, renderContext) => {
186
+ if (module.buildInfo.needCreateRequire) {
187
+ const chunkInitFragments = [
188
+ new InitFragment(
189
+ 'import { createRequire as __WEBPACK_EXTERNAL_createRequire } from "module";\n',
190
+ InitFragment.STAGE_HARMONY_IMPORTS,
191
+ 0,
192
+ "external module node-commonjs"
193
+ )
194
+ ];
195
+
196
+ renderContext.chunkInitFragments.push(...chunkInitFragments);
197
+ }
198
+
199
+ return source;
200
+ }
201
+ );
202
+
148
203
  /**
149
204
  * @param {JavascriptParser} parser the parser
150
205
  */
151
206
  const handler = parser => {
152
207
  Object.keys(REPLACEMENTS).forEach(key => {
153
208
  const info = REPLACEMENTS[key];
154
- parser.hooks.expression
155
- .for(key)
156
- .tap(
157
- "APIPlugin",
158
- toConstantDependency(parser, info.expr, info.req)
159
- );
209
+ parser.hooks.expression.for(key).tap(PLUGIN_NAME, expression => {
210
+ const dep = toConstantDependency(parser, info.expr, info.req);
211
+
212
+ if (key === "__non_webpack_require__" && this.options.module) {
213
+ parser.state.module.buildInfo.needCreateRequire = true;
214
+ }
215
+
216
+ return dep(expression);
217
+ });
160
218
  if (info.assign === false) {
161
- parser.hooks.assign.for(key).tap("APIPlugin", expr => {
219
+ parser.hooks.assign.for(key).tap(PLUGIN_NAME, expr => {
162
220
  const err = new WebpackError(`${key} must not be assigned`);
163
221
  err.loc = expr.loc;
164
222
  throw err;
@@ -167,13 +225,13 @@ class APIPlugin {
167
225
  if (info.type) {
168
226
  parser.hooks.evaluateTypeof
169
227
  .for(key)
170
- .tap("APIPlugin", evaluateToString(info.type));
228
+ .tap(PLUGIN_NAME, evaluateToString(info.type));
171
229
  }
172
230
  });
173
231
 
174
232
  parser.hooks.expression
175
233
  .for("__webpack_layer__")
176
- .tap("APIPlugin", expr => {
234
+ .tap(PLUGIN_NAME, expr => {
177
235
  const dep = new ConstDependency(
178
236
  JSON.stringify(parser.state.module.layer),
179
237
  expr.range
@@ -184,7 +242,7 @@ class APIPlugin {
184
242
  });
185
243
  parser.hooks.evaluateIdentifier
186
244
  .for("__webpack_layer__")
187
- .tap("APIPlugin", expr =>
245
+ .tap(PLUGIN_NAME, expr =>
188
246
  (parser.state.module.layer === null
189
247
  ? new BasicEvaluatedExpression().setNull()
190
248
  : new BasicEvaluatedExpression().setString(
@@ -194,7 +252,7 @@ class APIPlugin {
194
252
  );
195
253
  parser.hooks.evaluateTypeof
196
254
  .for("__webpack_layer__")
197
- .tap("APIPlugin", expr =>
255
+ .tap(PLUGIN_NAME, expr =>
198
256
  new BasicEvaluatedExpression()
199
257
  .setString(
200
258
  parser.state.module.layer === null ? "object" : "string"
@@ -204,7 +262,7 @@ class APIPlugin {
204
262
 
205
263
  parser.hooks.expression
206
264
  .for("__webpack_module__.id")
207
- .tap("APIPlugin", expr => {
265
+ .tap(PLUGIN_NAME, expr => {
208
266
  parser.state.module.buildInfo.moduleConcatenationBailout =
209
267
  "__webpack_module__.id";
210
268
  const dep = new ConstDependency(
@@ -219,7 +277,7 @@ class APIPlugin {
219
277
 
220
278
  parser.hooks.expression
221
279
  .for("__webpack_module__")
222
- .tap("APIPlugin", expr => {
280
+ .tap(PLUGIN_NAME, expr => {
223
281
  parser.state.module.buildInfo.moduleConcatenationBailout =
224
282
  "__webpack_module__";
225
283
  const dep = new ConstDependency(
@@ -233,18 +291,18 @@ class APIPlugin {
233
291
  });
234
292
  parser.hooks.evaluateTypeof
235
293
  .for("__webpack_module__")
236
- .tap("APIPlugin", evaluateToString("object"));
294
+ .tap(PLUGIN_NAME, evaluateToString("object"));
237
295
  };
238
296
 
239
297
  normalModuleFactory.hooks.parser
240
- .for("javascript/auto")
241
- .tap("APIPlugin", handler);
298
+ .for(JAVASCRIPT_MODULE_TYPE_AUTO)
299
+ .tap(PLUGIN_NAME, handler);
242
300
  normalModuleFactory.hooks.parser
243
- .for("javascript/dynamic")
244
- .tap("APIPlugin", handler);
301
+ .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
302
+ .tap(PLUGIN_NAME, handler);
245
303
  normalModuleFactory.hooks.parser
246
- .for("javascript/esm")
247
- .tap("APIPlugin", handler);
304
+ .for(JAVASCRIPT_MODULE_TYPE_ESM)
305
+ .tap(PLUGIN_NAME, handler);
248
306
  }
249
307
  );
250
308
  }