webpack 5.110.3 → 5.111.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 (208) hide show
  1. package/README.md +5 -0
  2. package/lib/APIPlugin.js +23 -7
  3. package/lib/AutomaticPrefetchPlugin.js +1 -1
  4. package/lib/Cache.js +8 -3
  5. package/lib/CacheFacade.js +1 -1
  6. package/lib/CircularModulesPlugin.js +157 -55
  7. package/lib/CleanPlugin.js +2 -2
  8. package/lib/Compilation.js +320 -302
  9. package/lib/Compiler.js +209 -46
  10. package/lib/ContextModule.js +17 -81
  11. package/lib/ContextModuleFactory.js +1 -1
  12. package/lib/CopyPlugin.js +1054 -0
  13. package/lib/DefinePlugin.js +24 -8
  14. package/lib/ExternalModule.js +41 -14
  15. package/lib/FileSystemInfo.js +17 -14
  16. package/lib/FlagDependencyExportsPlugin.js +45 -21
  17. package/lib/HotModuleReplacementPlugin.js +53 -7
  18. package/lib/JavascriptMetaInfoPlugin.js +5 -3
  19. package/lib/MainTemplate.js +5 -1
  20. package/lib/Module.js +16 -7
  21. package/lib/MultiCompiler.js +1 -1
  22. package/lib/MultiWatching.js +1 -1
  23. package/lib/NormalModule.js +45 -12
  24. package/lib/NormalModuleFactory.js +1 -1
  25. package/lib/RuntimeGlobals.js +21 -7
  26. package/lib/RuntimeModule.js +28 -12
  27. package/lib/RuntimePlugin.js +30 -3
  28. package/lib/RuntimeTemplate.js +780 -475
  29. package/lib/SourceMapDevToolPlugin.js +1 -1
  30. package/lib/Watching.js +9 -0
  31. package/lib/WebpackOptionsApply.js +84 -91
  32. package/lib/asset/AssetGenerator.js +25 -8
  33. package/lib/asset/AssetModule.js +3 -0
  34. package/lib/asset/WebManifestParser.js +7 -5
  35. package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
  36. package/lib/cache/IdleFileCachePlugin.js +2 -2
  37. package/lib/cache/PackFileCacheStrategy.js +14 -1
  38. package/lib/config/browserslistTargetHandler.js +19 -0
  39. package/lib/config/defaults.js +86 -50
  40. package/lib/config/normalization.js +82 -12
  41. package/lib/config/target.js +10 -0
  42. package/lib/container/ContainerReferencePlugin.js +6 -0
  43. package/lib/container/RemoteRuntimeModule.js +9 -0
  44. package/lib/container/declaredRemotes.js +39 -0
  45. package/lib/css/CssGenerator.js +8 -0
  46. package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
  47. package/lib/css/CssLoadingRuntimeModule.js +94 -36
  48. package/lib/css/CssModule.js +1 -1
  49. package/lib/css/CssModulesPlugin.js +7 -6
  50. package/lib/css/CssParser.js +144 -11
  51. package/lib/css/CssServerStylesRuntimeModule.js +9 -0
  52. package/lib/css/cssMinify.js +11 -3
  53. package/lib/css/data.js +2814 -678
  54. package/lib/css/syntax.js +4082 -248
  55. package/lib/debug/ProfilingPlugin.js +4 -0
  56. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
  57. package/lib/dependencies/AMDRuntimeModules.js +18 -0
  58. package/lib/dependencies/CommonJsExportRequireDependency.js +3 -1
  59. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
  60. package/lib/dependencies/CommonJsImportsParserPlugin.js +1 -0
  61. package/lib/dependencies/CommonJsPlugin.js +19 -3
  62. package/lib/dependencies/CommonJsRequireDependency.js +14 -5
  63. package/lib/dependencies/CssIcssExportDependency.js +7 -1
  64. package/lib/dependencies/HarmonyCompatibilityDependency.js +58 -4
  65. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +8 -3
  66. package/lib/dependencies/HarmonyExportExpressionDependency.js +44 -29
  67. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +71 -13
  68. package/lib/dependencies/HarmonyExportInitFragment.js +99 -19
  69. package/lib/dependencies/HarmonyExportSpecifierDependency.js +18 -30
  70. package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
  71. package/lib/dependencies/HarmonyImportDependency.js +6 -1
  72. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +8 -1
  73. package/lib/dependencies/HarmonyImportSpecifierDependency.js +24 -1
  74. package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
  75. package/lib/dependencies/HtmlEntryDependency.js +50 -0
  76. package/lib/dependencies/ImportMetaMainDependency.js +104 -0
  77. package/lib/dependencies/ImportMetaPlugin.js +59 -15
  78. package/lib/dependencies/SystemRuntimeModule.js +9 -0
  79. package/lib/dependencies/WorkerDependency.js +1 -2
  80. package/lib/dependencies/WorkletDependency.js +1 -2
  81. package/lib/dll/DelegatedModule.js +18 -1
  82. package/lib/dll/DllReferencePlugin.js +11 -8
  83. package/lib/dll/LibManifestPlugin.js +1 -1
  84. package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
  85. package/lib/errors/DuplicateModulesWarning.js +12 -7
  86. package/lib/errors/EmptyCopyPatternWarning.js +26 -0
  87. package/lib/errors/ExternalStarReexportError.js +44 -0
  88. package/lib/errors/MissingSourceMapsWarning.js +36 -0
  89. package/lib/errors/ModuleParseError.js +2 -1
  90. package/lib/errors/UnusedAssetsWarning.js +36 -0
  91. package/lib/errors/UnusedFederationWarning.js +35 -0
  92. package/lib/errors/UnusedModulesWarning.js +38 -0
  93. package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
  94. package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
  95. package/lib/esm/ModuleChunkLoadingPlugin.js +30 -11
  96. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -60
  97. package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
  98. package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
  99. package/lib/html/HtmlGenerator.js +11 -5
  100. package/lib/html/HtmlModulesPlugin.js +331 -62
  101. package/lib/html/HtmlParser.js +13 -6
  102. package/lib/html/builtinEmbeddedRenderer.js +107 -0
  103. package/lib/html/data.js +121 -7
  104. package/lib/html/htmlMinify.js +84 -113
  105. package/lib/html/syntax.js +763 -426
  106. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  107. package/lib/index.js +3 -0
  108. package/lib/javascript/JavascriptModule.js +1 -0
  109. package/lib/javascript/JavascriptModulesPlugin.js +52 -24
  110. package/lib/javascript/JavascriptParser.js +1255 -728
  111. package/lib/javascript/StartupHelpers.js +27 -3
  112. package/lib/javascript/data.js +172 -0
  113. package/lib/javascript/grammar.js +5546 -0
  114. package/lib/javascript/parser.js +1494 -0
  115. package/lib/javascript/regexp.js +1762 -0
  116. package/lib/javascript/regexpData.js +51 -0
  117. package/lib/javascript/syntax.js +8696 -5225
  118. package/lib/library/ModuleLibraryPlugin.js +116 -5
  119. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
  120. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
  121. package/lib/optimize/ConcatenatedModule.js +97 -20
  122. package/lib/optimize/ConstExportsPlugin.js +50 -39
  123. package/lib/optimize/InlineExports.js +20 -123
  124. package/lib/optimize/MangleExportsPlugin.js +10 -0
  125. package/lib/optimize/ModuleConcatenationPlugin.js +24 -1
  126. package/lib/optimize/RealContentHashPlugin.js +68 -9
  127. package/lib/optimize/SideEffectsFlagPlugin.js +17 -9
  128. package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
  129. package/lib/performance/CacheEffectivenessPlugin.js +4 -3
  130. package/lib/performance/DuplicateModulesPlugin.js +57 -13
  131. package/lib/performance/EvalUsagePlugin.js +5 -2
  132. package/lib/performance/MissingSourceMapsPlugin.js +115 -0
  133. package/lib/performance/PureAnnotationsPlugin.js +6 -3
  134. package/lib/performance/TopLevelThisPlugin.js +5 -4
  135. package/lib/performance/UnusedAssetsPlugin.js +109 -0
  136. package/lib/performance/UnusedFederationPlugin.js +147 -0
  137. package/lib/performance/UnusedModulesPlugin.js +141 -0
  138. package/lib/performance/UnusedReexportsPlugin.js +1 -55
  139. package/lib/performance/isOnlyReexported.js +65 -0
  140. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
  141. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +2 -0
  142. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
  143. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
  144. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
  145. package/lib/prefetch/ResourceHintPlugin.js +1 -2
  146. package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
  147. package/lib/prefetch/StartupAssetHintRuntimeModule.js +9 -0
  148. package/lib/rules/RuleSetCompiler.js +211 -4
  149. package/lib/runtime/AsyncModuleRuntimeModule.js +100 -66
  150. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
  151. package/lib/runtime/BaseUriRuntimeModule.js +9 -0
  152. package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
  153. package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
  154. package/lib/runtime/GetChunkFilenameRuntimeModule.js +9 -0
  155. package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
  156. package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
  157. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
  158. package/lib/runtime/GlobalRuntimeModule.js +9 -0
  159. package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
  160. package/lib/runtime/HelperRuntimeModule.js +10 -0
  161. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +330 -219
  162. package/lib/runtime/NonceRuntimeModule.js +9 -0
  163. package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
  164. package/lib/runtime/PublicPathRuntimeModule.js +9 -0
  165. package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
  166. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
  167. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
  168. package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
  169. package/lib/runtime/SystemContextRuntimeModule.js +9 -0
  170. package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
  171. package/lib/serialization/ObjectMiddleware.js +138 -106
  172. package/lib/sharing/ConsumeSharedPlugin.js +12 -0
  173. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
  174. package/lib/sharing/ShareRuntimeModule.js +9 -0
  175. package/lib/sharing/declaredShared.js +47 -0
  176. package/lib/stats/DefaultStatsFactoryPlugin.js +3 -1
  177. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
  178. package/lib/util/SourceProcessor.js +76 -69
  179. package/lib/util/async.js +292 -0
  180. package/lib/util/buildDiagnostics.js +69 -0
  181. package/lib/util/fs.js +27 -1
  182. package/lib/util/handlerKeys.js +40 -0
  183. package/lib/util/identifier.js +20 -0
  184. package/lib/util/internalSerializables.js +4 -0
  185. package/lib/util/registerExternalSerializer.js +6 -45
  186. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +9 -0
  187. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -0
  188. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +9 -0
  189. package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
  190. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
  191. package/package.json +22 -16
  192. package/schemas/WebpackOptions.check.js +1 -1
  193. package/schemas/WebpackOptions.json +379 -66
  194. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  195. package/schemas/plugins/ManifestPlugin.check.js +1 -1
  196. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  197. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  198. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  199. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  200. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  201. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  202. package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
  203. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
  204. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  205. package/types.d.ts +1414 -314
  206. package/lib/dependencies/ExportBindingInitFragment.js +0 -191
  207. package/lib/errors/EntrypointOverlapWarning.js +0 -45
  208. package/lib/performance/EntrypointOverlapPlugin.js +0 -122
