@depup/webpack 5.110.3-depup.0 → 5.111.1-depup.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 (283) hide show
  1. package/README.md +7 -8
  2. package/changes.json +7 -11
  3. package/lib/APIPlugin.js +26 -11
  4. package/lib/AutomaticPrefetchPlugin.js +1 -1
  5. package/lib/Cache.js +8 -3
  6. package/lib/CacheFacade.js +1 -1
  7. package/lib/CircularModulesPlugin.js +157 -55
  8. package/lib/CleanPlugin.js +2 -2
  9. package/lib/CompatibilityPlugin.js +3 -4
  10. package/lib/Compilation.js +336 -337
  11. package/lib/Compiler.js +213 -51
  12. package/lib/ConstPlugin.js +16 -132
  13. package/lib/CopyPlugin.js +1054 -0
  14. package/lib/DefinePlugin.js +24 -8
  15. package/lib/DependencyTemplate.js +2 -1
  16. package/lib/DotenvPlugin.js +24 -28
  17. package/lib/ErrorHelpers.js +113 -0
  18. package/lib/ExportsInfo.js +20 -16
  19. package/lib/ExternalModule.js +47 -22
  20. package/lib/FileSystemInfo.js +17 -14
  21. package/lib/FlagDependencyExportsPlugin.js +53 -34
  22. package/lib/FlagDependencyUsagePlugin.js +9 -13
  23. package/lib/Generator.js +24 -2
  24. package/lib/HotModuleReplacementPlugin.js +55 -7
  25. package/lib/IgnorePlugin.js +1 -1
  26. package/lib/JavascriptMetaInfoPlugin.js +5 -3
  27. package/lib/LoaderOptionsPlugin.js +1 -1
  28. package/lib/MainTemplate.js +5 -1
  29. package/lib/Module.js +19 -10
  30. package/lib/ModuleGraph.js +6 -9
  31. package/lib/MultiCompiler.js +7 -17
  32. package/lib/MultiWatching.js +1 -1
  33. package/lib/NormalModule.js +135 -50
  34. package/lib/NormalModuleFactory.js +1 -1
  35. package/lib/RuntimeGlobals.js +21 -7
  36. package/lib/RuntimeModule.js +28 -12
  37. package/lib/RuntimePlugin.js +30 -3
  38. package/lib/RuntimeTemplate.js +813 -518
  39. package/lib/SourceMapDevToolPlugin.js +54 -104
  40. package/lib/TemplatedPathPlugin.js +16 -59
  41. package/lib/Watching.js +9 -0
  42. package/lib/WebpackOptionsApply.js +84 -91
  43. package/lib/asset/AssetBytesGenerator.js +7 -1
  44. package/lib/asset/AssetGenerator.js +50 -24
  45. package/lib/asset/AssetModule.js +3 -0
  46. package/lib/asset/AssetSourceGenerator.js +7 -1
  47. package/lib/asset/WebManifestParser.js +7 -5
  48. package/lib/buildChunkGraph.js +11 -15
  49. package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
  50. package/lib/cache/IdleFileCachePlugin.js +2 -2
  51. package/lib/cache/MemoryCachePlugin.js +4 -4
  52. package/lib/cache/MemoryWithGcCachePlugin.js +7 -8
  53. package/lib/cache/PackFileCacheStrategy.js +17 -19
  54. package/lib/cache/getLazyHashedEtag.js +3 -5
  55. package/lib/config/browserslistTargetHandler.js +17 -4
  56. package/lib/config/defaults.js +138 -128
  57. package/lib/config/getClaimedAssetTypes.js +10 -11
  58. package/lib/config/normalization.js +82 -12
  59. package/lib/config/target.js +13 -4
  60. package/lib/container/ContainerReferencePlugin.js +6 -0
  61. package/lib/container/RemoteRuntimeModule.js +9 -0
  62. package/lib/container/declaredRemotes.js +39 -0
  63. package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  64. package/lib/{ContextModule.js → context/ContextModule.js} +54 -115
  65. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +19 -21
  66. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  67. package/lib/css/CssGenerator.js +27 -11
  68. package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
  69. package/lib/css/CssLoadingRuntimeModule.js +94 -36
  70. package/lib/css/CssModule.js +1 -1
  71. package/lib/css/CssModulesPlugin.js +7 -6
  72. package/lib/css/CssParser.js +162 -31
  73. package/lib/css/CssServerStylesRuntimeModule.js +9 -0
  74. package/lib/css/cssMinify.js +43 -32
  75. package/lib/css/data.js +3514 -869
  76. package/lib/css/syntax.js +6370 -1220
  77. package/lib/debug/ProfilingPlugin.js +7 -4
  78. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
  79. package/lib/dependencies/AMDRuntimeModules.js +18 -0
  80. package/lib/dependencies/CommonJsExportRequireDependency.js +13 -12
  81. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
  82. package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -5
  83. package/lib/dependencies/CommonJsPlugin.js +19 -3
  84. package/lib/dependencies/CommonJsRequireDependency.js +14 -5
  85. package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
  86. package/lib/dependencies/ContextDependency.js +1 -1
  87. package/lib/dependencies/ContextDependencyHelpers.js +3 -9
  88. package/lib/dependencies/ContextElementDependency.js +1 -1
  89. package/lib/dependencies/CssIcssExportDependency.js +13 -9
  90. package/lib/dependencies/CssIcssImportDependency.js +3 -6
  91. package/lib/dependencies/CssUrlDependency.js +3 -5
  92. package/lib/dependencies/HarmonyCompatibilityDependency.js +67 -22
  93. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -4
  94. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +10 -7
  95. package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
  96. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +74 -17
  97. package/lib/dependencies/HarmonyExportInitFragment.js +110 -23
  98. package/lib/dependencies/HarmonyExportSpecifierDependency.js +25 -58
  99. package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
  100. package/lib/dependencies/HarmonyImportDependency.js +6 -1
  101. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +111 -17
  102. package/lib/dependencies/HarmonyImportSideEffectDependency.js +3 -4
  103. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
  104. package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
  105. package/lib/dependencies/HtmlEntryDependency.js +124 -102
  106. package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
  107. package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
  108. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
  109. package/lib/dependencies/ImportMetaGlobHelpers.js +1 -1
  110. package/lib/dependencies/ImportMetaMainDependency.js +104 -0
  111. package/lib/dependencies/ImportMetaPlugin.js +67 -25
  112. package/lib/dependencies/ImportParserPlugin.js +1 -1
  113. package/lib/dependencies/LoaderPlugin.js +26 -1
  114. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  115. package/lib/dependencies/SystemRuntimeModule.js +9 -0
  116. package/lib/dependencies/URLContextDependency.js +1 -1
  117. package/lib/dependencies/URLDependency.js +6 -5
  118. package/lib/dependencies/WorkerAndWorkletPlugin.js +15 -21
  119. package/lib/dependencies/WorkerDependency.js +7 -7
  120. package/lib/dependencies/WorkletDependency.js +7 -11
  121. package/lib/dll/DelegatedModule.js +18 -1
  122. package/lib/dll/DllReferencePlugin.js +11 -8
  123. package/lib/dll/LibManifestPlugin.js +1 -1
  124. package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
  125. package/lib/errors/DuplicateModulesWarning.js +12 -7
  126. package/lib/errors/EmptyCopyPatternWarning.js +26 -0
  127. package/lib/errors/ExternalStarReexportError.js +44 -0
  128. package/lib/errors/HookWebpackError.js +3 -2
  129. package/lib/errors/MissingSourceMapsWarning.js +36 -0
  130. package/lib/errors/ModuleParseError.js +2 -1
  131. package/lib/errors/UnusedAssetsWarning.js +36 -0
  132. package/lib/errors/UnusedFederationWarning.js +35 -0
  133. package/lib/errors/UnusedModulesWarning.js +38 -0
  134. package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
  135. package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
  136. package/lib/esm/ModuleChunkLoadingPlugin.js +30 -11
  137. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +92 -60
  138. package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
  139. package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
  140. package/lib/hmr/LazyCompilationPlugin.js +3 -5
  141. package/lib/html/HtmlGenerator.js +72 -87
  142. package/lib/html/HtmlModulesPlugin.js +418 -200
  143. package/lib/html/HtmlParser.js +110 -147
  144. package/lib/html/builtinEmbeddedRenderer.js +107 -0
  145. package/lib/html/data.js +142 -7
  146. package/lib/html/htmlMinify.js +92 -122
  147. package/lib/html/syntax.js +1618 -1391
  148. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  149. package/lib/index.js +49 -3
  150. package/lib/javascript/ChunkFormatHelpers.js +4 -3
  151. package/lib/javascript/JavascriptGenerator.js +8 -1
  152. package/lib/javascript/JavascriptModule.js +1 -0
  153. package/lib/javascript/JavascriptModulesPlugin.js +73 -72
  154. package/lib/javascript/JavascriptParser.js +1970 -900
  155. package/lib/javascript/StartupHelpers.js +27 -3
  156. package/lib/javascript/data.js +172 -0
  157. package/lib/javascript/grammar.js +5546 -0
  158. package/lib/javascript/parser.js +1500 -0
  159. package/lib/javascript/regexp.js +1762 -0
  160. package/lib/javascript/regexpData.js +51 -0
  161. package/lib/javascript/syntax.js +9061 -5262
  162. package/lib/json/JsonGenerator.js +7 -1
  163. package/lib/library/ModuleLibraryPlugin.js +171 -132
  164. package/lib/loaders/LoaderRunner.js +137 -9
  165. package/lib/node/NodeWatchFileSystem.js +3 -9
  166. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
  167. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
  168. package/lib/optimize/AggressiveMergingPlugin.js +3 -5
  169. package/lib/optimize/ConcatenatedModule.js +178 -120
  170. package/lib/optimize/ConstExportsPlugin.js +50 -39
  171. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
  172. package/lib/optimize/InlineExports.js +20 -123
  173. package/lib/optimize/InnerGraphPlugin.js +7 -13
  174. package/lib/optimize/LimitChunkCountPlugin.js +5 -8
  175. package/lib/optimize/MangleExportsPlugin.js +13 -4
  176. package/lib/optimize/ModuleConcatenationPlugin.js +27 -5
  177. package/lib/optimize/RealContentHashPlugin.js +68 -9
  178. package/lib/optimize/SideEffectsFlagPlugin.js +24 -28
  179. package/lib/optimize/SplitChunksPlugin.js +2 -4
  180. package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
  181. package/lib/performance/BroadContextsPlugin.js +1 -1
  182. package/lib/performance/CacheEffectivenessPlugin.js +7 -7
  183. package/lib/performance/DuplicateModulesPlugin.js +57 -13
  184. package/lib/performance/EvalUsagePlugin.js +5 -2
  185. package/lib/performance/MissingSourceMapsPlugin.js +115 -0
  186. package/lib/performance/PureAnnotationsPlugin.js +6 -3
  187. package/lib/performance/SizeLimitsPlugin.js +2 -4
  188. package/lib/performance/TopLevelThisPlugin.js +5 -4
  189. package/lib/performance/UnusedAssetsPlugin.js +109 -0
  190. package/lib/performance/UnusedFederationPlugin.js +147 -0
  191. package/lib/performance/UnusedModulesPlugin.js +141 -0
  192. package/lib/performance/UnusedReexportsPlugin.js +1 -55
  193. package/lib/performance/isOnlyReexported.js +65 -0
  194. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
  195. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +8 -8
  196. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
  197. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
  198. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
  199. package/lib/prefetch/ResourceHintPlugin.js +18 -23
  200. package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
  201. package/lib/prefetch/StartupAssetHintRuntimeModule.js +16 -10
  202. package/lib/rules/RuleSetCompiler.js +211 -4
  203. package/lib/runtime/AsyncModuleRuntimeModule.js +98 -66
  204. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
  205. package/lib/runtime/BaseUriRuntimeModule.js +9 -0
  206. package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
  207. package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
  208. package/lib/runtime/GetChunkFilenameRuntimeModule.js +12 -4
  209. package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
  210. package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
  211. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
  212. package/lib/runtime/GlobalRuntimeModule.js +11 -4
  213. package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
  214. package/lib/runtime/HelperRuntimeModule.js +10 -0
  215. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +305 -224
  216. package/lib/runtime/NonceRuntimeModule.js +9 -0
  217. package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
  218. package/lib/runtime/PublicPathRuntimeModule.js +9 -0
  219. package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
  220. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
  221. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
  222. package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
  223. package/lib/runtime/SystemContextRuntimeModule.js +9 -0
  224. package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
  225. package/lib/schemes/DataUriPlugin.js +3 -6
  226. package/lib/schemes/VirtualUrlPlugin.js +1 -1
  227. package/lib/serialization/BinaryMiddleware.js +9 -9
  228. package/lib/serialization/FileMiddleware.js +16 -16
  229. package/lib/serialization/ObjectMiddleware.js +168 -139
  230. package/lib/sharing/ConsumeSharedPlugin.js +12 -0
  231. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
  232. package/lib/sharing/ShareRuntimeModule.js +9 -0
  233. package/lib/sharing/declaredShared.js +47 -0
  234. package/lib/stats/DefaultStatsFactoryPlugin.js +6 -5
  235. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
  236. package/lib/typescript/TypeScriptPlugin.js +2 -3
  237. package/lib/url/URLParserPlugin.js +6 -8
  238. package/lib/util/LocConverter.js +4 -7
  239. package/lib/util/SourceProcessor.js +91 -91
  240. package/lib/util/async.js +292 -0
  241. package/lib/util/buildDiagnostics.js +69 -0
  242. package/lib/util/chainedImports.js +3 -4
  243. package/lib/util/concatenate.js +4 -4
  244. package/lib/util/createHooksRegistry.js +1 -2
  245. package/lib/util/dataURL.js +2 -3
  246. package/lib/util/deterministicGrouping.js +8 -13
  247. package/lib/util/findGraphRoots.js +6 -13
  248. package/lib/util/fs.js +27 -1
  249. package/lib/util/globUtils.js +1 -1
  250. package/lib/util/handlerKeys.js +40 -0
  251. package/lib/util/hash/wasm-hash.js +3 -4
  252. package/lib/util/identifier.js +20 -0
  253. package/lib/util/internalSerializables.js +5 -1
  254. package/lib/util/registerExternalSerializer.js +6 -45
  255. package/lib/util/semver.js +5 -3
  256. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +9 -0
  257. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -0
  258. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
  259. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
  260. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +12 -4
  261. package/lib/wasm-sync/WebAssemblyGenerator.js +6 -1
  262. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -1
  263. package/lib/wasm-sync/WebAssemblyUtils.js +2 -4
  264. package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
  265. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
  266. package/package.json +55 -46
  267. package/schemas/WebpackOptions.check.js +1 -1
  268. package/schemas/WebpackOptions.json +379 -66
  269. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  270. package/schemas/plugins/ManifestPlugin.check.js +1 -1
  271. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  272. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  273. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  274. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  275. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  276. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  277. package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
  278. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
  279. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  280. package/types.d.ts +1723 -604
  281. package/lib/dependencies/ExportBindingInitFragment.js +0 -191
  282. package/lib/errors/EntrypointOverlapWarning.js +0 -45
  283. package/lib/performance/EntrypointOverlapPlugin.js +0 -122
