webpack 5.101.3 → 5.102.1

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.
Files changed (339) hide show
  1. package/README.md +21 -26
  2. package/lib/APIPlugin.js +30 -36
  3. package/lib/AsyncDependenciesBlock.js +1 -4
  4. package/lib/BannerPlugin.js +0 -1
  5. package/lib/Cache.js +7 -6
  6. package/lib/CacheFacade.js +0 -1
  7. package/lib/Chunk.js +49 -31
  8. package/lib/ChunkGraph.js +37 -27
  9. package/lib/ChunkGroup.js +8 -10
  10. package/lib/ChunkTemplate.js +1 -1
  11. package/lib/CleanPlugin.js +3 -3
  12. package/lib/CodeGenerationResults.js +3 -2
  13. package/lib/CompatibilityPlugin.js +29 -12
  14. package/lib/Compilation.js +209 -196
  15. package/lib/Compiler.js +36 -35
  16. package/lib/ConcatenationScope.js +6 -1
  17. package/lib/ConditionalInitFragment.js +1 -1
  18. package/lib/ConstPlugin.js +6 -5
  19. package/lib/ContextExclusionPlugin.js +0 -1
  20. package/lib/ContextModule.js +25 -21
  21. package/lib/ContextModuleFactory.js +30 -11
  22. package/lib/ContextReplacementPlugin.js +38 -15
  23. package/lib/DefinePlugin.js +5 -9
  24. package/lib/DelegatedModule.js +7 -11
  25. package/lib/DependenciesBlock.js +0 -2
  26. package/lib/Dependency.js +9 -11
  27. package/lib/DependencyTemplates.js +2 -4
  28. package/lib/DllModule.js +1 -7
  29. package/lib/DllReferencePlugin.js +2 -4
  30. package/lib/DynamicEntryPlugin.js +0 -2
  31. package/lib/EntryOptionPlugin.js +0 -5
  32. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  33. package/lib/EvalDevToolModulePlugin.js +4 -3
  34. package/lib/EvalSourceMapDevToolPlugin.js +3 -4
  35. package/lib/ExportsInfo.js +50 -49
  36. package/lib/ExternalModule.js +84 -52
  37. package/lib/ExternalModuleFactoryPlugin.js +27 -7
  38. package/lib/ExternalsPlugin.js +24 -17
  39. package/lib/FileSystemInfo.js +105 -90
  40. package/lib/FlagDependencyUsagePlugin.js +3 -4
  41. package/lib/Generator.js +2 -13
  42. package/lib/GraphHelpers.js +0 -3
  43. package/lib/HookWebpackError.js +0 -2
  44. package/lib/HotModuleReplacementPlugin.js +22 -24
  45. package/lib/HotUpdateChunk.js +0 -3
  46. package/lib/IgnorePlugin.js +5 -2
  47. package/lib/InitFragment.js +41 -29
  48. package/lib/InvalidDependenciesModuleWarning.js +0 -1
  49. package/lib/LibManifestPlugin.js +4 -6
  50. package/lib/LoaderOptionsPlugin.js +1 -10
  51. package/lib/MainTemplate.js +8 -19
  52. package/lib/Module.js +32 -20
  53. package/lib/ModuleFactory.js +1 -1
  54. package/lib/ModuleFilenameHelpers.js +42 -25
  55. package/lib/ModuleGraph.js +30 -16
  56. package/lib/ModuleInfoHeaderPlugin.js +0 -1
  57. package/lib/ModuleTemplate.js +0 -2
  58. package/lib/ModuleTypeConstants.js +11 -1
  59. package/lib/MultiCompiler.js +23 -15
  60. package/lib/MultiWatching.js +6 -10
  61. package/lib/NodeStuffPlugin.js +2 -10
  62. package/lib/NormalModule.js +146 -89
  63. package/lib/NormalModuleFactory.js +132 -42
  64. package/lib/OptionsApply.js +1 -1
  65. package/lib/Parser.js +1 -1
  66. package/lib/ProgressPlugin.js +6 -10
  67. package/lib/ProvidePlugin.js +5 -7
  68. package/lib/RawModule.js +1 -6
  69. package/lib/RecordIdsPlugin.js +10 -6
  70. package/lib/ResolverFactory.js +0 -2
  71. package/lib/RuntimeGlobals.js +5 -0
  72. package/lib/RuntimeModule.js +1 -3
  73. package/lib/RuntimePlugin.js +26 -22
  74. package/lib/RuntimeTemplate.js +22 -12
  75. package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -2
  76. package/lib/SourceMapDevToolPlugin.js +11 -18
  77. package/lib/Stats.js +0 -1
  78. package/lib/Template.js +6 -11
  79. package/lib/TemplatedPathPlugin.js +2 -1
  80. package/lib/WatchIgnorePlugin.js +2 -3
  81. package/lib/Watching.js +15 -15
  82. package/lib/WebpackIsIncludedPlugin.js +0 -2
  83. package/lib/WebpackOptionsApply.js +74 -107
  84. package/lib/asset/AssetBytesGenerator.js +167 -0
  85. package/lib/asset/AssetBytesParser.js +37 -0
  86. package/lib/asset/AssetGenerator.js +22 -37
  87. package/lib/asset/AssetModulesPlugin.js +34 -16
  88. package/lib/asset/AssetParser.js +7 -3
  89. package/lib/asset/AssetSourceGenerator.js +1 -1
  90. package/lib/asset/RawDataUrlModule.js +3 -2
  91. package/lib/async-modules/AsyncModuleHelpers.js +6 -4
  92. package/lib/buildChunkGraph.js +0 -1
  93. package/lib/cache/MemoryCachePlugin.js +0 -2
  94. package/lib/cache/MemoryWithGcCachePlugin.js +0 -2
  95. package/lib/cache/PackFileCacheStrategy.js +14 -1
  96. package/lib/cache/ResolverCachePlugin.js +9 -15
  97. package/lib/cache/getLazyHashedEtag.js +1 -1
  98. package/lib/config/browserslistTargetHandler.js +77 -76
  99. package/lib/config/defaults.js +162 -23
  100. package/lib/config/normalization.js +18 -3
  101. package/lib/config/target.js +1 -1
  102. package/lib/container/ContainerEntryDependency.js +0 -1
  103. package/lib/container/ContainerEntryModule.js +3 -7
  104. package/lib/container/ContainerPlugin.js +1 -2
  105. package/lib/container/ContainerReferencePlugin.js +0 -1
  106. package/lib/container/FallbackDependency.js +2 -1
  107. package/lib/container/FallbackModule.js +6 -7
  108. package/lib/container/ModuleFederationPlugin.js +0 -1
  109. package/lib/container/RemoteModule.js +8 -8
  110. package/lib/container/RemoteRuntimeModule.js +2 -2
  111. package/lib/css/CssGenerator.js +3 -6
  112. package/lib/css/CssLoadingRuntimeModule.js +6 -9
  113. package/lib/css/CssModulesPlugin.js +13 -19
  114. package/lib/css/CssParser.js +3 -3
  115. package/lib/css/walkCssTokens.js +2 -2
  116. package/lib/debug/ProfilingPlugin.js +35 -8
  117. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +12 -17
  118. package/lib/dependencies/AMDPlugin.js +2 -2
  119. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -2
  120. package/lib/dependencies/CachedConstDependency.js +0 -4
  121. package/lib/dependencies/CommonJsExportRequireDependency.js +20 -14
  122. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  123. package/lib/dependencies/CommonJsExportsParserPlugin.js +20 -5
  124. package/lib/dependencies/CommonJsFullRequireDependency.js +6 -4
  125. package/lib/dependencies/CommonJsImportsParserPlugin.js +16 -7
  126. package/lib/dependencies/CommonJsRequireContextDependency.js +1 -1
  127. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  128. package/lib/dependencies/ConstDependency.js +2 -2
  129. package/lib/dependencies/ContextDependency.js +9 -4
  130. package/lib/dependencies/ContextDependencyHelpers.js +2 -2
  131. package/lib/dependencies/ContextDependencyTemplateAsId.js +9 -9
  132. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +9 -9
  133. package/lib/dependencies/ContextElementDependency.js +22 -11
  134. package/lib/dependencies/CssIcssImportDependency.js +0 -2
  135. package/lib/dependencies/CssIcssSymbolDependency.js +2 -2
  136. package/lib/dependencies/CssImportDependency.js +0 -8
  137. package/lib/dependencies/CssLocalIdentifierDependency.js +4 -7
  138. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -2
  139. package/lib/dependencies/CssUrlDependency.js +0 -6
  140. package/lib/dependencies/ExportsInfoDependency.js +7 -9
  141. package/lib/dependencies/ExternalModuleDependency.js +0 -3
  142. package/lib/dependencies/ExternalModuleInitFragment.js +1 -1
  143. package/lib/dependencies/HarmonyAcceptDependency.js +1 -1
  144. package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -4
  145. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  146. package/lib/dependencies/HarmonyDetectionParserPlugin.js +0 -14
  147. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +3 -3
  148. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +4 -1
  149. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +29 -35
  150. package/lib/dependencies/HarmonyImportDependency.js +33 -14
  151. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +20 -23
  152. package/lib/dependencies/HarmonyImportSideEffectDependency.js +0 -4
  153. package/lib/dependencies/HarmonyImportSpecifierDependency.js +46 -31
  154. package/lib/dependencies/HarmonyModulesPlugin.js +3 -3
  155. package/lib/dependencies/ImportContextDependency.js +13 -0
  156. package/lib/dependencies/ImportDependency.js +18 -6
  157. package/lib/dependencies/ImportEagerDependency.js +2 -3
  158. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +8 -5
  159. package/lib/dependencies/ImportMetaContextPlugin.js +0 -1
  160. package/lib/dependencies/ImportMetaPlugin.js +3 -2
  161. package/lib/dependencies/ImportParserPlugin.js +288 -45
  162. package/lib/dependencies/ImportWeakDependency.js +2 -3
  163. package/lib/dependencies/JsonExportsDependency.js +0 -1
  164. package/lib/dependencies/LoaderDependency.js +0 -3
  165. package/lib/dependencies/LoaderImportDependency.js +0 -3
  166. package/lib/dependencies/LoaderPlugin.js +11 -5
  167. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  168. package/lib/dependencies/ModuleDependency.js +3 -9
  169. package/lib/dependencies/NullDependency.js +2 -0
  170. package/lib/dependencies/ProvidedDependency.js +6 -8
  171. package/lib/dependencies/PureExpressionDependency.js +0 -1
  172. package/lib/dependencies/RequireEnsureDependenciesBlock.js +0 -1
  173. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -2
  174. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  175. package/lib/dependencies/RequireResolveDependency.js +2 -2
  176. package/lib/dependencies/RuntimeRequirementsDependency.js +2 -3
  177. package/lib/dependencies/StaticExportsDependency.js +3 -5
  178. package/lib/dependencies/URLDependency.js +2 -7
  179. package/lib/dependencies/URLPlugin.js +1 -2
  180. package/lib/dependencies/WebAssemblyExportImportedDependency.js +2 -2
  181. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  182. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  183. package/lib/dependencies/WorkerDependency.js +2 -3
  184. package/lib/dependencies/WorkerPlugin.js +4 -12
  185. package/lib/dependencies/processExportInfo.js +2 -3
  186. package/lib/esm/ModuleChunkFormatPlugin.js +0 -3
  187. package/lib/esm/ModuleChunkLoadingPlugin.js +2 -1
  188. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -7
  189. package/lib/hmr/LazyCompilationPlugin.js +6 -4
  190. package/lib/hmr/lazyCompilationBackend.js +13 -10
  191. package/lib/ids/DeterministicChunkIdsPlugin.js +0 -1
  192. package/lib/ids/HashedModuleIdsPlugin.js +5 -7
  193. package/lib/ids/IdHelpers.js +1 -1
  194. package/lib/ids/NamedChunkIdsPlugin.js +1 -6
  195. package/lib/ids/NamedModuleIdsPlugin.js +1 -5
  196. package/lib/ids/NaturalChunkIdsPlugin.js +0 -1
  197. package/lib/ids/NaturalModuleIdsPlugin.js +0 -1
  198. package/lib/ids/OccurrenceChunkIdsPlugin.js +0 -1
  199. package/lib/ids/OccurrenceModuleIdsPlugin.js +0 -1
  200. package/lib/ids/SyncModuleIdsPlugin.js +4 -3
  201. package/lib/index.js +8 -7
  202. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -1
  203. package/lib/javascript/BasicEvaluatedExpression.js +13 -6
  204. package/lib/javascript/ChunkFormatHelpers.js +1 -1
  205. package/lib/javascript/CommonJsChunkFormatPlugin.js +0 -1
  206. package/lib/javascript/JavascriptGenerator.js +2 -3
  207. package/lib/javascript/JavascriptModulesPlugin.js +46 -24
  208. package/lib/javascript/JavascriptParser.js +120 -55
  209. package/lib/javascript/JavascriptParserHelpers.js +2 -2
  210. package/lib/javascript/StartupHelpers.js +2 -4
  211. package/lib/json/JsonData.js +1 -1
  212. package/lib/json/JsonGenerator.js +4 -5
  213. package/lib/json/JsonModulesPlugin.js +0 -3
  214. package/lib/json/JsonParser.js +4 -2
  215. package/lib/library/AbstractLibraryPlugin.js +2 -2
  216. package/lib/library/AmdLibraryPlugin.js +0 -1
  217. package/lib/library/AssignLibraryPlugin.js +23 -12
  218. package/lib/library/EnableLibraryPlugin.js +7 -11
  219. package/lib/library/ExportPropertyLibraryPlugin.js +8 -20
  220. package/lib/library/JsonpLibraryPlugin.js +5 -2
  221. package/lib/library/ModuleLibraryPlugin.js +88 -43
  222. package/lib/library/SystemLibraryPlugin.js +15 -6
  223. package/lib/library/UmdLibraryPlugin.js +12 -18
  224. package/lib/logging/Logger.js +12 -10
  225. package/lib/logging/createConsoleLogger.js +15 -14
  226. package/lib/logging/truncateArgs.js +1 -1
  227. package/lib/node/CommonJsChunkLoadingPlugin.js +2 -1
  228. package/lib/node/NodeWatchFileSystem.js +4 -4
  229. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  230. package/lib/node/RequireChunkLoadingRuntimeModule.js +5 -2
  231. package/lib/node/nodeConsole.js +2 -2
  232. package/lib/optimize/AggressiveSplittingPlugin.js +2 -0
  233. package/lib/optimize/ConcatenatedModule.js +142 -100
  234. package/lib/optimize/InnerGraph.js +17 -11
  235. package/lib/optimize/InnerGraphPlugin.js +0 -3
  236. package/lib/optimize/ModuleConcatenationPlugin.js +3 -4
  237. package/lib/optimize/RealContentHashPlugin.js +5 -3
  238. package/lib/optimize/RuntimeChunkPlugin.js +0 -1
  239. package/lib/optimize/SideEffectsFlagPlugin.js +3 -10
  240. package/lib/optimize/SplitChunksPlugin.js +46 -40
  241. package/lib/performance/SizeLimitsPlugin.js +2 -1
  242. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  243. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +0 -2
  244. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +0 -1
  245. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  246. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  247. package/lib/rules/BasicMatcherRulePlugin.js +0 -2
  248. package/lib/rules/ObjectMatcherRulePlugin.js +0 -1
  249. package/lib/rules/RuleSetCompiler.js +8 -6
  250. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  251. package/lib/runtime/CompatRuntimeModule.js +0 -1
  252. package/lib/runtime/GetChunkFilenameRuntimeModule.js +8 -9
  253. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  254. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +1 -1
  255. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  256. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  257. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  258. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  259. package/lib/schemes/DataUriPlugin.js +2 -28
  260. package/lib/schemes/FileUriPlugin.js +5 -2
  261. package/lib/schemes/HttpUriPlugin.js +4 -2
  262. package/lib/schemes/VirtualUrlPlugin.js +11 -11
  263. package/lib/serialization/FileMiddleware.js +1 -1
  264. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  265. package/lib/serialization/ObjectMiddleware.js +31 -20
  266. package/lib/serialization/SerializerMiddleware.js +1 -3
  267. package/lib/serialization/types.js +1 -1
  268. package/lib/sharing/ConsumeSharedModule.js +3 -5
  269. package/lib/sharing/ConsumeSharedPlugin.js +2 -4
  270. package/lib/sharing/ConsumeSharedRuntimeModule.js +9 -6
  271. package/lib/sharing/ProvideSharedModule.js +3 -7
  272. package/lib/sharing/SharePlugin.js +0 -2
  273. package/lib/sharing/ShareRuntimeModule.js +4 -1
  274. package/lib/sharing/resolveMatchedConfigs.js +14 -6
  275. package/lib/sharing/utils.js +0 -6
  276. package/lib/stats/DefaultStatsFactoryPlugin.js +179 -95
  277. package/lib/stats/DefaultStatsPresetPlugin.js +15 -9
  278. package/lib/stats/DefaultStatsPrinterPlugin.js +77 -113
  279. package/lib/stats/StatsFactory.js +14 -11
  280. package/lib/url/URLParserPlugin.js +2 -4
  281. package/lib/util/ArrayHelpers.js +4 -4
  282. package/lib/util/AsyncQueue.js +1 -0
  283. package/lib/util/Hash.js +35 -5
  284. package/lib/util/LazySet.js +2 -2
  285. package/lib/util/StackedCacheMap.js +0 -2
  286. package/lib/util/TupleSet.js +9 -4
  287. package/lib/util/URLAbsoluteSpecifier.js +0 -1
  288. package/lib/util/WeakTupleMap.js +1 -1
  289. package/lib/util/chainedImports.js +3 -1
  290. package/lib/util/cleverMerge.js +15 -18
  291. package/lib/util/comparators.js +2 -4
  292. package/lib/util/compileBooleanMatcher.js +11 -9
  293. package/lib/util/concatenate.js +1 -2
  294. package/lib/util/create-schema-validation.js +1 -2
  295. package/lib/util/createHash.js +85 -15
  296. package/lib/util/dataURL.js +39 -0
  297. package/lib/util/deprecation.js +29 -31
  298. package/lib/util/deterministicGrouping.js +34 -30
  299. package/lib/util/extractSourceMap.js +319 -0
  300. package/lib/util/findGraphRoots.js +15 -5
  301. package/lib/util/fs.js +29 -8
  302. package/lib/util/hash/BatchedHash.js +47 -8
  303. package/lib/util/hash/wasm-hash.js +53 -13
  304. package/lib/util/semver.js +9 -8
  305. package/lib/util/smartGrouping.js +41 -26
  306. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  307. package/lib/wasm/EnableWasmLoadingPlugin.js +3 -2
  308. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +5 -1
  309. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +2 -13
  310. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +2 -9
  311. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  312. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -4
  313. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -3
  314. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -4
  315. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +2 -7
  316. package/lib/wasm-sync/WebAssemblyParser.js +1 -13
  317. package/lib/web/JsonpChunkLoadingPlugin.js +2 -1
  318. package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -1
  319. package/lib/web/JsonpTemplatePlugin.js +0 -1
  320. package/lib/webpack.js +21 -8
  321. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +2 -1
  322. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  323. package/package.json +21 -21
  324. package/schemas/WebpackOptions.check.js +1 -1
  325. package/schemas/WebpackOptions.json +93 -96
  326. package/schemas/plugins/BannerPlugin.check.js +1 -1
  327. package/schemas/plugins/BannerPlugin.json +4 -0
  328. package/schemas/plugins/IgnorePlugin.json +1 -1
  329. package/schemas/plugins/ProgressPlugin.json +1 -1
  330. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  331. package/schemas/plugins/SourceMapDevToolPlugin.json +5 -1
  332. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  333. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  334. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  335. package/schemas/plugins/schemes/VirtualUrlPlugin.json +3 -3
  336. package/types.d.ts +1699 -706
  337. package/SECURITY.md +0 -9
  338. package/schemas/plugins/HashedModuleIdsPlugin.check.d.ts +0 -7
  339. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
