@depup/webpack 5.109.2-depup.0 → 5.110.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 (640) hide show
  1. package/README.md +5 -5
  2. package/changes.json +7 -7
  3. package/lib/APIPlugin.js +123 -17
  4. package/lib/AsyncDependenciesBlock.js +10 -7
  5. package/lib/AutomaticPrefetchPlugin.js +1 -1
  6. package/lib/BannerPlugin.js +10 -6
  7. package/lib/CacheFacade.js +6 -6
  8. package/lib/Chunk.js +14 -11
  9. package/lib/ChunkGraph.js +26 -17
  10. package/lib/ChunkGroup.js +7 -7
  11. package/lib/ChunkTemplate.js +35 -44
  12. package/lib/CircularModulesPlugin.js +205 -28
  13. package/lib/CleanPlugin.js +4 -7
  14. package/lib/CodeGenerationResults.js +11 -8
  15. package/lib/CompatibilityPlugin.js +7 -7
  16. package/lib/Compilation.js +688 -409
  17. package/lib/Compiler.js +53 -38
  18. package/lib/ConcatenationScope.js +117 -8
  19. package/lib/ConditionalInitFragment.js +3 -3
  20. package/lib/ConstPlugin.js +13 -11
  21. package/lib/ContextExclusionPlugin.js +1 -1
  22. package/lib/ContextModule.js +146 -54
  23. package/lib/ContextModuleFactory.js +46 -14
  24. package/lib/ContextReplacementPlugin.js +12 -14
  25. package/lib/DefinePlugin.js +121 -37
  26. package/lib/DependenciesBlock.js +9 -6
  27. package/lib/Dependency.js +36 -16
  28. package/lib/DependencyTemplate.js +11 -12
  29. package/lib/DependencyTemplates.js +3 -3
  30. package/lib/DotenvPlugin.js +50 -13
  31. package/lib/DynamicEntryPlugin.js +8 -4
  32. package/lib/EntryOptionPlugin.js +8 -4
  33. package/lib/EntryPlugin.js +2 -2
  34. package/lib/Entrypoint.js +6 -2
  35. package/lib/EnvironmentPlugin.js +2 -2
  36. package/lib/EvalDevToolModulePlugin.js +8 -4
  37. package/lib/EvalSourceMapDevToolPlugin.js +15 -8
  38. package/lib/ExportsInfo.js +101 -14
  39. package/lib/ExportsInfoApiPlugin.js +2 -4
  40. package/lib/ExternalModule.js +232 -77
  41. package/lib/ExternalModuleFactoryPlugin.js +97 -38
  42. package/lib/ExternalsPlugin.js +10 -6
  43. package/lib/FileSystemInfo.js +44 -70
  44. package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
  45. package/lib/FlagDependencyExportsPlugin.js +76 -19
  46. package/lib/FlagDependencyUsagePlugin.js +32 -47
  47. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  48. package/lib/Generator.js +36 -15
  49. package/lib/HotModuleReplacementPlugin.js +16 -44
  50. package/lib/IgnorePlugin.js +8 -4
  51. package/lib/IgnoreWarningsPlugin.js +2 -2
  52. package/lib/InitFragment.js +8 -4
  53. package/lib/JavascriptMetaInfoPlugin.js +35 -4
  54. package/lib/LazyBarrel.js +3 -4
  55. package/lib/LibraryTemplatePlugin.js +10 -6
  56. package/lib/LoaderOptionsPlugin.js +7 -3
  57. package/lib/LoaderTargetPlugin.js +1 -1
  58. package/lib/MainTemplate.js +49 -42
  59. package/lib/ManifestPlugin.js +12 -11
  60. package/lib/Module.js +62 -33
  61. package/lib/ModuleFactory.js +3 -3
  62. package/lib/ModuleFilenameHelpers.js +9 -4
  63. package/lib/ModuleGraph.js +195 -21
  64. package/lib/ModuleGraphConnection.js +6 -13
  65. package/lib/ModuleInfoHeaderPlugin.js +8 -10
  66. package/lib/ModuleTemplate.js +62 -63
  67. package/lib/MultiCompiler.js +130 -64
  68. package/lib/MultiStats.js +40 -9
  69. package/lib/MultiWatching.js +3 -3
  70. package/lib/NoEmitOnErrorsPlugin.js +1 -1
  71. package/lib/NodeStuffPlugin.js +29 -19
  72. package/lib/NormalModule.js +141 -85
  73. package/lib/NormalModuleFactory.js +555 -110
  74. package/lib/NormalModuleReplacementPlugin.js +5 -8
  75. package/lib/NullFactory.js +6 -2
  76. package/lib/OptionsApply.js +7 -3
  77. package/lib/Parser.js +7 -3
  78. package/lib/PlatformPlugin.js +2 -2
  79. package/lib/PrefetchPlugin.js +1 -1
  80. package/lib/ProgressPlugin.js +16 -13
  81. package/lib/ProvidePlugin.js +3 -5
  82. package/lib/RawModule.js +25 -17
  83. package/lib/RecordIdsPlugin.js +3 -3
  84. package/lib/RequestShortener.js +1 -1
  85. package/lib/ResolverFactory.js +2 -2
  86. package/lib/RuntimeGlobals.js +22 -10
  87. package/lib/RuntimeModule.js +29 -19
  88. package/lib/RuntimePlugin.js +332 -169
  89. package/lib/RuntimeTemplate.js +2792 -352
  90. package/lib/SelfModuleFactory.js +7 -3
  91. package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
  92. package/lib/SourceMapDevToolPlugin.js +30 -20
  93. package/lib/Stats.js +3 -4
  94. package/lib/Template.js +32 -22
  95. package/lib/TemplatedPathPlugin.js +96 -14
  96. package/lib/UseStrictPlugin.js +4 -6
  97. package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
  98. package/lib/WarnDeprecatedOptionPlugin.js +1 -1
  99. package/lib/WarnNoModeSetPlugin.js +1 -1
  100. package/lib/WatchIgnorePlugin.js +8 -6
  101. package/lib/Watching.js +8 -8
  102. package/lib/WebpackIsIncludedPlugin.js +2 -4
  103. package/lib/WebpackOptionsApply.js +308 -18
  104. package/lib/WebpackOptionsDefaulter.js +6 -2
  105. package/lib/asset/AssetBytesGenerator.js +12 -10
  106. package/lib/asset/AssetBytesParser.js +2 -4
  107. package/lib/asset/AssetGenerator.js +188 -95
  108. package/lib/asset/AssetModule.js +7 -3
  109. package/lib/asset/AssetModulesPlugin.js +110 -38
  110. package/lib/asset/AssetParser.js +9 -7
  111. package/lib/asset/AssetSourceGenerator.js +60 -13
  112. package/lib/asset/AssetSourceParser.js +2 -4
  113. package/lib/asset/RawDataUrlModule.js +24 -16
  114. package/lib/asset/WebManifestGenerator.js +8 -10
  115. package/lib/asset/WebManifestParser.js +24 -10
  116. package/lib/async-modules/AsyncModuleHelpers.js +2 -2
  117. package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
  118. package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
  119. package/lib/async-modules/isGeneratorLowered.js +4 -4
  120. package/lib/buildChunkGraph.js +36 -27
  121. package/lib/bun/BunTargetPlugin.js +1 -1
  122. package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
  123. package/lib/cache/AddManagedPathsPlugin.js +1 -1
  124. package/lib/cache/IdleFileCachePlugin.js +2 -2
  125. package/lib/cache/MemoryCachePlugin.js +18 -10
  126. package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
  127. package/lib/cache/PackFileCacheStrategy.js +30 -23
  128. package/lib/cache/ResolverCachePlugin.js +38 -18
  129. package/lib/cache/getLazyHashedEtag.js +1 -2
  130. package/lib/cache/mergeEtags.js +1 -1
  131. package/lib/cli.js +1 -3
  132. package/lib/config/browserslistTargetHandler.js +41 -5
  133. package/lib/config/defaults.js +261 -79
  134. package/lib/config/defineConfig.js +10 -2
  135. package/lib/config/getClaimedAssetTypes.js +65 -0
  136. package/lib/config/normalization.js +36 -16
  137. package/lib/config/target.js +46 -3
  138. package/lib/container/ContainerEntryDependency.js +1 -1
  139. package/lib/container/ContainerEntryModule.js +24 -15
  140. package/lib/container/ContainerEntryModuleFactory.js +7 -3
  141. package/lib/container/ContainerPlugin.js +9 -10
  142. package/lib/container/ContainerReferencePlugin.js +6 -2
  143. package/lib/container/FallbackDependency.js +1 -1
  144. package/lib/container/FallbackModule.js +24 -17
  145. package/lib/container/FallbackModuleFactory.js +7 -3
  146. package/lib/container/HoistContainerReferencesPlugin.js +6 -11
  147. package/lib/container/ModuleFederationPlugin.js +7 -24
  148. package/lib/container/RemoteModule.js +27 -19
  149. package/lib/container/RemoteRuntimeModule.js +10 -8
  150. package/lib/container/moduleFederationHooks.js +32 -0
  151. package/lib/css/CssGenerator.js +171 -43
  152. package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
  153. package/lib/css/CssLoadingRuntimeModule.js +57 -24
  154. package/lib/css/CssModule.js +10 -7
  155. package/lib/css/CssModulesPlugin.js +168 -88
  156. package/lib/css/CssParser.js +1113 -568
  157. package/lib/css/CssServerStylesRuntimeModule.js +54 -0
  158. package/lib/css/cssMinify.js +168 -0
  159. package/lib/css/data.js +5324 -0
  160. package/lib/css/syntax.js +9579 -232
  161. package/lib/debug/ProfilingPlugin.js +14 -9
  162. package/lib/deno/DenoTargetPlugin.js +1 -1
  163. package/lib/dependencies/AMDDefineDependency.js +112 -87
  164. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
  165. package/lib/dependencies/AMDPlugin.js +9 -7
  166. package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
  167. package/lib/dependencies/AMDRequireContextDependency.js +2 -2
  168. package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
  169. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
  170. package/lib/dependencies/AMDRequireDependency.js +8 -7
  171. package/lib/dependencies/AMDRequireItemDependency.js +1 -1
  172. package/lib/dependencies/AMDRuntimeModules.js +21 -1
  173. package/lib/dependencies/BuildTimeConstDependency.js +102 -0
  174. package/lib/dependencies/CachedConstDependency.js +11 -8
  175. package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
  176. package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
  177. package/lib/dependencies/CommonJsExportsDependency.js +53 -49
  178. package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
  179. package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
  180. package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
  181. package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
  182. package/lib/dependencies/CommonJsPlugin.js +35 -6
  183. package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
  184. package/lib/dependencies/CommonJsRequireDependency.js +156 -27
  185. package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
  186. package/lib/dependencies/ConstDependency.js +8 -9
  187. package/lib/dependencies/ContextDependency.js +12 -8
  188. package/lib/dependencies/ContextDependencyHelpers.js +14 -9
  189. package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
  190. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -4
  191. package/lib/dependencies/ContextElementDependency.js +31 -12
  192. package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
  193. package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
  194. package/lib/dependencies/CssIcssExportDependency.js +56 -28
  195. package/lib/dependencies/CssIcssImportDependency.js +17 -13
  196. package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
  197. package/lib/dependencies/CssImportDependency.js +18 -9
  198. package/lib/dependencies/CssUrlDependency.js +17 -13
  199. package/lib/dependencies/DllEntryDependency.js +1 -1
  200. package/lib/dependencies/DynamicExports.js +2 -2
  201. package/lib/dependencies/ExportBindingInitFragment.js +36 -9
  202. package/lib/dependencies/ExportsInfoDependency.js +7 -8
  203. package/lib/dependencies/ExternalModuleDependency.js +9 -5
  204. package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
  205. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
  206. package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
  207. package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
  208. package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
  209. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +13 -10
  210. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +78 -12
  211. package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
  212. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
  213. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +143 -63
  214. package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
  215. package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
  216. package/lib/dependencies/HarmonyExports.js +7 -4
  217. package/lib/dependencies/HarmonyImportDependency.js +27 -19
  218. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +31 -24
  219. package/lib/dependencies/HarmonyImportGuard.js +20 -30
  220. package/lib/dependencies/HarmonyImportSideEffectDependency.js +38 -9
  221. package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
  222. package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
  223. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
  224. package/lib/dependencies/HtmlEntryDependency.js +37 -29
  225. package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
  226. package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
  227. package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
  228. package/lib/dependencies/HtmlSourceDependency.js +22 -14
  229. package/lib/dependencies/ImportContextDependency.js +2 -2
  230. package/lib/dependencies/ImportDependency.js +24 -20
  231. package/lib/dependencies/ImportEagerDependency.js +6 -9
  232. package/lib/dependencies/ImportMetaContextDependency.js +2 -2
  233. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
  234. package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
  235. package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
  236. package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
  237. package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
  238. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
  239. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
  240. package/lib/dependencies/ImportMetaPlugin.js +154 -71
  241. package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
  242. package/lib/dependencies/ImportParserPlugin.js +49 -35
  243. package/lib/dependencies/ImportPhase.js +12 -5
  244. package/lib/dependencies/ImportPlugin.js +7 -3
  245. package/lib/dependencies/ImportWeakDependency.js +6 -9
  246. package/lib/dependencies/JsonExportsDependency.js +11 -7
  247. package/lib/dependencies/LoaderDependency.js +2 -2
  248. package/lib/dependencies/LoaderImportDependency.js +2 -2
  249. package/lib/dependencies/LoaderPlugin.js +11 -7
  250. package/lib/dependencies/LocalModuleDependency.js +5 -5
  251. package/lib/dependencies/LocalModulesHelpers.js +1 -1
  252. package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
  253. package/lib/dependencies/ModuleDependency.js +9 -6
  254. package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
  255. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
  256. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  257. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
  258. package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
  259. package/lib/dependencies/NullDependency.js +3 -3
  260. package/lib/dependencies/ProvidedDependency.js +14 -10
  261. package/lib/dependencies/PureExpressionDependency.js +9 -10
  262. package/lib/dependencies/RequireContextDependency.js +2 -2
  263. package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
  264. package/lib/dependencies/RequireContextPlugin.js +8 -4
  265. package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
  266. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
  267. package/lib/dependencies/RequireEnsureDependency.js +8 -7
  268. package/lib/dependencies/RequireEnsurePlugin.js +7 -3
  269. package/lib/dependencies/RequireHeaderDependency.js +51 -12
  270. package/lib/dependencies/RequireIncludeDependency.js +6 -6
  271. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
  272. package/lib/dependencies/RequireIncludePlugin.js +7 -3
  273. package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
  274. package/lib/dependencies/RequireResolveContextDependency.js +2 -2
  275. package/lib/dependencies/RequireResolveDependency.js +4 -4
  276. package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
  277. package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
  278. package/lib/dependencies/StaticExportsDependency.js +2 -2
  279. package/lib/dependencies/SystemPlugin.js +10 -6
  280. package/lib/dependencies/SystemRuntimeModule.js +10 -0
  281. package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
  282. package/lib/dependencies/URLContextDependency.js +2 -2
  283. package/lib/dependencies/URLDependency.js +110 -64
  284. package/lib/dependencies/URLPlugin.js +7 -3
  285. package/lib/dependencies/UnsupportedDependency.js +4 -4
  286. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
  287. package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
  288. package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
  289. package/lib/dependencies/WorkerAndWorkletPlugin.js +46 -28
  290. package/lib/dependencies/WorkerDependency.js +28 -22
  291. package/lib/dependencies/WorkletDependency.js +15 -14
  292. package/lib/dependencies/getFunctionExpression.js +8 -4
  293. package/lib/dependencies/processExportInfo.js +5 -5
  294. package/lib/dll/DelegatedModule.js +34 -22
  295. package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
  296. package/lib/dll/DelegatedPlugin.js +2 -2
  297. package/lib/dll/DllEntryPlugin.js +2 -2
  298. package/lib/dll/DllModule.js +22 -15
  299. package/lib/dll/DllModuleFactory.js +7 -3
  300. package/lib/dll/DllPlugin.js +7 -5
  301. package/lib/dll/DllReferencePlugin.js +10 -7
  302. package/lib/dll/LibManifestPlugin.js +5 -5
  303. package/lib/electron/ElectronTargetPlugin.js +53 -49
  304. package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
  305. package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
  306. package/lib/errors/BroadContextsWarning.js +43 -0
  307. package/lib/errors/BuildCycleError.js +1 -1
  308. package/lib/errors/CacheEffectivenessWarning.js +55 -0
  309. package/lib/errors/ChunkRenderError.js +1 -1
  310. package/lib/errors/CircularDependenciesWarning.js +38 -0
  311. package/lib/errors/CodeGenerationError.js +1 -1
  312. package/lib/errors/CommentCompilationWarning.js +1 -1
  313. package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
  314. package/lib/errors/DuplicateModulesWarning.js +45 -0
  315. package/lib/errors/DynamicExportsWarning.js +30 -0
  316. package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
  317. package/lib/errors/EntrypointOverlapWarning.js +45 -0
  318. package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
  319. package/lib/errors/EvalUsageWarning.js +28 -0
  320. package/lib/errors/HookWebpackError.js +5 -5
  321. package/lib/errors/HotspotsWarning.js +57 -0
  322. package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
  323. package/lib/errors/InlinedAssetsWarning.js +36 -0
  324. package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
  325. package/lib/errors/LargeModulesWarning.js +45 -0
  326. package/lib/errors/LegacyJavascriptWarning.js +48 -0
  327. package/lib/errors/MissingSideEffectsWarning.js +36 -0
  328. package/lib/errors/MixedExportsWarning.js +41 -0
  329. package/lib/errors/ModuleDependencyError.js +13 -16
  330. package/lib/errors/ModuleDependencyWarning.js +5 -15
  331. package/lib/errors/ModuleHashingError.js +1 -1
  332. package/lib/errors/ModuleNotFoundError.js +2 -2
  333. package/lib/errors/ModuleParseError.js +1 -2
  334. package/lib/errors/ModuleRestoreError.js +1 -1
  335. package/lib/errors/ModuleStoreError.js +1 -1
  336. package/lib/errors/NodeStuffInWebError.js +1 -1
  337. package/lib/errors/OsDependentRuleWarning.js +31 -0
  338. package/lib/errors/PureAnnotationsWarning.js +36 -0
  339. package/lib/errors/RedundantDynamicImportWarning.js +31 -0
  340. package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
  341. package/lib/errors/SplitChunksCappedWarning.js +41 -0
  342. package/lib/errors/TinyChunksWarning.js +40 -0
  343. package/lib/errors/TopLevelThisWarning.js +34 -0
  344. package/lib/errors/UnsplitVendorsWarning.js +42 -0
  345. package/lib/errors/UnsupportedFeatureWarning.js +1 -1
  346. package/lib/errors/UnusedAliasesWarning.js +29 -0
  347. package/lib/errors/UnusedDefinesWarning.js +29 -0
  348. package/lib/errors/UnusedExternalsWarning.js +29 -0
  349. package/lib/errors/UnusedReexportsWarning.js +42 -0
  350. package/lib/errors/UnusedRuleWarning.js +29 -0
  351. package/lib/errors/WebpackError.js +9 -5
  352. package/lib/errors/deriveStackFromNestedError.js +90 -0
  353. package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
  354. package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
  355. package/lib/esm/ModuleChunkLoadingPlugin.js +89 -51
  356. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +155 -62
  357. package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
  358. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  359. package/lib/hmr/LazyCompilationPlugin.js +45 -24
  360. package/lib/hmr/lazyCompilationBackend.js +9 -6
  361. package/lib/hmr/parserHooks.js +56 -0
  362. package/lib/html/HtmlGenerator.js +277 -77
  363. package/lib/html/HtmlModule.js +7 -3
  364. package/lib/html/HtmlModulesPlugin.js +282 -162
  365. package/lib/html/HtmlParser.js +31 -86
  366. package/lib/html/data.js +1928 -0
  367. package/lib/html/htmlMinify.js +288 -0
  368. package/lib/html/syntax.js +5557 -1155
  369. package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
  370. package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
  371. package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
  372. package/lib/ids/HashedModuleIdsPlugin.js +6 -2
  373. package/lib/ids/IdHelpers.js +7 -8
  374. package/lib/ids/NamedChunkIdsPlugin.js +1 -1
  375. package/lib/ids/NamedModuleIdsPlugin.js +1 -1
  376. package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
  377. package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
  378. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
  379. package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
  380. package/lib/ids/SyncModuleIdsPlugin.js +4 -4
  381. package/lib/index.js +10 -0
  382. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
  383. package/lib/javascript/BasicEvaluatedExpression.js +18 -14
  384. package/lib/javascript/ChunkFormatHelpers.js +6 -6
  385. package/lib/javascript/ChunkHelpers.js +1 -1
  386. package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
  387. package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
  388. package/lib/javascript/JavascriptGenerator.js +65 -165
  389. package/lib/javascript/JavascriptModule.js +9 -3
  390. package/lib/javascript/JavascriptModulesPlugin.js +98 -113
  391. package/lib/javascript/JavascriptParser.js +242 -99
  392. package/lib/javascript/JavascriptParserHelpers.js +10 -7
  393. package/lib/javascript/ScopeAnalyzer.js +1094 -0
  394. package/lib/javascript/StartupHelpers.js +55 -9
  395. package/lib/javascript/syntax.js +2678 -232
  396. package/lib/json/JsonData.js +8 -4
  397. package/lib/json/JsonGenerator.js +38 -16
  398. package/lib/json/JsonModule.js +7 -3
  399. package/lib/json/JsonModulesPlugin.js +1 -1
  400. package/lib/json/JsonParser.js +5 -6
  401. package/lib/library/AbstractLibraryPlugin.js +20 -14
  402. package/lib/library/AmdLibraryPlugin.js +11 -7
  403. package/lib/library/AssignLibraryPlugin.js +19 -13
  404. package/lib/library/EnableLibraryPlugin.js +2 -2
  405. package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
  406. package/lib/library/JsonpLibraryPlugin.js +11 -7
  407. package/lib/library/ModuleLibraryPlugin.js +256 -64
  408. package/lib/library/SystemLibraryPlugin.js +12 -8
  409. package/lib/library/UmdLibraryPlugin.js +62 -25
  410. package/lib/loaders/LoaderRunner.js +14 -1
  411. package/lib/loaders/loadLoader.js +8 -4
  412. package/lib/logging/createConsoleLogger.js +7 -4
  413. package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
  414. package/lib/node/NodeEnvironmentPlugin.js +17 -3
  415. package/lib/node/NodeSourcePlugin.js +1 -1
  416. package/lib/node/NodeTargetPlugin.js +4 -3
  417. package/lib/node/NodeTemplatePlugin.js +1 -1
  418. package/lib/node/NodeWatchFileSystem.js +70 -9
  419. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
  420. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +72 -19
  421. package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
  422. package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
  423. package/lib/node/nodeConsole.js +7 -3
  424. package/lib/optimize/AggressiveMergingPlugin.js +2 -2
  425. package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
  426. package/lib/optimize/ConcatenatedModule.js +985 -470
  427. package/lib/optimize/ConstExportsPlugin.js +11 -7
  428. package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
  429. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
  430. package/lib/optimize/InlineExports.js +9 -5
  431. package/lib/optimize/InnerGraph.js +28 -12
  432. package/lib/optimize/InnerGraphPlugin.js +23 -18
  433. package/lib/optimize/LimitChunkCountPlugin.js +7 -3
  434. package/lib/optimize/MangleExportsPlugin.js +7 -8
  435. package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
  436. package/lib/optimize/MinChunkSizePlugin.js +7 -3
  437. package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
  438. package/lib/optimize/RealContentHashPlugin.js +10 -6
  439. package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
  440. package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
  441. package/lib/optimize/RuntimeChunkPlugin.js +2 -2
  442. package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
  443. package/lib/optimize/SplitChunksPlugin.js +86 -24
  444. package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
  445. package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
  446. package/lib/performance/BroadContextsPlugin.js +142 -0
  447. package/lib/performance/CacheEffectivenessPlugin.js +125 -0
  448. package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
  449. package/lib/performance/DuplicateModulesPlugin.js +93 -0
  450. package/lib/performance/DuplicatePackagesPlugin.js +119 -0
  451. package/lib/performance/DuplicatePackagesWarning.js +84 -0
  452. package/lib/performance/DynamicExportsPlugin.js +120 -0
  453. package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
  454. package/lib/performance/EntrypointOverlapPlugin.js +122 -0
  455. package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
  456. package/lib/performance/EvalUsagePlugin.js +115 -0
  457. package/lib/performance/HotspotsPlugin.js +296 -0
  458. package/lib/performance/InlinedAssetsPlugin.js +99 -0
  459. package/lib/performance/LargeModulesPlugin.js +126 -0
  460. package/lib/performance/LegacyJavascriptPlugin.js +139 -0
  461. package/lib/performance/MissingSideEffectsPlugin.js +138 -0
  462. package/lib/performance/MixedExportsPlugin.js +136 -0
  463. package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
  464. package/lib/performance/PureAnnotationsPlugin.js +219 -0
  465. package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
  466. package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
  467. package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
  468. package/lib/performance/SizeLimitsPlugin.js +139 -7
  469. package/lib/performance/SplitChunksCappedPlugin.js +99 -0
  470. package/lib/performance/TinyChunksPlugin.js +128 -0
  471. package/lib/performance/TopLevelThisPlugin.js +208 -0
  472. package/lib/performance/UnsplitVendorsPlugin.js +112 -0
  473. package/lib/performance/UnusedAliasesPlugin.js +253 -0
  474. package/lib/performance/UnusedDefinesPlugin.js +87 -0
  475. package/lib/performance/UnusedExternalsPlugin.js +110 -0
  476. package/lib/performance/UnusedReexportsPlugin.js +159 -0
  477. package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
  478. package/lib/performance/getModuleSize.js +22 -0
  479. package/lib/performance/getSourceModules.js +22 -0
  480. package/lib/performance/hasOnlyUnusedExports.js +40 -0
  481. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
  482. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
  483. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
  484. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  485. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  486. package/lib/prefetch/ResourceHintPlugin.js +295 -78
  487. package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
  488. package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
  489. package/lib/prefetch/parseResourceHintOptions.js +31 -4
  490. package/lib/rules/BasicEffectRulePlugin.js +2 -2
  491. package/lib/rules/BasicMatcherRulePlugin.js +8 -4
  492. package/lib/rules/GlobMatcherRulePlugin.js +68 -0
  493. package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
  494. package/lib/rules/RuleSetCompiler.js +146 -12
  495. package/lib/rules/UseEffectRulePlugin.js +18 -11
  496. package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
  497. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  498. package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
  499. package/lib/runtime/BaseUriRuntimeModule.js +33 -7
  500. package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
  501. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
  502. package/lib/runtime/CompatRuntimeModule.js +5 -3
  503. package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
  504. package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
  505. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
  506. package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
  507. package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
  508. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
  509. package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
  510. package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
  511. package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
  512. package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
  513. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
  514. package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
  515. package/lib/runtime/GlobalRuntimeModule.js +18 -0
  516. package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
  517. package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
  518. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +23 -6
  519. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
  520. package/lib/runtime/NonceRuntimeModule.js +10 -0
  521. package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
  522. package/lib/runtime/PublicPathRuntimeModule.js +12 -2
  523. package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
  524. package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
  525. package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
  526. package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
  527. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
  528. package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
  529. package/lib/runtime/SystemContextRuntimeModule.js +10 -0
  530. package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
  531. package/lib/runtime/WorkerRuntimeModule.js +11 -1
  532. package/lib/runtime/baseUri.js +63 -0
  533. package/lib/schemes/DataUriPlugin.js +1 -1
  534. package/lib/schemes/FileUriPlugin.js +1 -1
  535. package/lib/schemes/HttpUriPlugin.js +24 -15
  536. package/lib/schemes/VirtualUrlPlugin.js +13 -7
  537. package/lib/serialization/AggregateErrorSerializer.js +1 -1
  538. package/lib/serialization/BinaryMiddleware.js +4 -4
  539. package/lib/serialization/ErrorObjectSerializer.js +1 -1
  540. package/lib/serialization/FileMiddleware.js +7 -7
  541. package/lib/serialization/ObjectMiddleware.js +139 -114
  542. package/lib/serialization/PlainObjectSerializer.js +19 -16
  543. package/lib/sharing/ConsumeSharedModule.js +30 -21
  544. package/lib/sharing/ConsumeSharedPlugin.js +18 -10
  545. package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
  546. package/lib/sharing/ProvideSharedModule.js +25 -16
  547. package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
  548. package/lib/sharing/ProvideSharedPlugin.js +8 -4
  549. package/lib/sharing/SharePlugin.js +17 -5
  550. package/lib/sharing/ShareRuntimeModule.js +4 -4
  551. package/lib/sharing/resolveMatchedConfigs.js +9 -6
  552. package/lib/sharing/utils.js +1 -3
  553. package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
  554. package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
  555. package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
  556. package/lib/stats/StatsFactory.js +25 -26
  557. package/lib/stats/StatsPrinter.js +16 -12
  558. package/lib/typescript/TypeScriptPlugin.js +12 -14
  559. package/lib/url/URLParserPlugin.js +26 -13
  560. package/lib/util/AsyncQueue.js +4 -3
  561. package/lib/util/Hash.js +5 -1
  562. package/lib/util/LazySet.js +35 -22
  563. package/lib/util/LocConverter.js +36 -13
  564. package/lib/util/SourceProcessor.js +1050 -24
  565. package/lib/util/StringXor.js +1 -1
  566. package/lib/util/chainedImports.js +9 -5
  567. package/lib/util/cleverMerge.js +1 -1
  568. package/lib/util/comparators.js +45 -14
  569. package/lib/util/concatenate.js +203 -77
  570. package/lib/util/conventions.js +5 -1
  571. package/lib/util/createHash.js +2 -2
  572. package/lib/util/createHooksRegistry.js +8 -10
  573. package/lib/util/dataURL.js +225 -1
  574. package/lib/util/extractSourceMap.js +4 -3
  575. package/lib/util/findCaseMismatch.js +139 -0
  576. package/lib/util/formatLocation.js +1 -2
  577. package/lib/util/fs.js +22 -5
  578. package/lib/util/globUtils.js +298 -24
  579. package/lib/util/hash/BatchedHash.js +5 -1
  580. package/lib/util/hash/BulkUpdateHash.js +5 -1
  581. package/lib/util/hash/DebugHash.js +5 -1
  582. package/lib/util/hash/hash-digest.js +6 -2
  583. package/lib/util/identifier.js +4 -0
  584. package/lib/util/implicitTypeLoaderFallback.js +1 -1
  585. package/lib/util/internalSerializables.js +6 -0
  586. package/lib/util/lazyModule.js +56 -0
  587. package/lib/util/makeSerializable.js +7 -3
  588. package/lib/util/matchAlias.js +25 -0
  589. package/lib/util/mimeTypes.js +11 -5
  590. package/lib/util/nonNumericOnlyHash.js +4 -3
  591. package/lib/util/parseJson.js +5 -3
  592. package/lib/util/preloadModuleType.js +32 -0
  593. package/lib/util/registerExternalSerializer.js +7 -5
  594. package/lib/util/runtime.js +2 -2
  595. package/lib/util/semver.js +1 -1
  596. package/lib/util/serialization.js +28 -28
  597. package/lib/util/source.js +2 -2
  598. package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
  599. package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
  600. package/lib/wasm/wasmModuleFilename.js +54 -0
  601. package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +41 -21
  602. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +43 -21
  603. package/lib/wasm-async/AsyncWasmModule.js +3 -3
  604. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
  605. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
  606. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
  607. package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
  608. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +34 -8
  609. package/lib/wasm-sync/SyncWasmModule.js +2 -2
  610. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
  611. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
  612. package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
  613. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
  614. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
  615. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
  616. package/lib/wasm-sync/WebAssemblyParser.js +4 -6
  617. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  618. package/lib/web/FetchCompileAsyncWasmPlugin.js +101 -19
  619. package/lib/web/FetchCompileWasmPlugin.js +46 -16
  620. package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
  621. package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
  622. package/lib/web/JsonpTemplatePlugin.js +2 -2
  623. package/lib/webpack.js +22 -11
  624. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
  625. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
  626. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
  627. package/module.d.ts +1 -0
  628. package/package.json +32 -25
  629. package/schemas/WebpackOptions.check.js +1 -1
  630. package/schemas/WebpackOptions.json +670 -36
  631. package/schemas/plugins/HtmlParserOptions.check.js +1 -1
  632. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  633. package/schemas/plugins/container/ContainerPlugin.json +10 -0
  634. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  635. package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
  636. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  637. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  638. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  639. package/types.d.ts +3144 -454
  640. package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
