webpack 5.107.1 → 5.108.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/hot/dev-server.js +2 -0
  2. package/lib/APIPlugin.js +8 -4
  3. package/lib/CacheFacade.js +7 -0
  4. package/lib/Chunk.js +4 -0
  5. package/lib/ChunkGraph.js +30 -9
  6. package/lib/CircularModulesPlugin.js +190 -0
  7. package/lib/CleanPlugin.js +2 -1
  8. package/lib/Compilation.js +396 -65
  9. package/lib/Compiler.js +52 -14
  10. package/lib/ConcatenationScope.js +10 -3
  11. package/lib/ContextExclusionPlugin.js +1 -0
  12. package/lib/ContextModule.js +92 -47
  13. package/lib/ContextModuleFactory.js +45 -38
  14. package/lib/ContextReplacementPlugin.js +4 -0
  15. package/lib/DefinePlugin.js +89 -15
  16. package/lib/Dependency.js +111 -7
  17. package/lib/EntryOptionPlugin.js +39 -2
  18. package/lib/EntryPlugin.js +2 -0
  19. package/lib/ExportsInfo.js +314 -73
  20. package/lib/ExternalModule.js +82 -34
  21. package/lib/ExternalModuleFactoryPlugin.js +1 -0
  22. package/lib/ExternalsPlugin.js +1 -0
  23. package/lib/FileSystemInfo.js +173 -23
  24. package/lib/FlagAllModulesAsUsedPlugin.js +1 -5
  25. package/lib/FlagDependencyExportsPlugin.js +23 -0
  26. package/lib/FlagDependencyUsagePlugin.js +87 -5
  27. package/lib/FlagEntryExportAsUsedPlugin.js +2 -0
  28. package/lib/Generator.js +8 -0
  29. package/lib/HotModuleReplacementPlugin.js +65 -28
  30. package/lib/IgnorePlugin.js +1 -0
  31. package/lib/InitFragment.js +5 -0
  32. package/lib/JavascriptMetaInfoPlugin.js +7 -5
  33. package/lib/LazyBarrel.js +361 -0
  34. package/lib/LoaderTargetPlugin.js +1 -0
  35. package/lib/Module.js +21 -42
  36. package/lib/ModuleGraph.js +3 -2
  37. package/lib/ModuleProfile.js +27 -1
  38. package/lib/ModuleTemplate.js +2 -0
  39. package/lib/MultiCompiler.js +16 -0
  40. package/lib/MultiStats.js +1 -0
  41. package/lib/MultiWatching.js +2 -0
  42. package/lib/NodeStuffPlugin.js +22 -17
  43. package/lib/NormalModule.js +557 -77
  44. package/lib/NormalModuleReplacementPlugin.js +2 -0
  45. package/lib/PrefetchPlugin.js +2 -0
  46. package/lib/ProgressPlugin.js +9 -1
  47. package/lib/ProvidePlugin.js +1 -0
  48. package/lib/RawModule.js +20 -16
  49. package/lib/RecordIdsPlugin.js +1 -0
  50. package/lib/RuntimeGlobals.js +5 -0
  51. package/lib/RuntimePlugin.js +58 -26
  52. package/lib/RuntimeTemplate.js +278 -21
  53. package/lib/SelfModuleFactory.js +1 -0
  54. package/lib/SourceMapDevToolPlugin.js +105 -30
  55. package/lib/Stats.js +1 -0
  56. package/lib/Template.js +8 -2
  57. package/lib/TemplatedPathPlugin.js +473 -131
  58. package/lib/WarnCaseSensitiveModulesPlugin.js +1 -0
  59. package/lib/WarnDeprecatedOptionPlugin.js +4 -0
  60. package/lib/WarnNoModeSetPlugin.js +1 -0
  61. package/lib/WatchIgnorePlugin.js +1 -0
  62. package/lib/Watching.js +9 -0
  63. package/lib/WebpackOptionsApply.js +50 -5
  64. package/lib/asset/AssetBytesGenerator.js +11 -3
  65. package/lib/asset/AssetGenerator.js +47 -22
  66. package/lib/asset/AssetModule.js +47 -0
  67. package/lib/asset/AssetModulesPlugin.js +14 -14
  68. package/lib/asset/AssetParser.js +2 -2
  69. package/lib/asset/AssetSourceGenerator.js +8 -0
  70. package/lib/asset/RawDataUrlModule.js +12 -13
  71. package/lib/buildChunkGraph.js +88 -9
  72. package/lib/bun/BunTargetPlugin.js +48 -0
  73. package/lib/cache/AddBuildDependenciesPlugin.js +1 -0
  74. package/lib/cache/AddManagedPathsPlugin.js +3 -0
  75. package/lib/cache/IdleFileCachePlugin.js +4 -0
  76. package/lib/cache/MemoryWithGcCachePlugin.js +1 -0
  77. package/lib/cache/PackFileCacheStrategy.js +1 -0
  78. package/lib/cache/ResolverCachePlugin.js +2 -0
  79. package/lib/cache/getLazyHashedEtag.js +9 -2
  80. package/lib/cache/mergeEtags.js +2 -0
  81. package/lib/cli.js +109 -19
  82. package/lib/config/browserslistTargetHandler.js +99 -0
  83. package/lib/config/defaults.js +147 -7
  84. package/lib/config/defineConfig.js +31 -0
  85. package/lib/config/normalization.js +5 -0
  86. package/lib/config/target.js +181 -2
  87. package/lib/container/ContainerEntryModule.js +15 -14
  88. package/lib/container/ContainerExposedDependency.js +2 -2
  89. package/lib/container/ContainerReferencePlugin.js +1 -1
  90. package/lib/container/FallbackDependency.js +5 -7
  91. package/lib/container/FallbackModule.js +10 -9
  92. package/lib/container/RemoteModule.js +20 -10
  93. package/lib/container/RemoteRuntimeModule.js +14 -12
  94. package/lib/css/CssGenerator.js +353 -327
  95. package/lib/css/CssInjectStyleRuntimeModule.js +36 -8
  96. package/lib/css/CssLoadingRuntimeModule.js +118 -47
  97. package/lib/css/CssModule.js +52 -23
  98. package/lib/css/CssModulesPlugin.js +107 -124
  99. package/lib/css/CssParser.js +2759 -2205
  100. package/lib/css/syntax.js +2859 -0
  101. package/lib/debug/ProfilingPlugin.js +2 -0
  102. package/lib/deno/DenoTargetPlugin.js +47 -0
  103. package/lib/dependencies/AMDDefineDependency.js +22 -17
  104. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +1 -0
  105. package/lib/dependencies/AMDRequireArrayDependency.js +7 -11
  106. package/lib/dependencies/AMDRequireContextDependency.js +7 -11
  107. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +1 -0
  108. package/lib/dependencies/AMDRequireDependency.js +24 -20
  109. package/lib/dependencies/CachedConstDependency.js +3 -0
  110. package/lib/dependencies/CommonJsDependencyHelpers.js +1 -0
  111. package/lib/dependencies/CommonJsExportRequireDependency.js +79 -31
  112. package/lib/dependencies/CommonJsExportsDependency.js +21 -16
  113. package/lib/dependencies/CommonJsExportsParserPlugin.js +230 -7
  114. package/lib/dependencies/CommonJsFullRequireDependency.js +27 -19
  115. package/lib/dependencies/CommonJsImportsParserPlugin.js +51 -16
  116. package/lib/dependencies/CommonJsPlugin.js +1 -1
  117. package/lib/dependencies/CommonJsRequireContextDependency.js +10 -13
  118. package/lib/dependencies/CommonJsRequireDependency.js +42 -11
  119. package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -14
  120. package/lib/dependencies/ConstDependency.js +16 -11
  121. package/lib/dependencies/ContextDependency.js +4 -0
  122. package/lib/dependencies/ContextDependencyTemplateAsId.js +1 -1
  123. package/lib/dependencies/ContextElementDependency.js +23 -14
  124. package/lib/dependencies/CreateRequireParserPlugin.js +1 -0
  125. package/lib/dependencies/CreateScriptUrlDependency.js +5 -7
  126. package/lib/dependencies/CriticalDependencyWarning.js +1 -0
  127. package/lib/dependencies/CssIcssExportDependency.js +512 -574
  128. package/lib/dependencies/CssIcssImportDependency.js +9 -9
  129. package/lib/dependencies/CssIcssSymbolDependency.js +22 -15
  130. package/lib/dependencies/CssImportDependency.js +25 -1
  131. package/lib/dependencies/CssUrlDependency.js +23 -14
  132. package/lib/dependencies/DllEntryDependency.js +9 -13
  133. package/lib/dependencies/ExportBindingInitFragment.js +164 -0
  134. package/lib/dependencies/ExportsInfoDependency.js +12 -12
  135. package/lib/dependencies/ExternalModuleDependency.js +8 -5
  136. package/lib/dependencies/ExternalModuleInitFragment.js +7 -5
  137. package/lib/dependencies/ExternalModuleInitFragmentDependency.js +13 -10
  138. package/lib/dependencies/HarmonyAcceptDependency.js +11 -11
  139. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -0
  140. package/lib/dependencies/HarmonyDetectionParserPlugin.js +47 -22
  141. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +28 -2
  142. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +46 -22
  143. package/lib/dependencies/HarmonyExportExpressionDependency.js +107 -30
  144. package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -9
  145. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +109 -31
  146. package/lib/dependencies/HarmonyExportInitFragment.js +22 -20
  147. package/lib/dependencies/HarmonyExportSpecifierDependency.js +83 -18
  148. package/lib/dependencies/HarmonyExports.js +4 -1
  149. package/lib/dependencies/HarmonyImportDependency.js +24 -0
  150. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +110 -74
  151. package/lib/dependencies/HarmonyImportGuard.js +254 -0
  152. package/lib/dependencies/HarmonyImportSideEffectDependency.js +18 -1
  153. package/lib/dependencies/HarmonyImportSpecifierDependency.js +118 -14
  154. package/lib/dependencies/HarmonyLinkingError.js +1 -0
  155. package/lib/dependencies/HarmonyModulesPlugin.js +1 -0
  156. package/lib/dependencies/{HtmlScriptSrcDependency.js → HtmlEntryDependency.js} +267 -154
  157. package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
  158. package/lib/dependencies/HtmlInlineScriptDependency.js +20 -27
  159. package/lib/dependencies/HtmlInlineStyleDependency.js +62 -11
  160. package/lib/dependencies/HtmlSourceDependency.js +18 -0
  161. package/lib/dependencies/ImportContextDependency.js +5 -9
  162. package/lib/dependencies/ImportDependency.js +44 -2
  163. package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -0
  164. package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -0
  165. package/lib/dependencies/ImportMetaPlugin.js +74 -30
  166. package/lib/dependencies/ImportParserPlugin.js +19 -0
  167. package/lib/dependencies/ImportWeakDependency.js +1 -0
  168. package/lib/dependencies/JsonExportsDependency.js +9 -9
  169. package/lib/dependencies/LoaderImportDependency.js +1 -0
  170. package/lib/dependencies/LocalModule.js +11 -12
  171. package/lib/dependencies/LocalModuleDependency.js +11 -13
  172. package/lib/dependencies/ModuleDecoratorDependency.js +9 -9
  173. package/lib/dependencies/ModuleDependency.js +7 -0
  174. package/lib/dependencies/ModuleHotAcceptDependency.js +1 -0
  175. package/lib/dependencies/ModuleHotDeclineDependency.js +1 -0
  176. package/lib/dependencies/ModuleInitFragmentDependency.js +15 -11
  177. package/lib/dependencies/ProvidedDependency.js +31 -27
  178. package/lib/dependencies/PureExpressionDependency.js +7 -9
  179. package/lib/dependencies/RequireEnsureDependency.js +12 -13
  180. package/lib/dependencies/RequireHeaderDependency.js +3 -4
  181. package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +3 -0
  182. package/lib/dependencies/RequireResolveContextDependency.js +7 -11
  183. package/lib/dependencies/RequireResolveDependency.js +1 -0
  184. package/lib/dependencies/RequireResolveHeaderDependency.js +3 -5
  185. package/lib/dependencies/RuntimeRequirementsDependency.js +6 -7
  186. package/lib/dependencies/StaticExportsDependency.js +10 -10
  187. package/lib/dependencies/SystemPlugin.js +2 -0
  188. package/lib/dependencies/URLContextDependency.js +5 -7
  189. package/lib/dependencies/URLDependency.js +14 -16
  190. package/lib/dependencies/UnsupportedDependency.js +8 -13
  191. package/lib/dependencies/WebAssemblyExportImportedDependency.js +11 -16
  192. package/lib/dependencies/WebAssemblyImportDependency.js +14 -16
  193. package/lib/dependencies/WebpackIsIncludedDependency.js +1 -0
  194. package/lib/dependencies/WorkerDependency.js +19 -8
  195. package/lib/dependencies/WorkerPlugin.js +40 -10
  196. package/lib/dependencies/processExportInfo.js +13 -11
  197. package/lib/dll/DelegatedModule.js +29 -15
  198. package/lib/dll/DelegatedModuleFactoryPlugin.js +1 -0
  199. package/lib/dll/DelegatedPlugin.js +1 -0
  200. package/lib/dll/DllEntryPlugin.js +3 -0
  201. package/lib/dll/DllModule.js +3 -2
  202. package/lib/dll/DllPlugin.js +16 -0
  203. package/lib/dll/DllReferencePlugin.js +3 -0
  204. package/lib/dll/LibManifestPlugin.js +1 -0
  205. package/lib/electron/ElectronTargetPlugin.js +22 -4
  206. package/lib/errors/ConcurrentCompilationError.js +1 -0
  207. package/lib/errors/HookWebpackError.js +11 -13
  208. package/lib/errors/IgnoreErrorModuleFactory.js +1 -0
  209. package/lib/errors/InvalidDependenciesModuleWarning.js +2 -0
  210. package/lib/errors/JSONParseError.js +9 -8
  211. package/lib/errors/ModuleBuildError.js +16 -13
  212. package/lib/errors/ModuleDependencyError.js +8 -1
  213. package/lib/errors/ModuleDependencyWarning.js +8 -1
  214. package/lib/errors/ModuleError.js +5 -11
  215. package/lib/errors/ModuleHashingError.js +4 -0
  216. package/lib/errors/ModuleNotFoundError.js +3 -0
  217. package/lib/errors/ModuleParseError.js +5 -11
  218. package/lib/errors/ModuleRestoreError.js +2 -0
  219. package/lib/errors/ModuleStoreError.js +3 -0
  220. package/lib/errors/ModuleWarning.js +7 -11
  221. package/lib/errors/NodeStuffInWebError.js +1 -0
  222. package/lib/errors/NonErrorEmittedError.js +2 -0
  223. package/lib/errors/UnhandledSchemeError.js +1 -0
  224. package/lib/esm/ModuleChunkLoadingPlugin.js +0 -1
  225. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +28 -23
  226. package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
  227. package/lib/hmr/HotModuleReplacementRuntimeModule.js +7 -0
  228. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
  229. package/lib/hmr/LazyCompilationPlugin.js +134 -6
  230. package/lib/html/HtmlGenerator.js +292 -50
  231. package/lib/html/HtmlModule.js +40 -0
  232. package/lib/html/HtmlModulesPlugin.js +287 -60
  233. package/lib/html/HtmlParser.js +1108 -1099
  234. package/lib/html/{walkHtmlTokens.js → syntax.js} +4701 -212
  235. package/lib/ids/IdHelpers.js +4 -2
  236. package/lib/index.js +19 -0
  237. package/lib/javascript/BasicEvaluatedExpression.js +1 -0
  238. package/lib/javascript/EnableChunkLoadingPlugin.js +1 -0
  239. package/lib/javascript/JavascriptGenerator.js +6 -2
  240. package/lib/javascript/JavascriptModule.js +54 -0
  241. package/lib/javascript/JavascriptModulesPlugin.js +257 -102
  242. package/lib/javascript/JavascriptParser.js +286 -159
  243. package/lib/json/JsonModule.js +40 -0
  244. package/lib/json/JsonModulesPlugin.js +7 -0
  245. package/lib/json/JsonParser.js +4 -2
  246. package/lib/library/AssignLibraryPlugin.js +5 -3
  247. package/lib/library/ExportPropertyLibraryPlugin.js +1 -0
  248. package/lib/library/FalseIIFEUmdWarning.js +1 -0
  249. package/lib/library/ModuleLibraryPlugin.js +54 -29
  250. package/lib/library/SystemLibraryPlugin.js +3 -3
  251. package/lib/node/NodeTargetPlugin.js +1 -0
  252. package/lib/node/NodeWatchFileSystem.js +38 -22
  253. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +10 -9
  254. package/lib/node/RequireChunkLoadingRuntimeModule.js +18 -16
  255. package/lib/optimize/ConcatenatedModule.js +397 -78
  256. package/lib/optimize/ConstExportsPlugin.js +211 -0
  257. package/lib/optimize/InlineExports.js +178 -0
  258. package/lib/optimize/InnerGraph.js +372 -275
  259. package/lib/optimize/InnerGraphPlugin.js +196 -99
  260. package/lib/optimize/ModuleConcatenationPlugin.js +56 -25
  261. package/lib/optimize/RealContentHashPlugin.js +14 -1
  262. package/lib/optimize/SideEffectsFlagPlugin.js +234 -64
  263. package/lib/runtime/AsyncModuleRuntimeModule.js +32 -30
  264. package/lib/runtime/AutoPublicPathRuntimeModule.js +11 -5
  265. package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +1 -1
  266. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +6 -4
  267. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +33 -4
  268. package/lib/runtime/GetChunkFilenameRuntimeModule.js +82 -3
  269. package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
  270. package/lib/runtime/HasOwnPropertyRuntimeModule.js +1 -1
  271. package/lib/runtime/LoadScriptRuntimeModule.js +18 -13
  272. package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +39 -26
  273. package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +1 -1
  274. package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
  275. package/lib/runtime/RelativeUrlRuntimeModule.js +3 -2
  276. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -1
  277. package/lib/runtime/StartupEntrypointRuntimeModule.js +4 -3
  278. package/lib/runtime/WorkerRuntimeModule.js +33 -0
  279. package/lib/schemes/HttpUriPlugin.js +3 -2
  280. package/lib/serialization/AggregateErrorSerializer.js +7 -6
  281. package/lib/serialization/ArraySerializer.js +4 -8
  282. package/lib/serialization/BinaryMiddleware.js +538 -468
  283. package/lib/serialization/DateObjectSerializer.js +2 -2
  284. package/lib/serialization/ErrorObjectSerializer.js +7 -6
  285. package/lib/serialization/MapObjectSerializer.js +5 -9
  286. package/lib/serialization/NullPrototypeObjectSerializer.js +7 -9
  287. package/lib/serialization/ObjectMiddleware.js +50 -13
  288. package/lib/serialization/PlainObjectSerializer.js +9 -8
  289. package/lib/serialization/RegExpObjectSerializer.js +2 -2
  290. package/lib/serialization/Serializer.js +1 -0
  291. package/lib/serialization/SetObjectSerializer.js +4 -8
  292. package/lib/sharing/ConsumeSharedModule.js +6 -7
  293. package/lib/sharing/ConsumeSharedPlugin.js +1 -0
  294. package/lib/sharing/ConsumeSharedRuntimeModule.js +46 -41
  295. package/lib/sharing/ProvideSharedDependency.js +30 -15
  296. package/lib/sharing/ProvideSharedModule.js +30 -11
  297. package/lib/sharing/ProvideSharedPlugin.js +4 -2
  298. package/lib/sharing/SharePlugin.js +3 -0
  299. package/lib/sharing/ShareRuntimeModule.js +18 -16
  300. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  301. package/lib/sharing/utils.js +1 -1
  302. package/lib/stats/DefaultStatsFactoryPlugin.js +4 -6
  303. package/lib/stats/DefaultStatsPrinterPlugin.js +14 -14
  304. package/lib/stats/StatsFactory.js +11 -9
  305. package/lib/stats/StatsPrinter.js +9 -2
  306. package/lib/url/URLParserPlugin.js +5 -2
  307. package/lib/util/AsyncQueue.js +10 -0
  308. package/lib/util/LazyBucketSortedSet.js +5 -0
  309. package/lib/util/LazySet.js +6 -4
  310. package/lib/util/LocConverter.js +11 -1
  311. package/lib/util/Semaphore.js +1 -0
  312. package/lib/util/SourceProcessor.js +106 -0
  313. package/lib/util/TupleSet.js +1 -0
  314. package/lib/util/WeakTupleMap.js +27 -1
  315. package/lib/util/chainedImports.js +3 -3
  316. package/lib/util/comparators.js +2 -2
  317. package/lib/util/concatenate.js +31 -7
  318. package/lib/util/createHash.js +0 -1
  319. package/lib/util/deterministicGrouping.js +19 -12
  320. package/lib/util/extractSourceMap.js +1 -1
  321. package/lib/util/findGraphRoots.js +2 -0
  322. package/lib/util/fs.js +16 -6
  323. package/lib/util/hash/DebugHash.js +1 -0
  324. package/lib/util/hash/hash-digest.js +24 -15
  325. package/lib/util/identifier.js +7 -0
  326. package/lib/util/internalSerializables.js +11 -2
  327. package/lib/util/magicComment.js +42 -0
  328. package/lib/util/makeSerializable.js +1 -0
  329. package/lib/util/nonNumericOnlyHash.js +30 -1
  330. package/lib/util/property.js +7 -1
  331. package/lib/util/publicPathPlaceholder.js +64 -0
  332. package/lib/util/registerExternalSerializer.js +4 -4
  333. package/lib/wasm-async/AsyncWasmModule.js +77 -0
  334. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +1 -1
  335. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +1 -96
  336. package/lib/wasm-async/AsyncWebAssemblyParser.js +1 -1
  337. package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +1 -1
  338. package/lib/wasm-sync/SyncWasmModule.js +39 -0
  339. package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +1 -0
  340. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +6 -3
  341. package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +2 -1
  342. package/lib/wasm-sync/WebAssemblyGenerator.js +1 -0
  343. package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +2 -0
  344. package/lib/wasm-sync/WebAssemblyModulesPlugin.js +10 -0
  345. package/lib/wasm-sync/WebAssemblyParser.js +7 -3
  346. package/lib/web/JsonpChunkLoadingRuntimeModule.js +45 -39
  347. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +11 -10
  348. package/package.json +36 -28
  349. package/schemas/WebpackOptions.check.js +1 -1
  350. package/schemas/WebpackOptions.json +212 -3
  351. package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -1
  352. package/schemas/plugins/HtmlParserOptions.check.d.ts +7 -0
  353. package/schemas/plugins/HtmlParserOptions.check.js +6 -0
  354. package/schemas/plugins/HtmlParserOptions.json +3 -0
  355. package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
  356. package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
  357. package/schemas/plugins/css/CssParserOptions.check.js +1 -1
  358. package/types.d.ts +1592 -314
  359. package/lib/css/walkCssTokens.js +0 -2020
  360. package/lib/util/AppendOnlyStackedSet.js +0 -93
