webpack 5.97.1 → 5.104.1

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 (610) hide show
  1. package/README.md +368 -434
  2. package/bin/webpack.js +15 -9
  3. package/hot/dev-server.js +18 -3
  4. package/hot/emitter-event-target.js +7 -0
  5. package/hot/lazy-compilation-node.js +45 -29
  6. package/hot/lazy-compilation-universal.js +18 -0
  7. package/hot/lazy-compilation-web.js +15 -5
  8. package/hot/load-http.js +7 -0
  9. package/hot/log.js +15 -15
  10. package/hot/only-dev-server.js +19 -4
  11. package/hot/poll.js +1 -0
  12. package/lib/APIPlugin.js +48 -50
  13. package/lib/AbstractMethodError.js +1 -0
  14. package/lib/AsyncDependenciesBlock.js +4 -5
  15. package/lib/AutomaticPrefetchPlugin.js +22 -22
  16. package/lib/BannerPlugin.js +35 -40
  17. package/lib/Cache.js +12 -9
  18. package/lib/CacheFacade.js +13 -13
  19. package/lib/CaseSensitiveModulesWarning.js +6 -6
  20. package/lib/Chunk.js +68 -47
  21. package/lib/ChunkGraph.js +174 -95
  22. package/lib/ChunkGroup.js +32 -24
  23. package/lib/ChunkTemplate.js +8 -8
  24. package/lib/CleanPlugin.js +90 -42
  25. package/lib/CodeGenerationResults.js +12 -9
  26. package/lib/CompatibilityPlugin.js +70 -21
  27. package/lib/Compilation.js +827 -550
  28. package/lib/Compiler.js +137 -109
  29. package/lib/ConcatenationScope.js +45 -8
  30. package/lib/ConditionalInitFragment.js +1 -1
  31. package/lib/ConstPlugin.js +89 -59
  32. package/lib/ContextExclusionPlugin.js +5 -4
  33. package/lib/ContextModule.js +66 -51
  34. package/lib/ContextModuleFactory.js +51 -30
  35. package/lib/ContextReplacementPlugin.js +89 -34
  36. package/lib/CssModule.js +8 -4
  37. package/lib/DefinePlugin.js +209 -57
  38. package/lib/DelegatedModule.js +34 -23
  39. package/lib/DelegatedModuleFactoryPlugin.js +27 -24
  40. package/lib/DelegatedPlugin.js +4 -2
  41. package/lib/DependenciesBlock.js +0 -2
  42. package/lib/Dependency.js +37 -19
  43. package/lib/DependencyTemplate.js +2 -0
  44. package/lib/DependencyTemplates.js +5 -6
  45. package/lib/DllEntryPlugin.js +8 -4
  46. package/lib/DllModule.js +11 -12
  47. package/lib/DllModuleFactory.js +2 -2
  48. package/lib/DllPlugin.js +9 -6
  49. package/lib/DllReferencePlugin.js +60 -65
  50. package/lib/DotenvPlugin.js +462 -0
  51. package/lib/DynamicEntryPlugin.js +8 -8
  52. package/lib/EntryOptionPlugin.js +8 -6
  53. package/lib/EntryPlugin.js +5 -3
  54. package/lib/Entrypoint.js +19 -0
  55. package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
  56. package/lib/EnvironmentPlugin.js +26 -19
  57. package/lib/ErrorHelpers.js +6 -6
  58. package/lib/EvalDevToolModulePlugin.js +17 -14
  59. package/lib/EvalSourceMapDevToolPlugin.js +156 -142
  60. package/lib/ExportsInfo.js +180 -115
  61. package/lib/ExportsInfoApiPlugin.js +2 -2
  62. package/lib/ExternalModule.js +256 -102
  63. package/lib/ExternalModuleFactoryPlugin.js +66 -29
  64. package/lib/ExternalsPlugin.js +57 -2
  65. package/lib/FileSystemInfo.js +313 -247
  66. package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
  67. package/lib/FlagDependencyExportsPlugin.js +29 -19
  68. package/lib/FlagDependencyUsagePlugin.js +9 -10
  69. package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
  70. package/lib/Generator.js +43 -10
  71. package/lib/GraphHelpers.js +11 -3
  72. package/lib/HookWebpackError.js +35 -7
  73. package/lib/HotModuleReplacementPlugin.js +149 -108
  74. package/lib/HotUpdateChunk.js +0 -3
  75. package/lib/IgnoreErrorModuleFactory.js +2 -2
  76. package/lib/IgnorePlugin.js +16 -13
  77. package/lib/IgnoreWarningsPlugin.js +6 -4
  78. package/lib/InitFragment.js +41 -23
  79. package/lib/InvalidDependenciesModuleWarning.js +2 -3
  80. package/lib/JavascriptMetaInfoPlugin.js +2 -4
  81. package/lib/LibManifestPlugin.js +12 -13
  82. package/lib/LoaderOptionsPlugin.js +12 -14
  83. package/lib/LoaderTargetPlugin.js +5 -3
  84. package/lib/MainTemplate.js +18 -29
  85. package/lib/ManifestPlugin.js +235 -0
  86. package/lib/Module.js +138 -60
  87. package/lib/ModuleBuildError.js +4 -2
  88. package/lib/ModuleDependencyError.js +4 -3
  89. package/lib/ModuleDependencyWarning.js +4 -3
  90. package/lib/ModuleError.js +1 -1
  91. package/lib/ModuleFactory.js +10 -3
  92. package/lib/ModuleFilenameHelpers.js +63 -60
  93. package/lib/ModuleGraph.js +195 -70
  94. package/lib/ModuleGraphConnection.js +14 -20
  95. package/lib/ModuleInfoHeaderPlugin.js +15 -16
  96. package/lib/ModuleNotFoundError.js +1 -1
  97. package/lib/ModuleParseError.js +8 -4
  98. package/lib/ModuleSourceTypeConstants.js +189 -0
  99. package/lib/ModuleTemplate.js +7 -8
  100. package/lib/ModuleTypeConstants.js +37 -15
  101. package/lib/ModuleWarning.js +1 -1
  102. package/lib/MultiCompiler.js +64 -49
  103. package/lib/MultiStats.js +19 -14
  104. package/lib/MultiWatching.js +7 -11
  105. package/lib/NoEmitOnErrorsPlugin.js +5 -3
  106. package/lib/NodeStuffPlugin.js +438 -126
  107. package/lib/NormalModule.js +322 -201
  108. package/lib/NormalModuleFactory.js +230 -117
  109. package/lib/NormalModuleReplacementPlugin.js +37 -39
  110. package/lib/NullFactory.js +3 -2
  111. package/lib/OptimizationStages.js +1 -1
  112. package/lib/OptionsApply.js +1 -1
  113. package/lib/Parser.js +5 -3
  114. package/lib/PlatformPlugin.js +3 -1
  115. package/lib/PrefetchPlugin.js +6 -4
  116. package/lib/ProgressPlugin.js +48 -49
  117. package/lib/ProvidePlugin.js +7 -5
  118. package/lib/RawModule.js +26 -12
  119. package/lib/RecordIdsPlugin.js +88 -110
  120. package/lib/RequestShortener.js +3 -1
  121. package/lib/ResolverFactory.js +15 -14
  122. package/lib/RuntimeGlobals.js +216 -153
  123. package/lib/RuntimeModule.js +7 -6
  124. package/lib/RuntimePlugin.js +115 -62
  125. package/lib/RuntimeTemplate.js +248 -76
  126. package/lib/SelfModuleFactory.js +2 -2
  127. package/lib/SizeFormatHelpers.js +2 -2
  128. package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
  129. package/lib/SourceMapDevToolPlugin.js +72 -59
  130. package/lib/Stats.js +2 -3
  131. package/lib/Template.js +31 -24
  132. package/lib/TemplatedPathPlugin.js +24 -21
  133. package/lib/UseStrictPlugin.js +1 -1
  134. package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
  135. package/lib/WarnDeprecatedOptionPlugin.js +7 -8
  136. package/lib/WarnNoModeSetPlugin.js +3 -1
  137. package/lib/WatchIgnorePlugin.js +11 -9
  138. package/lib/Watching.js +27 -29
  139. package/lib/WebpackError.js +10 -3
  140. package/lib/WebpackIsIncludedPlugin.js +4 -5
  141. package/lib/WebpackOptionsApply.js +263 -135
  142. package/lib/asset/AssetBytesGenerator.js +171 -0
  143. package/lib/asset/AssetBytesParser.js +37 -0
  144. package/lib/asset/AssetGenerator.js +285 -223
  145. package/lib/asset/AssetModulesPlugin.js +103 -41
  146. package/lib/asset/AssetParser.js +7 -3
  147. package/lib/asset/AssetSourceGenerator.js +41 -17
  148. package/lib/asset/RawDataUrlModule.js +17 -9
  149. package/lib/async-modules/AsyncModuleHelpers.js +52 -0
  150. package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
  151. package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
  152. package/lib/buildChunkGraph.js +36 -17
  153. package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
  154. package/lib/cache/IdleFileCachePlugin.js +22 -20
  155. package/lib/cache/MemoryCachePlugin.js +3 -3
  156. package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
  157. package/lib/cache/PackFileCacheStrategy.js +198 -170
  158. package/lib/cache/ResolverCachePlugin.js +58 -48
  159. package/lib/cache/getLazyHashedEtag.js +5 -4
  160. package/lib/cli.js +197 -39
  161. package/lib/config/browserslistTargetHandler.js +110 -85
  162. package/lib/config/defaults.js +514 -113
  163. package/lib/config/normalization.js +91 -64
  164. package/lib/config/target.js +30 -18
  165. package/lib/container/ContainerEntryDependency.js +0 -1
  166. package/lib/container/ContainerEntryModule.js +16 -15
  167. package/lib/container/ContainerEntryModuleFactory.js +2 -2
  168. package/lib/container/ContainerPlugin.js +5 -6
  169. package/lib/container/ContainerReferencePlugin.js +27 -30
  170. package/lib/container/FallbackDependency.js +2 -1
  171. package/lib/container/FallbackModule.js +19 -14
  172. package/lib/container/FallbackModuleFactory.js +2 -2
  173. package/lib/container/HoistContainerReferencesPlugin.js +7 -7
  174. package/lib/container/ModuleFederationPlugin.js +4 -4
  175. package/lib/container/RemoteModule.js +14 -14
  176. package/lib/container/RemoteRuntimeModule.js +2 -2
  177. package/lib/container/options.js +9 -9
  178. package/lib/css/CssGenerator.js +366 -74
  179. package/lib/css/CssLoadingRuntimeModule.js +26 -16
  180. package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
  181. package/lib/css/CssModulesPlugin.js +191 -142
  182. package/lib/css/CssParser.js +1756 -740
  183. package/lib/css/walkCssTokens.js +180 -67
  184. package/lib/debug/ProfilingPlugin.js +135 -51
  185. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
  186. package/lib/dependencies/AMDPlugin.js +18 -11
  187. package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
  188. package/lib/dependencies/AMDRequireContextDependency.js +2 -1
  189. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
  190. package/lib/dependencies/AMDRuntimeModules.js +3 -1
  191. package/lib/dependencies/CachedConstDependency.js +24 -18
  192. package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
  193. package/lib/dependencies/CommonJsExportsDependency.js +2 -1
  194. package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
  195. package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
  196. package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
  197. package/lib/dependencies/CommonJsPlugin.js +29 -18
  198. package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
  199. package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
  200. package/lib/dependencies/ConstDependency.js +2 -2
  201. package/lib/dependencies/ContextDependency.js +10 -5
  202. package/lib/dependencies/ContextDependencyHelpers.js +21 -13
  203. package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
  204. package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
  205. package/lib/dependencies/ContextElementDependency.js +23 -12
  206. package/lib/dependencies/CssIcssExportDependency.js +402 -22
  207. package/lib/dependencies/CssIcssImportDependency.js +116 -51
  208. package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
  209. package/lib/dependencies/CssImportDependency.js +17 -14
  210. package/lib/dependencies/CssUrlDependency.js +8 -13
  211. package/lib/dependencies/DynamicExports.js +19 -19
  212. package/lib/dependencies/ExportsInfoDependency.js +13 -10
  213. package/lib/dependencies/ExternalModuleDependency.js +7 -7
  214. package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
  215. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
  216. package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
  217. package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
  218. package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
  219. package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
  220. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
  221. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
  222. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  223. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
  224. package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
  225. package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
  226. package/lib/dependencies/HarmonyExports.js +5 -5
  227. package/lib/dependencies/HarmonyImportDependency.js +92 -45
  228. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
  229. package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
  230. package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
  231. package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
  232. package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
  233. package/lib/dependencies/ImportContextDependency.js +15 -1
  234. package/lib/dependencies/ImportDependency.js +25 -7
  235. package/lib/dependencies/ImportEagerDependency.js +7 -5
  236. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
  237. package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
  238. package/lib/dependencies/ImportMetaPlugin.js +172 -20
  239. package/lib/dependencies/ImportParserPlugin.js +327 -49
  240. package/lib/dependencies/ImportPhase.js +121 -0
  241. package/lib/dependencies/ImportPlugin.js +3 -1
  242. package/lib/dependencies/ImportWeakDependency.js +7 -5
  243. package/lib/dependencies/JsonExportsDependency.js +54 -28
  244. package/lib/dependencies/LoaderDependency.js +0 -3
  245. package/lib/dependencies/LoaderImportDependency.js +0 -3
  246. package/lib/dependencies/LoaderPlugin.js +24 -25
  247. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  248. package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
  249. package/lib/dependencies/ModuleDependency.js +14 -13
  250. package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
  251. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
  252. package/lib/dependencies/NullDependency.js +2 -0
  253. package/lib/dependencies/ProvidedDependency.js +8 -10
  254. package/lib/dependencies/PureExpressionDependency.js +1 -2
  255. package/lib/dependencies/RequireContextDependency.js +2 -1
  256. package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
  257. package/lib/dependencies/RequireContextPlugin.js +5 -2
  258. package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
  259. package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
  260. package/lib/dependencies/RequireEnsurePlugin.js +6 -6
  261. package/lib/dependencies/RequireIncludeDependency.js +2 -2
  262. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
  263. package/lib/dependencies/RequireIncludePlugin.js +1 -0
  264. package/lib/dependencies/RequireResolveContextDependency.js +1 -1
  265. package/lib/dependencies/RequireResolveDependency.js +3 -3
  266. package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
  267. package/lib/dependencies/StaticExportsDependency.js +3 -5
  268. package/lib/dependencies/SystemPlugin.js +4 -4
  269. package/lib/dependencies/URLContextDependency.js +65 -0
  270. package/lib/dependencies/URLDependency.js +3 -8
  271. package/lib/dependencies/URLPlugin.js +18 -159
  272. package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
  273. package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
  274. package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
  275. package/lib/dependencies/WorkerDependency.js +8 -6
  276. package/lib/dependencies/WorkerPlugin.js +131 -67
  277. package/lib/dependencies/getFunctionExpression.js +2 -2
  278. package/lib/dependencies/processExportInfo.js +4 -4
  279. package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
  280. package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
  281. package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
  282. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
  283. package/lib/formatLocation.js +2 -2
  284. package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
  285. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
  286. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
  287. package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
  288. package/lib/hmr/LazyCompilationPlugin.js +67 -54
  289. package/lib/hmr/lazyCompilationBackend.js +23 -18
  290. package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
  291. package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
  292. package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
  293. package/lib/ids/HashedModuleIdsPlugin.js +15 -13
  294. package/lib/ids/IdHelpers.js +66 -49
  295. package/lib/ids/NamedChunkIdsPlugin.js +14 -17
  296. package/lib/ids/NamedModuleIdsPlugin.js +12 -14
  297. package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
  298. package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
  299. package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
  300. package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
  301. package/lib/ids/SyncModuleIdsPlugin.js +18 -13
  302. package/lib/index.js +54 -14
  303. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
  304. package/lib/javascript/BasicEvaluatedExpression.js +26 -18
  305. package/lib/javascript/ChunkFormatHelpers.js +70 -0
  306. package/lib/javascript/ChunkHelpers.js +17 -5
  307. package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
  308. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
  309. package/lib/javascript/JavascriptGenerator.js +122 -100
  310. package/lib/javascript/JavascriptModulesPlugin.js +332 -152
  311. package/lib/javascript/JavascriptParser.js +1488 -1052
  312. package/lib/javascript/JavascriptParserHelpers.js +48 -47
  313. package/lib/javascript/StartupHelpers.js +23 -22
  314. package/lib/json/JsonData.js +4 -4
  315. package/lib/json/JsonGenerator.js +66 -32
  316. package/lib/json/JsonModulesPlugin.js +16 -6
  317. package/lib/json/JsonParser.js +23 -8
  318. package/lib/library/AbstractLibraryPlugin.js +45 -10
  319. package/lib/library/AmdLibraryPlugin.js +7 -5
  320. package/lib/library/AssignLibraryPlugin.js +71 -17
  321. package/lib/library/EnableLibraryPlugin.js +51 -25
  322. package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
  323. package/lib/library/JsonpLibraryPlugin.js +5 -2
  324. package/lib/library/ModuleLibraryPlugin.js +230 -18
  325. package/lib/library/SystemLibraryPlugin.js +29 -11
  326. package/lib/library/UmdLibraryPlugin.js +35 -32
  327. package/lib/logging/Logger.js +18 -15
  328. package/lib/logging/createConsoleLogger.js +27 -27
  329. package/lib/logging/runtime.js +11 -11
  330. package/lib/logging/truncateArgs.js +5 -5
  331. package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
  332. package/lib/node/NodeEnvironmentPlugin.js +9 -3
  333. package/lib/node/NodeTargetPlugin.js +9 -1
  334. package/lib/node/NodeTemplatePlugin.js +2 -2
  335. package/lib/node/NodeWatchFileSystem.js +4 -4
  336. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
  337. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
  338. package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
  339. package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
  340. package/lib/node/nodeConsole.js +12 -7
  341. package/lib/optimize/AggressiveMergingPlugin.js +46 -47
  342. package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
  343. package/lib/optimize/ConcatenatedModule.js +620 -251
  344. package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
  345. package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
  346. package/lib/optimize/InnerGraph.js +139 -124
  347. package/lib/optimize/InnerGraphPlugin.js +29 -24
  348. package/lib/optimize/LimitChunkCountPlugin.js +32 -8
  349. package/lib/optimize/MangleExportsPlugin.js +22 -22
  350. package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
  351. package/lib/optimize/MinChunkSizePlugin.js +12 -7
  352. package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
  353. package/lib/optimize/RealContentHashPlugin.js +58 -44
  354. package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
  355. package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
  356. package/lib/optimize/RuntimeChunkPlugin.js +22 -25
  357. package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
  358. package/lib/optimize/SplitChunksPlugin.js +209 -158
  359. package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
  360. package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
  361. package/lib/performance/SizeLimitsPlugin.js +8 -5
  362. package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
  363. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
  364. package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
  365. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
  366. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
  367. package/lib/rules/BasicEffectRulePlugin.js +14 -5
  368. package/lib/rules/BasicMatcherRulePlugin.js +18 -7
  369. package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
  370. package/lib/rules/RuleSetCompiler.js +73 -32
  371. package/lib/rules/UseEffectRulePlugin.js +61 -25
  372. package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
  373. package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
  374. package/lib/runtime/BaseUriRuntimeModule.js +2 -2
  375. package/lib/runtime/CompatRuntimeModule.js +0 -1
  376. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
  377. package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
  378. package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
  379. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  380. package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
  381. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
  382. package/lib/runtime/PublicPathRuntimeModule.js +2 -2
  383. package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
  384. package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
  385. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
  386. package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
  387. package/lib/runtime/SystemContextRuntimeModule.js +0 -2
  388. package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
  389. package/lib/schemes/DataUriPlugin.js +9 -31
  390. package/lib/schemes/FileUriPlugin.js +11 -6
  391. package/lib/schemes/HttpUriPlugin.js +381 -261
  392. package/lib/schemes/VirtualUrlPlugin.js +222 -0
  393. package/lib/serialization/AggregateErrorSerializer.js +41 -0
  394. package/lib/serialization/BinaryMiddleware.js +51 -33
  395. package/lib/serialization/ErrorObjectSerializer.js +7 -2
  396. package/lib/serialization/FileMiddleware.js +101 -71
  397. package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
  398. package/lib/serialization/ObjectMiddleware.js +130 -54
  399. package/lib/serialization/PlainObjectSerializer.js +1 -1
  400. package/lib/serialization/Serializer.js +38 -20
  401. package/lib/serialization/SerializerMiddleware.js +121 -49
  402. package/lib/serialization/SingleItemMiddleware.js +9 -7
  403. package/lib/serialization/types.js +1 -1
  404. package/lib/sharing/ConsumeSharedModule.js +9 -9
  405. package/lib/sharing/ConsumeSharedPlugin.js +14 -14
  406. package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
  407. package/lib/sharing/ProvideSharedModule.js +9 -11
  408. package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
  409. package/lib/sharing/ProvideSharedPlugin.js +15 -10
  410. package/lib/sharing/SharePlugin.js +3 -4
  411. package/lib/sharing/ShareRuntimeModule.js +7 -6
  412. package/lib/sharing/resolveMatchedConfigs.js +27 -13
  413. package/lib/sharing/utils.js +37 -43
  414. package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
  415. package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
  416. package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
  417. package/lib/stats/StatsFactory.js +75 -32
  418. package/lib/stats/StatsPrinter.js +71 -51
  419. package/lib/url/URLParserPlugin.js +264 -0
  420. package/lib/util/ArrayHelpers.js +6 -8
  421. package/lib/util/ArrayQueue.js +1 -1
  422. package/lib/util/AsyncQueue.js +11 -10
  423. package/lib/util/Hash.js +37 -5
  424. package/lib/util/IterableHelpers.js +4 -4
  425. package/lib/util/LazyBucketSortedSet.js +46 -27
  426. package/lib/util/LazySet.js +16 -10
  427. package/lib/util/MapHelpers.js +1 -1
  428. package/lib/util/ParallelismFactorCalculator.js +2 -2
  429. package/lib/util/Semaphore.js +3 -3
  430. package/lib/util/SetHelpers.js +6 -6
  431. package/lib/util/SortableSet.js +11 -9
  432. package/lib/util/StackedCacheMap.js +2 -2
  433. package/lib/util/StackedMap.js +3 -3
  434. package/lib/util/StringXor.js +2 -1
  435. package/lib/util/TupleQueue.js +11 -8
  436. package/lib/util/TupleSet.js +44 -19
  437. package/lib/util/URLAbsoluteSpecifier.js +3 -4
  438. package/lib/util/WeakTupleMap.js +56 -42
  439. package/lib/util/binarySearchBounds.js +4 -3
  440. package/lib/util/chainedImports.js +3 -1
  441. package/lib/util/cleverMerge.js +171 -107
  442. package/lib/util/comparators.js +265 -162
  443. package/lib/util/compileBooleanMatcher.js +120 -41
  444. package/lib/util/concatenate.js +20 -16
  445. package/lib/util/conventions.js +73 -74
  446. package/lib/util/create-schema-validation.js +8 -8
  447. package/lib/util/createHash.js +32 -135
  448. package/lib/util/dataURL.js +39 -0
  449. package/lib/util/deprecation.js +119 -116
  450. package/lib/util/deterministicGrouping.js +56 -47
  451. package/lib/util/extractSourceMap.js +319 -0
  452. package/lib/util/extractUrlAndGlobal.js +1 -1
  453. package/lib/util/findGraphRoots.js +19 -9
  454. package/lib/util/fs.js +169 -141
  455. package/lib/util/hash/BatchedHash.js +50 -10
  456. package/lib/util/hash/BulkUpdateHash.js +138 -0
  457. package/lib/util/hash/DebugHash.js +75 -0
  458. package/lib/util/hash/hash-digest.js +216 -0
  459. package/lib/util/hash/md4.js +2 -2
  460. package/lib/util/hash/wasm-hash.js +59 -17
  461. package/lib/util/identifier.js +124 -61
  462. package/lib/util/internalSerializables.js +4 -6
  463. package/lib/util/magicComment.js +9 -5
  464. package/lib/util/makeSerializable.js +2 -2
  465. package/lib/util/memoize.js +5 -2
  466. package/lib/util/objectToMap.js +3 -2
  467. package/lib/util/processAsyncTree.js +5 -5
  468. package/lib/util/propertyAccess.js +1 -1
  469. package/lib/util/propertyName.js +2 -3
  470. package/lib/util/registerExternalSerializer.js +16 -20
  471. package/lib/util/removeBOM.js +25 -0
  472. package/lib/util/runtime.js +72 -56
  473. package/lib/util/semver.js +44 -33
  474. package/lib/util/serialization.js +56 -56
  475. package/lib/util/smartGrouping.js +42 -27
  476. package/lib/util/source.js +5 -4
  477. package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
  478. package/lib/validateSchema.js +7 -9
  479. package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
  480. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
  481. package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
  482. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
  483. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
  484. package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
  485. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
  486. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
  487. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
  488. package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
  489. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
  490. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
  491. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
  492. package/lib/wasm-sync/WebAssemblyParser.js +10 -17
  493. package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
  494. package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
  495. package/lib/web/FetchCompileWasmPlugin.js +6 -8
  496. package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
  497. package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
  498. package/lib/web/JsonpTemplatePlugin.js +0 -1
  499. package/lib/webpack.js +107 -87
  500. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
  501. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
  502. package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
  503. package/module.d.ts +5 -0
  504. package/package.json +149 -129
  505. package/schemas/WebpackOptions.check.d.ts +1 -1
  506. package/schemas/WebpackOptions.check.js +2 -2
  507. package/schemas/WebpackOptions.json +543 -190
  508. package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
  509. package/schemas/plugins/BannerPlugin.check.js +2 -2
  510. package/schemas/plugins/BannerPlugin.json +4 -0
  511. package/schemas/plugins/DllPlugin.check.d.ts +1 -1
  512. package/schemas/plugins/DllPlugin.check.js +1 -1
  513. package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
  514. package/schemas/plugins/DllReferencePlugin.check.js +1 -1
  515. package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
  516. package/schemas/plugins/IgnorePlugin.check.js +1 -1
  517. package/schemas/plugins/IgnorePlugin.json +1 -1
  518. package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
  519. package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
  520. package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
  521. package/schemas/plugins/ManifestPlugin.check.js +6 -0
  522. package/schemas/plugins/ManifestPlugin.json +98 -0
  523. package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
  524. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  525. package/schemas/plugins/ProgressPlugin.json +1 -1
  526. package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
  527. package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
  528. package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
  529. package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
  530. package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
  531. package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
  532. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  533. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
  534. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  535. package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
  536. package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
  537. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
  538. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  539. package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
  540. package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
  541. package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
  542. package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
  543. package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
  544. package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
  545. package/schemas/plugins/container/ExternalsType.check.js +2 -2
  546. package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
  547. package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
  548. package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
  549. package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
  550. package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
  551. package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
  552. package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
  553. package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
  554. package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
  555. package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
  556. package/schemas/plugins/css/CssParserOptions.check.js +2 -2
  557. package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
  558. package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
  559. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
  560. package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
  561. package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
  562. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
  563. package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
  564. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
  565. package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
  566. package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
  567. package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
  568. package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
  569. package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
  570. package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
  571. package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
  572. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
  573. package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
  574. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
  575. package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
  576. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
  577. package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
  578. package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
  579. package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
  580. package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
  581. package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
  582. package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
  583. package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
  584. package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
  585. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
  586. package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
  587. package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
  588. package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
  589. package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
  590. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  591. package/types.d.ts +5115 -1863
  592. package/SECURITY.md +0 -9
  593. package/lib/ModuleSourceTypesConstants.js +0 -112
  594. package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
  595. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
  596. package/lib/library/ModernModuleLibraryPlugin.js +0 -144
  597. package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
  598. package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
  599. package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
  600. package/schemas/plugins/JsonModulesPluginParser.json +0 -12
  601. package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
  602. package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
  603. package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
  604. package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
  605. package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
  606. package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
  607. package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
  608. package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
  609. package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
  610. package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
