webpack 5.76.1 → 5.88.0

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 (436) 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 +4 -0
  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 +12 -8
  25. package/lib/ConcatenationScope.js +2 -2
  26. package/lib/ConditionalInitFragment.js +11 -1
  27. package/lib/ConstPlugin.js +79 -44
  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/DllEntryPlugin.js +16 -1
  38. package/lib/DllModule.js +17 -2
  39. package/lib/DllModuleFactory.js +1 -1
  40. package/lib/DllReferencePlugin.js +13 -1
  41. package/lib/Entrypoint.js +1 -1
  42. package/lib/ErrorHelpers.js +62 -22
  43. package/lib/EvalSourceMapDevToolPlugin.js +9 -2
  44. package/lib/ExportsInfo.js +20 -3
  45. package/lib/ExportsInfoApiPlugin.js +30 -14
  46. package/lib/ExternalModule.js +30 -9
  47. package/lib/FileSystemInfo.js +9 -1
  48. package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
  49. package/lib/FlagDependencyExportsPlugin.js +336 -348
  50. package/lib/FlagDependencyUsagePlugin.js +9 -9
  51. package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
  52. package/lib/HookWebpackError.js +1 -1
  53. package/lib/HotModuleReplacementPlugin.js +60 -46
  54. package/lib/IgnoreErrorModuleFactory.js +1 -1
  55. package/lib/InitFragment.js +28 -5
  56. package/lib/JavascriptMetaInfoPlugin.js +27 -15
  57. package/lib/LibManifestPlugin.js +22 -5
  58. package/lib/LoaderOptionsPlugin.js +12 -2
  59. package/lib/MainTemplate.js +2 -2
  60. package/lib/Module.js +44 -12
  61. package/lib/ModuleBuildError.js +9 -0
  62. package/lib/ModuleDependencyError.js +4 -2
  63. package/lib/ModuleDependencyWarning.js +4 -2
  64. package/lib/ModuleError.js +9 -0
  65. package/lib/ModuleFactory.js +1 -1
  66. package/lib/ModuleFilenameHelpers.js +114 -4
  67. package/lib/ModuleGraph.js +33 -23
  68. package/lib/ModuleGraphConnection.js +19 -6
  69. package/lib/ModuleInfoHeaderPlugin.js +9 -2
  70. package/lib/ModuleNotFoundError.js +5 -2
  71. package/lib/ModuleParseError.js +9 -0
  72. package/lib/ModuleProfile.js +1 -0
  73. package/lib/ModuleRestoreError.js +2 -0
  74. package/lib/ModuleStoreError.js +2 -1
  75. package/lib/ModuleTypeConstants.js +169 -0
  76. package/lib/ModuleWarning.js +9 -0
  77. package/lib/MultiWatching.js +4 -0
  78. package/lib/NodeStuffPlugin.js +65 -35
  79. package/lib/NormalModule.js +12 -2
  80. package/lib/NormalModuleFactory.js +56 -8
  81. package/lib/NormalModuleReplacementPlugin.js +5 -3
  82. package/lib/NullFactory.js +1 -1
  83. package/lib/PrefetchPlugin.js +4 -0
  84. package/lib/ProgressPlugin.js +71 -15
  85. package/lib/ProvidePlugin.js +30 -14
  86. package/lib/RawModule.js +13 -2
  87. package/lib/RecordIdsPlugin.js +4 -4
  88. package/lib/RequireJsStuffPlugin.js +22 -15
  89. package/lib/RuntimeGlobals.js +5 -0
  90. package/lib/RuntimeModule.js +12 -11
  91. package/lib/RuntimePlugin.js +10 -3
  92. package/lib/RuntimeTemplate.js +29 -11
  93. package/lib/SelfModuleFactory.js +12 -0
  94. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
  95. package/lib/SourceMapDevToolPlugin.js +47 -11
  96. package/lib/Template.js +5 -3
  97. package/lib/UseStrictPlugin.js +29 -11
  98. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  99. package/lib/WarnDeprecatedOptionPlugin.js +7 -0
  100. package/lib/WatchIgnorePlugin.js +4 -0
  101. package/lib/WebpackError.js +14 -5
  102. package/lib/WebpackIsIncludedPlugin.js +22 -13
  103. package/lib/WebpackOptionsApply.js +41 -44
  104. package/lib/WebpackOptionsDefaulter.js +10 -3
  105. package/lib/asset/AssetGenerator.js +24 -9
  106. package/lib/asset/AssetModulesPlugin.js +28 -12
  107. package/lib/asset/AssetParser.js +15 -7
  108. package/lib/asset/AssetSourceParser.js +8 -3
  109. package/lib/asset/RawDataUrlModule.js +15 -4
  110. package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
  111. package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
  112. package/lib/cache/IdleFileCachePlugin.js +2 -1
  113. package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
  114. package/lib/cache/PackFileCacheStrategy.js +42 -15
  115. package/lib/cache/ResolverCachePlugin.js +3 -0
  116. package/lib/config/browserslistTargetHandler.js +10 -10
  117. package/lib/config/defaults.js +306 -105
  118. package/lib/config/normalization.js +110 -71
  119. package/lib/config/target.js +37 -10
  120. package/lib/container/ContainerEntryModule.js +11 -1
  121. package/lib/container/ContainerEntryModuleFactory.js +1 -1
  122. package/lib/container/ContainerExposedDependency.js +9 -0
  123. package/lib/container/ContainerPlugin.js +3 -1
  124. package/lib/container/FallbackDependency.js +13 -0
  125. package/lib/container/FallbackItemDependency.js +3 -0
  126. package/lib/container/FallbackModule.js +12 -2
  127. package/lib/container/FallbackModuleFactory.js +1 -1
  128. package/lib/container/RemoteModule.js +11 -1
  129. package/lib/container/RemoteRuntimeModule.js +3 -2
  130. package/lib/container/RemoteToExternalDependency.js +3 -0
  131. package/lib/css/CssExportsGenerator.js +9 -0
  132. package/lib/css/CssGenerator.js +5 -1
  133. package/lib/css/CssLoadingRuntimeModule.js +53 -22
  134. package/lib/css/CssModulesPlugin.js +253 -74
  135. package/lib/css/CssParser.js +697 -282
  136. package/lib/css/walkCssTokens.js +269 -138
  137. package/lib/debug/ProfilingPlugin.js +33 -12
  138. package/lib/dependencies/AMDDefineDependency.js +54 -10
  139. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
  140. package/lib/dependencies/AMDPlugin.js +33 -20
  141. package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
  142. package/lib/dependencies/AMDRequireContextDependency.js +15 -0
  143. package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
  144. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
  145. package/lib/dependencies/AMDRequireDependency.js +16 -1
  146. package/lib/dependencies/AMDRequireItemDependency.js +6 -0
  147. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  148. package/lib/dependencies/CachedConstDependency.js +14 -0
  149. package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
  150. package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
  151. package/lib/dependencies/CommonJsExportsDependency.js +16 -0
  152. package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
  153. package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
  154. package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
  155. package/lib/dependencies/CommonJsPlugin.js +51 -26
  156. package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
  157. package/lib/dependencies/CommonJsRequireDependency.js +7 -0
  158. package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
  159. package/lib/dependencies/ConstDependency.js +11 -2
  160. package/lib/dependencies/ContextDependency.js +15 -2
  161. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  162. package/lib/dependencies/ContextElementDependency.js +8 -0
  163. package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
  164. package/lib/dependencies/CriticalDependencyWarning.js +3 -0
  165. package/lib/dependencies/CssExportDependency.js +8 -0
  166. package/lib/dependencies/CssImportDependency.js +55 -3
  167. package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
  168. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
  169. package/lib/dependencies/CssUrlDependency.js +46 -16
  170. package/lib/dependencies/DelegatedSourceDependency.js +3 -0
  171. package/lib/dependencies/DllEntryDependency.js +14 -0
  172. package/lib/dependencies/DynamicExports.js +10 -6
  173. package/lib/dependencies/ExportsInfoDependency.js +25 -4
  174. package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
  175. package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
  176. package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
  177. package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
  178. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
  179. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
  180. package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
  181. package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
  182. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
  183. package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
  184. package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
  185. package/lib/dependencies/HarmonyExports.js +11 -5
  186. package/lib/dependencies/HarmonyImportDependency.js +10 -1
  187. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
  188. package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
  189. package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
  190. package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
  191. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
  192. package/lib/dependencies/ImportContextDependency.js +15 -0
  193. package/lib/dependencies/ImportDependency.js +15 -4
  194. package/lib/dependencies/ImportEagerDependency.js +7 -4
  195. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
  196. package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
  197. package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
  198. package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
  199. package/lib/dependencies/ImportMetaPlugin.js +103 -51
  200. package/lib/dependencies/ImportParserPlugin.js +83 -25
  201. package/lib/dependencies/ImportPlugin.js +21 -7
  202. package/lib/dependencies/ImportWeakDependency.js +7 -4
  203. package/lib/dependencies/JsonExportsDependency.js +9 -1
  204. package/lib/dependencies/LocalModule.js +16 -0
  205. package/lib/dependencies/LocalModuleDependency.js +15 -0
  206. package/lib/dependencies/LocalModulesHelpers.js +18 -0
  207. package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
  208. package/lib/dependencies/ModuleDependency.js +9 -1
  209. package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
  210. package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
  211. package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
  212. package/lib/dependencies/PrefetchDependency.js +3 -0
  213. package/lib/dependencies/ProvidedDependency.js +14 -2
  214. package/lib/dependencies/PureExpressionDependency.js +10 -1
  215. package/lib/dependencies/RequireContextDependency.js +6 -0
  216. package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
  217. package/lib/dependencies/RequireContextPlugin.js +19 -6
  218. package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
  219. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
  220. package/lib/dependencies/RequireEnsureDependency.js +16 -2
  221. package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
  222. package/lib/dependencies/RequireEnsurePlugin.js +27 -7
  223. package/lib/dependencies/RequireHeaderDependency.js +14 -1
  224. package/lib/dependencies/RequireIncludeDependency.js +5 -0
  225. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
  226. package/lib/dependencies/RequireIncludePlugin.js +25 -5
  227. package/lib/dependencies/RequireResolveContextDependency.js +17 -0
  228. package/lib/dependencies/RequireResolveDependency.js +6 -0
  229. package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
  230. package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
  231. package/lib/dependencies/StaticExportsDependency.js +8 -0
  232. package/lib/dependencies/SystemPlugin.js +48 -21
  233. package/lib/dependencies/SystemRuntimeModule.js +1 -1
  234. package/lib/dependencies/URLDependency.js +13 -4
  235. package/lib/dependencies/URLPlugin.js +31 -18
  236. package/lib/dependencies/UnsupportedDependency.js +13 -0
  237. package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
  238. package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
  239. package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
  240. package/lib/dependencies/WorkerDependency.js +47 -3
  241. package/lib/dependencies/WorkerPlugin.js +105 -32
  242. package/lib/dependencies/getFunctionExpression.js +7 -0
  243. package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
  244. package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
  245. package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
  246. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
  247. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  248. package/lib/hmr/LazyCompilationPlugin.js +14 -5
  249. package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
  250. package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
  251. package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
  252. package/lib/ids/HashedModuleIdsPlugin.js +9 -2
  253. package/lib/ids/IdHelpers.js +6 -0
  254. package/lib/ids/NamedChunkIdsPlugin.js +13 -1
  255. package/lib/ids/NamedModuleIdsPlugin.js +14 -3
  256. package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
  257. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  258. package/lib/ids/SyncModuleIdsPlugin.js +3 -2
  259. package/lib/index.js +8 -0
  260. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  261. package/lib/javascript/BasicEvaluatedExpression.js +137 -11
  262. package/lib/javascript/ChunkHelpers.js +2 -2
  263. package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
  264. package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
  265. package/lib/javascript/JavascriptModulesPlugin.js +194 -194
  266. package/lib/javascript/JavascriptParser.js +941 -256
  267. package/lib/javascript/JavascriptParserHelpers.js +37 -15
  268. package/lib/javascript/StartupHelpers.js +2 -2
  269. package/lib/json/JsonData.js +26 -1
  270. package/lib/json/JsonGenerator.js +21 -7
  271. package/lib/json/JsonModulesPlugin.js +14 -5
  272. package/lib/json/JsonParser.js +27 -13
  273. package/lib/library/AbstractLibraryPlugin.js +4 -0
  274. package/lib/library/AmdLibraryPlugin.js +22 -6
  275. package/lib/library/AssignLibraryPlugin.js +6 -4
  276. package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
  277. package/lib/library/ModuleLibraryPlugin.js +8 -4
  278. package/lib/library/SystemLibraryPlugin.js +1 -0
  279. package/lib/library/UmdLibraryPlugin.js +4 -0
  280. package/lib/logging/runtime.js +1 -1
  281. package/lib/logging/truncateArgs.js +4 -0
  282. package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
  283. package/lib/node/NodeTargetPlugin.js +3 -0
  284. package/lib/node/NodeTemplatePlugin.js +10 -2
  285. package/lib/node/NodeWatchFileSystem.js +1 -1
  286. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
  287. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
  288. package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
  289. package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
  290. package/lib/node/nodeConsole.js +2 -4
  291. package/lib/optimize/AggressiveMergingPlugin.js +8 -0
  292. package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
  293. package/lib/optimize/ConcatenatedModule.js +8 -6
  294. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
  295. package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
  296. package/lib/optimize/InnerGraph.js +5 -5
  297. package/lib/optimize/InnerGraphPlugin.js +57 -48
  298. package/lib/optimize/LimitChunkCountPlugin.js +29 -4
  299. package/lib/optimize/MangleExportsPlugin.js +1 -1
  300. package/lib/optimize/MinMaxSizeWarning.js +5 -0
  301. package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
  302. package/lib/optimize/RealContentHashPlugin.js +86 -30
  303. package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
  304. package/lib/optimize/RuntimeChunkPlugin.js +9 -1
  305. package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
  306. package/lib/optimize/SplitChunksPlugin.js +71 -31
  307. package/lib/performance/SizeLimitsPlugin.js +7 -4
  308. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
  309. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
  310. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
  311. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
  312. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
  313. package/lib/rules/BasicEffectRulePlugin.js +4 -0
  314. package/lib/rules/BasicMatcherRulePlugin.js +5 -0
  315. package/lib/rules/RuleSetCompiler.js +3 -3
  316. package/lib/rules/UseEffectRulePlugin.js +6 -4
  317. package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
  318. package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
  319. package/lib/runtime/BaseUriRuntimeModule.js +8 -4
  320. package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
  321. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
  322. package/lib/runtime/CompatRuntimeModule.js +7 -2
  323. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
  324. package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
  325. package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
  326. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
  327. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
  328. package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
  329. package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
  330. package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
  331. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
  332. package/lib/runtime/GlobalRuntimeModule.js +1 -1
  333. package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
  334. package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
  335. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
  336. package/lib/runtime/NonceRuntimeModule.js +1 -1
  337. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
  338. package/lib/runtime/PublicPathRuntimeModule.js +9 -2
  339. package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
  340. package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
  341. package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
  342. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
  343. package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
  344. package/lib/runtime/SystemContextRuntimeModule.js +1 -1
  345. package/lib/schemes/DataUriPlugin.js +16 -3
  346. package/lib/schemes/HttpUriPlugin.js +38 -0
  347. package/lib/serialization/ArraySerializer.js +22 -6
  348. package/lib/serialization/BinaryMiddleware.js +164 -1
  349. package/lib/serialization/DateObjectSerializer.js +15 -4
  350. package/lib/serialization/ErrorObjectSerializer.js +23 -8
  351. package/lib/serialization/FileMiddleware.js +17 -0
  352. package/lib/serialization/MapObjectSerializer.js +24 -8
  353. package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
  354. package/lib/serialization/ObjectMiddleware.js +33 -2
  355. package/lib/serialization/PlainObjectSerializer.js +23 -12
  356. package/lib/serialization/RegExpObjectSerializer.js +16 -5
  357. package/lib/serialization/SetObjectSerializer.js +21 -6
  358. package/lib/serialization/types.js +1 -1
  359. package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
  360. package/lib/sharing/ConsumeSharedModule.js +13 -2
  361. package/lib/sharing/ConsumeSharedPlugin.js +4 -0
  362. package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
  363. package/lib/sharing/ProvideSharedDependency.js +17 -0
  364. package/lib/sharing/ProvideSharedModule.js +11 -1
  365. package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
  366. package/lib/sharing/ProvideSharedPlugin.js +22 -21
  367. package/lib/sharing/ShareRuntimeModule.js +19 -9
  368. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  369. package/lib/sharing/utils.js +320 -7
  370. package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
  371. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  372. package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
  373. package/lib/util/AsyncQueue.js +4 -2
  374. package/lib/util/LazySet.js +10 -2
  375. package/lib/util/MapHelpers.js +19 -5
  376. package/lib/util/ParallelismFactorCalculator.js +10 -0
  377. package/lib/util/Semaphore.js +1 -1
  378. package/lib/util/StackedCacheMap.js +6 -0
  379. package/lib/util/StringXor.js +51 -0
  380. package/lib/util/binarySearchBounds.js +49 -0
  381. package/lib/util/compileBooleanMatcher.js +31 -0
  382. package/lib/util/createHash.js +35 -13
  383. package/lib/util/deprecation.js +18 -3
  384. package/lib/util/deterministicGrouping.js +50 -11
  385. package/lib/util/findGraphRoots.js +4 -2
  386. package/lib/util/hash/md4.js +2 -2
  387. package/lib/util/hash/xxhash64.js +1 -1
  388. package/lib/util/identifier.js +4 -0
  389. package/lib/util/internalSerializables.js +1 -0
  390. package/lib/util/makeSerializable.js +7 -0
  391. package/lib/util/memoize.js +3 -3
  392. package/lib/util/numberHash.js +75 -21
  393. package/lib/util/processAsyncTree.js +7 -1
  394. package/lib/util/propertyAccess.js +9 -54
  395. package/lib/util/propertyName.js +79 -0
  396. package/lib/util/registerExternalSerializer.js +1 -1
  397. package/lib/util/runtime.js +14 -1
  398. package/lib/util/semver.js +1 -1
  399. package/lib/util/serialization.js +10 -0
  400. package/lib/util/smartGrouping.js +1 -1
  401. package/lib/validateSchema.js +6 -2
  402. package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
  403. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
  404. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
  405. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
  406. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
  407. package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
  408. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
  409. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
  410. package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
  411. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  412. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
  413. package/lib/wasm-sync/WebAssemblyParser.js +15 -4
  414. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  415. package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
  416. package/lib/web/FetchCompileWasmPlugin.js +59 -42
  417. package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
  418. package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
  419. package/lib/webpack.js +12 -3
  420. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
  421. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
  422. package/module.d.ts +55 -37
  423. package/package.json +59 -56
  424. package/schemas/WebpackOptions.check.js +1 -1
  425. package/schemas/WebpackOptions.json +132 -5
  426. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  427. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  428. package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
  429. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  430. package/schemas/plugins/container/ContainerPlugin.json +8 -0
  431. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  432. package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
  433. package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
  434. package/schemas/plugins/css/CssParserOptions.json +1 -1
  435. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  436. package/types.d.ts +1608 -667