@@ -5,26 +5,26 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const asyncLib = require("neo-async");
9
8
  const { AsyncSeriesWaterfallHook, SyncWaterfallHook } = require("tapable");
10
- const ContextModule = require("./ContextModule");
11
- const ModuleFactory = require("./ModuleFactory");
12
- const ContextElementDependency = require("./dependencies/ContextElementDependency");
13
- const LazySet = require("./util/LazySet");
14
- const { cachedSetProperty } = require("./util/cleverMerge");
15
- const { createFakeHook } = require("./util/deprecation");
16
- const { join } = require("./util/fs");
9
+ const ModuleFactory = require("../ModuleFactory");
10
+ const ContextElementDependency = require("../dependencies/ContextElementDependency");
11
+ const LazySet = require("../util/LazySet");
12
+ const asyncLib = require("../util/async");
13
+ const { cachedSetProperty } = require("../util/cleverMerge");
14
+ const { createFakeHook } = require("../util/deprecation");
15
+ const { join } = require("../util/fs");
17
16
  const {
18
17
  globPatternBaseReachesDir,
19
18
  globUserRequest,
20
19
  isNonExhaustiveImportMetaGlobSkippedDir,
21
20
  resolveContextModuleGlobPattern
22
- } = require("./util/globUtils");
21
+ } = require("../util/globUtils");
22
+ const ContextModule = require("./ContextModule");
23
23
 
