webpack 5.99.8 → 5.100.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 (314) hide show
  1. package/README.md +0 -3
  2. package/bin/webpack.js +8 -2
  3. package/hot/log.js +15 -15
  4. package/hot/poll.js +1 -0
  5. package/lib/APIPlugin.js +3 -3
  6. package/lib/AbstractMethodError.js +1 -0
  7. package/lib/AutomaticPrefetchPlugin.js +1 -0
  8. package/lib/BannerPlugin.js +1 -1
  9. package/lib/CacheFacade.js +2 -1
  10. package/lib/CaseSensitiveModulesWarning.js +4 -4
  11. package/lib/Chunk.js +6 -6
  12. package/lib/ChunkGraph.js +37 -32
  13. package/lib/ChunkGroup.js +17 -10
  14. package/lib/ChunkTemplate.js +1 -1
  15. package/lib/CleanPlugin.js +94 -17
  16. package/lib/CodeGenerationResults.js +1 -1
  17. package/lib/CompatibilityPlugin.js +5 -2
  18. package/lib/Compilation.js +77 -71
  19. package/lib/Compiler.js +46 -16
  20. package/lib/ConcatenationScope.js +15 -6
  21. package/lib/ConstPlugin.js +65 -45
  22. package/lib/ContextModule.js +16 -12
  23. package/lib/ContextModuleFactory.js +4 -3
  24. package/lib/ContextReplacementPlugin.js +4 -2
  25. package/lib/CssModule.js +2 -3
  26. package/lib/DefinePlugin.js +111 -3
  27. package/lib/DelegatedModuleFactoryPlugin.js +18 -18
  28. package/lib/Dependency.js +16 -12
  29. package/lib/DependencyTemplate.js +1 -0
  30. package/lib/DllEntryPlugin.js +3 -1
  31. package/lib/DllPlugin.js +4 -3
  32. package/lib/DllReferencePlugin.js +2 -2
  33. package/lib/DynamicEntryPlugin.js +1 -1
  34. package/lib/EntryOptionPlugin.js +5 -0
  35. package/lib/ErrorHelpers.js +4 -4
  36. package/lib/EvalDevToolModulePlugin.js +3 -3
  37. package/lib/EvalSourceMapDevToolPlugin.js +7 -7
  38. package/lib/ExportsInfo.js +48 -39
  39. package/lib/ExternalModule.js +15 -11
  40. package/lib/ExternalModuleFactoryPlugin.js +5 -2
  41. package/lib/FileSystemInfo.js +51 -38
  42. package/lib/FlagDependencyExportsPlugin.js +14 -7
  43. package/lib/FlagDependencyUsagePlugin.js +1 -1
  44. package/lib/Generator.js +14 -1
  45. package/lib/HookWebpackError.js +1 -0
  46. package/lib/HotModuleReplacementPlugin.js +77 -50
  47. package/lib/IgnorePlugin.js +1 -1
  48. package/lib/InvalidDependenciesModuleWarning.js +1 -1
  49. package/lib/JavascriptMetaInfoPlugin.js +0 -1
  50. package/lib/LibManifestPlugin.js +4 -2
  51. package/lib/LoaderOptionsPlugin.js +6 -4
  52. package/lib/MainTemplate.js +2 -2
  53. package/lib/Module.js +21 -6
  54. package/lib/ModuleFactory.js +1 -0
  55. package/lib/ModuleGraph.js +24 -2
  56. package/lib/ModuleGraphConnection.js +5 -5
  57. package/lib/ModuleInfoHeaderPlugin.js +2 -1
  58. package/lib/ModuleParseError.js +1 -0
  59. package/lib/ModuleSourceTypesConstants.js +12 -12
  60. package/lib/ModuleTemplate.js +1 -1
  61. package/lib/ModuleTypeConstants.js +21 -21
  62. package/lib/MultiCompiler.js +6 -6
  63. package/lib/NormalModule.js +61 -56
  64. package/lib/NormalModuleFactory.js +52 -37
  65. package/lib/NormalModuleReplacementPlugin.js +1 -1
  66. package/lib/NullFactory.js +1 -0
  67. package/lib/OptimizationStages.js +1 -1
  68. package/lib/Parser.js +1 -0
  69. package/lib/ProgressPlugin.js +12 -5
  70. package/lib/ProvidePlugin.js +5 -1
  71. package/lib/RecordIdsPlugin.js +3 -3
  72. package/lib/RuntimeGlobals.js +175 -155
  73. package/lib/RuntimeModule.js +1 -0
  74. package/lib/RuntimePlugin.js +34 -8
  75. package/lib/RuntimeTemplate.js +111 -11
  76. package/lib/SourceMapDevToolModuleOptionsPlugin.js +15 -25
  77. package/lib/SourceMapDevToolPlugin.js +19 -17
  78. package/lib/Template.js +2 -2
  79. package/lib/TemplatedPathPlugin.js +1 -1
  80. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  81. package/lib/WatchIgnorePlugin.js +4 -3
  82. package/lib/WebpackIsIncludedPlugin.js +2 -1
  83. package/lib/WebpackOptionsApply.js +115 -27
  84. package/lib/asset/AssetGenerator.js +26 -21
  85. package/lib/asset/AssetModulesPlugin.js +19 -17
  86. package/lib/asset/AssetSourceGenerator.js +11 -9
  87. package/lib/asset/RawDataUrlModule.js +4 -2
  88. package/lib/async-modules/AwaitDependenciesInitFragment.js +1 -1
  89. package/lib/buildChunkGraph.js +6 -3
  90. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  91. package/lib/cache/IdleFileCachePlugin.js +7 -4
  92. package/lib/cache/MemoryCachePlugin.js +1 -0
  93. package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
  94. package/lib/cache/PackFileCacheStrategy.js +26 -20
  95. package/lib/cache/ResolverCachePlugin.js +16 -8
  96. package/lib/cli.js +15 -10
  97. package/lib/config/browserslistTargetHandler.js +3 -3
  98. package/lib/config/defaults.js +25 -17
  99. package/lib/config/normalization.js +2 -1
  100. package/lib/config/target.js +6 -5
  101. package/lib/container/ContainerPlugin.js +1 -1
  102. package/lib/container/ContainerReferencePlugin.js +1 -1
  103. package/lib/container/FallbackModule.js +2 -1
  104. package/lib/container/HoistContainerReferencesPlugin.js +1 -1
  105. package/lib/container/ModuleFederationPlugin.js +2 -2
  106. package/lib/container/RemoteModule.js +1 -1
  107. package/lib/css/CssGenerator.js +9 -6
  108. package/lib/css/CssModulesPlugin.js +44 -31
  109. package/lib/css/CssParser.js +6 -4
  110. package/lib/css/walkCssTokens.js +33 -37
  111. package/lib/debug/ProfilingPlugin.js +6 -6
  112. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +8 -8
  113. package/lib/dependencies/AMDPlugin.js +12 -8
  114. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -26
  115. package/lib/dependencies/CachedConstDependency.js +1 -5
  116. package/lib/dependencies/CommonJsExportRequireDependency.js +6 -4
  117. package/lib/dependencies/CommonJsExportsParserPlugin.js +22 -25
  118. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -9
  119. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -114
  120. package/lib/dependencies/CommonJsPlugin.js +15 -16
  121. package/lib/dependencies/ContextDependencyHelpers.js +2 -1
  122. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -0
  123. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
  124. package/lib/dependencies/CssIcssExportDependency.js +1 -1
  125. package/lib/dependencies/CssLocalIdentifierDependency.js +2 -2
  126. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  127. package/lib/dependencies/CssUrlDependency.js +1 -1
  128. package/lib/dependencies/DynamicExports.js +9 -9
  129. package/lib/dependencies/ExportsInfoDependency.js +1 -1
  130. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +122 -101
  131. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  132. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +95 -19
  133. package/lib/dependencies/HarmonyExportInitFragment.js +1 -1
  134. package/lib/dependencies/HarmonyImportDependency.js +11 -5
  135. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +238 -162
  136. package/lib/dependencies/HarmonyImportSideEffectDependency.js +4 -1
  137. package/lib/dependencies/HarmonyImportSpecifierDependency.js +20 -9
  138. package/lib/dependencies/HarmonyModulesPlugin.js +23 -12
  139. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +1 -0
  140. package/lib/dependencies/ImportMetaContextPlugin.js +2 -1
  141. package/lib/dependencies/ImportMetaPlugin.js +2 -2
  142. package/lib/dependencies/ImportParserPlugin.js +40 -9
  143. package/lib/dependencies/ImportPlugin.js +3 -1
  144. package/lib/dependencies/LoaderPlugin.js +1 -0
  145. package/lib/dependencies/ModuleDependency.js +1 -1
  146. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  147. package/lib/dependencies/RequireContextPlugin.js +3 -1
  148. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +3 -0
  149. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  150. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  151. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  152. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  153. package/lib/dependencies/SystemPlugin.js +1 -1
  154. package/lib/dependencies/URLContextDependency.js +65 -0
  155. package/lib/dependencies/URLDependency.js +1 -1
  156. package/lib/dependencies/URLPlugin.js +17 -157
  157. package/lib/dependencies/WorkerPlugin.js +23 -10
  158. package/lib/dependencies/processExportInfo.js +2 -1
  159. package/lib/esm/ModuleChunkFormatPlugin.js +269 -185
  160. package/lib/esm/ModuleChunkLoadingPlugin.js +39 -1
  161. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +73 -6
  162. package/lib/hmr/HotModuleReplacement.runtime.js +0 -1
  163. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  164. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  165. package/lib/hmr/LazyCompilationPlugin.js +4 -2
  166. package/lib/hmr/lazyCompilationBackend.js +4 -2
  167. package/lib/ids/ChunkModuleIdRangePlugin.js +6 -3
  168. package/lib/ids/DeterministicChunkIdsPlugin.js +30 -35
  169. package/lib/ids/DeterministicModuleIdsPlugin.js +4 -3
  170. package/lib/ids/HashedModuleIdsPlugin.js +5 -4
  171. package/lib/ids/IdHelpers.js +21 -17
  172. package/lib/ids/NamedChunkIdsPlugin.js +5 -5
  173. package/lib/ids/NamedModuleIdsPlugin.js +4 -4
  174. package/lib/ids/NaturalChunkIdsPlugin.js +2 -1
  175. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  176. package/lib/ids/OccurrenceChunkIdsPlugin.js +3 -2
  177. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  178. package/lib/ids/SyncModuleIdsPlugin.js +1 -1
  179. package/lib/index.js +13 -3
  180. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +113 -119
  181. package/lib/javascript/BasicEvaluatedExpression.js +2 -1
  182. package/lib/javascript/ChunkHelpers.js +1 -0
  183. package/lib/javascript/CommonJsChunkFormatPlugin.js +121 -136
  184. package/lib/javascript/EnableChunkLoadingPlugin.js +6 -3
  185. package/lib/javascript/JavascriptGenerator.js +14 -2
  186. package/lib/javascript/JavascriptModulesPlugin.js +68 -27
  187. package/lib/javascript/JavascriptParser.js +136 -81
  188. package/lib/javascript/JavascriptParserHelpers.js +41 -41
  189. package/lib/javascript/StartupHelpers.js +17 -17
  190. package/lib/json/JsonGenerator.js +4 -2
  191. package/lib/json/JsonModulesPlugin.js +2 -2
  192. package/lib/json/JsonParser.js +1 -1
  193. package/lib/library/AbstractLibraryPlugin.js +6 -2
  194. package/lib/library/AssignLibraryPlugin.js +21 -6
  195. package/lib/library/EnableLibraryPlugin.js +23 -3
  196. package/lib/library/ModuleLibraryPlugin.js +4 -1
  197. package/lib/library/UmdLibraryPlugin.js +15 -6
  198. package/lib/logging/createConsoleLogger.js +3 -3
  199. package/lib/logging/runtime.js +9 -9
  200. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +4 -22
  201. package/lib/node/RequireChunkLoadingRuntimeModule.js +4 -22
  202. package/lib/node/nodeConsole.js +4 -2
  203. package/lib/optimize/AggressiveMergingPlugin.js +45 -46
  204. package/lib/optimize/AggressiveSplittingPlugin.js +13 -12
  205. package/lib/optimize/ConcatenatedModule.js +227 -57
  206. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  207. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -1
  208. package/lib/optimize/InnerGraph.js +115 -112
  209. package/lib/optimize/InnerGraphPlugin.js +2 -2
  210. package/lib/optimize/LimitChunkCountPlugin.js +4 -2
  211. package/lib/optimize/MangleExportsPlugin.js +4 -3
  212. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  213. package/lib/optimize/MinChunkSizePlugin.js +6 -3
  214. package/lib/optimize/ModuleConcatenationPlugin.js +31 -22
  215. package/lib/optimize/RealContentHashPlugin.js +26 -20
  216. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
  217. package/lib/optimize/RemoveParentModulesPlugin.js +1 -0
  218. package/lib/optimize/SideEffectsFlagPlugin.js +6 -3
  219. package/lib/optimize/SplitChunksPlugin.js +16 -13
  220. package/lib/rules/BasicEffectRulePlugin.js +4 -2
  221. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  222. package/lib/rules/ObjectMatcherRulePlugin.js +3 -1
  223. package/lib/rules/RuleSetCompiler.js +7 -4
  224. package/lib/rules/UseEffectRulePlugin.js +3 -1
  225. package/lib/runtime/AsyncModuleRuntimeModule.js +64 -9
  226. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  227. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +214 -0
  228. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  229. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +8 -7
  230. package/lib/schemes/DataUriPlugin.js +3 -1
  231. package/lib/schemes/FileUriPlugin.js +1 -1
  232. package/lib/schemes/HttpUriPlugin.js +27 -19
  233. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  234. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  235. package/lib/serialization/BinaryMiddleware.js +5 -4
  236. package/lib/serialization/FileMiddleware.js +7 -4
  237. package/lib/serialization/ObjectMiddleware.js +14 -8
  238. package/lib/serialization/Serializer.js +5 -3
  239. package/lib/serialization/SerializerMiddleware.js +2 -0
  240. package/lib/sharing/ConsumeSharedModule.js +1 -1
  241. package/lib/sharing/ConsumeSharedPlugin.js +3 -3
  242. package/lib/sharing/ConsumeSharedRuntimeModule.js +2 -2
  243. package/lib/sharing/ProvideSharedModule.js +1 -1
  244. package/lib/sharing/ProvideSharedPlugin.js +6 -3
  245. package/lib/sharing/SharePlugin.js +2 -1
  246. package/lib/sharing/ShareRuntimeModule.js +3 -5
  247. package/lib/sharing/utils.js +34 -34
  248. package/lib/stats/DefaultStatsFactoryPlugin.js +49 -46
  249. package/lib/stats/DefaultStatsPresetPlugin.js +4 -2
  250. package/lib/stats/DefaultStatsPrinterPlugin.js +28 -22
  251. package/lib/stats/StatsFactory.js +4 -2
  252. package/lib/stats/StatsPrinter.js +3 -2
  253. package/lib/url/URLParserPlugin.js +266 -0
  254. package/lib/util/ArrayQueue.js +1 -1
  255. package/lib/util/AsyncQueue.js +1 -1
  256. package/lib/util/Hash.js +2 -0
  257. package/lib/util/IterableHelpers.js +1 -1
  258. package/lib/util/LazyBucketSortedSet.js +2 -1
  259. package/lib/util/LazySet.js +11 -6
  260. package/lib/util/ParallelismFactorCalculator.js +1 -1
  261. package/lib/util/SetHelpers.js +3 -3
  262. package/lib/util/SortableSet.js +2 -2
  263. package/lib/util/StackedCacheMap.js +3 -1
  264. package/lib/util/StackedMap.js +2 -2
  265. package/lib/util/StringXor.js +1 -0
  266. package/lib/util/TupleSet.js +1 -0
  267. package/lib/util/URLAbsoluteSpecifier.js +1 -1
  268. package/lib/util/cleverMerge.js +12 -8
  269. package/lib/util/comparators.js +154 -127
  270. package/lib/util/compileBooleanMatcher.js +8 -3
  271. package/lib/util/concatenate.js +8 -7
  272. package/lib/util/conventions.js +72 -73
  273. package/lib/util/create-schema-validation.js +2 -1
  274. package/lib/util/createHash.js +10 -4
  275. package/lib/util/deprecation.js +69 -66
  276. package/lib/util/deterministicGrouping.js +4 -2
  277. package/lib/util/extractUrlAndGlobal.js +1 -1
  278. package/lib/util/findGraphRoots.js +2 -2
  279. package/lib/util/fs.js +30 -23
  280. package/lib/util/hash/md4.js +2 -2
  281. package/lib/util/hash/wasm-hash.js +4 -2
  282. package/lib/util/identifier.js +13 -12
  283. package/lib/util/internalSerializables.js +2 -0
  284. package/lib/util/magicComment.js +5 -5
  285. package/lib/util/processAsyncTree.js +1 -1
  286. package/lib/util/propertyAccess.js +1 -1
  287. package/lib/util/propertyName.js +1 -1
  288. package/lib/util/registerExternalSerializer.js +1 -2
  289. package/lib/util/removeBOM.js +1 -1
  290. package/lib/util/runtime.js +29 -21
  291. package/lib/util/semver.js +1 -1
  292. package/lib/util/serialization.js +3 -0
  293. package/lib/util/source.js +3 -2
  294. package/lib/validateSchema.js +1 -0
  295. package/lib/wasm/EnableWasmLoadingPlugin.js +6 -3
  296. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +4 -1
  297. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +46 -49
  298. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +2 -2
  299. package/lib/wasm-sync/WebAssemblyGenerator.js +2 -3
  300. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +3 -2
  301. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +3 -0
  302. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  303. package/lib/web/JsonpChunkLoadingRuntimeModule.js +4 -22
  304. package/lib/webpack.js +4 -5
  305. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +1 -0
  306. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -24
  307. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  308. package/package.json +121 -114
  309. package/schemas/WebpackOptions.check.js +1 -1
  310. package/schemas/WebpackOptions.json +17 -0
  311. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  312. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  313. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  314. package/types.d.ts +1261 -366