@@ -9,20 +9,26 @@ const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
9
9
  const ConstDependency = require("../dependencies/ConstDependency");
10
10
  const BasicEvaluatedExpression = require("./BasicEvaluatedExpression");
11
11
 
12
- /** @typedef {import("estree").Expression} ExpressionNode */
12
+ /** @typedef {import("estree").Expression} Expression */
13
13
  /** @typedef {import("estree").Node} Node */
14
+ /** @typedef {import("estree").SourceLocation} SourceLocation */
14
15
  /** @typedef {import("./JavascriptParser")} JavascriptParser */
16
+ /** @typedef {import("./JavascriptParser").Range} Range */
15
17
 
16
18
  /**
17
19
  * @param {JavascriptParser} parser the parser
18
20
  * @param {string} value the const value
19
21
  * @param {string[]=} runtimeRequirements runtime requirements
20
- * @returns {function(ExpressionNode): true} plugin function
22
+ * @returns {function(Expression): true} plugin function
21
23
  */
22
24
  exports.toConstantDependency = (parser, value, runtimeRequirements) => {
23
25
  return function constDependency(expr) {
24
- const dep = new ConstDependency(value, expr.range, runtimeRequirements);
25
- dep.loc = expr.loc;
26
+ const dep = new ConstDependency(
27
+ value,
28
+ /** @type {Range} */ (expr.range),
29
+ runtimeRequirements
30
+ );
31
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
26
32
  parser.state.module.addPresentationalDependency(dep);
27
33
  return true;
28
34
  };
@@ -30,33 +36,37 @@ exports.toConstantDependency = (parser, value, runtimeRequirements) => {
30
36
 
31
37
  /**
32
38
  * @param {string} value the string value
33
- * @returns {function(ExpressionNode): BasicEvaluatedExpression} plugin function
39
+ * @returns {function(Expression): BasicEvaluatedExpression} plugin function
34
40
  */
35
41
  exports.evaluateToString = value => {
36
42
  return function stringExpression(expr) {
37
- return new BasicEvaluatedExpression().setString(value).setRange(expr.range);
43
+ return new BasicEvaluatedExpression()
44
+ .setString(value)
45
+ .setRange(/** @type {Range} */ (expr.range));
38
46
  };
39
47
  };
40
48
 
41
49
  /**
42
50
  * @param {number} value the number value
43
- * @returns {function(ExpressionNode): BasicEvaluatedExpression} plugin function
51
+ * @returns {function(Expression): BasicEvaluatedExpression} plugin function
44
52
  */
45
53
  exports.evaluateToNumber = value => {
46
54
  return function stringExpression(expr) {
47
- return new BasicEvaluatedExpression().setNumber(value).setRange(expr.range);
55
+ return new BasicEvaluatedExpression()
56
+ .setNumber(value)
57
+ .setRange(/** @type {Range} */ (expr.range));
48
58
  };
49
59
  };
50
60
 
51
61
  /**
52
62
  * @param {boolean} value the boolean value
53
- * @returns {function(ExpressionNode): BasicEvaluatedExpression} plugin function
63
+ * @returns {function(Expression): BasicEvaluatedExpression} plugin function
54
64
  */
55
65
  exports.evaluateToBoolean = value => {
56
66
  return function booleanExpression(expr) {
57
67
  return new BasicEvaluatedExpression()
58
68
  .setBoolean(value)
59
- .setRange(expr.range);
69
+ .setRange(/** @type {Range} */ (expr.range));
60
70
  };
61
71
  };
62
72
 
@@ -65,14 +75,14 @@ exports.evaluateToBoolean = value => {
65
75
  * @param {string} rootInfo rootInfo
66
76
  * @param {function(): string[]} getMembers getMembers
67
77
  * @param {boolean|null=} truthy is truthy, null if nullish
68
- * @returns {function(ExpressionNode): BasicEvaluatedExpression} callback
78
+ * @returns {function(Expression): BasicEvaluatedExpression} callback
69
79
  */
70
80
  exports.evaluateToIdentifier = (identifier, rootInfo, getMembers, truthy) => {
71
81
  return function identifierExpression(expr) {
72
82
  let evaluatedExpression = new BasicEvaluatedExpression()
73
83
  .setIdentifier(identifier, rootInfo, getMembers)
74
84
  .setSideEffects(false)
75
- .setRange(expr.range);
85
+ .setRange(/** @type {Range} */ (expr.range));
76
86
  switch (truthy) {
77
87
  case true:
78
88
  evaluatedExpression.setTruthy();
@@ -89,14 +99,26 @@ exports.evaluateToIdentifier = (identifier, rootInfo, getMembers, truthy) => {
89
99
  };
90
100
  };
91
101
 
102
+ /**
103
+ * @param {JavascriptParser} parser the parser
104
+ * @param {string} message the message
105
+ * @returns {function(Expression): boolean | undefined} callback to handle unsupported expression
106
+ */
92
107
  exports.expressionIsUnsupported = (parser, message) => {
93
108
  return function unsupportedExpression(expr) {
94
- const dep = new ConstDependency("(void 0)", expr.range, null);
95
- dep.loc = expr.loc;
109
+ const dep = new ConstDependency(
110
+ "(void 0)",
111
+ /** @type {Range} */ (expr.range),
112
+ null
113
+ );
114
+ dep.loc = /** @type {SourceLocation} */ (expr.loc);
96
115
  parser.state.module.addPresentationalDependency(dep);
97
116
  if (!parser.state.module) return;
98
117
  parser.state.module.addWarning(
99
- new UnsupportedFeatureWarning(message, expr.loc)
118
+ new UnsupportedFeatureWarning(
119
+ message,
120
+ /** @type {SourceLocation} */ (expr.loc)
121
+ )
100
122
  );
101
123
  return true;
102
124
  };
@@ -19,7 +19,7 @@ const { getAllChunks } = require("./ChunkHelpers");
19
19
  /** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
20
20
  /** @typedef {(string|number)[]} EntryItem */
21
21
 
22
- const EXPORT_PREFIX = "var __webpack_exports__ = ";
22
+ const EXPORT_PREFIX = `var ${RuntimeGlobals.exports} = `;
23
23
 
24
24
  /**
25
25
  * @param {ChunkGraph} chunkGraph chunkGraph
@@ -39,7 +39,7 @@ exports.generateEntryStartup = (
39
39
  /** @type {string[]} */
40
40
  const runtime = [
41
41
  `var __webpack_exec__ = ${runtimeTemplate.returningFunction(
42
- `__webpack_require__(${RuntimeGlobals.entryModuleId} = moduleId)`,
42
+ `${RuntimeGlobals.require}(${RuntimeGlobals.entryModuleId} = moduleId)`,
43
43
  "moduleId"
44
44
  )}`
45
45
  ];
@@ -7,9 +7,19 @@
7
7
 
8
8
  const { register } = require("../util/serialization");
9
9
 
10
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
11
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
12
+ /** @typedef {import("../util/Hash")} Hash */
13
+ /** @typedef {import("./JsonModulesPlugin").RawJsonData} RawJsonData */
14
+
10
15
  class JsonData {
16
+ /**
17
+ * @param {Buffer | RawJsonData} data JSON data
18
+ */
11
19
  constructor(data) {
20
+ /** @type {Buffer | undefined} */
12
21
  this._buffer = undefined;
22
+ /** @type {RawJsonData | undefined} */
13
23
  this._data = undefined;
14
24
  if (Buffer.isBuffer(data)) {
15
25
  this._buffer = data;
@@ -18,6 +28,9 @@ class JsonData {
18
28
  }
19
29
  }
20
30
 
31
+ /**
32
+ * @returns {RawJsonData|undefined} Raw JSON data
33
+ */
21
34
  get() {
22
35
  if (this._data === undefined && this._buffer !== undefined) {
23
36
  this._data = JSON.parse(this._buffer.toString());
@@ -25,22 +38,34 @@ class JsonData {
25
38
  return this._data;
26
39
  }
27
40
 
41
+ /**
42
+ * @param {Hash} hash hash to be updated
43
+ * @returns {void} the updated hash
44
+ */
28
45
  updateHash(hash) {
29
46
  if (this._buffer === undefined && this._data !== undefined) {
30
47
  this._buffer = Buffer.from(JSON.stringify(this._data));
31
48
  }
32
49
 
33
- if (this._buffer) return hash.update(this._buffer);
50
+ if (this._buffer) hash.update(this._buffer);
34
51
  }
35
52
  }
36
53
 
37
54
  register(JsonData, "webpack/lib/json/JsonData", null, {
55
+ /**
56
+ * @param {JsonData} obj JSONData object
57
+ * @param {ObjectSerializerContext} context context
58
+ */
38
59
  serialize(obj, { write }) {
39
60
  if (obj._buffer === undefined && obj._data !== undefined) {
40
61
  obj._buffer = Buffer.from(JSON.stringify(obj._data));
41
62
  }
42
63
  write(obj._buffer);
43
64
  },
65
+ /**
66
+ * @param {ObjectDeserializerContext} context context
67
+ * @returns {JsonData} deserialized JSON data
68
+ */
44
69
  deserialize({ read }) {
45
70
  return new JsonData(read());
46
71
  }
@@ -17,7 +17,13 @@ const RuntimeGlobals = require("../RuntimeGlobals");
17
17
  /** @typedef {import("../Module").ConcatenationBailoutReasonContext} ConcatenationBailoutReasonContext */
18
18
  /** @typedef {import("../NormalModule")} NormalModule */
19
19
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
20
+ /** @typedef {import("./JsonData")} JsonData */
21
+ /** @typedef {import("./JsonModulesPlugin").RawJsonData} RawJsonData */
20
22
 
23
+ /**
24
+ * @param {RawJsonData} data Raw JSON data
25
+ * @returns {undefined|string} stringified data
26
+ */
21
27
  const stringifySafe = data => {
22
28
  const stringified = JSON.stringify(data);
23
29
  if (!stringified) {
@@ -30,21 +36,23 @@ const stringifySafe = data => {
30
36
  };
31
37
 
32
38
  /**
33
- * @param {Object} data data (always an object or array)
39
+ * @param {RawJsonData} data Raw JSON data (always an object or array)
34
40
  * @param {ExportsInfo} exportsInfo exports info
35
41
  * @param {RuntimeSpec} runtime the runtime
36
- * @returns {Object} reduced data
42
+ * @returns {RawJsonData} reduced data
37
43
  */
38
44
  const createObjectForExportsInfo = (data, exportsInfo, runtime) => {
39
45
  if (exportsInfo.otherExportsInfo.getUsed(runtime) !== UsageState.Unused)
40
46
  return data;
41
47
  const isArray = Array.isArray(data);
48
+ /** @type {RawJsonData} */
42
49
  const reducedData = isArray ? [] : {};
43
50
  for (const key of Object.keys(data)) {
44
51
  const exportInfo = exportsInfo.getReadOnlyExportInfo(key);
45
52
  const used = exportInfo.getUsed(runtime);
46
53
  if (used === UsageState.Unused) continue;
47
54
 
55
+ /** @type {RawJsonData} */
48
56
  let value;
49
57
  if (used === UsageState.OnlyPropertiesUsed && exportInfo.exportsInfo) {
50
58
  value = createObjectForExportsInfo(
@@ -55,8 +63,9 @@ const createObjectForExportsInfo = (data, exportsInfo, runtime) => {
55
63
  } else {
56
64
  value = data[key];
57
65
  }
58
- const name = exportInfo.getUsedName(key, runtime);
59
- reducedData[name] = value;
66
+
67
+ const name = /** @type {string} */ (exportInfo.getUsedName(key, runtime));
68
+ /** @type {Record<string, RawJsonData>} */ (reducedData)[name] = value;
60
69
  }
61
70
  if (isArray) {
62
71
  let arrayLengthWhenUsed =
@@ -86,6 +95,7 @@ const createObjectForExportsInfo = (data, exportsInfo, runtime) => {
86
95
  : { length: arrayLengthWhenUsed },
87
96
  reducedData
88
97
  );
98
+ /** @type {number} */
89
99
  const generatedLength =
90
100
  arrayLengthWhenUsed !== undefined
91
101
  ? Math.max(arrayLengthWhenUsed, reducedData.length)
@@ -116,12 +126,13 @@ class JsonGenerator extends Generator {
116
126
  * @returns {number} estimate size of the module
117
127
  */
118
128
  getSize(module, type) {
119
- let data =
129
+ /** @type {RawJsonData | undefined} */
130
+ const data =
120
131
  module.buildInfo &&
121
132
  module.buildInfo.jsonData &&
122
133
  module.buildInfo.jsonData.get();
123
134
  if (!data) return 0;
124
- return stringifySafe(data).length + 10;
135
+ return /** @type {string} */ (stringifySafe(data)).length + 10;
125
136
  }
126
137
 
127
138
  /**
@@ -148,6 +159,7 @@ class JsonGenerator extends Generator {
148
159
  concatenationScope
149
160
  }
150
161
  ) {
162
+ /** @type {RawJsonData | undefined} */
151
163
  const data =
152
164
  module.buildInfo &&
153
165
  module.buildInfo.jsonData &&
@@ -160,6 +172,7 @@ class JsonGenerator extends Generator {
160
172
  );
161
173
  }
162
174
  const exportsInfo = moduleGraph.getExportsInfo(module);
175
+ /** @type {RawJsonData} */
163
176
  let finalJson =
164
177
  typeof data === "object" &&
165
178
  data &&
@@ -167,11 +180,12 @@ class JsonGenerator extends Generator {
167
180
  ? createObjectForExportsInfo(data, exportsInfo, runtime)
168
181
  : data;
169
182
  // Use JSON because JSON.parse() is much faster than JavaScript evaluation
170
- const jsonStr = stringifySafe(finalJson);
183
+ const jsonStr = /** @type {string} */ (stringifySafe(finalJson));
171
184
  const jsonExpr =
172
185
  jsonStr.length > 20 && typeof finalJson === "object"
173
186
  ? `JSON.parse('${jsonStr.replace(/[\\']/g, "\\$&")}')`
174
187
  : jsonStr;
188
+ /** @type {string} */
175
189
  let content;
176
190
  if (concatenationScope) {
177
191
  content = `${runtimeTemplate.supportsConst() ? "const" : "var"} ${
@@ -5,11 +5,13 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const { JSON_MODULE_TYPE } = require("../ModuleTypeConstants");
8
9
  const createSchemaValidation = require("../util/create-schema-validation");
9
10
  const JsonGenerator = require("./JsonGenerator");
10
11
  const JsonParser = require("./JsonParser");
11
12
 
12
13
  /** @typedef {import("../Compiler")} Compiler */
14
+ /** @typedef {Record<string, any>} RawJsonData */
13
15
 
14
16
  const validate = createSchemaValidation(
15
17
  require("../../schemas/plugins/JsonModulesPluginParser.check.js"),
@@ -20,26 +22,33 @@ const validate = createSchemaValidation(
20
22
  }
21
23
  );
22
24
 
25
+ const PLUGIN_NAME = "JsonModulesPlugin";
26
+
27
+ /**
28
+ * The JsonModulesPlugin is the entrypoint plugin for the json modules feature.
29
+ * It adds the json module type to the compiler and registers the json parser and generator.
30
+ */
23
31
  class JsonModulesPlugin {
24
32
  /**
25
33
  * Apply the plugin
26
34
  * @param {Compiler} compiler the compiler instance
27
35
  * @returns {void}
36
+ *
28
37
  */
29
38
  apply(compiler) {
30
39
  compiler.hooks.compilation.tap(
31
- "JsonModulesPlugin",
40
+ PLUGIN_NAME,
32
41
  (compilation, { normalModuleFactory }) => {
33
42
  normalModuleFactory.hooks.createParser
34
- .for("json")
35
- .tap("JsonModulesPlugin", parserOptions => {
43
+ .for(JSON_MODULE_TYPE)
44
+ .tap(PLUGIN_NAME, parserOptions => {
36
45
  validate(parserOptions);
37
46
 
38
47
  return new JsonParser(parserOptions);
39
48
  });
40
49
  normalModuleFactory.hooks.createGenerator
41
- .for("json")
42
- .tap("JsonModulesPlugin", () => {
50
+ .for(JSON_MODULE_TYPE)
51
+ .tap(PLUGIN_NAME, () => {
43
52
  return new JsonGenerator();
44
53
  });
45
54
  }
@@ -5,14 +5,19 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const parseJson = require("json-parse-even-better-errors");
9
8
  const Parser = require("../Parser");
10
9
  const JsonExportsDependency = require("../dependencies/JsonExportsDependency");
10
+ const memoize = require("../util/memoize");
11
11
  const JsonData = require("./JsonData");
12
12
 
13
13
  /** @typedef {import("../../declarations/plugins/JsonModulesPluginParser").JsonModulesPluginParserOptions} JsonModulesPluginParserOptions */
14
+ /** @typedef {import("../Module").BuildInfo} BuildInfo */
15
+ /** @typedef {import("../Module").BuildMeta} BuildMeta */
14
16
  /** @typedef {import("../Parser").ParserState} ParserState */
15
17
  /** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
18
+ /** @typedef {import("./JsonModulesPlugin").RawJsonData} RawJsonData */
19
+
20
+ const getParseJson = memoize(() => require("json-parse-even-better-errors"));
16
21
 
17
22
  class JsonParser extends Parser {
18
23
  /**
@@ -33,19 +38,28 @@ class JsonParser extends Parser {
33
38
  source = source.toString("utf-8");
34
39
  }
35
40
 
36
- /** @type {JsonModulesPluginParserOptions["parse"]} */
41
+ /** @type {NonNullable<JsonModulesPluginParserOptions["parse"]>} */
37
42
  const parseFn =
38
- typeof this.options.parse === "function" ? this.options.parse : parseJson;
39
-
40
- const data =
41
- typeof source === "object"
42
- ? source
43
- : parseFn(source[0] === "\ufeff" ? source.slice(1) : source);
44
- const jsonData = new JsonData(data);
45
- state.module.buildInfo.jsonData = jsonData;
46
- state.module.buildInfo.strict = true;
47
- state.module.buildMeta.exportsType = "default";
48
- state.module.buildMeta.defaultObject =
43
+ typeof this.options.parse === "function"
44
+ ? this.options.parse
45
+ : getParseJson();
46
+ /** @type {Buffer | RawJsonData | undefined} */
47
+ let data;
48
+ try {
49
+ data =
50
+ typeof source === "object"
51
+ ? source
52
+ : parseFn(source[0] === "\ufeff" ? source.slice(1) : source);
53
+ } catch (e) {
54
+ throw new Error(`Cannot parse JSON: ${/** @type {Error} */ (e).message}`);
55
+ }
56
+ const jsonData = new JsonData(/** @type {Buffer | RawJsonData} */ (data));
57
+ const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo);
58
+ buildInfo.jsonData = jsonData;
59
+ buildInfo.strict = true;
60
+ const buildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
61
+ buildMeta.exportsType = "default";
62
+ buildMeta.defaultObject =
49
63
  typeof data === "object" ? "redirect-warn" : false;
50
64
  state.module.addDependency(new JsonExportsDependency(jsonData));
51
65
  return state;
@@ -87,6 +87,10 @@ class AbstractLibraryPlugin {
87
87
  }
88
88
  );
89
89
 
90
+ /**
91
+ * @param {Chunk} chunk chunk
92
+ * @returns {TODO} options for the chunk
93
+ */
90
94
  const getOptionsForChunk = chunk => {
91
95
  if (compilation.chunkGraph.getNumberOfEntryModules(chunk) === 0)
92
96
  return false;
@@ -29,6 +29,7 @@ const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
29
29
  /**
30
30
  * @typedef {Object} AmdLibraryPluginParsed
31
31
  * @property {string} name
32
+ * @property {string} amdContainer
32
33
  */
33
34
 
34
35
  /**
@@ -52,7 +53,7 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
52
53
  * @returns {T | false} preprocess as needed by overriding
53
54
  */
54
55
  parseOptions(library) {
55
- const { name } = library;
56
+ const { name, amdContainer } = library;
56
57
  if (this.requireAsWrapper) {
57
58
  if (name) {
58
59
  throw new Error(
@@ -67,7 +68,8 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
67
68
  }
68
69
  }
69
70
  return {
70
- name: /** @type {string=} */ (name)
71
+ name: /** @type {string=} */ (name),
72
+ amdContainer: /** @type {string=} */ (amdContainer)
71
73
  };
72
74
  }
73
75
 
@@ -111,9 +113,14 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
111
113
  (iife || !chunk.hasRuntime() ? " return " : "\n");
112
114
  const fnEnd = iife ? ";\n}" : "\n}";
113
115
 
116
+ let amdContainerPrefix = "";
117
+ if (options.amdContainer) {
118
+ amdContainerPrefix = `${options.amdContainer}.`;
119
+ }
120
+
114
121
  if (this.requireAsWrapper) {
115
122
  return new ConcatSource(
116
- `require(${externalsDepsArray}, ${fnStart}`,
123
+ `${amdContainerPrefix}require(${externalsDepsArray}, ${fnStart}`,
117
124
  source,
118
125
  `${fnEnd});`
119
126
  );
@@ -123,18 +130,24 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
123
130
  });
124
131
 
125
132
  return new ConcatSource(
126
- `define(${JSON.stringify(name)}, ${externalsDepsArray}, ${fnStart}`,
133
+ `${amdContainerPrefix}define(${JSON.stringify(
134
+ name
135
+ )}, ${externalsDepsArray}, ${fnStart}`,
127
136
  source,
128
137
  `${fnEnd});`
129
138
  );
130
139
  } else if (externalsArguments) {
131
140
  return new ConcatSource(
132
- `define(${externalsDepsArray}, ${fnStart}`,
141
+ `${amdContainerPrefix}define(${externalsDepsArray}, ${fnStart}`,
133
142
  source,
134
143
  `${fnEnd});`
135
144
  );
136
145
  } else {
137
- return new ConcatSource(`define(${fnStart}`, source, `${fnEnd});`);
146
+ return new ConcatSource(
147
+ `${amdContainerPrefix}define(${fnStart}`,
148
+ source,
149
+ `${fnEnd});`
150
+ );
138
151
  }
139
152
  }
140
153
 
@@ -155,6 +168,9 @@ class AmdLibraryPlugin extends AbstractLibraryPlugin {
155
168
  chunk
156
169
  });
157
170
  hash.update(name);
171
+ } else if (options.amdContainer) {
172
+ hash.update("amdContainer");
173
+ hash.update(options.amdContainer);
158
174
  }
159
175
  }
160
176
  }
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { ConcatSource } = require("webpack-sources");
9
9
  const { UsageState } = require("../ExportsInfo");
10
+ const RuntimeGlobals = require("../RuntimeGlobals");
10
11
  const Template = require("../Template");
11
12
  const propertyAccess = require("../util/propertyAccess");
12
13
  const { getEntryRuntime } = require("../util/runtime");
@@ -296,7 +297,7 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
296
297
  if (!exportInfo.provided) continue;
297
298
  const nameAccess = propertyAccess([exportInfo.name]);
298
299
  result.add(
299
- `${exportTarget}${nameAccess} = __webpack_exports__${exportAccess}${nameAccess};\n`
300
+ `${exportTarget}${nameAccess} = ${RuntimeGlobals.exports}${exportAccess}${nameAccess};\n`
300
301
  );
301
302
  }
302
303
  result.add(
@@ -310,10 +311,11 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
310
311
  true
311
312
  )};\n`
312
313
  );
313
- let exports = "__webpack_exports__";
314
+ /** @type {String} */
315
+ let exports = RuntimeGlobals.exports;
314
316
  if (exportAccess) {
315
317
  result.add(
316
- `var __webpack_exports_export__ = __webpack_exports__${exportAccess};\n`
318
+ `var __webpack_exports_export__ = ${RuntimeGlobals.exports}${exportAccess};\n`
317
319
  );
318
320
  exports = "__webpack_exports_export__";
319
321
  }
@@ -329,7 +331,7 @@ class AssignLibraryPlugin extends AbstractLibraryPlugin {
329
331
  fullNameResolved,
330
332
  this._getPrefix(compilation).length,
331
333
  false
332
- )} = __webpack_exports__${exportAccess};\n`
334
+ )} = ${RuntimeGlobals.exports}${exportAccess};\n`
333
335
  );
334
336
  }
335
337
  return result;
@@ -7,6 +7,7 @@
7
7
 
8
8
  const { ConcatSource } = require("webpack-sources");
9
9
  const { UsageState } = require("../ExportsInfo");
10
+ const RuntimeGlobals = require("../RuntimeGlobals");
10
11
  const propertyAccess = require("../util/propertyAccess");
11
12
  const { getEntryRuntime } = require("../util/runtime");
12
13
  const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
@@ -103,7 +104,9 @@ class ExportPropertyLibraryPlugin extends AbstractLibraryPlugin {
103
104
  */
104
105
  renderStartup(source, module, renderContext, { options }) {
105
106
  if (!options.export) return source;
106
- const postfix = `__webpack_exports__ = __webpack_exports__${propertyAccess(
107
+ const postfix = `${RuntimeGlobals.exports} = ${
108
+ RuntimeGlobals.exports
109
+ }${propertyAccess(
107
110
  Array.isArray(options.export) ? options.export : [options.export]
108
111
  )};\n`;
109
112
  return new ConcatSource(source, postfix);
@@ -6,6 +6,7 @@
6
6
  "use strict";
7
7
 
8
8
  const { ConcatSource } = require("webpack-sources");
9
+ const RuntimeGlobals = require("../RuntimeGlobals");
9
10
  const Template = require("../Template");
10
11
  const propertyAccess = require("../util/propertyAccess");
11
12
  const AbstractLibraryPlugin = require("./AbstractLibraryPlugin");
@@ -80,16 +81,19 @@ class ModuleLibraryPlugin extends AbstractLibraryPlugin {
80
81
  const exports = [];
81
82
  const isAsync = moduleGraph.isAsync(module);
82
83
  if (isAsync) {
83
- result.add(`__webpack_exports__ = await __webpack_exports__;\n`);
84
+ result.add(
85
+ `${RuntimeGlobals.exports} = await ${RuntimeGlobals.exports};\n`
86
+ );
84
87
  }
85
88
  for (const exportInfo of exportsInfo.orderedExports) {
86
89
  if (!exportInfo.provided) continue;
87
- const varName = `__webpack_exports__${Template.toIdentifier(
90
+ const varName = `${RuntimeGlobals.exports}${Template.toIdentifier(
88
91
  exportInfo.name
89
92
  )}`;
90
93
  result.add(
91
- `var ${varName} = __webpack_exports__${propertyAccess([
92
- exportInfo.getUsedName(exportInfo.name, chunk.runtime)
94
+ `var ${varName} = ${RuntimeGlobals.exports}${propertyAccess([
95
+ /** @type {string} */
96
+ (exportInfo.getUsedName(exportInfo.name, chunk.runtime))
93
97
  ])};\n`
94
98
  );
95
99
  exports.push(`${varName} as ${exportInfo.name}`);
@@ -106,6 +106,7 @@ class SystemLibraryPlugin extends AbstractLibraryPlugin {
106
106
  .join("\n");
107
107
 
108
108
  // Define __esModule flag on all internal variables and helpers
109
+ /** @type {string[]} */
109
110
  const externalVarInitialization = [];
110
111
 
111
112
  // The system.register format requires an array of setter functions for externals.
@@ -208,6 +208,10 @@ class UmdLibraryPlugin extends AbstractLibraryPlugin {
208
208
  );
209
209
  };
210
210
 
211
+ /**
212
+ * @param {ExternalModule[]} modules external modules
213
+ * @returns {string} arguments
214
+ */
211
215
  const externalsArguments = modules => {
212
216
  return modules
213
217
  .map(
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const SyncBailHook = require("tapable/lib/SyncBailHook");
8
+ const { SyncBailHook } = require("tapable");
9
9
  const { Logger } = require("./Logger");
10
10
  const createConsoleLogger = require("./createConsoleLogger");
11
11
 
@@ -5,6 +5,10 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ /**
9
+ * @param {Array<number>} array array of numbers
10
+ * @returns {number} sum of all numbers in array
11
+ */
8
12
  const arraySum = array => {
9
13
  let sum = 0;
10
14
  for (const item of array) sum += item;