@depup/webpack 5.106.0-depup.0 → 5.109.0-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -11
- package/changes.json +16 -24
- package/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +60 -35
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +13 -5
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +41 -0
- package/lib/Chunk.js +71 -25
- package/lib/ChunkGraph.js +141 -9
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +23 -26
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +54 -37
- package/lib/Compilation.js +635 -107
- package/lib/Compiler.js +93 -31
- package/lib/ConcatenationScope.js +34 -4
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +15 -12
- package/lib/ContextExclusionPlugin.js +3 -1
- package/lib/ContextModule.js +345 -55
- package/lib/ContextModuleFactory.js +193 -51
- package/lib/ContextReplacementPlugin.js +8 -1
- package/lib/DefinePlugin.js +498 -127
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +159 -11
- package/lib/DependencyTemplate.js +7 -1
- package/lib/DependencyTemplates.js +4 -0
- package/lib/DotenvPlugin.js +3 -0
- package/lib/DynamicEntryPlugin.js +3 -1
- package/lib/EntryOptionPlugin.js +42 -2
- package/lib/EntryPlugin.js +4 -1
- package/lib/Entrypoint.js +5 -1
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -11
- package/lib/ExportsInfo.js +399 -108
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +376 -78
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +575 -149
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +92 -6
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
- package/lib/Generator.js +24 -3
- package/lib/HotModuleReplacementPlugin.js +110 -44
- package/lib/IgnorePlugin.js +5 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +15 -0
- package/lib/JavascriptMetaInfoPlugin.js +9 -6
- package/lib/LazyBarrel.js +389 -0
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +3 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +121 -60
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +5 -2
- package/lib/ModuleGraph.js +69 -2
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleNotFoundError.js +3 -83
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleSourceTypeConstants.js +52 -19
- package/lib/ModuleTemplate.js +10 -0
- package/lib/ModuleTypeConstants.js +20 -4
- package/lib/MultiCompiler.js +59 -4
- package/lib/MultiStats.js +9 -0
- package/lib/MultiWatching.js +6 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +78 -46
- package/lib/NormalModule.js +485 -181
- package/lib/NormalModuleFactory.js +148 -29
- package/lib/NormalModuleReplacementPlugin.js +3 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptionsApply.js +1 -0
- package/lib/Parser.js +3 -1
- package/lib/PlatformPlugin.js +2 -1
- package/lib/PrefetchPlugin.js +4 -1
- package/lib/ProgressPlugin.js +351 -161
- package/lib/ProvidePlugin.js +6 -3
- package/lib/RawModule.js +32 -16
- package/lib/RecordIdsPlugin.js +9 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +58 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +104 -26
- package/lib/RuntimeTemplate.js +616 -37
- package/lib/SelfModuleFactory.js +3 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +341 -63
- package/lib/Stats.js +6 -0
- package/lib/Template.js +29 -3
- package/lib/TemplatedPathPlugin.js +505 -138
- package/lib/UseStrictPlugin.js +3 -2
- package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
- package/lib/WarnDeprecatedOptionPlugin.js +6 -2
- package/lib/WarnNoModeSetPlugin.js +18 -2
- package/lib/WatchIgnorePlugin.js +5 -1
- package/lib/Watching.js +25 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +4 -2
- package/lib/WebpackOptionsApply.js +88 -25
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +28 -10
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +199 -60
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +115 -24
- package/lib/asset/AssetParser.js +4 -2
- package/lib/asset/AssetSourceGenerator.js +26 -8
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +23 -13
- package/lib/asset/WebManifestGenerator.js +164 -0
- package/lib/asset/WebManifestParser.js +130 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/async-modules/isGeneratorLowered.js +26 -0
- package/lib/buildChunkGraph.js +107 -15
- package/lib/bun/BunTargetPlugin.js +42 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
- package/lib/cache/AddManagedPathsPlugin.js +5 -1
- package/lib/cache/IdleFileCachePlugin.js +6 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
- package/lib/cache/PackFileCacheStrategy.js +43 -7
- package/lib/cache/ResolverCachePlugin.js +12 -1
- package/lib/cache/getLazyHashedEtag.js +13 -2
- package/lib/cache/mergeEtags.js +4 -0
- package/lib/cli.js +142 -20
- package/lib/config/browserslistTargetHandler.js +141 -0
- package/lib/config/defaults.js +591 -41
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +46 -1
- package/lib/config/target.js +200 -2
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +27 -14
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +6 -2
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +3 -2
- package/lib/container/FallbackDependency.js +9 -7
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +22 -9
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/ModuleFederationPlugin.js +12 -26
- package/lib/container/RemoteModule.js +33 -10
- package/lib/container/RemoteRuntimeModule.js +15 -12
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +534 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +156 -77
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +356 -204
- package/lib/css/CssParser.js +3452 -1950
- package/lib/css/syntax.js +4058 -0
- package/lib/debug/ProfilingPlugin.js +33 -2
- package/lib/deno/DenoTargetPlugin.js +41 -0
- package/lib/dependencies/AMDDefineDependency.js +29 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
- package/lib/dependencies/AMDPlugin.js +6 -3
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
- package/lib/dependencies/AMDRequireContextDependency.js +10 -11
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
- package/lib/dependencies/AMDRequireDependency.js +28 -20
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +9 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +138 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -24
- package/lib/dependencies/CommonJsPlugin.js +7 -4
- package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
- package/lib/dependencies/CommonJsRequireDependency.js +135 -13
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
- package/lib/dependencies/ConstDependency.js +22 -12
- package/lib/dependencies/ContextDependency.js +13 -2
- package/lib/dependencies/ContextDependencyHelpers.js +7 -4
- package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +27 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
- package/lib/dependencies/CriticalDependencyWarning.js +3 -1
- package/lib/dependencies/CssIcssExportDependency.js +682 -368
- package/lib/dependencies/CssIcssImportDependency.js +62 -17
- package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
- package/lib/dependencies/CssImportDependency.js +37 -1
- package/lib/dependencies/CssUrlDependency.js +87 -14
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +12 -13
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +18 -12
- package/lib/dependencies/ExternalModuleDependency.js +13 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
- package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -2
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
- package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
- package/lib/dependencies/HarmonyExports.js +6 -1
- package/lib/dependencies/HarmonyImportDependency.js +59 -3
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +426 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
- package/lib/dependencies/HtmlEntryDependency.js +1295 -0
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
- package/lib/dependencies/HtmlSourceDependency.js +172 -0
- package/lib/dependencies/ImportContextDependency.js +9 -9
- package/lib/dependencies/ImportDependency.js +92 -3
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
- package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
- package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
- package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
- package/lib/dependencies/ImportMetaPlugin.js +595 -209
- package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
- package/lib/dependencies/ImportParserPlugin.js +114 -27
- package/lib/dependencies/ImportPhase.js +17 -11
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +3 -0
- package/lib/dependencies/JsonExportsDependency.js +15 -10
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +3 -0
- package/lib/dependencies/LoaderPlugin.js +9 -2
- package/lib/dependencies/LocalModule.js +15 -12
- package/lib/dependencies/LocalModuleDependency.js +15 -13
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
- package/lib/dependencies/ModuleDependency.js +14 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +36 -27
- package/lib/dependencies/PureExpressionDependency.js +14 -10
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
- package/lib/dependencies/RequireEnsureDependency.js +16 -13
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +7 -4
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +10 -11
- package/lib/dependencies/RequireResolveDependency.js +2 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
- package/lib/dependencies/StaticExportsDependency.js +13 -10
- package/lib/dependencies/SystemPlugin.js +9 -6
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
- package/lib/dependencies/URLContextDependency.js +8 -7
- package/lib/dependencies/URLDependency.js +157 -33
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +12 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
- package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
- package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
- package/lib/dependencies/WorkerDependency.js +111 -27
- package/lib/dependencies/WorkletDependency.js +278 -0
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +14 -11
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
- package/lib/{DllModule.js → dll/DllModule.js} +36 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
- package/lib/electron/ElectronTargetPlugin.js +24 -5
- package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
- package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
- package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
- package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
- package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
- package/lib/errors/JSONParseError.js +115 -0
- package/lib/errors/LoaderLoadingError.js +20 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
- package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
- package/lib/errors/ModuleNotFoundError.js +94 -0
- package/lib/errors/ModuleParseError.js +141 -0
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
- package/lib/errors/NonErrorEmittedError.js +30 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
- package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
- package/lib/errors/WebpackError.js +84 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
- package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +71 -49
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +154 -7
- package/lib/hmr/lazyCompilationBackend.js +34 -8
- package/lib/html/HtmlGenerator.js +1470 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1111 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9020 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
- package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +25 -2
- package/lib/ids/NamedChunkIdsPlugin.js +3 -1
- package/lib/ids/NamedModuleIdsPlugin.js +3 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -1
- package/lib/index.js +66 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
- package/lib/javascript/BasicEvaluatedExpression.js +370 -49
- package/lib/javascript/ChunkFormatHelpers.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
- package/lib/javascript/JavascriptGenerator.js +213 -51
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +579 -183
- package/lib/javascript/JavascriptParser.js +1289 -462
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +4380 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +8 -1
- package/lib/json/JsonParser.js +18 -27
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +21 -3
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +154 -7
- package/lib/library/SystemLibraryPlugin.js +11 -3
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/loaders/LoaderRunner.js +714 -0
- package/lib/loaders/loadLoader.js +100 -0
- package/lib/logging/Logger.js +17 -0
- package/lib/logging/createConsoleLogger.js +7 -0
- package/lib/logging/runtime.js +2 -0
- package/lib/logging/truncateArgs.js +2 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
- package/lib/node/NodeEnvironmentPlugin.js +7 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -63
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +40 -22
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +23 -1
- package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
- package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
- package/lib/node/nodeBuiltins.js +80 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +3 -1
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +585 -116
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +374 -262
- package/lib/optimize/InnerGraphPlugin.js +246 -117
- package/lib/optimize/LimitChunkCountPlugin.js +9 -0
- package/lib/optimize/MangleExportsPlugin.js +5 -1
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
- package/lib/optimize/MinChunkSizePlugin.js +2 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +159 -34
- package/lib/optimize/RealContentHashPlugin.js +125 -50
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
- package/lib/optimize/RuntimeChunkPlugin.js +2 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
- package/lib/optimize/SplitChunksPlugin.js +54 -6
- package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
- package/lib/performance/NoAsyncChunksWarning.js +5 -3
- package/lib/performance/SizeLimitsPlugin.js +8 -2
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
- package/lib/prefetch/ResourceHintPlugin.js +663 -0
- package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
- package/lib/prefetch/parseResourceHintOptions.js +103 -0
- package/lib/rules/BasicEffectRulePlugin.js +3 -0
- package/lib/rules/BasicMatcherRulePlugin.js +3 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
- package/lib/rules/RuleSetCompiler.js +132 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
- package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
- package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +86 -4
- package/lib/schemes/VirtualUrlPlugin.js +8 -4
- package/lib/serialization/AggregateErrorSerializer.js +9 -6
- package/lib/serialization/ArraySerializer.js +6 -8
- package/lib/serialization/BinaryMiddleware.js +552 -463
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +50 -3
- package/lib/serialization/MapObjectSerializer.js +7 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
- package/lib/serialization/ObjectMiddleware.js +73 -13
- package/lib/serialization/PlainObjectSerializer.js +16 -8
- package/lib/serialization/RegExpObjectSerializer.js +4 -2
- package/lib/serialization/Serializer.js +6 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +6 -8
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +21 -7
- package/lib/sharing/ConsumeSharedPlugin.js +11 -11
- package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +34 -15
- package/lib/sharing/ProvideSharedModule.js +42 -12
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +13 -8
- package/lib/sharing/SharePlugin.js +5 -1
- package/lib/sharing/ShareRuntimeModule.js +19 -16
- package/lib/sharing/resolveMatchedConfigs.js +6 -2
- package/lib/sharing/utils.js +9 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +94 -12
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
- package/lib/stats/StatsFactory.js +39 -18
- package/lib/stats/StatsPrinter.js +16 -2
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +111 -23
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +154 -74
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +26 -0
- package/lib/util/LazySet.js +45 -4
- package/lib/util/LocConverter.js +64 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +15 -1
- package/lib/util/SetHelpers.js +4 -1
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/SourceProcessor.js +119 -0
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +162 -43
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +14 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +60 -1
- package/lib/util/binarySearchBounds.js +3 -2
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +35 -4
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +80 -24
- package/lib/util/conventions.js +46 -1
- package/lib/util/createHash.js +0 -1
- package/lib/util/createHooksRegistry.js +43 -0
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +3 -2
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +46 -17
- package/lib/util/extractSourceMap.js +2 -1
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +7 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
- package/lib/util/fs.js +87 -14
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/globUtils.js +710 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +32 -15
- package/lib/util/hash/md4.js +1 -1
- package/lib/util/hash/wasm-hash.js +5 -0
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +97 -6
- package/lib/util/implicitTypeLoaderFallback.js +62 -0
- package/lib/util/internalSerializables.js +102 -60
- package/lib/util/magicComment.js +149 -7
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +31 -1
- package/lib/util/numberHash.js +2 -2
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +9 -2
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +24 -4
- package/lib/util/removeBOM.js +1 -0
- package/lib/util/runtime.js +32 -0
- package/lib/util/semver.js +15 -0
- package/lib/util/serialization.js +2 -0
- package/lib/util/smartGrouping.js +8 -0
- package/lib/util/source.js +23 -0
- package/lib/util/topologicalSort.js +69 -0
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
- package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
- package/lib/wasm-sync/WebAssemblyParser.js +9 -3
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
- package/lib/web/FetchCompileWasmPlugin.js +27 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +78 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +21 -0
- package/package.json +79 -77
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1117 -79
- package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
- package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
- package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +38 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +2 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +8608 -1159
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/ModuleParseError.js +0 -125
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- package/lib/css/walkCssTokens.js +0 -1843
- package/lib/util/AppendOnlyStackedSet.js +0 -78
- /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
- /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
package/lib/SelfModuleFactory.js
CHANGED
|
@@ -11,13 +11,16 @@
|
|
|
11
11
|
|
|
12
12
|
class SelfModuleFactory {
|
|
13
13
|
/**
|
|
14
|
+
* Creates an instance of SelfModuleFactory.
|
|
14
15
|
* @param {ModuleGraph} moduleGraph module graph
|
|
15
16
|
*/
|
|
16
17
|
constructor(moduleGraph) {
|
|
18
|
+
/** @type {ModuleGraph} */
|
|
17
19
|
this.moduleGraph = moduleGraph;
|
|
18
20
|
}
|
|
19
21
|
|
|
20
22
|
/**
|
|
23
|
+
* Processes the provided data.
|
|
21
24
|
* @param {ModuleFactoryCreateData} data data object
|
|
22
25
|
* @param {ModuleFactoryCallback} callback callback
|
|
23
26
|
* @returns {void}
|
|
@@ -14,6 +14,7 @@ const PLUGIN_NAME = "SourceMapDevToolModuleOptionsPlugin";
|
|
|
14
14
|
|
|
15
15
|
class SourceMapDevToolModuleOptionsPlugin {
|
|
16
16
|
/**
|
|
17
|
+
* Creates an instance of SourceMapDevToolModuleOptionsPlugin.
|
|
17
18
|
* @param {SourceMapDevToolPluginOptions=} options options
|
|
18
19
|
*/
|
|
19
20
|
constructor(options = {}) {
|
|
@@ -22,6 +23,7 @@ class SourceMapDevToolModuleOptionsPlugin {
|
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
/**
|
|
26
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
25
27
|
* @param {Compilation} compilation the compiler instance
|
|
26
28
|
* @returns {void}
|
|
27
29
|
*/
|
|
@@ -11,6 +11,7 @@ const Compilation = require("./Compilation");
|
|
|
11
11
|
const ModuleFilenameHelpers = require("./ModuleFilenameHelpers");
|
|
12
12
|
const ProgressPlugin = require("./ProgressPlugin");
|
|
13
13
|
const SourceMapDevToolModuleOptionsPlugin = require("./SourceMapDevToolModuleOptionsPlugin");
|
|
14
|
+
const { getPresentKinds } = require("./TemplatedPathPlugin");
|
|
14
15
|
const createHash = require("./util/createHash");
|
|
15
16
|
const { dirname, relative } = require("./util/fs");
|
|
16
17
|
const generateDebugId = require("./util/generateDebugId");
|
|
@@ -30,22 +31,22 @@ const { makePathsAbsolute } = require("./util/identifier");
|
|
|
30
31
|
/** @typedef {import("./Compiler")} Compiler */
|
|
31
32
|
/** @typedef {import("./Module")} Module */
|
|
32
33
|
/** @typedef {import("./NormalModule").RawSourceMap} RawSourceMap */
|
|
33
|
-
/** @typedef {import("./TemplatedPathPlugin").TemplatePath}
|
|
34
|
+
/** @typedef {import("./TemplatedPathPlugin").TemplatePath} SourceMappingURLComment */
|
|
34
35
|
/** @typedef {import("./util/fs").OutputFileSystem} OutputFileSystem */
|
|
35
36
|
|
|
36
37
|
/**
|
|
38
|
+
* Defines the source map task type used by this module.
|
|
37
39
|
* @typedef {object} SourceMapTask
|
|
38
|
-
* @property {Source} asset
|
|
39
40
|
* @property {AssetInfo} assetInfo
|
|
40
41
|
* @property {(string | Module)[]} modules
|
|
41
42
|
* @property {string} source
|
|
42
43
|
* @property {string} file
|
|
43
44
|
* @property {RawSourceMap} sourceMap
|
|
45
|
+
* @property {Source} mapSource the Source instance whose `sourceAndMap` we called (the current asset or, when its map was already stripped, the pinned original from `originalSources`) — what `clearCache` should target
|
|
44
46
|
* @property {ItemCacheFacade} cacheItem cache item
|
|
45
47
|
*/
|
|
46
48
|
|
|
47
49
|
const METACHARACTERS_REGEXP = /[-[\]\\/{}()*+?.^$|]/g;
|
|
48
|
-
const CONTENT_HASH_DETECT_REGEXP = /\[contenthash(?::\w+)?\]/;
|
|
49
50
|
const CSS_AND_JS_MODULE_EXTENSIONS_REGEXP = /\.((c|m)?js|css)($|\?)/i;
|
|
50
51
|
const CSS_EXTENSION_DETECT_REGEXP = /\.css(?:$|\?)/i;
|
|
51
52
|
const MAP_URL_COMMENT_REGEXP = /\[map\]/g;
|
|
@@ -69,6 +70,93 @@ const resetRegexpState = (regexp) => {
|
|
|
69
70
|
*/
|
|
70
71
|
const quoteMeta = (str) => str.replace(METACHARACTERS_REGEXP, "\\$&");
|
|
71
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Compilation-scoped registry of original asset sources for multi-plugin
|
|
75
|
+
* cooperation. The first SourceMapDevToolPlugin instance to see a file pins a
|
|
76
|
+
* reference to the asset's still-unwrapped {@link Source} object; later
|
|
77
|
+
* instances whose `asset.source.sourceAndMap()` would now return `null` (the
|
|
78
|
+
* earlier instance replaced the asset with a `RawSource`) can re-extract the
|
|
79
|
+
* map from this pinned reference. We keep the registry on a module-scoped
|
|
80
|
+
* `WeakMap` so the entries are reclaimed automatically when the compilation
|
|
81
|
+
* itself becomes unreachable; we never store anything on the compilation
|
|
82
|
+
* object directly.
|
|
83
|
+
*
|
|
84
|
+
* Stashing the `Source` object itself rather than an extracted map keeps the
|
|
85
|
+
* fast path free of cloning and source-map serialization work — the
|
|
86
|
+
* extraction only happens if a subsequent plugin actually needs the map.
|
|
87
|
+
* @type {WeakMap<Compilation, Map<string, Source>>}
|
|
88
|
+
*/
|
|
89
|
+
const originalSourceRegistry = new WeakMap();
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Returns (creating if necessary) the per-compilation registry of original
|
|
93
|
+
* asset {@link Source} objects.
|
|
94
|
+
* @param {Compilation} compilation compilation
|
|
95
|
+
* @returns {Map<string, Source>} registry
|
|
96
|
+
*/
|
|
97
|
+
const getOriginalSourceRegistry = (compilation) => {
|
|
98
|
+
let registry = originalSourceRegistry.get(compilation);
|
|
99
|
+
if (registry === undefined) {
|
|
100
|
+
registry = new Map();
|
|
101
|
+
originalSourceRegistry.set(compilation, registry);
|
|
102
|
+
}
|
|
103
|
+
return registry;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Extracts source and source map from a Source object, falling back to a
|
|
108
|
+
* registered original source for assets that another SourceMapDevToolPlugin
|
|
109
|
+
* instance has already wrapped (whose internal map is now `null`).
|
|
110
|
+
*
|
|
111
|
+
* The returned source is read from the asset as it currently stands — that way
|
|
112
|
+
* any `sourceMappingURL` comments appended by earlier plugin instances survive
|
|
113
|
+
* — while the map is taken from the pinned original Source when the current
|
|
114
|
+
* one no longer carries it. `mapSource` identifies which Source instance was
|
|
115
|
+
* actually queried for the map (the current asset, or the pinned original);
|
|
116
|
+
* that's the one whose internal caches the caller should release.
|
|
117
|
+
* @param {string} file file name
|
|
118
|
+
* @param {Source} asset source object as currently held by the compilation
|
|
119
|
+
* @param {MapOptions} options map extraction options
|
|
120
|
+
* @param {Map<string, Source>} registry compilation-scoped original-source registry
|
|
121
|
+
* @returns {{ source: string, sourceMap: RawSourceMap, mapSource: Source } | undefined} extracted pair or `undefined` when no map is recoverable
|
|
122
|
+
*/
|
|
123
|
+
const extractSourceAndMap = (file, asset, options, registry) => {
|
|
124
|
+
/** @type {string | Buffer} */
|
|
125
|
+
let source;
|
|
126
|
+
/** @type {null | RawSourceMap} */
|
|
127
|
+
let sourceMap;
|
|
128
|
+
if (asset.sourceAndMap) {
|
|
129
|
+
const sourceAndMap = asset.sourceAndMap(options);
|
|
130
|
+
source = sourceAndMap.source;
|
|
131
|
+
sourceMap = sourceAndMap.map;
|
|
132
|
+
} else {
|
|
133
|
+
source = asset.source();
|
|
134
|
+
sourceMap = asset.map(options);
|
|
135
|
+
}
|
|
136
|
+
// Bail before touching the registry if we can't return a usable string
|
|
137
|
+
// source — pinning a non-string-producing asset would only waste the slot.
|
|
138
|
+
if (typeof source !== "string") return;
|
|
139
|
+
if (sourceMap) {
|
|
140
|
+
// The current asset still owns the original map — pin a reference so
|
|
141
|
+
// that a later plugin instance (which will see a rewrapped asset
|
|
142
|
+
// without a map) can recover it on demand.
|
|
143
|
+
if (!registry.has(file)) registry.set(file, asset);
|
|
144
|
+
return { source, sourceMap, mapSource: asset };
|
|
145
|
+
}
|
|
146
|
+
// The current asset (typically a `RawSource` left by an earlier
|
|
147
|
+
// SourceMapDevToolPlugin instance) has no internal map. Re-extract
|
|
148
|
+
// the map from the original Source we pinned earlier. We keep using
|
|
149
|
+
// `source` from the current asset so that any prior wrappers (e.g.
|
|
150
|
+
// appended sourceMappingURL comments) are preserved.
|
|
151
|
+
const original = registry.get(file);
|
|
152
|
+
if (!original) return;
|
|
153
|
+
sourceMap = original.sourceAndMap
|
|
154
|
+
? original.sourceAndMap(options).map
|
|
155
|
+
: original.map(options);
|
|
156
|
+
if (!sourceMap) return;
|
|
157
|
+
return { source, sourceMap, mapSource: original };
|
|
158
|
+
};
|
|
159
|
+
|
|
72
160
|
/**
|
|
73
161
|
* Creating {@link SourceMapTask} for given file
|
|
74
162
|
* @param {string} file current compiled file
|
|
@@ -77,6 +165,7 @@ const quoteMeta = (str) => str.replace(METACHARACTERS_REGEXP, "\\$&");
|
|
|
77
165
|
* @param {MapOptions} options source map options
|
|
78
166
|
* @param {Compilation} compilation compilation instance
|
|
79
167
|
* @param {ItemCacheFacade} cacheItem cache item
|
|
168
|
+
* @param {Map<string, Source>} registry compilation-scoped original-source registry
|
|
80
169
|
* @returns {SourceMapTask | undefined} created task instance or `undefined`
|
|
81
170
|
*/
|
|
82
171
|
const getTaskForFile = (
|
|
@@ -85,24 +174,12 @@ const getTaskForFile = (
|
|
|
85
174
|
assetInfo,
|
|
86
175
|
options,
|
|
87
176
|
compilation,
|
|
88
|
-
cacheItem
|
|
177
|
+
cacheItem,
|
|
178
|
+
registry
|
|
89
179
|
) => {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
let sourceMap;
|
|
94
|
-
/**
|
|
95
|
-
* Check if asset can build source map
|
|
96
|
-
*/
|
|
97
|
-
if (asset.sourceAndMap) {
|
|
98
|
-
const sourceAndMap = asset.sourceAndMap(options);
|
|
99
|
-
sourceMap = sourceAndMap.map;
|
|
100
|
-
source = sourceAndMap.source;
|
|
101
|
-
} else {
|
|
102
|
-
sourceMap = asset.map(options);
|
|
103
|
-
source = asset.source();
|
|
104
|
-
}
|
|
105
|
-
if (!sourceMap || typeof source !== "string") return;
|
|
180
|
+
const extracted = extractSourceAndMap(file, asset, options, registry);
|
|
181
|
+
if (!extracted) return;
|
|
182
|
+
const { source, sourceMap, mapSource } = extracted;
|
|
106
183
|
const context = compilation.options.context;
|
|
107
184
|
const root = compilation.compiler.root;
|
|
108
185
|
const cachedAbsolutify = makePathsAbsolute.bindContextCache(context, root);
|
|
@@ -115,10 +192,10 @@ const getTaskForFile = (
|
|
|
115
192
|
|
|
116
193
|
return {
|
|
117
194
|
file,
|
|
118
|
-
|
|
119
|
-
source,
|
|
195
|
+
source: /** @type {string} */ (source),
|
|
120
196
|
assetInfo,
|
|
121
197
|
sourceMap,
|
|
198
|
+
mapSource,
|
|
122
199
|
modules,
|
|
123
200
|
cacheItem
|
|
124
201
|
};
|
|
@@ -126,15 +203,39 @@ const getTaskForFile = (
|
|
|
126
203
|
|
|
127
204
|
const PLUGIN_NAME = "SourceMapDevToolPlugin";
|
|
128
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Maps a configuration value (string, RegExp, function, nullish, or array of
|
|
208
|
+
* such) into a JSON-serializable form. Functions and RegExps are turned into
|
|
209
|
+
* their `.toString()` representation so that changes to inline callbacks
|
|
210
|
+
* invalidate caches; everything else is returned as-is so that the surrounding
|
|
211
|
+
* `JSON.stringify` does the escaping.
|
|
212
|
+
*
|
|
213
|
+
* The result is used through `JSON.stringify` to build cache identifiers, so
|
|
214
|
+
* we deliberately avoid any homemade `|` / `,` separators that could collide
|
|
215
|
+
* with characters appearing inside user-provided values such as `publicPath`,
|
|
216
|
+
* template strings, or `sourceRoot`.
|
|
217
|
+
* @param {EXPECTED_ANY} value option value
|
|
218
|
+
* @returns {EXPECTED_ANY} JSON-serializable representation
|
|
219
|
+
*/
|
|
220
|
+
const toCacheKeyValue = (value) => {
|
|
221
|
+
if (value === undefined || value === null) return value;
|
|
222
|
+
if (Array.isArray(value)) return value.map(toCacheKeyValue);
|
|
223
|
+
if (value instanceof RegExp || typeof value === "function") {
|
|
224
|
+
return value.toString();
|
|
225
|
+
}
|
|
226
|
+
return value;
|
|
227
|
+
};
|
|
228
|
+
|
|
129
229
|
class SourceMapDevToolPlugin {
|
|
130
230
|
/**
|
|
231
|
+
* Creates an instance of SourceMapDevToolPlugin.
|
|
131
232
|
* @param {SourceMapDevToolPluginOptions=} options options object
|
|
132
233
|
* @throws {Error} throws error, if got more than 1 arguments
|
|
133
234
|
*/
|
|
134
235
|
constructor(options = {}) {
|
|
135
236
|
/** @type {undefined | null | false | string} */
|
|
136
237
|
this.sourceMapFilename = options.filename;
|
|
137
|
-
/** @type {false |
|
|
238
|
+
/** @type {false | SourceMappingURLComment} */
|
|
138
239
|
this.sourceMappingURLComment =
|
|
139
240
|
options.append === false
|
|
140
241
|
? false
|
|
@@ -151,10 +252,32 @@ class SourceMapDevToolPlugin {
|
|
|
151
252
|
this.namespace = options.namespace || "";
|
|
152
253
|
/** @type {SourceMapDevToolPluginOptions} */
|
|
153
254
|
this.options = options;
|
|
255
|
+
// Cache salt derived from output-affecting options, so that two
|
|
256
|
+
// SourceMapDevToolPlugin instances (or `devtool` + a plugin) operating
|
|
257
|
+
// on the same asset don't share a cache entry. We serialize via
|
|
258
|
+
// `JSON.stringify` rather than a homemade separator so that any
|
|
259
|
+
// special characters (e.g. `|` inside a publicPath or sourceRoot)
|
|
260
|
+
// can't accidentally make two different option sets collide.
|
|
261
|
+
/** @type {string} */
|
|
262
|
+
this._cacheSalt = JSON.stringify([
|
|
263
|
+
toCacheKeyValue(options.filename),
|
|
264
|
+
toCacheKeyValue(options.append),
|
|
265
|
+
toCacheKeyValue(this.moduleFilenameTemplate),
|
|
266
|
+
toCacheKeyValue(this.fallbackModuleFilenameTemplate),
|
|
267
|
+
toCacheKeyValue(this.namespace),
|
|
268
|
+
options.module !== false,
|
|
269
|
+
options.columns !== false,
|
|
270
|
+
Boolean(options.noSources),
|
|
271
|
+
Boolean(options.debugIds),
|
|
272
|
+
options.sourceRoot || "",
|
|
273
|
+
toCacheKeyValue(options.ignoreList),
|
|
274
|
+
options.publicPath || "",
|
|
275
|
+
options.fileContext || ""
|
|
276
|
+
]);
|
|
154
277
|
}
|
|
155
278
|
|
|
156
279
|
/**
|
|
157
|
-
*
|
|
280
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
158
281
|
* @param {Compiler} compiler compiler instance
|
|
159
282
|
* @returns {void}
|
|
160
283
|
*/
|
|
@@ -193,6 +316,14 @@ class SourceMapDevToolPlugin {
|
|
|
193
316
|
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
194
317
|
new SourceMapDevToolModuleOptionsPlugin(options).apply(compilation);
|
|
195
318
|
|
|
319
|
+
// All SourceMapDevToolPlugin instances on the same compilation share
|
|
320
|
+
// a registry of pristine asset sources, so the second instance to
|
|
321
|
+
// run can still recover the original map after the first instance
|
|
322
|
+
// has replaced the asset with a `RawSource`. The registry lives on a
|
|
323
|
+
// module-scoped `WeakMap` keyed by compilation so it is released
|
|
324
|
+
// automatically and never pollutes the compilation object.
|
|
325
|
+
const originalSources = getOriginalSourceRegistry(compilation);
|
|
326
|
+
|
|
196
327
|
compilation.hooks.processAssets.tapAsync(
|
|
197
328
|
{
|
|
198
329
|
name: PLUGIN_NAME,
|
|
@@ -231,24 +362,47 @@ class SourceMapDevToolPlugin {
|
|
|
231
362
|
const tasks = [];
|
|
232
363
|
let fileIndex = 0;
|
|
233
364
|
|
|
365
|
+
// Shared deduplication set for `Source#clearCache` calls below.
|
|
366
|
+
// Webpack chunks routinely share module-level `CachedSource`
|
|
367
|
+
// instances. A per-call WeakSet would re-walk those shared
|
|
368
|
+
// subtrees once per chunk — 50 chunks × thousands of shared
|
|
369
|
+
// modules in dev/non-minified setups — and worse, every
|
|
370
|
+
// chunk's `sourceAndMap` would have to recompute the cleared
|
|
371
|
+
// caches, churning allocations (measured: +700 MB peak RSS,
|
|
372
|
+
// +6 s wall time on a 50×1000 synthetic build).
|
|
373
|
+
//
|
|
374
|
+
// Sharing one set lets each shared subtree be walked exactly
|
|
375
|
+
// once. The trade-off is that subsequent chunks' `sourceAndMap`
|
|
376
|
+
// calls can repopulate a shared module's `_cachedMaps` after
|
|
377
|
+
// its own clear was skipped (because the module is already in
|
|
378
|
+
// the visited set), leaving at most one populated cache entry
|
|
379
|
+
// per shared module at the end of the run — bounded to a few
|
|
380
|
+
// MB even at the scale of #20961. That's strictly preferable
|
|
381
|
+
// to the alternative's hundreds of MB of transient peak RSS.
|
|
382
|
+
const clearCacheVisited = new WeakSet();
|
|
383
|
+
|
|
234
384
|
asyncLib.each(
|
|
235
385
|
files,
|
|
236
386
|
(file, callback) => {
|
|
237
387
|
const asset =
|
|
238
388
|
/** @type {Readonly<Asset>} */
|
|
239
389
|
(compilation.getAsset(file));
|
|
240
|
-
if (asset.info.related && asset.info.related.sourceMap) {
|
|
241
|
-
fileIndex++;
|
|
242
|
-
return callback();
|
|
243
|
-
}
|
|
244
390
|
|
|
245
391
|
const chunk = fileToChunk.get(file);
|
|
246
392
|
const sourceMapNamespace = compilation.getPath(this.namespace, {
|
|
247
393
|
chunk
|
|
248
394
|
});
|
|
249
395
|
|
|
396
|
+
// The cache item identifier must include the per-instance
|
|
397
|
+
// salt so two SourceMapDevToolPlugin instances that target
|
|
398
|
+
// the same `file` don't collide in the persistent cache —
|
|
399
|
+
// they'd otherwise write different content to the same key
|
|
400
|
+
// and invalidate every pack on each build. We encode via
|
|
401
|
+
// `JSON.stringify` so that special characters (e.g. `|`)
|
|
402
|
+
// in an asset filename can't be spoofed to collide with the
|
|
403
|
+
// salt portion of the identifier.
|
|
250
404
|
const cacheItem = cache.getItemCache(
|
|
251
|
-
file,
|
|
405
|
+
JSON.stringify([file, this._cacheSalt]),
|
|
252
406
|
cache.mergeEtags(
|
|
253
407
|
cache.getLazyHashedEtag(asset.source),
|
|
254
408
|
sourceMapNamespace
|
|
@@ -263,6 +417,16 @@ class SourceMapDevToolPlugin {
|
|
|
263
417
|
* If presented in cache, reassigns assets. Cache assets already have source maps.
|
|
264
418
|
*/
|
|
265
419
|
if (cacheEntry) {
|
|
420
|
+
// Pin the still-unwrapped asset source in the registry
|
|
421
|
+
// before `compilation.updateAsset` replaces it. This is a
|
|
422
|
+
// pointer assignment — no source-map extraction work — and
|
|
423
|
+
// it lets a subsequent SourceMapDevToolPlugin instance
|
|
424
|
+
// extract the original map on demand even though the
|
|
425
|
+
// persistent cache hit lets us skip processing here.
|
|
426
|
+
if (!originalSources.has(file)) {
|
|
427
|
+
originalSources.set(file, asset.source);
|
|
428
|
+
}
|
|
429
|
+
|
|
266
430
|
const { assets, assetsInfo } = cacheEntry;
|
|
267
431
|
for (const cachedFile of Object.keys(assets)) {
|
|
268
432
|
if (cachedFile === file) {
|
|
@@ -311,9 +475,48 @@ class SourceMapDevToolPlugin {
|
|
|
311
475
|
columns: options.columns
|
|
312
476
|
},
|
|
313
477
|
compilation,
|
|
314
|
-
cacheItem
|
|
478
|
+
cacheItem,
|
|
479
|
+
originalSources
|
|
315
480
|
);
|
|
316
481
|
|
|
482
|
+
// Release the per-instance caches that `sourceAndMap`
|
|
483
|
+
// just populated. The composed map (and, for
|
|
484
|
+
// `SourceMapSource`, the parsed `_sourceMapAsObject` /
|
|
485
|
+
// `_innerSourceMapAsObject`) otherwise sit on the
|
|
486
|
+
// CachedSource — and every shared child — until phase
|
|
487
|
+
// 2 replaces the asset, which is what causes the OOM
|
|
488
|
+
// spike on builds with thousands of chunks
|
|
489
|
+
// (webpack#20961). Keep `source` since downstream
|
|
490
|
+
// consumers reading the original asset still need it;
|
|
491
|
+
// `hash`/`size` default to retained because they're
|
|
492
|
+
// cheap to keep but expensive to rebuild.
|
|
493
|
+
// `clearCacheVisited` is shared across every call (see
|
|
494
|
+
// its declaration above for the rationale).
|
|
495
|
+
//
|
|
496
|
+
// Target `task.mapSource` (not `asset.source`): when
|
|
497
|
+
// `extractSourceAndMap` falls back to the pinned
|
|
498
|
+
// original (the current asset is a `RawSource` left
|
|
499
|
+
// by an earlier plugin instance), the `sourceAndMap`
|
|
500
|
+
// call populated the original's caches, not the
|
|
501
|
+
// current asset's.
|
|
502
|
+
//
|
|
503
|
+
// Feature-detected: `clearCache` landed in
|
|
504
|
+
// `webpack-sources` 3.5, but `compilation.assets` may
|
|
505
|
+
// hold `Source`-like instances from a third-party
|
|
506
|
+
// plugin built against an older copy of
|
|
507
|
+
// `webpack-sources` (or a hand-rolled implementation).
|
|
508
|
+
// Calling it unconditionally would throw on those.
|
|
509
|
+
if (task && typeof task.mapSource.clearCache === "function") {
|
|
510
|
+
task.mapSource.clearCache(
|
|
511
|
+
{
|
|
512
|
+
maps: true,
|
|
513
|
+
source: false,
|
|
514
|
+
parsedMap: true
|
|
515
|
+
},
|
|
516
|
+
clearCacheVisited
|
|
517
|
+
);
|
|
518
|
+
}
|
|
519
|
+
|
|
317
520
|
if (task) {
|
|
318
521
|
const modules = task.modules;
|
|
319
522
|
|
|
@@ -444,12 +647,21 @@ class SourceMapDevToolPlugin {
|
|
|
444
647
|
"attach SourceMap"
|
|
445
648
|
);
|
|
446
649
|
|
|
447
|
-
const moduleFilenames =
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
650
|
+
const moduleFilenames =
|
|
651
|
+
/** @type {string[]} */
|
|
652
|
+
(modules.map((m) => moduleToSourceNameMapping.get(m)));
|
|
653
|
+
// We deliberately do NOT mutate `sourceMap` in place: the
|
|
654
|
+
// task's `sourceMap` reference may be shared with a
|
|
655
|
+
// `SourceMapSource` whose internal map cache is the same
|
|
656
|
+
// object (webpack-sources keeps it cached). A second
|
|
657
|
+
// `SourceMapDevToolPlugin` instance that reads the original
|
|
658
|
+
// source through the registry would otherwise see our
|
|
659
|
+
// rewrites. Instead we build a fresh `outputSourceMap` for
|
|
660
|
+
// the .map file and leave the original alone.
|
|
661
|
+
/** @type {number[] | undefined} */
|
|
662
|
+
let ignoreList;
|
|
451
663
|
if (options.ignoreList) {
|
|
452
|
-
const
|
|
664
|
+
const list = moduleFilenames.reduce(
|
|
453
665
|
/** @type {(acc: number[], sourceName: string, idx: number) => number[]} */ (
|
|
454
666
|
(acc, sourceName, idx) => {
|
|
455
667
|
const rule = /** @type {Rules} */ (
|
|
@@ -465,35 +677,27 @@ class SourceMapDevToolPlugin {
|
|
|
465
677
|
),
|
|
466
678
|
[]
|
|
467
679
|
);
|
|
468
|
-
if (
|
|
469
|
-
sourceMap.ignoreList = ignoreList;
|
|
470
|
-
}
|
|
680
|
+
if (list.length > 0) ignoreList = list;
|
|
471
681
|
}
|
|
472
682
|
|
|
473
|
-
if (options.noSources) {
|
|
474
|
-
sourceMap.sourcesContent = undefined;
|
|
475
|
-
}
|
|
476
|
-
sourceMap.sourceRoot = options.sourceRoot || "";
|
|
477
|
-
sourceMap.file = file;
|
|
478
683
|
const usesContentHash =
|
|
479
|
-
sourceMapFilename &&
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
resetRegexpState(CONTENT_HASH_DETECT_REGEXP);
|
|
684
|
+
typeof sourceMapFilename === "string" &&
|
|
685
|
+
getPresentKinds(sourceMapFilename).has("contenthash");
|
|
483
686
|
|
|
687
|
+
let outputFile = file;
|
|
484
688
|
// If SourceMap and asset uses contenthash, avoid a circular dependency by hiding hash in `file`
|
|
485
689
|
if (usesContentHash && task.assetInfo.contenthash) {
|
|
486
690
|
const contenthash = task.assetInfo.contenthash;
|
|
487
691
|
const pattern = Array.isArray(contenthash)
|
|
488
692
|
? contenthash.map(quoteMeta).join("|")
|
|
489
693
|
: quoteMeta(contenthash);
|
|
490
|
-
|
|
694
|
+
outputFile = outputFile.replace(
|
|
491
695
|
new RegExp(pattern, "g"),
|
|
492
696
|
(m) => "x".repeat(m.length)
|
|
493
697
|
);
|
|
494
698
|
}
|
|
495
699
|
|
|
496
|
-
/** @type {false |
|
|
700
|
+
/** @type {false | SourceMappingURLComment} */
|
|
497
701
|
let currentSourceMappingURLComment = sourceMappingURLComment;
|
|
498
702
|
const cssExtensionDetected =
|
|
499
703
|
CSS_EXTENSION_DETECT_REGEXP.test(file);
|
|
@@ -510,23 +714,64 @@ class SourceMapDevToolPlugin {
|
|
|
510
714
|
);
|
|
511
715
|
}
|
|
512
716
|
|
|
717
|
+
/** @type {string | undefined} */
|
|
718
|
+
let debugIdValue;
|
|
513
719
|
if (options.debugIds) {
|
|
514
|
-
const debugId = generateDebugId(source,
|
|
515
|
-
|
|
720
|
+
const debugId = generateDebugId(source, outputFile);
|
|
721
|
+
debugIdValue = debugId;
|
|
516
722
|
|
|
517
723
|
const debugIdComment = `\n//# debugId=${debugId}`;
|
|
518
|
-
currentSourceMappingURLComment
|
|
519
|
-
currentSourceMappingURLComment
|
|
520
|
-
|
|
521
|
-
|
|
724
|
+
if (currentSourceMappingURLComment === false) {
|
|
725
|
+
currentSourceMappingURLComment = debugIdComment;
|
|
726
|
+
} else if (
|
|
727
|
+
typeof currentSourceMappingURLComment === "function"
|
|
728
|
+
) {
|
|
729
|
+
// Wrap the user's append function so the debug-id
|
|
730
|
+
// comment is prepended at call time. Template-string
|
|
731
|
+
// concatenation would coerce the function to a string
|
|
732
|
+
// and lose its dynamic behavior.
|
|
733
|
+
const wrappedFn = currentSourceMappingURLComment;
|
|
734
|
+
currentSourceMappingURLComment = (pathData, assetInfo) =>
|
|
735
|
+
`${debugIdComment}${wrappedFn(pathData, assetInfo)}`;
|
|
736
|
+
} else {
|
|
737
|
+
currentSourceMappingURLComment = `${debugIdComment}${currentSourceMappingURLComment}`;
|
|
738
|
+
}
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
/** @type {RawSourceMap} */
|
|
742
|
+
const outputSourceMap = {
|
|
743
|
+
...sourceMap,
|
|
744
|
+
sources: moduleFilenames,
|
|
745
|
+
sourceRoot: options.sourceRoot || "",
|
|
746
|
+
file: outputFile
|
|
747
|
+
};
|
|
748
|
+
if (ignoreList !== undefined) {
|
|
749
|
+
outputSourceMap.ignoreList = ignoreList;
|
|
750
|
+
}
|
|
751
|
+
if (options.noSources) {
|
|
752
|
+
outputSourceMap.sourcesContent = undefined;
|
|
753
|
+
}
|
|
754
|
+
if (debugIdValue !== undefined) {
|
|
755
|
+
outputSourceMap.debugId = debugIdValue;
|
|
522
756
|
}
|
|
523
757
|
|
|
524
|
-
const sourceMapString = JSON.stringify(sourceMap);
|
|
525
758
|
if (sourceMapFilename) {
|
|
759
|
+
// External `.map` file: hold the serialized map as a
|
|
760
|
+
// `Buffer` instead of a V8 string. `RawSource` accepts
|
|
761
|
+
// a buffer directly, and the emitted asset stays in
|
|
762
|
+
// `compilation.assets` until the build finishes — so
|
|
763
|
+
// storing the bytes off the V8 heap (where Buffers
|
|
764
|
+
// live, accounted as `external` memory) avoids keeping
|
|
765
|
+
// a large V8 string alive for the rest of the build
|
|
766
|
+
// and reduces heap pressure on `--max-old-space-size`.
|
|
767
|
+
const sourceMapBuffer = Buffer.from(
|
|
768
|
+
JSON.stringify(outputSourceMap),
|
|
769
|
+
"utf8"
|
|
770
|
+
);
|
|
526
771
|
const filename = file;
|
|
527
772
|
const sourceMapContentHash = usesContentHash
|
|
528
773
|
? createHash(compilation.outputOptions.hashFunction)
|
|
529
|
-
.update(
|
|
774
|
+
.update(sourceMapBuffer)
|
|
530
775
|
.digest("hex")
|
|
531
776
|
: undefined;
|
|
532
777
|
|
|
@@ -565,14 +810,40 @@ class SourceMapDevToolPlugin {
|
|
|
565
810
|
})
|
|
566
811
|
);
|
|
567
812
|
}
|
|
813
|
+
// Preserve any existing related.sourceMap entries from
|
|
814
|
+
// earlier SourceMapDevToolPlugin runs on the same asset so
|
|
815
|
+
// that all generated maps remain discoverable via asset
|
|
816
|
+
// info (the schema allows string or string[]).
|
|
817
|
+
const existingSourceMap =
|
|
818
|
+
task.assetInfo.related &&
|
|
819
|
+
task.assetInfo.related.sourceMap;
|
|
820
|
+
/** @type {string | string[]} */
|
|
821
|
+
let relatedSourceMap;
|
|
822
|
+
if (
|
|
823
|
+
existingSourceMap === undefined ||
|
|
824
|
+
existingSourceMap === null
|
|
825
|
+
) {
|
|
826
|
+
relatedSourceMap = sourceMapFile;
|
|
827
|
+
} else if (Array.isArray(existingSourceMap)) {
|
|
828
|
+
relatedSourceMap = existingSourceMap.includes(
|
|
829
|
+
sourceMapFile
|
|
830
|
+
)
|
|
831
|
+
? existingSourceMap
|
|
832
|
+
: [...existingSourceMap, sourceMapFile];
|
|
833
|
+
} else {
|
|
834
|
+
relatedSourceMap =
|
|
835
|
+
existingSourceMap === sourceMapFile
|
|
836
|
+
? existingSourceMap
|
|
837
|
+
: [existingSourceMap, sourceMapFile];
|
|
838
|
+
}
|
|
568
839
|
const assetInfo = {
|
|
569
|
-
related: { sourceMap:
|
|
840
|
+
related: { sourceMap: relatedSourceMap }
|
|
570
841
|
};
|
|
571
842
|
assets[file] = asset;
|
|
572
843
|
assetsInfo[file] = assetInfo;
|
|
573
844
|
compilation.updateAsset(file, asset, assetInfo);
|
|
574
845
|
// Add source map file to compilation assets and chunk files
|
|
575
|
-
const sourceMapAsset = new RawSource(
|
|
846
|
+
const sourceMapAsset = new RawSource(sourceMapBuffer);
|
|
576
847
|
const sourceMapAssetInfo = {
|
|
577
848
|
...sourceMapInfo,
|
|
578
849
|
development: true
|
|
@@ -598,6 +869,16 @@ class SourceMapDevToolPlugin {
|
|
|
598
869
|
`${PLUGIN_NAME}: append can't be a function when no filename is provided`
|
|
599
870
|
);
|
|
600
871
|
}
|
|
872
|
+
// Inline data-URL form: `[map]` gets the raw JSON, `[url]`
|
|
873
|
+
// gets the same JSON base64-encoded. `URL_COMMENT_REGEXP`
|
|
874
|
+
// is a `/g` regex, so a user `append` template with more
|
|
875
|
+
// than one `[url]` placeholder would otherwise re-encode
|
|
876
|
+
// the same JSON per match. Pre-compute both once.
|
|
877
|
+
const sourceMapString = JSON.stringify(outputSourceMap);
|
|
878
|
+
const sourceMapBase64 = Buffer.from(
|
|
879
|
+
sourceMapString,
|
|
880
|
+
"utf8"
|
|
881
|
+
).toString("base64");
|
|
601
882
|
/**
|
|
602
883
|
* Add source map as data url to asset
|
|
603
884
|
*/
|
|
@@ -608,10 +889,7 @@ class SourceMapDevToolPlugin {
|
|
|
608
889
|
.replace(
|
|
609
890
|
URL_COMMENT_REGEXP,
|
|
610
891
|
() =>
|
|
611
|
-
`data:application/json;charset=utf-8;base64,${
|
|
612
|
-
sourceMapString,
|
|
613
|
-
"utf8"
|
|
614
|
-
).toString("base64")}`
|
|
892
|
+
`data:application/json;charset=utf-8;base64,${sourceMapBase64}`
|
|
615
893
|
)
|
|
616
894
|
);
|
|
617
895
|
assets[file] = asset;
|
package/lib/Stats.js
CHANGED
|
@@ -12,9 +12,11 @@
|
|
|
12
12
|
|
|
13
13
|
class Stats {
|
|
14
14
|
/**
|
|
15
|
+
* Creates an instance of Stats.
|
|
15
16
|
* @param {Compilation} compilation webpack compilation
|
|
16
17
|
*/
|
|
17
18
|
constructor(compilation) {
|
|
19
|
+
/** @type {Compilation} */
|
|
18
20
|
this.compilation = compilation;
|
|
19
21
|
}
|
|
20
22
|
|
|
@@ -31,6 +33,7 @@ class Stats {
|
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
/**
|
|
36
|
+
* Checks whether this stats has warnings.
|
|
34
37
|
* @returns {boolean} true if the compilation had a warning
|
|
35
38
|
*/
|
|
36
39
|
hasWarnings() {
|
|
@@ -41,6 +44,7 @@ class Stats {
|
|
|
41
44
|
}
|
|
42
45
|
|
|
43
46
|
/**
|
|
47
|
+
* Checks whether this stats has errors.
|
|
44
48
|
* @returns {boolean} true if the compilation encountered an error
|
|
45
49
|
*/
|
|
46
50
|
hasErrors() {
|
|
@@ -51,6 +55,7 @@ class Stats {
|
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
/**
|
|
58
|
+
* Returns json output.
|
|
54
59
|
* @param {StatsValue=} options stats options
|
|
55
60
|
* @returns {StatsCompilation} json output
|
|
56
61
|
*/
|
|
@@ -67,6 +72,7 @@ class Stats {
|
|
|
67
72
|
}
|
|
68
73
|
|
|
69
74
|
/**
|
|
75
|
+
* Returns a string representation.
|
|
70
76
|
* @param {StatsValue=} options stats options
|
|
71
77
|
* @returns {string} string output
|
|
72
78
|
*/
|