@@ -29,22 +29,23 @@ const { register } = require("./util/serialization");
29
29
 
30
30
  /** @typedef {import("webpack-sources").Source} Source */
31
31
  /** @typedef {import("../declarations/WebpackOptions").HashFunction} HashFunction */
32
- /** @typedef {import("../declarations/WebpackOptions").WebpackOptionsNormalized} WebpackOptions */
32
+ /** @typedef {import("./config/defaults").WebpackOptionsNormalizedWithDefaults} WebpackOptions */
33
33
  /** @typedef {import("./Chunk")} Chunk */
34
34
  /** @typedef {import("./ChunkGraph")} ChunkGraph */
35
35
  /** @typedef {import("./Compilation")} Compilation */
36
36
  /** @typedef {import("./Compilation").UnsafeCacheData} UnsafeCacheData */
37
37
  /** @typedef {import("./Dependency").UpdateHashContext} UpdateHashContext */
38
- /** @typedef {import("./DependencyTemplates")} DependencyTemplates */
39
38
  /** @typedef {import("./ExportsInfo")} ExportsInfo */
40
39
  /** @typedef {import("./Generator").GenerateContext} GenerateContext */
41
40
  /** @typedef {import("./Generator").SourceTypes} SourceTypes */
41
+ /** @typedef {import("./Module").ModuleId} ModuleId */
42
42
  /** @typedef {import("./Module").BuildCallback} BuildCallback */