@@ -10,6 +10,7 @@ const {
10
10
  compareModulesByPreOrderIndexOrIdentifier
11
11
  } = require("../util/comparators");
12
12
  const createHash = require("../util/createHash");
13
+ const { fileUrlToPath } = require("../util/identifier");
13
14
  const {
14
15
  getFullModuleName,
15
16
  getUsedModuleIdsAndModules
@@ -58,7 +59,7 @@ class HashedModuleIdsPlugin {
58
59
  compilation.hooks.moduleIds.tap(PLUGIN_NAME, () => {
59
60
  const chunkGraph = compilation.chunkGraph;
60
61
  const context = this.options.context
61
- ? this.options.context
62
+ ? fileUrlToPath(this.options.context)
62
63
  : compiler.context;
63
64
 
64
65
  const [usedIds, modules] = getUsedModuleIdsAndModules(compilation);
package/lib/index.js CHANGED
@@ -242,6 +242,9 @@ module.exports = mergeExports(fn, {
242
242
  get ContextReplacementPlugin() {
243
243
  return require("./ContextReplacementPlugin");
244
244
  },
245
+ get CopyPlugin() {
246
+ return require("./CopyPlugin");
247
+ },
245
248
  get DefinePlugin() {
246
249
  return require("./DefinePlugin");
247
250
  },
@@ -19,6 +19,7 @@ const makeSerializable = require("../util/makeSerializable");
19
19
  * Defines the build info properties specific to javascript modules.
20
20
  * @typedef {object} KnownJavascriptModuleBuildInfo
21
21
  * @property {string=} moduleConcatenationBailout using in CommonJs
22
+ * @property {string=} moduleConcatenationRootBailout what rules the module out as a concatenation root, while it may still be an inner module
22
23
  * @property {boolean=} needCreateRequire using in APIPlugin
23
24
  * @property {boolean=} usingPublicPathOverride module reassigns `__webpack_public_path__` at runtime, using in APIPlugin
24
25
  * @property {Set<string>=} pureFunctions names of locally declared functions known to be free of side effects
@@ -57,27 +57,12 @@ const JavascriptGenerator = require("./JavascriptGenerator");
57
57
  const JavascriptModule = require("./JavascriptModule");
58
58
  const JavascriptParser = require("./JavascriptParser");
59
59
  const analyzeScope = require("./ScopeAnalyzer");
60
+ const { renderAwaitedEntries } = require("./StartupHelpers");
61
+ const { releaseParserCaches } = require("./syntax");
60
62
 
61
63
  /**
62
64
  * @import {
63
- * Program,
64
- * Node,
65
- * Identifier,
66
- * CatchClause,
67
- * ClassDeclaration,
68
- * ClassExpression,
69
- * FunctionDeclaration,
70
- * FunctionExpression,
71
- * ArrowFunctionExpression,
72
- * VariableDeclarator,
73
- * VariableDeclaration,
74
- * ImportDeclaration,
75
- * ImportSpecifier,
76
- * ImportDefaultSpecifier,
77
- * ImportNamespaceSpecifier,
78
- * AssignmentExpression,
79
- * ForInStatement,
80
- * ForOfStatement
65
+ * Program
81
66
  * } from "estree"
82
67
  */
83
68
  /** @import { Source } from "webpack-sources" */
@@ -470,6 +455,10 @@ class JavascriptModulesPlugin {
470
455
  * @returns {void}
471
456
  */
472
457
  apply(compiler) {
458
+ // the parser's shared string caches only pay off while modules parse —
459
+ // drop them when the build ends so an idle process retains no parser state
460
+ compiler.hooks.done.tap(PLUGIN_NAME, releaseParserCaches);
461
+ compiler.hooks.failed.tap(PLUGIN_NAME, releaseParserCaches);
473
462
  compiler.hooks.compilation.tap(
474
463
  PLUGIN_NAME,
475
464
  (compilation, { normalModuleFactory }) => {
@@ -1680,8 +1669,27 @@ class JavascriptModulesPlugin {
1680
1669
  continue;
1681
1670
  }
1682
1671
  }
1683
- // An async entry is not awaited here: that needs top-level `await`,
1684
- // gated on an option held back from the patch release (revert #21881).
1672
+ const entryOptions = chunk.getEntryOptions();
1673
+ const library =
1674
+ entryOptions && entryOptions.library !== undefined
1675
+ ? entryOptions.library
1676
+ : runtimeTemplate.outputOptions.library;
1677
+ // A module library awaits the entry itself, in `ModuleLibraryPlugin`.
1678
+ const awaitedByLibrary =
1679
+ library !== undefined && library.type === "module";
1680
+ // `await` is legal only at an ESM chunk's top level, never in the
1681
+ // startup function below, and only where the target parses it.
1682
+ const canAwaitEntry =
1683
+ runtimeTemplate.isModule() &&
1684
+ runtimeTemplate.supportsTopLevelAwait() &&
1685
+ !awaitedByLibrary &&
1686
+ !runtimeRequirements.has(RuntimeGlobals.startup) &&
1687
+ !(
1688
+ runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&
1689
+ runtimeRequirements.has(RuntimeGlobals.startupOnlyAfter)
1690
+ );
1691
+ /** @type {string[]} */
1692
+ const awaitedEntries = [];
1685
1693
  let i = jsEntries.length;
1686
1694
  for (const [entryModule, entrypoint] of jsEntries) {
1687
1695
  const chunks =
@@ -1798,21 +1806,40 @@ class JavascriptModulesPlugin {
1798
1806
  // reassignment is allowed.
1799
1807
  const exportsDecl = runtimeTemplate.renderLet();
1800
1808
  if (chunks.length > 0) {
1809
+ const awaitEntry =
1810
+ canAwaitEntry && moduleGraph.isAsync(entryModule);
1811
+ const target =
1812
+ i === 0
1813
+ ? RuntimeGlobals.exports
1814
+ : `${RuntimeGlobals.exports}_${i}`;
1815
+ // The wrapper hands back nothing until the flush below runs the
1816
+ // entry, so an awaited one is caught by the entry call itself.
1817
+ if (awaitEntry && i !== 0) buf2.push(`${exportsDecl} ${target};`);
1818
+ const entryCall = `${RuntimeGlobals.require}(${moduleIdExpr})`;
1801
1819
  buf2.push(
1802
1820
  `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1803
1821
  RuntimeGlobals.onChunksLoaded
1804
1822
  }(undefined, ${JSON.stringify(
1805
1823
  chunks.map((c) => c.id)
1806
1824
  )}, ${runtimeTemplate.returningFunction(
1807
- `${RuntimeGlobals.require}(${moduleIdExpr})`
1825
+ awaitEntry ? `(${target} = ${entryCall})` : entryCall
1808
1826
  )})`
1809
1827
  );
1828
+ if (awaitEntry) awaitedEntries.push(target);
1810
1829
  } else if (useRequire) {
1830
+ // An async entry nobody awaits settles after the bundle did,
1831
+ // which orphans its rejection.
1832
+ const awaitEntry =
1833
+ canAwaitEntry && moduleGraph.isAsync(entryModule);
1834
+ const target =
1835
+ i === 0
1836
+ ? RuntimeGlobals.exports
1837
+ : `${RuntimeGlobals.exports}_${i}`;
1838
+ const needsDecl = i === 0 || awaitEntry;
1811
1839
  buf2.push(
1812
- `${i === 0 ? `${exportsDecl} ${RuntimeGlobals.exports} = ` : ""}${
1813
- RuntimeGlobals.require
1814
- }(${moduleIdExpr});`
1840
+ `${needsDecl ? `${exportsDecl} ${target} = ` : ""}${RuntimeGlobals.require}(${moduleIdExpr});`
1815
1841
  );
1842
+ if (awaitEntry) awaitedEntries.push(target);
1816
1843
  } else {
1817
1844
  if (i === 0) {
1818
1845
  buf2.push(`${exportsDecl} ${RuntimeGlobals.exports} = {};`);
@@ -1855,6 +1882,7 @@ class JavascriptModulesPlugin {
1855
1882
  `${RuntimeGlobals.exports} = ${RuntimeGlobals.onChunksLoaded}(${RuntimeGlobals.exports});`
1856
1883
  );
1857
1884
  }
1885
+ buf2.push(...renderAwaitedEntries(awaitedEntries));
1858
1886
  if (
1859
1887
  runtimeRequirements.has(RuntimeGlobals.startup) ||
1860
1888
  (runtimeRequirements.has(RuntimeGlobals.startupOnlyBefore) &&