webpack 5.100.1 → 5.101.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.
Files changed (304) hide show
  1. package/README.md +12 -10
  2. package/bin/webpack.js +7 -7
  3. package/lib/APIPlugin.js +12 -14
  4. package/lib/AutomaticPrefetchPlugin.js +2 -2
  5. package/lib/BannerPlugin.js +4 -4
  6. package/lib/Cache.js +1 -1
  7. package/lib/CacheFacade.js +7 -7
  8. package/lib/CaseSensitiveModulesWarning.js +2 -2
  9. package/lib/Chunk.js +3 -3
  10. package/lib/ChunkGraph.js +21 -18
  11. package/lib/ChunkGroup.js +4 -4
  12. package/lib/CleanPlugin.js +19 -53
  13. package/lib/CodeGenerationResults.js +3 -3
  14. package/lib/CompatibilityPlugin.js +6 -6
  15. package/lib/Compilation.js +127 -114
  16. package/lib/Compiler.js +37 -37
  17. package/lib/ConcatenationScope.js +39 -1
  18. package/lib/ConstPlugin.js +11 -11
  19. package/lib/ContextExclusionPlugin.js +3 -3
  20. package/lib/ContextModule.js +12 -11
  21. package/lib/ContextModuleFactory.js +11 -11
  22. package/lib/ContextReplacementPlugin.js +5 -5
  23. package/lib/DefinePlugin.js +24 -22
  24. package/lib/DelegatedModuleFactoryPlugin.js +1 -1
  25. package/lib/DllEntryPlugin.js +1 -1
  26. package/lib/DllReferencePlugin.js +1 -1
  27. package/lib/DynamicEntryPlugin.js +3 -3
  28. package/lib/EntryPlugin.js +1 -1
  29. package/lib/EnvironmentPlugin.js +1 -1
  30. package/lib/ErrorHelpers.js +2 -2
  31. package/lib/EvalDevToolModulePlugin.js +2 -2
  32. package/lib/EvalSourceMapDevToolPlugin.js +5 -5
  33. package/lib/ExportsInfo.js +9 -9
  34. package/lib/ExportsInfoApiPlugin.js +2 -2
  35. package/lib/ExternalModule.js +163 -48
  36. package/lib/ExternalModuleFactoryPlugin.js +2 -2
  37. package/lib/ExternalsPlugin.js +45 -0
  38. package/lib/FileSystemInfo.js +64 -61
  39. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  40. package/lib/FlagDependencyExportsPlugin.js +7 -7
  41. package/lib/FlagDependencyUsagePlugin.js +4 -4
  42. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  43. package/lib/HotModuleReplacementPlugin.js +27 -27
  44. package/lib/IgnorePlugin.js +3 -3
  45. package/lib/IgnoreWarningsPlugin.js +4 -4
  46. package/lib/InitFragment.js +6 -0
  47. package/lib/InvalidDependenciesModuleWarning.js +1 -1
  48. package/lib/JavascriptMetaInfoPlugin.js +1 -1
  49. package/lib/LibManifestPlugin.js +2 -2
  50. package/lib/LoaderOptionsPlugin.js +1 -1
  51. package/lib/LoaderTargetPlugin.js +2 -2
  52. package/lib/MainTemplate.js +1 -1
  53. package/lib/Module.js +1 -1
  54. package/lib/ModuleFilenameHelpers.js +3 -3
  55. package/lib/ModuleGraph.js +86 -5
  56. package/lib/ModuleInfoHeaderPlugin.js +3 -3
  57. package/lib/ModuleParseError.js +5 -3
  58. package/lib/MultiCompiler.js +29 -24
  59. package/lib/MultiStats.js +18 -13
  60. package/lib/MultiWatching.js +1 -1
  61. package/lib/NoEmitOnErrorsPlugin.js +2 -2
  62. package/lib/NodeStuffPlugin.js +27 -15
  63. package/lib/NormalModule.js +28 -24
  64. package/lib/NormalModuleFactory.js +23 -21
  65. package/lib/NormalModuleReplacementPlugin.js +3 -3
  66. package/lib/PrefetchPlugin.js +1 -1
  67. package/lib/ProgressPlugin.js +11 -11
  68. package/lib/ProvidePlugin.js +2 -2
  69. package/lib/RecordIdsPlugin.js +3 -3
  70. package/lib/ResolverFactory.js +3 -3
  71. package/lib/RuntimeGlobals.js +20 -0
  72. package/lib/RuntimePlugin.js +16 -16
  73. package/lib/RuntimeTemplate.js +42 -44
  74. package/lib/SizeFormatHelpers.js +1 -1
  75. package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -4
  76. package/lib/SourceMapDevToolPlugin.js +9 -9
  77. package/lib/Stats.js +2 -2
  78. package/lib/Template.js +1 -1
  79. package/lib/TemplatedPathPlugin.js +2 -2
  80. package/lib/UseStrictPlugin.js +1 -1
  81. package/lib/WarnCaseSensitiveModulesPlugin.js +1 -1
  82. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  83. package/lib/WarnNoModeSetPlugin.js +1 -1
  84. package/lib/WatchIgnorePlugin.js +2 -2
  85. package/lib/Watching.js +12 -12
  86. package/lib/WebpackIsIncludedPlugin.js +2 -2
  87. package/lib/WebpackOptionsApply.js +10 -3
  88. package/lib/asset/AssetGenerator.js +3 -3
  89. package/lib/asset/AssetModulesPlugin.js +6 -6
  90. package/lib/async-modules/AsyncModuleHelpers.js +50 -0
  91. package/lib/async-modules/AwaitDependenciesInitFragment.js +36 -24
  92. package/lib/async-modules/InferAsyncModulesPlugin.js +3 -3
  93. package/lib/buildChunkGraph.js +5 -5
  94. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  95. package/lib/cache/IdleFileCachePlugin.js +5 -5
  96. package/lib/cache/PackFileCacheStrategy.js +20 -20
  97. package/lib/cache/ResolverCachePlugin.js +4 -4
  98. package/lib/cli.js +196 -14
  99. package/lib/config/browserslistTargetHandler.js +6 -6
  100. package/lib/config/defaults.js +23 -14
  101. package/lib/config/normalization.js +41 -38
  102. package/lib/config/target.js +4 -4
  103. package/lib/container/ContainerEntryModule.js +3 -3
  104. package/lib/container/ContainerPlugin.js +3 -3
  105. package/lib/container/ContainerReferencePlugin.js +3 -3
  106. package/lib/container/FallbackModule.js +1 -1
  107. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  108. package/lib/container/options.js +4 -4
  109. package/lib/css/CssGenerator.js +5 -3
  110. package/lib/css/CssLoadingRuntimeModule.js +1 -1
  111. package/lib/css/CssModulesPlugin.js +25 -22
  112. package/lib/css/CssParser.js +5 -5
  113. package/lib/css/walkCssTokens.js +9 -9
  114. package/lib/debug/ProfilingPlugin.js +5 -5
  115. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +4 -4
  116. package/lib/dependencies/AMDPlugin.js +3 -3
  117. package/lib/dependencies/AMDRequireArrayDependency.js +1 -1
  118. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +3 -3
  119. package/lib/dependencies/CommonJsExportRequireDependency.js +2 -2
  120. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -10
  121. package/lib/dependencies/CommonJsImportsParserPlugin.js +21 -19
  122. package/lib/dependencies/CommonJsPlugin.js +2 -2
  123. package/lib/dependencies/ContextDependency.js +1 -1
  124. package/lib/dependencies/ContextDependencyHelpers.js +3 -3
  125. package/lib/dependencies/CssIcssExportDependency.js +2 -2
  126. package/lib/dependencies/CssLocalIdentifierDependency.js +2 -2
  127. package/lib/dependencies/CssUrlDependency.js +4 -4
  128. package/lib/dependencies/DynamicExports.js +5 -5
  129. package/lib/dependencies/HarmonyAcceptDependency.js +39 -5
  130. package/lib/dependencies/HarmonyDetectionParserPlugin.js +2 -2
  131. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +17 -23
  132. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +7 -8
  133. package/lib/dependencies/HarmonyExportInitFragment.js +1 -1
  134. package/lib/dependencies/HarmonyExports.js +1 -1
  135. package/lib/dependencies/HarmonyImportDependency.js +28 -9
  136. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +59 -75
  137. package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -5
  138. package/lib/dependencies/HarmonyImportSpecifierDependency.js +3 -4
  139. package/lib/dependencies/HarmonyModulesPlugin.js +2 -8
  140. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -1
  141. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +4 -4
  142. package/lib/dependencies/ImportMetaPlugin.js +7 -7
  143. package/lib/dependencies/ImportParserPlugin.js +4 -4
  144. package/lib/dependencies/JsonExportsDependency.js +1 -1
  145. package/lib/dependencies/LoaderPlugin.js +4 -4
  146. package/lib/dependencies/ProvidedDependency.js +2 -2
  147. package/lib/dependencies/PureExpressionDependency.js +1 -1
  148. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  149. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +1 -1
  150. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +3 -3
  151. package/lib/dependencies/SystemPlugin.js +3 -3
  152. package/lib/dependencies/WorkerPlugin.js +5 -5
  153. package/lib/dependencies/getFunctionExpression.js +1 -1
  154. package/lib/esm/ModuleChunkFormatPlugin.js +5 -5
  155. package/lib/esm/ModuleChunkLoadingPlugin.js +2 -2
  156. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +15 -11
  157. package/lib/formatLocation.js +2 -2
  158. package/lib/hmr/HotModuleReplacement.runtime.js +39 -27
  159. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -32
  160. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -1
  161. package/lib/hmr/LazyCompilationPlugin.js +6 -6
  162. package/lib/hmr/lazyCompilationBackend.js +6 -6
  163. package/lib/ids/ChunkModuleIdRangePlugin.js +4 -4
  164. package/lib/ids/DeterministicChunkIdsPlugin.js +5 -4
  165. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  166. package/lib/ids/HashedModuleIdsPlugin.js +1 -1
  167. package/lib/ids/IdHelpers.js +9 -9
  168. package/lib/ids/NamedChunkIdsPlugin.js +5 -5
  169. package/lib/ids/NamedModuleIdsPlugin.js +2 -2
  170. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  171. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  172. package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -2
  173. package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -4
  174. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  175. package/lib/index.js +10 -6
  176. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +1 -1
  177. package/lib/javascript/BasicEvaluatedExpression.js +3 -3
  178. package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
  179. package/lib/javascript/EnableChunkLoadingPlugin.js +1 -1
  180. package/lib/javascript/JavascriptGenerator.js +1 -1
  181. package/lib/javascript/JavascriptModulesPlugin.js +16 -16
  182. package/lib/javascript/JavascriptParser.js +90 -83
  183. package/lib/javascript/JavascriptParserHelpers.js +3 -3
  184. package/lib/javascript/StartupHelpers.js +2 -2
  185. package/lib/json/JsonGenerator.js +2 -2
  186. package/lib/json/JsonModulesPlugin.js +2 -2
  187. package/lib/library/AbstractLibraryPlugin.js +3 -3
  188. package/lib/library/AmdLibraryPlugin.js +3 -3
  189. package/lib/library/AssignLibraryPlugin.js +2 -2
  190. package/lib/library/EnableLibraryPlugin.js +2 -2
  191. package/lib/library/ModuleLibraryPlugin.js +7 -2
  192. package/lib/library/SystemLibraryPlugin.js +6 -4
  193. package/lib/library/UmdLibraryPlugin.js +14 -14
  194. package/lib/logging/createConsoleLogger.js +4 -4
  195. package/lib/logging/runtime.js +3 -3
  196. package/lib/logging/truncateArgs.js +4 -4
  197. package/lib/node/CommonJsChunkLoadingPlugin.js +2 -2
  198. package/lib/node/NodeEnvironmentPlugin.js +1 -1
  199. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +16 -14
  200. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +7 -7
  201. package/lib/node/ReadFileCompileWasmPlugin.js +7 -7
  202. package/lib/node/RequireChunkLoadingRuntimeModule.js +6 -4
  203. package/lib/node/nodeConsole.js +2 -2
  204. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  205. package/lib/optimize/AggressiveSplittingPlugin.js +10 -10
  206. package/lib/optimize/ConcatenatedModule.js +161 -52
  207. package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -2
  208. package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
  209. package/lib/optimize/InnerGraph.js +5 -5
  210. package/lib/optimize/InnerGraphPlugin.js +14 -12
  211. package/lib/optimize/LimitChunkCountPlugin.js +5 -5
  212. package/lib/optimize/MangleExportsPlugin.js +5 -5
  213. package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -2
  214. package/lib/optimize/MinChunkSizePlugin.js +3 -3
  215. package/lib/optimize/ModuleConcatenationPlugin.js +45 -38
  216. package/lib/optimize/RealContentHashPlugin.js +23 -23
  217. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  218. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  219. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  220. package/lib/optimize/SideEffectsFlagPlugin.js +22 -6
  221. package/lib/optimize/SplitChunksPlugin.js +20 -20
  222. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  223. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  224. package/lib/performance/SizeLimitsPlugin.js +4 -4
  225. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -1
  226. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -3
  227. package/lib/rules/BasicMatcherRulePlugin.js +1 -1
  228. package/lib/rules/RuleSetCompiler.js +10 -10
  229. package/lib/rules/UseEffectRulePlugin.js +2 -2
  230. package/lib/runtime/GetChunkFilenameRuntimeModule.js +15 -15
  231. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  232. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  233. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +1 -1
  234. package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
  235. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  236. package/lib/schemes/DataUriPlugin.js +3 -3
  237. package/lib/schemes/FileUriPlugin.js +1 -1
  238. package/lib/schemes/HttpUriPlugin.js +40 -36
  239. package/lib/schemes/VirtualUrlPlugin.js +1 -1
  240. package/lib/serialization/BinaryMiddleware.js +11 -11
  241. package/lib/serialization/FileMiddleware.js +17 -17
  242. package/lib/serialization/ObjectMiddleware.js +8 -8
  243. package/lib/serialization/Serializer.js +2 -2
  244. package/lib/serialization/SerializerMiddleware.js +2 -2
  245. package/lib/sharing/ConsumeSharedPlugin.js +4 -4
  246. package/lib/sharing/ProvideSharedPlugin.js +4 -4
  247. package/lib/sharing/SharePlugin.js +1 -1
  248. package/lib/sharing/resolveMatchedConfigs.js +1 -1
  249. package/lib/stats/DefaultStatsFactoryPlugin.js +86 -80
  250. package/lib/stats/DefaultStatsPresetPlugin.js +15 -15
  251. package/lib/stats/DefaultStatsPrinterPlugin.js +87 -87
  252. package/lib/stats/StatsFactory.js +7 -7
  253. package/lib/stats/StatsPrinter.js +9 -9
  254. package/lib/url/URLParserPlugin.js +5 -5
  255. package/lib/util/AsyncQueue.js +4 -4
  256. package/lib/util/IterableHelpers.js +2 -2
  257. package/lib/util/LazyBucketSortedSet.js +3 -3
  258. package/lib/util/SetHelpers.js +2 -2
  259. package/lib/util/StackedCacheMap.js +1 -1
  260. package/lib/util/StackedMap.js +1 -1
  261. package/lib/util/TupleSet.js +1 -1
  262. package/lib/util/WeakTupleMap.js +1 -1
  263. package/lib/util/cleverMerge.js +8 -8
  264. package/lib/util/comparators.js +107 -8
  265. package/lib/util/compileBooleanMatcher.js +20 -20
  266. package/lib/util/concatenate.js +3 -3
  267. package/lib/util/conventions.js +4 -4
  268. package/lib/util/create-schema-validation.js +1 -1
  269. package/lib/util/createHash.js +1 -1
  270. package/lib/util/deprecation.js +4 -4
  271. package/lib/util/deterministicGrouping.js +7 -7
  272. package/lib/util/findGraphRoots.js +1 -1
  273. package/lib/util/fs.js +3 -3
  274. package/lib/util/identifier.js +14 -14
  275. package/lib/util/magicComment.js +5 -1
  276. package/lib/util/memoize.js +1 -1
  277. package/lib/util/processAsyncTree.js +2 -2
  278. package/lib/util/propertyName.js +1 -1
  279. package/lib/util/removeBOM.js +1 -1
  280. package/lib/util/runtime.js +6 -6
  281. package/lib/util/semver.js +16 -16
  282. package/lib/util/serialization.js +5 -5
  283. package/lib/util/smartGrouping.js +1 -1
  284. package/lib/validateSchema.js +2 -2
  285. package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
  286. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +1 -1
  287. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +1 -1
  288. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +4 -4
  289. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +13 -9
  290. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -2
  291. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -14
  292. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -2
  293. package/lib/wasm-sync/WebAssemblyParser.js +2 -2
  294. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  295. package/lib/web/FetchCompileWasmPlugin.js +4 -4
  296. package/lib/web/JsonpChunkLoadingPlugin.js +2 -2
  297. package/lib/web/JsonpChunkLoadingRuntimeModule.js +1 -1
  298. package/lib/webpack.js +17 -12
  299. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +2 -2
  300. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  301. package/package.json +13 -13
  302. package/schemas/WebpackOptions.check.js +1 -1
  303. package/schemas/WebpackOptions.json +4 -0
  304. package/types.d.ts +186 -54