43
43
  /** @typedef {import("./Module").BuildInfo} BuildInfo */
44
44
  /** @typedef {import("./Module").CodeGenerationContext} CodeGenerationContext */
45
45
  /** @typedef {import("./Module").CodeGenerationResult} CodeGenerationResult */
46
46
  /** @typedef {import("./Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
47
47
  /** @typedef {import("./Module").LibIdentOptions} LibIdentOptions */
48
+ /** @typedef {import("./Module").LibIdent} LibIdent */
48
49
  /** @typedef {import("./Module").NeedBuildCallback} NeedBuildCallback */
49
50
  /** @typedef {import("./Module").NeedBuildContext} NeedBuildContext */
50
51
  /** @typedef {import("./Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
@@ -53,7 +54,6 @@ const { register } = require("./util/serialization");
53
54
  /** @typedef {import("./RequestShortener")} RequestShortener */
54
55
  /** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
55
56
  /** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
56
- /** @typedef {import("./WebpackError")} WebpackError */
57
57
  /** @typedef {import("./javascript/JavascriptModulesPlugin").ChunkRenderContext} ChunkRenderContext */
58
58
  /** @typedef {import("./javascript/JavascriptParser").ImportAttributes} ImportAttributes */
59
59
  /** @typedef {import("./serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
@@ -88,7 +88,7 @@ const RUNTIME_REQUIREMENTS_FOR_MODULE = new Set([
88
88
  const EMPTY_RUNTIME_REQUIREMENTS = new Set([]);
89
89
 
90
90
  /**
91
- * @param {string|string[]} variableName the variable name or path
91
+ * @param {string | string[]} variableName the variable name or path
92
92
  * @param {string} type the module system
93
93
  * @returns {SourceData} the generated source
94
94
  */