24
- /** @import { ResolvedContextModuleGlobPattern } from "./util/globUtils" */
24
+ /** @import { ResolvedContextModuleGlobPattern } from "../util/globUtils" */
25
25
  /** @typedef {(context: string, subResource: string, callback: () => void, resolvedGlobPatterns?: ResolvedContextModuleGlobPattern[]) => void} AddSubDirectoryFn */
26
26
  /** @import { ResolveRequest } from "enhanced-resolve" */
27
- /** @import { FileSystemDependencies } from "./Compilation" */
27
+ /** @import { FileSystemDependencies } from "../Compilation" */
28
28
  /**
29
29
  * @import {
30
30
  * ContextModuleOptions,
@@ -36,17 +36,17 @@ const {
36
36
  * @import {
37
37
  * ModuleFactoryCreateData,
38
38
  * ModuleFactoryCallback
39
- * } from "./ModuleFactory"
39
+ * } from "../ModuleFactory"
40
40
  */
41
- /** @import ResolverFactory from "./ResolverFactory" */
42
- /** @import ContextDependency from "./dependencies/ContextDependency" */
41
+ /** @import ResolverFactory from "../ResolverFactory" */
42
+ /** @import ContextDependency from "../dependencies/ContextDependency" */
43
43
 
44
44
  /**
45
45
  * Defines the shared type used by this module.
46
46
  * @template T
47
- * @typedef {import("./util/deprecation").FakeHook<T>} FakeHook<T>
47
+ * @typedef {import("../util/deprecation").FakeHook<T>} FakeHook<T>
48
48
  */
