webpack 5.107.2 → 5.108.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 (357) hide show
  1. package/hot/dev-server.js +2 -0
  2. package/lib/APIPlugin.js +8 -4
  3. package/lib/CacheFacade.js +7 -0
  4. package/lib/Chunk.js +4 -0
  5. package/lib/ChunkGraph.js +30 -9
  6. package/lib/CircularModulesPlugin.js +190 -0
  7. package/lib/CleanPlugin.js +2 -1
  8. package/lib/Compilation.js +396 -65
  9. package/lib/Compiler.js +25 -11
  10. package/lib/ConcatenationScope.js +10 -3
  11. package/lib/ContextExclusionPlugin.js +1 -0
  12. package/lib/ContextModule.js +92 -47
  13. package/lib/ContextReplacementPlugin.js +4 -0
  14. package/lib/DefinePlugin.js +89 -15
  15. package/lib/Dependency.js +111 -7
  16. package/lib/EntryOptionPlugin.js +39 -2
  17. package/lib/EntryPlugin.js +2 -0
  18. package/lib/ExportsInfo.js +314 -73
  19. package/lib/ExternalModule.js +82 -34
  20. package/lib/ExternalModuleFactoryPlugin.js +1 -0
  21. package/lib/ExternalsPlugin.js +1 -0
  22. package/lib/FileSystemInfo.js +173 -23
  23. package/lib/FlagAllModulesAsUsedPlugin.js +1 -5
  24. package/lib/FlagDependencyExportsPlugin.js +23 -0
  25. package/lib/FlagDependencyUsagePlugin.js +87 -5
  26. package/lib/FlagEntryExportAsUsedPlugin.js +2 -0
  27. package/lib/Generator.js +8 -0
  28. package/lib/HotModuleReplacementPlugin.js +65 -28
  29. package/lib/IgnorePlugin.js +1 -0
  30. package/lib/InitFragment.js +5 -0
  31. package/lib/JavascriptMetaInfoPlugin.js +7 -5
  32. package/lib/LazyBarrel.js +361 -0
  33. package/lib/LoaderTargetPlugin.js +1 -0
  34. package/lib/Module.js +21 -42
  35. package/lib/ModuleGraph.js +3 -2
  36. package/lib/ModuleProfile.js +27 -1
  37. package/lib/ModuleTemplate.js +2 -0
  38. package/lib/MultiCompiler.js +2 -0
  39. package/lib/MultiStats.js +1 -0
  40. package/lib/MultiWatching.js +2 -0
  41. package/lib/NodeStuffPlugin.js +22 -17
  42. package/lib/NormalModule.js +142 -80
  43. package/lib/NormalModuleReplacementPlugin.js +2 -0
  44. package/lib/PrefetchPlugin.js +2 -0
  45. package/lib/ProgressPlugin.js +8 -0
  46. package/lib/ProvidePlugin.js +1 -0
  47. package/lib/RawModule.js +20 -16
  48. package/lib/RecordIdsPlugin.js +1 -0
  49. package/lib/RuntimeGlobals.js +5 -0
  50. package/lib/RuntimePlugin.js +58 -26
  51. package/lib/RuntimeTemplate.js +278 -21
  52. package/lib/SelfModuleFactory.js +1 -0
  53. package/lib/SourceMapDevToolPlugin.js +3 -5
  54. package/lib/Stats.js +1 -0
  55. package/lib/Template.js +8 -2
  56. package/lib/TemplatedPathPlugin.js +473 -131
  57. package/lib/WarnCaseSensitiveModulesPlugin.js +1 -0
  58. package/lib/WarnDeprecatedOptionPlugin.js +4 -0
  59. package/lib/WarnNoModeSetPlugin.js +1 -0
  60. package/lib/WatchIgnorePlugin.js +1 -0
  61. package/lib/Watching.js +9 -0
  62. package/lib/WebpackOptionsApply.js +50 -5
  63. package/lib/asset/AssetBytesGenerator.js +11 -3
  64. package/lib/asset/AssetGenerator.js +47 -22
  65. package/lib/asset/AssetModule.js +47 -0
  66. package/lib/asset/AssetModulesPlugin.js +14 -14
  67. package/lib/asset/AssetParser.js +2 -2
  68. package/lib/asset/AssetSourceGenerator.js +8 -0
  69. package/lib/asset/RawDataUrlModule.js +12 -13
  70. package/lib/buildChunkGraph.js +64 -7
  71. package/lib/bun/BunTargetPlugin.js +48 -0
  72. package/lib/cache/AddBuildDependenciesPlugin.js +1 -0
  73. package/lib/cache/AddManagedPathsPlugin.js +3 -0
  74. package/lib/cache/IdleFileCachePlugin.js +4 -0
  75. package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
  76. package/lib/cache/PackFileCacheStrategy.js +1 -0
  77. package/lib/cache/ResolverCachePlugin.js +2 -0
  78. package/lib/cache/mergeEtags.js +2 -0
  79. package/lib/cli.js +109 -19
  80. package/lib/config/browserslistTargetHandler.js +99 -0
  81. package/lib/config/defaults.js +147 -7
  82. package/lib/config/defineConfig.js +31 -0
  83. package/lib/config/normalization.js +5 -0
  84. package/lib/config/target.js +181 -2
  85. package/lib/container/ContainerEntryModule.js +15 -14
  86. package/lib/container/ContainerExposedDependency.js +2 -2
  87. package/lib/container/ContainerReferencePlugin.js +1 -1
  88. package/lib/container/FallbackDependency.js +5 -7
  89. package/lib/container/FallbackModule.js +10 -9
  90. package/lib/container/RemoteModule.js +20 -10
  91. package/lib/container/RemoteRuntimeModule.js +14 -12
  92. package/lib/css/CssGenerator.js +353 -327
  93. package/lib/css/CssInjectStyleRuntimeModule.js +36 -8
  94. package/lib/css/CssLoadingRuntimeModule.js +118 -47
  95. package/lib/css/CssModule.js +52 -23
  96. package/lib/css/CssModulesPlugin.js +107 -124
  97. package/lib/css/CssParser.js +2759 -2205
  98. package/lib/css/syntax.js +2859 -0
  99. package/lib/debug/ProfilingPlugin.js +2 -0
  100. package/lib/deno/DenoTargetPlugin.js +47 -0
  101. package/lib/dependencies/AMDDefineDependency.js +22 -17
  102. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +1 -0
  103. package/lib/dependencies/AMDRequireArrayDependency.js +7 -11
  104. package/lib/dependencies/AMDRequireContextDependency.js +7 -11
  105. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -0
  106. package/lib/dependencies/AMDRequireDependency.js +24 -20
  107. package/lib/dependencies/CachedConstDependency.js +3 -0
  108. package/lib/dependencies/CommonJsDependencyHelpers.js +1 -0
  109. package/lib/dependencies/CommonJsExportRequireDependency.js +79 -31
  110. package/lib/dependencies/CommonJsExportsDependency.js +21 -16
  111. package/lib/dependencies/CommonJsExportsParserPlugin.js +230 -7
  112. package/lib/dependencies/CommonJsFullRequireDependency.js +27 -19
  113. package/lib/dependencies/CommonJsImportsParserPlugin.js +51 -16
  114. package/lib/dependencies/CommonJsPlugin.js +1 -1
  115. package/lib/dependencies/CommonJsRequireContextDependency.js +10 -13
  116. package/lib/dependencies/CommonJsRequireDependency.js +42 -11
  117. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -14
  118. package/lib/dependencies/ConstDependency.js +16 -11
  119. package/lib/dependencies/ContextDependency.js +4 -0
  120. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -1
  121. package/lib/dependencies/ContextElementDependency.js +23 -14
  122. package/lib/dependencies/CreateRequireParserPlugin.js +1 -0
  123. package/lib/dependencies/CreateScriptUrlDependency.js +5 -7
  124. package/lib/dependencies/CriticalDependencyWarning.js +1 -0
  125. package/lib/dependencies/CssIcssExportDependency.js +512 -574
  126. package/lib/dependencies/CssIcssImportDependency.js +9 -9
  127. package/lib/dependencies/CssIcssSymbolDependency.js +22 -15
  128. package/lib/dependencies/CssImportDependency.js +25 -1
  129. package/lib/dependencies/CssUrlDependency.js +23 -14
  130. package/lib/dependencies/DllEntryDependency.js +9 -13
  131. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  132. package/lib/dependencies/ExportsInfoDependency.js +12 -12
  133. package/lib/dependencies/ExternalModuleDependency.js +8 -5
  134. package/lib/dependencies/ExternalModuleInitFragment.js +7 -5
  135. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +13 -10
  136. package/lib/dependencies/HarmonyAcceptDependency.js +11 -11
  137. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
  138. package/lib/dependencies/HarmonyDetectionParserPlugin.js +47 -22
  139. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +28 -2
  140. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +46 -22
  141. package/lib/dependencies/HarmonyExportExpressionDependency.js +107 -30
  142. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -9
  143. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +109 -31
  144. package/lib/dependencies/HarmonyExportInitFragment.js +18 -15
  145. package/lib/dependencies/HarmonyExportSpecifierDependency.js +83 -18
  146. package/lib/dependencies/HarmonyExports.js +4 -1
  147. package/lib/dependencies/HarmonyImportDependency.js +24 -0
  148. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +110 -74
  149. package/lib/dependencies/HarmonyImportGuard.js +254 -0
  150. package/lib/dependencies/HarmonyImportSideEffectDependency.js +18 -1
  151. package/lib/dependencies/HarmonyImportSpecifierDependency.js +118 -14
  152. package/lib/dependencies/HarmonyLinkingError.js +1 -0
  153. package/lib/dependencies/HarmonyModulesPlugin.js +1 -0
  154. package/lib/dependencies/{HtmlScriptSrcDependency.js → HtmlEntryDependency.js} +261 -109
  155. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  156. package/lib/dependencies/HtmlInlineScriptDependency.js +17 -13
  157. package/lib/dependencies/HtmlInlineStyleDependency.js +45 -11
  158. package/lib/dependencies/ImportContextDependency.js +5 -9
  159. package/lib/dependencies/ImportDependency.js +44 -2
  160. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
  161. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
  162. package/lib/dependencies/ImportMetaPlugin.js +74 -30
  163. package/lib/dependencies/ImportParserPlugin.js +19 -0
  164. package/lib/dependencies/ImportWeakDependency.js +1 -0
  165. package/lib/dependencies/JsonExportsDependency.js +9 -9
  166. package/lib/dependencies/LoaderImportDependency.js +1 -0
  167. package/lib/dependencies/LocalModule.js +11 -12
  168. package/lib/dependencies/LocalModuleDependency.js +11 -13
  169. package/lib/dependencies/ModuleDecoratorDependency.js +9 -9
  170. package/lib/dependencies/ModuleDependency.js +7 -0
  171. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
  172. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
  173. package/lib/dependencies/ModuleInitFragmentDependency.js +15 -11
  174. package/lib/dependencies/ProvidedDependency.js +31 -27
  175. package/lib/dependencies/PureExpressionDependency.js +7 -9
  176. package/lib/dependencies/RequireEnsureDependency.js +12 -13
  177. package/lib/dependencies/RequireHeaderDependency.js +3 -4
  178. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +3 -0
  179. package/lib/dependencies/RequireResolveContextDependency.js +7 -11
  180. package/lib/dependencies/RequireResolveDependency.js +1 -0
  181. package/lib/dependencies/RequireResolveHeaderDependency.js +3 -5
  182. package/lib/dependencies/RuntimeRequirementsDependency.js +6 -7
  183. package/lib/dependencies/StaticExportsDependency.js +10 -10
  184. package/lib/dependencies/SystemPlugin.js +2 -0
  185. package/lib/dependencies/URLContextDependency.js +5 -7
  186. package/lib/dependencies/URLDependency.js +14 -16
  187. package/lib/dependencies/UnsupportedDependency.js +8 -13
  188. package/lib/dependencies/WebAssemblyExportImportedDependency.js +11 -16
  189. package/lib/dependencies/WebAssemblyImportDependency.js +14 -16
  190. package/lib/dependencies/WebpackIsIncludedDependency.js +1 -0
  191. package/lib/dependencies/WorkerDependency.js +19 -8
  192. package/lib/dependencies/WorkerPlugin.js +22 -6
  193. package/lib/dependencies/processExportInfo.js +13 -11
  194. package/lib/dll/DelegatedModule.js +29 -15
  195. package/lib/dll/DelegatedModuleFactoryPlugin.js +1 -0
  196. package/lib/dll/DelegatedPlugin.js +1 -0
  197. package/lib/dll/DllEntryPlugin.js +3 -0
  198. package/lib/dll/DllModule.js +3 -2
  199. package/lib/dll/DllPlugin.js +16 -0
  200. package/lib/dll/DllReferencePlugin.js +3 -0
  201. package/lib/dll/LibManifestPlugin.js +1 -0
  202. package/lib/electron/ElectronTargetPlugin.js +22 -4
  203. package/lib/errors/ConcurrentCompilationError.js +1 -0
  204. package/lib/errors/HookWebpackError.js +11 -13
  205. package/lib/errors/IgnoreErrorModuleFactory.js +1 -0
  206. package/lib/errors/InvalidDependenciesModuleWarning.js +2 -0
  207. package/lib/errors/JSONParseError.js +9 -8
  208. package/lib/errors/ModuleBuildError.js +16 -13
  209. package/lib/errors/ModuleDependencyError.js +8 -1
  210. package/lib/errors/ModuleDependencyWarning.js +8 -1
  211. package/lib/errors/ModuleError.js +5 -11
  212. package/lib/errors/ModuleHashingError.js +4 -0
  213. package/lib/errors/ModuleNotFoundError.js +3 -0
  214. package/lib/errors/ModuleParseError.js +5 -11
  215. package/lib/errors/ModuleRestoreError.js +2 -0
  216. package/lib/errors/ModuleStoreError.js +3 -0
  217. package/lib/errors/ModuleWarning.js +7 -11
  218. package/lib/errors/NodeStuffInWebError.js +1 -0
  219. package/lib/errors/NonErrorEmittedError.js +2 -0
  220. package/lib/errors/UnhandledSchemeError.js +1 -0
  221. package/lib/esm/ModuleChunkLoadingPlugin.js +0 -1
  222. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +28 -23
  223. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  224. package/lib/hmr/HotModuleReplacementRuntimeModule.js +7 -0
  225. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  226. package/lib/hmr/LazyCompilationPlugin.js +30 -6
  227. package/lib/html/HtmlGenerator.js +217 -23
  228. package/lib/html/HtmlModule.js +40 -0
  229. package/lib/html/HtmlModulesPlugin.js +219 -55
  230. package/lib/html/HtmlParser.js +1108 -1099
  231. package/lib/html/{walkHtmlTokens.js → syntax.js} +4701 -212
  232. package/lib/ids/IdHelpers.js +4 -2
  233. package/lib/index.js +19 -0
  234. package/lib/javascript/BasicEvaluatedExpression.js +1 -0
  235. package/lib/javascript/EnableChunkLoadingPlugin.js +1 -0
  236. package/lib/javascript/JavascriptGenerator.js +6 -2
  237. package/lib/javascript/JavascriptModule.js +54 -0
  238. package/lib/javascript/JavascriptModulesPlugin.js +257 -102
  239. package/lib/javascript/JavascriptParser.js +285 -158
  240. package/lib/json/JsonModule.js +40 -0
  241. package/lib/json/JsonModulesPlugin.js +7 -0
  242. package/lib/json/JsonParser.js +4 -2
  243. package/lib/library/AssignLibraryPlugin.js +5 -3
  244. package/lib/library/ExportPropertyLibraryPlugin.js +1 -0
  245. package/lib/library/FalseIIFEUmdWarning.js +1 -0
  246. package/lib/library/ModuleLibraryPlugin.js +24 -5
  247. package/lib/library/SystemLibraryPlugin.js +3 -3
  248. package/lib/node/NodeTargetPlugin.js +1 -0
  249. package/lib/node/NodeWatchFileSystem.js +1 -0
  250. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -9
  251. package/lib/node/RequireChunkLoadingRuntimeModule.js +18 -16
  252. package/lib/optimize/ConcatenatedModule.js +395 -77
  253. package/lib/optimize/ConstExportsPlugin.js +211 -0
  254. package/lib/optimize/InlineExports.js +178 -0
  255. package/lib/optimize/InnerGraph.js +372 -275
  256. package/lib/optimize/InnerGraphPlugin.js +196 -99
  257. package/lib/optimize/ModuleConcatenationPlugin.js +56 -25
  258. package/lib/optimize/RealContentHashPlugin.js +14 -1
  259. package/lib/optimize/SideEffectsFlagPlugin.js +234 -64
  260. package/lib/runtime/AsyncModuleRuntimeModule.js +32 -30
  261. package/lib/runtime/AutoPublicPathRuntimeModule.js +11 -5
  262. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -1
  263. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +6 -4
  264. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +33 -4
  265. package/lib/runtime/GetChunkFilenameRuntimeModule.js +82 -3
  266. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  267. package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -1
  268. package/lib/runtime/LoadScriptRuntimeModule.js +18 -13
  269. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +39 -26
  270. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -1
  271. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  272. package/lib/runtime/RelativeUrlRuntimeModule.js +3 -2
  273. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -1
  274. package/lib/runtime/StartupEntrypointRuntimeModule.js +4 -3
  275. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  276. package/lib/schemes/HttpUriPlugin.js +3 -2
  277. package/lib/serialization/AggregateErrorSerializer.js +7 -6
  278. package/lib/serialization/ArraySerializer.js +4 -8
  279. package/lib/serialization/BinaryMiddleware.js +538 -468
  280. package/lib/serialization/DateObjectSerializer.js +2 -2
  281. package/lib/serialization/ErrorObjectSerializer.js +7 -6
  282. package/lib/serialization/MapObjectSerializer.js +5 -9
  283. package/lib/serialization/NullPrototypeObjectSerializer.js +7 -9
  284. package/lib/serialization/ObjectMiddleware.js +50 -13
  285. package/lib/serialization/PlainObjectSerializer.js +9 -8
  286. package/lib/serialization/RegExpObjectSerializer.js +2 -2
  287. package/lib/serialization/Serializer.js +1 -0
  288. package/lib/serialization/SetObjectSerializer.js +4 -8
  289. package/lib/sharing/ConsumeSharedModule.js +6 -7
  290. package/lib/sharing/ConsumeSharedPlugin.js +1 -0
  291. package/lib/sharing/ConsumeSharedRuntimeModule.js +46 -41
  292. package/lib/sharing/ProvideSharedDependency.js +30 -15
  293. package/lib/sharing/ProvideSharedModule.js +30 -11
  294. package/lib/sharing/ProvideSharedPlugin.js +4 -2
  295. package/lib/sharing/SharePlugin.js +3 -0
  296. package/lib/sharing/ShareRuntimeModule.js +18 -16
  297. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  298. package/lib/sharing/utils.js +1 -1
  299. package/lib/stats/DefaultStatsFactoryPlugin.js +4 -6
  300. package/lib/stats/DefaultStatsPrinterPlugin.js +14 -14
  301. package/lib/stats/StatsFactory.js +11 -9
  302. package/lib/stats/StatsPrinter.js +9 -2
  303. package/lib/url/URLParserPlugin.js +5 -2
  304. package/lib/util/AsyncQueue.js +10 -0
  305. package/lib/util/LazyBucketSortedSet.js +5 -0
  306. package/lib/util/LazySet.js +6 -4
  307. package/lib/util/LocConverter.js +11 -1
  308. package/lib/util/Semaphore.js +1 -0
  309. package/lib/util/SourceProcessor.js +106 -0
  310. package/lib/util/TupleSet.js +1 -0
  311. package/lib/util/WeakTupleMap.js +27 -1
  312. package/lib/util/chainedImports.js +3 -3
  313. package/lib/util/comparators.js +2 -2
  314. package/lib/util/concatenate.js +31 -7
  315. package/lib/util/createHash.js +0 -1
  316. package/lib/util/deterministicGrouping.js +19 -12
  317. package/lib/util/extractSourceMap.js +1 -1
  318. package/lib/util/findGraphRoots.js +2 -0
  319. package/lib/util/fs.js +10 -5
  320. package/lib/util/hash/DebugHash.js +1 -0
  321. package/lib/util/hash/hash-digest.js +24 -15
  322. package/lib/util/identifier.js +7 -0
  323. package/lib/util/internalSerializables.js +11 -2
  324. package/lib/util/magicComment.js +42 -0
  325. package/lib/util/makeSerializable.js +1 -0
  326. package/lib/util/nonNumericOnlyHash.js +30 -1
  327. package/lib/util/property.js +7 -1
  328. package/lib/util/publicPathPlaceholder.js +64 -0
  329. package/lib/util/registerExternalSerializer.js +4 -4
  330. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  331. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +1 -1
  332. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +1 -96
  333. package/lib/wasm-async/AsyncWebAssemblyParser.js +1 -1
  334. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +1 -1
  335. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  336. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +1 -0
  337. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -3
  338. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -1
  339. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
  340. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +2 -0
  341. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -0
  342. package/lib/wasm-sync/WebAssemblyParser.js +7 -3
  343. package/lib/web/JsonpChunkLoadingRuntimeModule.js +45 -39
  344. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +11 -10
  345. package/package.json +35 -27
  346. package/schemas/WebpackOptions.check.js +1 -1
  347. package/schemas/WebpackOptions.json +212 -3
  348. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -1
  349. package/schemas/plugins/HtmlParserOptions.check.d.ts +7 -0
  350. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  351. package/schemas/plugins/HtmlParserOptions.json +3 -0
  352. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  353. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  354. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  355. package/types.d.ts +1456 -290
  356. package/lib/css/walkCssTokens.js +0 -2020
  357. package/lib/util/AppendOnlyStackedSet.js +0 -93