@@ -11,8 +11,12 @@ const HelperRuntimeModule = require("./HelperRuntimeModule");
11
11
  /** @typedef {import("../Compilation")} Compilation */
12
12
 
13
13
  class AsyncModuleRuntimeModule extends HelperRuntimeModule {
14
- constructor() {
14
+ /**
15
+ * @param {boolean=} deferInterop if defer import is used.
16
+ */
17
+ constructor(deferInterop = false) {
15
18
  super("async module");
19
+ this._deferInterop = deferInterop;
16
20
  }
17
21
 
18
22
  /**
@@ -22,10 +26,20 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
22
26
  const compilation = /** @type {Compilation} */ (this.compilation);
23
27
  const { runtimeTemplate } = compilation;
24
28
  const fn = RuntimeGlobals.asyncModule;
29
+ const defer = this._deferInterop;
25
30
  return Template.asString([
26
- 'var webpackQueues = typeof Symbol === "function" ? Symbol("webpack queues") : "__webpack_queues__";',
27
- `var webpackExports = typeof Symbol === "function" ? Symbol("webpack exports") : "${RuntimeGlobals.exports}";`,
28
- 'var webpackError = typeof Symbol === "function" ? Symbol("webpack error") : "__webpack_error__";',
31
+ 'var hasSymbol = typeof Symbol === "function";',
32
+ 'var webpackQueues = hasSymbol ? Symbol("webpack queues") : "__webpack_queues__";',
33
+ `var webpackExports = ${
34
+ defer ? `${RuntimeGlobals.asyncModuleExportSymbol}= ` : ""
35
+ }hasSymbol ? Symbol("webpack exports") : "${RuntimeGlobals.exports}";`,
36
+ 'var webpackError = hasSymbol ? Symbol("webpack error") : "__webpack_error__";',
37
+ defer
38
+ ? `var webpackDone = ${RuntimeGlobals.asyncModuleDoneSymbol} = hasSymbol ? Symbol("webpack done") : "__webpack_done__";`
39
+ : "",
40
+ defer
41
+ ? `var webpackDefer = ${RuntimeGlobals.makeDeferredNamespaceObjectSymbol} = hasSymbol ? Symbol("webpack defer") : "__webpack_defer__";`
42
+ : "",
29
43
  `var resolveQueue = ${runtimeTemplate.basicFunction("queue", [
30
44
  "if(queue && queue.d < 1) {",
31
45
  Template.indent([
@@ -45,6 +59,39 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
45
59
  `deps.map(${runtimeTemplate.basicFunction("dep", [
46
60
  'if(dep !== null && typeof dep === "object") {',
47
61
  Template.indent([
62
+ defer
63
+ ? Template.asString([
64
+ "if(!dep[webpackQueues] && dep[webpackDefer]) {",
65
+ Template.indent([
66
+ "var asyncDeps = dep[webpackDefer];",
67
+ `var hasUnresolvedAsyncSubgraph = asyncDeps.some(${runtimeTemplate.basicFunction(
68
+ "id",
69
+ [
70
+ "var cache = __webpack_module_cache__[id];",
71
+ "return !cache || cache[webpackDone] === false;"
72
+ ]
73
+ )});`,
74
+ "if (hasUnresolvedAsyncSubgraph) {",
75
+ Template.indent([
76
+ "var d = dep;",
77
+ "dep = {",
78
+ Template.indent([
79
+ "then(callback) {",
80
+ Template.indent([
81
+ "Promise.all(asyncDeps.map(__webpack_require__))",
82
+ `.then(${runtimeTemplate.returningFunction(
83
+ "callback(d)"
84
+ )});`
85
+ ]),
86
+ "}"
87
+ ]),
88
+ "};"
89
+ ]),
90
+ "} else return dep;"
91
+ ]),
92
+ "}"
93
+ ])
94
+ : "",
48
95
  "if(dep[webpackQueues]) return dep;",
49
96
  "if(dep.then) {",
50
97
  Template.indent([
@@ -58,6 +105,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
58
105
  "resolveQueue(queue);"
59
106
  ])});`,
60
107
  "var obj = {};",
108
+ defer ? "obj[webpackDefer] = false;" : "",
61
109
  `obj[webpackQueues] = ${runtimeTemplate.expressionFunction(
62
110
  "fn(queue)",
63
111
  "fn"
@@ -92,11 +140,12 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
92
140
  "fn"
93
141
  )};`,
94
142
  "module.exports = promise;",
95
- `body(${runtimeTemplate.basicFunction("deps", [
143
+ `var handle = ${runtimeTemplate.basicFunction("deps", [
96
144
  "currentDeps = wrapDeps(deps);",
97
145
  "var fn;",
98
146
  `var getResult = ${runtimeTemplate.returningFunction(
99
147
  `currentDeps.map(${runtimeTemplate.basicFunction("d", [
148
+ defer ? "if(d[webpackDefer]) return d;" : "",
100
149
  "if(d[webpackError]) throw d[webpackError];",
101
150
  "return d[webpackExports];"
102
151
  ])})`
@@ -114,16 +163,22 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
114
163
  "q"
115
164
  )};`,
116
165
  `currentDeps.map(${runtimeTemplate.expressionFunction(
117
- "dep[webpackQueues](fnQueue)",
166
+ `${
167
+ defer ? "dep[webpackDefer]||" : ""
168
+ }dep[webpackQueues](fnQueue)`,
118
169
  "dep"
119
170
  )});`
120
171
  ]
121
172
  )});`,
122
173
  "return fn.r ? promise : getResult();"
123
- ])}, ${runtimeTemplate.expressionFunction(
124
- "(err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)",
174
+ ])}`,
175
+ `var done = ${runtimeTemplate.expressionFunction(
176
+ `(err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)${
177
+ defer ? ", promise[webpackDone] = true" : ""
178
+ }`,
125
179
  "err"
126
- )});`,
180
+ )}`,
181
+ "body(handle, done);",
127
182
  "queue && queue.d < 0 && (queue.d = 0);"
128
183
  ])};`
129
184
  ]);
@@ -49,7 +49,7 @@ class CreateFakeNamespaceObjectRuntimeModule extends HelperRuntimeModule {
49
49
  `${RuntimeGlobals.makeNamespaceObject}(ns);`,
50
50
  "var def = {};",
51
51
  "leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];",
52
- "for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {",
52
+ "for(var current = mode & 2 && value; (typeof current == 'object' || typeof current == 'function') && !~leafPrototypes.indexOf(current); current = getProto(current)) {",
53
53
  Template.indent([
54
54
  `Object.getOwnPropertyNames(current).forEach(${runtimeTemplate.expressionFunction(
55
55
  `def[key] = ${runtimeTemplate.returningFunction("value[key]", "")}`,
@@ -0,0 +1,214 @@
1
+ /*
2
+ MIT License http://www.opensource.org/licenses/mit-license.php
3
+ */
4
+
5
+ "use strict";
6
+
7
+ const RuntimeGlobals = require("../RuntimeGlobals");
8
+ const Template = require("../Template");
9
+ const HelperRuntimeModule = require("./HelperRuntimeModule");
10
+
11
+ /**
12
+ * @param {import("../Module").ExportsType} exportsType exports type
13
+ * @returns {string} mode
14
+ */
15
+ function getMakeDeferredNamespaceModeFromExportsType(exportsType) {
16
+ if (exportsType === "namespace") return `/* ${exportsType} */ 0`;
17
+ if (exportsType === "default-only") return `/* ${exportsType} */ 1`;
18
+ if (exportsType === "default-with-named") return `/* ${exportsType} */ 2`;
19
+ if (exportsType === "dynamic") return `/* ${exportsType} */ 3`;
20
+ return "";
21
+ }
22
+ /**
23
+ * @param {import("../ModuleTemplate").RuntimeTemplate} _runtimeTemplate runtimeTemplate
24
+ * @param {import("../Module").ExportsType} exportsType exportsType
25
+ * @param {string} moduleId moduleId
26
+ * @param {(import("../ChunkGraph").ModuleId | null)[]} asyncDepsIds asyncDepsIds
27
+ * @returns {string} function
28
+ */
29
+ function getOptimizedDeferredModule(
30
+ _runtimeTemplate,
31
+ exportsType,
32
+ moduleId,
33
+ asyncDepsIds
34
+ ) {
35
+ const isAsync = asyncDepsIds && asyncDepsIds.length;
36
+ const init = `${RuntimeGlobals.require}(${moduleId})${
37
+ isAsync ? `[${RuntimeGlobals.asyncModuleExportSymbol}]` : ""
38
+ }`;
39
+ const props = [
40
+ `/* ${exportsType} */ get a() {`,
41
+ // if exportsType is "namespace" we can generate the most optimized code,
42
+ // on the second access, we can avoid trigger the getter.
43
+ // we can also do this if exportsType is "dynamic" and there is a "__esModule" property on it.
44
+ exportsType === "namespace" || exportsType === "dynamic"
45
+ ? Template.indent([
46
+ `var exports = ${init};`,
47
+ `${
48
+ exportsType === "dynamic" ? "if (exports.__esModule) " : ""
49
+ }Object.defineProperty(this, "a", { value: exports });`,
50
+ "return exports;"
51
+ ])
52
+ : Template.indent([`return ${init};`]),
53
+ isAsync ? "}," : "}",
54
+ isAsync
55
+ ? `[${
56
+ RuntimeGlobals.makeDeferredNamespaceObjectSymbol
57
+ }]: ${JSON.stringify(asyncDepsIds.filter(x => x !== null))}`
58
+ : ""
59
+ ];
60
+ return Template.asString(["{", Template.indent(props), "}"]);
61
+ }
62
+
63
+ const strictModuleCache = [
64
+ "if (cachedModule && cachedModule.error === undefined) {",
65
+ Template.indent([
66
+ "var exports = cachedModule.exports;",
67
+ "if (mode == 0) return exports;",
68
+ `if (mode == 1) return ${RuntimeGlobals.createFakeNamespaceObject}(exports);`,
69
+ `if (mode == 2) return ${RuntimeGlobals.createFakeNamespaceObject}(exports, 2);`,
70
+ `if (mode == 3) return ${RuntimeGlobals.createFakeNamespaceObject}(exports, 6);` // 2 | 4
71
+ ]),
72
+ "}"
73
+ ];
74
+ const nonStrictModuleCache = [
75
+ "// optimization not applied when output.strictModuleErrorHandling is off"
76
+ ];
77
+
78
+ class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
79
+ /**
80
+ * @param {boolean} hasAsyncRuntime if async module is used.
81
+ */
82
+ constructor(hasAsyncRuntime) {
83
+ super("make deferred namespace object");
84
+ this.hasAsyncRuntime = hasAsyncRuntime;
85
+ }
86
+
87
+ /**
88
+ * @returns {string | null} runtime code
89
+ */
90
+ generate() {
91
+ if (!this.compilation) return null;
92
+ const { runtimeTemplate } = this.compilation;
93
+ const fn = RuntimeGlobals.makeDeferredNamespaceObject;
94
+ const hasAsync = this.hasAsyncRuntime;
95
+ const strictError =
96
+ this.compilation.options.output.strictModuleErrorHandling;
97
+ const init = runtimeTemplate.supportsOptionalChaining()
98
+ ? "init?.();"
99
+ : "if (init) init();";
100
+ return `${fn} = ${runtimeTemplate.basicFunction("moduleId, mode", [
101
+ "// mode: 0 => namespace (esm)",
102
+ "// mode: 1 => default-only (esm strict cjs)",
103
+ "// mode: 2 => default-with-named (esm-cjs compat)",
104
+ "// mode: 3 => dynamic (if exports has __esModule, then esm, otherwise default-with-named)",
105
+ "",
106
+ "var cachedModule = __webpack_module_cache__[moduleId];",
107
+ ...(strictError ? strictModuleCache : nonStrictModuleCache),
108
+ "",
109
+ `var init = ${runtimeTemplate.basicFunction("", [
110
+ `ns = ${RuntimeGlobals.require}(moduleId);`,
111
+ hasAsync
112
+ ? `if (${RuntimeGlobals.asyncModuleExportSymbol} in ns) ns = ns[${RuntimeGlobals.asyncModuleExportSymbol}];`
113
+ : "",
114
+ "init = null;",
115
+ "if (mode == 0 || mode == 3 && ns.__esModule && typeof ns === 'object') {",
116
+ Template.indent([
117
+ "delete handler.defineProperty;",
118
+ "delete handler.deleteProperty;",
119
+ "delete handler.set;",
120
+ "delete handler.get;",
121
+ "delete handler.has;",
122
+ "delete handler.ownKeys;",
123
+ "delete handler.getOwnPropertyDescriptor;"
124
+ ]),
125
+ "} else if (mode == 1) {",
126
+ Template.indent([
127
+ `ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns);`
128
+ ]),
129
+ "} else if (mode == 2) {",
130
+ Template.indent([
131
+ `ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns, 2);`
132
+ ]),
133
+ "} else if (mode == 3) {",
134
+ Template.indent([
135
+ `ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns, 6);`
136
+ ]),
137
+ "}"
138
+ ])};`,
139
+ "",
140
+ `var ns = ${
141
+ strictError ? "" : "cachedModule && cachedModule.exports || "
142
+ }__webpack_module_deferred_exports__[moduleId] || (__webpack_module_deferred_exports__[moduleId] = { __proto__: null });`,
143
+ "var handler = {",
144
+ Template.indent([
145
+ "__proto__: null,",
146
+ `get: ${runtimeTemplate.basicFunction("_, name", [
147
+ "switch (name) {",
148
+ Template.indent([
149
+ 'case "__esModule": return true;',
150
+ 'case Symbol.toStringTag: return "Deferred Module";',
151
+ 'case "then": return undefined;'
152
+ ]),
153
+ "}",
154
+ init,
155
+ "return ns[name];"
156
+ ])},`,
157
+ `has: ${runtimeTemplate.basicFunction("_, name", [
158
+ "switch (name) {",
159
+ Template.indent(
160
+ [
161
+ 'case "__esModule":',
162
+ "case Symbol.toStringTag:",
163
+ hasAsync
164
+ ? `case ${RuntimeGlobals.makeDeferredNamespaceObjectSymbol}:`
165
+ : "",
166
+ Template.indent("return true;"),
167
+ 'case "then":',
168
+ Template.indent("return false;")
169
+ ].filter(Boolean)
170
+ ),
171
+ "}",
172
+ init,
173
+ "return name in ns;"
174
+ ])},`,
175
+ `ownKeys: ${runtimeTemplate.basicFunction("", [
176
+ init,
177
+ `var keys = Reflect.ownKeys(ns).filter(${runtimeTemplate.expressionFunction('x !== "then"', "x")}).concat([Symbol.toStringTag]);`,
178
+ "return keys;"
179
+ ])},`,
180
+ `getOwnPropertyDescriptor: ${runtimeTemplate.basicFunction("_, name", [
181
+ "switch (name) {",
182
+ Template.indent([
183
+ 'case "__esModule": return { value: true, configurable: !!mode };',
184
+ 'case Symbol.toStringTag: return { value: "Deferred Module", configurable: !!mode };',
185
+ 'case "then": return undefined;'
186
+ ]),
187
+ "}",
188
+ init,
189
+ "var desc = Reflect.getOwnPropertyDescriptor(ns, name);",
190
+ 'if (mode == 2 && name == "default" && !desc) {',
191
+ Template.indent("desc = { value: ns, configurable: true };"),
192
+ "}",
193
+ "return desc;"
194
+ ])},`,
195
+ `defineProperty: ${runtimeTemplate.basicFunction("_, name", [
196
+ init,
197
+ // Note: This behavior does not match the spec one, but since webpack does not do it either
198
+ // for a normal Module Namespace object (in MakeNamespaceObjectRuntimeModule), let's keep it simple.
199
+ "return false;"
200
+ ])},`,
201
+ `deleteProperty: ${runtimeTemplate.returningFunction("false")},`,
202
+ `set: ${runtimeTemplate.returningFunction("false")},`
203
+ ]),
204
+ "}",
205
+ // we don't fully emulate ES Module semantics in this Proxy to align with normal webpack esm namespace object.
206
+ "return new Proxy(ns, handler);"
207
+ ])};`;
208
+ }
209
+ }
210
+
211
+ module.exports = MakeDeferredNamespaceObjectRuntimeModule;
212
+ module.exports.getMakeDeferredNamespaceModeFromExportsType =
213
+ getMakeDeferredNamespaceModeFromExportsType;
214
+ module.exports.getOptimizedDeferredModule = getOptimizedDeferredModule;
@@ -22,8 +22,9 @@ class RuntimeIdRuntimeModule extends RuntimeModule {
22
22
  const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
23
23
  const chunk = /** @type {Chunk} */ (this.chunk);
24
24
  const runtime = chunk.runtime;
25
- if (typeof runtime !== "string")
25
+ if (typeof runtime !== "string") {
26
26
  throw new Error("RuntimeIdRuntimeModule must be in a single runtime");
27
+ }
27
28
  const id = chunkGraph.getRuntimeId(runtime);
28
29
  return `${RuntimeGlobals.runtimeId} = ${JSON.stringify(id)};`;
29
30
  }
@@ -28,9 +28,9 @@ class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
28
28
  generate() {
29
29
  const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
30
30
  const chunk = /** @type {Chunk} */ (this.chunk);
31
- const chunkIds = Array.from(
32
- chunkGraph.getChunkEntryDependentChunksIterable(chunk)
33
- ).map(chunk => chunk.id);
31
+ const chunkIds = [
32
+ ...chunkGraph.getChunkEntryDependentChunksIterable(chunk)
33
+ ].map(chunk => chunk.id);
34
34
  const compilation = /** @type {Compilation} */ (this.compilation);
35
35
  const { runtimeTemplate } = compilation;
36
36
  return Template.asString([
@@ -38,11 +38,12 @@ class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
38
38
  `${RuntimeGlobals.startup} = ${runtimeTemplate.basicFunction(
39
39
  "",
40
40
  !this.asyncChunkLoading
41
- ? chunkIds
42
- .map(
41
+ ? [
42
+ ...chunkIds.map(
43
43
  id => `${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)});`
44
- )
45
- .concat("return next();")
44
+ ),
45
+ "return next();"
46
+ ]
46
47
  : chunkIds.length === 1
47
48
  ? `return ${RuntimeGlobals.ensureChunk}(${JSON.stringify(
48
49
  chunkIds[0]
@@ -56,7 +56,9 @@ class DataUriPlugin {
56
56
  if (match) {
57
57
  resourceData.data.mimetype = match[1] || "";
58
58
  resourceData.data.parameters = match[2] || "";
59
- resourceData.data.encoding = match[3] || false;
59
+ resourceData.data.encoding = /** @type {"base64" | false} */ (
60
+ match[3] || false
61
+ );
60
62
  resourceData.data.encodedContent = match[4] || "";
61
63
  }
62
64
  });
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { URL, fileURLToPath } = require("url");
8
+ const { fileURLToPath } = require("url");
9
9
  const { NormalModule } = require("..");
10
10
 
11
11
  /** @typedef {import("../Compiler")} Compiler */
@@ -6,13 +6,17 @@
6
6
  "use strict";
7
7
 
8
8
  const EventEmitter = require("events");
9
- const { extname, basename } = require("path");
10
- const { URL } = require("url");
11
- const { createGunzip, createBrotliDecompress, createInflate } = require("zlib");
9
+ const { basename, extname } = require("path");
10
+ const {
11
+ // eslint-disable-next-line n/no-unsupported-features/node-builtins
12
+ createBrotliDecompress,
13
+ createGunzip,
14
+ createInflate
15
+ } = require("zlib");
12
16
  const NormalModule = require("../NormalModule");
13
17
  const createSchemaValidation = require("../util/create-schema-validation");
14
18
  const createHash = require("../util/createHash");
15
- const { mkdirp, dirname, join } = require("../util/fs");
19
+ const { dirname, join, mkdirp } = require("../util/fs");
16
20
  const memoize = require("../util/memoize");
17
21
 
18
22
  /** @typedef {import("http").IncomingMessage} IncomingMessage */
@@ -32,7 +36,7 @@ const getHttps = memoize(() => require("https"));
32
36
 
33
37
  /**
34
38
  * @param {typeof import("http") | typeof import("https")} request request
35
- * @param {string | { toString: () => string } | undefined} proxy proxy
39
+ * @param {string | URL | undefined} proxy proxy
36
40
  * @returns {(url: URL, requestOptions: RequestOptions, callback: (incomingMessage: IncomingMessage) => void) => EventEmitter} fn
37
41
  */
38
42
  const proxyFetch = (request, proxy) => (url, options, callback) => {
@@ -85,7 +89,7 @@ const proxyFetch = (request, proxy) => (url, options, callback) => {
85
89
  let inProgressWrite;
86
90
 
87
91
  const validate = createSchemaValidation(
88
- require("../../schemas/plugins/schemes/HttpUriPlugin.check.js"),
92
+ require("../../schemas/plugins/schemes/HttpUriPlugin.check"),
89
93
  () => require("../../schemas/plugins/schemes/HttpUriPlugin.json"),
90
94
  {
91
95
  name: "Http Uri Plugin",
@@ -210,8 +214,9 @@ class Lockfile {
210
214
  static parse(content) {
211
215
  // TODO handle merge conflicts
212
216
  const data = JSON.parse(content);
213
- if (data.version !== 1)
217
+ if (data.version !== 1) {
214
218
  throw new Error(`Unsupported lockfile version ${data.version}`);
219
+ }
215
220
  const lockfile = new Lockfile();
216
221
  for (const key of Object.keys(data)) {
217
222
  if (key === "version") continue;
@@ -234,16 +239,15 @@ class Lockfile {
234
239
  */
235
240
  toString() {
236
241
  let str = "{\n";
237
- const entries = Array.from(this.entries).sort(([a], [b]) =>
238
- a < b ? -1 : 1
239
- );
242
+ const entries = [...this.entries].sort(([a], [b]) => (a < b ? -1 : 1));
240
243
  for (const [key, entry] of entries) {
241
244
  if (typeof entry === "string") {
242
245
  str += ` ${JSON.stringify(key)}: ${JSON.stringify(entry)},\n`;
243
246
  } else {
244
247
  str += ` ${JSON.stringify(key)}: { `;
245
- if (entry.resolved !== key)
248
+ if (entry.resolved !== key) {
246
249
  str += `"resolved": ${JSON.stringify(entry.resolved)}, `;
250
+ }
247
251
  str += `"integrity": ${JSON.stringify(
248
252
  entry.integrity
249
253
  )}, "contentType": ${JSON.stringify(entry.contentType)} },\n`;
@@ -330,8 +334,9 @@ const cachedWithKey = (fn, forceFn = fn) => {
330
334
  const resultFn = (arg, callback) => {
331
335
  const cacheEntry = cache.get(arg);
332
336
  if (cacheEntry !== undefined) {
333
- if (cacheEntry.result !== undefined)
337
+ if (cacheEntry.result !== undefined) {
334
338
  return callback(null, cacheEntry.result);
339
+ }
335
340
  if (cacheEntry.error !== undefined) return callback(cacheEntry.error);
336
341
  if (cacheEntry.callbacks === undefined) cacheEntry.callbacks = [callback];
337
342
  else cacheEntry.callbacks.push(callback);
@@ -361,8 +366,9 @@ const cachedWithKey = (fn, forceFn = fn) => {
361
366
  resultFn.force = (arg, callback) => {
362
367
  const cacheEntry = cache.get(arg);
363
368
  if (cacheEntry !== undefined && cacheEntry.force) {
364
- if (cacheEntry.result !== undefined)
369
+ if (cacheEntry.result !== undefined) {
365
370
  return callback(null, cacheEntry.result);
371
+ }
366
372
  if (cacheEntry.error !== undefined) return callback(cacheEntry.error);
367
373
  if (cacheEntry.callbacks === undefined) cacheEntry.callbacks = [callback];
368
374
  else cacheEntry.callbacks.push(callback);
@@ -531,7 +537,7 @@ class HttpUriPlugin {
531
537
  (err, s) => {
532
538
  if (err) return callback(err);
533
539
  const lockfile = buffer
534
- ? Lockfile.parse(buffer.toString("utf-8"))
540
+ ? Lockfile.parse(buffer.toString("utf8"))
535
541
  : new Lockfile();
536
542
  lockfileCache = {
537
543
  lockfile,
@@ -611,8 +617,9 @@ class HttpUriPlugin {
611
617
  const storeResult = (lockfile, url, result, callback) => {
612
618
  if (result.storeLock) {
613
619
  storeLockEntry(lockfile, url, result.entry);
614
- if (!cacheLocation || !result.content)
620
+ if (!cacheLocation || !result.content) {
615
621
  return callback(null, result);
622
+ }
616
623
  const key = getCacheKey(result.entry.resolved);
617
624
  const filePath = join(intermediateFs, cacheLocation, key);
618
625
  mkdirp(intermediateFs, dirname(intermediateFs, filePath), err => {
@@ -831,7 +838,7 @@ class HttpUriPlugin {
831
838
  new Error(
832
839
  `${url} request status code = ${
833
840
  res.statusCode
834
- }\n${content.toString("utf-8")}`
841
+ }\n${content.toString("utf8")}`
835
842
  )
836
843
  );
837
844
  }
@@ -938,8 +945,9 @@ class HttpUriPlugin {
938
945
  const result =
939
946
  /** @type {ResolveContentResult} */
940
947
  (_result);
941
- if (!result.storeLock || entryTag === "ignore")
948
+ if (!result.storeLock || entryTag === "ignore") {
942
949
  return callback(null, result);
950
+ }
943
951
  if (frozen) {
944
952
  return callback(
945
953
  new Error(
@@ -1058,7 +1066,7 @@ Remove this line from the lockfile to force upgrading.`
1058
1066
  let isEolChanged = false;
1059
1067
  try {
1060
1068
  contentWithChangedEol = Buffer.from(
1061
- content.toString("utf-8").replace(/\r\n/g, "\n")
1069
+ content.toString("utf8").replace(/\r\n/g, "\n")
1062
1070
  );
1063
1071
  isEolChanged = verifyIntegrity(
1064
1072
  contentWithChangedEol,
@@ -1245,7 +1253,7 @@ Run build with un-frozen lockfile to automatically fix lockfile.`
1245
1253
  return callback(err);
1246
1254
  }
1247
1255
  const lockfile = buffer
1248
- ? Lockfile.parse(buffer.toString("utf-8"))
1256
+ ? Lockfile.parse(buffer.toString("utf8"))
1249
1257
  : new Lockfile();
1250
1258
  for (const [key, value] of /** @type {LockfileUpdates} */ (
1251
1259
  lockfileUpdates