@depup/webpack 5.110.1-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 (304) 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/ChunkGraph.js +20 -18
  8. package/lib/CircularModulesPlugin.js +157 -55
  9. package/lib/CleanPlugin.js +2 -2
  10. package/lib/CompatibilityPlugin.js +3 -4
  11. package/lib/Compilation.js +337 -338
  12. package/lib/Compiler.js +213 -51
  13. package/lib/ConcatenationScope.js +25 -35
  14. package/lib/ConstPlugin.js +16 -132
  15. package/lib/CopyPlugin.js +1054 -0
  16. package/lib/DefinePlugin.js +24 -8
  17. package/lib/DependencyTemplate.js +2 -1
  18. package/lib/DotenvPlugin.js +64 -40
  19. package/lib/ErrorHelpers.js +113 -0
  20. package/lib/ExportsInfo.js +30 -16
  21. package/lib/ExternalModule.js +47 -22
  22. package/lib/FileSystemInfo.js +17 -14
  23. package/lib/FlagDependencyExportsPlugin.js +53 -34
  24. package/lib/FlagDependencyUsagePlugin.js +17 -15
  25. package/lib/Generator.js +24 -2
  26. package/lib/HotModuleReplacementPlugin.js +55 -7
  27. package/lib/IgnorePlugin.js +1 -1
  28. package/lib/JavascriptMetaInfoPlugin.js +5 -3
  29. package/lib/LoaderOptionsPlugin.js +1 -1
  30. package/lib/MainTemplate.js +5 -1
  31. package/lib/Module.js +19 -10
  32. package/lib/ModuleGraph.js +6 -9
  33. package/lib/MultiCompiler.js +7 -17
  34. package/lib/MultiWatching.js +1 -1
  35. package/lib/NormalModule.js +148 -70
  36. package/lib/NormalModuleFactory.js +1 -1
  37. package/lib/RuntimeGlobals.js +21 -7
  38. package/lib/RuntimeModule.js +28 -12
  39. package/lib/RuntimePlugin.js +33 -3
  40. package/lib/RuntimeTemplate.js +1147 -847
  41. package/lib/SourceMapDevToolPlugin.js +54 -104
  42. package/lib/TemplatedPathPlugin.js +16 -59
  43. package/lib/Watching.js +9 -0
  44. package/lib/WebpackOptionsApply.js +84 -91
  45. package/lib/asset/AssetBytesGenerator.js +7 -1
  46. package/lib/asset/AssetGenerator.js +50 -24
  47. package/lib/asset/AssetModule.js +3 -0
  48. package/lib/asset/AssetSourceGenerator.js +7 -1
  49. package/lib/asset/WebManifestParser.js +7 -5
  50. package/lib/async-modules/AsyncModuleHelpers.js +10 -4
  51. package/lib/buildChunkGraph.js +11 -15
  52. package/lib/cache/AddBuildDependenciesPlugin.js +33 -4
  53. package/lib/cache/IdleFileCachePlugin.js +2 -2
  54. package/lib/cache/MemoryCachePlugin.js +4 -4
  55. package/lib/cache/MemoryWithGcCachePlugin.js +7 -8
  56. package/lib/cache/PackFileCacheStrategy.js +17 -19
  57. package/lib/cache/getLazyHashedEtag.js +3 -5
  58. package/lib/config/browserslistTargetHandler.js +17 -4
  59. package/lib/config/defaults.js +162 -142
  60. package/lib/config/getClaimedAssetTypes.js +10 -11
  61. package/lib/config/normalization.js +100 -20
  62. package/lib/config/target.js +13 -4
  63. package/lib/container/ContainerReferencePlugin.js +6 -0
  64. package/lib/container/RemoteRuntimeModule.js +9 -0
  65. package/lib/container/declaredRemotes.js +39 -0
  66. package/lib/{ContextExclusionPlugin.js → context/ContextExclusionPlugin.js} +1 -1
  67. package/lib/{ContextModule.js → context/ContextModule.js} +54 -115
  68. package/lib/{ContextModuleFactory.js → context/ContextModuleFactory.js} +19 -21
  69. package/lib/{ContextReplacementPlugin.js → context/ContextReplacementPlugin.js} +4 -4
  70. package/lib/css/CssGenerator.js +27 -11
  71. package/lib/css/CssInjectStyleRuntimeModule.js +9 -0
  72. package/lib/css/CssLoadingRuntimeModule.js +92 -15
  73. package/lib/css/CssModule.js +1 -1
  74. package/lib/css/CssModulesPlugin.js +3 -10
  75. package/lib/css/CssParser.js +162 -31
  76. package/lib/css/CssServerStylesRuntimeModule.js +9 -0
  77. package/lib/css/cssMinify.js +43 -32
  78. package/lib/css/data.js +3526 -871
  79. package/lib/css/syntax.js +6455 -1237
  80. package/lib/debug/ProfilingPlugin.js +7 -4
  81. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +6 -3
  82. package/lib/dependencies/AMDRuntimeModules.js +18 -0
  83. package/lib/dependencies/CommonJsExportRequireDependency.js +13 -12
  84. package/lib/dependencies/CommonJsExportsParserPlugin.js +12 -13
  85. package/lib/dependencies/CommonJsImportsParserPlugin.js +5 -5
  86. package/lib/dependencies/CommonJsPlugin.js +19 -3
  87. package/lib/dependencies/CommonJsRequireDependency.js +32 -9
  88. package/lib/dependencies/CommonJsSelfReferenceDependency.js +2 -4
  89. package/lib/dependencies/ContextDependency.js +1 -1
  90. package/lib/dependencies/ContextDependencyHelpers.js +3 -9
  91. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +20 -7
  92. package/lib/dependencies/ContextElementDependency.js +1 -1
  93. package/lib/dependencies/CssIcssExportDependency.js +13 -9
  94. package/lib/dependencies/CssIcssImportDependency.js +3 -6
  95. package/lib/dependencies/CssUrlDependency.js +3 -5
  96. package/lib/dependencies/HarmonyCompatibilityDependency.js +67 -22
  97. package/lib/dependencies/HarmonyDetectionParserPlugin.js +3 -4
  98. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +10 -4
  99. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +12 -7
  100. package/lib/dependencies/HarmonyExportExpressionDependency.js +47 -33
  101. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +217 -34
  102. package/lib/dependencies/HarmonyExportInitFragment.js +110 -23
  103. package/lib/dependencies/HarmonyExportSpecifierDependency.js +25 -58
  104. package/lib/dependencies/HarmonyImportBareSideEffectDependency.js +59 -0
  105. package/lib/dependencies/HarmonyImportDependency.js +99 -41
  106. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +198 -25
  107. package/lib/dependencies/HarmonyImportSideEffectDependency.js +117 -4
  108. package/lib/dependencies/HarmonyImportSpecifierDependency.js +40 -3
  109. package/lib/dependencies/HarmonyModulesPlugin.js +20 -0
  110. package/lib/dependencies/HtmlEntryDependency.js +136 -104
  111. package/lib/dependencies/HtmlInlineScriptDependency.js +3 -4
  112. package/lib/dependencies/HtmlInlineStyleDependency.js +3 -4
  113. package/lib/dependencies/ImportContextDependency.js +43 -3
  114. package/lib/dependencies/ImportDependency.js +8 -29
  115. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -1
  116. package/lib/dependencies/ImportMetaGlobHelpers.js +1 -1
  117. package/lib/dependencies/ImportMetaMainDependency.js +104 -0
  118. package/lib/dependencies/ImportMetaPlugin.js +67 -25
  119. package/lib/dependencies/ImportParserPlugin.js +25 -15
  120. package/lib/dependencies/LoaderPlugin.js +26 -1
  121. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  122. package/lib/dependencies/RequireHeaderDependency.js +20 -21
  123. package/lib/dependencies/SystemRuntimeModule.js +9 -0
  124. package/lib/dependencies/URLContextDependency.js +1 -1
  125. package/lib/dependencies/URLDependency.js +6 -5
  126. package/lib/dependencies/WorkerAndWorkletPlugin.js +16 -21
  127. package/lib/dependencies/WorkerDependency.js +12 -18
  128. package/lib/dependencies/WorkletDependency.js +12 -20
  129. package/lib/dependencies/importOptionsCheck.js +47 -0
  130. package/lib/dll/DelegatedModule.js +18 -1
  131. package/lib/dll/DllReferencePlugin.js +11 -8
  132. package/lib/dll/LibManifestPlugin.js +1 -1
  133. package/lib/errors/AnalyzableBailoutsWarning.js +41 -0
  134. package/lib/errors/DotenvFileError.js +29 -0
  135. package/lib/errors/DuplicateModulesWarning.js +12 -7
  136. package/lib/errors/EmptyCopyPatternWarning.js +26 -0
  137. package/lib/errors/ExternalStarReexportError.js +44 -0
  138. package/lib/errors/HookWebpackError.js +3 -2
  139. package/lib/errors/ImportedBindingAssignmentError.js +30 -0
  140. package/lib/errors/MissingSourceMapsWarning.js +36 -0
  141. package/lib/errors/ModuleParseError.js +2 -1
  142. package/lib/errors/UnusedAssetsWarning.js +36 -0
  143. package/lib/errors/UnusedFederationWarning.js +35 -0
  144. package/lib/errors/UnusedModulesWarning.js +38 -0
  145. package/lib/esm/ExportWebpackRequireRuntimeModule.js +9 -0
  146. package/lib/esm/ModuleChunkFormatPlugin.js +28 -3
  147. package/lib/esm/ModuleChunkLoadingPlugin.js +21 -5
  148. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +91 -53
  149. package/lib/hmr/HotModuleReplacement.runtime.js +8 -2
  150. package/lib/hmr/HotModuleReplacementRuntimeModule.js +9 -0
  151. package/lib/hmr/LazyCompilationPlugin.js +3 -5
  152. package/lib/html/HtmlGenerator.js +72 -87
  153. package/lib/html/HtmlModulesPlugin.js +479 -215
  154. package/lib/html/HtmlParser.js +110 -147
  155. package/lib/html/builtinEmbeddedRenderer.js +107 -0
  156. package/lib/html/data.js +142 -7
  157. package/lib/html/htmlMinify.js +92 -122
  158. package/lib/html/syntax.js +2031 -1556
  159. package/lib/ids/HashedModuleIdsPlugin.js +2 -1
  160. package/lib/index.js +49 -3
  161. package/lib/javascript/ChunkFormatHelpers.js +4 -3
  162. package/lib/javascript/JavascriptGenerator.js +8 -1
  163. package/lib/javascript/JavascriptModule.js +1 -0
  164. package/lib/javascript/JavascriptModulesPlugin.js +76 -80
  165. package/lib/javascript/JavascriptParser.js +1970 -900
  166. package/lib/javascript/StartupHelpers.js +27 -3
  167. package/lib/javascript/data.js +172 -0
  168. package/lib/javascript/grammar.js +5546 -0
  169. package/lib/javascript/parser.js +1500 -0
  170. package/lib/javascript/regexp.js +1762 -0
  171. package/lib/javascript/regexpData.js +51 -0
  172. package/lib/javascript/syntax.js +9061 -5262
  173. package/lib/json/JsonGenerator.js +7 -1
  174. package/lib/library/ModuleLibraryPlugin.js +171 -132
  175. package/lib/loaders/LoaderRunner.js +170 -14
  176. package/lib/node/NodeWatchFileSystem.js +3 -9
  177. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -0
  178. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +8 -15
  179. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -0
  180. package/lib/optimize/AggressiveMergingPlugin.js +3 -5
  181. package/lib/optimize/ConcatenatedModule.js +222 -125
  182. package/lib/optimize/ConstExportsPlugin.js +50 -34
  183. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -11
  184. package/lib/optimize/InlineExports.js +20 -2
  185. package/lib/optimize/InnerGraphPlugin.js +7 -13
  186. package/lib/optimize/LimitChunkCountPlugin.js +5 -8
  187. package/lib/optimize/MangleExportsPlugin.js +13 -4
  188. package/lib/optimize/ModuleConcatenationPlugin.js +27 -5
  189. package/lib/optimize/RealContentHashPlugin.js +179 -44
  190. package/lib/optimize/SideEffectsFlagPlugin.js +24 -28
  191. package/lib/optimize/SplitChunksPlugin.js +2 -4
  192. package/lib/performance/AnalyzableBailoutsPlugin.js +115 -0
  193. package/lib/performance/BroadContextsPlugin.js +1 -1
  194. package/lib/performance/CacheEffectivenessPlugin.js +7 -7
  195. package/lib/performance/DuplicateModulesPlugin.js +57 -13
  196. package/lib/performance/EvalUsagePlugin.js +5 -2
  197. package/lib/performance/MissingSourceMapsPlugin.js +115 -0
  198. package/lib/performance/PureAnnotationsPlugin.js +6 -3
  199. package/lib/performance/SizeLimitsPlugin.js +2 -4
  200. package/lib/performance/TopLevelThisPlugin.js +5 -4
  201. package/lib/performance/UnusedAssetsPlugin.js +109 -0
  202. package/lib/performance/UnusedFederationPlugin.js +147 -0
  203. package/lib/performance/UnusedModulesPlugin.js +141 -0
  204. package/lib/performance/UnusedReexportsPlugin.js +1 -55
  205. package/lib/performance/isOnlyReexported.js +65 -0
  206. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +25 -5
  207. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +8 -8
  208. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +9 -0
  209. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +9 -0
  210. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +9 -0
  211. package/lib/prefetch/ResourceHintPlugin.js +29 -35
  212. package/lib/prefetch/ResourceHintRuntimeModule.js +9 -0
  213. package/lib/prefetch/StartupAssetHintRuntimeModule.js +16 -10
  214. package/lib/rules/RuleSetCompiler.js +211 -4
  215. package/lib/runtime/AsyncModuleRuntimeModule.js +103 -67
  216. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -0
  217. package/lib/runtime/BaseUriRuntimeModule.js +9 -0
  218. package/lib/runtime/ChunkNameRuntimeModule.js +9 -0
  219. package/lib/runtime/EnsureChunkRuntimeModule.js +35 -16
  220. package/lib/runtime/GetChunkFilenameRuntimeModule.js +12 -4
  221. package/lib/runtime/GetFullHashRuntimeModule.js +9 -0
  222. package/lib/runtime/GetMainFilenameRuntimeModule.js +9 -0
  223. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +9 -0
  224. package/lib/runtime/GlobalRuntimeModule.js +11 -4
  225. package/lib/runtime/HasOwnPropertyRuntimeModule.js +9 -0
  226. package/lib/runtime/HelperRuntimeModule.js +10 -0
  227. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +313 -222
  228. package/lib/runtime/NonceRuntimeModule.js +9 -0
  229. package/lib/runtime/OnChunksLoadedRuntimeModule.js +67 -20
  230. package/lib/runtime/PublicPathRuntimeModule.js +9 -0
  231. package/lib/runtime/RuntimeIdRuntimeModule.js +9 -0
  232. package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +90 -0
  233. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +9 -0
  234. package/lib/runtime/StartupEntrypointRuntimeModule.js +9 -0
  235. package/lib/runtime/SystemContextRuntimeModule.js +9 -0
  236. package/lib/runtime/ToBinaryRuntimeModule.js +9 -0
  237. package/lib/schemes/DataUriPlugin.js +3 -6
  238. package/lib/schemes/HttpUriPlugin.js +22 -5
  239. package/lib/schemes/VirtualUrlPlugin.js +1 -1
  240. package/lib/serialization/BinaryMiddleware.js +9 -9
  241. package/lib/serialization/FileMiddleware.js +31 -18
  242. package/lib/serialization/ObjectMiddleware.js +168 -139
  243. package/lib/sharing/ConsumeSharedPlugin.js +12 -0
  244. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -0
  245. package/lib/sharing/ShareRuntimeModule.js +9 -0
  246. package/lib/sharing/declaredShared.js +47 -0
  247. package/lib/stats/DefaultStatsFactoryPlugin.js +6 -5
  248. package/lib/stats/DefaultStatsPrinterPlugin.js +3 -0
  249. package/lib/typescript/TypeScriptPlugin.js +10 -13
  250. package/lib/url/URLParserPlugin.js +6 -8
  251. package/lib/util/ArrayQueue.js +3 -3
  252. package/lib/util/LocConverter.js +4 -7
  253. package/lib/util/SourceProcessor.js +115 -99
  254. package/lib/util/URLAbsoluteSpecifier.js +3 -1
  255. package/lib/util/async.js +292 -0
  256. package/lib/util/buildDiagnostics.js +69 -0
  257. package/lib/util/chainedImports.js +3 -4
  258. package/lib/util/concatenate.js +4 -4
  259. package/lib/util/conventions.js +5 -1
  260. package/lib/util/createHooksRegistry.js +1 -2
  261. package/lib/util/createMappings.js +25 -3
  262. package/lib/util/dataURL.js +2 -3
  263. package/lib/util/deterministicGrouping.js +8 -13
  264. package/lib/util/findGraphRoots.js +6 -13
  265. package/lib/util/fs.js +27 -1
  266. package/lib/util/globUtils.js +1 -1
  267. package/lib/util/handlerKeys.js +40 -0
  268. package/lib/util/hash/wasm-hash.js +3 -4
  269. package/lib/util/identifier.js +20 -0
  270. package/lib/util/internalSerializables.js +7 -1
  271. package/lib/util/registerExternalSerializer.js +6 -45
  272. package/lib/util/removeBOM.js +82 -1
  273. package/lib/util/semver.js +5 -3
  274. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +14 -3
  275. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +14 -3
  276. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -1
  277. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -1
  278. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +7 -12
  279. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +12 -4
  280. package/lib/wasm-sync/WebAssemblyGenerator.js +6 -1
  281. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -1
  282. package/lib/wasm-sync/WebAssemblyUtils.js +2 -4
  283. package/lib/web/FetchCompileAsyncWasmPlugin.js +10 -6
  284. package/lib/web/FetchCompileWasmPlugin.js +4 -2
  285. package/lib/web/JsonpChunkLoadingRuntimeModule.js +36 -0
  286. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +19 -0
  287. package/package.json +55 -46
  288. package/schemas/WebpackOptions.check.js +1 -1
  289. package/schemas/WebpackOptions.json +388 -76
  290. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  291. package/schemas/plugins/ManifestPlugin.check.js +1 -1
  292. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  293. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  294. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  295. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  296. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  297. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  298. package/schemas/plugins/dll/DllReferencePlugin.check.js +1 -1
  299. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -1
  300. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  301. package/types.d.ts +1795 -608
  302. package/lib/dependencies/ExportBindingInitFragment.js +0 -191
  303. package/lib/errors/EntrypointOverlapWarning.js +0 -45
  304. package/lib/performance/EntrypointOverlapPlugin.js +0 -122