@@ -13,8 +13,8 @@ const ModuleDependency = require("./ModuleDependency");
13
13
  /** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
14
14
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
15
15
  /** @typedef {import("../errors/WebpackError")} WebpackError */
16
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
17
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
16
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string, ModuleImportDescription, false | string]>} ObjectDeserializerContext */
17
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string, ModuleImportDescription, false | string]>} ObjectSerializerContext */
18
18
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
19
19
 
20
20
  class WebAssemblyImportDependency extends ModuleDependency {
@@ -50,7 +50,8 @@ class WebAssemblyImportDependency extends ModuleDependency {
50
50
  * @returns {ReferencedExports} referenced exports
51
51
  */
52
52
  getReferencedExports(moduleGraph, runtime) {
53
- return [[this.name]];
53
+ // wasm import glue needs the real binding, never an inlined literal
54
+ return [{ name: [this.name], canInline: false }];
54
55
  }
55
56
 
56
57
  /**
@@ -79,12 +80,10 @@ class WebAssemblyImportDependency extends ModuleDependency {
79
80
  * @param {ObjectSerializerContext} context context
80
81
  */
81
82
  serialize(context) {
82
- const { write } = context;
83
-
84
- write(this.name);
85
- write(this.description);
86
- write(this.onlyDirectImport);
87
-
83
+ context
84
+ .write(this.name)
85
+ .write(this.description)
86
+ .write(this.onlyDirectImport);
88
87
  super.serialize(context);
89
88
  }
90
89
 
@@ -93,13 +92,12 @@ class WebAssemblyImportDependency extends ModuleDependency {
93
92
  * @param {ObjectDeserializerContext} context context
94
93
  */
95
94
  deserialize(context) {
96
- const { read } = context;
97
-
98
- this.name = read();
99
- this.description = read();
100
- this.onlyDirectImport = read();
101
-
102
- super.deserialize(context);
95
+ this.name = context.read();
96
+ const c1 = context.rest;
97
+ this.description = c1.read();
98
+ const c2 = c1.rest;
99
+ this.onlyDirectImport = c2.read();
100
+ super.deserialize(c2.rest);
103
101
  }
104
102
  }
105
103
 
@@ -26,6 +26,7 @@ class WebpackIsIncludedDependency extends ModuleDependency {
26
26
  constructor(request, range) {
27
27
  super(request);
28
28
 
29
+ /** @type {boolean} */
29
30
  this.weak = true;
30
31
  this.range = range;
31
32
  }
@@ -18,8 +18,8 @@ const ModuleDependency = require("./ModuleDependency");
18
18
  /** @typedef {import("../Entrypoint")} Entrypoint */
19
19
  /** @typedef {import("../ModuleGraph")} ModuleGraph */
20
20
  /** @typedef {import("../javascript/JavascriptParser").Range} Range */
21
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
22
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
21
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[WorkerDependencyOptions]>} ObjectDeserializerContext */
22
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[WorkerDependencyOptions]>} ObjectSerializerContext */
23
23
  /** @typedef {import("../util/Hash")} Hash */
24
24
  /** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
25
25
 
@@ -28,6 +28,7 @@ const ModuleDependency = require("./ModuleDependency");
28
28
  * @typedef {object} WorkerDependencyOptions
29
29
  * @property {string=} publicPath public path for the worker
30
30
  * @property {boolean=} needNewUrl true when need generate `new URL(...)`, otherwise false
31
+ * @property {Range=} workerConstructorRange range of the global `Worker` constructor, set only for the `new Worker()` global syntax that needs a node-target rewrite
31
32
  */
32
33
 
33
34
  class WorkerDependency extends ModuleDependency {
@@ -84,8 +85,7 @@ class WorkerDependency extends ModuleDependency {
84
85
  * @param {ObjectSerializerContext} context context
85
86
  */
86
87
  serialize(context) {
87
- const { write } = context;
88
- write(this.options);
88
+ context.write(this.options);
89
89
  super.serialize(context);
90
90
  }
91
91
 
@@ -94,9 +94,8 @@ class WorkerDependency extends ModuleDependency {
94
94
  * @param {ObjectDeserializerContext} context context
95
95
  */
96
96
  deserialize(context) {
97
- const { read } = context;
98
- this.options = read();
99
- super.deserialize(context);
97
+ this.options = context.read();
98
+ super.deserialize(context.rest);
100
99
  }
101
100
  }
102
101
 
@@ -111,7 +110,8 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
111
110
  * @returns {void}
112
111
  */
113
112
  apply(dependency, source, templateContext) {
114
- const { chunkGraph, moduleGraph, runtimeRequirements } = templateContext;
113
+ const { chunkGraph, moduleGraph, runtimeRequirements, runtimeTemplate } =
114
+ templateContext;
115
115
  const dep = /** @type {WorkerDependency} */ (dependency);
116
116
  const block = /** @type {AsyncDependenciesBlock} */ (
117
117
  moduleGraph.getParentBlock(dependency)
@@ -138,6 +138,17 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
138
138
  dep.range[1] - 1,
139
139
  dep.options.needNewUrl ? `new URL(${workerImportStr})` : workerImportStr
140
140
  );
141
+
142
+ // `Worker` is global only on the web, so route node (universal or node-only) through `worker_threads`
143
+ const { platform } = runtimeTemplate.compilation.compiler;
144
+ const ctorRange = dep.options.workerConstructorRange;
145
+ if (
146
+ ctorRange &&
147
+ (runtimeTemplate.isUniversalTarget() || (platform.node && !platform.web))
148
+ ) {
149
+ runtimeRequirements.add(RuntimeGlobals.worker);
150
+ source.replace(ctorRange[0], ctorRange[1] - 1, RuntimeGlobals.worker);
151
+ }
141
152
  }
142
153
  };
143
154
 
@@ -77,9 +77,13 @@ class WorkerPlugin {
77
77
  * @param {WorkerPublicPath=} workerPublicPath worker public path
78
78
  */
79
79
  constructor(chunkLoading, wasmLoading, module, workerPublicPath) {
80
+ /** @type {ChunkLoading | undefined} */
80
81
  this._chunkLoading = chunkLoading;
82
+ /** @type {WasmLoading | undefined} */
81
83
  this._wasmLoading = wasmLoading;
84
+ /** @type {boolean | undefined} */
82
85
  this._module = module;
86
+ /** @type {string | undefined} */
83
87
  this._workerPublicPath = workerPublicPath;
84
88
  }
85
89
 
@@ -255,9 +259,10 @@ class WorkerPlugin {
255
259
  /**
256
260
  * Returns true when handled.
257
261
  * @param {CallExpression} expr expression
262
+ * @param {boolean=} isGlobalWorker matched the global `new Worker()` syntax (eligible for universal rewrite)
258
263
  * @returns {boolean | void} true when handled
259
264
  */
260
- const handleNewWorker = (expr) => {
265
+ const handleNewWorker = (expr, isGlobalWorker = false) => {
261
266
  if (expr.arguments.length === 0 || expr.arguments.length > 2) {
262
267
  return;
263
268
  }
@@ -349,10 +354,24 @@ class WorkerPlugin {
349
354
  )
350
355
  );
351
356
  } else {
352
- Object.assign(
353
- entryOptions,
354
- importOptions.webpackEntryOptions
355
- );
357
+ // `webpackEntryOptions` is user input from a magic
358
+ // comment, so copy only safe own keys to avoid
359
+ // prototype pollution via `__proto__`/`constructor`/
360
+ // `prototype`.
361
+ const userEntryOptions = importOptions.webpackEntryOptions;
362
+ for (const key of Object.keys(userEntryOptions)) {
363
+ if (
364
+ key === "__proto__" ||
365
+ key === "constructor" ||
366
+ key === "prototype"
367
+ ) {
368
+ continue;
369
+ }
370
+ /** @type {EXPECTED_ANY} */
371
+ (entryOptions)[key] = /** @type {EXPECTED_ANY} */ (
372
+ userEntryOptions
373
+ )[key];
374
+ }
356
375
  }
357
376
  }
358
377
  if (importOptions.webpackChunkName !== undefined) {
@@ -398,13 +417,17 @@ class WorkerPlugin {
398
417
  entryOptions: {
399
418
  chunkLoading: this._chunkLoading,
400
419
  wasmLoading: this._wasmLoading,
401
- ...entryOptions
420
+ ...entryOptions,
421
+ worker: true
402
422
  }
403
423
  });
404
424
  block.loc = expr.loc;
405
425
  const dep = new WorkerDependency(url, range, {
406
426
  publicPath: this._workerPublicPath,
407
- needNewUrl
427
+ needNewUrl,
428
+ workerConstructorRange: isGlobalWorker
429
+ ? /** @type {Range} */ (expr.callee.range)
430
+ : undefined
408
431
  });
409
432
  dep.loc = /** @type {DependencyLocation} */ (expr.loc);
410
433
  block.addDependency(dep);
@@ -440,12 +463,15 @@ class WorkerPlugin {
440
463
  parser.state.module.addPresentationalDependency(dep);
441
464
  }
442
465
  } else if (insertType === "spread") {
466
+ const type = this._module ? '"module"' : "undefined";
467
+ // `{ ...(opts), type }` is equivalent to `Object.assign({}, opts, { type })`
468
+ const useSpread = compilation.outputOptions.environment.spread;
443
469
  const dep1 = new ConstDependency(
444
- "Object.assign({}, ",
470
+ useSpread ? "{ ...(" : "Object.assign({}, ",
445
471
  /** @type {Range} */ (insertLocation)[0]
446
472
  );
447
473
  const dep2 = new ConstDependency(
448
- `, { type: ${this._module ? '"module"' : "undefined"} })`,
474
+ useSpread ? `), type: ${type} }` : `, { type: ${type} })`,
449
475
  /** @type {Range} */ (insertLocation)[1]
450
476
  );
451
477
  dep1.loc = /** @type {DependencyLocation} */ (expr.loc);
@@ -545,7 +571,11 @@ class WorkerPlugin {
545
571
  return handleNewWorker(expr);
546
572
  });
547
573
  } else {
548
- parser.hooks.new.for(item).tap(PLUGIN_NAME, handleNewWorker);
574
+ parser.hooks.new
575
+ .for(item)
576
+ .tap(PLUGIN_NAME, (expr) =>
577
+ handleNewWorker(expr, item === "Worker")
578
+ );
549
579
  }
550
580
  }