@@ -123,7 +123,7 @@ class HotModuleReplacementPlugin {
123
123
  const { hotAcceptCallback, hotAcceptWithoutCallback } =
124
124
  HotModuleReplacementPlugin.getParserHooks(parser);
125
125
 
126
- return expr => {
126
+ return (expr) => {
127
127
  const module = parser.state.module;
128
128
  const dep = new ConstDependency(
129
129
  `${module.moduleArgument}.hot.accept`,
@@ -145,7 +145,7 @@ class HotModuleReplacementPlugin {
145
145
  } else if (arg.isArray()) {
146
146
  params =
147
147
  /** @type {BasicEvaluatedExpression[]} */
148
- (arg.items).filter(param => param.isString());
148
+ (arg.items).filter((param) => param.isString());
149
149
  }
150
150
  /** @type {string[]} */
151
151
  const requests = [];
@@ -185,7 +185,7 @@ class HotModuleReplacementPlugin {
185
185
  * @param {typeof ModuleHotDeclineDependency} ParamDependency dependency
186
186
  * @returns {(expr: CallExpression) => boolean | undefined} callback
187
187
  */
188
- const createDeclineHandler = (parser, ParamDependency) => expr => {
188
+ const createDeclineHandler = (parser, ParamDependency) => (expr) => {
189
189
  const module = parser.state.module;
190
190
  const dep = new ConstDependency(
191
191
  `${module.moduleArgument}.hot.decline`,
@@ -205,7 +205,7 @@ class HotModuleReplacementPlugin {
205
205
  } else if (arg.isArray()) {
206
206
  params =
207
207
  /** @type {BasicEvaluatedExpression[]} */
208
- (arg.items).filter(param => param.isString());
208
+ (arg.items).filter((param) => param.isString());
209
209
  }
210
210
  for (const [idx, param] of params.entries()) {
211
211
  const dep = new ParamDependency(
@@ -225,7 +225,7 @@ class HotModuleReplacementPlugin {
225
225
  * @param {JavascriptParser} parser the parser
226
226
  * @returns {(expr: Expression) => boolean | undefined} callback
227
227
  */
228
- const createHMRExpressionHandler = parser => expr => {
228
+ const createHMRExpressionHandler = (parser) => (expr) => {
229
229
  const module = parser.state.module;
230
230
  const dep = new ConstDependency(
231
231
  `${module.moduleArgument}.hot`,
@@ -243,13 +243,13 @@ class HotModuleReplacementPlugin {
243
243
  * @param {JavascriptParser} parser the parser
244
244
  * @returns {void}
245
245
  */
246
- const applyModuleHot = parser => {
246
+ const applyModuleHot = (parser) => {
247
247
  parser.hooks.evaluateIdentifier.for("module.hot").tap(
248
248
  {
249
249
  name: PLUGIN_NAME,
250
250
  before: "NodeStuffPlugin"
251
251
  },
252
- expr =>
252
+ (expr) =>
253
253
  evaluateToIdentifier(
254
254
  "module.hot",
255
255
  "module",
@@ -278,10 +278,10 @@ class HotModuleReplacementPlugin {
278
278
  * @param {JavascriptParser} parser the parser
279
279
  * @returns {void}
280
280
  */
281
- const applyImportMetaHot = parser => {
281
+ const applyImportMetaHot = (parser) => {
282
282
  parser.hooks.evaluateIdentifier
283
283
  .for("import.meta.webpackHot")
284
- .tap(PLUGIN_NAME, expr =>
284
+ .tap(PLUGIN_NAME, (expr) =>
285
285
  evaluateToIdentifier(
286
286
  "import.meta.webpackHot",
287
287
  "import.meta",
@@ -381,7 +381,7 @@ class HotModuleReplacementPlugin {
381
381
  chunk,
382
382
  compareModulesById(chunkGraph)
383
383
  ),
384
- m => /** @type {ModuleId} */ (chunkGraph.getModuleId(m))
384
+ (m) => /** @type {ModuleId} */ (chunkGraph.getModuleId(m))
385
385
  );
386
386
  }
387
387
  });
@@ -391,7 +391,7 @@ class HotModuleReplacementPlugin {
391
391
  const fullHashModules = new TupleSet();
392
392
  /** @type {TupleSet<Module, RuntimeSpec>} */
393
393
  const nonCodeGeneratedModules = new TupleSet();
394
- compilation.hooks.fullHash.tap(PLUGIN_NAME, hash => {
394
+ compilation.hooks.fullHash.tap(PLUGIN_NAME, (hash) => {
395
395
  const chunkGraph = compilation.chunkGraph;
396
396
  const records = /** @type {Records} */ (compilation.records);
397
397
  for (const chunk of compilation.chunks) {
@@ -399,7 +399,7 @@ class HotModuleReplacementPlugin {
399
399
  * @param {Module} module module
400
400
  * @returns {string} module hash
401
401
  */
402
- const getModuleHash = module => {
402
+ const getModuleHash = (module) => {
403
403
  if (
404
404
  compilation.codeGenerationResults.has(module, chunk.runtime)
405
405
  ) {
@@ -524,7 +524,7 @@ class HotModuleReplacementPlugin {
524
524
  const runtime = keyToRuntime(chunkRuntime[key]);
525
525
  allOldRuntime = mergeRuntimeOwned(allOldRuntime, runtime);
526
526
  }
527
- forEachRuntime(allOldRuntime, runtime => {
527
+ forEachRuntime(allOldRuntime, (runtime) => {
528
528
  const { path: filename, info: assetInfo } =
529
529
  compilation.getPathWithInfo(
530
530
  /** @type {NonNullable<OutputNormalized["hotUpdateMainFilename"]>} */
@@ -588,7 +588,7 @@ class HotModuleReplacementPlugin {
588
588
  let removedFromRuntime;
589
589
  const currentChunk = find(
590
590
  compilation.chunks,
591
- chunk => `${chunk.id}` === key
591
+ (chunk) => `${chunk.id}` === key
592
592
  );
593
593
  if (currentChunk) {
594
594
  chunkId = currentChunk.id;
@@ -599,22 +599,22 @@ class HotModuleReplacementPlugin {
599
599
  if (newRuntime === undefined) continue;
600
600
  newModules = chunkGraph
601
601
  .getChunkModules(currentChunk)
602
- .filter(module => updatedModules.has(module, currentChunk));
602
+ .filter((module) => updatedModules.has(module, currentChunk));
603
603
  newRuntimeModules = [
604
604
  ...chunkGraph.getChunkRuntimeModulesIterable(currentChunk)
605
- ].filter(module => updatedModules.has(module, currentChunk));
605
+ ].filter((module) => updatedModules.has(module, currentChunk));
606
606
  const fullHashModules =
607
607
  chunkGraph.getChunkFullHashModulesIterable(currentChunk);
608
608
  newFullHashModules =
609
609
  fullHashModules &&
610
- [...fullHashModules].filter(module =>
610
+ [...fullHashModules].filter((module) =>
611
611
  updatedModules.has(module, currentChunk)
612
612
  );
613
613
  const dependentHashModules =
614
614
  chunkGraph.getChunkDependentHashModulesIterable(currentChunk);
615
615
  newDependentHashModules =
616
616
  dependentHashModules &&
617
- [...dependentHashModules].filter(module =>
617
+ [...dependentHashModules].filter((module) =>
618
618
  updatedModules.has(module, currentChunk)
619
619
  );
620
620
  removedFromRuntime = subtractRuntime(oldRuntime, newRuntime);
@@ -626,7 +626,7 @@ class HotModuleReplacementPlugin {
626
626
  }
627
627
  if (removedFromRuntime) {
628
628
  // chunk was removed from some runtimes
629
- forEachRuntime(removedFromRuntime, runtime => {
629
+ forEachRuntime(removedFromRuntime, (runtime) => {
630
630
  const item =
631
631
  /** @type {HotUpdateMainContentByRuntimeItem} */
632
632
  (
@@ -665,7 +665,7 @@ class HotModuleReplacementPlugin {
665
665
  // module is no longer in this runtime combination
666
666
  // We (incorrectly) assume that it's not in an overlapping runtime combination
667
667
  // and dispose it from the main runtimes the chunk was removed from
668
- forEachRuntime(removedFromRuntime, runtime => {
668
+ forEachRuntime(removedFromRuntime, (runtime) => {
669
669
  // If the module is still used in this runtime, do not dispose it
670
670
  // This could create a bad runtime state where the module is still loaded,
671
671
  // but no chunk which contains it. This means we don't receive further HMR updates
@@ -764,7 +764,7 @@ class HotModuleReplacementPlugin {
764
764
  compilation.hooks.chunkAsset.call(currentChunk, filename);
765
765
  }
766
766
  }
767
- forEachRuntime(newRuntime, runtime => {
767
+ forEachRuntime(newRuntime, (runtime) => {
768
768
  const item =
769
769
  /** @type {HotUpdateMainContentByRuntimeItem} */ (
770
770
  hotUpdateMainContentByRuntime.get(
@@ -829,7 +829,7 @@ To fix this, make sure to include [runtime] in the output.hotUpdateMainFilename
829
829
  ...completelyRemovedModulesArray,
830
830
  ...Array.from(
831
831
  removedModules,
832
- m =>
832
+ (m) =>
833
833
  /** @type {ModuleId} */ (chunkGraph.getModuleId(m))
834
834
  )
835
835
  ]
@@ -863,28 +863,28 @@ To fix this, make sure to include [runtime] in the output.hotUpdateMainFilename
863
863
 
864
864
  normalModuleFactory.hooks.parser
865
865
  .for(JAVASCRIPT_MODULE_TYPE_AUTO)
866
- .tap(PLUGIN_NAME, parser => {
866
+ .tap(PLUGIN_NAME, (parser) => {
867
867
  applyModuleHot(parser);
868
868
  applyImportMetaHot(parser);
869
869
  });
870
870
  normalModuleFactory.hooks.parser
871
871
  .for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
872
- .tap(PLUGIN_NAME, parser => {
872
+ .tap(PLUGIN_NAME, (parser) => {
873
873
  applyModuleHot(parser);
874
874
  });
875
875
  normalModuleFactory.hooks.parser
876
876
  .for(JAVASCRIPT_MODULE_TYPE_ESM)
877
- .tap(PLUGIN_NAME, parser => {
877
+ .tap(PLUGIN_NAME, (parser) => {
878
878
  applyImportMetaHot(parser);
879
879
  });
880
- normalModuleFactory.hooks.module.tap(PLUGIN_NAME, module => {
880
+ normalModuleFactory.hooks.module.tap(PLUGIN_NAME, (module) => {
881
881
  module.hot = true;
882
882
  return module;
883
883
  });
884
884
 
885
885
  NormalModule.getCompilationHooks(compilation).loader.tap(
886
886
  PLUGIN_NAME,
887
- context => {
887
+ (context) => {
888
888
  context.hot = true;
889
889
  }
890
890
  );
@@ -71,8 +71,8 @@ class IgnorePlugin {
71
71
  * @returns {void}
72
72
  */
73
73
  apply(compiler) {
74
- compiler.hooks.normalModuleFactory.tap(PLUGIN_NAME, nmf => {
75
- nmf.hooks.beforeResolve.tap(PLUGIN_NAME, resolveData => {
74
+ compiler.hooks.normalModuleFactory.tap(PLUGIN_NAME, (nmf) => {
75
+ nmf.hooks.beforeResolve.tap(PLUGIN_NAME, (resolveData) => {
76
76
  const result = this.checkIgnore(resolveData);
77
77
 
78
78
  if (
@@ -93,7 +93,7 @@ class IgnorePlugin {
93
93
  return result;
94
94
  });
95
95
  });
96
- compiler.hooks.contextModuleFactory.tap(PLUGIN_NAME, cmf => {
96
+ compiler.hooks.contextModuleFactory.tap(PLUGIN_NAME, (cmf) => {
97
97
  cmf.hooks.beforeResolve.tap(PLUGIN_NAME, this.checkIgnore);
98
98
  });
99
99
  }
@@ -24,11 +24,11 @@ class IgnoreWarningsPlugin {
24
24
  * @returns {void}
25
25
  */
26
26
  apply(compiler) {
27
- compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => {
28
- compilation.hooks.processWarnings.tap(PLUGIN_NAME, warnings =>
27
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
28
+ compilation.hooks.processWarnings.tap(PLUGIN_NAME, (warnings) =>
29
29
  warnings.filter(
30
- warning =>
31
- !this._ignoreWarnings.some(ignore => ignore(warning, compilation))
30
+ (warning) =>
31
+ !this._ignoreWarnings.some((ignore) => ignore(warning, compilation))
32
32
  )
33
33
  );
34
34
  });
@@ -173,6 +173,12 @@ makeSerializable(InitFragment, "webpack/lib/InitFragment");
173
173
  InitFragment.prototype.merge =
174
174
  /** @type {TODO} */
175
175
  (undefined);
176
+ InitFragment.prototype.getImported =
177
+ /** @type {TODO} */
178
+ (undefined);
179
+ InitFragment.prototype.setImported =
180
+ /** @type {TODO} */
181
+ (undefined);
176
182
 
177
183
  InitFragment.STAGE_CONSTANTS = 10;
178
184
  InitFragment.STAGE_ASYNC_BOUNDARY = 20;
@@ -18,7 +18,7 @@ class InvalidDependenciesModuleWarning extends WebpackError {
18
18
  */
19
19
  constructor(module, deps) {
20
20
  const orderedDeps = deps ? [...deps].sort() : [];
21
- const depsList = orderedDeps.map(dep => ` * ${JSON.stringify(dep)}`);
21
+ const depsList = orderedDeps.map((dep) => ` * ${JSON.stringify(dep)}`);
22
22
  super(`Invalid dependencies have been reported by plugins or loaders for this module. All reported dependencies need to be absolute paths.
23
23
  Invalid dependencies may lead to broken watching and caching.
24
24
  As best effort we try to convert all invalid values to absolute paths and converting globs into context dependencies, but this is deprecated behavior.
@@ -32,7 +32,7 @@ class JavascriptMetaInfoPlugin {
32
32
  * @param {JavascriptParser} parser the parser
33
33
  * @returns {void}
34
34
  */
35
- const handler = parser => {
35
+ const handler = (parser) => {
36
36
  parser.hooks.call.for("eval").tap(PLUGIN_NAME, () => {
37
37
  const buildInfo =
38
38
  /** @type {BuildInfo} */
@@ -86,7 +86,7 @@ class LibManifestPlugin {
86
86
  this.options.entryOnly &&
87
87
  !someInIterable(
88
88
  moduleGraph.getIncomingConnections(module),
89
- c => c.dependency instanceof EntryDependency
89
+ (c) => c.dependency instanceof EntryDependency
90
90
  )
91
91
  ) {
92
92
  continue;
@@ -129,7 +129,7 @@ class LibManifestPlugin {
129
129
  mkdirp(
130
130
  intermediateFileSystem,
131
131
  dirname(intermediateFileSystem, targetPath),
132
- err => {
132
+ (err) => {
133
133
  if (err) return callback(err);
134
134
  intermediateFileSystem.writeFile(targetPath, buffer, callback);
135
135
  }
@@ -59,7 +59,7 @@ class LoaderOptionsPlugin {
59
59
  */
60
60
  apply(compiler) {
61
61
  const options = this.options;
62
- compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => {
62
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
63
63
  NormalModule.getCompilationHooks(compilation).loader.tap(
64
64
  PLUGIN_NAME,
65
65
  (context, module) => {
@@ -25,10 +25,10 @@ class LoaderTargetPlugin {
25
25
  * @returns {void}
26
26
  */
27
27
  apply(compiler) {
28
- compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => {
28
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
29
29
  NormalModule.getCompilationHooks(compilation).loader.tap(
30
30
  PLUGIN_NAME,
31
- loaderContext => {
31
+ (loaderContext) => {
32
32
  loaderContext.target = this.target;
33
33
  }
34
34
  );
@@ -323,7 +323,7 @@ class MainTemplate {
323
323
  /**
324
324
  * @param {PathData} options context data
325
325
  * @returns {string} interpolated path
326
- */ options =>
326
+ */ (options) =>
327
327
  compilation.getAssetPath(
328
328
  /** @type {string} */
329
329
  (compilation.outputOptions.publicPath),
package/lib/Module.js CHANGED
@@ -775,7 +775,7 @@ class Module extends DependenciesBlock {
775
775
  fromModule,
776
776
  connections
777
777
  ] of moduleGraph.getIncomingConnectionsByOriginModule(this)) {
778
- if (!connections.some(c => c.isTargetActive(chunk.runtime))) continue;
778
+ if (!connections.some((c) => c.isTargetActive(chunk.runtime))) continue;
779
779
  for (const originChunk of chunkGraph.getModuleChunksIterable(
780
780
  /** @type {Module} */ (fromModule)
781
781
  )) {
@@ -96,13 +96,13 @@ const getHash =
96
96
  * @param {Record<string, () => T>} obj the object to convert to a lazy access object
97
97
  * @returns {T} the lazy access object
98
98
  */
99
- const lazyObject = obj => {
99
+ const lazyObject = (obj) => {
100
100
  const newObj = /** @type {T} */ ({});
101
101
  for (const key of Object.keys(obj)) {
102
102
  const fn = obj[key];
103
103
  Object.defineProperty(newObj, key, {
104
104
  get: () => fn(),
105
- set: v => {
105
+ set: (v) => {
106
106
  Object.defineProperty(newObj, key, {
107
107
  value: v,
108
108
  enumerable: true,
@@ -320,7 +320,7 @@ ModuleFilenameHelpers.replaceDuplicates = (array, fn, comparator) => {
320
320
  const matchPart = (str, test) => {
321
321
  if (!test) return true;
322
322
  if (Array.isArray(test)) {
323
- return test.some(test => matchPart(str, test));
323
+ return test.some((test) => matchPart(str, test));
324
324
  }
325
325
  if (typeof test === "string") {
326
326
  return str.startsWith(test);
@@ -10,6 +10,8 @@ const ExportsInfo = require("./ExportsInfo");
10
10
  const ModuleGraphConnection = require("./ModuleGraphConnection");
11
11
  const SortableSet = require("./util/SortableSet");
12
12
  const WeakTupleMap = require("./util/WeakTupleMap");
13
+ const { sortWithSourceOrder } = require("./util/comparators");
14
+ const memoize = require("./util/memoize");
13
15
 
14
16
  /** @typedef {import("./Compilation").ModuleMemCaches} ModuleMemCaches */
15
17
  /** @typedef {import("./DependenciesBlock")} DependenciesBlock */
@@ -19,6 +21,13 @@ const WeakTupleMap = require("./util/WeakTupleMap");
19
21
  /** @typedef {import("./ModuleProfile")} ModuleProfile */
20
22
  /** @typedef {import("./RequestShortener")} RequestShortener */
21
23
  /** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
24
+ /** @typedef {import("./dependencies/HarmonyImportSideEffectDependency")} HarmonyImportSideEffectDependency */
25
+ /** @typedef {import("./dependencies/HarmonyImportSpecifierDependency")} HarmonyImportSpecifierDependency */
26
+ /** @typedef {import("./util/comparators").DependencySourceOrder} DependencySourceOrder */
27
+
28
+ const getCommonJsSelfReferenceDependency = memoize(() =>
29
+ require("./dependencies/CommonJsSelfReferenceDependency")
30
+ );
22
31
 
23
32
  /**
24
33
  * @callback OptimizationBailoutFunction
@@ -32,7 +41,7 @@ const EMPTY_SET = new Set();
32
41
  * @param {SortableSet<ModuleGraphConnection>} set input
33
42
  * @returns {readonly Map<Module | undefined, readonly ModuleGraphConnection[]>} mapped by origin module
34
43
  */
35
- const getConnectionsByOriginModule = set => {
44
+ const getConnectionsByOriginModule = (set) => {
36
45
  const map = new Map();
37
46
  /** @type {Module | 0} */
38
47
  let lastModule = 0;
@@ -63,7 +72,7 @@ const getConnectionsByOriginModule = set => {
63
72
  * @param {SortableSet<ModuleGraphConnection>} set input
64
73
  * @returns {readonly Map<Module | undefined, readonly ModuleGraphConnection[]>} mapped by module
65
74
  */
66
- const getConnectionsByModule = set => {
75
+ const getConnectionsByModule = (set) => {
67
76
  const map = new Map();
68
77
  /** @type {Module | 0} */
69
78
  let lastModule = 0;
@@ -158,6 +167,12 @@ class ModuleGraph {
158
167
  * @private
159
168
  */
160
169
  this._cacheStage = undefined;
170
+
171
+ /**
172
+ * @type {WeakMap<Dependency, DependencySourceOrder>}
173
+ * @private
174
+ */
175
+ this._dependencySourceOrderMap = new WeakMap();
161
176
  }
162
177
 
163
178
  /**
@@ -186,6 +201,15 @@ class ModuleGraph {
186
201
  dependency._parentModule = module;
187
202
  }
188
203
 
204
+ /**
205
+ * @param {Dependency} dependency the dependency
206
+ * @param {number} index the index
207
+ * @returns {void}
208
+ */
209
+ setParentDependenciesBlockIndex(dependency, index) {
210
+ dependency._parentDependenciesBlockIndex = index;
211
+ }
212
+
189
213
  /**
190
214
  * @param {Dependency} dependency the dependency
191
215
  * @returns {Module | undefined} parent module
@@ -265,6 +289,64 @@ class ModuleGraph {
265
289
  targetMgm.incomingConnections.add(newConnection);
266
290
  }
267
291
 
292
+ /**
293
+ * @param {Dependency} dependency the need update dependency
294
+ * @param {ModuleGraphConnection=} connection the target connection
295
+ * @param {Module=} parentModule the parent module
296
+ * @returns {void}
297
+ */
298
+ updateParent(dependency, connection, parentModule) {
299
+ if (this._dependencySourceOrderMap.has(dependency)) {
300
+ return;
301
+ }
302
+ if (!connection || !parentModule) {
303
+ return;
304
+ }
305
+ const originDependency = connection.dependency;
306
+
307
+ // src/index.js
308
+ // import { c } from "lib/c" -> c = 0
309
+ // import { a, b } from "lib" -> a and b have the same source order -> a = b = 1
310
+ // import { d } from "lib/d" -> d = 2
311
+ const currentSourceOrder =
312
+ /** @type { HarmonyImportSideEffectDependency | HarmonyImportSpecifierDependency} */ (
313
+ dependency
314
+ ).sourceOrder;
315
+
316
+ // lib/index.js (reexport)
317
+ // import { a } from "lib/a" -> a = 0
318
+ // import { b } from "lib/b" -> b = 1
319
+ const originSourceOrder =
320
+ /** @type { HarmonyImportSideEffectDependency | HarmonyImportSpecifierDependency} */ (
321
+ originDependency
322
+ ).sourceOrder;
323
+ if (
324
+ typeof currentSourceOrder === "number" &&
325
+ typeof originSourceOrder === "number"
326
+ ) {
327
+ // src/index.js
328
+ // import { c } from "lib/c" -> c = 0
329
+ // import { a } from "lib/a" -> a = 1.0 = 1(main) + 0.0(sub)
330
+ // import { b } from "lib/b" -> b = 1.1 = 1(main) + 0.1(sub)
331
+ // import { d } from "lib/d" -> d = 2
332
+ this._dependencySourceOrderMap.set(dependency, {
333
+ main: currentSourceOrder,
334
+ sub: originSourceOrder
335
+ });
336
+
337
+ // If dependencies like HarmonyImportSideEffectDependency and HarmonyImportSpecifierDependency have a SourceOrder,
338
+ // we sort based on it; otherwise, we preserve the original order.
339
+ sortWithSourceOrder(
340
+ parentModule.dependencies,
341
+ this._dependencySourceOrderMap
342
+ );
343
+
344
+ for (const [index, dep] of parentModule.dependencies.entries()) {
345
+ this.setParentDependenciesBlockIndex(dep, index);
346
+ }
347
+ }
348
+ }
349
+
268
350
  /**
269
351
  * @param {Dependency} dependency the referencing dependency
270
352
  * @returns {void}
@@ -763,8 +845,7 @@ class ModuleGraph {
763
845
  for (const connection of connections) {
764
846
  if (
765
847
  !connection.dependency ||
766
- connection.dependency instanceof
767
- require("./dependencies/CommonJsSelfReferenceDependency")
848
+ connection.dependency instanceof getCommonJsSelfReferenceDependency()
768
849
  ) {
769
850
  continue;
770
851
  }
@@ -879,7 +960,7 @@ class ModuleGraph {
879
960
  * @param {Module} module the module
880
961
  * @returns {ModuleGraph} the module graph
881
962
  */
882
- module => {
963
+ (module) => {
883
964
  const moduleGraph = moduleGraphForModuleMap.get(module);
884
965
  if (!moduleGraph) {
885
966
  throw new Error(
@@ -26,7 +26,7 @@ const JavascriptModulesPlugin = require("./javascript/JavascriptModulesPlugin");
26
26
  * @param {Iterable<T>} iterable iterable
27
27
  * @returns {string} joined with comma
28
28
  */
29
- const joinIterableWithComma = iterable => {
29
+ const joinIterableWithComma = (iterable) => {
30
30
  // This is more performant than Array.from().join(", ")
31
31
  // as it doesn't create an array
32
32
  let str = "";
@@ -94,7 +94,7 @@ const printExportsInfoToSource = (
94
94
  ? ` -> ${target.module.readableIdentifier(requestShortener)}${
95
95
  target.export
96
96
  ? ` .${target.export
97
- .map(e => JSON.stringify(e).slice(1, -1))
97
+ .map((e) => JSON.stringify(e).slice(1, -1))
98
98
  .join(".")}`
99
99
  : ""
100
100
  }`
@@ -165,7 +165,7 @@ class ModuleInfoHeaderPlugin {
165
165
  */
166
166
  apply(compiler) {
167
167
  const { _verbose: verbose } = this;
168
- compiler.hooks.compilation.tap(PLUGIN_NAME, compilation => {
168
+ compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
169
169
  const javascriptHooks =
170
170
  JavascriptModulesPlugin.getCompilationHooks(compilation);
171
171
  javascriptHooks.renderModulePackage.tap(
@@ -43,7 +43,7 @@ class ModuleParseError extends WebpackError {
43
43
  "\nYou may need an appropriate loader to handle this file type.";
44
44
  } else if (loaders.length >= 1) {
45
45
  message += `\nFile was processed with these loaders:${loaders
46
- .map(loader => `\n * ${loader}`)
46
+ .map((loader) => `\n * ${loader}`)
47
47
  .join("")}`;
48
48
  message +=
49
49
  "\nYou may need an additional loader to handle the result of these loaders.";
@@ -75,8 +75,10 @@ class ModuleParseError extends WebpackError {
75
75
  const linesAfter = sourceLines.slice(lineNumber, lineNumber + 2);
76
76
 
77
77
  message += `${linesBefore
78
- .map(l => `\n| ${l}`)
79
- .join("")}\n> ${theLine}${linesAfter.map(l => `\n| ${l}`).join("")}`;
78
+ .map((l) => `\n| ${l}`)
79
+ .join(
80
+ ""
81
+ )}\n> ${theLine}${linesAfter.map((l) => `\n| ${l}`).join("")}`;
80
82
  }
81
83
 
82
84
  loc = { start: err.loc };