webpack 5.97.1 → 5.104.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +368 -434
- package/bin/webpack.js +15 -9
- package/hot/dev-server.js +18 -3
- package/hot/emitter-event-target.js +7 -0
- package/hot/lazy-compilation-node.js +45 -29
- package/hot/lazy-compilation-universal.js +18 -0
- package/hot/lazy-compilation-web.js +15 -5
- package/hot/load-http.js +7 -0
- package/hot/log.js +15 -15
- package/hot/only-dev-server.js +19 -4
- package/hot/poll.js +1 -0
- package/lib/APIPlugin.js +48 -50
- package/lib/AbstractMethodError.js +1 -0
- package/lib/AsyncDependenciesBlock.js +4 -5
- package/lib/AutomaticPrefetchPlugin.js +22 -22
- package/lib/BannerPlugin.js +35 -40
- package/lib/Cache.js +12 -9
- package/lib/CacheFacade.js +13 -13
- package/lib/CaseSensitiveModulesWarning.js +6 -6
- package/lib/Chunk.js +68 -47
- package/lib/ChunkGraph.js +174 -95
- package/lib/ChunkGroup.js +32 -24
- package/lib/ChunkTemplate.js +8 -8
- package/lib/CleanPlugin.js +90 -42
- package/lib/CodeGenerationResults.js +12 -9
- package/lib/CompatibilityPlugin.js +70 -21
- package/lib/Compilation.js +827 -550
- package/lib/Compiler.js +137 -109
- package/lib/ConcatenationScope.js +45 -8
- package/lib/ConditionalInitFragment.js +1 -1
- package/lib/ConstPlugin.js +89 -59
- package/lib/ContextExclusionPlugin.js +5 -4
- package/lib/ContextModule.js +66 -51
- package/lib/ContextModuleFactory.js +51 -30
- package/lib/ContextReplacementPlugin.js +89 -34
- package/lib/CssModule.js +8 -4
- package/lib/DefinePlugin.js +209 -57
- package/lib/DelegatedModule.js +34 -23
- package/lib/DelegatedModuleFactoryPlugin.js +27 -24
- package/lib/DelegatedPlugin.js +4 -2
- package/lib/DependenciesBlock.js +0 -2
- package/lib/Dependency.js +37 -19
- package/lib/DependencyTemplate.js +2 -0
- package/lib/DependencyTemplates.js +5 -6
- package/lib/DllEntryPlugin.js +8 -4
- package/lib/DllModule.js +11 -12
- package/lib/DllModuleFactory.js +2 -2
- package/lib/DllPlugin.js +9 -6
- package/lib/DllReferencePlugin.js +60 -65
- package/lib/DotenvPlugin.js +462 -0
- package/lib/DynamicEntryPlugin.js +8 -8
- package/lib/EntryOptionPlugin.js +8 -6
- package/lib/EntryPlugin.js +5 -3
- package/lib/Entrypoint.js +19 -0
- package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
- package/lib/EnvironmentPlugin.js +26 -19
- package/lib/ErrorHelpers.js +6 -6
- package/lib/EvalDevToolModulePlugin.js +17 -14
- package/lib/EvalSourceMapDevToolPlugin.js +156 -142
- package/lib/ExportsInfo.js +180 -115
- package/lib/ExportsInfoApiPlugin.js +2 -2
- package/lib/ExternalModule.js +256 -102
- package/lib/ExternalModuleFactoryPlugin.js +66 -29
- package/lib/ExternalsPlugin.js +57 -2
- package/lib/FileSystemInfo.js +313 -247
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
- package/lib/FlagDependencyExportsPlugin.js +29 -19
- package/lib/FlagDependencyUsagePlugin.js +9 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +43 -10
- package/lib/GraphHelpers.js +11 -3
- package/lib/HookWebpackError.js +35 -7
- package/lib/HotModuleReplacementPlugin.js +149 -108
- package/lib/HotUpdateChunk.js +0 -3
- package/lib/IgnoreErrorModuleFactory.js +2 -2
- package/lib/IgnorePlugin.js +16 -13
- package/lib/IgnoreWarningsPlugin.js +6 -4
- package/lib/InitFragment.js +41 -23
- package/lib/InvalidDependenciesModuleWarning.js +2 -3
- package/lib/JavascriptMetaInfoPlugin.js +2 -4
- package/lib/LibManifestPlugin.js +12 -13
- package/lib/LoaderOptionsPlugin.js +12 -14
- package/lib/LoaderTargetPlugin.js +5 -3
- package/lib/MainTemplate.js +18 -29
- package/lib/ManifestPlugin.js +235 -0
- package/lib/Module.js +138 -60
- package/lib/ModuleBuildError.js +4 -2
- package/lib/ModuleDependencyError.js +4 -3
- package/lib/ModuleDependencyWarning.js +4 -3
- package/lib/ModuleError.js +1 -1
- package/lib/ModuleFactory.js +10 -3
- package/lib/ModuleFilenameHelpers.js +63 -60
- package/lib/ModuleGraph.js +195 -70
- package/lib/ModuleGraphConnection.js +14 -20
- package/lib/ModuleInfoHeaderPlugin.js +15 -16
- package/lib/ModuleNotFoundError.js +1 -1
- package/lib/ModuleParseError.js +8 -4
- package/lib/ModuleSourceTypeConstants.js +189 -0
- package/lib/ModuleTemplate.js +7 -8
- package/lib/ModuleTypeConstants.js +37 -15
- package/lib/ModuleWarning.js +1 -1
- package/lib/MultiCompiler.js +64 -49
- package/lib/MultiStats.js +19 -14
- package/lib/MultiWatching.js +7 -11
- package/lib/NoEmitOnErrorsPlugin.js +5 -3
- package/lib/NodeStuffPlugin.js +438 -126
- package/lib/NormalModule.js +322 -201
- package/lib/NormalModuleFactory.js +230 -117
- package/lib/NormalModuleReplacementPlugin.js +37 -39
- package/lib/NullFactory.js +3 -2
- package/lib/OptimizationStages.js +1 -1
- package/lib/OptionsApply.js +1 -1
- package/lib/Parser.js +5 -3
- package/lib/PlatformPlugin.js +3 -1
- package/lib/PrefetchPlugin.js +6 -4
- package/lib/ProgressPlugin.js +48 -49
- package/lib/ProvidePlugin.js +7 -5
- package/lib/RawModule.js +26 -12
- package/lib/RecordIdsPlugin.js +88 -110
- package/lib/RequestShortener.js +3 -1
- package/lib/ResolverFactory.js +15 -14
- package/lib/RuntimeGlobals.js +216 -153
- package/lib/RuntimeModule.js +7 -6
- package/lib/RuntimePlugin.js +115 -62
- package/lib/RuntimeTemplate.js +248 -76
- package/lib/SelfModuleFactory.js +2 -2
- package/lib/SizeFormatHelpers.js +2 -2
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
- package/lib/SourceMapDevToolPlugin.js +72 -59
- package/lib/Stats.js +2 -3
- package/lib/Template.js +31 -24
- package/lib/TemplatedPathPlugin.js +24 -21
- package/lib/UseStrictPlugin.js +1 -1
- package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
- package/lib/WarnDeprecatedOptionPlugin.js +7 -8
- package/lib/WarnNoModeSetPlugin.js +3 -1
- package/lib/WatchIgnorePlugin.js +11 -9
- package/lib/Watching.js +27 -29
- package/lib/WebpackError.js +10 -3
- package/lib/WebpackIsIncludedPlugin.js +4 -5
- package/lib/WebpackOptionsApply.js +263 -135
- package/lib/asset/AssetBytesGenerator.js +171 -0
- package/lib/asset/AssetBytesParser.js +37 -0
- package/lib/asset/AssetGenerator.js +285 -223
- package/lib/asset/AssetModulesPlugin.js +103 -41
- package/lib/asset/AssetParser.js +7 -3
- package/lib/asset/AssetSourceGenerator.js +41 -17
- package/lib/asset/RawDataUrlModule.js +17 -9
- package/lib/async-modules/AsyncModuleHelpers.js +52 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
- package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
- package/lib/buildChunkGraph.js +36 -17
- package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
- package/lib/cache/IdleFileCachePlugin.js +22 -20
- package/lib/cache/MemoryCachePlugin.js +3 -3
- package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
- package/lib/cache/PackFileCacheStrategy.js +198 -170
- package/lib/cache/ResolverCachePlugin.js +58 -48
- package/lib/cache/getLazyHashedEtag.js +5 -4
- package/lib/cli.js +197 -39
- package/lib/config/browserslistTargetHandler.js +110 -85
- package/lib/config/defaults.js +514 -113
- package/lib/config/normalization.js +91 -64
- package/lib/config/target.js +30 -18
- package/lib/container/ContainerEntryDependency.js +0 -1
- package/lib/container/ContainerEntryModule.js +16 -15
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/ContainerPlugin.js +5 -6
- package/lib/container/ContainerReferencePlugin.js +27 -30
- package/lib/container/FallbackDependency.js +2 -1
- package/lib/container/FallbackModule.js +19 -14
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +7 -7
- package/lib/container/ModuleFederationPlugin.js +4 -4
- package/lib/container/RemoteModule.js +14 -14
- package/lib/container/RemoteRuntimeModule.js +2 -2
- package/lib/container/options.js +9 -9
- package/lib/css/CssGenerator.js +366 -74
- package/lib/css/CssLoadingRuntimeModule.js +26 -16
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
- package/lib/css/CssModulesPlugin.js +191 -142
- package/lib/css/CssParser.js +1756 -740
- package/lib/css/walkCssTokens.js +180 -67
- package/lib/debug/ProfilingPlugin.js +135 -51
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
- package/lib/dependencies/AMDPlugin.js +18 -11
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
- package/lib/dependencies/AMDRequireContextDependency.js +2 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
- package/lib/dependencies/AMDRuntimeModules.js +3 -1
- package/lib/dependencies/CachedConstDependency.js +24 -18
- package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
- package/lib/dependencies/CommonJsExportsDependency.js +2 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
- package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
- package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
- package/lib/dependencies/CommonJsPlugin.js +29 -18
- package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
- package/lib/dependencies/ConstDependency.js +2 -2
- package/lib/dependencies/ContextDependency.js +10 -5
- package/lib/dependencies/ContextDependencyHelpers.js +21 -13
- package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
- package/lib/dependencies/ContextElementDependency.js +23 -12
- package/lib/dependencies/CssIcssExportDependency.js +402 -22
- package/lib/dependencies/CssIcssImportDependency.js +116 -51
- package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
- package/lib/dependencies/CssImportDependency.js +17 -14
- package/lib/dependencies/CssUrlDependency.js +8 -13
- package/lib/dependencies/DynamicExports.js +19 -19
- package/lib/dependencies/ExportsInfoDependency.js +13 -10
- package/lib/dependencies/ExternalModuleDependency.js +7 -7
- package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
- package/lib/dependencies/HarmonyExports.js +5 -5
- package/lib/dependencies/HarmonyImportDependency.js +92 -45
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
- package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
- package/lib/dependencies/ImportContextDependency.js +15 -1
- package/lib/dependencies/ImportDependency.js +25 -7
- package/lib/dependencies/ImportEagerDependency.js +7 -5
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
- package/lib/dependencies/ImportMetaPlugin.js +172 -20
- package/lib/dependencies/ImportParserPlugin.js +327 -49
- package/lib/dependencies/ImportPhase.js +121 -0
- package/lib/dependencies/ImportPlugin.js +3 -1
- package/lib/dependencies/ImportWeakDependency.js +7 -5
- package/lib/dependencies/JsonExportsDependency.js +54 -28
- package/lib/dependencies/LoaderDependency.js +0 -3
- package/lib/dependencies/LoaderImportDependency.js +0 -3
- package/lib/dependencies/LoaderPlugin.js +24 -25
- package/lib/dependencies/LocalModulesHelpers.js +4 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
- package/lib/dependencies/ModuleDependency.js +14 -13
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/ProvidedDependency.js +8 -10
- package/lib/dependencies/PureExpressionDependency.js +1 -2
- package/lib/dependencies/RequireContextDependency.js +2 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
- package/lib/dependencies/RequireContextPlugin.js +5 -2
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
- package/lib/dependencies/RequireEnsurePlugin.js +6 -6
- package/lib/dependencies/RequireIncludeDependency.js +2 -2
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
- package/lib/dependencies/RequireIncludePlugin.js +1 -0
- package/lib/dependencies/RequireResolveContextDependency.js +1 -1
- package/lib/dependencies/RequireResolveDependency.js +3 -3
- package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
- package/lib/dependencies/StaticExportsDependency.js +3 -5
- package/lib/dependencies/SystemPlugin.js +4 -4
- package/lib/dependencies/URLContextDependency.js +65 -0
- package/lib/dependencies/URLDependency.js +3 -8
- package/lib/dependencies/URLPlugin.js +18 -159
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
- package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
- package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
- package/lib/dependencies/WorkerDependency.js +8 -6
- package/lib/dependencies/WorkerPlugin.js +131 -67
- package/lib/dependencies/getFunctionExpression.js +2 -2
- package/lib/dependencies/processExportInfo.js +4 -4
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
- package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
- package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
- package/lib/formatLocation.js +2 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
- package/lib/hmr/LazyCompilationPlugin.js +67 -54
- package/lib/hmr/lazyCompilationBackend.js +23 -18
- package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
- package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
- package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
- package/lib/ids/HashedModuleIdsPlugin.js +15 -13
- package/lib/ids/IdHelpers.js +66 -49
- package/lib/ids/NamedChunkIdsPlugin.js +14 -17
- package/lib/ids/NamedModuleIdsPlugin.js +12 -14
- package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
- package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
- package/lib/ids/SyncModuleIdsPlugin.js +18 -13
- package/lib/index.js +54 -14
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
- package/lib/javascript/BasicEvaluatedExpression.js +26 -18
- package/lib/javascript/ChunkFormatHelpers.js +70 -0
- package/lib/javascript/ChunkHelpers.js +17 -5
- package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
- package/lib/javascript/JavascriptGenerator.js +122 -100
- package/lib/javascript/JavascriptModulesPlugin.js +332 -152
- package/lib/javascript/JavascriptParser.js +1488 -1052
- package/lib/javascript/JavascriptParserHelpers.js +48 -47
- package/lib/javascript/StartupHelpers.js +23 -22
- package/lib/json/JsonData.js +4 -4
- package/lib/json/JsonGenerator.js +66 -32
- package/lib/json/JsonModulesPlugin.js +16 -6
- package/lib/json/JsonParser.js +23 -8
- package/lib/library/AbstractLibraryPlugin.js +45 -10
- package/lib/library/AmdLibraryPlugin.js +7 -5
- package/lib/library/AssignLibraryPlugin.js +71 -17
- package/lib/library/EnableLibraryPlugin.js +51 -25
- package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
- package/lib/library/JsonpLibraryPlugin.js +5 -2
- package/lib/library/ModuleLibraryPlugin.js +230 -18
- package/lib/library/SystemLibraryPlugin.js +29 -11
- package/lib/library/UmdLibraryPlugin.js +35 -32
- package/lib/logging/Logger.js +18 -15
- package/lib/logging/createConsoleLogger.js +27 -27
- package/lib/logging/runtime.js +11 -11
- package/lib/logging/truncateArgs.js +5 -5
- package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
- package/lib/node/NodeEnvironmentPlugin.js +9 -3
- package/lib/node/NodeTargetPlugin.js +9 -1
- package/lib/node/NodeTemplatePlugin.js +2 -2
- package/lib/node/NodeWatchFileSystem.js +4 -4
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
- package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
- package/lib/node/nodeConsole.js +12 -7
- package/lib/optimize/AggressiveMergingPlugin.js +46 -47
- package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
- package/lib/optimize/ConcatenatedModule.js +620 -251
- package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
- package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
- package/lib/optimize/InnerGraph.js +139 -124
- package/lib/optimize/InnerGraphPlugin.js +29 -24
- package/lib/optimize/LimitChunkCountPlugin.js +32 -8
- package/lib/optimize/MangleExportsPlugin.js +22 -22
- package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
- package/lib/optimize/MinChunkSizePlugin.js +12 -7
- package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
- package/lib/optimize/RealContentHashPlugin.js +58 -44
- package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
- package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
- package/lib/optimize/RuntimeChunkPlugin.js +22 -25
- package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
- package/lib/optimize/SplitChunksPlugin.js +209 -158
- package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +8 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/rules/BasicEffectRulePlugin.js +14 -5
- package/lib/rules/BasicMatcherRulePlugin.js +18 -7
- package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
- package/lib/rules/RuleSetCompiler.js +73 -32
- package/lib/rules/UseEffectRulePlugin.js +61 -25
- package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
- package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
- package/lib/runtime/BaseUriRuntimeModule.js +2 -2
- package/lib/runtime/CompatRuntimeModule.js +0 -1
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
- package/lib/runtime/PublicPathRuntimeModule.js +2 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
- package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
- package/lib/runtime/SystemContextRuntimeModule.js +0 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
- package/lib/schemes/DataUriPlugin.js +9 -31
- package/lib/schemes/FileUriPlugin.js +11 -6
- package/lib/schemes/HttpUriPlugin.js +381 -261
- package/lib/schemes/VirtualUrlPlugin.js +222 -0
- package/lib/serialization/AggregateErrorSerializer.js +41 -0
- package/lib/serialization/BinaryMiddleware.js +51 -33
- package/lib/serialization/ErrorObjectSerializer.js +7 -2
- package/lib/serialization/FileMiddleware.js +101 -71
- package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
- package/lib/serialization/ObjectMiddleware.js +130 -54
- package/lib/serialization/PlainObjectSerializer.js +1 -1
- package/lib/serialization/Serializer.js +38 -20
- package/lib/serialization/SerializerMiddleware.js +121 -49
- package/lib/serialization/SingleItemMiddleware.js +9 -7
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedModule.js +9 -9
- package/lib/sharing/ConsumeSharedPlugin.js +14 -14
- package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
- package/lib/sharing/ProvideSharedModule.js +9 -11
- package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
- package/lib/sharing/ProvideSharedPlugin.js +15 -10
- package/lib/sharing/SharePlugin.js +3 -4
- package/lib/sharing/ShareRuntimeModule.js +7 -6
- package/lib/sharing/resolveMatchedConfigs.js +27 -13
- package/lib/sharing/utils.js +37 -43
- package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
- package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
- package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
- package/lib/stats/StatsFactory.js +75 -32
- package/lib/stats/StatsPrinter.js +71 -51
- package/lib/url/URLParserPlugin.js +264 -0
- package/lib/util/ArrayHelpers.js +6 -8
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +11 -10
- package/lib/util/Hash.js +37 -5
- package/lib/util/IterableHelpers.js +4 -4
- package/lib/util/LazyBucketSortedSet.js +46 -27
- package/lib/util/LazySet.js +16 -10
- package/lib/util/MapHelpers.js +1 -1
- package/lib/util/ParallelismFactorCalculator.js +2 -2
- package/lib/util/Semaphore.js +3 -3
- package/lib/util/SetHelpers.js +6 -6
- package/lib/util/SortableSet.js +11 -9
- package/lib/util/StackedCacheMap.js +2 -2
- package/lib/util/StackedMap.js +3 -3
- package/lib/util/StringXor.js +2 -1
- package/lib/util/TupleQueue.js +11 -8
- package/lib/util/TupleSet.js +44 -19
- package/lib/util/URLAbsoluteSpecifier.js +3 -4
- package/lib/util/WeakTupleMap.js +56 -42
- package/lib/util/binarySearchBounds.js +4 -3
- package/lib/util/chainedImports.js +3 -1
- package/lib/util/cleverMerge.js +171 -107
- package/lib/util/comparators.js +265 -162
- package/lib/util/compileBooleanMatcher.js +120 -41
- package/lib/util/concatenate.js +20 -16
- package/lib/util/conventions.js +73 -74
- package/lib/util/create-schema-validation.js +8 -8
- package/lib/util/createHash.js +32 -135
- package/lib/util/dataURL.js +39 -0
- package/lib/util/deprecation.js +119 -116
- package/lib/util/deterministicGrouping.js +56 -47
- package/lib/util/extractSourceMap.js +319 -0
- package/lib/util/extractUrlAndGlobal.js +1 -1
- package/lib/util/findGraphRoots.js +19 -9
- package/lib/util/fs.js +169 -141
- package/lib/util/hash/BatchedHash.js +50 -10
- package/lib/util/hash/BulkUpdateHash.js +138 -0
- package/lib/util/hash/DebugHash.js +75 -0
- package/lib/util/hash/hash-digest.js +216 -0
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +59 -17
- package/lib/util/identifier.js +124 -61
- package/lib/util/internalSerializables.js +4 -6
- package/lib/util/magicComment.js +9 -5
- package/lib/util/makeSerializable.js +2 -2
- package/lib/util/memoize.js +5 -2
- package/lib/util/objectToMap.js +3 -2
- package/lib/util/processAsyncTree.js +5 -5
- package/lib/util/propertyAccess.js +1 -1
- package/lib/util/propertyName.js +2 -3
- package/lib/util/registerExternalSerializer.js +16 -20
- package/lib/util/removeBOM.js +25 -0
- package/lib/util/runtime.js +72 -56
- package/lib/util/semver.js +44 -33
- package/lib/util/serialization.js +56 -56
- package/lib/util/smartGrouping.js +42 -27
- package/lib/util/source.js +5 -4
- package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
- package/lib/validateSchema.js +7 -9
- package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
- package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
- package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
- package/lib/wasm-sync/WebAssemblyParser.js +10 -17
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
- package/lib/web/FetchCompileWasmPlugin.js +6 -8
- package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
- package/lib/web/JsonpTemplatePlugin.js +0 -1
- package/lib/webpack.js +107 -87
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
- package/module.d.ts +5 -0
- package/package.json +149 -129
- package/schemas/WebpackOptions.check.d.ts +1 -1
- package/schemas/WebpackOptions.check.js +2 -2
- package/schemas/WebpackOptions.json +543 -190
- package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
- package/schemas/plugins/BannerPlugin.check.js +2 -2
- package/schemas/plugins/BannerPlugin.json +4 -0
- package/schemas/plugins/DllPlugin.check.d.ts +1 -1
- package/schemas/plugins/DllPlugin.check.js +1 -1
- package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
- package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
- package/schemas/plugins/ManifestPlugin.check.js +6 -0
- package/schemas/plugins/ManifestPlugin.json +98 -0
- package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
- package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
- package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
- package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
- package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
- package/schemas/plugins/container/ExternalsType.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
- package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +2 -2
- package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
- package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
- package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5115 -1863
- package/SECURITY.md +0 -9
- package/lib/ModuleSourceTypesConstants.js +0 -112
- package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
- package/lib/library/ModernModuleLibraryPlugin.js +0 -144
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
- package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.json +0 -12
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
+
const { DEFAULTS } = require("../config/defaults");
|
|
7
8
|
const createHash = require("../util/createHash");
|
|
9
|
+
const AggregateErrorSerializer = require("./AggregateErrorSerializer");
|
|
8
10
|
const ArraySerializer = require("./ArraySerializer");
|
|
9
11
|
const DateObjectSerializer = require("./DateObjectSerializer");
|
|
10
12
|
const ErrorObjectSerializer = require("./ErrorObjectSerializer");
|
|
@@ -15,11 +17,13 @@ const RegExpObjectSerializer = require("./RegExpObjectSerializer");
|
|
|
15
17
|
const SerializerMiddleware = require("./SerializerMiddleware");
|
|
16
18
|
const SetObjectSerializer = require("./SetObjectSerializer");
|
|
17
19
|
|
|
20
|
+
/** @typedef {import("../logging/Logger").Logger} Logger */
|
|
18
21
|
/** @typedef {typeof import("../util/Hash")} Hash */
|
|
22
|
+
/** @typedef {import("./SerializerMiddleware").LazyOptions} LazyOptions */
|
|
19
23
|
/** @typedef {import("./types").ComplexSerializableType} ComplexSerializableType */
|
|
20
24
|
/** @typedef {import("./types").PrimitiveSerializableType} PrimitiveSerializableType */
|
|
21
25
|
|
|
22
|
-
/** @typedef {new (...params:
|
|
26
|
+
/** @typedef {new (...params: EXPECTED_ANY[]) => EXPECTED_ANY} Constructor */
|
|
23
27
|
|
|
24
28
|
/*
|
|
25
29
|
|
|
@@ -43,24 +47,38 @@ Technically any value can be used.
|
|
|
43
47
|
|
|
44
48
|
*/
|
|
45
49
|
|
|
50
|
+
/**
|
|
51
|
+
* @typedef {object} ObjectSerializerSnapshot
|
|
52
|
+
* @property {number} length
|
|
53
|
+
* @property {number} cycleStackSize
|
|
54
|
+
* @property {number} referenceableSize
|
|
55
|
+
* @property {number} currentPos
|
|
56
|
+
* @property {number} objectTypeLookupSize
|
|
57
|
+
* @property {number} currentPosTypeLookup
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
/** @typedef {EXPECTED_OBJECT | string} ReferenceableItem */
|
|
61
|
+
|
|
46
62
|
/**
|
|
47
63
|
* @typedef {object} ObjectSerializerContext
|
|
48
|
-
* @property {
|
|
49
|
-
* @property {(
|
|
50
|
-
* @property {(
|
|
51
|
-
* @property {
|
|
64
|
+
* @property {(value: EXPECTED_ANY) => void} write
|
|
65
|
+
* @property {(value: ReferenceableItem) => void} setCircularReference
|
|
66
|
+
* @property {() => ObjectSerializerSnapshot} snapshot
|
|
67
|
+
* @property {(snapshot: ObjectSerializerSnapshot) => void} rollback
|
|
68
|
+
* @property {((item: EXPECTED_ANY | (() => EXPECTED_ANY)) => void)=} writeLazy
|
|
69
|
+
* @property {((item: (EXPECTED_ANY | (() => EXPECTED_ANY)), obj: LazyOptions | undefined) => import("./SerializerMiddleware").LazyFunction<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY, LazyOptions>)=} writeSeparate
|
|
52
70
|
*/
|
|
53
71
|
|
|
54
72
|
/**
|
|
55
73
|
* @typedef {object} ObjectDeserializerContext
|
|
56
|
-
* @property {
|
|
57
|
-
* @property {
|
|
74
|
+
* @property {() => EXPECTED_ANY} read
|
|
75
|
+
* @property {(value: ReferenceableItem) => void} setCircularReference
|
|
58
76
|
*/
|
|
59
77
|
|
|
60
78
|
/**
|
|
61
79
|
* @typedef {object} ObjectSerializer
|
|
62
|
-
* @property {
|
|
63
|
-
* @property {
|
|
80
|
+
* @property {(value: EXPECTED_ANY, context: ObjectSerializerContext) => void} serialize
|
|
81
|
+
* @property {(context: ObjectDeserializerContext) => EXPECTED_ANY} deserialize
|
|
64
82
|
*/
|
|
65
83
|
|
|
66
84
|
/**
|
|
@@ -99,7 +117,7 @@ const setMapSize = (map, size) => {
|
|
|
99
117
|
const toHash = (buffer, hashFunction) => {
|
|
100
118
|
const hash = createHash(hashFunction);
|
|
101
119
|
hash.update(buffer);
|
|
102
|
-
return
|
|
120
|
+
return hash.digest("latin1");
|
|
103
121
|
};
|
|
104
122
|
|
|
105
123
|
const ESCAPE = null;
|
|
@@ -109,7 +127,10 @@ const ESCAPE_UNDEFINED = false;
|
|
|
109
127
|
|
|
110
128
|
const CURRENT_VERSION = 2;
|
|
111
129
|
|
|
112
|
-
/** @
|
|
130
|
+
/** @typedef {{ request?: string, name?: string | number | null, serializer?: ObjectSerializer }} SerializerConfig */
|
|
131
|
+
/** @typedef {{ request?: string, name?: string | number | null, serializer: ObjectSerializer }} SerializerConfigWithSerializer */
|
|
132
|
+
|
|
133
|
+
/** @type {Map<Constructor | null, SerializerConfig>} */
|
|
113
134
|
const serializers = new Map();
|
|
114
135
|
/** @type {Map<string | number, ObjectSerializer>} */
|
|
115
136
|
const serializerInversed = new Map();
|
|
@@ -119,7 +140,9 @@ const loadedRequests = new Set();
|
|
|
119
140
|
|
|
120
141
|
const NOT_SERIALIZABLE = {};
|
|
121
142
|
|
|
143
|
+
/** @type {Map<Constructor | null, ObjectSerializer>} */
|
|
122
144
|
const jsTypes = new Map();
|
|
145
|
+
|
|
123
146
|
jsTypes.set(Object, new PlainObjectSerializer());
|
|
124
147
|
jsTypes.set(Array, new ArraySerializer());
|
|
125
148
|
jsTypes.set(null, new NullPrototypeObjectSerializer());
|
|
@@ -134,15 +157,24 @@ jsTypes.set(ReferenceError, new ErrorObjectSerializer(ReferenceError));
|
|
|
134
157
|
jsTypes.set(SyntaxError, new ErrorObjectSerializer(SyntaxError));
|
|
135
158
|
jsTypes.set(TypeError, new ErrorObjectSerializer(TypeError));
|
|
136
159
|
|
|
137
|
-
//
|
|
138
|
-
|
|
160
|
+
// eslint-disable-next-line n/no-unsupported-features/es-builtins, n/no-unsupported-features/es-syntax
|
|
161
|
+
if (typeof AggregateError !== "undefined") {
|
|
162
|
+
jsTypes.set(
|
|
163
|
+
// eslint-disable-next-line n/no-unsupported-features/es-builtins, n/no-unsupported-features/es-syntax
|
|
164
|
+
AggregateError,
|
|
165
|
+
new AggregateErrorSerializer()
|
|
166
|
+
);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
// If in a sandboxed environment (e.g. jest), this escapes the sandbox and registers
|
|
170
|
+
// real Object and Array types to. These types may occur in the wild too, e.g. when
|
|
139
171
|
// using Structured Clone in postMessage.
|
|
140
172
|
// eslint-disable-next-line n/exports-style
|
|
141
173
|
if (exports.constructor !== Object) {
|
|
142
|
-
// eslint-disable-next-line
|
|
143
|
-
const Obj = /** @type {
|
|
144
|
-
const Fn = /** @type {
|
|
145
|
-
for (const [type, config] of
|
|
174
|
+
// eslint-disable-next-line n/exports-style
|
|
175
|
+
const Obj = /** @type {ObjectConstructor} */ (exports.constructor);
|
|
176
|
+
const Fn = /** @type {FunctionConstructor} */ (Obj.constructor);
|
|
177
|
+
for (const [type, config] of jsTypes) {
|
|
146
178
|
if (type) {
|
|
147
179
|
const Type = new Fn(`return ${type.name};`)();
|
|
148
180
|
jsTypes.set(Type, config);
|
|
@@ -171,17 +203,19 @@ for (const { request, name, serializer } of serializers.values()) {
|
|
|
171
203
|
/** @type {Map<RegExp, (request: string) => boolean>} */
|
|
172
204
|
const loaders = new Map();
|
|
173
205
|
|
|
206
|
+
/** @typedef {ComplexSerializableType[]} DeserializedType */
|
|
207
|
+
/** @typedef {PrimitiveSerializableType[]} SerializedType */
|
|
208
|
+
/** @typedef {{ logger: Logger }} Context */
|
|
209
|
+
|
|
174
210
|
/**
|
|
175
|
-
* @
|
|
176
|
-
* @typedef {PrimitiveSerializableType[]} SerializedType
|
|
177
|
-
* @extends {SerializerMiddleware<DeserializedType, SerializedType>}
|
|
211
|
+
* @extends {SerializerMiddleware<DeserializedType, SerializedType, Context>}
|
|
178
212
|
*/
|
|
179
213
|
class ObjectMiddleware extends SerializerMiddleware {
|
|
180
214
|
/**
|
|
181
|
-
* @param {
|
|
215
|
+
* @param {(context: ObjectSerializerContext | ObjectDeserializerContext) => void} extendContext context extensions
|
|
182
216
|
* @param {string | Hash} hashFunction hash function to use
|
|
183
217
|
*/
|
|
184
|
-
constructor(extendContext, hashFunction =
|
|
218
|
+
constructor(extendContext, hashFunction = DEFAULTS.HASH_FUNCTION) {
|
|
185
219
|
super();
|
|
186
220
|
this.extendContext = extendContext;
|
|
187
221
|
this._hashFunction = hashFunction;
|
|
@@ -189,7 +223,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
189
223
|
|
|
190
224
|
/**
|
|
191
225
|
* @param {RegExp} regExp RegExp for which the request is tested
|
|
192
|
-
* @param {
|
|
226
|
+
* @param {(request: string) => boolean} loader loader to load the request, returns true when successful
|
|
193
227
|
* @returns {void}
|
|
194
228
|
*/
|
|
195
229
|
static registerLoader(regExp, loader) {
|
|
@@ -241,6 +275,10 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
241
275
|
serializers.set(Constructor, NOT_SERIALIZABLE);
|
|
242
276
|
}
|
|
243
277
|
|
|
278
|
+
/**
|
|
279
|
+
* @param {Constructor} object for serialization
|
|
280
|
+
* @returns {SerializerConfigWithSerializer} Serializer config
|
|
281
|
+
*/
|
|
244
282
|
static getSerializerFor(object) {
|
|
245
283
|
const proto = Object.getPrototypeOf(object);
|
|
246
284
|
let c;
|
|
@@ -260,12 +298,12 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
260
298
|
if (!config) throw new Error(`No serializer registered for ${c.name}`);
|
|
261
299
|
if (config === NOT_SERIALIZABLE) throw NOT_SERIALIZABLE;
|
|
262
300
|
|
|
263
|
-
return config;
|
|
301
|
+
return /** @type {SerializerConfigWithSerializer} */ (config);
|
|
264
302
|
}
|
|
265
303
|
|
|
266
304
|
/**
|
|
267
305
|
* @param {string} request request
|
|
268
|
-
* @param {
|
|
306
|
+
* @param {string} name name
|
|
269
307
|
* @returns {ObjectSerializer} serializer
|
|
270
308
|
*/
|
|
271
309
|
static getDeserializerFor(request, name) {
|
|
@@ -292,15 +330,19 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
292
330
|
|
|
293
331
|
/**
|
|
294
332
|
* @param {DeserializedType} data data
|
|
295
|
-
* @param {
|
|
296
|
-
* @returns {SerializedType|Promise<SerializedType>} serialized data
|
|
333
|
+
* @param {Context} context context object
|
|
334
|
+
* @returns {SerializedType | Promise<SerializedType> | null} serialized data
|
|
297
335
|
*/
|
|
298
336
|
serialize(data, context) {
|
|
299
|
-
/** @type {
|
|
337
|
+
/** @type {PrimitiveSerializableType[]} */
|
|
300
338
|
let result = [CURRENT_VERSION];
|
|
301
339
|
let currentPos = 0;
|
|
340
|
+
/** @type {Map<ReferenceableItem, number>} */
|
|
302
341
|
let referenceable = new Map();
|
|
303
|
-
|
|
342
|
+
/**
|
|
343
|
+
* @param {ReferenceableItem} item referenceable item
|
|
344
|
+
*/
|
|
345
|
+
const addReferenceable = (item) => {
|
|
304
346
|
referenceable.set(item, currentPos++);
|
|
305
347
|
};
|
|
306
348
|
let bufferDedupeMap = new Map();
|
|
@@ -308,7 +350,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
308
350
|
* @param {Buffer} buf buffer
|
|
309
351
|
* @returns {Buffer} deduped buffer
|
|
310
352
|
*/
|
|
311
|
-
const dedupeBuffer = buf => {
|
|
353
|
+
const dedupeBuffer = (buf) => {
|
|
312
354
|
const len = buf.length;
|
|
313
355
|
const entry = bufferDedupeMap.get(len);
|
|
314
356
|
if (entry === undefined) {
|
|
@@ -368,11 +410,15 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
368
410
|
let currentPosTypeLookup = 0;
|
|
369
411
|
let objectTypeLookup = new Map();
|
|
370
412
|
const cycleStack = new Set();
|
|
371
|
-
|
|
372
|
-
|
|
413
|
+
/**
|
|
414
|
+
* @param {ComplexSerializableType} item item to stack
|
|
415
|
+
* @returns {string} stack
|
|
416
|
+
*/
|
|
417
|
+
const stackToString = (item) => {
|
|
418
|
+
const arr = [...cycleStack];
|
|
373
419
|
arr.push(item);
|
|
374
420
|
return arr
|
|
375
|
-
.map(item => {
|
|
421
|
+
.map((item) => {
|
|
376
422
|
if (typeof item === "string") {
|
|
377
423
|
if (item.length > 100) {
|
|
378
424
|
return `String ${JSON.stringify(item.slice(0, 100)).slice(
|
|
@@ -392,11 +438,13 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
392
438
|
}
|
|
393
439
|
if (typeof item === "object" && item !== null) {
|
|
394
440
|
if (item.constructor) {
|
|
395
|
-
if (item.constructor === Object)
|
|
441
|
+
if (item.constructor === Object) {
|
|
396
442
|
return `Object { ${Object.keys(item).join(", ")} }`;
|
|
443
|
+
}
|
|
397
444
|
if (item.constructor === Map) return `Map { ${item.size} items }`;
|
|
398
|
-
if (item.constructor === Array)
|
|
445
|
+
if (item.constructor === Array) {
|
|
399
446
|
return `Array { ${item.length} items }`;
|
|
447
|
+
}
|
|
400
448
|
if (item.constructor === Set) return `Set { ${item.size} items }`;
|
|
401
449
|
if (item.constructor === RegExp) return item.toString();
|
|
402
450
|
return `${item.constructor.name}`;
|
|
@@ -411,21 +459,23 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
411
459
|
try {
|
|
412
460
|
return `${item}`;
|
|
413
461
|
} catch (err) {
|
|
414
|
-
return `(${err.message})`;
|
|
462
|
+
return `(${/** @type {Error} */ (err).message})`;
|
|
415
463
|
}
|
|
416
464
|
})
|
|
417
465
|
.join(" -> ");
|
|
418
466
|
};
|
|
419
467
|
/** @type {WeakSet<Error>} */
|
|
420
468
|
let hasDebugInfoAttached;
|
|
469
|
+
/** @type {ObjectSerializerContext} */
|
|
421
470
|
let ctx = {
|
|
422
|
-
write(value
|
|
471
|
+
write(value) {
|
|
423
472
|
try {
|
|
424
473
|
process(value);
|
|
425
474
|
} catch (err) {
|
|
426
475
|
if (err !== NOT_SERIALIZABLE) {
|
|
427
|
-
if (hasDebugInfoAttached === undefined)
|
|
476
|
+
if (hasDebugInfoAttached === undefined) {
|
|
428
477
|
hasDebugInfoAttached = new WeakSet();
|
|
478
|
+
}
|
|
429
479
|
if (!hasDebugInfoAttached.has(/** @type {Error} */ (err))) {
|
|
430
480
|
/** @type {Error} */
|
|
431
481
|
(err).message += `\nwhile serializing ${stackToString(value)}`;
|
|
@@ -459,7 +509,10 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
459
509
|
...context
|
|
460
510
|
};
|
|
461
511
|
this.extendContext(ctx);
|
|
462
|
-
|
|
512
|
+
/**
|
|
513
|
+
* @param {ComplexSerializableType} item item to serialize
|
|
514
|
+
*/
|
|
515
|
+
const process = (item) => {
|
|
463
516
|
if (Buffer.isBuffer(item)) {
|
|
464
517
|
// check if we can emit a reference
|
|
465
518
|
const ref = referenceable.get(item);
|
|
@@ -479,7 +532,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
479
532
|
}
|
|
480
533
|
addReferenceable(item);
|
|
481
534
|
|
|
482
|
-
result.push(item);
|
|
535
|
+
result.push(/** @type {Buffer} */ (item));
|
|
483
536
|
} else if (item === ESCAPE) {
|
|
484
537
|
result.push(ESCAPE, ESCAPE_ESCAPE_VALUE);
|
|
485
538
|
} else if (
|
|
@@ -499,8 +552,10 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
499
552
|
);
|
|
500
553
|
}
|
|
501
554
|
|
|
502
|
-
const { request, name, serializer } =
|
|
503
|
-
|
|
555
|
+
const { request, name, serializer } = ObjectMiddleware.getSerializerFor(
|
|
556
|
+
/** @type {Constructor} */
|
|
557
|
+
(item)
|
|
558
|
+
);
|
|
504
559
|
const key = `${request}/${name}`;
|
|
505
560
|
const lastIndex = objectTypeLookup.get(key);
|
|
506
561
|
|
|
@@ -545,11 +600,14 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
545
600
|
|
|
546
601
|
result.push(item);
|
|
547
602
|
} else if (typeof item === "function") {
|
|
548
|
-
if (!SerializerMiddleware.isLazy(item))
|
|
603
|
+
if (!SerializerMiddleware.isLazy(item)) {
|
|
549
604
|
throw new Error(`Unexpected function ${item}`);
|
|
550
|
-
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
/** @type {SerializedType | undefined} */
|
|
551
608
|
const serializedData =
|
|
552
609
|
SerializerMiddleware.getLazySerializedValue(item);
|
|
610
|
+
|
|
553
611
|
if (serializedData !== undefined) {
|
|
554
612
|
if (typeof serializedData === "function") {
|
|
555
613
|
result.push(serializedData);
|
|
@@ -559,9 +617,13 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
559
617
|
} else if (SerializerMiddleware.isLazy(item, this)) {
|
|
560
618
|
throw new Error("Not implemented");
|
|
561
619
|
} else {
|
|
562
|
-
const data =
|
|
563
|
-
|
|
564
|
-
|
|
620
|
+
const data =
|
|
621
|
+
/** @type {() => PrimitiveSerializableType[] | Promise<PrimitiveSerializableType[]>} */
|
|
622
|
+
(
|
|
623
|
+
SerializerMiddleware.serializeLazy(item, (data) =>
|
|
624
|
+
this.serialize([data], context)
|
|
625
|
+
)
|
|
626
|
+
);
|
|
565
627
|
SerializerMiddleware.setLazySerializedValue(item, data);
|
|
566
628
|
result.push(data);
|
|
567
629
|
}
|
|
@@ -599,30 +661,39 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
599
661
|
|
|
600
662
|
/**
|
|
601
663
|
* @param {SerializedType} data data
|
|
602
|
-
* @param {
|
|
603
|
-
* @returns {DeserializedType|Promise<DeserializedType>} deserialized data
|
|
664
|
+
* @param {Context} context context object
|
|
665
|
+
* @returns {DeserializedType | Promise<DeserializedType>} deserialized data
|
|
604
666
|
*/
|
|
605
667
|
deserialize(data, context) {
|
|
606
668
|
let currentDataPos = 0;
|
|
607
669
|
const read = () => {
|
|
608
|
-
if (currentDataPos >= data.length)
|
|
670
|
+
if (currentDataPos >= data.length) {
|
|
609
671
|
throw new Error("Unexpected end of stream");
|
|
672
|
+
}
|
|
610
673
|
|
|
611
674
|
return data[currentDataPos++];
|
|
612
675
|
};
|
|
613
676
|
|
|
614
|
-
if (read() !== CURRENT_VERSION)
|
|
677
|
+
if (read() !== CURRENT_VERSION) {
|
|
615
678
|
throw new Error("Version mismatch, serializer changed");
|
|
679
|
+
}
|
|
616
680
|
|
|
617
681
|
let currentPos = 0;
|
|
682
|
+
/** @type {ReferenceableItem[]} */
|
|
618
683
|
let referenceable = [];
|
|
619
|
-
|
|
684
|
+
/**
|
|
685
|
+
* @param {ReferenceableItem} item referenceable item
|
|
686
|
+
*/
|
|
687
|
+
const addReferenceable = (item) => {
|
|
620
688
|
referenceable.push(item);
|
|
621
689
|
currentPos++;
|
|
622
690
|
};
|
|
623
691
|
let currentPosTypeLookup = 0;
|
|
692
|
+
/** @type {ObjectSerializer[]} */
|
|
624
693
|
let objectTypeLookup = [];
|
|
694
|
+
/** @type {ComplexSerializableType[]} */
|
|
625
695
|
let result = [];
|
|
696
|
+
/** @type {ObjectDeserializerContext} */
|
|
626
697
|
let ctx = {
|
|
627
698
|
read() {
|
|
628
699
|
return decodeValue();
|
|
@@ -633,6 +704,9 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
633
704
|
...context
|
|
634
705
|
};
|
|
635
706
|
this.extendContext(ctx);
|
|
707
|
+
/**
|
|
708
|
+
* @returns {ComplexSerializableType} deserialize value
|
|
709
|
+
*/
|
|
636
710
|
const decodeValue = () => {
|
|
637
711
|
const item = read();
|
|
638
712
|
|
|
@@ -724,7 +798,7 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
724
798
|
const name = !serializerEntry
|
|
725
799
|
? "unknown"
|
|
726
800
|
: !serializerEntry[1].request
|
|
727
|
-
? serializerEntry[0].name
|
|
801
|
+
? /** @type {Constructor[]} */ (serializerEntry)[0].name
|
|
728
802
|
: serializerEntry[1].name
|
|
729
803
|
? `${serializerEntry[1].request} ${serializerEntry[1].name}`
|
|
730
804
|
: serializerEntry[1].request;
|
|
@@ -746,7 +820,9 @@ class ObjectMiddleware extends SerializerMiddleware {
|
|
|
746
820
|
} else if (typeof item === "function") {
|
|
747
821
|
return SerializerMiddleware.deserializeLazy(
|
|
748
822
|
item,
|
|
749
|
-
data =>
|
|
823
|
+
(data) =>
|
|
824
|
+
/** @type {[DeserializedType]} */
|
|
825
|
+
(this.deserialize(data, context))[0]
|
|
750
826
|
);
|
|
751
827
|
} else {
|
|
752
828
|
return item;
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
/** @typedef {import("./ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
8
8
|
/** @typedef {import("./ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
9
9
|
|
|
10
|
-
/** @typedef {
|
|
10
|
+
/** @typedef {EXPECTED_FUNCTION} CacheAssoc */
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* @template T
|
|
@@ -5,59 +5,77 @@
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* @template T, K
|
|
9
|
-
* @typedef {import("./SerializerMiddleware")<T, K>} SerializerMiddleware
|
|
8
|
+
* @template T, K, C
|
|
9
|
+
* @typedef {import("./SerializerMiddleware")<T, K, C>} SerializerMiddleware
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
+
/**
|
|
13
|
+
* @template DeserializedValue
|
|
14
|
+
* @template SerializedValue
|
|
15
|
+
* @template Context
|
|
16
|
+
*/
|
|
12
17
|
class Serializer {
|
|
13
18
|
/**
|
|
14
|
-
* @param {SerializerMiddleware<
|
|
15
|
-
* @param {
|
|
19
|
+
* @param {SerializerMiddleware<EXPECTED_ANY, EXPECTED_ANY, EXPECTED_ANY>[]} middlewares serializer middlewares
|
|
20
|
+
* @param {Context=} context context
|
|
16
21
|
*/
|
|
17
22
|
constructor(middlewares, context) {
|
|
18
|
-
this.serializeMiddlewares = middlewares
|
|
19
|
-
this.deserializeMiddlewares = middlewares.
|
|
23
|
+
this.serializeMiddlewares = [...middlewares];
|
|
24
|
+
this.deserializeMiddlewares = [...middlewares].reverse();
|
|
20
25
|
this.context = context;
|
|
21
26
|
}
|
|
22
27
|
|
|
23
28
|
/**
|
|
24
|
-
* @
|
|
25
|
-
* @param {
|
|
26
|
-
* @
|
|
29
|
+
* @template ExtendedContext
|
|
30
|
+
* @param {DeserializedValue | Promise<DeserializedValue>} obj object
|
|
31
|
+
* @param {Context & ExtendedContext} context context object
|
|
32
|
+
* @returns {Promise<SerializedValue>} result
|
|
27
33
|
*/
|
|
28
34
|
serialize(obj, context) {
|
|
29
35
|
const ctx = { ...context, ...this.context };
|
|
30
36
|
let current = obj;
|
|
31
37
|
for (const middleware of this.serializeMiddlewares) {
|
|
32
|
-
if (
|
|
33
|
-
current
|
|
38
|
+
if (
|
|
39
|
+
current &&
|
|
40
|
+
typeof (/** @type {Promise<DeserializedValue>} */ (current).then) ===
|
|
41
|
+
"function"
|
|
42
|
+
) {
|
|
43
|
+
current =
|
|
44
|
+
/** @type {Promise<DeserializedValue>} */
|
|
45
|
+
(current).then((data) => data && middleware.serialize(data, ctx));
|
|
34
46
|
} else if (current) {
|
|
35
47
|
try {
|
|
36
48
|
current = middleware.serialize(current, ctx);
|
|
37
49
|
} catch (err) {
|
|
38
50
|
current = Promise.reject(err);
|
|
39
51
|
}
|
|
40
|
-
} else
|
|
52
|
+
} else {
|
|
53
|
+
break;
|
|
54
|
+
}
|
|
41
55
|
}
|
|
42
|
-
return current;
|
|
56
|
+
return /** @type {Promise<SerializedValue>} */ (current);
|
|
43
57
|
}
|
|
44
58
|
|
|
45
59
|
/**
|
|
46
|
-
* @
|
|
47
|
-
* @param {
|
|
48
|
-
* @
|
|
60
|
+
* @template ExtendedContext
|
|
61
|
+
* @param {SerializedValue | Promise<SerializedValue>} value value
|
|
62
|
+
* @param {Context & ExtendedContext} context object
|
|
63
|
+
* @returns {Promise<DeserializedValue>} result
|
|
49
64
|
*/
|
|
50
65
|
deserialize(value, context) {
|
|
51
66
|
const ctx = { ...context, ...this.context };
|
|
52
|
-
/** @type {any} */
|
|
53
67
|
let current = value;
|
|
54
68
|
for (const middleware of this.deserializeMiddlewares) {
|
|
55
69
|
current =
|
|
56
|
-
current &&
|
|
57
|
-
|
|
70
|
+
current &&
|
|
71
|
+
typeof (/** @type {Promise<SerializedValue>} */ (current).then) ===
|
|
72
|
+
"function"
|
|
73
|
+
? /** @type {Promise<SerializedValue>} */ (current).then((data) =>
|
|
74
|
+
middleware.deserialize(data, ctx)
|
|
75
|
+
)
|
|
58
76
|
: middleware.deserialize(current, ctx);
|
|
59
77
|
}
|
|
60
|
-
return current;
|
|
78
|
+
return /** @type {Promise<DeserializedValue>} */ (current);
|
|
61
79
|
}
|
|
62
80
|
}
|
|
63
81
|
|