@@ -7,9 +7,13 @@
7
7
 
8
8
  const path = require("path");
9
9
  const { join: joinPath } = require("./fs");
10
+ const {
11
+ ABSOLUTE_PATH_REGEXP,
12
+ WINDOWS_PATH_SEPARATOR_REGEXP
13
+ } = require("./identifier");
10
14
  const memoize = require("./memoize");
11
15
 
12
- // watchpack is only needed at watch time otherwise; load its glob core lazily
16
+ // watchpack's glob-to-regexp core, loaded only when a glob is translated
13
17
  const getGlobToRegExpSource = memoize(
14
18
  () =>
15
19
  /** @type {{ util: { globToRegExp: (glob: string) => string } }} */ (
@@ -68,7 +72,9 @@ const normalizePathSeparators = (s) => {
68
72
  * @param {string} s string
69
73
  * @returns {string} normalized path separators for filesystem paths
70
74
  */
71
- const normalizePathSeparatorsForPath = (s) => s.replace(/\\/g, "/");
75
+ const normalizePathSeparatorsForPath = (s) =>
76
+ // the scan is cheaper than the replace, and most paths have no `\`
77
+ s.includes("\\") ? s.replace(WINDOWS_PATH_SEPARATOR_REGEXP, "/") : s;
72
78
 
73
79
  /**
74
80
  * @param {string} s string
@@ -149,9 +155,26 @@ const extractGlobBaseDir = (pattern) => {
149
155
  */
150
156
  const quoteRegExpChar = (c) => (/[$()*+\-./?[\\\]^{|}]/.test(c) ? `\\${c}` : c);
151
157
 
158
+ /**
159
+ * Skips a character class: a `]` right after the `[`, or after its `!`/`^`, is
160
+ * a member rather than the terminator.
161
+ * @param {string} str string
162
+ * @param {number} start index of the `[`
163
+ * @returns {number} index of the closing `]`, or `start` when unterminated
164
+ */
165
+ const skipCharacterClass = (str, start) => {
166
+ let i = start + 1;
167
+ if (str[i] === "!" || str[i] === "^") i++;
168
+ if (str[i] === "]") i++;
169
+ while (i < str.length && str[i] !== "]") i += str[i] === "\\" ? 2 : 1;
170
+ return i < str.length ? i : start;
171
+ };
172
+
152
173
  /**
153
174
  * Expands `{a,b}` alternations (escape- and class-aware, nested) into
154
- * brace-free globs; unmatched braces are kept as literal characters.
175
+ * brace-free globs; unmatched braces are kept as literal characters. A `,`
176
+ * inside a class is a member, as `braces` and picomatch read it, so
177
+ * `import.meta.glob` patterns mean here what they mean to fast-glob.
155
178
  * @param {string} glob glob
156
179
  * @returns {string[]} brace-free globs
157
180
  */
@@ -164,10 +187,7 @@ const expandGlobBraces = (glob) => {
164
187
  if (c === "\\") {
165
188
  i++;
166
189
  } else if (c === "[") {
167
- while (i + 1 < glob.length && glob[i + 1] !== "]") {
168
- i += glob[i + 1] === "\\" ? 2 : 1;
169
- }
170
- i++;
190
+ i = skipCharacterClass(glob, i);
171
191
  } else if (c === "{") {
172
192
  if (depth === 0) braceStart = i;
173
193
  depth++;
@@ -199,10 +219,7 @@ const expandGlobBraces = (glob) => {
199
219
  if (c === "\\") {
200
220
  i++;
201
221
  } else if (c === "[") {
202
- while (i + 1 < inner.length && inner[i + 1] !== "]") {
203
- i += inner[i + 1] === "\\" ? 2 : 1;
204
- }
205
- i++;
222
+ i = skipCharacterClass(inner, i);
206
223
  } else if (c === "{") {
207
224
  altDepth++;
208
225
  } else if (c === "}") {
@@ -240,7 +257,6 @@ const fixupGlobRegExpSource = (source) =>
240
257
  * @returns {string} regexp source without anchors
241
258
  */
242
259
  const braceFreeGlobToRegExpSource = (glob) => {
243
- const globToRegExpSource = getGlobToRegExpSource();
244
260
  let source = "";
245
261
  let runStart = 0;
246
262
  /**
@@ -249,7 +265,7 @@ const braceFreeGlobToRegExpSource = (glob) => {
249
265
  const flushRun = (end) => {
250
266
  if (runStart < end) {
251
267
  source += fixupGlobRegExpSource(
252
- globToRegExpSource(glob.slice(runStart, end))
268
+ getGlobToRegExpSource()(glob.slice(runStart, end))
253
269
  );
254
270
  }
255
271
  };
@@ -261,18 +277,11 @@ const braceFreeGlobToRegExpSource = (glob) => {
261
277
  i++;
262
278
  runStart = i + 1;
263
279
  } else if (c === "[") {
264
- let end = i + 1;
265
- let negated = false;
266
- if (glob[end] === "!" || glob[end] === "^") {
267
- negated = true;
268
- end++;
269
- }
270
- const bodyStart = end;
271
- while (end < glob.length && glob[end] !== "]") {
272
- end += glob[end] === "\\" ? 2 : 1;
273
- }
280
+ const negated = glob[i + 1] === "!" || glob[i + 1] === "^";
281
+ const bodyStart = i + (negated ? 2 : 1);
282
+ const end = skipCharacterClass(glob, i);
274
283
  flushRun(i);
275
- if (end >= glob.length) {
284
+ if (end === i) {
276
285
  // unterminated class: literal `[`
277
286
  source += "\\[";
278
287
  runStart = i + 1;
@@ -326,6 +335,269 @@ const globMatchWithOptions = (pattern, str, options = {}) => {
326
335
  return regexp !== null && regexp.test(str);
327
336
  };
328
337
 
338
+ // a segment starting with a dot is only reachable by a pattern spelling it out
339
+ const NON_DOT_PREFIX = "(?!\\.)";
340
+ const NON_DOT_SEGMENT = "(?!\\.)[^/]+";
341
+ const CONSECUTIVE_STARS_REGEXP = /\*{2,}/g;
342
+ // a `//` or `/./` the path has to lose before it can be matched
343
+ const UNNORMALIZED_PATH_REGEXP = /\/\/|(?:^|\/)\.(?:\/|$)/;
344
+
345
+ /**
346
+ * Drops the `.` and empty segments of a pattern or a path — they always name
347
+ * the same file. The first and last segment stay, so a leading `./`, a leading
348
+ * `/` and a trailing `/` keep their meaning. A `..` is left alone: resolving it
349
+ * textually is what `path.matchesGlob` does, and it is wrong through a symlink,
350
+ * where `dir/link/../b` is not `dir/b`.
351
+ * @param {string[]} parts segments
352
+ * @returns {string[]} normalized segments
353
+ */
354
+ const optimizeGlobSegments = (parts) => {
355
+ let changed = false;
356
+ do {
357
+ changed = false;
358
+ for (let i = 1; i < parts.length - 1; i++) {
359
+ if (parts[i] === "." || parts[i] === "") {
360
+ parts.splice(i, 1);
361
+ i--;
362
+ changed = true;
363
+ }
364
+ }
365
+ if (
366
+ parts[0] === "." &&
367
+ parts.length === 2 &&
368
+ (parts[1] === "." || parts[1] === "")
369
+ ) {
370
+ parts.pop();
371
+ changed = true;
372
+ }
373
+ } while (changed);
374
+ return parts.length === 0 ? [""] : parts;
375
+ };
376
+
377
+ /**
378
+ * @param {string} segment segment
379
+ * @param {number} start index of the `(`
380
+ * @returns {number} index of the matching `)`, -1 when unmatched
381
+ */
382
+ const findExtendedGlobEnd = (segment, start) => {
383
+ let depth = 0;
384
+ for (let i = start; i < segment.length; i++) {
385
+ const c = segment[i];
386
+ if (c === "[") {
387
+ i = skipCharacterClass(segment, i);
388
+ } else if (c === "(") {
389
+ depth++;
390
+ } else if (c === ")" && --depth === 0) {
391
+ return i;
392
+ }
393
+ }
394
+ return -1;
395
+ };
396
+
397
+ /**
398
+ * @param {string} inner group body
399
+ * @returns {string[]} top-level `|` alternatives
400
+ */
401
+ const splitExtendedGlobAlternatives = (inner) => {
402
+ /** @type {string[]} */
403
+ const alternatives = [];
404
+ let start = 0;
405
+ let depth = 0;
406
+ for (let i = 0; i < inner.length; i++) {
407
+ const c = inner[i];
408
+ if (c === "[") {
409
+ i = skipCharacterClass(inner, i);
410
+ } else if (c === "(") {
411
+ depth++;
412
+ } else if (c === ")") {
413
+ depth--;
414
+ } else if (c === "|" && depth === 0) {
415
+ alternatives.push(inner.slice(start, i));
416
+ start = i + 1;
417
+ }
418
+ }
419
+ alternatives.push(inner.slice(start));
420
+ return alternatives;
421
+ };
422
+
423
+ /**
424
+ * @param {string} segment segment
425
+ * @returns {number} index of the first extended glob prefix, -1 when there is none
426
+ */
427
+ const findExtendedGlobStart = (segment) => {
428
+ for (let i = 0; i < segment.length - 1; i++) {
429
+ const c = segment[i];
430
+ if (c === "[") {
431
+ i = skipCharacterClass(segment, i);
432
+ } else if (
433
+ segment[i + 1] === "(" &&
434
+ (c === "?" || c === "*" || c === "+" || c === "@" || c === "!")
435
+ ) {
436
+ return i;
437
+ }
438
+ }
439
+ return -1;
440
+ };
441
+
442
+ /**
443
+ * Whether the segment can match a leading dot, which it does when the dot is
444
+ * literal in the pattern — after an extended glob that matched nothing
445
+ * included, as `*(a).b` matching `.b`.
446
+ * @param {string} segment segment without separators
447
+ * @returns {boolean} segment may match a dot segment
448
+ */
449
+ const segmentGlobMatchesLeadingDot = (segment) => {
450
+ if (segment.startsWith(".")) return true;
451
+ if (findExtendedGlobStart(segment) !== 0) return false;
452
+ const end = findExtendedGlobEnd(segment, 1);
453
+ if (end === -1) return false;
454
+ const type = segment[0];
455
+ const emptyMatch =
456
+ type === "*" ||
457
+ type === "?" ||
458
+ ((type === "@" || type === "+") &&
459
+ splitExtendedGlobAlternatives(segment.slice(2, end)).includes(""));
460
+ return emptyMatch && segmentGlobMatchesLeadingDot(segment.slice(end + 1));
461
+ };
462
+
463
+ /**
464
+ * Whether the segment matches an empty path segment, which only the extended
465
+ * globs that quantify their group do — `!(x)/a` matches `/a`, `@(a|)/a` does
466
+ * not, and neither does a bare `*`.
467
+ * @param {string} segment segment without separators
468
+ * @returns {boolean} segment may match nothing
469
+ */
470
+ const segmentGlobMatchesEmpty = (segment) => {
471
+ if (segment === "") return true;
472
+ if (findExtendedGlobStart(segment) !== 0) return false;
473
+ const type = segment[0];
474
+ if (type !== "!" && type !== "*" && type !== "?") return false;
475
+ const end = findExtendedGlobEnd(segment, 1);
476
+ return end !== -1 && segmentGlobMatchesEmpty(segment.slice(end + 1));
477
+ };
478
+
479
+ /**
480
+ * Compiles one path segment, extended globs (`+(a|b)`, `!(a)`, …) included.
481
+ * `!(a)` is "anything but `a`", so it is a lookahead over what the rest of the
482
+ * segment matches, not over `a` alone.
483
+ * @param {string} segment segment without separators
484
+ * @returns {string} regexp source
485
+ */
486
+ const segmentGlobToRegExpSource = (segment) => {
487
+ const start = findExtendedGlobStart(segment);
488
+ const end = start === -1 ? -1 : findExtendedGlobEnd(segment, start + 1);
489
+ if (end === -1) {
490
+ // no extended glob here, and `**` within a segment is a plain `*`
491
+ return braceFreeGlobToRegExpSource(
492
+ segment.replace(CONSECUTIVE_STARS_REGEXP, "*")
493
+ );
494
+ }
495
+ const prefix = segmentGlobToRegExpSource(segment.slice(0, start));
496
+ const rest = segmentGlobToRegExpSource(segment.slice(end + 1));
497
+ const group = `(?:${splitExtendedGlobAlternatives(
498
+ segment.slice(start + 2, end)
499
+ )
500
+ .map(segmentGlobToRegExpSource)
501
+ .join("|")})`;
502
+ switch (segment[start]) {
503
+ case "?":
504
+ return `${prefix}${group}?${rest}`;
505
+ case "*":
506
+ return `${prefix}${group}*${rest}`;
507
+ case "+":
508
+ return `${prefix}${group}+${rest}`;
509
+ case "@":
510
+ return `${prefix}${group}${rest}`;
511
+ default:
512
+ return `${prefix}(?!${group}${rest}(?:/|$))[^/]*?${rest}`;
513
+ }
514
+ };
515
+
516
+ /**
517
+ * Compiles one brace-free `/`-separated glob to a regexp source with
518
+ * `path.matchesGlob` semantics: `*`, `?` and classes stay within a segment,
519
+ * a whole-segment `**` spans segments, and neither crosses a dot segment.
520
+ * @param {string} glob brace-free glob
521
+ * @returns {string} regexp source without anchors
522
+ */
523
+ const braceFreeGlobToPathRegExpSource = (glob) => {
524
+ const segments = optimizeGlobSegments(glob.split("/"));
525
+ let source = "";
526
+ let needSeparator = false;
527
+ for (let i = 0; i < segments.length; i++) {
528
+ const segment = segments[i];
529
+ const isLast = i === segments.length - 1;
530
+ if (segment === "") {
531
+ // leading separator (absolute) and trailing one (directory)
532
+ source += "/";
533
+ continue;
534
+ }
535
+ if (segment === "**") {
536
+ source += isLast
537
+ ? `${needSeparator ? "/" : ""}(?:${NON_DOT_SEGMENT}(?:/${NON_DOT_SEGMENT})*)?`
538
+ : needSeparator
539
+ ? `(?:/${NON_DOT_SEGMENT})*`
540
+ : `/?(?:${NON_DOT_SEGMENT}/)*`;
541
+ needSeparator = !isLast && needSeparator;
542
+ continue;
543
+ }
544
+ if (needSeparator) source += "/";
545
+ // a segment matches at least one character
546
+ if (!segmentGlobMatchesEmpty(segment)) source += "(?=[^/])";
547
+ if (!segmentGlobMatchesLeadingDot(segment)) source += NON_DOT_PREFIX;
548
+ source += segmentGlobToRegExpSource(segment);
549
+ needSeparator = true;
550
+ }
551
+ // a pattern without a trailing separator still matches a directory path
552
+ return glob.endsWith("/") ? source : `${source}/?`;
553
+ };
554
+
555
+ /**
556
+ * Compiles a glob into a matcher over OS-independent paths: `\` is a path
557
+ * separator in both the pattern and the tested path (never an escape, so a
558
+ * pattern built with `path.resolve` works everywhere; use `[*]` to match a
559
+ * literal `*`), and a relative pattern matches at any depth. Matching follows
560
+ * `path.matchesGlob`, except where its minimatch shows through — see the
561
+ * divergences listed above the corpus in `test/globUtils.unittest.js`.
562
+ * @param {string} pattern glob pattern
563
+ * @param {GlobMatchOptions=} options options
564
+ * @returns {((str: string) => boolean) | null} matcher, null for un-compilable patterns
565
+ */
566
+ const createPathGlobMatcher = (pattern, options = {}) => {
567
+ let normalizedPattern = normalizePathSeparatorsForPath(pattern);
568
+ while (normalizedPattern.startsWith("./")) {
569
+ normalizedPattern = normalizedPattern.slice(2);
570
+ }
571
+ if (
572
+ !ABSOLUTE_PATH_REGEXP.test(normalizedPattern) &&
573
+ !normalizedPattern.startsWith("**/")
574
+ ) {
575
+ normalizedPattern = `**/${normalizedPattern}`;
576
+ }
577
+ const sources = expandGlobBraces(normalizedPattern).map(
578
+ braceFreeGlobToPathRegExpSource
579
+ );
580
+ const source = sources.length === 1 ? sources[0] : `(?:${sources.join("|")})`;
581
+ /** @type {RegExp} */
582
+ let regexp;
583
+ try {
584
+ regexp = new RegExp(
585
+ `^${source}$`,
586
+ options.caseSensitive === false ? "i" : ""
587
+ );
588
+ } catch (_err) {
589
+ return null;
590
+ }
591
+ return (str) => {
592
+ const normalizedPath = normalizePathSeparatorsForPath(str);
593
+ return regexp.test(
594
+ UNNORMALIZED_PATH_REGEXP.test(normalizedPath)
595
+ ? optimizeGlobSegments(normalizedPath.split("/")).join("/")
596
+ : normalizedPath
597
+ );
598
+ };
599
+ };
600
+
329
601
  /**
330
602
  * @param {string} path path
331
603
  * @param {string} baseDir base directory
@@ -689,8 +961,10 @@ const globPatternBaseReachesDir = (patterns, dirPath) => {
689
961
 
690
962
  module.exports = {
691
963
  commonGlobBaseDir,
964
+ createPathGlobMatcher,
692
965
  escapeGlobPattern,
693
966
  extractGlobBaseDir,
967
+ getGlobToRegExpSource,
694
968
  globMatchNormalizedWithExplicitDot,
695
969
  globMatchWithExplicitDot,
696
970
  globMatchWithOptions,
@@ -10,7 +10,11 @@ const { digest, update } = require("./hash-digest");
10
10
  /** @type {number} */
11
11
  const MAX_SHORT_STRING = require("./wasm-hash").MAX_SHORT_STRING;
12
12
 
13
- /** @typedef {import("../../../declarations/WebpackOptions").HashDigest} Encoding */
13
+ /**
14
+ * @import {
15
+ * HashDigest as Encoding
16
+ * } from "../../../declarations/WebpackOptions"
17
+ */
14
18
 
15
19
  class BatchedHash extends Hash {
16
20
  /**
@@ -8,7 +8,11 @@
8
8
  const Hash = require("../Hash");
9
9
  const { digest, update } = require("./hash-digest");
10
10
 
11
- /** @typedef {import("../../../declarations/WebpackOptions").HashDigest} Encoding */
11
+ /**
12
+ * @import {
13
+ * HashDigest as Encoding
14
+ * } from "../../../declarations/WebpackOptions"
15
+ */
12
16
  /** @typedef {() => Hash} HashFactory */
13
17
 
14
18
  const BULK_SIZE = 3;
@@ -7,7 +7,11 @@
7
7
 
8
8
  const Hash = require("../Hash");
9
9
 
10
- /** @typedef {import("../../../declarations/WebpackOptions").HashDigest} Encoding */
10
+ /**
11
+ * @import {
12
+ * HashDigest as Encoding
13
+ * } from "../../../declarations/WebpackOptions"
14
+ */
11
15
 
12
16
  /* istanbul ignore next */
13
17
  class DebugHash extends Hash {
@@ -5,8 +5,12 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("../Hash")} Hash */
9
- /** @typedef {import("../../../declarations/WebpackOptions").HashDigest} Encoding */
8
+ /** @import Hash from "../Hash" */
9
+ /**
10
+ * @import {
11
+ * HashDigest as Encoding
12
+ * } from "../../../declarations/WebpackOptions"
13
+ */
10
14
 
11
15
  /** @typedef {"26" | "32" | "36" | "49" | "52" | "58" | "62"} Base */
12
16
 
@@ -14,6 +14,7 @@ const ABSOLUTE_PATH_REGEXP = /^(?:[a-z]:)?[\\/]/i;
14
14
  const WINDOWS_ABS_PATH_REGEXP = /^[a-z]:[\\/]/i;
15
15
  const SEGMENTS_SPLIT_REGEXP = /([|!])/;
16
16
  const WINDOWS_PATH_SEPARATOR_REGEXP = /\\/g;
17
+ const NODE_MODULES_REGEXP = /[\\/]node_modules[\\/]/i;
17
18
 
18
19
  /**
19
20
  * Relative path to request.
@@ -566,7 +567,9 @@ const toJsStringLiteral = (str) =>
566
567
  );
567
568
 
568
569
  module.exports.ABSOLUTE_PATH_REGEXP = ABSOLUTE_PATH_REGEXP;
570
+ module.exports.NODE_MODULES_REGEXP = NODE_MODULES_REGEXP;
569
571
  module.exports.WINDOWS_ABS_PATH_REGEXP = WINDOWS_ABS_PATH_REGEXP;
572
+ module.exports.WINDOWS_PATH_SEPARATOR_REGEXP = WINDOWS_PATH_SEPARATOR_REGEXP;
570
573
  module.exports.absolutify = absolutify;
571
574
  module.exports.contextify = contextify;
572
575
  module.exports.contextifySourceUrl = contextifySourceUrl;
@@ -579,4 +582,5 @@ module.exports.parseResource = makeCacheable(_parseResource);
579
582
  module.exports.parseResourceWithoutFragment = makeCacheable(
580
583
  _parseResourceWithoutFragment
581
584
  );
585
+ module.exports.relativePathToRequest = relativePathToRequest;
582
586
  module.exports.toJsStringLiteral = toJsStringLiteral;
@@ -8,7 +8,7 @@
8
8
  const { JAVASCRIPT_MODULE_TYPE_AUTO } = require("../ModuleTypeConstants");
9
9
  const { parseResource } = require("./identifier");
10
10
 
11
- /** @typedef {import("../NormalModuleFactory")} NormalModuleFactory */
11
+ /** @import NormalModuleFactory from "../NormalModuleFactory" */
12
12
 
13
13
  /**
14
14
  * When a built-in module type is only enabled implicitly (`experiments.css` /
@@ -43,6 +43,8 @@ module.exports = {
43
43
  require("../dependencies/AMDRequireDependency"),
44
44
  "dependencies/AMDRequireItemDependency": () =>
45
45
  require("../dependencies/AMDRequireItemDependency"),
46
+ "dependencies/BuildTimeConstDependency": () =>
47
+ require("../dependencies/BuildTimeConstDependency"),
46
48
  "dependencies/CachedConstDependency": () =>
47
49
  require("../dependencies/CachedConstDependency"),
48
50
  "dependencies/CommonJsExportRequireDependency": () =>
@@ -51,6 +53,8 @@ module.exports = {
51
53
  require("../dependencies/CommonJsExportsDependency"),
52
54
  "dependencies/CommonJsFullRequireDependency": () =>
53
55
  require("../dependencies/CommonJsFullRequireDependency"),
56
+ "dependencies/CommonJsObjectExportDependency": () =>
57
+ require("../dependencies/CommonJsObjectExportDependency"),
54
58
  "dependencies/CommonJsRequireContextDependency": () =>
55
59
  require("../dependencies/CommonJsRequireContextDependency"),
56
60
  "dependencies/CommonJsRequireDependency": () =>
@@ -211,6 +215,8 @@ module.exports = {
211
215
  require("../errors/InvalidDependenciesModuleWarning"),
212
216
  "errors/JSONParseError": () => require("../errors/JSONParseError"),
213
217
  "errors/ModuleBuildError": () => require("../errors/ModuleBuildError"),
218
+ "errors/ModuleDependencyError": () =>
219
+ require("../errors/ModuleDependencyError"),
214
220
  "errors/ModuleDependencyWarning": () =>
215
221
  require("../errors/ModuleDependencyWarning"),
216
222
  "errors/ModuleError": () => require("../errors/ModuleError"),
@@ -0,0 +1,56 @@
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
+ /**
9
+ * Declares a module that loads on first use, in the shape a dynamic `import()`
10
+ * has: the accessor resolves to the module and the caller awaits it. The thunk
11
+ * is a `require` until `lib/` moves to ecma modules, which changes that keyword
12
+ * and nothing else — `Promise.resolve` already passes an `import()` promise
13
+ * through. It is never called outside the promise, so nothing here needs a
14
+ * synchronous load.
15
+ *
16
+ * `loaded` reads the module back for a consumer with nowhere to await — a
17
+ * synchronous hook, a dependency template, a generator. It throws until an
18
+ * awaited call has resolved, so every such consumer must sit behind one
19
+ * (`NormalModuleFactory`'s `prepareModuleType`, `Compilation`'s pending runtime
20
+ * modules). A module with no such boundary is required at the top of its file
21
+ * instead of being declared here.
22
+ * @template T
23
+ * @param {() => T | Promise<T>} load loads the module
24
+ * @returns {LazyModuleAccessor<T>} resolves the module, loading it once
25
+ */
26
+ const lazyModule = (load) => {
27
+ /** @type {Promise<T> | undefined} */
28
+ let promise;
29
+ /** @type {T | undefined} */
30
+ let value;
31
+ const get = () => {
32
+ if (promise === undefined) {
33
+ promise = Promise.resolve(load()).then((module) => (value = module));
34
+ // release the loader and everything it holds
35
+ /** @type {(() => T | Promise<T>) | undefined} */
36
+ (load) = undefined;
37
+ }
38
+ return promise;
39
+ };
40
+ get.loaded = () => {
41
+ if (value === undefined) {
42
+ throw new Error(
43
+ "Lazy module was read before an awaited call resolved it; preload it at the nearest async boundary"
44
+ );
45
+ }
46
+ return value;
47
+ };
48
+ return get;
49
+ };
50
+
51
+ /**
52
+ * @template T
53
+ * @typedef {(() => Promise<T>) & { loaded: () => T }} LazyModuleAccessor
54
+ */
55
+
56
+ module.exports = lazyModule;
@@ -6,9 +6,13 @@
6
6
 
7
7
  const { register } = require("./serialization");
8
8
 
9
- /** @typedef {import("../serialization/ObjectMiddleware").Constructor} Constructor */
10
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
11
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
+ /**
10
+ * @import {
11
+ * Constructor,
12
+ * ObjectDeserializerContext,
13
+ * ObjectSerializerContext
14
+ * } from "../serialization/ObjectMiddleware"
15
+ */
12
16
 
13
17
  /** @typedef {{ serialize: (context: ObjectSerializerContext) => void, deserialize: (context: ObjectDeserializerContext) => void }} SerializableClass */
14
18
  /**
@@ -0,0 +1,25 @@
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 SLASH_CHAR_CODE = 47;
9
+
10
+ /**
11
+ * Whether a `resolve.alias` name applies to a request. Mirrors `AliasPlugin`:
12
+ * a name matches the whole request or a leading segment of it, and
13
+ * `onlyModule` restricts it to the former.
14
+ * @param {string} request the request as written
15
+ * @param {string} name the alias name, already normalized by enhanced-resolve
16
+ * @param {boolean=} onlyModule whether the alias only matches the whole request
17
+ * @returns {boolean} true when the alias applies to the request
18
+ */
19
+ const matchAlias = (request, name, onlyModule) => {
20
+ if (!request.startsWith(name)) return false;
21
+ if (request.length === name.length) return true;
22
+ return !onlyModule && request.charCodeAt(name.length) === SLASH_CHAR_CODE;
23
+ };
24
+
25
+ module.exports = matchAlias;
@@ -6,6 +6,7 @@
6
6
 
7
7
  const { extname } = require("path");
8
8
  const db = require("mime-db");
9
+ const memoize = require("./memoize");
9
10
 
10
11
  /**
11
12
  * RegExp to match type in RFC 6838
@@ -22,8 +23,6 @@ const db = require("mime-db");
22
23
  */
23
24
  const TYPE_REGEXP =
24
25
  /^ *(([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126})) *(?:;.*)?$/;
25
- const extensions = Object.create(null);
26
- const types = Object.create(null);
27
26
 
28
27
  // Score RFC facets (see https://tools.ietf.org/html/rfc6838#section-3)
29
28
 
@@ -126,7 +125,14 @@ const populate = (extensions, types) => {
126
125
  }
127
126
  };
128
127
 
129
- populate(extensions, types);
128
+ // ~2500 mime-db entries scored against each other; only a build that resolves
129
+ // a type pays for the tables
130
+ const getTables = memoize(() => {
131
+ const extensions = Object.create(null);
132
+ const types = Object.create(null);
133
+ populate(extensions, types);
134
+ return { extensions, types };
135
+ });
130
136
 
131
137
  /**
132
138
  * Get the default extension for a MIME type.
@@ -144,7 +150,7 @@ const extension = (type) => {
144
150
  return;
145
151
  }
146
152
 
147
- const possibleExtensions = extensions[match[1].toLowerCase()];
153
+ const possibleExtensions = getTables().extensions[match[1].toLowerCase()];
148
154
 
149
155
  if (!possibleExtensions || possibleExtensions.length === 0) {
150
156
  return;
@@ -170,7 +176,7 @@ const lookup = (path) => {
170
176
  return;
171
177
  }
172
178
 
173
- return types[extension];
179
+ return getTables().types[extension];
174
180
  };
175
181
 
176
182
  module.exports = { extension, lookup };
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- /** @typedef {import("./Hash")} Hash */
8
+ /** @import Hash from "./Hash" */
9
9
 
10
10
  const A_CODE = "a".charCodeAt(0);
11
11
 
@@ -47,6 +47,7 @@ const digestNonNumericOnlyWithFull = (hash, hashDigest, hashDigestLength) => {
47
47
  return [nonNumericOnlyHash(full, hashDigestLength), full];
48
48
  };
49
49
 
50
+ nonNumericOnlyHash.digestNonNumericOnly = digestNonNumericOnly;
51
+ nonNumericOnlyHash.digestNonNumericOnlyWithFull = digestNonNumericOnlyWithFull;
52
+
50
53
  module.exports = nonNumericOnlyHash;
51
- module.exports.digestNonNumericOnly = digestNonNumericOnly;
52
- module.exports.digestNonNumericOnlyWithFull = digestNonNumericOnlyWithFull;