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
|
@@ -70,9 +70,11 @@ const getName = (a, b, usedNames) => {
|
|
|
70
70
|
return a;
|
|
71
71
|
};
|
|
72
72
|
|
|
73
|
+
/** @typedef {Record<string, number>} Sizes */
|
|
74
|
+
|
|
73
75
|
/**
|
|
74
|
-
* @param {
|
|
75
|
-
* @param {
|
|
76
|
+
* @param {Sizes} total total size
|
|
77
|
+
* @param {Sizes} size single size
|
|
76
78
|
* @returns {void}
|
|
77
79
|
*/
|
|
78
80
|
const addSizeTo = (total, size) => {
|
|
@@ -82,8 +84,8 @@ const addSizeTo = (total, size) => {
|
|
|
82
84
|
};
|
|
83
85
|
|
|
84
86
|
/**
|
|
85
|
-
* @param {
|
|
86
|
-
* @param {
|
|
87
|
+
* @param {Sizes} total total size
|
|
88
|
+
* @param {Sizes} size single size
|
|
87
89
|
* @returns {void}
|
|
88
90
|
*/
|
|
89
91
|
const subtractSizeFrom = (total, size) => {
|
|
@@ -95,9 +97,9 @@ const subtractSizeFrom = (total, size) => {
|
|
|
95
97
|
/**
|
|
96
98
|
* @template T
|
|
97
99
|
* @param {Iterable<Node<T>>} nodes some nodes
|
|
98
|
-
* @returns {
|
|
100
|
+
* @returns {Sizes} total size
|
|
99
101
|
*/
|
|
100
|
-
const sumSize = nodes => {
|
|
102
|
+
const sumSize = (nodes) => {
|
|
101
103
|
const sum = Object.create(null);
|
|
102
104
|
for (const node of nodes) {
|
|
103
105
|
addSizeTo(sum, node.size);
|
|
@@ -106,8 +108,8 @@ const sumSize = nodes => {
|
|
|
106
108
|
};
|
|
107
109
|
|
|
108
110
|
/**
|
|
109
|
-
* @param {
|
|
110
|
-
* @param {
|
|
111
|
+
* @param {Sizes} size size
|
|
112
|
+
* @param {Sizes} maxSize minimum size
|
|
111
113
|
* @returns {boolean} true, when size is too big
|
|
112
114
|
*/
|
|
113
115
|
const isTooBig = (size, maxSize) => {
|
|
@@ -121,8 +123,8 @@ const isTooBig = (size, maxSize) => {
|
|
|
121
123
|
};
|
|
122
124
|
|
|
123
125
|
/**
|
|
124
|
-
* @param {
|
|
125
|
-
* @param {
|
|
126
|
+
* @param {Sizes} size size
|
|
127
|
+
* @param {Sizes} minSize minimum size
|
|
126
128
|
* @returns {boolean} true, when size is too small
|
|
127
129
|
*/
|
|
128
130
|
const isTooSmall = (size, minSize) => {
|
|
@@ -135,12 +137,15 @@ const isTooSmall = (size, minSize) => {
|
|
|
135
137
|
return false;
|
|
136
138
|
};
|
|
137
139
|
|
|
140
|
+
/** @typedef {Set<string>} Types */
|
|
141
|
+
|
|
138
142
|
/**
|
|
139
|
-
* @param {
|
|
140
|
-
* @param {
|
|
141
|
-
* @returns {
|
|
143
|
+
* @param {Sizes} size size
|
|
144
|
+
* @param {Sizes} minSize minimum size
|
|
145
|
+
* @returns {Types} set of types that are too small
|
|
142
146
|
*/
|
|
143
147
|
const getTooSmallTypes = (size, minSize) => {
|
|
148
|
+
/** @typedef {Types} */
|
|
144
149
|
const types = new Set();
|
|
145
150
|
for (const key of Object.keys(size)) {
|
|
146
151
|
const s = size[key];
|
|
@@ -152,22 +157,22 @@ const getTooSmallTypes = (size, minSize) => {
|
|
|
152
157
|
};
|
|
153
158
|
|
|
154
159
|
/**
|
|
155
|
-
* @template T
|
|
156
|
-
* @param {
|
|
157
|
-
* @param {
|
|
160
|
+
* @template {object} T
|
|
161
|
+
* @param {T} size size
|
|
162
|
+
* @param {Types} types types
|
|
158
163
|
* @returns {number} number of matching size types
|
|
159
164
|
*/
|
|
160
165
|
const getNumberOfMatchingSizeTypes = (size, types) => {
|
|
161
166
|
let i = 0;
|
|
162
167
|
for (const key of Object.keys(size)) {
|
|
163
|
-
if (size[key] !== 0 && types.has(key)) i++;
|
|
168
|
+
if (size[/** @type {keyof T} */ (key)] !== 0 && types.has(key)) i++;
|
|
164
169
|
}
|
|
165
170
|
return i;
|
|
166
171
|
};
|
|
167
172
|
|
|
168
173
|
/**
|
|
169
|
-
* @param {
|
|
170
|
-
* @param {
|
|
174
|
+
* @param {Sizes} size size
|
|
175
|
+
* @param {Types} types types
|
|
171
176
|
* @returns {number} selective size sum
|
|
172
177
|
*/
|
|
173
178
|
const selectiveSizeSum = (size, types) => {
|
|
@@ -185,7 +190,7 @@ class Node {
|
|
|
185
190
|
/**
|
|
186
191
|
* @param {T} item item
|
|
187
192
|
* @param {string} key key
|
|
188
|
-
* @param {
|
|
193
|
+
* @param {Sizes} size size
|
|
189
194
|
*/
|
|
190
195
|
constructor(item, key, size) {
|
|
191
196
|
this.item = item;
|
|
@@ -194,14 +199,16 @@ class Node {
|
|
|
194
199
|
}
|
|
195
200
|
}
|
|
196
201
|
|
|
202
|
+
/** @typedef {number[]} Similarities */
|
|
203
|
+
|
|
197
204
|
/**
|
|
198
205
|
* @template T
|
|
199
206
|
*/
|
|
200
207
|
class Group {
|
|
201
208
|
/**
|
|
202
209
|
* @param {Node<T>[]} nodes nodes
|
|
203
|
-
* @param {
|
|
204
|
-
* @param {
|
|
210
|
+
* @param {Similarities | null} similarities similarities between the nodes (length = nodes.length - 1)
|
|
211
|
+
* @param {Sizes=} size size of the group
|
|
205
212
|
*/
|
|
206
213
|
constructor(nodes, similarities, size) {
|
|
207
214
|
this.nodes = nodes;
|
|
@@ -212,7 +219,7 @@ class Group {
|
|
|
212
219
|
}
|
|
213
220
|
|
|
214
221
|
/**
|
|
215
|
-
* @param {
|
|
222
|
+
* @param {(node: Node<T>) => boolean} filter filter function
|
|
216
223
|
* @returns {Node<T>[] | undefined} removed nodes
|
|
217
224
|
*/
|
|
218
225
|
popNodes(filter) {
|
|
@@ -228,7 +235,7 @@ class Group {
|
|
|
228
235
|
if (newNodes.length > 0) {
|
|
229
236
|
newSimilarities.push(
|
|
230
237
|
lastNode === this.nodes[i - 1]
|
|
231
|
-
? /** @type {
|
|
238
|
+
? /** @type {Similarities} */ (this.similarities)[i - 1]
|
|
232
239
|
: similarity(/** @type {Node<T>} */ (lastNode).key, node.key)
|
|
233
240
|
);
|
|
234
241
|
}
|
|
@@ -247,11 +254,11 @@ class Group {
|
|
|
247
254
|
/**
|
|
248
255
|
* @template T
|
|
249
256
|
* @param {Iterable<Node<T>>} nodes nodes
|
|
250
|
-
* @returns {
|
|
257
|
+
* @returns {Similarities} similarities
|
|
251
258
|
*/
|
|
252
|
-
const getSimilarities = nodes => {
|
|
259
|
+
const getSimilarities = (nodes) => {
|
|
253
260
|
// calculate similarities between lexically adjacent nodes
|
|
254
|
-
/** @type {
|
|
261
|
+
/** @type {Similarities} */
|
|
255
262
|
const similarities = [];
|
|
256
263
|
let last;
|
|
257
264
|
for (const node of nodes) {
|
|
@@ -268,17 +275,17 @@ const getSimilarities = nodes => {
|
|
|
268
275
|
* @typedef {object} GroupedItems<T>
|
|
269
276
|
* @property {string} key
|
|
270
277
|
* @property {T[]} items
|
|
271
|
-
* @property {
|
|
278
|
+
* @property {Sizes} size
|
|
272
279
|
*/
|
|
273
280
|
|
|
274
281
|
/**
|
|
275
282
|
* @template T
|
|
276
283
|
* @typedef {object} Options
|
|
277
|
-
* @property {
|
|
278
|
-
* @property {
|
|
284
|
+
* @property {Sizes} maxSize maximum size of a group
|
|
285
|
+
* @property {Sizes} minSize minimum size of a group (preferred over maximum size)
|
|
279
286
|
* @property {Iterable<T>} items a list of items
|
|
280
|
-
* @property {
|
|
281
|
-
* @property {
|
|
287
|
+
* @property {(item: T) => Sizes} getSize function to get size of an item
|
|
288
|
+
* @property {(item: T) => string} getKey function to get the key of an item
|
|
282
289
|
*/
|
|
283
290
|
|
|
284
291
|
/**
|
|
@@ -292,7 +299,7 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
|
|
|
292
299
|
|
|
293
300
|
const nodes = Array.from(
|
|
294
301
|
items,
|
|
295
|
-
item => new Node(item, getKey(item), getSize(item))
|
|
302
|
+
(item) => new Node(item, getKey(item), getSize(item))
|
|
296
303
|
);
|
|
297
304
|
|
|
298
305
|
/** @type {Node<T>[]} */
|
|
@@ -320,7 +327,7 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
|
|
|
320
327
|
|
|
321
328
|
/**
|
|
322
329
|
* @param {Group<T>} group group
|
|
323
|
-
* @param {
|
|
330
|
+
* @param {Sizes} consideredSize size of the group to consider
|
|
324
331
|
* @returns {boolean} true, if the group was modified
|
|
325
332
|
*/
|
|
326
333
|
const removeProblematicNodes = (group, consideredSize = group.size) => {
|
|
@@ -329,12 +336,12 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
|
|
|
329
336
|
// We hit an edge case where the working set is already smaller than minSize
|
|
330
337
|
// We merge problematic nodes with the smallest result node to keep minSize intact
|
|
331
338
|
const problemNodes = group.popNodes(
|
|
332
|
-
n => getNumberOfMatchingSizeTypes(n.size, problemTypes) > 0
|
|
339
|
+
(n) => getNumberOfMatchingSizeTypes(n.size, problemTypes) > 0
|
|
333
340
|
);
|
|
334
341
|
if (problemNodes === undefined) return false;
|
|
335
342
|
// Only merge it with result nodes that have the problematic size type
|
|
336
343
|
const possibleResultGroups = result.filter(
|
|
337
|
-
n => getNumberOfMatchingSizeTypes(n.size, problemTypes) > 0
|
|
344
|
+
(n) => getNumberOfMatchingSizeTypes(n.size, problemTypes) > 0
|
|
338
345
|
);
|
|
339
346
|
if (possibleResultGroups.length > 0) {
|
|
340
347
|
const bestGroup = possibleResultGroups.reduce((min, group) => {
|
|
@@ -343,13 +350,15 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
|
|
|
343
350
|
group,
|
|
344
351
|
problemTypes
|
|
345
352
|
);
|
|
346
|
-
if (minMatches !== groupMatches)
|
|
353
|
+
if (minMatches !== groupMatches) {
|
|
347
354
|
return minMatches < groupMatches ? group : min;
|
|
355
|
+
}
|
|
348
356
|
if (
|
|
349
357
|
selectiveSizeSum(min.size, problemTypes) >
|
|
350
358
|
selectiveSizeSum(group.size, problemTypes)
|
|
351
|
-
)
|
|
359
|
+
) {
|
|
352
360
|
return group;
|
|
361
|
+
}
|
|
353
362
|
return min;
|
|
354
363
|
});
|
|
355
364
|
for (const node of problemNodes) bestGroup.nodes.push(node);
|
|
@@ -453,9 +462,9 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
|
|
|
453
462
|
// rightSize ^^^^^^^^^^^^^^^
|
|
454
463
|
|
|
455
464
|
while (pos <= right + 1) {
|
|
456
|
-
const similarity =
|
|
457
|
-
|
|
458
|
-
|
|
465
|
+
const similarity =
|
|
466
|
+
/** @type {Similarities} */
|
|
467
|
+
(group.similarities)[pos - 1];
|
|
459
468
|
if (
|
|
460
469
|
similarity < bestSimilarity &&
|
|
461
470
|
!isTooSmall(leftSize, minSize) &&
|
|
@@ -482,22 +491,22 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
|
|
|
482
491
|
// create two new groups for left and right area
|
|
483
492
|
// and queue them up
|
|
484
493
|
const rightNodes = [group.nodes[right + 1]];
|
|
485
|
-
/** @type {
|
|
494
|
+
/** @type {Similarities} */
|
|
486
495
|
const rightSimilarities = [];
|
|
487
496
|
for (let i = right + 2; i < group.nodes.length; i++) {
|
|
488
497
|
rightSimilarities.push(
|
|
489
|
-
/** @type {
|
|
498
|
+
/** @type {Similarities} */ (group.similarities)[i - 1]
|
|
490
499
|
);
|
|
491
500
|
rightNodes.push(group.nodes[i]);
|
|
492
501
|
}
|
|
493
502
|
queue.push(new Group(rightNodes, rightSimilarities));
|
|
494
503
|
|
|
495
504
|
const leftNodes = [group.nodes[0]];
|
|
496
|
-
/** @type {
|
|
505
|
+
/** @type {Similarities} */
|
|
497
506
|
const leftSimilarities = [];
|
|
498
507
|
for (let i = 1; i < left; i++) {
|
|
499
508
|
leftSimilarities.push(
|
|
500
|
-
/** @type {
|
|
509
|
+
/** @type {Similarities} */ (group.similarities)[i - 1]
|
|
501
510
|
);
|
|
502
511
|
leftNodes.push(group.nodes[i]);
|
|
503
512
|
}
|
|
@@ -529,11 +538,11 @@ module.exports = ({ maxSize, minSize, items, getSize, getKey }) => {
|
|
|
529
538
|
|
|
530
539
|
// return the results
|
|
531
540
|
return result.map(
|
|
532
|
-
group =>
|
|
541
|
+
(group) =>
|
|
533
542
|
/** @type {GroupedItems<T>} */
|
|
534
543
|
({
|
|
535
544
|
key: group.key,
|
|
536
|
-
items: group.nodes.map(node => node.item),
|
|
545
|
+
items: group.nodes.map((node) => node.item),
|
|
537
546
|
size: group.size
|
|
538
547
|
})
|
|
539
548
|
);
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Natsu @xiaoxiaojx
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const path = require("path");
|
|
9
|
+
const urlUtils = require("url");
|
|
10
|
+
const { isAbsolute, join } = require("./fs");
|
|
11
|
+
|
|
12
|
+
/** @typedef {import("./fs").InputFileSystem} InputFileSystem */
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {(input: string | Buffer<ArrayBufferLike>, resourcePath: string, fs: InputFileSystem) => Promise<{source: string | Buffer<ArrayBufferLike>, sourceMap: string | RawSourceMap | undefined, fileDependencies: string[]}>} SourceMapExtractorFunction
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* @typedef {(resourcePath: string) => Promise<string | Buffer<ArrayBufferLike>>} ReadResource
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* @typedef {object} SourceMappingURL
|
|
26
|
+
* @property {string} sourceMappingURL
|
|
27
|
+
* @property {string} replacementString
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
// Matches only the last occurrence of sourceMappingURL
|
|
31
|
+
const innerRegex = /\s*[#@]\s*sourceMappingURL\s*=\s*([^\s'"]*)\s*/;
|
|
32
|
+
|
|
33
|
+
const validProtocolPattern = /^[a-z][a-z0-9+.-]*:/i;
|
|
34
|
+
|
|
35
|
+
const sourceMappingURLRegex = new RegExp(
|
|
36
|
+
"(?:" +
|
|
37
|
+
"/\\*" +
|
|
38
|
+
"(?:\\s*\r?\n(?://)?)?" +
|
|
39
|
+
`(?:${innerRegex.source})` +
|
|
40
|
+
"\\s*" +
|
|
41
|
+
"\\*/" +
|
|
42
|
+
"|" +
|
|
43
|
+
`//(?:${innerRegex.source})` +
|
|
44
|
+
")" +
|
|
45
|
+
"\\s*"
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Extract source mapping URL from code comments
|
|
50
|
+
* @param {string} code source code content
|
|
51
|
+
* @returns {SourceMappingURL} source mapping information
|
|
52
|
+
*/
|
|
53
|
+
function getSourceMappingURL(code) {
|
|
54
|
+
const lines = code.split(/^/m);
|
|
55
|
+
let match;
|
|
56
|
+
|
|
57
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
58
|
+
match = lines[i].match(sourceMappingURLRegex);
|
|
59
|
+
if (match) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const sourceMappingURL = match ? match[1] || match[2] || "" : "";
|
|
65
|
+
|
|
66
|
+
return {
|
|
67
|
+
sourceMappingURL: sourceMappingURL
|
|
68
|
+
? decodeURI(sourceMappingURL)
|
|
69
|
+
: sourceMappingURL,
|
|
70
|
+
replacementString: match ? match[0] : ""
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Get absolute path for source file
|
|
76
|
+
* @param {string} context context directory
|
|
77
|
+
* @param {string} request file request
|
|
78
|
+
* @param {string} sourceRoot source root directory
|
|
79
|
+
* @returns {string} absolute path
|
|
80
|
+
*/
|
|
81
|
+
function getAbsolutePath(context, request, sourceRoot) {
|
|
82
|
+
if (sourceRoot) {
|
|
83
|
+
if (isAbsolute(sourceRoot)) {
|
|
84
|
+
return join(undefined, sourceRoot, request);
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
return join(undefined, join(undefined, context, sourceRoot), request);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return join(undefined, context, request);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Check if value is a URL
|
|
95
|
+
* @param {string} value string to check
|
|
96
|
+
* @returns {boolean} true if value is a URL
|
|
97
|
+
*/
|
|
98
|
+
function isURL(value) {
|
|
99
|
+
return validProtocolPattern.test(value) && !path.win32.isAbsolute(value);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Fetch from multiple possible file paths
|
|
104
|
+
* @param {ReadResource} readResource read resource function
|
|
105
|
+
* @param {string[]} possibleRequests array of possible file paths
|
|
106
|
+
* @param {string} errorsAccumulator accumulated error messages
|
|
107
|
+
* @returns {Promise<{path: string, data?: string}>} source content promise
|
|
108
|
+
*/
|
|
109
|
+
async function fetchPathsFromURL(
|
|
110
|
+
readResource,
|
|
111
|
+
possibleRequests,
|
|
112
|
+
errorsAccumulator = ""
|
|
113
|
+
) {
|
|
114
|
+
let result;
|
|
115
|
+
|
|
116
|
+
try {
|
|
117
|
+
result = await readResource(possibleRequests[0]);
|
|
118
|
+
} catch (error) {
|
|
119
|
+
errorsAccumulator += `${/** @type {Error} */ (error).message}\n\n`;
|
|
120
|
+
|
|
121
|
+
const [, ...tailPossibleRequests] = possibleRequests;
|
|
122
|
+
|
|
123
|
+
if (tailPossibleRequests.length === 0) {
|
|
124
|
+
/** @type {Error} */ (error).message = errorsAccumulator;
|
|
125
|
+
|
|
126
|
+
throw error;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return fetchPathsFromURL(
|
|
130
|
+
readResource,
|
|
131
|
+
tailPossibleRequests,
|
|
132
|
+
errorsAccumulator
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return {
|
|
137
|
+
path: possibleRequests[0],
|
|
138
|
+
data: result.toString("utf8")
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Fetch source content from URL
|
|
144
|
+
* @param {ReadResource} readResource The read resource function
|
|
145
|
+
* @param {string} context context directory
|
|
146
|
+
* @param {string} url source URL
|
|
147
|
+
* @param {string=} sourceRoot source root directory
|
|
148
|
+
* @param {boolean=} skipReading whether to skip reading file content
|
|
149
|
+
* @returns {Promise<{sourceURL: string, sourceContent?: string | Buffer<ArrayBufferLike>}>} source content promise
|
|
150
|
+
*/
|
|
151
|
+
async function fetchFromURL(
|
|
152
|
+
readResource,
|
|
153
|
+
context,
|
|
154
|
+
url,
|
|
155
|
+
sourceRoot,
|
|
156
|
+
skipReading = false
|
|
157
|
+
) {
|
|
158
|
+
// 1. It's an absolute url and it is not `windows` path like `C:\dir\file`
|
|
159
|
+
if (isURL(url)) {
|
|
160
|
+
// eslint-disable-next-line n/no-deprecated-api
|
|
161
|
+
const { protocol } = urlUtils.parse(url);
|
|
162
|
+
if (protocol === "data:") {
|
|
163
|
+
const sourceContent = skipReading ? "" : await readResource(url);
|
|
164
|
+
|
|
165
|
+
return { sourceURL: "", sourceContent };
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (protocol === "file:") {
|
|
169
|
+
const pathFromURL = urlUtils.fileURLToPath(url);
|
|
170
|
+
const sourceURL = path.normalize(pathFromURL);
|
|
171
|
+
const sourceContent = skipReading ? "" : await readResource(sourceURL);
|
|
172
|
+
|
|
173
|
+
return { sourceURL, sourceContent };
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const sourceContent = skipReading ? "" : await readResource(url);
|
|
177
|
+
return { sourceURL: url, sourceContent };
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// 3. Absolute path
|
|
181
|
+
if (isAbsolute(url)) {
|
|
182
|
+
let sourceURL = path.normalize(url);
|
|
183
|
+
|
|
184
|
+
let sourceContent;
|
|
185
|
+
|
|
186
|
+
if (!skipReading) {
|
|
187
|
+
const possibleRequests = [sourceURL];
|
|
188
|
+
|
|
189
|
+
if (url.startsWith("/")) {
|
|
190
|
+
possibleRequests.push(
|
|
191
|
+
getAbsolutePath(context, sourceURL.slice(1), sourceRoot || "")
|
|
192
|
+
);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const result = await fetchPathsFromURL(readResource, possibleRequests);
|
|
196
|
+
|
|
197
|
+
sourceURL = result.path;
|
|
198
|
+
sourceContent = result.data;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return { sourceURL, sourceContent };
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// 4. Relative path
|
|
205
|
+
const sourceURL = getAbsolutePath(context, url, sourceRoot || "");
|
|
206
|
+
let sourceContent;
|
|
207
|
+
|
|
208
|
+
if (!skipReading) {
|
|
209
|
+
sourceContent = await readResource(sourceURL);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
return { sourceURL, sourceContent };
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Extract source map from code content
|
|
217
|
+
* @param {string | Buffer<ArrayBufferLike>} stringOrBuffer The input code content as string or buffer
|
|
218
|
+
* @param {string} resourcePath The path to the resource file
|
|
219
|
+
* @param {ReadResource} readResource The read resource function
|
|
220
|
+
* @returns {Promise<{source: string | Buffer<ArrayBufferLike>, sourceMap: string | RawSourceMap | undefined}>} Promise resolving to extracted source map information
|
|
221
|
+
*/
|
|
222
|
+
async function extractSourceMap(stringOrBuffer, resourcePath, readResource) {
|
|
223
|
+
const input =
|
|
224
|
+
typeof stringOrBuffer === "string"
|
|
225
|
+
? stringOrBuffer
|
|
226
|
+
: stringOrBuffer.toString("utf8");
|
|
227
|
+
const inputSourceMap = undefined;
|
|
228
|
+
const output = {
|
|
229
|
+
source: stringOrBuffer,
|
|
230
|
+
sourceMap: inputSourceMap
|
|
231
|
+
};
|
|
232
|
+
const { sourceMappingURL, replacementString } = getSourceMappingURL(input);
|
|
233
|
+
|
|
234
|
+
if (!sourceMappingURL) {
|
|
235
|
+
return output;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const baseContext = path.dirname(resourcePath);
|
|
239
|
+
|
|
240
|
+
const { sourceURL, sourceContent } = await fetchFromURL(
|
|
241
|
+
readResource,
|
|
242
|
+
baseContext,
|
|
243
|
+
sourceMappingURL
|
|
244
|
+
);
|
|
245
|
+
|
|
246
|
+
if (!sourceContent) {
|
|
247
|
+
return output;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** @type {RawSourceMap} */
|
|
251
|
+
const map = JSON.parse(
|
|
252
|
+
sourceContent.toString("utf8").replace(/^\)\]\}'/, "")
|
|
253
|
+
);
|
|
254
|
+
|
|
255
|
+
const context = sourceURL ? path.dirname(sourceURL) : baseContext;
|
|
256
|
+
|
|
257
|
+
const resolvedSources = await Promise.all(
|
|
258
|
+
map.sources.map(
|
|
259
|
+
async (/** @type {string} */ source, /** @type {number} */ i) => {
|
|
260
|
+
const originalSourceContent =
|
|
261
|
+
map.sourcesContent &&
|
|
262
|
+
typeof map.sourcesContent[i] !== "undefined" &&
|
|
263
|
+
map.sourcesContent[i] !== null
|
|
264
|
+
? map.sourcesContent[i]
|
|
265
|
+
: undefined;
|
|
266
|
+
const skipReading = typeof originalSourceContent !== "undefined";
|
|
267
|
+
// We do not skipReading here, because we need absolute paths in sources.
|
|
268
|
+
// This is necessary so that for sourceMaps with the same file structure in sources, name collisions do not occur.
|
|
269
|
+
// https://github.com/webpack-contrib/source-map-loader/issues/51
|
|
270
|
+
let { sourceURL, sourceContent } = await fetchFromURL(
|
|
271
|
+
readResource,
|
|
272
|
+
context,
|
|
273
|
+
source,
|
|
274
|
+
map.sourceRoot,
|
|
275
|
+
skipReading
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
if (skipReading) {
|
|
279
|
+
sourceContent = originalSourceContent;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// Return original value of `source` when error happens
|
|
283
|
+
return { sourceURL, sourceContent };
|
|
284
|
+
}
|
|
285
|
+
)
|
|
286
|
+
);
|
|
287
|
+
|
|
288
|
+
/** @type {RawSourceMap} */
|
|
289
|
+
const newMap = { ...map };
|
|
290
|
+
|
|
291
|
+
newMap.sources = [];
|
|
292
|
+
newMap.sourcesContent = [];
|
|
293
|
+
|
|
294
|
+
delete newMap.sourceRoot;
|
|
295
|
+
|
|
296
|
+
for (const source of resolvedSources) {
|
|
297
|
+
const { sourceURL, sourceContent } = source;
|
|
298
|
+
|
|
299
|
+
newMap.sources.push(sourceURL || "");
|
|
300
|
+
newMap.sourcesContent.push(
|
|
301
|
+
sourceContent ? sourceContent.toString("utf8") : ""
|
|
302
|
+
);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
const sourcesContentIsEmpty =
|
|
306
|
+
newMap.sourcesContent.filter(Boolean).length === 0;
|
|
307
|
+
|
|
308
|
+
if (sourcesContentIsEmpty) {
|
|
309
|
+
delete newMap.sourcesContent;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
return {
|
|
313
|
+
source: input.replace(replacementString, ""),
|
|
314
|
+
sourceMap: /** @type {RawSourceMap} */ (newMap)
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
module.exports = extractSourceMap;
|
|
319
|
+
module.exports.getSourceMappingURL = getSourceMappingURL;
|
|
@@ -14,5 +14,5 @@ module.exports = function extractUrlAndGlobal(urlAndGlobal) {
|
|
|
14
14
|
if (index <= 0 || index === urlAndGlobal.length - 1) {
|
|
15
15
|
throw new Error(`Invalid request "${urlAndGlobal}"`);
|
|
16
16
|
}
|
|
17
|
-
return [urlAndGlobal.
|
|
17
|
+
return [urlAndGlobal.slice(index + 1), urlAndGlobal.slice(0, index)];
|
|
18
18
|
};
|