@@ -108,8 +108,10 @@ const getSourceForGlobalVariableExternal = (variableName, type) => {
108
108
  };
109
109
  };
110
110
 
111
+ /** @typedef {string | string[]} ModuleAndSpecifiers */
112
+
111
113
  /**
112
- * @param {string|string[]} moduleAndSpecifiers the module request
114
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
113
115
  * @returns {SourceData} the generated source
114
116
  */
115
117
  const getSourceForCommonJsExternal = (moduleAndSpecifiers) => {
@@ -128,7 +130,24 @@ const getSourceForCommonJsExternal = (moduleAndSpecifiers) => {
128
130
  };
129
131
 
130
132
  /**
131
- * @param {string | string[]} moduleAndSpecifiers the module request
133
+ * @param {RuntimeTemplate} runtimeTemplate the runtime template
134
+ * @returns {InitFragment<ChunkRenderContext>} code
135
+ */
136
+ const getExternalModuleNodeCommonjsInitFragment = (runtimeTemplate) => {
137
+ const importMetaName = runtimeTemplate.outputOptions.importMetaName;
138
+
139
+ return new InitFragment(
140
+ `import { createRequire as __WEBPACK_EXTERNAL_createRequire } from ${runtimeTemplate.renderNodePrefixForCoreModule(
141
+ "module"
142
+ )};\n${runtimeTemplate.renderConst()} __WEBPACK_EXTERNAL_createRequire_require = __WEBPACK_EXTERNAL_createRequire(${importMetaName}.url);\n`,
143
+ InitFragment.STAGE_HARMONY_IMPORTS,
144
+ 0,
145
+ "external module node-commonjs"
146
+ );
147
+ };
148
+
149
+ /**
150
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
132
151
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
133
152
  * @returns {SourceData} the generated source
134
153
  */
@@ -136,25 +155,13 @@ const getSourceForCommonJsExternalInNodeModule = (
136
155
  moduleAndSpecifiers,
137
156
  runtimeTemplate
138
157
  ) => {
139
- const importMetaName =
140
- /** @type {string} */
141
- (runtimeTemplate.outputOptions.importMetaName);
142
-
143
- // /** @type {boolean} */
144
- // (runtimeTemplate.supportNodePrefixForCoreModules())
145
-
146
158
  const chunkInitFragments = [
147
- new InitFragment(
148
- `import { createRequire as __WEBPACK_EXTERNAL_createRequire } from ${runtimeTemplate.renderNodePrefixForCoreModule("module")};\n`,
149
- InitFragment.STAGE_HARMONY_IMPORTS,
150
- 0,
151
- "external module node-commonjs"
152
- )
159
+ getExternalModuleNodeCommonjsInitFragment(runtimeTemplate)
153
160
  ];
154
161
  if (!Array.isArray(moduleAndSpecifiers)) {
155
162
  return {
156
163
  chunkInitFragments,
157
- expression: `__WEBPACK_EXTERNAL_createRequire(${importMetaName}.url)(${JSON.stringify(
164
+ expression: `__WEBPACK_EXTERNAL_createRequire_require(${JSON.stringify(
158
165
  moduleAndSpecifiers
159
166
  )})`
160
167
  };
@@ -162,14 +169,14 @@ const getSourceForCommonJsExternalInNodeModule = (
162
169
  const moduleName = moduleAndSpecifiers[0];
163
170
  return {
164
171
  chunkInitFragments,
165
- expression: `__WEBPACK_EXTERNAL_createRequire(${importMetaName}.url)(${JSON.stringify(
172
+ expression: `__WEBPACK_EXTERNAL_createRequire_require(${JSON.stringify(
166
173
  moduleName
167
174
  )})${propertyAccess(moduleAndSpecifiers, 1)}`
168
175
  };
169
176
  };
170
177
 
171
178
  /**
172
- * @param {string|string[]} moduleAndSpecifiers the module request
179
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
173
180
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
174
181
  * @param {ImportDependencyMeta=} dependencyMeta the dependency meta
175
182
  * @returns {SourceData} the generated source
@@ -263,7 +270,6 @@ class ModuleExternalInitFragment extends InitFragment {
263
270
  }
264
271
  }
265
272
 
266
- const identifier = `__WEBPACK_EXTERNAL_MODULE_${ident}__`;
267
273
  super(
268
274
  "",
269
275
  InitFragment.STAGE_HARMONY_IMPORTS,
@@ -273,8 +279,8 @@ class ModuleExternalInitFragment extends InitFragment {
273
279
  this._ident = ident;
274
280
  this._request = request;
275
281
  this._dependencyMeta = dependencyMeta;
276
- this._imported = imported;
277
- this._identifier = identifier;
282
+ this._identifier = this.buildIdentifier(ident);
283
+ this._imported = this.buildImported(imported);
278
284
  }
279
285
 
280
286
  /**
@@ -337,6 +343,28 @@ class ModuleExternalInitFragment extends InitFragment {
337
343
  getNamespaceIdentifier() {
338
344
  return this._identifier;
339
345
  }
346
+
347
+ /**
348
+ * @param {string} ident ident
349
+ * @returns {string} identifier
350
+ */
351
+ buildIdentifier(ident) {
352
+ return `__WEBPACK_EXTERNAL_MODULE_${ident}__`;
353
+ }
354
+
355
+ /**
356
+ * @param {Imported} imported imported
357
+ * @returns {Imported} normalized imported
358
+ */
359
+ buildImported(imported) {
360
+ if (Array.isArray(imported)) {
361
+ return imported.map(([name]) => {
362
+ const ident = `${this._ident}_${name}`;
363
+ return [name, this.buildIdentifier(ident)];
364
+ });
365
+ }
366
+ return imported;
367
+ }
340
368
  }
341
369
 
342
370
  register(
@@ -398,7 +426,7 @@ const generateModuleRemapping = (
398
426
  };
399
427
 
400
428
  /**
401
- * @param {string|string[]} moduleAndSpecifiers the module request
429
+ * @param {ModuleAndSpecifiers} moduleAndSpecifiers the module request
402
430
  * @param {ExportsInfo} exportsInfo exports info of this module
403
431
  * @param {RuntimeSpec} runtime the runtime
404
432
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
@@ -433,21 +461,7 @@ const getSourceForModuleExternal = (
433
461
  imported = [];
434
462
  break;
435
463
  default:
436
- imported = [];
437
- if (exportsInfo.isUsed(runtime) === false) {
438
- // no used, only
439
- }
440
- for (const [name] of usedExports.entries()) {
441
- let counter = 0;
442
- let finalName = name;
443
-
444
- if (concatenationScope) {
445
- while (!concatenationScope.registerUsedName(finalName)) {
446
- finalName = `${name}_${counter++}`;
447
- }
448
- }
449
- imported.push([name, finalName]);
450
- }
464
+ imported = [...usedExports.entries()];
451
465
  }
452
466
  }
453
467
 
@@ -458,7 +472,24 @@ const getSourceForModuleExternal = (
458
472
  dependencyMeta,
459
473
  runtimeTemplate.outputOptions.hashFunction
460
474
  );
461
- const specifiers = imported === true ? undefined : imported;
475
+ const normalizedImported = initFragment.getImported();
476
+ const specifiers =
477
+ normalizedImported === true
478
+ ? undefined
479
+ : /** @type {[string, string][]} */ (
480
+ normalizedImported.map(([name, rawFinalName]) => {
481
+ let finalName = rawFinalName;
482
+ let counter = 0;
483
+
484
+ if (concatenationScope) {
485
+ while (!concatenationScope.registerUsedName(finalName)) {
486
+ finalName = `${finalName}_${counter++}`;
487
+ }
488
+ }
489
+ return [name, finalName];
490
+ })
491
+ );
492
+
462
493
  const baseAccess = `${initFragment.getNamespaceIdentifier()}${propertyAccess(
463
494
  moduleAndSpecifiers,
464
495
  1
@@ -498,7 +529,7 @@ const getSourceForModuleExternal = (
498
529
  };
499
530
 
500
531
  /**
501
- * @param {string|string[]} urlAndGlobal the script request
532
+ * @param {string | string[]} urlAndGlobal the script request
502
533
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
503
534
  * @returns {SourceData} the generated source
504
535
  */
@@ -546,9 +577,9 @@ const checkExternalVariable = (variableName, request, runtimeTemplate) =>
546
577
  )} }\n`;
547
578
 
548
579
  /**
549
- * @param {string|number} id the module id
580
+ * @param {ModuleId | string} id the module id
550
581
  * @param {boolean} optional true, if the module is optional
551
- * @param {string|string[]} request the request path
582
+ * @param {string | string[]} request the request path
552
583
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
553
584
  * @returns {SourceData} the generated source
554
585
  */
@@ -575,7 +606,7 @@ const getSourceForAmdOrUmdExternal = (
575
606
 
576
607
  /**
577
608
  * @param {boolean} optional true, if the module is optional
578
- * @param {string|string[]} request the request path
609
+ * @param {string | string[]} request the request path
579
610
  * @param {RuntimeTemplate} runtimeTemplate the runtime template
580
611
  * @returns {SourceData} the generated source
581
612
  */
@@ -596,10 +627,11 @@ const getSourceForDefaultCase = (optional, request, runtimeTemplate) => {
596
627
  };
597
628
 
598
629
  /** @typedef {Record<string, string | string[]>} RequestRecord */
630
+ /** @typedef {string | string[] | RequestRecord} ExternalModuleRequest */
599
631
 
600
632
  class ExternalModule extends Module {
601
633
  /**
602
- * @param {string | string[] | RequestRecord} request request
634
+ * @param {ExternalModuleRequest} request request
603
635
  * @param {string} type type
604
636
  * @param {string} userRequest user request
605
637
  * @param {DependencyMeta=} dependencyMeta dependency meta
@@ -608,7 +640,7 @@ class ExternalModule extends Module {
608
640
  super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
609
641
 
610
642
  // Info from Factory
611
- /** @type {string | string[] | Record<string, string | string[]>} */
643
+ /** @type {ExternalModuleRequest} */
612
644
  this.request = request;
613
645
  /** @type {string} */
614
646
  this.externalType = type;
@@ -638,7 +670,7 @@ class ExternalModule extends Module {
638
670
 
639
671
  /**
640
672
  * @param {LibIdentOptions} options options
641
- * @returns {string | null} an identifier for library inclusion
673
+ * @returns {LibIdent | null} an identifier for library inclusion
642
674
  */
643
675
  libIdent(options) {
644
676
  return this.userRequest;
@@ -1020,9 +1052,7 @@ class ExternalModule extends Module {
1020
1052
  scope.registerRawExport(specifier, finalName);
1021
1053
  }
1022
1054
  } else if (concatenationScope) {
1023
- sourceString = `${
1024
- runtimeTemplate.supportsConst() ? "const" : "var"
1025
- } ${ConcatenationScope.NAMESPACE_OBJECT_EXPORT} = ${sourceString};`;
1055
+ sourceString = `${runtimeTemplate.renderConst()} ${ConcatenationScope.NAMESPACE_OBJECT_EXPORT} = ${sourceString};`;
1026
1056
  concatenationScope.registerNamespaceExport(
1027
1057
  ConcatenationScope.NAMESPACE_OBJECT_EXPORT
1028
1058
  );
@@ -1126,3 +1156,5 @@ makeSerializable(ExternalModule, "webpack/lib/ExternalModule");
1126
1156
 
1127
1157
  module.exports = ExternalModule;
1128
1158
  module.exports.ModuleExternalInitFragment = ModuleExternalInitFragment;
1159
+ module.exports.getExternalModuleNodeCommonjsInitFragment =
1160
+ getExternalModuleNodeCommonjsInitFragment;
@@ -14,16 +14,33 @@ const HarmonyImportDependency = require("./dependencies/HarmonyImportDependency"
14
14
  const ImportDependency = require("./dependencies/ImportDependency");
15
15
  const { cachedSetProperty, resolveByProperty } = require("./util/cleverMerge");
16
16
 
17
- /** @typedef {import("../declarations/WebpackOptions").ExternalItemFunctionData} ExternalItemFunctionData */
17
+ /** @typedef {import("enhanced-resolve").ResolveContext} ResolveContext */
18
+ /** @typedef {import("../declarations/WebpackOptions").ResolveOptions} ResolveOptions */
19
+ /** @typedef {import("../declarations/WebpackOptions").ExternalItemValue} ExternalItemValue */
18
20
  /** @typedef {import("../declarations/WebpackOptions").ExternalItemObjectKnown} ExternalItemObjectKnown */
19
21
  /** @typedef {import("../declarations/WebpackOptions").ExternalItemObjectUnknown} ExternalItemObjectUnknown */
20
22
  /** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
21
- /** @typedef {import("./Compilation").DepConstructor} DepConstructor */
22
23
  /** @typedef {import("./ExternalModule").DependencyMeta} DependencyMeta */
23
- /** @typedef {import("./Module")} Module */
24
24
  /** @typedef {import("./ModuleFactory").IssuerLayer} IssuerLayer */
25
+ /** @typedef {import("./ModuleFactory").ModuleFactoryCreateDataContextInfo} ModuleFactoryCreateDataContextInfo */
25
26
  /** @typedef {import("./NormalModuleFactory")} NormalModuleFactory */
26
27
 
28
+ /** @typedef {((context: string, request: string, callback: (err?: Error | null, result?: string | false, resolveRequest?: import('enhanced-resolve').ResolveRequest) => void) => void)} ExternalItemFunctionDataGetResolveCallbackResult */
29
+ /** @typedef {((context: string, request: string) => Promise<string>)} ExternalItemFunctionDataGetResolveResult */
30
+ /** @typedef {(options?: ResolveOptions) => ExternalItemFunctionDataGetResolveCallbackResult | ExternalItemFunctionDataGetResolveResult} ExternalItemFunctionDataGetResolve */
31
+
32
+ /**
33
+ * @typedef {object} ExternalItemFunctionData
34
+ * @property {string} context the directory in which the request is placed
35
+ * @property {ModuleFactoryCreateDataContextInfo} contextInfo contextual information
36
+ * @property {string} dependencyType the category of the referencing dependency
37
+ * @property {ExternalItemFunctionDataGetResolve} getResolve get a resolve function with the current resolver options
38
+ * @property {string} request the request as written by the user in the require/import expression/statement
39
+ */
40
+
41
+ /** @typedef {((data: ExternalItemFunctionData, callback: (err?: (Error | null), result?: ExternalItemValue) => void) => void)} ExternalItemFunctionCallback */
42
+ /** @typedef {((data: import("../lib/ExternalModuleFactoryPlugin").ExternalItemFunctionData) => Promise<ExternalItemValue>)} ExternalItemFunctionPromise */
43
+
27
44
  const UNSPECIFIED_EXTERNAL_TYPE_REGEXP = /^[a-z0-9-]+ /;
28
45
  const EMPTY_RESOLVE_OPTIONS = {};
29
46
 
@@ -79,7 +96,7 @@ const PLUGIN_NAME = "ExternalModuleFactoryPlugin";
79
96
 
80
97
  class ExternalModuleFactoryPlugin {
81
98
  /**
82
- * @param {string | undefined} type default external type
99
+ * @param {string} type default external type
83
100
  * @param {Externals} externals externals config
84
101
  */
85
102
  constructor(type, externals) {
@@ -140,7 +157,7 @@ class ExternalModuleFactoryPlugin {
140
157
  }
141
158
  }
142
159
 
143
- const resolvedType = /** @type {string} */ (type || globalType);
160
+ const resolvedType = type || globalType;
144
161
 
145
162
  // TODO make it pluggable/add hooks to `ExternalModule` to allow output modules own externals?
146
163
  /** @type {DependencyMeta | undefined} */
@@ -159,7 +176,7 @@ class ExternalModuleFactoryPlugin {
159
176
  : undefined;
160
177
 
161
178
  dependencyMeta = {
162
- attributes: dependency.assertions,
179
+ attributes: dependency.attributes,
163
180
  externalType
164
181
  };
165
182
  } else if (dependency instanceof CssImportDependency) {
@@ -265,6 +282,7 @@ class ExternalModuleFactoryPlugin {
265
282
  dependencyType,
266
283
  contextInfo,
267
284
  getResolve: (options) => (context, request, callback) => {
285
+ /** @type {ResolveContext} */
268
286
  const resolveContext = {
269
287
  fileDependencies: data.fileDependencies,
270
288
  missingDependencies: data.missingDependencies,
@@ -307,7 +325,9 @@ class ExternalModuleFactoryPlugin {
307
325
  },
308
326
  cb
309
327
  );
310
- if (promise && promise.then) promise.then((r) => cb(null, r), cb);
328
+ if (promise && promise.then) {
329
+ promise.then((r) => cb(null, r), cb);
330
+ }
311
331
  }
312
332
  return;
313
333
  } else if (typeof externals === "object") {
@@ -11,13 +11,13 @@ const ConcatenatedModule = require("./optimize/ConcatenatedModule");
11
11
 
12
12
  /** @typedef {import("../declarations/WebpackOptions").Externals} Externals */
13
13
  /** @typedef {import("./Compiler")} Compiler */
14
- /** @typedef {import("./optimize/ConcatenatedModule").ConcatenatedModuleInfo} ConcatenatedModuleInfo */
14
+ /** @typedef {import("./ExternalModule").Imported} Imported */
15
15
 
16
16
  const PLUGIN_NAME = "ExternalsPlugin";
17
17
 
18
18
  class ExternalsPlugin {
19
19
  /**
20
- * @param {string | undefined} type default external type
20
+ * @param {string} type default external type
21
21
  * @param {Externals} externals externals config
22
22
  */
23
23
  constructor(type, externals) {
@@ -41,20 +41,23 @@ class ExternalsPlugin {
41
41
  const { concatenatedModuleInfo } =
42
42
  ConcatenatedModule.getCompilationHooks(compilation);
43
43
  concatenatedModuleInfo.tap(PLUGIN_NAME, (updatedInfo, moduleInfo) => {
44
- const rawExportMap =
45
- /** @type {ConcatenatedModuleInfo} */ updatedInfo.rawExportMap;
44
+ const rawExportMap = updatedInfo.rawExportMap;
46
45
 
47
46
  if (!rawExportMap) {
48
47
  return;
49
48
  }
50
49
 
51
- const chunkInitFragments =
52
- /** @type {ConcatenatedModuleInfo} */ moduleInfo.chunkInitFragments;
53
- const moduleExternalInitFragments = chunkInitFragments
54
- ? chunkInitFragments.filter(
55
- (fragment) => fragment instanceof ModuleExternalInitFragment
56
- )
57
- : [];
50
+ const chunkInitFragments = moduleInfo.chunkInitFragments;
51
+ const moduleExternalInitFragments =
52
+ /** @type {ModuleExternalInitFragment[]} */
53
+ (
54
+ chunkInitFragments
55
+ ? /** @type {unknown[]} */
56
+ (chunkInitFragments).filter(
57
+ (fragment) => fragment instanceof ModuleExternalInitFragment
58
+ )
59
+ : []
60
+ );
58
61
 
59
62
  let initFragmentChanged = false;
60
63
 
@@ -62,12 +65,16 @@ class ExternalsPlugin {
62
65
  const imported = fragment.getImported();
63
66
 
64
67
  if (Array.isArray(imported)) {
65
- const newImported = imported.map(([specifier, finalName]) => [
66
- specifier,
67
- rawExportMap.has(specifier)
68
- ? rawExportMap.get(specifier)
69
- : finalName
70
- ]);
68
+ const newImported =
69
+ /** @type {Imported} */
70
+ (
71
+ imported.map(([specifier, finalName]) => [
72
+ specifier,
73
+ rawExportMap.has(specifier)
74
+ ? rawExportMap.get(specifier)
75
+ : finalName
76
+ ])
77
+ );
71
78
  fragment.setImported(newImported);
72
79
  initFragmentChanged = true;
73
80
  }