49
- /** @import { IStats, InputFileSystem } from "./util/fs" */
49
+ /** @import { IStats, InputFileSystem } from "../util/fs" */
50
50
  /** @typedef {{ context: string, request: string }} ContextAlternativeRequest */
51
51
 
52
52
  /**
@@ -531,11 +531,9 @@ class ContextModuleFactory extends ModuleFactory {
531
531
  }
532
532
  return callback();
533
533
  }
534
- // Collect for a single batched alternativeRequests call
535
- // per directory below. Calling the hook once per file
536
- // would pay per-call overhead (closure, resolverFactory
537
- // lookup, array allocations) for every file in the
538
- // context — which is the bulk of work on rebuilds.
534
+ // Collected for one batched `alternativeRequests` call per
535
+ // directory: calling the hook per file would pay its overhead
536
+ // across the whole context, the bulk of a rebuild.
539
537
  fileObjs.push({
540
538
  context: ctx,
541
539
  request: `.${subResource.slice(ctx.length).replace(/\\/g, "/")}`
@@ -5,10 +5,10 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const ContextElementDependency = require("./dependencies/ContextElementDependency");
9
- const { isAbsolute, join } = require("./util/fs");
8
+ const ContextElementDependency = require("../dependencies/ContextElementDependency");
9
+ const { isAbsolute, join } = require("../util/fs");
10
10
 
11
- /** @import Compiler from "./Compiler" */
11
+ /** @import Compiler from "../Compiler" */
12
12
  /** @import { ContextModuleOptions } from "./ContextModule" */