@@ -10,16 +10,11 @@ const WINDOWS_ABS_PATH_REGEXP = /^[a-zA-Z]:[\\/]/;
10
10
  const SEGMENTS_SPLIT_REGEXP = /([|!])/;
11
11
  const WINDOWS_PATH_SEPARATOR_REGEXP = /\\/g;
12
12
 
13
- /**
14
- * @typedef {object} MakeRelativePathsCache
15
- * @property {Map<string, Map<string, string>>=} relativePaths
16
- */
17
-
18
13
  /**
19
14
  * @param {string} relativePath relative path
20
15
  * @returns {string} request
21
16
  */
22
- const relativePathToRequest = relativePath => {
17
+ const relativePathToRequest = (relativePath) => {
23
18
  if (relativePath === "") return "./.";
24
19
  if (relativePath === "..") return "../.";
25
20
  if (relativePath.startsWith("../")) return relativePath;
@@ -80,44 +75,47 @@ const absoluteToRequest = (context, maybeAbsolutePath) => {
80
75
  * @returns {string} absolute path
81
76
  */
82
77
  const requestToAbsolute = (context, relativePath) => {
83
- if (relativePath.startsWith("./") || relativePath.startsWith("../"))
78
+ if (relativePath.startsWith("./") || relativePath.startsWith("../")) {
84
79
  return path.join(context, relativePath);
80
+ }
85
81
  return relativePath;
86
82
  };
87
83
 
84
+ /** @typedef {EXPECTED_OBJECT} AssociatedObjectForCache */
85
+
88
86
  /**
89
87
  * @template T
90
- * @typedef {function(string, object=): T} MakeCacheableResult
88
+ * @typedef {(value: string, cache?: AssociatedObjectForCache) => T} MakeCacheableResult
91
89
  */
92
90
 
93
91
  /**
94
92
  * @template T
95
- * @typedef {function(string): T} BindCacheResultFn
93
+ * @typedef {(value: string) => T} BindCacheResultFn
96
94
  */
97
95
 
98
96
  /**
99
97
  * @template T
100
- * @typedef {function(object): BindCacheResultFn<T>} BindCache
98
+ * @typedef {(cache: AssociatedObjectForCache) => BindCacheResultFn<T>} BindCache
101
99
  */
102
100
 
103
101
  /**
104
102
  * @template T
105
- * @param {(function(string): T)} realFn real function
103
+ * @param {((value: string) => T)} realFn real function
106
104
  * @returns {MakeCacheableResult<T> & { bindCache: BindCache<T> }} cacheable function
107
105
  */
108
- const makeCacheable = realFn => {
106
+ const makeCacheable = (realFn) => {
109
107
  /**
110
108
  * @template T
111
109
  * @typedef {Map<string, T>} CacheItem
112
110
  */
113
- /** @type {WeakMap<object, CacheItem<T>>} */
111
+ /** @type {WeakMap<AssociatedObjectForCache, CacheItem<T>>} */
114
112
  const cache = new WeakMap();
115
113
 
116
114
  /**
117
- * @param {object} associatedObjectForCache an object to which the cache will be attached
115
+ * @param {AssociatedObjectForCache} associatedObjectForCache an object to which the cache will be attached
118
116
  * @returns {CacheItem<T>} cache item
119
117
  */
120
- const getCache = associatedObjectForCache => {
118
+ const getCache = (associatedObjectForCache) => {
121
119
  const entry = cache.get(associatedObjectForCache);
122
120
  if (entry !== undefined) return entry;
123
121
  /** @type {Map<string, T>} */
@@ -138,13 +136,13 @@ const makeCacheable = realFn => {
138
136
  };
139
137
 
140
138
  /** @type {BindCache<T>} */
141
- fn.bindCache = associatedObjectForCache => {
139
+ fn.bindCache = (associatedObjectForCache) => {
142
140
  const cache = getCache(associatedObjectForCache);
143
141
  /**
144
142
  * @param {string} str string
145
143
  * @returns {T} value
146
144
  */
147
- return str => {
145
+ return (str) => {
148
146
  const entry = cache.get(str);
149
147
  if (entry !== undefined) return entry;
150
148
  const result = realFn(str);
@@ -156,18 +154,18 @@ const makeCacheable = realFn => {
156
154
  return fn;
157
155
  };
158
156
 
159
- /** @typedef {function(string, string, object=): string} MakeCacheableWithContextResult */
160
- /** @typedef {function(string, string): string} BindCacheForContextResultFn */
161
- /** @typedef {function(string): string} BindContextCacheForContextResultFn */
162
- /** @typedef {function(object=): BindCacheForContextResultFn} BindCacheForContext */
163
- /** @typedef {function(string, object=): BindContextCacheForContextResultFn} BindContextCacheForContext */
157
+ /** @typedef {(context: string, value: string, associatedObjectForCache?: AssociatedObjectForCache) => string} MakeCacheableWithContextResult */
158
+ /** @typedef {(context: string, value: string) => string} BindCacheForContextResultFn */
159
+ /** @typedef {(value: string) => string} BindContextCacheForContextResultFn */
160
+ /** @typedef {(associatedObjectForCache?: AssociatedObjectForCache) => BindCacheForContextResultFn} BindCacheForContext */
161
+ /** @typedef {(value: string, associatedObjectForCache?: AssociatedObjectForCache) => BindContextCacheForContextResultFn} BindContextCacheForContext */
164
162
 
165
163
  /**
166
- * @param {function(string, string): string} fn function
164
+ * @param {(context: string, identifier: string) => string} fn function
167
165
  * @returns {MakeCacheableWithContextResult & { bindCache: BindCacheForContext, bindContextCache: BindContextCacheForContext }} cacheable function with context
168
166
  */
169
- const makeCacheableWithContext = fn => {
170
- /** @type {WeakMap<object, Map<string, Map<string, string>>>} */
167
+ const makeCacheableWithContext = (fn) => {
168
+ /** @type {WeakMap<AssociatedObjectForCache, Map<string, Map<string, string>>>} */
171
169
  const cache = new WeakMap();
172
170
 
173
171
  /** @type {MakeCacheableWithContextResult & { bindCache: BindCacheForContext, bindContextCache: BindContextCacheForContext }} */
@@ -197,7 +195,7 @@ const makeCacheableWithContext = fn => {
197
195
  };
198
196
 
199
197
  /** @type {BindCacheForContext} */
200
- cachedFn.bindCache = associatedObjectForCache => {
198
+ cachedFn.bindCache = (associatedObjectForCache) => {
201
199
  let innerCache;
202
200
  if (associatedObjectForCache) {
203
201
  innerCache = cache.get(associatedObjectForCache);
@@ -256,7 +254,7 @@ const makeCacheableWithContext = fn => {
256
254
  * @param {string} identifier identifier used to create relative path
257
255
  * @returns {string} the returned relative path
258
256
  */
259
- const boundFn = identifier => {
257
+ const boundFn = (identifier) => {
260
258
  const cachedResult = innerSubCache.get(identifier);
261
259
  if (cachedResult !== undefined) {
262
260
  return cachedResult;
@@ -280,11 +278,9 @@ const makeCacheableWithContext = fn => {
280
278
  const _makePathsRelative = (context, identifier) =>
281
279
  identifier
282
280
  .split(SEGMENTS_SPLIT_REGEXP)
283
- .map(str => absoluteToRequest(context, str))
281
+ .map((str) => absoluteToRequest(context, str))
284
282
  .join("");
285
283
 
286
- module.exports.makePathsRelative = makeCacheableWithContext(_makePathsRelative);
287
-
288
284
  /**
289
285
  * @param {string} context context for relative path
290
286
  * @param {string} identifier identifier for path
@@ -293,11 +289,9 @@ module.exports.makePathsRelative = makeCacheableWithContext(_makePathsRelative);
293
289
  const _makePathsAbsolute = (context, identifier) =>
294
290
  identifier
295
291
  .split(SEGMENTS_SPLIT_REGEXP)
296
- .map(str => requestToAbsolute(context, str))
292
+ .map((str) => requestToAbsolute(context, str))
297
293
  .join("");
298
294
 
299
- module.exports.makePathsAbsolute = makeCacheableWithContext(_makePathsAbsolute);
300
-
301
295
  /**
302
296
  * @param {string} context absolute context path
303
297
  * @param {string} request any request string may containing absolute paths, query string, etc.
@@ -306,11 +300,10 @@ module.exports.makePathsAbsolute = makeCacheableWithContext(_makePathsAbsolute);
306
300
  const _contextify = (context, request) =>
307
301
  request
308
302
  .split("!")
309
- .map(r => absoluteToRequest(context, r))
303
+ .map((r) => absoluteToRequest(context, r))
310
304
  .join("!");
311
305
 
312
306
  const contextify = makeCacheableWithContext(_contextify);
313
- module.exports.contextify = contextify;
314
307
 
315
308
  /**
316
309
  * @param {string} context absolute context path
@@ -320,15 +313,15 @@ module.exports.contextify = contextify;
320
313
  const _absolutify = (context, request) =>
321
314
  request
322
315
  .split("!")
323
- .map(r => requestToAbsolute(context, r))
316
+ .map((r) => requestToAbsolute(context, r))
324
317
  .join("!");
325
318
 
326
319
  const absolutify = makeCacheableWithContext(_absolutify);
327
- module.exports.absolutify = absolutify;
328
320
 
329
321
  const PATH_QUERY_FRAGMENT_REGEXP =
330
322
  /^((?:\0.|[^?#\0])*)(\?(?:\0.|[^#\0])*)?(#.*)?$/;
331
323
  const PATH_QUERY_REGEXP = /^((?:\0.|[^?\0])*)(\?.*)?$/;
324
+ const ZERO_ESCAPE_REGEXP = /\0(.)/g;
332
325
 
333
326
  /** @typedef {{ resource: string, path: string, query: string, fragment: string }} ParsedResource */
334
327
  /** @typedef {{ resource: string, path: string, query: string }} ParsedResourceWithoutFragment */
@@ -337,37 +330,97 @@ const PATH_QUERY_REGEXP = /^((?:\0.|[^?\0])*)(\?.*)?$/;
337
330
  * @param {string} str the path with query and fragment
338
331
  * @returns {ParsedResource} parsed parts
339
332
  */
340
- const _parseResource = str => {
341
- const match =
342
- /** @type {[string, string, string | undefined, string | undefined]} */
343
- (/** @type {unknown} */ (PATH_QUERY_FRAGMENT_REGEXP.exec(str)));
344
- return {
345
- resource: str,
346
- path: match[1].replace(/\0(.)/g, "$1"),
347
- query: match[2] ? match[2].replace(/\0(.)/g, "$1") : "",
348
- fragment: match[3] || ""
349
- };
333
+ const _parseResource = (str) => {
334
+ const firstEscape = str.indexOf("\0");
335
+
336
+ // Handle `\0`
337
+ if (firstEscape !== -1) {
338
+ const match =
339
+ /** @type {[string, string, string | undefined, string | undefined]} */
340
+ (/** @type {unknown} */ (PATH_QUERY_FRAGMENT_REGEXP.exec(str)));
341
+
342
+ return {
343
+ resource: str,
344
+ path: match[1].replace(ZERO_ESCAPE_REGEXP, "$1"),
345
+ query: match[2] ? match[2].replace(ZERO_ESCAPE_REGEXP, "$1") : "",
346
+ fragment: match[3] || ""
347
+ };
348
+ }
349
+
350
+ /** @type {ParsedResource} */
351
+ const result = { resource: str, path: "", query: "", fragment: "" };
352
+ const queryStart = str.indexOf("?");
353
+ const fragmentStart = str.indexOf("#");
354
+
355
+ if (fragmentStart < 0) {
356
+ if (queryStart < 0) {
357
+ result.path = result.resource;
358
+
359
+ // No fragment, no query
360
+ return result;
361
+ }
362
+
363
+ result.path = str.slice(0, queryStart);
364
+ result.query = str.slice(queryStart);
365
+
366
+ // Query, no fragment
367
+ return result;
368
+ }
369
+
370
+ if (queryStart < 0 || fragmentStart < queryStart) {
371
+ result.path = str.slice(0, fragmentStart);
372
+ result.fragment = str.slice(fragmentStart);
373
+
374
+ // Fragment, no query
375
+ return result;
376
+ }
377
+
378
+ result.path = str.slice(0, queryStart);
379
+ result.query = str.slice(queryStart, fragmentStart);
380
+ result.fragment = str.slice(fragmentStart);
381
+
382
+ // Query and fragment
383
+ return result;
350
384
  };
351
- module.exports.parseResource = makeCacheable(_parseResource);
352
385
 
353
386
  /**
354
387
  * Parse resource, skips fragment part
355
388
  * @param {string} str the path with query and fragment
356
389
  * @returns {ParsedResourceWithoutFragment} parsed parts
357
390
  */
358
- const _parseResourceWithoutFragment = str => {
359
- const match =
360
- /** @type {[string, string, string | undefined]} */
361
- (/** @type {unknown} */ (PATH_QUERY_REGEXP.exec(str)));
362
- return {
363
- resource: str,
364
- path: match[1].replace(/\0(.)/g, "$1"),
365
- query: match[2] ? match[2].replace(/\0(.)/g, "$1") : ""
366
- };
391
+ const _parseResourceWithoutFragment = (str) => {
392
+ const firstEscape = str.indexOf("\0");
393
+
394
+ // Handle `\0`
395
+ if (firstEscape !== -1) {
396
+ const match =
397
+ /** @type {[string, string, string | undefined]} */
398
+ (/** @type {unknown} */ (PATH_QUERY_REGEXP.exec(str)));
399
+
400
+ return {
401
+ resource: str,
402
+ path: match[1].replace(ZERO_ESCAPE_REGEXP, "$1"),
403
+ query: match[2] ? match[2].replace(ZERO_ESCAPE_REGEXP, "$1") : ""
404
+ };
405
+ }
406
+
407
+ /** @type {ParsedResourceWithoutFragment} */
408
+ const result = { resource: str, path: "", query: "" };
409
+ const queryStart = str.indexOf("?");
410
+
411
+ if (queryStart < 0) {
412
+ result.path = result.resource;
413
+
414
+ // No query
415
+ return result;
416
+ }
417
+
418
+ result.path = str.slice(0, queryStart);
419
+ result.query = str.slice(queryStart);
420
+
421
+ // Query
422
+ return result;
367
423
  };
368
- module.exports.parseResourceWithoutFragment = makeCacheable(
369
- _parseResourceWithoutFragment
370
- );
371
424
 
372
425
  /**
373
426
  * @param {string} filename the filename which should be undone
@@ -375,7 +428,7 @@ module.exports.parseResourceWithoutFragment = makeCacheable(
375
428
  * @param {boolean} enforceRelative true returns ./ for empty paths
376
429
  * @returns {string} repeated ../ to leave the directory of the provided filename to be back on output dir
377
430
  */
378
- module.exports.getUndoPath = (filename, outputPath, enforceRelative) => {
431
+ const getUndoPath = (filename, outputPath, enforceRelative) => {
379
432
  let depth = -1;
380
433
  let append = "";
381
434
  outputPath = outputPath.replace(/[\\/]$/, "");
@@ -401,3 +454,13 @@ module.exports.getUndoPath = (filename, outputPath, enforceRelative) => {
401
454
  ? `./${append}`
402
455
  : append;
403
456
  };
457
+
458
+ module.exports.absolutify = absolutify;
459
+ module.exports.contextify = contextify;
460
+ module.exports.getUndoPath = getUndoPath;
461
+ module.exports.makePathsAbsolute = makeCacheableWithContext(_makePathsAbsolute);
462
+ module.exports.makePathsRelative = makeCacheableWithContext(_makePathsRelative);
463
+ module.exports.parseResource = makeCacheable(_parseResource);
464
+ module.exports.parseResourceWithoutFragment = makeCacheable(
465
+ _parseResourceWithoutFragment
466
+ );
@@ -73,16 +73,12 @@ module.exports = {
73
73
  require("../dependencies/CriticalDependencyWarning"),
74
74
  "dependencies/CssImportDependency": () =>
75
75
  require("../dependencies/CssImportDependency"),
76
- "dependencies/CssLocalIdentifierDependency": () =>
77
- require("../dependencies/CssLocalIdentifierDependency"),
78
- "dependencies/CssSelfLocalIdentifierDependency": () =>
79
- require("../dependencies/CssSelfLocalIdentifierDependency"),
76
+ "dependencies/CssUrlDependency": () =>
77
+ require("../dependencies/CssUrlDependency"),
80
78
  "dependencies/CssIcssImportDependency": () =>
81
79
  require("../dependencies/CssIcssImportDependency"),
82
80
  "dependencies/CssIcssExportDependency": () =>
83
81
  require("../dependencies/CssIcssExportDependency"),
84
- "dependencies/CssUrlDependency": () =>
85
- require("../dependencies/CssUrlDependency"),
86
82
  "dependencies/CssIcssSymbolDependency": () =>
87
83
  require("../dependencies/CssIcssSymbolDependency"),
88
84
  "dependencies/DelegatedSourceDependency": () =>
@@ -170,6 +166,8 @@ module.exports = {
170
166
  "dependencies/UnsupportedDependency": () =>
171
167
  require("../dependencies/UnsupportedDependency"),
172
168
  "dependencies/URLDependency": () => require("../dependencies/URLDependency"),
169
+ "dependencies/URLContextDependency": () =>
170
+ require("../dependencies/URLContextDependency"),
173
171
  "dependencies/WebAssemblyExportImportedDependency": () =>
174
172
  require("../dependencies/WebAssemblyExportImportedDependency"),
175
173
  "dependencies/WebAssemblyImportDependency": () =>
@@ -5,7 +5,16 @@
5
5
 
6
6
  "use strict";
7
7
 
8
+ const memoize = require("./memoize");
9
+
10
+ const getVm = memoize(() => require("vm"));
11
+
8
12
  // regexp to match at least one "magic comment"
13
+ module.exports.createMagicCommentContext = () =>
14
+ getVm().createContext(undefined, {
15
+ name: "Webpack Magic Comment Parser",
16
+ codeGeneration: { strings: false, wasm: false }
17
+ });
9
18
  module.exports.webpackCommentRegExp = new RegExp(
10
19
  /(^|\W)webpack[A-Z]{1,}[A-Za-z]{1,}:/
11
20
  );
@@ -14,8 +23,3 @@ module.exports.webpackCommentRegExp = new RegExp(
14
23
  /**
15
24
  * @returns {import("vm").Context} magic comment context
16
25
  */
17
- module.exports.createMagicCommentContext = () =>
18
- require("vm").createContext(undefined, {
19
- name: "Webpack Magic Comment Parser",
20
- codeGeneration: { strings: false, wasm: false }
21
- });
@@ -13,7 +13,7 @@ const { register } = require("./serialization");
13
13
  /** @typedef {{ serialize: (context: ObjectSerializerContext) => void, deserialize: (context: ObjectDeserializerContext) => void }} SerializableClass */
14
14
  /**
15
15
  * @template {SerializableClass} T
16
- * @typedef {(new (...params: any[]) => T) & { deserialize?: (context: ObjectDeserializerContext) => T }} SerializableClassConstructor
16
+ * @typedef {(new (...params: EXPECTED_ANY[]) => T) & { deserialize?: (context: ObjectDeserializerContext) => T }} SerializableClassConstructor
17
17
  */
18
18
 
19
19
  /**
@@ -53,7 +53,7 @@ class ClassSerializer {
53
53
  * @template {Constructor} T
54
54
  * @param {T} Constructor the constructor
55
55
  * @param {string} request the request which will be required when deserializing
56
- * @param {string | null} [name] the name to make multiple serializer unique when sharing a request
56
+ * @param {string | null=} name the name to make multiple serializer unique when sharing a request
57
57
  */
58
58
  module.exports = (Constructor, request, name = null) => {
59
59
  register(Constructor, request, name, new ClassSerializer(Constructor));
@@ -4,14 +4,17 @@
4
4
 
5
5
  "use strict";
6
6
 
7
- /** @template T @typedef {function(): T} FunctionReturning */
7
+ /**
8
+ * @template T
9
+ * @typedef {() => T} FunctionReturning
10
+ */
8
11
 
9
12
  /**
10
13
  * @template T
11
14
  * @param {FunctionReturning<T>} fn memorized function
12
15
  * @returns {FunctionReturning<T>} new function
13
16
  */
14
- const memoize = fn => {
17
+ const memoize = (fn) => {
15
18
  let cache = false;
16
19
  /** @type {T | undefined} */
17
20
  let result;
@@ -6,8 +6,9 @@
6
6
 
7
7
  /**
8
8
  * Convert an object into an ES6 map
9
- * @param {object} obj any object type that works with Object.entries()
10
- * @returns {Map<string, any>} an ES6 Map of KV pairs
9
+ * @template {object} T
10
+ * @param {T} obj any object type that works with Object.entries()
11
+ * @returns {Map<string, T[keyof T]>} an ES6 Map of KV pairs
11
12
  */
12
13
  module.exports = function objectToMap(obj) {
13
14
  return new Map(Object.entries(obj));
@@ -10,12 +10,12 @@
10
10
  * @template {Error} E
11
11
  * @param {Iterable<T>} items initial items
12
12
  * @param {number} concurrency number of items running in parallel
13
- * @param {function(T, function(T): void, function(E=): void): void} processor worker which pushes more items
14
- * @param {function(E=): void} callback all items processed
13
+ * @param {(item: T, push: (item: T) => void, callback: (err?: E) => void) => void} processor worker which pushes more items
14
+ * @param {(err?: E) => void} callback all items processed
15
15
  * @returns {void}
16
16
  */
17
17
  const processAsyncTree = (items, concurrency, processor, callback) => {
18
- const queue = Array.from(items);
18
+ const queue = [...items];
19
19
  if (queue.length === 0) return callback();
20
20
  let processing = 0;
21
21
  let finished = false;
@@ -24,7 +24,7 @@ const processAsyncTree = (items, concurrency, processor, callback) => {
24
24
  /**
25
25
  * @param {T} item item
26
26
  */
27
- const push = item => {
27
+ const push = (item) => {
28
28
  queue.push(item);
29
29
  if (!processScheduled && processing < concurrency) {
30
30
  processScheduled = true;
@@ -35,7 +35,7 @@ const processAsyncTree = (items, concurrency, processor, callback) => {
35
35
  /**
36
36
  * @param {E | null | undefined} err error
37
37
  */
38
- const processorCallback = err => {
38
+ const processorCallback = (err) => {
39
39
  processing--;
40
40
  if (err && !finished) {
41
41
  finished = true;
@@ -5,7 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { SAFE_IDENTIFIER, RESERVED_IDENTIFIER } = require("./propertyName");
8
+ const { RESERVED_IDENTIFIER, SAFE_IDENTIFIER } = require("./propertyName");
9
9
 
10
10
  /**
11
11
  * @param {ArrayLike<string>} properties properties
@@ -50,7 +50,6 @@ const RESERVED_IDENTIFIER = new Set([
50
50
  "public",
51
51
  "static",
52
52
  "yield",
53
- "yield",
54
53
  // module code
55
54
  "await",
56
55
  // skip future reserved keywords defined under ES1 till ES3
@@ -67,11 +66,11 @@ const RESERVED_IDENTIFIER = new Set([
67
66
  * @param {string} prop property name to analyze
68
67
  * @returns {string} valid JS property name
69
68
  */
70
- const propertyName = prop => {
69
+ const propertyName = (prop) => {
71
70
  if (SAFE_IDENTIFIER.test(prop) && !RESERVED_IDENTIFIER.has(prop)) {
72
71
  return prop;
73
72
  }
74
73
  return JSON.stringify(prop);
75
74
  };
76
75
 
77
- module.exports = { SAFE_IDENTIFIER, RESERVED_IDENTIFIER, propertyName };
76
+ module.exports = { RESERVED_IDENTIFIER, SAFE_IDENTIFIER, propertyName };
@@ -5,9 +5,7 @@
5
5
 
6
6
  "use strict";
7
7
 
8
- const { register } = require("./serialization");
9
-
10
- const Position = /** @type {TODO} */ (require("acorn")).Position;
8
+ const Position = require("acorn").Position;
11
9
  const SourceLocation = require("acorn").SourceLocation;
12
10
  const ValidationError = require("schema-utils").ValidationError;
13
11
  const {
@@ -19,14 +17,13 @@ const {
19
17
  ReplaceSource,
20
18
  SourceMapSource
21
19
  } = require("webpack-sources");
20
+ const { register } = require("./serialization");
22
21
 
23
22
  /** @typedef {import("acorn").Position} Position */
24
23
  /** @typedef {import("../Dependency").RealDependencyLocation} RealDependencyLocation */
25
24
  /** @typedef {import("../Dependency").SourcePosition} SourcePosition */
26
- /** @typedef {import("./serialization").ObjectDeserializerContext} ObjectDeserializerContext */
27
- /** @typedef {import("./serialization").ObjectSerializerContext} ObjectSerializerContext */
28
-
29
- /** @typedef {ObjectSerializerContext & { writeLazy?: (value: any) => void }} WebpackObjectSerializerContext */
25
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
26
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
30
27
 
31
28
  const CURRENT_MODULE = "webpack/lib/util/registerExternalSerializer";
32
29
 
@@ -37,7 +34,7 @@ register(
37
34
  new (class CachedSourceSerializer {
38
35
  /**
39
36
  * @param {CachedSource} source the cached source to be serialized
40
- * @param {WebpackObjectSerializerContext} context context
37
+ * @param {ObjectSerializerContext} context context
41
38
  * @returns {void}
42
39
  */
43
40
  serialize(source, { write, writeLazy }) {
@@ -68,7 +65,7 @@ register(
68
65
  new (class RawSourceSerializer {
69
66
  /**
70
67
  * @param {RawSource} source the raw source to be serialized
71
- * @param {WebpackObjectSerializerContext} context context
68
+ * @param {ObjectSerializerContext} context context
72
69
  * @returns {void}
73
70
  */
74
71
  serialize(source, { write }) {
@@ -95,7 +92,7 @@ register(
95
92
  new (class ConcatSourceSerializer {
96
93
  /**
97
94
  * @param {ConcatSource} source the concat source to be serialized
98
- * @param {WebpackObjectSerializerContext} context context
95
+ * @param {ObjectSerializerContext} context context
99
96
  * @returns {void}
100
97
  */
101
98
  serialize(source, { write }) {
@@ -121,7 +118,7 @@ register(
121
118
  new (class PrefixSourceSerializer {
122
119
  /**
123
120
  * @param {PrefixSource} source the prefix source to be serialized
124
- * @param {WebpackObjectSerializerContext} context context
121
+ * @param {ObjectSerializerContext} context context
125
122
  * @returns {void}
126
123
  */
127
124
  serialize(source, { write }) {
@@ -146,7 +143,7 @@ register(
146
143
  new (class ReplaceSourceSerializer {
147
144
  /**
148
145
  * @param {ReplaceSource} source the replace source to be serialized
149
- * @param {WebpackObjectSerializerContext} context context
146
+ * @param {ObjectSerializerContext} context context
150
147
  * @returns {void}
151
148
  */
152
149
  serialize(source, { write }) {
@@ -196,7 +193,7 @@ register(
196
193
  new (class OriginalSourceSerializer {
197
194
  /**
198
195
  * @param {OriginalSource} source the original source to be serialized
199
- * @param {WebpackObjectSerializerContext} context context
196
+ * @param {ObjectSerializerContext} context context
200
197
  * @returns {void}
201
198
  */
202
199
  serialize(source, { write }) {
@@ -223,7 +220,7 @@ register(
223
220
  new (class SourceLocationSerializer {
224
221
  /**
225
222
  * @param {SourceLocation} loc the location to be serialized
226
- * @param {WebpackObjectSerializerContext} context context
223
+ * @param {ObjectSerializerContext} context context
227
224
  * @returns {void}
228
225
  */
229
226
  serialize(loc, { write }) {
@@ -259,7 +256,7 @@ register(
259
256
  new (class PositionSerializer {
260
257
  /**
261
258
  * @param {Position} pos the position to be serialized
262
- * @param {WebpackObjectSerializerContext} context context
259
+ * @param {ObjectSerializerContext} context context
263
260
  * @returns {void}
264
261
  */
265
262
  serialize(pos, { write }) {
@@ -287,7 +284,7 @@ register(
287
284
  new (class SourceMapSourceSerializer {
288
285
  /**
289
286
  * @param {SourceMapSource} source the source map source to be serialized
290
- * @param {WebpackObjectSerializerContext} context context
287
+ * @param {ObjectSerializerContext} context context
291
288
  * @returns {void}
292
289
  */
293
290
  serialize(source, { write }) {
@@ -310,10 +307,9 @@ register(
310
307
  CURRENT_MODULE,
311
308
  "schema-utils/ValidationError",
312
309
  new (class ValidationErrorSerializer {
313
- // TODO error should be ValidationError, but this fails the type checks
314
310
  /**
315
- * @param {TODO} error the source map source to be serialized
316
- * @param {WebpackObjectSerializerContext} context context
311
+ * @param {ValidationError} error the source map source to be serialized
312
+ * @param {ObjectSerializerContext} context context
317
313
  * @returns {void}
318
314
  */
319
315
  serialize(error, { write }) {
@@ -328,7 +324,7 @@ register(
328
324
 
329
325
  /**
330
326
  * @param {ObjectDeserializerContext} context context
331
- * @returns {TODO} error
327
+ * @returns {ValidationError} error
332
328
  */
333
329
  deserialize({ read }) {
334
330
  return new ValidationError(read(), read(), read());
@@ -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
+ /**
9
+ * @param {string | Buffer} strOrBuffer string or buffer
10
+ * @returns {string | Buffer} result without BOM
11
+ */
12
+ module.exports = (strOrBuffer) => {
13
+ if (typeof strOrBuffer === "string" && strOrBuffer.charCodeAt(0) === 0xfeff) {
14
+ return strOrBuffer.slice(1);
15
+ } else if (
16
+ Buffer.isBuffer(strOrBuffer) &&
17
+ strOrBuffer[0] === 0xef &&
18
+ strOrBuffer[1] === 0xbb &&
19
+ strOrBuffer[2] === 0xbf
20
+ ) {
21
+ return strOrBuffer.subarray(3);
22
+ }
23
+
24
+ return strOrBuffer;
25
+ };