@@ -10,9 +10,14 @@ const {
10
10
  JAVASCRIPT_MODULE_TYPE_ESM
11
11
  } = require("../ModuleTypeConstants");
12
12
  const RuntimeGlobals = require("../RuntimeGlobals");
13
+ const {
14
+ harmonySpecifierTag
15
+ } = require("../dependencies/HarmonyImportDependencyParserPlugin");
16
+ const HarmonyImportSideEffectDependency = require("../dependencies/HarmonyImportSideEffectDependency");
13
17
  const PureExpressionDependency = require("../dependencies/PureExpressionDependency");
14
- const InnerGraph = require("./InnerGraph");
18
+ const { getInnerGraphUtils, topLevelSymbolTag } = require("./InnerGraph");
15
19
 
20
+ /** @typedef {import("estree").CallExpression} CallExpression */
16
21
  /** @typedef {import("estree").ClassDeclaration} ClassDeclaration */
17
22
  /** @typedef {import("estree").ClassExpression} ClassExpression */
18
23
  /** @typedef {import("estree").Expression} Expression */
@@ -21,14 +26,16 @@ const InnerGraph = require("./InnerGraph");
21
26
  /** @typedef {import("estree").Node} Node */
22
27
  /** @typedef {import("estree").VariableDeclarator} VariableDeclarator */
