webpack 5.59.0 → 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.
- package/README.md +48 -38
- package/bin/webpack.js +34 -10
- package/hot/dev-server.js +19 -5
- package/hot/lazy-compilation-node.js +13 -1
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +23 -4
- package/hot/only-dev-server.js +3 -2
- package/hot/poll.js +5 -2
- package/hot/signal.js +6 -2
- package/lib/APIPlugin.js +226 -122
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +2 -1
- package/lib/BannerPlugin.js +33 -12
- package/lib/Cache.js +16 -12
- package/lib/CacheFacade.js +13 -16
- package/lib/CaseSensitiveModulesWarning.js +8 -8
- package/lib/Chunk.js +60 -33
- package/lib/ChunkGraph.js +207 -72
- package/lib/ChunkGroup.js +40 -20
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +117 -32
- package/lib/CodeGenerationResults.js +8 -7
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +712 -392
- package/lib/Compiler.js +393 -172
- package/lib/ConcatenationScope.js +10 -13
- package/lib/ConditionalInitFragment.js +22 -14
- package/lib/ConstPlugin.js +104 -64
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +283 -108
- package/lib/ContextModuleFactory.js +151 -63
- package/lib/ContextReplacementPlugin.js +25 -10
- package/lib/CssModule.js +166 -0
- package/lib/DefinePlugin.js +254 -148
- package/lib/DelegatedModule.js +29 -6
- package/lib/DelegatedModuleFactoryPlugin.js +42 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +17 -2
- package/lib/Dependency.js +58 -29
- package/lib/DependencyTemplate.js +24 -3
- package/lib/DependencyTemplates.js +2 -2
- package/lib/DllEntryPlugin.js +18 -1
- package/lib/DllModule.js +21 -4
- package/lib/DllModuleFactory.js +2 -1
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +50 -19
- package/lib/EntryOptionPlugin.js +6 -1
- package/lib/EntryPlugin.js +7 -4
- package/lib/Entrypoint.js +2 -2
- package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
- package/lib/EnvironmentPlugin.js +5 -2
- package/lib/ErrorHelpers.js +65 -26
- package/lib/EvalDevToolModulePlugin.js +37 -13
- package/lib/EvalSourceMapDevToolPlugin.js +50 -20
- package/lib/ExportsInfo.js +234 -133
- package/lib/ExportsInfoApiPlugin.js +31 -15
- package/lib/ExternalModule.js +391 -129
- package/lib/ExternalModuleFactoryPlugin.js +65 -17
- package/lib/FileSystemInfo.js +1038 -523
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +352 -349
- package/lib/FlagDependencyUsagePlugin.js +10 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +16 -8
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +11 -13
- package/lib/HotModuleReplacementPlugin.js +221 -128
- package/lib/IgnoreErrorModuleFactory.js +4 -4
- package/lib/IgnorePlugin.js +5 -4
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +39 -15
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +45 -16
- package/lib/LoaderOptionsPlugin.js +13 -3
- package/lib/MainTemplate.js +74 -21
- package/lib/Module.js +155 -34
- package/lib/ModuleBuildError.js +13 -11
- package/lib/ModuleDependencyError.js +6 -4
- package/lib/ModuleDependencyWarning.js +6 -4
- package/lib/ModuleError.js +10 -5
- package/lib/ModuleFactory.js +4 -4
- package/lib/ModuleFilenameHelpers.js +164 -54
- package/lib/ModuleGraph.js +93 -53
- package/lib/ModuleGraphConnection.js +27 -13
- package/lib/ModuleHashingError.js +29 -0
- package/lib/ModuleInfoHeaderPlugin.js +92 -33
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +17 -9
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +3 -1
- package/lib/ModuleStoreError.js +3 -2
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +168 -0
- package/lib/ModuleWarning.js +10 -5
- package/lib/MultiCompiler.js +115 -38
- package/lib/MultiStats.js +75 -33
- package/lib/MultiWatching.js +6 -2
- package/lib/NodeStuffPlugin.js +136 -37
- package/lib/NormalModule.js +437 -194
- package/lib/NormalModuleFactory.js +313 -116
- package/lib/NormalModuleReplacementPlugin.js +10 -4
- package/lib/NullFactory.js +1 -1
- package/lib/OptimizationStages.js +3 -3
- package/lib/Parser.js +1 -1
- package/lib/PlatformPlugin.js +39 -0
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +83 -28
- package/lib/ProvidePlugin.js +37 -19
- package/lib/RawModule.js +18 -5
- package/lib/RecordIdsPlugin.js +8 -8
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/ResolverFactory.js +8 -4
- package/lib/RuntimeGlobals.js +99 -65
- package/lib/RuntimeModule.js +17 -15
- package/lib/RuntimePlugin.js +116 -13
- package/lib/RuntimeTemplate.js +304 -102
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +89 -42
- package/lib/Stats.js +12 -7
- package/lib/Template.js +30 -33
- package/lib/TemplatedPathPlugin.js +102 -34
- package/lib/UseStrictPlugin.js +37 -12
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +6 -0
- package/lib/WatchIgnorePlugin.js +46 -13
- package/lib/Watching.js +139 -76
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +162 -56
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +351 -99
- package/lib/asset/AssetModulesPlugin.js +57 -33
- package/lib/asset/AssetParser.js +15 -6
- package/lib/asset/AssetSourceGenerator.js +30 -10
- package/lib/asset/AssetSourceParser.js +8 -2
- package/lib/asset/RawDataUrlModule.js +162 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +376 -420
- package/lib/cache/AddManagedPathsPlugin.js +6 -1
- package/lib/cache/IdleFileCachePlugin.js +26 -13
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
- package/lib/cache/PackFileCacheStrategy.js +172 -94
- package/lib/cache/ResolverCachePlugin.js +115 -43
- package/lib/cache/getLazyHashedEtag.js +2 -2
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +195 -110
- package/lib/config/browserslistTargetHandler.js +106 -41
- package/lib/config/defaults.js +572 -154
- package/lib/config/normalization.js +361 -322
- package/lib/config/target.js +105 -66
- package/lib/container/ContainerEntryDependency.js +2 -1
- package/lib/container/ContainerEntryModule.js +27 -11
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +18 -12
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +19 -8
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/ModuleFederationPlugin.js +2 -0
- package/lib/container/RemoteModule.js +17 -4
- package/lib/container/RemoteRuntimeModule.js +31 -17
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +203 -0
- package/lib/css/CssGenerator.js +151 -0
- package/lib/css/CssLoadingRuntimeModule.js +592 -0
- package/lib/css/CssModulesPlugin.js +888 -0
- package/lib/css/CssParser.js +1049 -0
- package/lib/css/walkCssTokens.js +775 -0
- package/lib/debug/ProfilingPlugin.js +102 -54
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
- package/lib/dependencies/AMDPlugin.js +44 -24
- package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
- package/lib/dependencies/AMDRequireDependency.js +21 -6
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +4 -4
- package/lib/dependencies/CachedConstDependency.js +22 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
- package/lib/dependencies/CommonJsExportsDependency.js +28 -5
- package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
- package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
- package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
- package/lib/dependencies/CommonJsRequireDependency.js +9 -1
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
- package/lib/dependencies/ConstDependency.js +12 -3
- package/lib/dependencies/ContextDependency.js +32 -5
- package/lib/dependencies/ContextDependencyHelpers.js +92 -62
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
- package/lib/dependencies/ContextElementDependency.js +41 -4
- package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
- package/lib/dependencies/CriticalDependencyWarning.js +4 -1
- package/lib/dependencies/CssExportDependency.js +156 -0
- package/lib/dependencies/CssImportDependency.js +125 -0
- package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
- package/lib/dependencies/CssUrlDependency.js +164 -0
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +15 -11
- package/lib/dependencies/ExportsInfoDependency.js +26 -5
- package/lib/dependencies/ExternalModuleDependency.js +109 -0
- package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
- package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
- package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
- package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +13 -7
- package/lib/dependencies/HarmonyImportDependency.js +65 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
- package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -2
- package/lib/dependencies/ImportDependency.js +50 -12
- package/lib/dependencies/ImportEagerDependency.js +11 -6
- package/lib/dependencies/ImportMetaContextDependency.js +42 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
- package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +128 -59
- package/lib/dependencies/ImportParserPlugin.js +153 -83
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +11 -6
- package/lib/dependencies/JsonExportsDependency.js +38 -30
- package/lib/dependencies/LoaderDependency.js +14 -0
- package/lib/dependencies/LoaderImportDependency.js +14 -0
- package/lib/dependencies/LoaderPlugin.js +54 -40
- package/lib/dependencies/LocalModule.js +17 -1
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +22 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
- package/lib/dependencies/ModuleDependency.js +24 -7
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +43 -8
- package/lib/dependencies/PureExpressionDependency.js +73 -39
- package/lib/dependencies/RequireContextDependency.js +6 -16
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
- package/lib/dependencies/RequireContextPlugin.js +20 -7
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +6 -1
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +19 -2
- package/lib/dependencies/RequireResolveDependency.js +8 -1
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +49 -22
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +20 -13
- package/lib/dependencies/URLPlugin.js +115 -27
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +143 -59
- package/lib/dependencies/getFunctionExpression.js +9 -0
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
- package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
- package/lib/hmr/LazyCompilationPlugin.js +94 -41
- package/lib/hmr/lazyCompilationBackend.js +107 -44
- package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
- package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
- package/lib/ids/HashedModuleIdsPlugin.js +24 -16
- package/lib/ids/IdHelpers.js +59 -49
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +20 -12
- package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
- package/lib/ids/SyncModuleIdsPlugin.js +146 -0
- package/lib/index.js +44 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
- package/lib/javascript/BasicEvaluatedExpression.js +133 -19
- package/lib/javascript/ChunkHelpers.js +33 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
- package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
- package/lib/javascript/JavascriptGenerator.js +37 -6
- package/lib/javascript/JavascriptModulesPlugin.js +523 -295
- package/lib/javascript/JavascriptParser.js +1591 -574
- package/lib/javascript/JavascriptParserHelpers.js +58 -37
- package/lib/javascript/StartupHelpers.js +69 -47
- package/lib/json/JsonData.js +33 -0
- package/lib/json/JsonGenerator.js +29 -21
- package/lib/json/JsonModulesPlugin.js +13 -7
- package/lib/json/JsonParser.js +30 -16
- package/lib/library/AbstractLibraryPlugin.js +6 -2
- package/lib/library/AmdLibraryPlugin.js +34 -18
- package/lib/library/AssignLibraryPlugin.js +68 -32
- package/lib/library/EnableLibraryPlugin.js +39 -14
- package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
- package/lib/library/JsonpLibraryPlugin.js +4 -3
- package/lib/library/ModernModuleLibraryPlugin.js +144 -0
- package/lib/library/ModuleLibraryPlugin.js +12 -7
- package/lib/library/SystemLibraryPlugin.js +6 -4
- package/lib/library/UmdLibraryPlugin.js +119 -100
- package/lib/logging/Logger.js +59 -6
- package/lib/logging/createConsoleLogger.js +25 -40
- package/lib/logging/runtime.js +8 -9
- package/lib/logging/truncateArgs.js +9 -8
- package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
- package/lib/node/NodeEnvironmentPlugin.js +14 -8
- package/lib/node/NodeTargetPlugin.js +7 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +100 -50
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
- package/lib/node/nodeConsole.js +48 -31
- package/lib/optimize/AggressiveMergingPlugin.js +10 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
- package/lib/optimize/ConcatenatedModule.js +353 -212
- package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
- package/lib/optimize/InnerGraph.js +30 -25
- package/lib/optimize/InnerGraphPlugin.js +105 -64
- package/lib/optimize/LimitChunkCountPlugin.js +32 -9
- package/lib/optimize/MangleExportsPlugin.js +7 -2
- package/lib/optimize/MinMaxSizeWarning.js +6 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
- package/lib/optimize/RealContentHashPlugin.js +99 -43
- package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
- package/lib/optimize/RuntimeChunkPlugin.js +15 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
- package/lib/optimize/SplitChunksPlugin.js +129 -78
- package/lib/performance/SizeLimitsPlugin.js +22 -8
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
- package/lib/rules/BasicEffectRulePlugin.js +7 -1
- package/lib/rules/BasicMatcherRulePlugin.js +8 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
- package/lib/rules/RuleSetCompiler.js +53 -32
- package/lib/rules/UseEffectRulePlugin.js +42 -36
- package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
- package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
- package/lib/runtime/BaseUriRuntimeModule.js +35 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
- package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +24 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
- package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +336 -120
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +212 -33
- package/lib/serialization/DateObjectSerializer.js +16 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -6
- package/lib/serialization/FileMiddleware.js +187 -86
- package/lib/serialization/MapObjectSerializer.js +25 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
- package/lib/serialization/ObjectMiddleware.js +96 -66
- package/lib/serialization/PlainObjectSerializer.js +51 -14
- package/lib/serialization/RegExpObjectSerializer.js +17 -5
- package/lib/serialization/Serializer.js +23 -5
- package/lib/serialization/SerializerMiddleware.js +8 -8
- package/lib/serialization/SetObjectSerializer.js +22 -6
- package/lib/serialization/SingleItemMiddleware.js +2 -2
- package/lib/serialization/types.js +2 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +40 -17
- package/lib/sharing/ConsumeSharedPlugin.js +139 -102
- package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +19 -6
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +37 -30
- package/lib/sharing/SharePlugin.js +2 -2
- package/lib/sharing/ShareRuntimeModule.js +20 -10
- package/lib/sharing/resolveMatchedConfigs.js +6 -5
- package/lib/sharing/utils.js +338 -34
- package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
- package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
- package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
- package/lib/stats/StatsFactory.js +128 -57
- package/lib/stats/StatsPrinter.js +77 -46
- package/lib/util/ArrayHelpers.js +35 -1
- package/lib/util/ArrayQueue.js +15 -22
- package/lib/util/AsyncQueue.js +37 -16
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +11 -2
- package/lib/util/MapHelpers.js +17 -5
- package/lib/util/ParallelismFactorCalculator.js +11 -1
- package/lib/util/Queue.js +9 -3
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +19 -6
- package/lib/util/StackedCacheMap.js +33 -3
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +46 -0
- package/lib/util/TupleQueue.js +9 -3
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +8 -8
- package/lib/util/WeakTupleMap.js +70 -28
- package/lib/util/binarySearchBounds.js +51 -9
- package/lib/util/chainedImports.js +97 -0
- package/lib/util/cleverMerge.js +51 -36
- package/lib/util/comparators.js +146 -83
- package/lib/util/compileBooleanMatcher.js +35 -7
- package/lib/util/conventions.js +126 -0
- package/lib/util/create-schema-validation.js +9 -2
- package/lib/util/createHash.js +49 -14
- package/lib/util/deprecation.js +48 -15
- package/lib/util/deterministicGrouping.js +71 -39
- package/lib/util/extractUrlAndGlobal.js +3 -0
- package/lib/util/findGraphRoots.js +7 -5
- package/lib/util/fs.js +419 -94
- package/lib/util/hash/BatchedHash.js +10 -4
- package/lib/util/hash/md4.js +20 -0
- package/lib/util/hash/wasm-hash.js +163 -0
- package/lib/util/hash/xxhash64.js +7 -141
- package/lib/util/identifier.js +140 -93
- package/lib/util/internalSerializables.js +22 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +10 -10
- package/lib/util/mergeScope.js +76 -0
- package/lib/util/nonNumericOnlyHash.js +22 -0
- package/lib/util/numberHash.js +84 -34
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +7 -55
- package/lib/util/propertyName.js +77 -0
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/runtime.js +188 -133
- package/lib/util/semver.js +64 -56
- package/lib/util/serialization.js +26 -1
- package/lib/util/smartGrouping.js +10 -10
- package/lib/util/source.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
- package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +23 -9
- package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
- package/lib/webpack.js +43 -12
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
- package/module.d.ts +233 -0
- package/package.json +85 -139
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +679 -47
- package/schemas/plugins/BannerPlugin.check.js +1 -1
- package/schemas/plugins/BannerPlugin.json +9 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssParserOptions.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5026 -1756
@@ -4,16 +4,32 @@
|
|
4
4
|
|
5
5
|
"use strict";
|
6
6
|
|
7
|
+
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
8
|
+
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
9
|
+
|
7
10
|
class ArraySerializer {
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
+
/**
|
12
|
+
* @template T
|
13
|
+
* @param {T[]} array array
|
14
|
+
* @param {ObjectSerializerContext} context context
|
15
|
+
*/
|
16
|
+
serialize(array, context) {
|
17
|
+
context.write(array.length);
|
18
|
+
for (const item of array) context.write(item);
|
11
19
|
}
|
12
|
-
|
13
|
-
|
20
|
+
|
21
|
+
/**
|
22
|
+
* @template T
|
23
|
+
* @param {ObjectDeserializerContext} context context
|
24
|
+
* @returns {T[]} array
|
25
|
+
*/
|
26
|
+
deserialize(context) {
|
27
|
+
/** @type {number} */
|
28
|
+
const length = context.read();
|
29
|
+
/** @type {T[]} */
|
14
30
|
const array = [];
|
15
31
|
for (let i = 0; i < length; i++) {
|
16
|
-
array.push(read());
|
32
|
+
array.push(context.read());
|
17
33
|
}
|
18
34
|
return array;
|
19
35
|
}
|
@@ -21,6 +21,9 @@ Section -> NullsSection |
|
|
21
21
|
I32NumbersSection |
|
22
22
|
I8NumbersSection |
|
23
23
|
ShortStringSection |
|
24
|
+
BigIntSection |
|
25
|
+
I32BigIntSection |
|
26
|
+
I8BigIntSection
|
24
27
|
StringSection |
|
25
28
|
BufferSection |
|
26
29
|
NopSection
|
@@ -39,6 +42,9 @@ ShortStringSection -> ShortStringSectionHeaderByte ascii-byte*
|
|
39
42
|
StringSection -> StringSectionHeaderByte i32:length utf8-byte*
|
40
43
|
BufferSection -> BufferSectionHeaderByte i32:length byte*
|
41
44
|
NopSection --> NopSectionHeaderByte
|
45
|
+
BigIntSection -> BigIntSectionHeaderByte i32:length ascii-byte*
|
46
|
+
I32BigIntSection -> I32BigIntSectionHeaderByte i32
|
47
|
+
I8BigIntSection -> I8BigIntSectionHeaderByte i8
|
42
48
|
|
43
49
|
ShortStringSectionHeaderByte -> 0b1nnn_nnnn (n:length)
|
44
50
|
|
@@ -58,6 +64,9 @@ BooleansCountAndBitsByte ->
|
|
58
64
|
StringSectionHeaderByte -> 0b0000_1110
|
59
65
|
BufferSectionHeaderByte -> 0b0000_1111
|
60
66
|
NopSectionHeaderByte -> 0b0000_1011
|
67
|
+
BigIntSectionHeaderByte -> 0b0001_1010
|
68
|
+
I32BigIntSectionHeaderByte -> 0b0001_1100
|
69
|
+
I8BigIntSectionHeaderByte -> 0b0001_1011
|
61
70
|
FalseHeaderByte -> 0b0000_1100
|
62
71
|
TrueHeaderByte -> 0b0000_1101
|
63
72
|
|
@@ -78,6 +87,9 @@ const NULL_AND_I8_HEADER = 0x15;
|
|
78
87
|
const NULL_AND_I32_HEADER = 0x16;
|
79
88
|
const NULL_AND_TRUE_HEADER = 0x17;
|
80
89
|
const NULL_AND_FALSE_HEADER = 0x18;
|
90
|
+
const BIGINT_HEADER = 0x1a;
|
91
|
+
const BIGINT_I8_HEADER = 0x1b;
|
92
|
+
const BIGINT_I32_HEADER = 0x1c;
|
81
93
|
const STRING_HEADER = 0x1e;
|
82
94
|
const BUFFER_HEADER = 0x1f;
|
83
95
|
const I8_HEADER = 0x60;
|
@@ -86,7 +98,7 @@ const F64_HEADER = 0x20;
|
|
86
98
|
const SHORT_STRING_HEADER = 0x80;
|
87
99
|
|
88
100
|
/** Uplift high-order bits */
|
89
|
-
const NUMBERS_HEADER_MASK = 0xe0;
|
101
|
+
const NUMBERS_HEADER_MASK = 0xe0; // 0b1010_0000
|
90
102
|
const NUMBERS_COUNT_MASK = 0x1f; // 0b0001_1111
|
91
103
|
const SHORT_STRING_LENGTH_MASK = 0x7f; // 0b0111_1111
|
92
104
|
|
@@ -101,6 +113,10 @@ const MEASURE_END_OPERATION = Symbol("MEASURE_END_OPERATION");
|
|
101
113
|
/** @typedef {typeof MEASURE_START_OPERATION} MEASURE_START_OPERATION_TYPE */
|
102
114
|
/** @typedef {typeof MEASURE_END_OPERATION} MEASURE_END_OPERATION_TYPE */
|
103
115
|
|
116
|
+
/**
|
117
|
+
* @param {number} n number
|
118
|
+
* @returns {0 | 1 | 2} type of number for serialization
|
119
|
+
*/
|
104
120
|
const identifyNumber = n => {
|
105
121
|
if (n === (n | 0)) {
|
106
122
|
if (n <= 127 && n >= -128) return 0;
|
@@ -109,6 +125,16 @@ const identifyNumber = n => {
|
|
109
125
|
return 2;
|
110
126
|
};
|
111
127
|
|
128
|
+
/**
|
129
|
+
* @param {bigint} n bigint
|
130
|
+
* @returns {0 | 1 | 2} type of bigint for serialization
|
131
|
+
*/
|
132
|
+
const identifyBigInt = n => {
|
133
|
+
if (n <= BigInt(127) && n >= BigInt(-128)) return 0;
|
134
|
+
if (n <= BigInt(2147483647) && n >= BigInt(-2147483648)) return 1;
|
135
|
+
return 2;
|
136
|
+
};
|
137
|
+
|
112
138
|
/**
|
113
139
|
* @typedef {PrimitiveSerializableType[]} DeserializedType
|
114
140
|
* @typedef {BufferSerializableType[]} SerializedType
|
@@ -117,13 +143,18 @@ const identifyNumber = n => {
|
|
117
143
|
class BinaryMiddleware extends SerializerMiddleware {
|
118
144
|
/**
|
119
145
|
* @param {DeserializedType} data data
|
120
|
-
* @param {
|
146
|
+
* @param {object} context context object
|
121
147
|
* @returns {SerializedType|Promise<SerializedType>} serialized data
|
122
148
|
*/
|
123
149
|
serialize(data, context) {
|
124
150
|
return this._serialize(data, context);
|
125
151
|
}
|
126
152
|
|
153
|
+
/**
|
154
|
+
* @param {function(): Promise<any> | any} fn lazy function
|
155
|
+
* @param {object} context serialize function
|
156
|
+
* @returns {function(): Promise<any> | any} new lazy
|
157
|
+
*/
|
127
158
|
_serializeLazy(fn, context) {
|
128
159
|
return SerializerMiddleware.serializeLazy(fn, data =>
|
129
160
|
this._serialize(data, context)
|
@@ -132,7 +163,7 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
132
163
|
|
133
164
|
/**
|
134
165
|
* @param {DeserializedType} data data
|
135
|
-
* @param {
|
166
|
+
* @param {object} context context object
|
136
167
|
* @param {{ leftOverBuffer: Buffer | null, allocationSize: number, increaseCounter: number }} allocationScope allocation scope
|
137
168
|
* @returns {SerializedType} serialized data
|
138
169
|
*/
|
@@ -145,17 +176,20 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
145
176
|
leftOverBuffer: null
|
146
177
|
}
|
147
178
|
) {
|
148
|
-
/** @type {Buffer} */
|
179
|
+
/** @type {Buffer | null} */
|
149
180
|
let leftOverBuffer = null;
|
150
181
|
/** @type {BufferSerializableType[]} */
|
151
182
|
let buffers = [];
|
152
|
-
/** @type {Buffer} */
|
183
|
+
/** @type {Buffer | null} */
|
153
184
|
let currentBuffer = allocationScope ? allocationScope.leftOverBuffer : null;
|
154
185
|
allocationScope.leftOverBuffer = null;
|
155
186
|
let currentPosition = 0;
|
156
187
|
if (currentBuffer === null) {
|
157
188
|
currentBuffer = Buffer.allocUnsafe(allocationScope.allocationSize);
|
158
189
|
}
|
190
|
+
/**
|
191
|
+
* @param {number} bytesNeeded bytes needed
|
192
|
+
*/
|
159
193
|
const allocate = bytesNeeded => {
|
160
194
|
if (currentBuffer !== null) {
|
161
195
|
if (currentBuffer.length - currentPosition >= bytesNeeded) return;
|
@@ -203,20 +237,32 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
203
237
|
currentPosition = 0;
|
204
238
|
}
|
205
239
|
};
|
240
|
+
/**
|
241
|
+
* @param {number} byte byte
|
242
|
+
*/
|
206
243
|
const writeU8 = byte => {
|
207
|
-
|
244
|
+
/** @type {Buffer} */
|
245
|
+
(currentBuffer).writeUInt8(byte, currentPosition++);
|
208
246
|
};
|
247
|
+
/**
|
248
|
+
* @param {number} ui32 ui32
|
249
|
+
*/
|
209
250
|
const writeU32 = ui32 => {
|
210
|
-
|
251
|
+
/** @type {Buffer} */
|
252
|
+
(currentBuffer).writeUInt32LE(ui32, currentPosition);
|
211
253
|
currentPosition += 4;
|
212
254
|
};
|
255
|
+
/** @type {number[]} */
|
213
256
|
const measureStack = [];
|
214
257
|
const measureStart = () => {
|
215
258
|
measureStack.push(buffers.length, currentPosition);
|
216
259
|
};
|
260
|
+
/**
|
261
|
+
* @returns {number} size
|
262
|
+
*/
|
217
263
|
const measureEnd = () => {
|
218
|
-
const oldPos = measureStack.pop();
|
219
|
-
const buffersIndex = measureStack.pop();
|
264
|
+
const oldPos = /** @type {number} */ (measureStack.pop());
|
265
|
+
const buffersIndex = /** @type {number} */ (measureStack.pop());
|
220
266
|
let size = currentPosition - oldPos;
|
221
267
|
for (let i = buffersIndex; i < buffers.length; i++) {
|
222
268
|
size += buffers[i].length;
|
@@ -228,7 +274,7 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
228
274
|
switch (typeof thing) {
|
229
275
|
case "function": {
|
230
276
|
if (!SerializerMiddleware.isLazy(thing))
|
231
|
-
throw new Error(
|
277
|
+
throw new Error(`Unexpected function ${thing}`);
|
232
278
|
/** @type {SerializedType | (() => SerializedType)} */
|
233
279
|
let serializedData =
|
234
280
|
SerializerMiddleware.getLazySerializedValue(thing);
|
@@ -251,13 +297,12 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
251
297
|
buffers.push(serializedData);
|
252
298
|
break;
|
253
299
|
}
|
254
|
-
} else {
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
break;
|
259
|
-
}
|
300
|
+
} else if (typeof serializedData === "function") {
|
301
|
+
flush();
|
302
|
+
buffers.push(serializedData);
|
303
|
+
break;
|
260
304
|
}
|
305
|
+
/** @type {number[]} */
|
261
306
|
const lengths = [];
|
262
307
|
for (const item of serializedData) {
|
263
308
|
let last;
|
@@ -316,6 +361,62 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
316
361
|
}
|
317
362
|
break;
|
318
363
|
}
|
364
|
+
case "bigint": {
|
365
|
+
const type = identifyBigInt(thing);
|
366
|
+
if (type === 0 && thing >= 0 && thing <= BigInt(10)) {
|
367
|
+
// shortcut for very small bigints
|
368
|
+
allocate(HEADER_SIZE + I8_SIZE);
|
369
|
+
writeU8(BIGINT_I8_HEADER);
|
370
|
+
writeU8(Number(thing));
|
371
|
+
break;
|
372
|
+
}
|
373
|
+
|
374
|
+
switch (type) {
|
375
|
+
case 0: {
|
376
|
+
let n = 1;
|
377
|
+
allocate(HEADER_SIZE + I8_SIZE * n);
|
378
|
+
writeU8(BIGINT_I8_HEADER | (n - 1));
|
379
|
+
while (n > 0) {
|
380
|
+
currentBuffer.writeInt8(
|
381
|
+
Number(/** @type {bigint} */ (data[i])),
|
382
|
+
currentPosition
|
383
|
+
);
|
384
|
+
currentPosition += I8_SIZE;
|
385
|
+
n--;
|
386
|
+
i++;
|
387
|
+
}
|
388
|
+
i--;
|
389
|
+
break;
|
390
|
+
}
|
391
|
+
case 1: {
|
392
|
+
let n = 1;
|
393
|
+
allocate(HEADER_SIZE + I32_SIZE * n);
|
394
|
+
writeU8(BIGINT_I32_HEADER | (n - 1));
|
395
|
+
while (n > 0) {
|
396
|
+
currentBuffer.writeInt32LE(
|
397
|
+
Number(/** @type {bigint} */ (data[i])),
|
398
|
+
currentPosition
|
399
|
+
);
|
400
|
+
currentPosition += I32_SIZE;
|
401
|
+
n--;
|
402
|
+
i++;
|
403
|
+
}
|
404
|
+
i--;
|
405
|
+
break;
|
406
|
+
}
|
407
|
+
default: {
|
408
|
+
const value = thing.toString();
|
409
|
+
const len = Buffer.byteLength(value);
|
410
|
+
allocate(len + HEADER_SIZE + I32_SIZE);
|
411
|
+
writeU8(BIGINT_HEADER);
|
412
|
+
writeU32(len);
|
413
|
+
currentBuffer.write(value, currentPosition);
|
414
|
+
currentPosition += len;
|
415
|
+
break;
|
416
|
+
}
|
417
|
+
}
|
418
|
+
break;
|
419
|
+
}
|
319
420
|
case "number": {
|
320
421
|
const type = identifyNumber(thing);
|
321
422
|
if (type === 0 && thing >= 0 && thing <= 10) {
|
@@ -519,6 +620,11 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
519
620
|
}
|
520
621
|
break;
|
521
622
|
}
|
623
|
+
default: {
|
624
|
+
throw new Error(
|
625
|
+
`Unknown typeof "${typeof thing}" in binary middleware`
|
626
|
+
);
|
627
|
+
}
|
522
628
|
}
|
523
629
|
}
|
524
630
|
flush();
|
@@ -536,7 +642,7 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
536
642
|
|
537
643
|
/**
|
538
644
|
* @param {SerializedType} data data
|
539
|
-
* @param {
|
645
|
+
* @param {object} context context object
|
540
646
|
* @returns {DeserializedType|Promise<DeserializedType>} deserialized data
|
541
647
|
*/
|
542
648
|
deserialize(data, context) {
|
@@ -560,7 +666,7 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
560
666
|
|
561
667
|
/**
|
562
668
|
* @param {SerializedType} data data
|
563
|
-
* @param {
|
669
|
+
* @param {object} context context object
|
564
670
|
* @returns {DeserializedType} deserialized data
|
565
671
|
*/
|
566
672
|
_deserialize(data, context) {
|
@@ -580,9 +686,12 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
580
686
|
currentIsBuffer = Buffer.isBuffer(currentBuffer);
|
581
687
|
}
|
582
688
|
};
|
583
|
-
|
584
|
-
|
585
|
-
|
689
|
+
/**
|
690
|
+
* @param {number} n n
|
691
|
+
* @returns {boolean} true when in current buffer, otherwise false
|
692
|
+
*/
|
693
|
+
const isInCurrentBuffer = n =>
|
694
|
+
currentIsBuffer && n + currentPosition <= currentBuffer.length;
|
586
695
|
const ensureBuffer = () => {
|
587
696
|
if (!currentIsBuffer) {
|
588
697
|
throw new Error(
|
@@ -640,22 +749,30 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
640
749
|
checkOverflow();
|
641
750
|
return res;
|
642
751
|
};
|
752
|
+
/**
|
753
|
+
* @returns {number} U8
|
754
|
+
*/
|
643
755
|
const readU8 = () => {
|
644
756
|
ensureBuffer();
|
645
757
|
/**
|
646
758
|
* There is no need to check remaining buffer size here
|
647
759
|
* since {@link checkOverflow} guarantees at least one byte remaining
|
648
760
|
*/
|
649
|
-
const byte =
|
650
|
-
|
651
|
-
|
761
|
+
const byte =
|
762
|
+
/** @type {Buffer} */
|
763
|
+
(currentBuffer).readUInt8(currentPosition);
|
652
764
|
currentPosition += I8_SIZE;
|
653
765
|
checkOverflow();
|
654
766
|
return byte;
|
655
767
|
};
|
656
|
-
|
657
|
-
|
658
|
-
|
768
|
+
/**
|
769
|
+
* @returns {number} U32
|
770
|
+
*/
|
771
|
+
const readU32 = () => read(I32_SIZE).readUInt32LE(0);
|
772
|
+
/**
|
773
|
+
* @param {number} data data
|
774
|
+
* @param {number} n n
|
775
|
+
*/
|
659
776
|
const readBits = (data, n) => {
|
660
777
|
let mask = 1;
|
661
778
|
while (n !== 0) {
|
@@ -826,6 +943,70 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
826
943
|
result.push(read(1).readInt8(0));
|
827
944
|
}
|
828
945
|
};
|
946
|
+
case BIGINT_I8_HEADER: {
|
947
|
+
const len = 1;
|
948
|
+
return () => {
|
949
|
+
const need = I8_SIZE * len;
|
950
|
+
|
951
|
+
if (isInCurrentBuffer(need)) {
|
952
|
+
for (let i = 0; i < len; i++) {
|
953
|
+
const value =
|
954
|
+
/** @type {Buffer} */
|
955
|
+
(currentBuffer).readInt8(currentPosition);
|
956
|
+
result.push(BigInt(value));
|
957
|
+
currentPosition += I8_SIZE;
|
958
|
+
}
|
959
|
+
checkOverflow();
|
960
|
+
} else {
|
961
|
+
const buf = read(need);
|
962
|
+
for (let i = 0; i < len; i++) {
|
963
|
+
const value = buf.readInt8(i * I8_SIZE);
|
964
|
+
result.push(BigInt(value));
|
965
|
+
}
|
966
|
+
}
|
967
|
+
};
|
968
|
+
}
|
969
|
+
case BIGINT_I32_HEADER: {
|
970
|
+
const len = 1;
|
971
|
+
return () => {
|
972
|
+
const need = I32_SIZE * len;
|
973
|
+
if (isInCurrentBuffer(need)) {
|
974
|
+
for (let i = 0; i < len; i++) {
|
975
|
+
const value = /** @type {Buffer} */ (currentBuffer).readInt32LE(
|
976
|
+
currentPosition
|
977
|
+
);
|
978
|
+
result.push(BigInt(value));
|
979
|
+
currentPosition += I32_SIZE;
|
980
|
+
}
|
981
|
+
checkOverflow();
|
982
|
+
} else {
|
983
|
+
const buf = read(need);
|
984
|
+
for (let i = 0; i < len; i++) {
|
985
|
+
const value = buf.readInt32LE(i * I32_SIZE);
|
986
|
+
result.push(BigInt(value));
|
987
|
+
}
|
988
|
+
}
|
989
|
+
};
|
990
|
+
}
|
991
|
+
case BIGINT_HEADER: {
|
992
|
+
return () => {
|
993
|
+
const len = readU32();
|
994
|
+
if (isInCurrentBuffer(len) && currentPosition + len < 0x7fffffff) {
|
995
|
+
const value = currentBuffer.toString(
|
996
|
+
undefined,
|
997
|
+
currentPosition,
|
998
|
+
currentPosition + len
|
999
|
+
);
|
1000
|
+
|
1001
|
+
result.push(BigInt(value));
|
1002
|
+
currentPosition += len;
|
1003
|
+
checkOverflow();
|
1004
|
+
} else {
|
1005
|
+
const value = read(len).toString();
|
1006
|
+
result.push(BigInt(value));
|
1007
|
+
}
|
1008
|
+
};
|
1009
|
+
}
|
829
1010
|
default:
|
830
1011
|
if (header <= 10) {
|
831
1012
|
return () => result.push(header);
|
@@ -912,13 +1093,10 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
912
1093
|
}
|
913
1094
|
}
|
914
1095
|
};
|
915
|
-
} else {
|
916
|
-
return () => {
|
917
|
-
throw new Error(
|
918
|
-
`Unexpected header byte 0x${header.toString(16)}`
|
919
|
-
);
|
920
|
-
};
|
921
1096
|
}
|
1097
|
+
return () => {
|
1098
|
+
throw new Error(`Unexpected header byte 0x${header.toString(16)}`);
|
1099
|
+
};
|
922
1100
|
}
|
923
1101
|
});
|
924
1102
|
|
@@ -938,6 +1116,7 @@ class BinaryMiddleware extends SerializerMiddleware {
|
|
938
1116
|
}
|
939
1117
|
|
940
1118
|
// avoid leaking memory in context
|
1119
|
+
// eslint-disable-next-line prefer-const
|
941
1120
|
let _result = result;
|
942
1121
|
result = undefined;
|
943
1122
|
return _result;
|
@@ -4,12 +4,24 @@
|
|
4
4
|
|
5
5
|
"use strict";
|
6
6
|
|
7
|
+
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
8
|
+
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
9
|
+
|
7
10
|
class DateObjectSerializer {
|
8
|
-
|
9
|
-
|
11
|
+
/**
|
12
|
+
* @param {Date} obj date
|
13
|
+
* @param {ObjectSerializerContext} context context
|
14
|
+
*/
|
15
|
+
serialize(obj, context) {
|
16
|
+
context.write(obj.getTime());
|
10
17
|
}
|
11
|
-
|
12
|
-
|
18
|
+
|
19
|
+
/**
|
20
|
+
* @param {ObjectDeserializerContext} context context
|
21
|
+
* @returns {Date} date
|
22
|
+
*/
|
23
|
+
deserialize(context) {
|
24
|
+
return new Date(context.read());
|
13
25
|
}
|
14
26
|
}
|
15
27
|
|
@@ -4,21 +4,38 @@
|
|
4
4
|
|
5
5
|
"use strict";
|
6
6
|
|
7
|
+
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
8
|
+
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
9
|
+
|
7
10
|
class ErrorObjectSerializer {
|
11
|
+
/**
|
12
|
+
* @param {ErrorConstructor | EvalErrorConstructor | RangeErrorConstructor | ReferenceErrorConstructor | SyntaxErrorConstructor | TypeErrorConstructor} Type error type
|
13
|
+
*/
|
8
14
|
constructor(Type) {
|
9
15
|
this.Type = Type;
|
10
16
|
}
|
11
17
|
|
12
|
-
|
13
|
-
|
14
|
-
|
18
|
+
/**
|
19
|
+
* @param {Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError} obj error
|
20
|
+
* @param {ObjectSerializerContext} context context
|
21
|
+
*/
|
22
|
+
serialize(obj, context) {
|
23
|
+
context.write(obj.message);
|
24
|
+
context.write(obj.stack);
|
25
|
+
context.write(/** @type {Error & { cause: "unknown" }} */ (obj).cause);
|
15
26
|
}
|
16
27
|
|
17
|
-
|
28
|
+
/**
|
29
|
+
* @param {ObjectDeserializerContext} context context
|
30
|
+
* @returns {Error | EvalError | RangeError | ReferenceError | SyntaxError | TypeError} error
|
31
|
+
*/
|
32
|
+
deserialize(context) {
|
18
33
|
const err = new this.Type();
|
19
34
|
|
20
|
-
err.message = read();
|
21
|
-
err.stack = read();
|
35
|
+
err.message = context.read();
|
36
|
+
err.stack = context.read();
|
37
|
+
/** @type {Error & { cause: "unknown" }} */
|
38
|
+
(err).cause = context.read();
|
22
39
|
|
23
40
|
return err;
|
24
41
|
}
|