551
581
  };
@@ -18,7 +18,7 @@ const { UsageState } = require("../ExportsInfo");
18
18
  * @param {string[]} prefix export prefix
19
19
  * @param {ExportInfo=} exportInfo the export info
20
20
  * @param {boolean} defaultPointsToSelf when true, using default will reference itself
21
- * @param {Set<ExportInfo>} alreadyVisited already visited export info (to handle circular reexports)
21
+ * @param {Set<ExportInfo>=} alreadyVisited already visited export info (to handle circular reexports)
22
22
  */
23
23
  const processExportInfo = (
24
24
  runtime,
@@ -26,7 +26,7 @@ const processExportInfo = (
26
26
  prefix,
27
27
  exportInfo,
28
28
  defaultPointsToSelf = false,
29
- alreadyVisited = new Set()
29
+ alreadyVisited = undefined
30
30
  ) => {
31
31
  if (!exportInfo) {
32
32
  referencedExports.push(prefix);
@@ -34,35 +34,37 @@ const processExportInfo = (
34
34
  }
35
35
  const used = exportInfo.getUsed(runtime);
36
36
  if (used === UsageState.Unused) return;
37
- if (alreadyVisited.has(exportInfo)) {
37
+ if (alreadyVisited !== undefined && alreadyVisited.has(exportInfo)) {
38
38
  referencedExports.push(prefix);
39
39
  return;
40
40
  }
41
- alreadyVisited.add(exportInfo);
41
+ // Terminal case: not recursing, so no need to track visited here
42
42
  if (
43
43
  used !== UsageState.OnlyPropertiesUsed ||
44
44
  !exportInfo.exportsInfo ||
45
45
  exportInfo.exportsInfo.otherExportsInfo.getUsed(runtime) !==
46
46
  UsageState.Unused
47
47
  ) {
48
- alreadyVisited.delete(exportInfo);
49
48
  referencedExports.push(prefix);
50
49
  return;
51
50
  }
51
+ // Only the recursive path needs the visited set; allocate it lazily
52
+ const visited = alreadyVisited !== undefined ? alreadyVisited : new Set();
53
+ visited.add(exportInfo);
52
54
  const exportsInfo = exportInfo.exportsInfo;
53
- for (const exportInfo of exportsInfo.orderedExports) {
55
+ for (const childExportInfo of exportsInfo.orderedExports) {
54
56
  processExportInfo(
55
57
  runtime,
56
58
  referencedExports,
57
- defaultPointsToSelf && exportInfo.name === "default"
59
+ defaultPointsToSelf && childExportInfo.name === "default"
58
60
  ? prefix
59
- : [...prefix, exportInfo.name],
60
- exportInfo,
61
+ : [...prefix, childExportInfo.name],
62
+ childExportInfo,
61
63
  false,
62
- alreadyVisited
64
+ visited
63
65
  );
64
66
  }
65
- alreadyVisited.delete(exportInfo);
67
+ visited.delete(exportInfo);
66
68
  };
67
69
 
68
70
  module.exports = processExportInfo;
@@ -36,8 +36,8 @@ const makeSerializable = require("../util/makeSerializable");
36
36
  /** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
37
37
  /** @typedef {import("../RequestShortener")} RequestShortener */
38
38
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
39
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
40
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
39
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[DelegatedModuleSourceRequest, DelegatedModuleData, DelegatedModuleType, string, string | Module]>} ObjectDeserializerContext */
40
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[DelegatedModuleSourceRequest, DelegatedModuleData, DelegatedModuleType, string, string | Module]>} ObjectSerializerContext */
41
41
  /** @typedef {import("../dependencies/StaticExportsDependency").Exports} Exports */
42
42
  /** @typedef {import("../util/Hash")} Hash */
43
43
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
@@ -72,11 +72,17 @@ class DelegatedModule extends Module {
72
72
  super(JAVASCRIPT_MODULE_TYPE_DYNAMIC, null);
73
73
 
74
74
  // Info from Factory
75
+ /** @type {string} */
75
76
  this.sourceRequest = sourceRequest;
77
+ /** @type {ModuleId} */
76
78
  this.request = data.id;
79
+ /** @type {DelegatedModuleType} */
77
80
  this.delegationType = type;
81
+ /** @type {string} */
78
82
  this.userRequest = userRequest;
83
+ /** @type {string | Module} */
79
84
  this.originalRequest = originalRequest;
85
+ /** @type {DelegatedModuleData} */
80
86
  this.delegateData = data;
81
87
 
82
88
  // Build info
@@ -232,13 +238,13 @@ class DelegatedModule extends Module {
232
238
  * @param {ObjectSerializerContext} context context
233
239
  */
234
240
  serialize(context) {
235
- const { write } = context;
236
241
  // constructor
237
- write(this.sourceRequest);
238
- write(this.delegateData);
239
- write(this.delegationType);
240
- write(this.userRequest);
241
- write(this.originalRequest);
242
+ context
243
+ .write(this.sourceRequest)
244
+ .write(this.delegateData)
245
+ .write(this.delegationType)
246
+ .write(this.userRequest)
247
+ .write(this.originalRequest);
242
248
  super.serialize(context);
243
249
  }
244
250
 
@@ -248,15 +254,23 @@ class DelegatedModule extends Module {
248
254
  * @returns {DelegatedModule} DelegatedModule
249
255
  */
250
256
  static deserialize(context) {
251
- const { read } = context;
257
+ const sourceRequest = context.read();
258
+ const c1 = context.rest;
259
+ const delegateData = c1.read();
260
+ const c2 = c1.rest;
261
+ const delegationType = c2.read();
262
+ const c3 = c2.rest;
263
+ const userRequest = c3.read();
264
+ const c4 = c3.rest;
265
+ const originalRequest = c4.read();
252
266
  const obj = new DelegatedModule(
253
- read(), // sourceRequest
254
- read(), // delegateData
255
- read(), // delegationType
256
- read(), // userRequest
257
- read() // originalRequest
267
+ sourceRequest,
268
+ delegateData,
269
+ delegationType,
270
+ userRequest,
271
+ originalRequest
258
272
  );
259
- obj.deserialize(context);
273
+ obj.deserialize(c4.rest);
260
274
  return obj;
261
275
  }
262
276
 
@@ -35,6 +35,7 @@ class DelegatedModuleFactoryPlugin {
35
35
  * @param {Options} options options
36
36
  */
37
37
  constructor(options) {
38
+ /** @type {Options} */
38
39
  this.options = options;
39
40
  options.type = options.type || "require";
40
41
  options.extensions = options.extensions || ["", ".js", ".json", ".wasm"];
@@ -19,6 +19,7 @@ class DelegatedPlugin {
19
19
  * @param {Options} options options
20
20
  */
21
21
  constructor(options) {
22
+ /** @type {Options} */
22
23
  this.options = options;
23
24
  }
24
25
 
@@ -25,8 +25,11 @@ class DllEntryPlugin {
25
25
  * @param {Options} options options
26
26
  */
27
27
  constructor(context, entries, options) {
28
+ /** @type {string} */
28
29
  this.context = context;
30
+ /** @type {Entries} */
29
31
  this.entries = entries;
32
+ /** @type {Options} */
30
33
  this.options = options;
31
34
  }
32
35
 
@@ -28,8 +28,8 @@ const makeSerializable = require("../util/makeSerializable");
28
28
  /** @typedef {import("../Module").Sources} Sources */
29
29
  /** @typedef {import("../RequestShortener")} RequestShortener */
30
30
  /** @typedef {import("../ResolverFactory").ResolverWithOptions} ResolverWithOptions */
31
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
32
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
31
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[string]>} ObjectDeserializerContext */
32
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[string]>} ObjectSerializerContext */
33
33
  /** @typedef {import("../util/Hash")} Hash */
34
34
  /** @typedef {import("../util/fs").InputFileSystem} InputFileSystem */
35
35
 
@@ -51,6 +51,7 @@ class DllModule extends Module {
51
51
  // Info from Factory
52
52
  /** @type {Dependency[]} */
53
53
  this.dependencies = dependencies;
54
+ /** @type {string} */
54
55
  this.name = name;
55
56
  }
56
57
 
@@ -11,6 +11,7 @@ const LibManifestPlugin = require("./LibManifestPlugin");
11
11
 
12
12
  /** @typedef {import("../../declarations/plugins/dll/DllPlugin").DllPluginOptions} DllPluginOptions */
13
13
  /** @typedef {import("../Compiler")} Compiler */
14
+ /** @typedef {import("../Module").FactoryMeta} FactoryMeta */
14
15
  /** @typedef {import("./DllEntryPlugin").Entries} Entries */
15
16
  /** @typedef {import("./DllEntryPlugin").Options} Options */
16
17
 
@@ -68,6 +69,21 @@ class DllPlugin {
68
69
  new LibManifestPlugin({ ...this.options, entryOnly }).apply(compiler);
69
70
  if (!entryOnly) {
70
71
  new FlagAllModulesAsUsedPlugin(PLUGIN_NAME).apply(compiler);
72
+ compiler.hooks.compilation.tap(
73
+ PLUGIN_NAME,
74
+ (_compilation, { normalModuleFactory }) => {
75
+ normalModuleFactory.hooks.module.tap(
76
+ { name: PLUGIN_NAME, stage: 10 },
77
+ (module) => {
78
+ if (module.factoryMeta === undefined) {
79
+ module.factoryMeta = {};
80
+ }
81
+ module.factoryMeta.sideEffectFree = false;
82
+ return module;
83
+ }
84
+ );
85
+ }
86
+ );
71
87
  }
72
88
  }
73
89
  }
@@ -30,6 +30,7 @@ class DllReferencePlugin {
30
30
  * @param {DllReferencePluginOptions} options options object
31
31
  */
32
32
  constructor(options) {
33
+ /** @type {DllReferencePluginOptions} */
33
34
  this.options = options;
34
35
  }
35
36
 
@@ -188,7 +189,9 @@ class DllManifestError extends WebpackError {
188
189
  constructor(filename, message) {
189
190
  super();
190
191
 
192
+ /** @type {string} */
191
193
  this.name = "DllManifestError";
194
+ /** @type {string} */
192
195
  this.message = `Dll manifest ${filename}\n${message}`;
193
196
  }
194
197
  }
@@ -44,6 +44,7 @@ class LibManifestPlugin {
44
44
  * @param {LibManifestPluginOptions} options the options
45
45
  */
46
46
  constructor(options) {
47
+ /** @type {LibManifestPluginOptions} */
47
48
  this.options = options;
48
49
  }
49
50
 
@@ -7,17 +7,22 @@
7
7
 
8
8
  const ExternalsPlugin = require("../ExternalsPlugin");
9
9
 
10
+ /** @typedef {import("../../declarations/WebpackOptions").ExternalsType} ExternalsType */
10
11
  /** @typedef {import("../Compiler")} Compiler */
12
+ /** @typedef {import("../Dependency")} Dependency */
11
13
  /** @typedef {"main" | "preload" | "renderer"} ElectronContext */
12
14
 
13
15
  class ElectronTargetPlugin {
14
16
  /**
15
17
  * Creates an instance of ElectronTargetPlugin.
16
18
  * @param {ElectronContext=} context in main, preload or renderer context?
19
+ * @param {ExternalsType=} type default external type
17
20
  */
18
- constructor(context) {
21
+ constructor(context, type = "node-commonjs") {
19
22
  /** @type {ElectronContext | undefined} */
20
23
  this._context = context;
24
+ /** @type {ExternalsType} */
25
+ this.type = type;
21
26
  }
22
27
 
23
28
  /**
@@ -26,7 +31,20 @@ class ElectronTargetPlugin {
26
31
  * @returns {void}
27
32
  */
28
33
  apply(compiler) {
29
- new ExternalsPlugin("node-commonjs", [
34
+ /**
35
+ * @param {Dependency} dependency the dependency
36
+ * @returns {ExternalsType} the external type
37
+ */
38
+ const externalType = (dependency) => {
39
+ // When `require` electron built-in modules with module output
40
+ // we should still emit `node-commonjs` for compatibility
41
+ if (dependency.category === "commonjs") {
42
+ return "node-commonjs";
43
+ }
44
+
45
+ return this.type;
46
+ };
47
+ new ExternalsPlugin(externalType, [
30
48
  "clipboard",
31
49
  "crash-reporter",
32
50
  "electron",
@@ -38,7 +56,7 @@ class ElectronTargetPlugin {
38
56
  ]).apply(compiler);
39
57
  switch (this._context) {
40
58
  case "main":
41
- new ExternalsPlugin("node-commonjs", [
59
+ new ExternalsPlugin(externalType, [
42
60
  "app",
43
61
  "auto-updater",
44
62
  "browser-window",
@@ -58,7 +76,7 @@ class ElectronTargetPlugin {
58
76
  break;
59
77
  case "preload":
60
78
  case "renderer":
61
- new ExternalsPlugin("node-commonjs", [
79
+ new ExternalsPlugin(externalType, [
62
80
  "desktop-capturer",
63
81
  "ipc-renderer",
64
82
  "remote",
@@ -13,6 +13,7 @@ class ConcurrentCompilationError extends WebpackError {
13
13
  "You ran Webpack twice. Each instance only supports a single concurrent compilation at a time."
14
14
  );
15
15
 
16
+ /** @type {string} */
16
17
  this.name = "ConcurrentCompilationError";
17
18
  }
18
19
  }
@@ -8,8 +8,8 @@
8
8
  const makeSerializable = require("../util/makeSerializable");
9
9
  const WebpackError = require("./WebpackError");
10
10
 
11
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
12
- /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
11
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<[Error, string]>} ObjectDeserializerContext */
12
+ /** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<[Error, string]>} ObjectSerializerContext */
13
13
 
14
14
  /**
15
15
  * Defines the callback callback.
@@ -29,12 +29,16 @@ class HookWebpackError extends WebpackError {
29
29
  constructor(error, hook) {
30
30
  super(error ? error.message : undefined, error ? { cause: error } : {});
31
31
 
32
+ /** @type {string} */
32
33
  this.hook = hook;
34
+ /** @type {Error} */
33
35
  this.error = error;
34
36
  /** @type {string} */
35
37
  this.name = "HookWebpackError";
38
+ /** @type {boolean} */
36
39
  this.hideStack = true;
37
40
  this.stack += `\n-- inner error --\n${error ? error.stack : ""}`;
41
+ /** @type {string} */
38
42
  this.details = `caused by plugins in ${hook}\n${error ? error.stack : ""}`;
39
43
  }
40
44
 
@@ -43,11 +47,7 @@ class HookWebpackError extends WebpackError {
43
47
  * @param {ObjectSerializerContext} context context
44
48
  */
45
49
  serialize(context) {
46
- const { write } = context;
47
-
48
- write(this.error);
49
- write(this.hook);
50
-
50
+ context.write(this.error).write(this.hook);
51
51
  super.serialize(context);
52
52
  }
53
53
 
@@ -56,12 +56,10 @@ class HookWebpackError extends WebpackError {
56
56
  * @param {ObjectDeserializerContext} context context
57
57
  */
58
58
  deserialize(context) {
59
- const { read } = context;
60
-
61
- this.error = read();
62
- this.hook = read();
63
-
64
- super.deserialize(context);
59
+ this.error = context.read();
60
+ const c1 = context.rest;
61
+ this.hook = c1.read();
62
+ super.deserialize(c1.rest);
65
63
  }
66
64
  }
67
65
 
@@ -22,6 +22,7 @@ class IgnoreErrorModuleFactory extends ModuleFactory {
22
22
  constructor(normalModuleFactory) {
23
23
  super();
24
24
 
25
+ /** @type {NormalModuleFactory} */
25
26
  this.normalModuleFactory = normalModuleFactory;
26
27
  }
27
28
 
@@ -32,7 +32,9 @@ ${depsList.slice(0, 3).join("\n")}${
32
32
 
33
33
  /** @type {string} */
34
34
  this.name = "InvalidDependenciesModuleWarning";
35
+ /** @type {string} */
35
36
  this.details = depsList.slice(3).join("\n");
37
+ /** @type {Module} */
36
38
  this.module = module;
37
39
  }
38
40
  }