23
28
  /** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
29
+ /** @typedef {import("../Compilation")} Compilation */
24
30
  /** @typedef {import("../Compiler")} Compiler */
31
+ /** @typedef {import("../Dependency")} Dependency */
25
32
  /** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
33
+ /** @typedef {import("../Module")} Module */
34
+ /** @typedef {import("../ModuleGraph")} ModuleGraph */
26
35
  /** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
27
36
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
28
37
  /** @typedef {import("./InnerGraph").TopLevelSymbol} TopLevelSymbol */
29
38
 
30
- const { topLevelSymbolTag } = InnerGraph;
31
-
32
39
  const PLUGIN_NAME = "InnerGraphPlugin";
33
40
  const impureVariableDeclarationKinds = new Set(["using", "await using"]);
34
41
 
@@ -43,12 +50,24 @@ class InnerGraphPlugin {
43
50
  PLUGIN_NAME,
44
51
  (compilation, { normalModuleFactory }) => {
45
52
  const logger = compilation.getLogger("webpack.InnerGraphPlugin");
53
+ const innerGraph = getInnerGraphUtils(compilation);
46
54
 
47
55
  compilation.dependencyTemplates.set(
48
56
  PureExpressionDependency,
49
57
  new PureExpressionDependency.Template()
50
58
  );
51
59
 
60
+ /**
61
+ * Adds pure dependency added after parsing, with parents set so it survives persistent caching.
62
+ * @param {Module} module module
63
+ * @param {Dependency} dep pure dependency
64
+ * @returns {void}
65
+ */
66
+ const addPureDependency = (module, dep) => {
67
+ compilation.moduleGraph.setParents(dep, module, module, -1);
68
+ module.addDependency(dep);
69
+ };
70
+
52
71
  /**
53
72
  * Handles the hook callback for this code path.
54
73
  * @param {JavascriptParser} parser the parser
@@ -61,7 +80,7 @@ class InnerGraphPlugin {
61
80
  * @param {Expression} sup sup
62
81
  */
63
82
  const onUsageSuper = (sup) => {
64
- InnerGraph.onUsage(parser.state, (usedByExports) => {
83
+ innerGraph.onUsage(parser.state, (usedByExports, module) => {
65
84
  switch (usedByExports) {
66
85
  case undefined:
67
86
  case true:
@@ -73,7 +92,7 @@ class InnerGraphPlugin {
73
92
  );
74
93
  dep.loc = /** @type {DependencyLocation} */ (sup.loc);
75
94
  dep.usedByExports = usedByExports;
76
- parser.state.module.addDependency(dep);
95
+ addPureDependency(module, dep);
77
96
  break;
78
97
  }
79
98
  }
@@ -81,21 +100,14 @@ class InnerGraphPlugin {
81
100
  };
82
101
 
83
102
  parser.hooks.program.tap(PLUGIN_NAME, () => {
84
- InnerGraph.enable(parser.state);
103
+ innerGraph.enable(parser.state);
85
104
 
86
105
  statementWithTopLevelSymbol = new WeakMap();
87
106
  statementPurePart = new WeakMap();
88
107
  classWithTopLevelSymbol = new WeakMap();
89
108
  declWithTopLevelSymbol = new WeakMap();
90
109
  pureDeclarators = new WeakSet();
91
- });
92
-
93
- parser.hooks.finish.tap(PLUGIN_NAME, () => {
94
- if (!InnerGraph.isEnabled(parser.state)) return;
95
-
96
- logger.time("infer dependency usage");
97
- InnerGraph.inferDependencyUsage(parser.state);
98
- logger.timeAggregate("infer dependency usage");
110
+ pureConditionByCallExpr = new WeakMap();
99
111
  });
100
112
 
101
113
  // During prewalking the following datastructures are filled with
@@ -120,75 +132,151 @@ class InnerGraphPlugin {
120
132
  /** @type {WeakSet<VariableDeclarator>} */
121
133
  let pureDeclarators = new WeakSet();
122
134
 
135
+ /** @type {WeakMap<CallExpression, (compilation: Compilation, module: Module) => boolean>} */
136
+ let pureConditionByCallExpr = new WeakMap();
137
+
138
+ parser.hooks.isPure.for("CallExpression").tap(
139
+ {
140
+ name: PLUGIN_NAME,
141
+ stage: -10
142
+ },
143
+ (expression) => {
144
+ const expr = /** @type {CallExpression} */ (expression);
145
+ const callee = expr.callee;
146
+ /** @type {Node} */
147
+ let root;
148
+ /** @type {string[]} */
149
+ let chainMembers;
150
+ if (callee.type === "Identifier") {
151
+ root = callee;
152
+ chainMembers = [];
153
+ } else if (callee.type === "MemberExpression") {
154
+ const chain = parser.extractMemberExpressionChain(callee);
155
+ // optional chaining short-circuits and breaks straight purity
156
+ if (chain.membersOptionals.some(Boolean)) return;
157
+ root = /** @type {Node} */ (chain.object);
158
+ // extractMemberExpressionChain returns members in reverse
159
+ chainMembers = [...chain.members].reverse();
160
+ } else {
161
+ return;
162
+ }
163
+ if (root.type !== "Identifier") return;
164
+ const harmonySettings =
165
+ /** @type {{ source: string, ids: string[] } | undefined} */ (
166
+ parser.getTagData(root.name, harmonySpecifierTag)
167
+ );
168
+ if (!harmonySettings) return;
169
+ const ids = [...harmonySettings.ids, ...chainMembers];
170
+ if (ids.length === 0) return;
171
+ let pos = /** @type {Range} */ (callee.range)[1];
172
+ for (const arg of expr.arguments) {
173
+ if (arg.type === "SpreadElement") return;
174
+ if (!parser.isPure(arg, pos)) return;
175
+ pos = /** @type {Range} */ (arg.range)[1];
176
+ }
177
+ const source = harmonySettings.source;
178
+ pureConditionByCallExpr.set(expr, (compilation, module) => {
179
+ const moduleGraph = compilation.moduleGraph;
180
+ for (const dep of module.dependencies) {
181
+ if (
182
+ dep instanceof HarmonyImportSideEffectDependency &&
183
+ dep.request === source
184
+ ) {
185
+ const m = moduleGraph.getModule(dep);
186
+ if (!m) return false;
187
+ const exportInfo = moduleGraph
188
+ .getExportsInfo(m)
189
+ .getReadOnlyExportInfoRecursive(ids);
190
+ if (!exportInfo) return false;
191
+ const target = exportInfo.getTarget(moduleGraph);
192
+ const final =
193
+ target && target.export
194
+ ? moduleGraph
195
+ .getExportsInfo(target.module)
196
+ .getReadOnlyExportInfoRecursive(target.export)
197
+ : exportInfo;
198
+ return final !== undefined && final.pureProvide === true;
199
+ }
200
+ }
201
+ return false;
202
+ });
203
+ }
204
+ );
205
+
123
206
  // The following hooks are used during prewalking:
124
207
 
125
208
  parser.hooks.preStatement.tap(PLUGIN_NAME, (statement) => {
126
- if (!InnerGraph.isEnabled(parser.state)) return;
209
+ if (!innerGraph.isEnabled(parser.state)) return;
127
210
 
128
211
  if (
129
212
  parser.scope.topLevelScope === true &&
130
213
  statement.type === "FunctionDeclaration"
131
214
  ) {
132
215
  const name = statement.id ? statement.id.name : "*default*";
133
- const symbol =
134
- /** @type {TopLevelSymbol} */
135
- (InnerGraph.tagTopLevelSymbol(parser, name));
216
+ const symbol = /** @type {TopLevelSymbol} */ (
217
+ innerGraph.tagTopLevelSymbol(
218
+ parser,
219
+ name,
220
+ parser.isPure(
221
+ statement,
222
+ /** @type {Range} */ (statement.range)[0]
223
+ )
224
+ )
225
+ );
136
226
  statementWithTopLevelSymbol.set(statement, symbol);
137
227
  return true;
138
228
  }
139
229
  });
140
230
 
141
231
  parser.hooks.blockPreStatement.tap(PLUGIN_NAME, (statement) => {
142
- if (!InnerGraph.isEnabled(parser.state)) return;
232
+ if (!innerGraph.isEnabled(parser.state)) return;
143
233
 
144
234
  if (parser.scope.topLevelScope === true) {
145
- if (
146
- statement.type === "ClassDeclaration" &&
147
- parser.isPure(
235
+ if (statement.type === "ClassDeclaration") {
236
+ const name = statement.id ? statement.id.name : "*default*";
237
+ const pure = parser.isPure(
148
238
  statement,
149
239
  /** @type {Range} */ (statement.range)[0]
150
- )
151
- ) {
152
- const name = statement.id ? statement.id.name : "*default*";
240
+ );
153
241
  const symbol = /** @type {TopLevelSymbol} */ (
154
- InnerGraph.tagTopLevelSymbol(parser, name)
242
+ innerGraph.tagTopLevelSymbol(parser, name, pure)
155
243
  );
156
244
  classWithTopLevelSymbol.set(statement, symbol);
157
245
  return true;
158
246
  }
159
247
  if (statement.type === "ExportDefaultDeclaration") {
160
248
  const name = "*default*";
249
+ const decl = statement.declaration;
250
+ /** @type {boolean | ((compilation: Compilation, module: Module) => boolean)} */
251
+ let pure = parser.isPure(
252
+ decl,
253
+ /** @type {Range} */ (statement.range)[0]
254
+ );
255
+ if (!pure && decl.type === "CallExpression") {
256
+ const deferred = pureConditionByCallExpr.get(decl);
257
+ if (deferred) pure = deferred;
258
+ }
161
259
  const symbol =
162
260
  /** @type {TopLevelSymbol} */
163
- (InnerGraph.tagTopLevelSymbol(parser, name));
164
- const decl = statement.declaration;
261
+ (innerGraph.tagTopLevelSymbol(parser, name, pure));
165
262
  if (
166
- (decl.type === "ClassExpression" ||
167
- decl.type === "ClassDeclaration") &&
168
- parser.isPure(
169
- /** @type {ClassExpression | ClassDeclaration} */
170
- (decl),
171
- /** @type {Range} */
172
- (decl.range)[0]
173
- )
263
+ decl.type === "ClassExpression" ||
264
+ decl.type === "ClassDeclaration"
174
265
  ) {
175
266
  classWithTopLevelSymbol.set(
176
267
  /** @type {ClassExpression | ClassDeclaration} */
177
268
  (decl),
178
269
  symbol
179
270
  );
180
- } else if (
181
- parser.isPure(
182
- /** @type {Expression} */
183
- (decl),
184
- /** @type {Range} */
185
- (statement.range)[0]
186
- )
187
- ) {
271
+ } else {
188
272
  statementWithTopLevelSymbol.set(statement, symbol);
189
273
  if (
274
+ pure &&
275
+ // body deferred to call-time, no eager read
190
276
  !decl.type.endsWith("FunctionExpression") &&
277
+ // only FunctionDeclaration here (classes routed above), body deferred
191
278
  !decl.type.endsWith("Declaration") &&
279
+ // literal references nothing
192
280
  decl.type !== "Literal"
193
281
  ) {
194
282
  statementPurePart.set(
@@ -203,7 +291,7 @@ class InnerGraphPlugin {
203
291
  });
204
292
 
205
293
  parser.hooks.preDeclarator.tap(PLUGIN_NAME, (decl, statement) => {
206
- if (!InnerGraph.isEnabled(parser.state)) return;
294
+ if (!innerGraph.isEnabled(parser.state)) return;
207
295
  if (impureVariableDeclarationKinds.has(statement.kind)) return;
208
296
  if (
209
297
  parser.scope.topLevelScope === true &&
@@ -218,28 +306,28 @@ class InnerGraphPlugin {
218
306
  ) {
219
307
  return;
220
308
  }
221
- if (
222
- decl.init.type === "ClassExpression" &&
223
- parser.isPure(
224
- decl.init,
225
- /** @type {Range} */ (decl.id.range)[1]
226
- )
227
- ) {
309
+ /** @type {boolean | ((compilation: Compilation, module: Module) => boolean)} */
310
+ let pure = parser.isPure(
311
+ decl.init,
312
+ /** @type {Range} */ (decl.id.range)[1]
313
+ );
314
+ if (!pure && decl.init.type === "CallExpression") {
315
+ const deferred = pureConditionByCallExpr.get(decl.init);
316
+ if (deferred) pure = deferred;
317
+ }
318
+
319
+ if (decl.init.type === "ClassExpression") {
228
320
  const symbol =
229
321
  /** @type {TopLevelSymbol} */
230
- (InnerGraph.tagTopLevelSymbol(parser, name));
322
+ (innerGraph.tagTopLevelSymbol(parser, name, pure));
231
323
  classWithTopLevelSymbol.set(decl.init, symbol);
232
- } else if (
233
- parser.isPure(
234
- decl.init,
235
- /** @type {Range} */ (decl.id.range)[1]
236
- )
237
- ) {
324
+ } else {
238
325
  const symbol =
239
326
  /** @type {TopLevelSymbol} */
240
- (InnerGraph.tagTopLevelSymbol(parser, name));
327
+ (innerGraph.tagTopLevelSymbol(parser, name, pure));
241
328
  declWithTopLevelSymbol.set(decl, symbol);
242
329
  if (
330
+ pure &&
243
331
  !decl.init.type.endsWith("FunctionExpression") &&
244
332
  decl.init.type !== "Literal"
245
333
  ) {
@@ -266,16 +354,16 @@ class InnerGraphPlugin {
266
354
  // The following hooks are called during walking:
267
355
 
268
356
  parser.hooks.statement.tap(PLUGIN_NAME, (statement) => {
269
- if (!InnerGraph.isEnabled(parser.state)) return;
357
+ if (!innerGraph.isEnabled(parser.state)) return;
270
358
  if (parser.scope.topLevelScope === true) {
271
- InnerGraph.setTopLevelSymbol(parser.state, undefined);
359
+ innerGraph.setTopLevelSymbol(parser.state, undefined);
272
360
 
273
361
  const symbol = statementWithTopLevelSymbol.get(statement);
274
362
  if (symbol) {
275
- InnerGraph.setTopLevelSymbol(parser.state, symbol);
363
+ innerGraph.setTopLevelSymbol(parser.state, symbol);
276
364
  const purePart = statementPurePart.get(statement);
277
365
  if (purePart) {
278
- InnerGraph.onUsage(parser.state, (usedByExports) => {
366
+ innerGraph.onUsage(parser.state, (usedByExports, module) => {
279
367
  switch (usedByExports) {
280
368
  case undefined:
281
369
  case true:
@@ -288,7 +376,7 @@ class InnerGraphPlugin {
288
376
  /** @type {DependencyLocation} */
289
377
  (statement.loc);
290
378
  dep.usedByExports = usedByExports;
291
- parser.state.module.addDependency(dep);
379
+ addPureDependency(module, dep);
292
380
  break;
293
381
  }
294
382
  }
@@ -301,7 +389,7 @@ class InnerGraphPlugin {
301
389
  parser.hooks.classExtendsExpression.tap(
302
390
  PLUGIN_NAME,
303
391
  (expr, statement) => {
304
- if (!InnerGraph.isEnabled(parser.state)) return;
392
+ if (!innerGraph.isEnabled(parser.state)) return;
305
393
  if (parser.scope.topLevelScope === true) {
306
394
  const symbol = classWithTopLevelSymbol.get(statement);
307
395
  if (
@@ -313,7 +401,7 @@ class InnerGraphPlugin {
313
401
  : /** @type {Range} */ (statement.range)[0]
314
402
  )
315
403
  ) {
316
- InnerGraph.setTopLevelSymbol(parser.state, symbol);
404
+ innerGraph.setTopLevelSymbol(parser.state, symbol);
317
405
  onUsageSuper(expr);
318
406
  }
319
407
  }
@@ -323,11 +411,11 @@ class InnerGraphPlugin {
323
411
  parser.hooks.classBodyElement.tap(
324
412
  PLUGIN_NAME,
325
413
  (element, classDefinition) => {
326
- if (!InnerGraph.isEnabled(parser.state)) return;
414
+ if (!innerGraph.isEnabled(parser.state)) return;
327
415
  if (parser.scope.topLevelScope === true) {
328
416
  const symbol = classWithTopLevelSymbol.get(classDefinition);
329
417
  if (symbol) {
330
- InnerGraph.setTopLevelSymbol(parser.state, undefined);
418
+ innerGraph.setTopLevelSymbol(parser.state, undefined);
331
419
  }
332
420
  }
333
421
  }
@@ -336,7 +424,7 @@ class InnerGraphPlugin {
336
424
  parser.hooks.classBodyValue.tap(
337
425
  PLUGIN_NAME,
338
426
  (expression, element, classDefinition) => {
339
- if (!InnerGraph.isEnabled(parser.state)) return;
427
+ if (!innerGraph.isEnabled(parser.state)) return;
340
428
  if (parser.scope.topLevelScope === true) {
341
429
  const symbol = classWithTopLevelSymbol.get(classDefinition);
342
430
  if (symbol) {
@@ -349,29 +437,32 @@ class InnerGraphPlugin {
349
437
  : /** @type {Range} */ (element.range)[0]
350
438
  )
351
439
  ) {
352
- InnerGraph.setTopLevelSymbol(parser.state, symbol);
440
+ innerGraph.setTopLevelSymbol(parser.state, symbol);
353
441
  if (element.type !== "MethodDefinition" && element.static) {
354
- InnerGraph.onUsage(parser.state, (usedByExports) => {
355
- switch (usedByExports) {
356
- case undefined:
357
- case true:
358
- return;
359
- default: {
360
- const dep = new PureExpressionDependency(
361
- /** @type {Range} */ (expression.range)
362
- );
363
- dep.loc =
364
- /** @type {DependencyLocation} */
365
- (expression.loc);
366
- dep.usedByExports = usedByExports;
367
- parser.state.module.addDependency(dep);
368
- break;
442
+ innerGraph.onUsage(
443
+ parser.state,
444
+ (usedByExports, module) => {
445
+ switch (usedByExports) {
446
+ case undefined:
447
+ case true:
448
+ return;
449
+ default: {
450
+ const dep = new PureExpressionDependency(
451
+ /** @type {Range} */ (expression.range)
452
+ );
453
+ dep.loc =
454
+ /** @type {DependencyLocation} */
455
+ (expression.loc);
456
+ dep.usedByExports = usedByExports;
457
+ addPureDependency(module, dep);
458
+ break;
459
+ }
369
460
  }
370
461
  }
371
- });
462
+ );
372
463
  }
373
464
  } else {
374
- InnerGraph.setTopLevelSymbol(parser.state, undefined);
465
+ innerGraph.setTopLevelSymbol(parser.state, undefined);
375
466
  }
376
467
  }
377
468
  }
@@ -379,11 +470,11 @@ class InnerGraphPlugin {
379
470
  );
380
471
 
381
472
  parser.hooks.declarator.tap(PLUGIN_NAME, (decl, _statement) => {
382
- if (!InnerGraph.isEnabled(parser.state)) return;
473
+ if (!innerGraph.isEnabled(parser.state)) return;
383
474
  const symbol = declWithTopLevelSymbol.get(decl);
384
475
 
385
476
  if (symbol) {
386
- InnerGraph.setTopLevelSymbol(parser.state, symbol);
477
+ innerGraph.setTopLevelSymbol(parser.state, symbol);
387
478
  if (pureDeclarators.has(decl)) {
388
479
  if (
389
480
  /** @type {ClassExpression} */
@@ -393,7 +484,7 @@ class InnerGraphPlugin {
393
484
  onUsageSuper(decl.init.superClass);
394
485
  }
395
486
  } else {
396
- InnerGraph.onUsage(parser.state, (usedByExports) => {
487
+ innerGraph.onUsage(parser.state, (usedByExports, module) => {
397
488
  switch (usedByExports) {
398
489
  case undefined:
399
490
  case true:
@@ -407,7 +498,7 @@ class InnerGraphPlugin {
407
498
  );
408
499
  dep.loc = /** @type {DependencyLocation} */ (decl.loc);
409
500
  dep.usedByExports = usedByExports;
410
- parser.state.module.addDependency(dep);
501
+ addPureDependency(module, dep);
411
502
  break;
412
503
  }
413
504
  }
@@ -419,7 +510,7 @@ class InnerGraphPlugin {
419
510
  decl.init
420
511
  )
421
512
  );
422
- InnerGraph.setTopLevelSymbol(parser.state, undefined);
513
+ innerGraph.setTopLevelSymbol(parser.state, undefined);
423
514
  return true;
424
515
  } else if (
425
516
  decl.id.type === "Identifier" &&
@@ -428,7 +519,7 @@ class InnerGraphPlugin {
428
519
  classWithTopLevelSymbol.has(decl.init)
429
520
  ) {
430
521
  parser.walkExpression(decl.init);
431
- InnerGraph.setTopLevelSymbol(parser.state, undefined);
522
+ innerGraph.setTopLevelSymbol(parser.state, undefined);
432
523
  return true;
433
524
  }
434
525
  });
@@ -439,10 +530,10 @@ class InnerGraphPlugin {
439
530
  const topLevelSymbol = /** @type {TopLevelSymbol} */ (
440
531
  parser.currentTagData
441
532
  );
442
- const currentTopLevelSymbol = InnerGraph.getTopLevelSymbol(
533
+ const currentTopLevelSymbol = innerGraph.getTopLevelSymbol(
443
534
  parser.state
444
535
  );
445
- InnerGraph.addUsage(
536
+ innerGraph.addUsage(
446
537
  parser.state,
447
538
  topLevelSymbol,
448
539
  currentTopLevelSymbol || true
@@ -451,7 +542,7 @@ class InnerGraphPlugin {
451
542
  parser.hooks.assign
452
543
  .for(topLevelSymbolTag)
453
544
  .tap(PLUGIN_NAME, (expr) => {
454
- if (!InnerGraph.isEnabled(parser.state)) return;
545
+ if (!innerGraph.isEnabled(parser.state)) return;
455
546
  if (expr.operator === "=") return true;
456
547
  });
457
548
  };
@@ -462,8 +553,14 @@ class InnerGraphPlugin {
462
553
  .for(JAVASCRIPT_MODULE_TYPE_ESM)
463
554
  .tap(PLUGIN_NAME, handler);
464
555
 
465
- compilation.hooks.finishModules.tap(PLUGIN_NAME, () => {
466
- logger.timeAggregateEnd("infer dependency usage");
556
+ compilation.hooks.finishModules.tap(PLUGIN_NAME, (modules) => {
557
+ logger.time("infer dependency usage");
558
+ for (const module of modules) {
559
+ innerGraph.inferDependencyUsage(module);
560
+ // state is dead after inference; release it to not retain ASTs via callbacks
561
+ innerGraph.release(module);
562
+ }
563
+ logger.timeEnd("infer dependency usage");
467
564
  });
468
565
  }
469
566
  );