13
13
  /**
14
14
  * @import {
@@ -16,7 +16,7 @@ const { isAbsolute, join } = require("./util/fs");
16
16
  * AfterContextResolveData
17
17
  * } from "./ContextModuleFactory"
18
18
  */
19
- /** @import { InputFileSystem } from "./util/fs" */
19
+ /** @import { InputFileSystem } from "../util/fs" */
20
20
 
21
21
  /** @typedef {Record<string, string>} NewContentCreateContextMap */
22
22
 
@@ -32,6 +32,7 @@ const Template = require("../Template");
32
32
  const { getPresentKinds } = require("../TemplatedPathPlugin");
33
33
  const CssImportDependency = require("../dependencies/CssImportDependency");
34
34
  const HarmonyImportSideEffectDependency = require("../dependencies/HarmonyImportSideEffectDependency");
35
+ const LoaderImportDependency = require("../dependencies/LoaderImportDependency");
35
36
 
36
37
  const { encodeMappings } = require("../util/createMappings");
37
38
  const {
@@ -617,10 +618,21 @@ class CssGenerator extends Generator {
617
618
  generateError(error, module, generateContext) {
618
619
  switch (generateContext.type) {
619
620
  case JAVASCRIPT_TYPE: {
620
- return new RawSource(Generator.throwBuildErrorCode(error));
621
+ return new RawSource(
622
+ Generator.throwBuildErrorCode(
623
+ error,
624
+ undefined,
625
+ generateContext.runtimeTemplate.requestShortener
626
+ )
627
+ );
621
628
  }
622
629
  case CSS_TYPE: {
623
- return new RawSource(`/**\n ${error.message} \n**/`);
630
+ const message = Generator.buildErrorMessage(
631
+ error,
632
+ generateContext.runtimeTemplate.requestShortener
633
+ );
634
+
635
+ return new RawSource(`/**\n ${message} \n**/`);
624
636
  }
625
637
  default:
626
638
  return null;
@@ -668,6 +680,13 @@ class CssGenerator extends Generator {
668
680
  continue;
669
681
  }
670
682
 
683
+ // `importModule()` executes the module as JavaScript, and its dependency
684
+ // carries no origin module (`connectOrigin: false` in `LoaderPlugin`).
685
+ if (connection.dependency instanceof LoaderImportDependency) {
686
+ hasJs = true;
687
+ continue;
688
+ }
689
+
671
690
  if (!connection.originModule) {
672
691
  continue;
673
692
  }
@@ -1010,10 +1029,9 @@ class CssGenerator extends Generator {
1010
1029
  _cssToJsLiteral(cssSource, devtool, generateContext) {
1011
1030
  const { source, map } = cssSource.sourceAndMap();
1012
1031
  let content = /** @type {string} */ (source);
1013
- // A `renderEmbeddedSource` tap may hand back a mapped source whatever
1014
- // `devtool` says, so asking for no map at all is checked here too — this
1015
- // data URI would ship the sources inside the bundle. `hidden` is the same
1016
- // answer for the same reason.
1032
+ // A `renderEmbeddedSource` tap may return a mapped source whatever `devtool`
1033
+ // says, so wanting no map is checked here too: this data URI would ship the
1034
+ // sources inside the bundle. `hidden` answers the same.
1017
1035
  const wanted = typeof devtool === "string" && !devtool.includes("hidden");
1018
1036
  if (map && wanted) {
1019
1037
  const namedMap = this._nameMapSources(map, generateContext);
@@ -1074,11 +1092,9 @@ class CssGenerator extends Generator {
1074
1092
  result = cssSource;
1075
1093
  }
1076
1094
 
1077
- // Only text bound for a JS literal. `CSS_TEXT_TYPE` is an HTML inline
1078
- // `<style>` / `style=""`, and whether that is CSS at all depends on the
1079
- // element's `type` — a call the HTML layer makes and `htmlMinify` honors,
1080
- // which is not visible here. After the `@charset` prefix, so a tap sees a
1081
- // whole stylesheet.
1095
+ // Only text bound for a JS literal. Whether a `CSS_TEXT_TYPE` inline
1096
+ // `<style>` is CSS at all turns on the element's `type`, a call the HTML
1097
+ // layer makes. After the `@charset` prefix, so a tap sees a whole sheet.
1082
1098
  if (result && asJsLiteral) {
1083
1099
  result = this._renderEmbeddedSource(result, module, generateContext);
1084
1100
  }
@@ -30,6 +30,15 @@ class CssInjectStyleRuntimeModule extends RuntimeModule {
30
30
  this._runtimeRequirements = runtimeRequirements;
31
31
  }
32
32
 
33
+ /**
34
+ * The `[handlerMap, key]` pairs this module installs onto a chunk handler map
35
+ * such as `__webpack_require__.f`, or `null` where it cannot name them.
36
+ * @returns {[string, string][] | null} installed chunk handlers (do not mutate)
37
+ */
38
+ getInstalledChunkHandlers() {
39
+ return RuntimeModule.NO_CHUNK_HANDLERS;
40
+ }
41
+
33
42
  /**
34
43
  * Generates runtime code for this runtime module.
35
44
  * @returns {string | null} runtime code
@@ -15,6 +15,7 @@ const createHooksRegistry = require("../util/createHooksRegistry");
15
15
  const { chunkHasCss } = require("./CssModulesPlugin");
16
16
 
17
17
  /** @import Chunk, { ChunkId } from "../Chunk" */
18
+ /** @import ChunkGraph from "../ChunkGraph" */
18
19
  /** @import { ReadOnlyRuntimeRequirements } from "../Module" */
19
20
 
20
21
  const createCompilationHooks = () => ({
@@ -56,26 +57,14 @@ class CssLoadingRuntimeModule extends RuntimeModule {
56
57
  }
57
58
 
58
59
  /**
59
- * Generates runtime code for this runtime module.
60
- * @returns {string | null} runtime code
60
+ * The initial chunks carrying a stylesheet, and the matcher for the ones the
61
+ * handler can still be asked to load.
62
+ * @private
63
+ * @returns {{ initialChunkIds: Set<ChunkId>, hasCssMatcher: ReturnType<typeof compileBooleanMatcher> }} loadable chunks
61
64
  */
62
- generate() {
63
- const { _runtimeRequirements } = this;
64
- const compilation = /** @type {Compilation} */ (this.compilation);
65
+ _getLoadableChunks() {
65
66
  const chunk = /** @type {Chunk} */ (this.chunk);
66
- const {
67
- chunkGraph,
68
- runtimeTemplate,
69
- outputOptions: {
70
- crossOriginLoading,
71
- uniqueName,
72
- chunkLoadTimeout: loadTimeout,
73
- charset,
74
- resourceHints
75
- }
76
- } = compilation;
77
- const dedupePrefetch = Boolean(resourceHints && resourceHints.dedupe);
78
- const fn = RuntimeGlobals.ensureChunkHandlers;
67
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
79
68
  /** @type {Set<ChunkId>} */
80
69
  const initialChunkIds = new Set();
81
70
  for (const c of chunk.getAllInitialChunks()) {
@@ -96,6 +85,75 @@ class CssLoadingRuntimeModule extends RuntimeModule {
96
85
  compileBooleanMatcher(loadableConditionMap) === false
97
86
  ? false
98
87
  : compileBooleanMatcher(conditionMap);
88
+ return { initialChunkIds, hasCssMatcher };
89
+ }
90
+
91
+ /**
92
+ * The `[handlerMap, key]` pairs this module installs onto a chunk handler map
93
+ * such as `__webpack_require__.f`, or `null` where it cannot name them.
94
+ * @returns {[string, string][] | null} installed chunk handlers (do not mutate)
95
+ */
96
+ getInstalledChunkHandlers() {
97
+ const compilation = /** @type {Compilation} */ (this.compilation);
98
+ const chunk = /** @type {Chunk} */ (this.chunk);
99
+ const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
100
+ const runtimeRequirements = this._runtimeRequirements;
101
+ const withLoading =
102
+ runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers) &&
103
+ this._getLoadableChunks().hasCssMatcher !== false;
104
+ // Nothing at all is emitted without either, so nothing is installed either.
105
+ if (
106
+ !withLoading &&
107
+ !runtimeRequirements.has(RuntimeGlobals.hmrDownloadUpdateHandlers)
108
+ ) {
109
+ return [];
110
+ }
111
+ const withHint =
112
+ compilation.outputOptions.environment.document ||
113
+ compilation.runtimeTemplate.isNeutralPlatform();
114
+ /** @type {[string, string][]} */
115
+ const handlers = [];
116
+ if (withLoading) handlers.push([RuntimeGlobals.ensureChunkHandlers, "css"]);
117
+ if (
118
+ withHint &&
119
+ runtimeRequirements.has(RuntimeGlobals.prefetchChunkHandlers) &&
120
+ chunk.hasChildByOrder(chunkGraph, "prefetch", true, chunkHasCss)
121
+ ) {
122
+ handlers.push([RuntimeGlobals.prefetchChunkHandlers, "s"]);
123
+ }
124
+ if (
125
+ withHint &&
126
+ runtimeRequirements.has(RuntimeGlobals.preloadChunkHandlers) &&
127
+ (chunk.hasChildByOrder(chunkGraph, "preload", true, chunkHasCss) ||
128
+ chunk.hasChildByOrder(chunkGraph, "cssPreload", true, chunkHasCss))
129
+ ) {
130
+ handlers.push([RuntimeGlobals.preloadChunkHandlers, "s"]);
131
+ }
132
+ return handlers;
133
+ }
134
+
135
+ /**
136
+ * Generates runtime code for this runtime module.
137
+ * @returns {string | null} runtime code
138
+ */
139
+ generate() {
140
+ const { _runtimeRequirements } = this;
141
+ const compilation = /** @type {Compilation} */ (this.compilation);
142
+ const chunk = /** @type {Chunk} */ (this.chunk);
143
+ const {
144
+ chunkGraph,
145
+ runtimeTemplate,
146
+ outputOptions: {
147
+ crossOriginLoading,
148
+ uniqueName,
149
+ chunkLoadTimeout: loadTimeout,
150
+ charset,
151
+ resourceHints
152
+ }
153
+ } = compilation;
154
+ const dedupePrefetch = Boolean(resourceHints && resourceHints.dedupe);
155
+ const fn = RuntimeGlobals.ensureChunkHandlers;
156
+ const { initialChunkIds, hasCssMatcher } = this._getLoadableChunks();
99
157
 
100
158
  const withLoading =
101
159
  _runtimeRequirements.has(RuntimeGlobals.ensureChunkHandlers) &&
@@ -185,32 +243,22 @@ class CssLoadingRuntimeModule extends RuntimeModule {
185
243
  ",\n"
186
244
  )
187
245
  )}\n}`;
188
- /**
189
- * @param {string} id expression naming the chunk whose stylesheet is wanted
190
- * @returns {string} expression building its url at runtime
191
- */
192
- const runtimeCssUrl = (id) =>
193
- `${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(${id})`;
194
246
  // The url is read through a thunk so a runtime carrying many stylesheets builds
195
247
  // only the one it loads.
196
248
  /**
197
249
  * @param {string} id expression naming the chunk whose stylesheet is wanted
198
250
  * @returns {string} expression evaluating to its url
199
251
  */
200
- const cssUrl = (id) => {
201
- if (!cssUrls) return runtimeCssUrl(id);
202
- // An id the incomplete map lacks still resolves through the runtime lookup,
203
- // which the plugin kept required for exactly this case.
204
- return cssUrls.complete
205
- ? `cssUrls[${id}]()`
206
- : `(cssUrls[${id}] ? cssUrls[${id}]() : ${runtimeCssUrl(id)})`;
207
- };
252
+ const cssUrl = (id) =>
253
+ cssUrls === null
254
+ ? `${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(${id})`
255
+ : `cssUrls[${id}]()`;
208
256
  return Template.asString([
209
257
  ...(cssUrls
210
258
  ? [
211
259
  `${cst} cssUrls = {\n${Template.indent(
212
260
  Array.from(
213
- cssUrls.urls,
261
+ cssUrls,
214
262
  ([id, url]) =>
215
263
  `${JSON.stringify(String(id))}: ${runtimeTemplate.returningFunction(url)}`
216
264
  ).join(",\n")
@@ -395,6 +443,10 @@ class CssLoadingRuntimeModule extends RuntimeModule {
395
443
  ]
396
444
  )});`
397
445
  ]
446
+ // No fs to import, or a url `readFile` rejects on sight (a CDN public
447
+ // path): nothing to collect, which is what a missing file already means.
448
+ )}).catch(${runtimeTemplate.expressionFunction(
449
+ "loadingEnded({ type: 'load' })"
398
450
  )});`
399
451
  ]),
400
452
  "}"
@@ -552,6 +604,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
552
604
  Template.indent([
553
605
  // node SSR: refresh the server style registry from the re-emitted CSS instead of touching the DOM
554
606
  `${cst} cssRemovedChunks = css && css.r;`,
607
+ `${cst} cssNames = css && css.n;`,
555
608
  `${cst} registry = ${runtimeTemplate.cssServerStyleRegistry()};`,
556
609
  `chunkIds.forEach(${runtimeTemplate.basicFunction(
557
610
  "chunkId",
@@ -561,7 +614,7 @@ class CssLoadingRuntimeModule extends RuntimeModule {
561
614
  "cssRemovedChunks",
562
615
  "indexOf(chunkId)"
563
616
  )} >= 0) { delete registry[key]; return; }`,
564
- `${cst} url = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
617
+ `${cst} url = ${RuntimeGlobals.publicPath} + (cssNames && cssNames[chunkId] || ${RuntimeGlobals.getChunkCssFilename}(chunkId));`,
565
618
  `promises.push(Promise.all([import('fs'), import('url')]).then(${runtimeTemplate.basicFunction(
566
619
  "[{ readFile }, { URL }]",
567
620
  [
@@ -594,9 +647,14 @@ class CssLoadingRuntimeModule extends RuntimeModule {
594
647
  "applyHandlers.push(applyHandler);",
595
648
  "// Read CSS removed chunks from update manifest",
596
649
  `${cst} cssRemovedChunks = css && css.r;`,
650
+ // The name map this runtime holds is refreshed by the update chunk, which
651
+ // has not run yet, so a name that moved is read off the manifest.
652
+ `${cst} cssNames = css && css.n;`,
597
653
  `chunkIds.forEach(${runtimeTemplate.basicFunction("chunkId", [
598
- `${cst} url = ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(chunkId);`,
599
- `${cst} oldTag = loadStylesheet(chunkId, url);`,
654
+ `${cst} url = ${RuntimeGlobals.publicPath} + (cssNames && cssNames[chunkId] || ${RuntimeGlobals.getChunkCssFilename}(chunkId));`,
655
+ // The stylesheet in the document was loaded at the name this runtime
656
+ // still holds, so that is the name it is found by.
657
+ `${cst} oldTag = loadStylesheet(chunkId, ${RuntimeGlobals.publicPath} + ${RuntimeGlobals.getChunkCssFilename}(chunkId));`,
600
658
  `if(!oldTag && !${withHmr} ) return;`,
601
659
  "// Skip if CSS was removed",
602
660
  `if(${runtimeTemplate.optionalChaining(
@@ -197,7 +197,7 @@ class CssModule extends NormalModule {
197
197
  parserOptions: /** @type {EXPECTED_ANY} */ (null),
198
198
  generator: /** @type {EXPECTED_ANY} */ (null),
199
199
  generatorOptions: /** @type {EXPECTED_ANY} */ (null),
200
- resolveOptions: /** @type {EXPECTED_ANY} */ (null),
200
+ resolveOptions: undefined,
201
201
  cssLayer: /** @type {EXPECTED_ANY} */ (null),
202
202
  supports: /** @type {EXPECTED_ANY} */ (null),
203
203
  media: /** @type {EXPECTED_ANY} */ (null),
@@ -772,12 +772,13 @@ class CssModulesPlugin {
772
772
  // A baked url carries where the stylesheet is, so neither the public
773
773
  // path nor the name lookup is read for it. Asked exactly as the
774
774
  // loading runtime module asks, so the two always agree.
775
- const baked = compilation.runtimeTemplate.analyzableCssChunkUrls(
776
- chunk,
777
- chunkGraph,
778
- set
779
- );
780
- if (baked === null || !baked.complete) {
775
+ if (
776
+ compilation.runtimeTemplate.analyzableCssChunkUrls(
777
+ chunk,
778
+ chunkGraph,
779
+ set
780
+ ) === null
781
+ ) {
781
782
  set.add(RuntimeGlobals.publicPath);
782
783
  set.add(RuntimeGlobals.getChunkCssFilename);
783
784
  }