webpack 5.92.1 → 5.94.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 (350) hide show
  1. package/README.md +8 -5
  2. package/bin/webpack.js +6 -7
  3. package/hot/log.js +1 -2
  4. package/hot/only-dev-server.js +1 -1
  5. package/hot/poll.js +1 -1
  6. package/hot/signal.js +1 -1
  7. package/lib/APIPlugin.js +4 -3
  8. package/lib/AbstractMethodError.js +10 -5
  9. package/lib/AutomaticPrefetchPlugin.js +1 -1
  10. package/lib/BannerPlugin.js +12 -6
  11. package/lib/Cache.js +8 -10
  12. package/lib/CacheFacade.js +3 -3
  13. package/lib/CaseSensitiveModulesWarning.js +5 -7
  14. package/lib/Chunk.js +14 -11
  15. package/lib/ChunkGraph.js +58 -36
  16. package/lib/ChunkGroup.js +2 -3
  17. package/lib/ChunkTemplate.js +43 -0
  18. package/lib/CleanPlugin.js +10 -11
  19. package/lib/CodeGenerationResults.js +6 -5
  20. package/lib/CommentCompilationWarning.js +0 -1
  21. package/lib/Compilation.js +223 -191
  22. package/lib/Compiler.js +81 -82
  23. package/lib/ConcatenationScope.js +3 -6
  24. package/lib/ConditionalInitFragment.js +6 -7
  25. package/lib/ConstPlugin.js +7 -15
  26. package/lib/ContextExclusionPlugin.js +3 -3
  27. package/lib/ContextModule.js +36 -21
  28. package/lib/ContextModuleFactory.js +89 -44
  29. package/lib/ContextReplacementPlugin.js +10 -9
  30. package/lib/DefinePlugin.js +76 -69
  31. package/lib/DelegatedModule.js +7 -3
  32. package/lib/DelegatedModuleFactoryPlugin.js +36 -22
  33. package/lib/DelegatedPlugin.js +4 -0
  34. package/lib/DependenciesBlock.js +0 -1
  35. package/lib/Dependency.js +10 -14
  36. package/lib/DllEntryPlugin.js +4 -2
  37. package/lib/DllModuleFactory.js +1 -0
  38. package/lib/DllPlugin.js +9 -7
  39. package/lib/DllReferencePlugin.js +30 -15
  40. package/lib/EntryPlugin.js +1 -3
  41. package/lib/EnvironmentPlugin.js +5 -2
  42. package/lib/ErrorHelpers.js +11 -12
  43. package/lib/EvalDevToolModulePlugin.js +10 -12
  44. package/lib/EvalSourceMapDevToolPlugin.js +15 -13
  45. package/lib/ExportsInfo.js +185 -120
  46. package/lib/ExternalModule.js +104 -64
  47. package/lib/ExternalModuleFactoryPlugin.js +23 -10
  48. package/lib/FileSystemInfo.js +791 -422
  49. package/lib/FlagAllModulesAsUsedPlugin.js +1 -1
  50. package/lib/FlagDependencyExportsPlugin.js +12 -11
  51. package/lib/FlagDependencyUsagePlugin.js +1 -1
  52. package/lib/Generator.js +2 -5
  53. package/lib/GraphHelpers.js +3 -2
  54. package/lib/HookWebpackError.js +8 -10
  55. package/lib/HotModuleReplacementPlugin.js +78 -64
  56. package/lib/IgnoreErrorModuleFactory.js +3 -3
  57. package/lib/IgnorePlugin.js +1 -3
  58. package/lib/IgnoreWarningsPlugin.js +6 -9
  59. package/lib/InitFragment.js +2 -3
  60. package/lib/LibManifestPlugin.js +4 -3
  61. package/lib/MainTemplate.js +72 -19
  62. package/lib/Module.js +25 -9
  63. package/lib/ModuleBuildError.js +4 -11
  64. package/lib/ModuleDependencyError.js +5 -5
  65. package/lib/ModuleDependencyWarning.js +5 -5
  66. package/lib/ModuleError.js +1 -5
  67. package/lib/ModuleFilenameHelpers.js +29 -46
  68. package/lib/ModuleGraph.js +7 -6
  69. package/lib/ModuleGraphConnection.js +6 -6
  70. package/lib/ModuleInfoHeaderPlugin.js +82 -30
  71. package/lib/ModuleParseError.js +8 -9
  72. package/lib/ModuleRestoreError.js +1 -1
  73. package/lib/ModuleStoreError.js +1 -1
  74. package/lib/ModuleTemplate.js +33 -1
  75. package/lib/ModuleTypeConstants.js +21 -22
  76. package/lib/ModuleWarning.js +1 -5
  77. package/lib/MultiCompiler.js +24 -26
  78. package/lib/MultiStats.js +73 -31
  79. package/lib/MultiWatching.js +1 -1
  80. package/lib/NormalModule.js +132 -70
  81. package/lib/NormalModuleFactory.js +53 -49
  82. package/lib/OptimizationStages.js +3 -3
  83. package/lib/ProgressPlugin.js +9 -9
  84. package/lib/ProvidePlugin.js +4 -4
  85. package/lib/RuntimeGlobals.js +71 -70
  86. package/lib/RuntimeModule.js +1 -1
  87. package/lib/RuntimePlugin.js +24 -12
  88. package/lib/RuntimeTemplate.js +40 -44
  89. package/lib/SizeFormatHelpers.js +2 -4
  90. package/lib/SourceMapDevToolPlugin.js +42 -34
  91. package/lib/Stats.js +5 -11
  92. package/lib/Template.js +18 -24
  93. package/lib/TemplatedPathPlugin.js +12 -10
  94. package/lib/UseStrictPlugin.js +8 -1
  95. package/lib/WarnDeprecatedOptionPlugin.js +0 -1
  96. package/lib/WatchIgnorePlugin.js +26 -9
  97. package/lib/Watching.js +10 -5
  98. package/lib/WebpackOptionsApply.js +89 -62
  99. package/lib/asset/AssetGenerator.js +107 -42
  100. package/lib/asset/AssetModulesPlugin.js +29 -23
  101. package/lib/asset/AssetSourceGenerator.js +2 -7
  102. package/lib/async-modules/AwaitDependenciesInitFragment.js +6 -7
  103. package/lib/buildChunkGraph.js +14 -19
  104. package/lib/cache/IdleFileCachePlugin.js +4 -4
  105. package/lib/cache/MemoryWithGcCachePlugin.js +5 -5
  106. package/lib/cache/PackFileCacheStrategy.js +51 -50
  107. package/lib/cache/ResolverCachePlugin.js +6 -6
  108. package/lib/cache/mergeEtags.js +16 -21
  109. package/lib/cli.js +148 -104
  110. package/lib/config/browserslistTargetHandler.js +16 -13
  111. package/lib/config/defaults.js +31 -28
  112. package/lib/config/normalization.js +335 -344
  113. package/lib/config/target.js +42 -52
  114. package/lib/container/ContainerEntryModule.js +2 -2
  115. package/lib/container/ContainerPlugin.js +1 -1
  116. package/lib/container/RemoteRuntimeModule.js +11 -8
  117. package/lib/container/options.js +18 -4
  118. package/lib/css/CssExportsGenerator.js +39 -40
  119. package/lib/css/CssGenerator.js +11 -14
  120. package/lib/css/CssLoadingRuntimeModule.js +10 -10
  121. package/lib/css/CssModulesPlugin.js +127 -47
  122. package/lib/css/CssParser.js +20 -18
  123. package/lib/css/walkCssTokens.js +80 -95
  124. package/lib/debug/ProfilingPlugin.js +19 -20
  125. package/lib/dependencies/AMDDefineDependency.js +1 -1
  126. package/lib/dependencies/AMDDefineDependencyParserPlugin.js +83 -47
  127. package/lib/dependencies/AMDRequireArrayDependency.js +9 -10
  128. package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +22 -16
  129. package/lib/dependencies/AMDRuntimeModules.js +2 -2
  130. package/lib/dependencies/CommonJsDependencyHelpers.js +6 -2
  131. package/lib/dependencies/CommonJsExportRequireDependency.js +37 -41
  132. package/lib/dependencies/CommonJsExportsDependency.js +0 -1
  133. package/lib/dependencies/CommonJsExportsParserPlugin.js +19 -23
  134. package/lib/dependencies/CommonJsFullRequireDependency.js +1 -1
  135. package/lib/dependencies/CommonJsImportsParserPlugin.js +52 -61
  136. package/lib/dependencies/CommonJsSelfReferenceDependency.js +6 -8
  137. package/lib/dependencies/ConstDependency.js +1 -1
  138. package/lib/dependencies/ContextDependency.js +1 -1
  139. package/lib/dependencies/ContextDependencyHelpers.js +31 -34
  140. package/lib/dependencies/ContextElementDependency.js +2 -2
  141. package/lib/dependencies/CriticalDependencyWarning.js +1 -1
  142. package/lib/dependencies/CssExportDependency.js +72 -9
  143. package/lib/dependencies/CssImportDependency.js +0 -2
  144. package/lib/dependencies/CssLocalIdentifierDependency.js +68 -21
  145. package/lib/dependencies/CssSelfLocalIdentifierDependency.js +2 -1
  146. package/lib/dependencies/CssUrlDependency.js +4 -5
  147. package/lib/dependencies/DynamicExports.js +5 -5
  148. package/lib/dependencies/ExportsInfoDependency.js +1 -2
  149. package/lib/dependencies/HarmonyAcceptImportDependency.js +1 -1
  150. package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +4 -5
  151. package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +27 -16
  152. package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
  153. package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +107 -64
  154. package/lib/dependencies/HarmonyExports.js +2 -2
  155. package/lib/dependencies/HarmonyImportDependency.js +2 -4
  156. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +19 -4
  157. package/lib/dependencies/HarmonyImportSpecifierDependency.js +41 -16
  158. package/lib/dependencies/ImportDependency.js +1 -1
  159. package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +5 -5
  160. package/lib/dependencies/ImportMetaPlugin.js +11 -13
  161. package/lib/dependencies/ImportParserPlugin.js +39 -44
  162. package/lib/dependencies/JsonExportsDependency.js +22 -18
  163. package/lib/dependencies/LoaderPlugin.js +47 -36
  164. package/lib/dependencies/LocalModule.js +1 -1
  165. package/lib/dependencies/LocalModulesHelpers.js +4 -4
  166. package/lib/dependencies/ModuleDecoratorDependency.js +1 -1
  167. package/lib/dependencies/ProvidedDependency.js +1 -1
  168. package/lib/dependencies/PureExpressionDependency.js +6 -6
  169. package/lib/dependencies/RequireContextDependencyParserPlugin.js +1 -1
  170. package/lib/dependencies/RuntimeRequirementsDependency.js +1 -1
  171. package/lib/dependencies/SystemPlugin.js +1 -1
  172. package/lib/dependencies/URLDependency.js +3 -3
  173. package/lib/dependencies/URLPlugin.js +66 -12
  174. package/lib/dependencies/WorkerPlugin.js +25 -24
  175. package/lib/dependencies/processExportInfo.js +3 -1
  176. package/lib/electron/ElectronTargetPlugin.js +1 -0
  177. package/lib/esm/ModuleChunkFormatPlugin.js +11 -12
  178. package/lib/esm/ModuleChunkLoadingRuntimeModule.js +7 -3
  179. package/lib/formatLocation.js +1 -2
  180. package/lib/hmr/HotModuleReplacement.runtime.js +4 -5
  181. package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -0
  182. package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +9 -12
  183. package/lib/hmr/LazyCompilationPlugin.js +27 -12
  184. package/lib/hmr/lazyCompilationBackend.js +64 -40
  185. package/lib/ids/ChunkModuleIdRangePlugin.js +1 -3
  186. package/lib/ids/DeterministicChunkIdsPlugin.js +2 -4
  187. package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
  188. package/lib/ids/HashedModuleIdsPlugin.js +5 -1
  189. package/lib/ids/IdHelpers.js +29 -39
  190. package/lib/ids/SyncModuleIdsPlugin.js +7 -2
  191. package/lib/index.js +1 -5
  192. package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +6 -4
  193. package/lib/javascript/BasicEvaluatedExpression.js +4 -19
  194. package/lib/javascript/ChunkHelpers.js +1 -1
  195. package/lib/javascript/CommonJsChunkFormatPlugin.js +10 -11
  196. package/lib/javascript/EnableChunkLoadingPlugin.js +7 -6
  197. package/lib/javascript/JavascriptGenerator.js +23 -7
  198. package/lib/javascript/JavascriptModulesPlugin.js +97 -70
  199. package/lib/javascript/JavascriptParser.js +179 -200
  200. package/lib/javascript/JavascriptParserHelpers.js +20 -21
  201. package/lib/javascript/StartupHelpers.js +41 -13
  202. package/lib/json/JsonGenerator.js +7 -13
  203. package/lib/json/JsonModulesPlugin.js +1 -4
  204. package/lib/json/JsonParser.js +5 -3
  205. package/lib/library/AmdLibraryPlugin.js +12 -16
  206. package/lib/library/AssignLibraryPlugin.js +9 -11
  207. package/lib/library/EnableLibraryPlugin.js +25 -15
  208. package/lib/library/ExportPropertyLibraryPlugin.js +8 -2
  209. package/lib/library/JsonpLibraryPlugin.js +2 -1
  210. package/lib/library/ModernModuleLibraryPlugin.js +144 -0
  211. package/lib/library/ModuleLibraryPlugin.js +2 -1
  212. package/lib/library/SystemLibraryPlugin.js +2 -1
  213. package/lib/library/UmdLibraryPlugin.js +66 -92
  214. package/lib/logging/Logger.js +32 -4
  215. package/lib/logging/createConsoleLogger.js +12 -13
  216. package/lib/logging/runtime.js +7 -8
  217. package/lib/logging/truncateArgs.js +5 -8
  218. package/lib/node/NodeWatchFileSystem.js +3 -18
  219. package/lib/node/ReadFileChunkLoadingRuntimeModule.js +2 -2
  220. package/lib/node/ReadFileCompileAsyncWasmPlugin.js +1 -0
  221. package/lib/node/RequireChunkLoadingRuntimeModule.js +2 -2
  222. package/lib/node/nodeConsole.js +22 -22
  223. package/lib/optimize/AggressiveMergingPlugin.js +2 -4
  224. package/lib/optimize/AggressiveSplittingPlugin.js +16 -19
  225. package/lib/optimize/ConcatenatedModule.js +144 -61
  226. package/lib/optimize/EnsureChunkConditionsPlugin.js +1 -1
  227. package/lib/optimize/FlagIncludedChunksPlugin.js +3 -3
  228. package/lib/optimize/InnerGraph.js +17 -17
  229. package/lib/optimize/InnerGraphPlugin.js +8 -7
  230. package/lib/optimize/LimitChunkCountPlugin.js +2 -3
  231. package/lib/optimize/MangleExportsPlugin.js +1 -0
  232. package/lib/optimize/MinMaxSizeWarning.js +1 -1
  233. package/lib/optimize/ModuleConcatenationPlugin.js +56 -78
  234. package/lib/optimize/RealContentHashPlugin.js +7 -10
  235. package/lib/optimize/RemoveParentModulesPlugin.js +3 -3
  236. package/lib/optimize/SideEffectsFlagPlugin.js +6 -2
  237. package/lib/optimize/SplitChunksPlugin.js +34 -30
  238. package/lib/performance/SizeLimitsPlugin.js +2 -2
  239. package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -0
  240. package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +1 -1
  241. package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +1 -1
  242. package/lib/rules/BasicEffectRulePlugin.js +3 -1
  243. package/lib/rules/BasicMatcherRulePlugin.js +3 -1
  244. package/lib/rules/ObjectMatcherRulePlugin.js +4 -1
  245. package/lib/rules/RuleSetCompiler.js +41 -22
  246. package/lib/rules/UseEffectRulePlugin.js +36 -32
  247. package/lib/runtime/AsyncModuleRuntimeModule.js +1 -1
  248. package/lib/runtime/AutoPublicPathRuntimeModule.js +8 -3
  249. package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
  250. package/lib/runtime/DefinePropertyGettersRuntimeModule.js +1 -1
  251. package/lib/runtime/EnsureChunkRuntimeModule.js +10 -11
  252. package/lib/runtime/GetChunkFilenameRuntimeModule.js +11 -17
  253. package/lib/runtime/LoadScriptRuntimeModule.js +17 -18
  254. package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +1 -3
  255. package/lib/schemes/DataUriPlugin.js +1 -1
  256. package/lib/schemes/HttpUriPlugin.js +241 -126
  257. package/lib/serialization/BinaryMiddleware.js +44 -28
  258. package/lib/serialization/DateObjectSerializer.js +1 -0
  259. package/lib/serialization/ErrorObjectSerializer.js +2 -0
  260. package/lib/serialization/FileMiddleware.js +154 -106
  261. package/lib/serialization/MapObjectSerializer.js +2 -1
  262. package/lib/serialization/NullPrototypeObjectSerializer.js +3 -2
  263. package/lib/serialization/ObjectMiddleware.js +52 -56
  264. package/lib/serialization/PlainObjectSerializer.js +32 -6
  265. package/lib/serialization/RegExpObjectSerializer.js +1 -0
  266. package/lib/serialization/Serializer.js +4 -5
  267. package/lib/serialization/SerializerMiddleware.js +6 -6
  268. package/lib/serialization/SetObjectSerializer.js +2 -1
  269. package/lib/sharing/ConsumeSharedModule.js +19 -14
  270. package/lib/sharing/ConsumeSharedPlugin.js +116 -97
  271. package/lib/sharing/ConsumeSharedRuntimeModule.js +108 -141
  272. package/lib/sharing/ProvideForSharedDependency.js +0 -1
  273. package/lib/sharing/ProvideSharedPlugin.js +2 -2
  274. package/lib/sharing/resolveMatchedConfigs.js +2 -1
  275. package/lib/sharing/utils.js +15 -27
  276. package/lib/stats/DefaultStatsFactoryPlugin.js +424 -281
  277. package/lib/stats/DefaultStatsPresetPlugin.js +73 -18
  278. package/lib/stats/DefaultStatsPrinterPlugin.js +370 -101
  279. package/lib/stats/StatsFactory.js +127 -56
  280. package/lib/stats/StatsPrinter.js +75 -44
  281. package/lib/util/ArrayHelpers.js +8 -4
  282. package/lib/util/ArrayQueue.js +1 -1
  283. package/lib/util/AsyncQueue.js +31 -12
  284. package/lib/util/IterableHelpers.js +3 -4
  285. package/lib/util/LazyBucketSortedSet.js +60 -44
  286. package/lib/util/LazySet.js +1 -0
  287. package/lib/util/MapHelpers.js +1 -3
  288. package/lib/util/ParallelismFactorCalculator.js +1 -1
  289. package/lib/util/Queue.js +1 -1
  290. package/lib/util/Semaphore.js +4 -7
  291. package/lib/util/SetHelpers.js +5 -5
  292. package/lib/util/SortableSet.js +4 -3
  293. package/lib/util/StackedCacheMap.js +4 -6
  294. package/lib/util/StackedMap.js +1 -3
  295. package/lib/util/StringXor.js +0 -5
  296. package/lib/util/TupleQueue.js +1 -1
  297. package/lib/util/TupleSet.js +15 -5
  298. package/lib/util/URLAbsoluteSpecifier.js +7 -7
  299. package/lib/util/WeakTupleMap.js +19 -21
  300. package/lib/util/binarySearchBounds.js +5 -12
  301. package/lib/util/chainedImports.js +1 -1
  302. package/lib/util/cleverMerge.js +21 -19
  303. package/lib/util/comparators.js +57 -52
  304. package/lib/util/compileBooleanMatcher.js +3 -6
  305. package/lib/util/conventions.js +10 -13
  306. package/lib/util/createHash.js +9 -6
  307. package/lib/util/deprecation.js +22 -12
  308. package/lib/util/deterministicGrouping.js +19 -26
  309. package/lib/util/findGraphRoots.js +2 -2
  310. package/lib/util/fs.js +31 -31
  311. package/lib/util/hash/md4.js +2 -2
  312. package/lib/util/hash/wasm-hash.js +7 -7
  313. package/lib/util/hash/xxhash64.js +2 -2
  314. package/lib/util/identifier.js +81 -59
  315. package/lib/util/memoize.js +8 -10
  316. package/lib/util/mergeScope.js +6 -9
  317. package/lib/util/nonNumericOnlyHash.js +2 -2
  318. package/lib/util/numberHash.js +1 -6
  319. package/lib/util/objectToMap.js +0 -1
  320. package/lib/util/propertyAccess.js +2 -5
  321. package/lib/util/propertyName.js +1 -3
  322. package/lib/util/registerExternalSerializer.js +1 -1
  323. package/lib/util/runtime.js +103 -113
  324. package/lib/util/semver.js +29 -27
  325. package/lib/util/serialization.js +16 -1
  326. package/lib/util/smartGrouping.js +5 -5
  327. package/lib/util/source.js +1 -1
  328. package/lib/wasm/EnableWasmLoadingPlugin.js +5 -4
  329. package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +3 -3
  330. package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +5 -6
  331. package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +3 -3
  332. package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +20 -19
  333. package/lib/wasm-sync/WebAssemblyGenerator.js +14 -29
  334. package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
  335. package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
  336. package/lib/web/JsonpChunkLoadingRuntimeModule.js +2 -3
  337. package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -1
  338. package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +1 -1
  339. package/package.json +17 -16
  340. package/schemas/WebpackOptions.check.js +1 -1
  341. package/schemas/WebpackOptions.json +17 -0
  342. package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
  343. package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
  344. package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
  345. package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
  346. package/schemas/plugins/container/ContainerReferencePlugin.json +1 -0
  347. package/schemas/plugins/container/ExternalsType.check.js +1 -1
  348. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  349. package/schemas/plugins/container/ModuleFederationPlugin.json +1 -0
  350. package/types.d.ts +682 -347