@@ -7,12 +7,31 @@
7
7
  const RuntimeGlobals = require("../RuntimeGlobals");
8
8
  const RuntimeModule = require("../RuntimeModule");
9
9
  const Template = require("../Template");
10
+ const { getOnlyHandlerKey } = require("../util/handlerKeys");
11
+ const { propertyAccess } = require("../util/property");
10
12
 
11
13
  /** @import Compilation from "../Compilation" */
14
+ /** @import { ReadOnlyRuntimeRequirements } from "../Module" */
12
15
 
13
16
  class OnChunksLoadedRuntimeModule extends RuntimeModule {
14
- constructor() {
17
+ /**
18
+ * @param {ReadOnlyRuntimeRequirements} runtimeRequirements runtime requirements
19
+ */
20
+ constructor(runtimeRequirements) {
15
21
  super("chunk loaded");
22
+ /** @type {ReadOnlyRuntimeRequirements} */
23
+ this.runtimeRequirements = runtimeRequirements;
24
+ }
25
+
26
+ /**
27
+ * The `[handlerMap, key]` pairs this module installs onto a chunk handler map
28
+ * such as `__webpack_require__.f`, or `null` where it cannot name them.
29
+ * @returns {[string, string][] | null} installed chunk handlers (do not mutate)
30
+ */
31
+ getInstalledChunkHandlers() {
32
+ // Reads a map rather than installing onto one, so reading its code back would
33
+ // render it in a cycle.
34
+ return RuntimeModule.NO_CHUNK_HANDLERS;
16
35
  }
17
36
 
18
37
  /**
@@ -22,24 +41,38 @@ class OnChunksLoadedRuntimeModule extends RuntimeModule {
22
41
  generate() {
23
42
  const compilation = /** @type {Compilation} */ (this.compilation);
24
43
  const { runtimeTemplate } = compilation;
44
+ // Only a prefetch startup callback is queued behind a priority, so without one
45
+ // the queue keeps insertion order and nothing has to hold the lowest seen.
46
+ const withPriority = this.runtimeRequirements.has(
47
+ RuntimeGlobals.hasChunkPriority
48
+ );
49
+ const only = getOnlyHandlerKey(this, RuntimeGlobals.onChunksLoaded);
25
50
  return Template.asString([
26
51
  `${runtimeTemplate.renderConst()} deferred = [];`,
27
52
  `${RuntimeGlobals.onChunksLoaded} = ${runtimeTemplate.basicFunction(
28
- "result, chunkIds, fn, priority",
53
+ `result, chunkIds, fn${withPriority ? ", priority" : ""}`,
29
54
  [
30
55
  "if(chunkIds) {",
31
- Template.indent([
32
- `${runtimeTemplate.assignOr("priority", "0")};`,
33
- "for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];",
34
- "deferred[i] = [chunkIds, fn, priority];",
35
- "return;"
36
- ]),
56
+ Template.indent(
57
+ withPriority
58
+ ? [
59
+ `${runtimeTemplate.assignOr("priority", "0")};`,
60
+ "for(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];",
61
+ "deferred[i] = [chunkIds, fn, priority];",
62
+ "return;"
63
+ ]
64
+ : ["deferred.push([chunkIds, fn]);", "return;"]
65
+ ),
37
66
  "}",
38
- `${runtimeTemplate.renderLet()} notFulfilled = Infinity;`,
67
+ ...(withPriority
68
+ ? [`${runtimeTemplate.renderLet()} notFulfilled = Infinity;`]
69
+ : []),
39
70
  "for (var i = 0; i < deferred.length; i++) {",
40
71
  Template.indent([
41
72
  runtimeTemplate.destructureArray(
42
- ["chunkIds", "fn", "priority"],
73
+ withPriority
74
+ ? ["chunkIds", "fn", "priority"]
75
+ : ["chunkIds", "fn"],
43
76
  "deferred[i]"
44
77
  ),
45
78
  `${runtimeTemplate.renderLet()} fulfilled = true;`,
@@ -47,18 +80,32 @@ class OnChunksLoadedRuntimeModule extends RuntimeModule {
47
80
  Template.indent([
48
81
  // Parenthesized: `&` binds looser than `===`, so `priority & 1 === 0`
49
82
  // is `priority & false` and gates every priority, not just the odd ones.
50
- `if (((priority & 1) === 0 || notFulfilled >= priority) && Object.keys(${
51
- RuntimeGlobals.onChunksLoaded
52
- }).every(${runtimeTemplate.returningFunction(
53
- `${RuntimeGlobals.onChunksLoaded}[key](chunkIds[j])`,
54
- "key"
55
- )})) {`,
83
+ `if (${
84
+ withPriority
85
+ ? "((priority & 1) === 0 || notFulfilled >= priority) && "
86
+ : ""
87
+ }${
88
+ only === null
89
+ ? `Object.keys(${
90
+ RuntimeGlobals.onChunksLoaded
91
+ }).every(${runtimeTemplate.returningFunction(
92
+ `${RuntimeGlobals.onChunksLoaded}[key](chunkIds[j])`,
93
+ "key"
94
+ )})`
95
+ : `${RuntimeGlobals.onChunksLoaded}${propertyAccess([
96
+ only
97
+ ])}(chunkIds[j])`
98
+ }) {`,
56
99
  Template.indent(["chunkIds.splice(j--, 1);"]),
57
100
  "} else {",
58
- Template.indent([
59
- "fulfilled = false;",
60
- "if(priority < notFulfilled) notFulfilled = priority;"
61
- ]),
101
+ Template.indent(
102
+ withPriority
103
+ ? [
104
+ "fulfilled = false;",
105
+ "if(priority < notFulfilled) notFulfilled = priority;"
106
+ ]
107
+ : ["fulfilled = false;"]
108
+ ),
62
109
  "}"
63
110
  ]),
64
111
  "}",
@@ -30,6 +30,15 @@ class PublicPathRuntimeModule extends RuntimeModule {
30
30
  this.publicPath = publicPath;
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
@@ -25,6 +25,15 @@ class RuntimeIdRuntimeModule extends RuntimeModule {
25
25
  return false;
26
26
  }
27
27
 
28
+ /**
29
+ * The `[handlerMap, key]` pairs this module installs onto a chunk handler map
30
+ * such as `__webpack_require__.f`, or `null` where it cannot name them.
31
+ * @returns {[string, string][] | null} installed chunk handlers (do not mutate)
32
+ */
33
+ getInstalledChunkHandlers() {
34
+ return RuntimeModule.NO_CHUNK_HANDLERS;
35
+ }
36
+
28
37
  /**
29
38
  * Generates runtime code for this runtime module.
30
39
  * @returns {string | null} runtime code
@@ -0,0 +1,90 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ Author Alexander Akait @alexander-akait
4
+ */
5
+
6
+ "use strict";
7
+
8
+ const RuntimeGlobals = require("../RuntimeGlobals");
9
+ const Template = require("../Template");
10
+ const HelperRuntimeModule = require("./HelperRuntimeModule");
11
+
12
+ /** @import Compilation from "../Compilation" */
13
+
14
+ class SpecNamespaceObjectRuntimeModule extends HelperRuntimeModule {
15
+ constructor() {
16
+ super("spec namespace object");
17
+ }
18
+
19
+ /**
20
+ * Generates runtime code for this runtime module.
21
+ * @returns {string | null} runtime code
22
+ */
23
+ generate() {
24
+ const compilation = /** @type {Compilation} */ (this.compilation);
25
+ const { runtimeTemplate } = compilation;
26
+ const cst = runtimeTemplate.renderConst();
27
+ const lt = runtimeTemplate.renderLet();
28
+ const fn = RuntimeGlobals.specNamespaceObject;
29
+ return Template.asString([
30
+ `${fn} = ${runtimeTemplate.basicFunction("exports, record, mode", [
31
+ // One namespace per module: a module's own exports object identifies it,
32
+ // while a synthesized one is fresh per site, so its record identifies it.
33
+ `${cst} owner = record || exports;`,
34
+ `${lt} slots = ${fn}.c.get(owner);`,
35
+ `if (!slots) ${fn}.c.set(owner, (slots = { __proto__: null }));`,
36
+ // A synthesized namespace carries different names per mode, so one
37
+ // module can owe its importers more than one namespace.
38
+ `${cst} cached = slots[mode];`,
39
+ "if (cached) return cached;",
40
+ // The exports object keeps the live bindings; the sealed target
41
+ // carries only their names, so the traps stay invariant-safe.
42
+ `${cst} names = Object.getOwnPropertyNames(exports).filter(${runtimeTemplate.returningFunction(
43
+ "name !== '__esModule'",
44
+ "name"
45
+ )}).sort();`,
46
+ `${cst} target = { __proto__: null };`,
47
+ "for (var i = 0; i < names.length; i++) Object.defineProperty(target, names[i], { value: undefined, writable: true, enumerable: true, configurable: false });",
48
+ "Object.defineProperty(target, Symbol.toStringTag, { value: 'Module' });",
49
+ "Object.preventExtensions(target);",
50
+ `${cst} own = ${runtimeTemplate.returningFunction(
51
+ "typeof name === 'string' && Object.prototype.hasOwnProperty.call(target, name)",
52
+ "name"
53
+ )};`,
54
+ `${cst} ns = new Proxy(target, {`,
55
+ Template.indent([
56
+ "__proto__: null,",
57
+ "getPrototypeOf: function() { return null; },",
58
+ "setPrototypeOf: function(_, proto) { return proto === null; },",
59
+ "isExtensible: function() { return false; },",
60
+ "preventExtensions: function() { return true; },",
61
+ "get: function(_, name, receiver) { return own(name) ? exports[name] : Reflect.get(target, name, receiver); },",
62
+ "has: function(_, name) { return own(name) || Reflect.has(target, name); },",
63
+ "ownKeys: function() { return Reflect.ownKeys(target); },",
64
+ "getOwnPropertyDescriptor: function(_, name) { return own(name) ? { value: exports[name], writable: true, enumerable: true, configurable: false } : Reflect.getOwnPropertyDescriptor(target, name); },",
65
+ "set: function() { return false; },",
66
+ // A namespace may only be redefined to the descriptor it
67
+ // already reports, so anything else is rejected.
68
+ "defineProperty: function(_, name, descriptor) {",
69
+ Template.indent([
70
+ // Symbol keys are ordinary, so redefining Symbol.toStringTag
71
+ // to the descriptor it already has must still succeed.
72
+ "if (typeof name === 'symbol') return Reflect.defineProperty(target, name, descriptor);",
73
+ "if (!own(name) || 'get' in descriptor || 'set' in descriptor) return false;",
74
+ "if (descriptor.configurable === true || descriptor.enumerable === false || descriptor.writable === false) return false;",
75
+ "return !('value' in descriptor) || Object.is(descriptor.value, exports[name]);"
76
+ ]),
77
+ "},",
78
+ "deleteProperty: function(_, name) { return !own(name) && !Reflect.has(target, name); }"
79
+ ]),
80
+ "});",
81
+ "slots[mode] = ns;",
82
+ "return ns;"
83
+ ])};`,
84
+ // The same owner must always yield the same namespace.
85
+ `${fn}.c = new WeakMap();`
86
+ ]);
87
+ }
88
+ }
89
+
90
+ module.exports = SpecNamespaceObjectRuntimeModule;
@@ -23,6 +23,15 @@ class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
23
23
  this.asyncChunkLoading = asyncChunkLoading;
24
24
  }
25
25
 
26
+ /**
27
+ * The `[handlerMap, key]` pairs this module installs onto a chunk handler map
28
+ * such as `__webpack_require__.f`, or `null` where it cannot name them.
29
+ * @returns {[string, string][] | null} installed chunk handlers (do not mutate)
30
+ */
31
+ getInstalledChunkHandlers() {
32
+ return RuntimeModule.NO_CHUNK_HANDLERS;
33
+ }
34
+
26
35
  /**
27
36
  * Generates runtime code for this runtime module.
28
37
  * @returns {string | null} runtime code
@@ -31,6 +31,15 @@ class StartupEntrypointRuntimeModule extends RuntimeModule {
31
31
  this.asyncChunkLoading = asyncChunkLoading;
32
32
  }
33
33
 
34
+ /**
35
+ * The `[handlerMap, key]` pairs this module installs onto a chunk handler map
36
+ * such as `__webpack_require__.f`, or `null` where it cannot name them.
37
+ * @returns {[string, string][] | null} installed chunk handlers (do not mutate)
38
+ */
39
+ getInstalledChunkHandlers() {
40
+ return RuntimeModule.NO_CHUNK_HANDLERS;
41
+ }
42
+
34
43
  /**
35
44
  * Generates runtime code for this runtime module.
36
45
  * @returns {string | null} runtime code
@@ -22,6 +22,15 @@ class SystemContextRuntimeModule extends RuntimeModule {
22
22
  return false;
23
23
  }
24
24
 
25
+ /**
26
+ * The `[handlerMap, key]` pairs this module installs onto a chunk handler map
27
+ * such as `__webpack_require__.f`, or `null` where it cannot name them.
28
+ * @returns {[string, string][] | null} installed chunk handlers (do not mutate)
29
+ */
30
+ getInstalledChunkHandlers() {
31
+ return RuntimeModule.NO_CHUNK_HANDLERS;
32
+ }
33
+
25
34
  /**
26
35
  * Generates runtime code for this runtime module.
27
36
  * @returns {string | null} runtime code
@@ -16,6 +16,15 @@ class ToBinaryRuntimeModule extends RuntimeModule {
16
16
  super("to binary");
17
17
  }
18
18
 
19
+ /**
20
+ * The `[handlerMap, key]` pairs this module installs onto a chunk handler map
21
+ * such as `__webpack_require__.f`, or `null` where it cannot name them.
22
+ * @returns {[string, string][] | null} installed chunk handlers (do not mutate)
23
+ */
24
+ getInstalledChunkHandlers() {
25
+ return RuntimeModule.NO_CHUNK_HANDLERS;
26
+ }
27
+
19
28
  /**
20
29
  * Generates runtime code for this runtime module.
21
30
  * @returns {string | null} runtime code
@@ -34,12 +34,9 @@ class DataUriPlugin {
34
34
  );
35
35
  resourceData.data.encodedContent = match[4] || "";
36
36
  }
37
- // Inherit the issuer's resolution context so any nested
38
- // dependencies discovered while parsing the data URI's body
39
- // (e.g. `url(...)` / `@import` inside an inline CSS data
40
- // URI) resolve relative to where the URI was referenced
41
- // from, instead of against the synthetic `data:.../` path
42
- // that `getContext("data:…")` would otherwise infer.
37
+ // Inherit the issuer's resolution context, so a dependency found
38
+ // inside the data URI's body resolves against where the URI was
39
+ // referenced, not the synthetic `data:…` path.
43
40
  if (
44
41
  resourceData.context === undefined &&
45
42
  resolveData.context !== undefined
@@ -149,7 +149,8 @@ const verifyIntegrity = (content, integrity) => {
149
149
  };
150
150
 
151
151
  /**
152
- * Parses key value pairs.
152
+ * Parses key value pairs. Keys are lower-cased because HTTP directive names are
153
+ * case-insensitive; values are kept verbatim (they may be quoted field lists).
153
154
  * @param {string} str input
154
155
  * @returns {Record<string, string>} parsed
155
156
  */
@@ -159,11 +160,11 @@ const parseKeyValuePairs = (str) => {
159
160
  for (const item of str.split(",")) {
160
161
  const i = item.indexOf("=");
161
162
  if (i >= 0) {
162
- const key = item.slice(0, i).trim();
163
+ const key = item.slice(0, i).trim().toLowerCase();
163
164
  const value = item.slice(i + 1).trim();
164
165
  result[key] = value;
165
166
  } else {
166
- const key = item.trim();
167
+ const key = item.trim().toLowerCase();
167
168
  if (!key) continue;
168
169
  result[key] = key;
169
170
  }
@@ -186,7 +187,9 @@ const parseCacheControl = (cacheControl, requestTime) => {
186
187
  let validUntil = 0;
187
188
  if (cacheControl) {
188
189
  const parsed = parseKeyValuePairs(cacheControl);
189
- if (parsed["no-cache"]) storeCache = storeLock = false;
190
+ if (parsed["no-cache"] || parsed["no-store"]) {
191
+ storeCache = storeLock = false;
192
+ }
190
193
  if (parsed["max-age"] && !Number.isNaN(Number(parsed["max-age"]))) {
191
194
  validUntil = requestTime + Number(parsed["max-age"]) * 1000;
192
195
  }
@@ -984,7 +987,11 @@ class HttpUriPlugin {
984
987
  /** @type {Buffer[]} */
985
988
  const bufferArr = [];
986
989
 
987
- const contentEncoding = res.headers["content-encoding"];
990
+ // content codings are case-insensitive tokens
991
+ const contentEncodingHeader = res.headers["content-encoding"];
992
+ const contentEncoding =
993
+ contentEncodingHeader &&
994
+ contentEncodingHeader.trim().toLowerCase();
988
995
  /** @type {Readable} */
989
996
  let stream = res;
990
997
  if (contentEncoding === "gzip") {
@@ -994,6 +1001,16 @@ class HttpUriPlugin {
994
1001
  } else if (contentEncoding === "deflate") {
995
1002
  stream = stream.pipe(createInflate());
996
1003
  }
1004
+ if (stream !== res) {
1005
+ // a decompressor error never reaches the request's handler
1006
+ stream.once("error", (err) => {
1007
+ logger.log(
1008
+ `GET ${url} [${res.statusCode}] (invalid encoding)`
1009
+ );
1010
+ err.message += `\nwhile decompressing ${url}`;
1011
+ callback(err);
1012
+ });
1013
+ }
997
1014
 
998
1015
  stream.on(
999
1016
  "data",
@@ -36,7 +36,7 @@ const PLUGIN_NAME = "VirtualUrlPlugin";
36
36
  /**
37
37
  * Defines the loader context type used by this module.
38
38
  * @template T
39
- * @typedef {import("../../declarations/LoaderContext").LoaderContext<T>} LoaderContext
39
+ * @typedef {import("../NormalModule").LoaderContext<T>} LoaderContext
40
40
  */
41
41
 
42
42
  /**
@@ -2,15 +2,6 @@
2
2
  MIT License http://www.opensource.org/licenses/mit-license.php
3
3
  */
4
4
 
5
- "use strict";
6
-
7
- const { deserialize: v8Deserialize, serialize: v8Serialize } = require("v8");
8
- const memoize = require("../util/memoize");
9
- const SerializerMiddleware = require("./SerializerMiddleware");
10
-
11
- /** @typedef {import("./types").PrimitiveSerializableType} PrimitiveSerializableType */
12
- /** @import { BufferSerializableType } from "./types" */
13
-
14
5
  /*
15
6
  Format:
16
7
 
@@ -28,6 +19,15 @@ ValuesHeaderByte -> 0xf1
28
19
  LazyHeaderByte -> 0xf2
29
20
  */
30
21
 
22
+ "use strict";
23
+
24
+ const { deserialize: v8Deserialize, serialize: v8Serialize } = require("v8");
25
+ const memoize = require("../util/memoize");
26
+ const SerializerMiddleware = require("./SerializerMiddleware");
27
+
28
+ /** @typedef {import("./types").PrimitiveSerializableType} PrimitiveSerializableType */
29
+ /** @import { BufferSerializableType } from "./types" */
30
+
31
31
  const VALUES_HEADER = 0xf1;
32
32
  const LAZY_HEADER = 0xf2;
33
33
 
@@ -2,6 +2,22 @@
2
2
  MIT License http://www.opensource.org/licenses/mit-license.php
3
3
  */
4
4
 
5
+ /*
6
+ Format:
7
+
8
+ File -> Header Section*
9
+
10
+ Version -> u32
11
+ AmountOfSections -> u32
12
+ SectionSize -> i32 (if less than zero represents lazy value)
13
+
14
+ Header -> Version AmountOfSections SectionSize*
15
+
16
+ Buffer -> n bytes
17
+ Section -> Buffer
18
+
19
+ */
20
+
5
21
  "use strict";
6
22
 
7
23
  const { constants } = require("buffer");
@@ -35,22 +51,6 @@ const SerializerMiddleware = require("./SerializerMiddleware");
35
51
  /** @import { IStats, IntermediateFileSystem } from "../util/fs" */
36
52
  /** @import { BufferSerializableType } from "./types" */
37
53
 
38
- /*
39
- Format:
40
-
41
- File -> Header Section*
42
-
43
- Version -> u32
44
- AmountOfSections -> u32
45
- SectionSize -> i32 (if less than zero represents lazy value)
46
-
47
- Header -> Version AmountOfSections SectionSize*
48
-
49
- Buffer -> n bytes
50
- Section -> Buffer
51
-
52
- */
53
-
54
54
  // "wpc" + 1 in little-endian
55
55
  const VERSION = 0x01637077;
56
56
  const WRITE_LIMIT_TOTAL = 0x7fff0000;
@@ -549,9 +549,13 @@ class FileMiddleware extends SerializerMiddleware {
549
549
  });
550
550
  }
551
551
  if (compression) {
552
- pipeline(compression, stream, reject);
552
+ // resolve on the pipeline, not on the transform's "finish":
553
+ // the latter fires before the destination has flushed
554
+ pipeline(compression, stream, (err) => {
555
+ if (err) return reject(err);
556
+ resolve();
557
+ });
553
558
  stream = compression;
554
- stream.on("finish", () => resolve());
555
559
  } else {
556
560
  stream.on("error", (err) => reject(err));
557
561
  stream.on("finish", () => resolve());
@@ -793,6 +797,15 @@ class FileMiddleware extends SerializerMiddleware {
793
797
  });
794
798
  return;
795
799
  }
800
+ // a file truncated after `stat` reads 0 bytes forever
801
+ if (bytesRead === 0 && remaining > 0) {
802
+ this.fs.close(fd, (err) => {
803
+ reject(
804
+ err || new Error(`Unexpected end of file ${file}`)
805
+ );
806
+ });
807
+ return;
808
+ }
796
809
  /** @type {number} */
797
810
  (currentBufferUsed) += bytesRead;
798
811
  remaining -= bytesRead;