@@ -137,8 +137,9 @@ jsTypes.set(TypeError, new ErrorObjectSerializer(TypeError));
137
137
  // If in a sandboxed environment (e. g. jest), this escapes the sandbox and registers
138
138
  // real Object and Array types to. These types may occur in the wild too, e. g. when
139
139
  // using Structured Clone in postMessage.
140
+ // eslint-disable-next-line n/exports-style
140
141
  if (exports.constructor !== Object) {
141
- // eslint-disable-next-line jsdoc/check-types
142
+ // eslint-disable-next-line jsdoc/check-types, n/exports-style
142
143
  const Obj = /** @type {typeof Object} */ (exports.constructor);
143
144
  const Fn = /** @type {typeof Function} */ (Obj.constructor);
144
145
  for (const [type, config] of Array.from(jsTypes)) {
@@ -185,6 +186,7 @@ class ObjectMiddleware extends SerializerMiddleware {
185
186
  this.extendContext = extendContext;
186
187
  this._hashFunction = hashFunction;
187
188
  }
189
+
188
190
  /**
189
191
  * @param {RegExp} regExp RegExp for which the request is tested
190
192
  * @param {function(string): boolean} loader loader to load the request, returns true when successful
@@ -202,7 +204,7 @@ class ObjectMiddleware extends SerializerMiddleware {
202
204
  * @returns {void}
203
205
  */
204
206
  static register(Constructor, request, name, serializer) {
205
- const key = request + "/" + name;
207
+ const key = `${request}/${name}`;
206
208
 
207
209
  if (serializers.has(Constructor)) {
208
210
  throw new Error(
@@ -267,7 +269,7 @@ class ObjectMiddleware extends SerializerMiddleware {
267
269
  * @returns {ObjectSerializer} serializer
268
270
  */
269
271
  static getDeserializerFor(request, name) {
270
- const key = request + "/" + name;
272
+ const key = `${request}/${name}`;
271
273
  const serializer = serializerInversed.get(key);
272
274
 
273
275
  if (serializer === undefined) {
@@ -283,7 +285,7 @@ class ObjectMiddleware extends SerializerMiddleware {
283
285
  * @returns {ObjectSerializer} serializer
284
286
  */
285
287
  static _getDeserializerForWithoutError(request, name) {
286
- const key = request + "/" + name;
288
+ const key = `${request}/${name}`;
287
289
  const serializer = serializerInversed.get(key);
288
290
  return serializer;
289
291
  }
@@ -316,17 +318,16 @@ class ObjectMiddleware extends SerializerMiddleware {
316
318
  }
317
319
  bufferDedupeMap.set(len, [entry, buf]);
318
320
  return buf;
319
- } else {
320
- const hash = toHash(entry, this._hashFunction);
321
- const newMap = new Map();
322
- newMap.set(hash, entry);
323
- bufferDedupeMap.set(len, newMap);
324
- const hashBuf = toHash(buf, this._hashFunction);
325
- if (hash === hashBuf) {
326
- return entry;
327
- }
328
- return buf;
329
321
  }
322
+ const hash = toHash(entry, this._hashFunction);
323
+ const newMap = new Map();
324
+ newMap.set(hash, entry);
325
+ bufferDedupeMap.set(len, newMap);
326
+ const hashBuf = toHash(buf, this._hashFunction);
327
+ if (hash === hashBuf) {
328
+ return entry;
329
+ }
330
+ return buf;
330
331
  } else if (Array.isArray(entry)) {
331
332
  if (entry.length < 16) {
332
333
  for (const item of entry) {
@@ -336,32 +337,29 @@ class ObjectMiddleware extends SerializerMiddleware {
336
337
  }
337
338
  entry.push(buf);
338
339
  return buf;
339
- } else {
340
- const newMap = new Map();
341
- const hash = toHash(buf, this._hashFunction);
342
- let found;
343
- for (const item of entry) {
344
- const itemHash = toHash(item, this._hashFunction);
345
- newMap.set(itemHash, item);
346
- if (found === undefined && itemHash === hash) found = item;
347
- }
348
- bufferDedupeMap.set(len, newMap);
349
- if (found === undefined) {
350
- newMap.set(hash, buf);
351
- return buf;
352
- } else {
353
- return found;
354
- }
355
340
  }
356
- } else {
341
+ const newMap = new Map();
357
342
  const hash = toHash(buf, this._hashFunction);
358
- const item = entry.get(hash);
359
- if (item !== undefined) {
360
- return item;
343
+ let found;
344
+ for (const item of entry) {
345
+ const itemHash = toHash(item, this._hashFunction);
346
+ newMap.set(itemHash, item);
347
+ if (found === undefined && itemHash === hash) found = item;
361
348
  }
362
- entry.set(hash, buf);
363
- return buf;
349
+ bufferDedupeMap.set(len, newMap);
350
+ if (found === undefined) {
351
+ newMap.set(hash, buf);
352
+ return buf;
353
+ }
354
+ return found;
355
+ }
356
+ const hash = toHash(buf, this._hashFunction);
357
+ const item = entry.get(hash);
358
+ if (item !== undefined) {
359
+ return item;
364
360
  }
361
+ entry.set(hash, buf);
362
+ return buf;
365
363
  };
366
364
  let currentPosTypeLookup = 0;
367
365
  let objectTypeLookup = new Map();
@@ -385,7 +383,7 @@ class ObjectMiddleware extends SerializerMiddleware {
385
383
  if (request) {
386
384
  return `${request}${name ? `.${name}` : ""}`;
387
385
  }
388
- } catch (e) {
386
+ } catch (_err) {
389
387
  // ignore -> fallback
390
388
  }
391
389
  if (typeof item === "object" && item !== null) {
@@ -408,8 +406,8 @@ class ObjectMiddleware extends SerializerMiddleware {
408
406
  }
409
407
  try {
410
408
  return `${item}`;
411
- } catch (e) {
412
- return `(${e.message})`;
409
+ } catch (err) {
410
+ return `(${err.message})`;
413
411
  }
414
412
  })
415
413
  .join(" -> ");
@@ -419,16 +417,16 @@ class ObjectMiddleware extends SerializerMiddleware {
419
417
  write(value, key) {
420
418
  try {
421
419
  process(value);
422
- } catch (e) {
423
- if (e !== NOT_SERIALIZABLE) {
420
+ } catch (err) {
421
+ if (err !== NOT_SERIALIZABLE) {
424
422
  if (hasDebugInfoAttached === undefined)
425
423
  hasDebugInfoAttached = new WeakSet();
426
- if (!hasDebugInfoAttached.has(e)) {
427
- e.message += `\nwhile serializing ${stackToString(value)}`;
428
- hasDebugInfoAttached.add(e);
424
+ if (!hasDebugInfoAttached.has(err)) {
425
+ err.message += `\nwhile serializing ${stackToString(value)}`;
426
+ hasDebugInfoAttached.add(err);
429
427
  }
430
428
  }
431
- throw e;
429
+ throw err;
432
430
  }
433
431
  },
434
432
  setCircularReference(ref) {
@@ -491,7 +489,7 @@ class ObjectMiddleware extends SerializerMiddleware {
491
489
 
492
490
  if (cycleStack.has(item)) {
493
491
  throw new Error(
494
- `This is a circular references. To serialize circular references use 'setCircularReference' somewhere in the circle during serialize and deserialize.`
492
+ "This is a circular references. To serialize circular references use 'setCircularReference' somewhere in the circle during serialize and deserialize."
495
493
  );
496
494
  }
497
495
 
@@ -542,7 +540,7 @@ class ObjectMiddleware extends SerializerMiddleware {
542
540
  result.push(item);
543
541
  } else if (typeof item === "function") {
544
542
  if (!SerializerMiddleware.isLazy(item))
545
- throw new Error("Unexpected function " + item);
543
+ throw new Error(`Unexpected function ${item}`);
546
544
  /** @type {SerializedType} */
547
545
  const serializedData =
548
546
  SerializerMiddleware.getLazySerializedValue(item);
@@ -573,10 +571,10 @@ class ObjectMiddleware extends SerializerMiddleware {
573
571
  process(item);
574
572
  }
575
573
  return result;
576
- } catch (e) {
577
- if (e === NOT_SERIALIZABLE) return null;
574
+ } catch (err) {
575
+ if (err === NOT_SERIALIZABLE) return null;
578
576
 
579
- throw e;
577
+ throw err;
580
578
  } finally {
581
579
  // Get rid of these references to avoid leaking memory
582
580
  // This happens because the optimized code v8 generates
@@ -637,7 +635,7 @@ class ObjectMiddleware extends SerializerMiddleware {
637
635
  if (nextItem === ESCAPE_ESCAPE_VALUE) {
638
636
  return ESCAPE;
639
637
  } else if (nextItem === ESCAPE_UNDEFINED) {
640
- return undefined;
638
+ // Nothing
641
639
  } else if (nextItem === ESCAPE_END_OBJECT) {
642
640
  throw new Error(
643
641
  `Unexpected end of object at position ${currentDataPos - 1}`
@@ -670,11 +668,9 @@ class ObjectMiddleware extends SerializerMiddleware {
670
668
  if (request && !loadedRequests.has(request)) {
671
669
  let loaded = false;
672
670
  for (const [regExp, loader] of loaders) {
673
- if (regExp.test(request)) {
674
- if (loader(request)) {
675
- loaded = true;
676
- break;
677
- }
671
+ if (regExp.test(request) && loader(request)) {
672
+ loaded = true;
673
+ break;
678
674
  }
679
675
  }
680
676
  if (!loaded) {
@@ -7,19 +7,36 @@
7
7
  /** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
8
8
  /** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
9
9
 
10
+ /** @typedef {(arg0?: any) => void} CacheAssoc */
11
+
12
+ /**
13
+ * @template T
14
+ * @typedef {WeakMap<CacheAssoc, ObjectStructure<T>>}
15
+ */
10
16
  const cache = new WeakMap();
11
17
 
18
+ /**
19
+ * @template T
20
+ */
12
21
  class ObjectStructure {
13
22
  constructor() {
14
23
  this.keys = undefined;
15
24
  this.children = undefined;
16
25
  }
17
26
 
27
+ /**
28
+ * @param {keyof T[]} keys keys
29
+ * @returns {keyof T[]} keys
30
+ */
18
31
  getKeys(keys) {
19
32
  if (this.keys === undefined) this.keys = keys;
20
33
  return this.keys;
21
34
  }
22
35
 
36
+ /**
37
+ * @param {keyof T} key key
38
+ * @returns {ObjectStructure<T>} object structure
39
+ */
23
40
  key(key) {
24
41
  if (this.children === undefined) this.children = new Map();
25
42
  const child = this.children.get(key);
@@ -30,6 +47,12 @@ class ObjectStructure {
30
47
  }
31
48
  }
32
49
 
50
+ /**
51
+ * @template T
52
+ * @param {(keyof T)[]} keys keys
53
+ * @param {CacheAssoc} cacheAssoc cache assoc fn
54
+ * @returns {(keyof T)[]} keys
55
+ */
33
56
  const getCachedKeys = (keys, cacheAssoc) => {
34
57
  let root = cache.get(cacheAssoc);
35
58
  if (root === undefined) {
@@ -45,11 +68,12 @@ const getCachedKeys = (keys, cacheAssoc) => {
45
68
 
46
69
  class PlainObjectSerializer {
47
70
  /**
48
- * @param {object} obj plain object
71
+ * @template {object} T
72
+ * @param {T} obj plain object
49
73
  * @param {ObjectSerializerContext} context context
50
74
  */
51
75
  serialize(obj, context) {
52
- const keys = Object.keys(obj);
76
+ const keys = /** @type {(keyof T)[]} */ (Object.keys(obj));
53
77
  if (keys.length > 128) {
54
78
  // Objects with so many keys are unlikely to share structure
55
79
  // with other objects
@@ -70,19 +94,21 @@ class PlainObjectSerializer {
70
94
  context.write(null);
71
95
  }
72
96
  }
97
+
73
98
  /**
99
+ * @template {object} T
74
100
  * @param {ObjectDeserializerContext} context context
75
- * @returns {object} plain object
101
+ * @returns {T} plain object
76
102
  */
77
103
  deserialize(context) {
78
104
  const keys = context.read();
79
- const obj = {};
105
+ const obj = /** @type {T} */ ({});
80
106
  if (Array.isArray(keys)) {
81
107
  for (const key of keys) {
82
- obj[key] = context.read();
108
+ obj[/** @type {keyof T} */ (key)] = context.read();
83
109
  }
84
110
  } else if (keys !== null) {
85
- obj[keys] = context.read();
111
+ obj[/** @type {keyof T} */ (keys)] = context.read();
86
112
  }
87
113
  return obj;
88
114
  }
@@ -16,6 +16,7 @@ class RegExpObjectSerializer {
16
16
  context.write(obj.source);
17
17
  context.write(obj.flags);
18
18
  }
19
+
19
20
  /**
20
21
  * @param {ObjectDeserializerContext} context context
21
22
  * @returns {RegExp} regexp
@@ -52,11 +52,10 @@ class Serializer {
52
52
  /** @type {any} */
53
53
  let current = value;
54
54
  for (const middleware of this.deserializeMiddlewares) {
55
- if (current && typeof current.then === "function") {
56
- current = current.then(data => middleware.deserialize(data, ctx));
57
- } else {
58
- current = middleware.deserialize(current, ctx);
59
- }
55
+ current =
56
+ current && typeof current.then === "function"
57
+ ? current.then(data => middleware.deserialize(data, ctx))
58
+ : middleware.deserialize(current, ctx);
60
59
  }
61
60
  return current;
62
61
  }
@@ -45,7 +45,7 @@ class SerializerMiddleware {
45
45
  * @param {any=} serializedValue serialized value
46
46
  * @returns {function(): Promise<any> | any} lazy function
47
47
  */
48
- static createLazy(value, target, options = {}, serializedValue) {
48
+ static createLazy(value, target, options = {}, serializedValue = undefined) {
49
49
  if (SerializerMiddleware.isLazy(value, target)) return value;
50
50
  const fn = typeof value === "function" ? value : () => value;
51
51
  fn[LAZY_TARGET] = target;
@@ -62,24 +62,24 @@ class SerializerMiddleware {
62
62
  static isLazy(fn, target) {
63
63
  if (typeof fn !== "function") return false;
64
64
  const t = fn[LAZY_TARGET];
65
- return target ? t === target : !!t;
65
+ return target ? t === target : Boolean(t);
66
66
  }
67
67
 
68
68
  /**
69
69
  * @param {function(): Promise<any> | any} fn lazy function
70
- * @returns {object} options
70
+ * @returns {object | undefined} options
71
71
  */
72
72
  static getLazyOptions(fn) {
73
- if (typeof fn !== "function") return undefined;
73
+ if (typeof fn !== "function") return;
74
74
  return /** @type {any} */ (fn).options;
75
75
  }
76
76
 
77
77
  /**
78
78
  * @param {function(): Promise<any> | any} fn lazy function
79
- * @returns {any} serialized value
79
+ * @returns {any | undefined} serialized value
80
80
  */
81
81
  static getLazySerializedValue(fn) {
82
- if (typeof fn !== "function") return undefined;
82
+ if (typeof fn !== "function") return;
83
83
  return fn[LAZY_SERIALIZED_VALUE];
84
84
  }
85
85
 
@@ -19,6 +19,7 @@ class SetObjectSerializer {
19
19
  context.write(value);
20
20
  }
21
21
  }
22
+
22
23
  /**
23
24
  * @template T
24
25
  * @param {ObjectDeserializerContext} context context
@@ -26,7 +27,7 @@ class SetObjectSerializer {
26
27
  */
27
28
  deserialize(context) {
28
29
  /** @type {number} */
29
- let size = context.read();
30
+ const size = context.read();
30
31
  /** @type {Set<T>} */
31
32
  const set = new Set();
32
33
  for (let i = 0; i < size; i++) {
@@ -207,26 +207,31 @@ class ConsumeSharedModule extends Module {
207
207
  });
208
208
  }
209
209
  }
210
- let fn = "load";
211
- const args = [JSON.stringify(shareScope), JSON.stringify(shareKey)];
210
+
211
+ const args = [
212
+ JSON.stringify(shareScope),
213
+ JSON.stringify(shareKey),
214
+ JSON.stringify(eager)
215
+ ];
212
216
  if (requiredVersion) {
213
- if (strictVersion) {
214
- fn += "Strict";
215
- }
216
- if (singleton) {
217
- fn += "Singleton";
218
- }
219
217
  args.push(stringifyHoley(requiredVersion));
220
- fn += "VersionCheck";
221
- } else {
222
- if (singleton) {
223
- fn += "Singleton";
224
- }
225
218
  }
226
219
  if (fallbackCode) {
227
- fn += "Fallback";
228
220
  args.push(fallbackCode);
229
221
  }
222
+
223
+ let fn;
224
+
225
+ if (requiredVersion) {
226
+ if (strictVersion) {
227
+ fn = singleton ? "loadStrictSingletonVersion" : "loadStrictVersion";
228
+ } else {
229
+ fn = singleton ? "loadSingletonVersion" : "loadVersion";
230
+ }
231
+ } else {
232
+ fn = singleton ? "loadSingleton" : "load";
233
+ }
234
+
230
235
  const code = runtimeTemplate.returningFunction(`${fn}(${args.join(", ")})`);
231
236
  const sources = new Map();
232
237
  sources.set("consume-shared", new RawSource(code));