@depup/webpack 5.106.1-depup.0 → 5.109.2-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/bin/webpack.js +12 -0
- 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 +153 -19
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +27 -28
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +85 -37
- package/lib/Compilation.js +656 -112
- package/lib/Compiler.js +109 -35
- 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 +537 -139
- 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 +421 -113
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +381 -80
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +701 -175
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +115 -8
- 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 +33 -30
- 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 -57
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +18 -4
- 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 +519 -206
- package/lib/NormalModuleFactory.js +156 -31
- 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 +123 -118
- 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 +52 -6
- 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 +302 -12
- 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 +612 -43
- 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/HoistContainerReferencesPlugin.js +47 -55
- package/lib/container/ModuleFederationPlugin.js +21 -29
- 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 +540 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +173 -81
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +371 -208
- package/lib/css/CssParser.js +3538 -1963
- package/lib/css/syntax.js +4155 -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 +157 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -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 +681 -367
- 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 +34 -3
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
- 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 +60 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +427 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
- 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 +80 -52
- 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 +53 -12
- package/lib/html/HtmlGenerator.js +1490 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1129 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9106 -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 +49 -12
- 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 +628 -198
- package/lib/javascript/JavascriptParser.js +1334 -471
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +5037 -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 +33 -3
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
- 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 +22 -16
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +603 -130
- 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 +229 -55
- package/lib/optimize/RealContentHashPlugin.js +130 -52
- 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 +200 -50
- 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 +687 -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 +427 -1006
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +345 -59
- 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 +289 -201
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
- package/lib/stats/StatsFactory.js +70 -27
- 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 +118 -7
- 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 +1173 -80
- 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 +11053 -3019
- 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/css/CssGenerator.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
const {
|
|
9
9
|
ConcatSource,
|
|
10
|
+
OriginalSource,
|
|
10
11
|
RawSource,
|
|
11
12
|
ReplaceSource,
|
|
12
13
|
SourceMapSource
|
|
@@ -15,18 +16,32 @@ const { UsageState } = require("../ExportsInfo");
|
|
|
15
16
|
const Generator = require("../Generator");
|
|
16
17
|
const InitFragment = require("../InitFragment");
|
|
17
18
|
const {
|
|
19
|
+
CSS_TEXT_TYPE,
|
|
20
|
+
CSS_TEXT_TYPES,
|
|
18
21
|
CSS_TYPE,
|
|
19
22
|
CSS_TYPES,
|
|
23
|
+
JAVASCRIPT_AND_CSS_TEXT_TYPES,
|
|
20
24
|
JAVASCRIPT_AND_CSS_TYPES,
|
|
21
25
|
JAVASCRIPT_TYPE,
|
|
22
|
-
JAVASCRIPT_TYPES
|
|
26
|
+
JAVASCRIPT_TYPES,
|
|
27
|
+
NO_TYPES
|
|
23
28
|
} = require("../ModuleSourceTypeConstants");
|
|
24
29
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
25
30
|
const Template = require("../Template");
|
|
31
|
+
const { getPresentKinds } = require("../TemplatedPathPlugin");
|
|
26
32
|
const CssImportDependency = require("../dependencies/CssImportDependency");
|
|
27
33
|
const HarmonyImportSideEffectDependency = require("../dependencies/HarmonyImportSideEffectDependency");
|
|
28
34
|
|
|
35
|
+
const { encodeMappings } = require("../util/createMappings");
|
|
36
|
+
const { contextifySourceUrl } = require("../util/identifier");
|
|
29
37
|
const memoize = require("../util/memoize");
|
|
38
|
+
const {
|
|
39
|
+
PUBLIC_PATH_FULL_HASH,
|
|
40
|
+
walkFullHashPlaceholders
|
|
41
|
+
} = require("../util/publicPathPlaceholder");
|
|
42
|
+
|
|
43
|
+
// Avoids `type.split("/")[0]` allocation on the `getTypes` hot path.
|
|
44
|
+
const CSS_TYPE_PREFIX = `${CSS_TYPE}/`;
|
|
30
45
|
|
|
31
46
|
/** @typedef {import("webpack-sources").Source} Source */
|
|
32
47
|
/** @typedef {import("../../declarations/WebpackOptions").CssModuleGeneratorOptions} CssModuleGeneratorOptions */
|
|
@@ -34,7 +49,8 @@ const memoize = require("../util/memoize");
|
|
|
34
49
|
/** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
|
|
35
50
|
/** @typedef {import("../Dependency")} Dependency */
|
|
36
51
|
/** @typedef {import("../DependencyTemplate").CssData} CssData */
|
|
37
|
-
/** @typedef {import("../DependencyTemplate").
|
|
52
|
+
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
|
53
|
+
/** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} CssDependencyTemplateContext */
|
|
38
54
|
/** @typedef {import("../Generator").GenerateContext} GenerateContext */
|
|
39
55
|
/** @typedef {import("../Generator").UpdateHashContext} UpdateHashContext */
|
|
40
56
|
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
|
@@ -46,30 +62,123 @@ const memoize = require("../util/memoize");
|
|
|
46
62
|
/** @typedef {import("../NormalModule")} NormalModule */
|
|
47
63
|
/** @typedef {import("../util/Hash")} Hash */
|
|
48
64
|
/** @typedef {import("./CssModulesPlugin").ModuleFactoryCacheEntry} ModuleFactoryCacheEntry */
|
|
49
|
-
/** @typedef {import("
|
|
65
|
+
/** @typedef {import("./CssModule")} CssModule */
|
|
66
|
+
/** @typedef {import("./CssModule").CssModuleBuildInfo} CssModuleBuildInfo */
|
|
67
|
+
/** @typedef {import("./CssModule").CssModuleBuildMeta} CssModuleBuildMeta */
|
|
50
68
|
/** @typedef {import("../Compilation")} Compilation */
|
|
51
69
|
/** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
|
|
52
70
|
/** @typedef {import("../../declarations/WebpackOptions").CssParserExportType} CssParserExportType */
|
|
53
71
|
|
|
72
|
+
/** @typedef {{ line: number, column: number }} SourcePosition */
|
|
73
|
+
/** @typedef {Map<string, SourcePosition>} ExportLocsMap */
|
|
74
|
+
|
|
54
75
|
const getPropertyName = memoize(() => require("../util/property"));
|
|
55
76
|
const getCssModulesPlugin = memoize(() => require("./CssModulesPlugin"));
|
|
56
77
|
|
|
78
|
+
/** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Build a v3 source map mapping CSS-class export lines back to their selector positions.
|
|
82
|
+
* @param {string} generatedJs the generated JS string
|
|
83
|
+
* @param {ExportLocsMap} exportLocs map of export names to CSS source location
|
|
84
|
+
* @param {string} cssContent original CSS source content
|
|
85
|
+
* @param {string} sourceName source identifier to use in the map
|
|
86
|
+
* @returns {RawSourceMap} a v3 RawSourceMap
|
|
87
|
+
*/
|
|
88
|
+
const buildExportsSourceMap = (
|
|
89
|
+
generatedJs,
|
|
90
|
+
exportLocs,
|
|
91
|
+
cssContent,
|
|
92
|
+
sourceName
|
|
93
|
+
) => {
|
|
94
|
+
const lines = generatedJs.split("\n");
|
|
95
|
+
|
|
96
|
+
// O(L) pass: match `\t"<name>": <value>` lines against export names.
|
|
97
|
+
const keyToName = new Map();
|
|
98
|
+
for (const [exportName] of exportLocs) {
|
|
99
|
+
keyToName.set(JSON.stringify(exportName), exportName);
|
|
100
|
+
}
|
|
101
|
+
const lineByExport = new Map();
|
|
102
|
+
for (let i = 0; i < lines.length && lineByExport.size < keyToName.size; i++) {
|
|
103
|
+
const line = lines[i];
|
|
104
|
+
if (line.charCodeAt(0) !== 9 || line.charCodeAt(1) !== 34) continue;
|
|
105
|
+
let j = 2;
|
|
106
|
+
while (j < line.length) {
|
|
107
|
+
const c = line.charCodeAt(j);
|
|
108
|
+
if (c === 92) {
|
|
109
|
+
j += 2;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
if (c === 34) break;
|
|
113
|
+
j++;
|
|
114
|
+
}
|
|
115
|
+
if (line.charCodeAt(j + 1) !== 58) continue;
|
|
116
|
+
const name = keyToName.get(line.slice(1, j + 1));
|
|
117
|
+
if (name !== undefined && !lineByExport.has(name)) {
|
|
118
|
+
lineByExport.set(name, i);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** @type {(import("../util/createMappings").LineMappings)[]} */
|
|
123
|
+
const perLine = lines.map(() => null);
|
|
124
|
+
for (const [exportName, genLine] of lineByExport) {
|
|
125
|
+
const pos = /** @type {SourcePosition} */ (exportLocs.get(exportName));
|
|
126
|
+
// V3 source maps are 0-based; webpack `loc` lines are 1-based.
|
|
127
|
+
perLine[genLine] = {
|
|
128
|
+
generatedColumn: 0,
|
|
129
|
+
sourceIndex: 0,
|
|
130
|
+
originalLine: pos.line - 1,
|
|
131
|
+
originalColumn: pos.column
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return {
|
|
136
|
+
version: 3,
|
|
137
|
+
file: "",
|
|
138
|
+
sources: [sourceName],
|
|
139
|
+
sourcesContent: [cssContent],
|
|
140
|
+
names: [],
|
|
141
|
+
mappings: encodeMappings(perLine)
|
|
142
|
+
};
|
|
143
|
+
};
|
|
144
|
+
|
|
57
145
|
class CssGenerator extends Generator {
|
|
58
146
|
/**
|
|
147
|
+
* Creates an instance of CssGenerator.
|
|
59
148
|
* @param {CssModuleGeneratorOptions} options options
|
|
60
149
|
* @param {ModuleGraph} moduleGraph the module graph
|
|
61
150
|
*/
|
|
62
151
|
constructor(options, moduleGraph) {
|
|
63
152
|
super();
|
|
153
|
+
/** @type {CssModuleGeneratorOptions} */
|
|
64
154
|
this.options = options;
|
|
155
|
+
/** @type {boolean | undefined} */
|
|
65
156
|
this._exportsOnly = options.exportsOnly;
|
|
157
|
+
/** @type {boolean | undefined} */
|
|
66
158
|
this._esModule = options.esModule;
|
|
159
|
+
/** @type {ModuleGraph} */
|
|
67
160
|
this._moduleGraph = moduleGraph;
|
|
68
161
|
/** @type {WeakMap<Source, ModuleFactoryCacheEntry>} */
|
|
69
162
|
this._moduleFactoryCache = new WeakMap();
|
|
163
|
+
const localIdentName = options.localIdentName;
|
|
164
|
+
// Detect hash placeholders via the canonical template parser so this stays
|
|
165
|
+
// in sync with `interpolate`'s grammar.
|
|
166
|
+
const isFn = typeof localIdentName === "function";
|
|
167
|
+
const kinds =
|
|
168
|
+
typeof localIdentName === "string"
|
|
169
|
+
? getPresentKinds(localIdentName)
|
|
170
|
+
: undefined;
|
|
171
|
+
/** @type {boolean} */
|
|
172
|
+
this._localIdentNeedsHash =
|
|
173
|
+
isFn ||
|
|
174
|
+
(kinds !== undefined && (kinds.has("fullhash") || kinds.has("hash")));
|
|
175
|
+
/** @type {boolean} */
|
|
176
|
+
this._localIdentNeedsContentHash =
|
|
177
|
+
isFn || (kinds !== undefined && kinds.has("contenthash"));
|
|
70
178
|
}
|
|
71
179
|
|
|
72
180
|
/**
|
|
181
|
+
* Returns the reason this module cannot be concatenated, when one exists.
|
|
73
182
|
* @param {NormalModule} module module for which the bailout reason should be determined
|
|
74
183
|
* @param {ConcatenationBailoutReasonContext} context context
|
|
75
184
|
* @returns {string | undefined} reason why this module can't be concatenated, undefined when it can be concatenated
|
|
@@ -83,133 +192,40 @@ class CssGenerator extends Generator {
|
|
|
83
192
|
}
|
|
84
193
|
|
|
85
194
|
/**
|
|
86
|
-
*
|
|
87
|
-
* @param {NormalModule} module the module to generate CSS text for
|
|
88
|
-
* @param {GenerateContext} generateContext the generate context
|
|
89
|
-
* @param {boolean} getDefaultExport whether to get the default export
|
|
90
|
-
* @returns {{ expr: string, type: CssParserExportType }[]} JavaScript code that concatenates all imported CSS
|
|
91
|
-
*/
|
|
92
|
-
_generateImportCode(module, generateContext, getDefaultExport = true) {
|
|
93
|
-
const moduleGraph = generateContext.moduleGraph;
|
|
94
|
-
/** @type {{ expr: string, type: CssParserExportType }[]} */
|
|
95
|
-
const parts = [];
|
|
96
|
-
|
|
97
|
-
// Iterate through module.dependencies to maintain source order
|
|
98
|
-
for (const dep of module.dependencies) {
|
|
99
|
-
if (dep instanceof CssImportDependency) {
|
|
100
|
-
/** @type {CssModule} */
|
|
101
|
-
const depModule = /** @type {CssModule} */ (moduleGraph.getModule(dep));
|
|
102
|
-
const importVar = generateContext.runtimeTemplate.moduleExports({
|
|
103
|
-
module: depModule,
|
|
104
|
-
chunkGraph: generateContext.chunkGraph,
|
|
105
|
-
request: /** @type {CssModule} */ (depModule).userRequest,
|
|
106
|
-
weak: false,
|
|
107
|
-
runtimeRequirements: generateContext.runtimeRequirements
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
if (getDefaultExport) {
|
|
111
|
-
generateContext.runtimeRequirements.add(
|
|
112
|
-
RuntimeGlobals.compatGetDefaultExport
|
|
113
|
-
);
|
|
114
|
-
parts.push({
|
|
115
|
-
expr: `(${RuntimeGlobals.compatGetDefaultExport}(${importVar})() || "")`,
|
|
116
|
-
type: /** @type {CssParserExportType} */ (
|
|
117
|
-
/** @type {CssModule} */ (depModule).exportType
|
|
118
|
-
)
|
|
119
|
-
});
|
|
120
|
-
} else {
|
|
121
|
-
parts.push({
|
|
122
|
-
expr: importVar,
|
|
123
|
-
type: /** @type {CssParserExportType} */ (
|
|
124
|
-
/** @type {CssModule} */ (depModule).exportType
|
|
125
|
-
)
|
|
126
|
-
});
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
return parts;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Generate CSS source for the current module
|
|
136
|
-
* @param {NormalModule} module the module to generate CSS source for
|
|
137
|
-
* @param {GenerateContext} generateContext the generate context
|
|
138
|
-
* @returns {Source | null} the CSS source
|
|
139
|
-
*/
|
|
140
|
-
_generateContentSource(module, generateContext) {
|
|
141
|
-
const moduleSourceContent = /** @type {Source} */ (
|
|
142
|
-
this.generate(module, {
|
|
143
|
-
...generateContext,
|
|
144
|
-
type: CSS_TYPE
|
|
145
|
-
})
|
|
146
|
-
);
|
|
147
|
-
|
|
148
|
-
if (!moduleSourceContent) {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
const compilation = generateContext.runtimeTemplate.compilation;
|
|
153
|
-
// For non-link exportTypes (style, text, css-style-sheet), url() in the CSS
|
|
154
|
-
// is resolved relative to the document URL (for <style> tags and CSSStyleSheet),
|
|
155
|
-
// not relative to any output file. Use empty undoPath so urls are relative to
|
|
156
|
-
// the output root.
|
|
157
|
-
const undoPath = "";
|
|
158
|
-
|
|
159
|
-
const CssModulesPlugin = getCssModulesPlugin();
|
|
160
|
-
const hooks = CssModulesPlugin.getCompilationHooks(compilation);
|
|
161
|
-
return CssModulesPlugin.renderModule(
|
|
162
|
-
/** @type {CssModule} */ (module),
|
|
163
|
-
{
|
|
164
|
-
undoPath,
|
|
165
|
-
moduleSourceContent,
|
|
166
|
-
moduleFactoryCache: this._moduleFactoryCache,
|
|
167
|
-
runtimeTemplate: generateContext.runtimeTemplate
|
|
168
|
-
},
|
|
169
|
-
hooks
|
|
170
|
-
);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
/**
|
|
174
|
-
* Convert a CSS Source to a JS string literal Source, preserving source map.
|
|
175
|
-
* Wraps the CSS content with JSON.stringify so it can be embedded in JS code.
|
|
176
|
-
* @param {Source} cssSource the CSS source
|
|
177
|
-
* @param {NormalModule} module the module
|
|
178
|
-
* @returns {Source} a Source representing a JS string literal
|
|
179
|
-
*/
|
|
180
|
-
_cssSourceToJsStringLiteral(cssSource, module) {
|
|
181
|
-
const { source, map } = cssSource.sourceAndMap();
|
|
182
|
-
const content = /** @type {string} */ (source);
|
|
183
|
-
const escaped = JSON.stringify(content);
|
|
184
|
-
if (map) {
|
|
185
|
-
return new SourceMapSource(escaped, module.identifier(), map, content);
|
|
186
|
-
}
|
|
187
|
-
return new RawSource(escaped);
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* @param {NormalModule} module the current module
|
|
195
|
+
* Processes the provided module.
|
|
192
196
|
* @param {Dependency} dependency the dependency to generate
|
|
193
|
-
* @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
|
|
194
197
|
* @param {ReplaceSource} source the current replace source which can be modified
|
|
195
|
-
* @param {
|
|
198
|
+
* @param {DependencyTemplateContext & { cssData: CssData, type: string }} templateContext the template context (shared across all dependencies of the module)
|
|
196
199
|
* @returns {void}
|
|
197
200
|
*/
|
|
198
|
-
sourceDependency(
|
|
201
|
+
sourceDependency(dependency, source, templateContext) {
|
|
199
202
|
const constructor =
|
|
200
203
|
/** @type {DependencyConstructor} */
|
|
201
204
|
(dependency.constructor);
|
|
202
|
-
const template =
|
|
205
|
+
const template = templateContext.dependencyTemplates.get(constructor);
|
|
203
206
|
if (!template) {
|
|
204
207
|
throw new Error(
|
|
205
208
|
`No template for dependency: ${dependency.constructor.name}`
|
|
206
209
|
);
|
|
207
210
|
}
|
|
208
211
|
|
|
209
|
-
|
|
212
|
+
template.apply(dependency, source, templateContext);
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* Processes the provided module.
|
|
217
|
+
* @param {NormalModule} module the module to generate
|
|
218
|
+
* @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
|
|
219
|
+
* @param {ReplaceSource} source the current replace source which can be modified
|
|
220
|
+
* @param {GenerateContext & { cssData: CssData }} generateContext the generateContext
|
|
221
|
+
* @returns {void}
|
|
222
|
+
*/
|
|
223
|
+
sourceModule(module, initFragments, source, generateContext) {
|
|
224
|
+
// Only `dependency` varies across `template.apply` calls, so one context
|
|
225
|
+
// (and one lazy `chunkInitFragments` getter) serves the whole module.
|
|
210
226
|
/** @type {InitFragment<GenerateContext>[] | undefined} */
|
|
211
227
|
let chunkInitFragments;
|
|
212
|
-
/** @type {
|
|
228
|
+
/** @type {CssDependencyTemplateContext} */
|
|
213
229
|
const templateContext = {
|
|
214
230
|
runtimeTemplate: generateContext.runtimeTemplate,
|
|
215
231
|
dependencyTemplates: generateContext.dependencyTemplates,
|
|
@@ -241,41 +257,19 @@ class CssGenerator extends Generator {
|
|
|
241
257
|
}
|
|
242
258
|
};
|
|
243
259
|
|
|
244
|
-
template.apply(dependency, source, templateContext);
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* @param {NormalModule} module the module to generate
|
|
249
|
-
* @param {InitFragment<GenerateContext>[]} initFragments mutable list of init fragments
|
|
250
|
-
* @param {ReplaceSource} source the current replace source which can be modified
|
|
251
|
-
* @param {GenerateContext & { cssData: CssData }} generateContext the generateContext
|
|
252
|
-
* @returns {void}
|
|
253
|
-
*/
|
|
254
|
-
sourceModule(module, initFragments, source, generateContext) {
|
|
255
260
|
for (const dependency of module.dependencies) {
|
|
256
|
-
this.sourceDependency(
|
|
257
|
-
module,
|
|
258
|
-
dependency,
|
|
259
|
-
initFragments,
|
|
260
|
-
source,
|
|
261
|
-
generateContext
|
|
262
|
-
);
|
|
261
|
+
this.sourceDependency(dependency, source, templateContext);
|
|
263
262
|
}
|
|
264
263
|
|
|
265
264
|
if (module.presentationalDependencies !== undefined) {
|
|
266
265
|
for (const dependency of module.presentationalDependencies) {
|
|
267
|
-
this.sourceDependency(
|
|
268
|
-
module,
|
|
269
|
-
dependency,
|
|
270
|
-
initFragments,
|
|
271
|
-
source,
|
|
272
|
-
generateContext
|
|
273
|
-
);
|
|
266
|
+
this.sourceDependency(dependency, source, templateContext);
|
|
274
267
|
}
|
|
275
268
|
}
|
|
276
269
|
}
|
|
277
270
|
|
|
278
271
|
/**
|
|
272
|
+
* Generates generated code for this runtime module.
|
|
279
273
|
* @param {NormalModule} module module for which the code should be generated
|
|
280
274
|
* @param {GenerateContext} generateContext context for generate
|
|
281
275
|
* @returns {Source | null} generated code
|
|
@@ -291,7 +285,8 @@ class CssGenerator extends Generator {
|
|
|
291
285
|
/** @type {CssData} */
|
|
292
286
|
const cssData = {
|
|
293
287
|
esModule: /** @type {boolean} */ (this._esModule),
|
|
294
|
-
exports: new Map()
|
|
288
|
+
exports: new Map(),
|
|
289
|
+
exportLocs: new Map()
|
|
295
290
|
};
|
|
296
291
|
|
|
297
292
|
this.sourceModule(module, initFragments, source, {
|
|
@@ -301,23 +296,36 @@ class CssGenerator extends Generator {
|
|
|
301
296
|
|
|
302
297
|
switch (generateContext.type) {
|
|
303
298
|
case JAVASCRIPT_TYPE: {
|
|
299
|
+
const compilation = generateContext.runtimeTemplate.compilation;
|
|
300
|
+
const devtool = compilation.options.devtool;
|
|
301
|
+
const isCssModule = /** @type {CssModuleBuildMeta} */ (module.buildMeta)
|
|
302
|
+
.isCssModule;
|
|
303
|
+
|
|
304
304
|
const generateContentCode = () => {
|
|
305
305
|
switch (exportType) {
|
|
306
306
|
case "style": {
|
|
307
|
-
const cssSource = this.
|
|
308
|
-
module,
|
|
309
|
-
generateContext
|
|
310
|
-
);
|
|
307
|
+
const cssSource = this._renderCss(module, generateContext);
|
|
311
308
|
if (!cssSource) return "";
|
|
312
|
-
const moduleId = generateContext.chunkGraph.getModuleId(module);
|
|
313
309
|
|
|
314
310
|
generateContext.runtimeRequirements.add(
|
|
315
311
|
RuntimeGlobals.cssInjectStyle
|
|
316
312
|
);
|
|
317
313
|
|
|
314
|
+
const moduleId = generateContext.chunkGraph.getModuleId(module);
|
|
315
|
+
|
|
316
|
+
if (generateContext.concatenationScope) {
|
|
317
|
+
return new ConcatSource(
|
|
318
|
+
`__webpack_css_styles__.push([${JSON.stringify(moduleId)}, `,
|
|
319
|
+
this._cssToJsLiteral(cssSource, devtool, generateContext),
|
|
320
|
+
"]);"
|
|
321
|
+
);
|
|
322
|
+
}
|
|
323
|
+
|
|
318
324
|
return new ConcatSource(
|
|
319
|
-
`${RuntimeGlobals.cssInjectStyle}(${JSON.stringify(
|
|
320
|
-
|
|
325
|
+
`${RuntimeGlobals.cssInjectStyle}(${JSON.stringify(
|
|
326
|
+
moduleId
|
|
327
|
+
)}, `,
|
|
328
|
+
this._cssToJsLiteral(cssSource, devtool, generateContext),
|
|
321
329
|
");"
|
|
322
330
|
);
|
|
323
331
|
}
|
|
@@ -329,8 +337,8 @@ class CssGenerator extends Generator {
|
|
|
329
337
|
const generateImportCode = () => {
|
|
330
338
|
switch (exportType) {
|
|
331
339
|
case "style": {
|
|
332
|
-
return this.
|
|
333
|
-
.map((
|
|
340
|
+
return this._generateImportExpressions(module, generateContext)
|
|
341
|
+
.map((expr) => `${expr};`)
|
|
334
342
|
.join("\n");
|
|
335
343
|
}
|
|
336
344
|
default:
|
|
@@ -338,69 +346,41 @@ class CssGenerator extends Generator {
|
|
|
338
346
|
}
|
|
339
347
|
};
|
|
340
348
|
const generateExportCode = () => {
|
|
341
|
-
/** @returns {Source} generated CSS text as JS expression */
|
|
342
|
-
const generateCssText = () => {
|
|
343
|
-
const importCode = this._generateImportCode(
|
|
344
|
-
module,
|
|
345
|
-
generateContext
|
|
346
|
-
);
|
|
347
|
-
const cssSource = this._generateContentSource(
|
|
348
|
-
module,
|
|
349
|
-
generateContext
|
|
350
|
-
);
|
|
351
|
-
const jsLiteral = cssSource
|
|
352
|
-
? this._cssSourceToJsStringLiteral(cssSource, module)
|
|
353
|
-
: new RawSource('""');
|
|
354
|
-
|
|
355
|
-
if (importCode.length > 0) {
|
|
356
|
-
if (
|
|
357
|
-
exportType === "css-style-sheet" ||
|
|
358
|
-
importCode.some((part) => part.type !== exportType)
|
|
359
|
-
) {
|
|
360
|
-
generateContext.runtimeRequirements.add(
|
|
361
|
-
RuntimeGlobals.cssMergeStyleSheets
|
|
362
|
-
);
|
|
363
|
-
|
|
364
|
-
const args = importCode.map((part) => part.expr);
|
|
365
|
-
return new ConcatSource(
|
|
366
|
-
`${RuntimeGlobals.cssMergeStyleSheets}([${args.join(", ")}, `,
|
|
367
|
-
jsLiteral,
|
|
368
|
-
"])"
|
|
369
|
-
);
|
|
370
|
-
}
|
|
371
|
-
return new ConcatSource(
|
|
372
|
-
`${generateContext.runtimeTemplate.concatenation(
|
|
373
|
-
...importCode
|
|
374
|
-
)} + `,
|
|
375
|
-
jsLiteral
|
|
376
|
-
);
|
|
377
|
-
}
|
|
378
|
-
return jsLiteral;
|
|
379
|
-
};
|
|
380
349
|
/**
|
|
350
|
+
* Generates js default export.
|
|
381
351
|
* @returns {Source | null} the default export
|
|
382
352
|
*/
|
|
383
353
|
const generateJSDefaultExport = () => {
|
|
384
354
|
switch (exportType) {
|
|
385
355
|
case "text": {
|
|
386
|
-
return
|
|
356
|
+
return this._generateCssText(module, generateContext, true);
|
|
387
357
|
}
|
|
388
358
|
case "css-style-sheet": {
|
|
389
|
-
const
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
359
|
+
const rt = generateContext.runtimeTemplate;
|
|
360
|
+
const fnPrefix = rt.supportsArrowFunction()
|
|
361
|
+
? "() => {\n"
|
|
362
|
+
: "function() {\n";
|
|
363
|
+
const constOrVar = rt.renderConst();
|
|
364
|
+
const fallback =
|
|
365
|
+
"{ cssText: css, replaceSync: function(value) { this.cssText = value; } }";
|
|
366
|
+
if (rt.compilation.compiler.platform.node === true) {
|
|
367
|
+
return new ConcatSource(
|
|
368
|
+
`(${fnPrefix}${constOrVar} css = `,
|
|
369
|
+
this._generateCssText(module, generateContext, true),
|
|
370
|
+
`;\nreturn ${fallback};\n})()`
|
|
371
|
+
);
|
|
372
|
+
}
|
|
373
|
+
if (rt.isUniversalTarget()) {
|
|
374
|
+
return new ConcatSource(
|
|
375
|
+
`(${fnPrefix}${constOrVar} css = `,
|
|
376
|
+
this._generateCssText(module, generateContext, true),
|
|
377
|
+
`;\nif (typeof CSSStyleSheet === 'undefined') return ${fallback};\n${constOrVar} sheet = new CSSStyleSheet();\nsheet.replaceSync(css);\nreturn sheet;\n})()`
|
|
378
|
+
);
|
|
379
|
+
}
|
|
400
380
|
return new ConcatSource(
|
|
401
|
-
`(${fnPrefix}${constOrVar}
|
|
402
|
-
|
|
403
|
-
|
|
381
|
+
`(${fnPrefix}${constOrVar} sheet = new CSSStyleSheet();\nsheet.replaceSync(`,
|
|
382
|
+
this._generateCssText(module, generateContext, true),
|
|
383
|
+
");\nreturn sheet;\n})()"
|
|
404
384
|
);
|
|
405
385
|
}
|
|
406
386
|
default:
|
|
@@ -408,12 +388,10 @@ class CssGenerator extends Generator {
|
|
|
408
388
|
}
|
|
409
389
|
};
|
|
410
390
|
|
|
411
|
-
const isCSSModule = /** @type {BuildMeta} */ (module.buildMeta)
|
|
412
|
-
.isCSSModule;
|
|
413
391
|
/** @type {Source | null} */
|
|
414
392
|
const defaultExport = generateJSDefaultExport();
|
|
415
393
|
|
|
416
|
-
/** @type {
|
|
394
|
+
/** @type {CssModuleBuildInfo} */
|
|
417
395
|
(module.buildInfo).cssData = cssData;
|
|
418
396
|
|
|
419
397
|
// Required for HMR
|
|
@@ -421,10 +399,24 @@ class CssGenerator extends Generator {
|
|
|
421
399
|
generateContext.runtimeRequirements.add(RuntimeGlobals.module);
|
|
422
400
|
}
|
|
423
401
|
|
|
424
|
-
if (!defaultExport && cssData.exports.size === 0 && !
|
|
402
|
+
if (!defaultExport && cssData.exports.size === 0 && !isCssModule) {
|
|
425
403
|
return new RawSource("");
|
|
426
404
|
}
|
|
427
405
|
|
|
406
|
+
const exportsInfo =
|
|
407
|
+
generateContext.moduleGraph.getExportsInfo(module);
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* @param {string} name export name
|
|
411
|
+
* @returns {string | false} used export name when the export is referenced
|
|
412
|
+
*/
|
|
413
|
+
const getUsedExportName = (name) =>
|
|
414
|
+
/** @type {string | false} */ (
|
|
415
|
+
exportsInfo
|
|
416
|
+
.getExportInfo(name)
|
|
417
|
+
.getUsedName(name, generateContext.runtime)
|
|
418
|
+
);
|
|
419
|
+
|
|
428
420
|
if (generateContext.concatenationScope) {
|
|
429
421
|
const source = new ConcatSource();
|
|
430
422
|
/** @type {Set<string>} */
|
|
@@ -432,9 +424,7 @@ class CssGenerator extends Generator {
|
|
|
432
424
|
const { RESERVED_IDENTIFIER } = getPropertyName();
|
|
433
425
|
|
|
434
426
|
if (defaultExport) {
|
|
435
|
-
const usedName =
|
|
436
|
-
.getExportInfo(module, "default")
|
|
437
|
-
.getUsedName("default", generateContext.runtime);
|
|
427
|
+
const usedName = getUsedExportName("default");
|
|
438
428
|
if (usedName) {
|
|
439
429
|
let identifier = Template.toIdentifier(usedName);
|
|
440
430
|
if (RESERVED_IDENTIFIER.has(identifier)) {
|
|
@@ -454,14 +444,8 @@ class CssGenerator extends Generator {
|
|
|
454
444
|
}
|
|
455
445
|
|
|
456
446
|
for (const [name, v] of cssData.exports) {
|
|
457
|
-
const usedName =
|
|
458
|
-
|
|
459
|
-
.getUsedName(name, generateContext.runtime);
|
|
460
|
-
if (!usedName) {
|
|
461
|
-
continue;
|
|
462
|
-
}
|
|
463
|
-
|
|
464
|
-
let identifier = Template.toIdentifier(usedName);
|
|
447
|
+
const usedName = getUsedExportName(name);
|
|
448
|
+
let identifier = Template.toIdentifier(usedName || name);
|
|
465
449
|
if (RESERVED_IDENTIFIER.has(identifier)) {
|
|
466
450
|
identifier = `_${identifier}`;
|
|
467
451
|
}
|
|
@@ -476,7 +460,9 @@ class CssGenerator extends Generator {
|
|
|
476
460
|
identifier
|
|
477
461
|
);
|
|
478
462
|
source.add(
|
|
479
|
-
`${generateContext.runtimeTemplate.renderConst()} ${identifier} = ${JSON.stringify(
|
|
463
|
+
`${generateContext.runtimeTemplate.renderConst()} ${identifier} = ${JSON.stringify(
|
|
464
|
+
v
|
|
465
|
+
)};\n`
|
|
480
466
|
);
|
|
481
467
|
}
|
|
482
468
|
return source;
|
|
@@ -484,9 +470,7 @@ class CssGenerator extends Generator {
|
|
|
484
470
|
|
|
485
471
|
const needNsObj =
|
|
486
472
|
this._esModule &&
|
|
487
|
-
generateContext.
|
|
488
|
-
.getExportsInfo(module)
|
|
489
|
-
.otherExportsInfo.getUsed(generateContext.runtime) !==
|
|
473
|
+
exportsInfo.otherExportsInfo.getUsed(generateContext.runtime) !==
|
|
490
474
|
UsageState.Unused;
|
|
491
475
|
|
|
492
476
|
if (needNsObj) {
|
|
@@ -498,7 +482,25 @@ class CssGenerator extends Generator {
|
|
|
498
482
|
// Should be after `concatenationScope` to allow module inlining
|
|
499
483
|
generateContext.runtimeRequirements.add(RuntimeGlobals.module);
|
|
500
484
|
|
|
501
|
-
|
|
485
|
+
const defaultUsedName = defaultExport
|
|
486
|
+
? getUsedExportName("default")
|
|
487
|
+
: false;
|
|
488
|
+
|
|
489
|
+
/** @type {string[]} */
|
|
490
|
+
const exportEntries = [];
|
|
491
|
+
for (const [name, v] of cssData.exports) {
|
|
492
|
+
const exportKey = getUsedExportName(name) || name;
|
|
493
|
+
exportEntries.push(
|
|
494
|
+
`\t${JSON.stringify(exportKey)}: ${JSON.stringify(v)}`
|
|
495
|
+
);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
if (
|
|
499
|
+
!isCssModule &&
|
|
500
|
+
!needNsObj &&
|
|
501
|
+
exportEntries.length === 0 &&
|
|
502
|
+
defaultUsedName
|
|
503
|
+
) {
|
|
502
504
|
return new ConcatSource(
|
|
503
505
|
`${module.moduleArgument}.exports = `,
|
|
504
506
|
/** @type {Source} */ (defaultExport)
|
|
@@ -512,21 +514,14 @@ class CssGenerator extends Generator {
|
|
|
512
514
|
}.exports = {\n`
|
|
513
515
|
);
|
|
514
516
|
|
|
515
|
-
if (
|
|
517
|
+
if (defaultUsedName) {
|
|
516
518
|
result.add('\t"default": ');
|
|
517
|
-
result.add(defaultExport);
|
|
518
|
-
if (
|
|
519
|
+
result.add(/** @type {Source} */ (defaultExport));
|
|
520
|
+
if (exportEntries.length > 0) {
|
|
519
521
|
result.add(",\n");
|
|
520
522
|
}
|
|
521
523
|
}
|
|
522
524
|
|
|
523
|
-
/** @type {string[]} */
|
|
524
|
-
const exportEntries = [];
|
|
525
|
-
for (const [name, v] of cssData.exports) {
|
|
526
|
-
exportEntries.push(
|
|
527
|
-
`\t${JSON.stringify(name)}: ${JSON.stringify(v)}`
|
|
528
|
-
);
|
|
529
|
-
}
|
|
530
525
|
if (exportEntries.length > 0) {
|
|
531
526
|
result.add(exportEntries.join(",\n"));
|
|
532
527
|
}
|
|
@@ -546,26 +541,58 @@ class CssGenerator extends Generator {
|
|
|
546
541
|
source.add("\n");
|
|
547
542
|
}
|
|
548
543
|
}
|
|
549
|
-
return source;
|
|
550
|
-
}
|
|
551
|
-
case CSS_TYPE: {
|
|
552
544
|
if (
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
)
|
|
545
|
+
exportType === "link" &&
|
|
546
|
+
!isCssModule &&
|
|
547
|
+
cssData.exports.size === 0
|
|
557
548
|
) {
|
|
549
|
+
return source;
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
const generatedJs = /** @type {string} */ (source.source());
|
|
553
|
+
// Context-relative identifier, like `NormalModule.createSource` — so
|
|
554
|
+
// `SourceMapDevToolPlugin` can match the module and apply the
|
|
555
|
+
// devtool filename template instead of leaking this raw name
|
|
556
|
+
const sourceName = contextifySourceUrl(
|
|
557
|
+
/** @type {string} */ (compilation.options.context),
|
|
558
|
+
module.identifier(),
|
|
559
|
+
compilation.compiler.root
|
|
560
|
+
);
|
|
561
|
+
|
|
562
|
+
if (
|
|
563
|
+
/** @type {ExportLocsMap} */
|
|
564
|
+
(cssData.exportLocs).size > 0
|
|
565
|
+
) {
|
|
566
|
+
const cssOriginal = module.originalSource();
|
|
567
|
+
if (cssOriginal) {
|
|
568
|
+
const sourceMap = buildExportsSourceMap(
|
|
569
|
+
generatedJs,
|
|
570
|
+
/** @type {ExportLocsMap} */
|
|
571
|
+
(cssData.exportLocs),
|
|
572
|
+
/** @type {string} */ (cssOriginal.source()),
|
|
573
|
+
sourceName
|
|
574
|
+
);
|
|
575
|
+
return new SourceMapSource(generatedJs, sourceName, sourceMap);
|
|
576
|
+
}
|
|
577
|
+
}
|
|
578
|
+
return new OriginalSource(generatedJs, sourceName);
|
|
579
|
+
}
|
|
580
|
+
case CSS_TYPE: {
|
|
581
|
+
if (!(this._exportsOnly || exportType !== "link")) {
|
|
558
582
|
generateContext.runtimeRequirements.add(RuntimeGlobals.hasCssModules);
|
|
559
583
|
}
|
|
560
584
|
|
|
561
585
|
return InitFragment.addToSource(source, initFragments, generateContext);
|
|
562
586
|
}
|
|
587
|
+
case CSS_TEXT_TYPE:
|
|
588
|
+
return this._generateCssText(module, generateContext, false);
|
|
563
589
|
default:
|
|
564
590
|
return null;
|
|
565
591
|
}
|
|
566
592
|
}
|
|
567
593
|
|
|
568
594
|
/**
|
|
595
|
+
* Generates fallback output for the provided error condition.
|
|
569
596
|
* @param {Error} error the error
|
|
570
597
|
* @param {NormalModule} module module for which the code should be generated
|
|
571
598
|
* @param {GenerateContext} generateContext context for generate
|
|
@@ -587,6 +614,7 @@ class CssGenerator extends Generator {
|
|
|
587
614
|
}
|
|
588
615
|
|
|
589
616
|
/**
|
|
617
|
+
* Returns the source types available for this module.
|
|
590
618
|
* @param {NormalModule} module fresh module
|
|
591
619
|
* @returns {SourceTypes} available types (do not mutate)
|
|
592
620
|
*/
|
|
@@ -596,10 +624,15 @@ class CssGenerator extends Generator {
|
|
|
596
624
|
return JAVASCRIPT_TYPES;
|
|
597
625
|
}
|
|
598
626
|
|
|
599
|
-
|
|
627
|
+
let hasJs = false;
|
|
628
|
+
let hasCssText = false;
|
|
629
|
+
// Uncached per call (#20800) — the common link case stops scanning once
|
|
630
|
+
// js is seen; `hasCssText` only matters for exports-only / non-link.
|
|
631
|
+
const needsCssText = this._exportsOnly || exportType !== "link";
|
|
600
632
|
const connections = this._moduleGraph.getIncomingConnections(module);
|
|
601
633
|
|
|
602
634
|
for (const connection of connections) {
|
|
635
|
+
if (hasJs && (hasCssText || !needsCssText)) break;
|
|
603
636
|
if (
|
|
604
637
|
exportType === "link" &&
|
|
605
638
|
connection.dependency instanceof CssImportDependency
|
|
@@ -607,47 +640,56 @@ class CssGenerator extends Generator {
|
|
|
607
640
|
continue;
|
|
608
641
|
}
|
|
609
642
|
|
|
610
|
-
// when no hmr required, css module js output contains no sideEffects at all
|
|
611
|
-
// js sideeffect connection doesn't require js type output
|
|
612
643
|
if (connection.dependency instanceof HarmonyImportSideEffectDependency) {
|
|
613
644
|
continue;
|
|
614
645
|
}
|
|
615
646
|
|
|
647
|
+
// HTML inline styles consume CSS_TEXT_TYPE directly.
|
|
648
|
+
if (
|
|
649
|
+
connection.dependency &&
|
|
650
|
+
(connection.dependency.category === "html-style" ||
|
|
651
|
+
connection.dependency.category === "html-style-attribute")
|
|
652
|
+
) {
|
|
653
|
+
hasCssText = true;
|
|
654
|
+
continue;
|
|
655
|
+
}
|
|
656
|
+
|
|
616
657
|
if (!connection.originModule) {
|
|
617
658
|
continue;
|
|
618
659
|
}
|
|
619
660
|
|
|
620
|
-
if (connection.originModule.type.
|
|
621
|
-
|
|
661
|
+
if (!connection.originModule.type.startsWith(CSS_TYPE_PREFIX)) {
|
|
662
|
+
hasJs = true;
|
|
622
663
|
} else {
|
|
623
664
|
const originModule = /** @type {CssModule} */ connection.originModule;
|
|
624
|
-
const originExportType =
|
|
625
|
-
.exportType;
|
|
626
|
-
if (
|
|
627
|
-
|
|
628
|
-
originExportType && originExportType !== "link"
|
|
629
|
-
)
|
|
630
|
-
) {
|
|
631
|
-
sourceTypes.add(JAVASCRIPT_TYPE);
|
|
665
|
+
const originExportType =
|
|
666
|
+
/** @type {CssModule} */ (originModule).exportType || "link";
|
|
667
|
+
if (originExportType !== "link") {
|
|
668
|
+
hasJs = true;
|
|
632
669
|
}
|
|
633
670
|
}
|
|
634
671
|
}
|
|
635
|
-
if (
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
return JAVASCRIPT_TYPES;
|
|
641
|
-
}
|
|
642
|
-
return new Set();
|
|
672
|
+
if (this._exportsOnly || exportType !== "link") {
|
|
673
|
+
if (hasJs && hasCssText) return JAVASCRIPT_AND_CSS_TEXT_TYPES;
|
|
674
|
+
if (hasJs) return JAVASCRIPT_TYPES;
|
|
675
|
+
if (hasCssText) return CSS_TEXT_TYPES;
|
|
676
|
+
return NO_TYPES;
|
|
643
677
|
}
|
|
644
|
-
if (
|
|
678
|
+
if (hasJs) {
|
|
645
679
|
return JAVASCRIPT_AND_CSS_TYPES;
|
|
646
680
|
}
|
|
647
681
|
return CSS_TYPES;
|
|
648
682
|
}
|
|
649
683
|
|
|
650
684
|
/**
|
|
685
|
+
* @returns {boolean} whether getTypes() depends on the module's incoming connections
|
|
686
|
+
*/
|
|
687
|
+
getTypesDependOnIncomingConnections() {
|
|
688
|
+
return true;
|
|
689
|
+
}
|
|
690
|
+
|
|
691
|
+
/**
|
|
692
|
+
* Returns the estimated size for the requested source type.
|
|
651
693
|
* @param {NormalModule} module the module
|
|
652
694
|
* @param {SourceType=} type source type
|
|
653
695
|
* @returns {number} estimate size of the module
|
|
@@ -655,26 +697,30 @@ class CssGenerator extends Generator {
|
|
|
655
697
|
getSize(module, type) {
|
|
656
698
|
switch (type) {
|
|
657
699
|
case JAVASCRIPT_TYPE: {
|
|
658
|
-
const cssData = /** @type {
|
|
700
|
+
const cssData = /** @type {CssModuleBuildInfo} */ (module.buildInfo)
|
|
701
|
+
.cssData;
|
|
659
702
|
if (!cssData) {
|
|
660
703
|
return 42;
|
|
661
704
|
}
|
|
662
705
|
if (cssData.exports.size === 0) {
|
|
663
|
-
if (
|
|
706
|
+
if (
|
|
707
|
+
/** @type {CssModuleBuildMeta} */ (module.buildMeta).isCssModule
|
|
708
|
+
) {
|
|
664
709
|
return 42;
|
|
665
710
|
}
|
|
666
711
|
return 0;
|
|
667
712
|
}
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
for (const [key, value] of exports) {
|
|
672
|
-
|
|
713
|
+
// `JSON.stringify({...exports}).length` computed entry-wise, without
|
|
714
|
+
// materializing the object or the full string.
|
|
715
|
+
let length = 2 + (cssData.exports.size - 1);
|
|
716
|
+
for (const [key, value] of cssData.exports) {
|
|
717
|
+
length +=
|
|
718
|
+
JSON.stringify(key).length + 1 + JSON.stringify(value).length;
|
|
673
719
|
}
|
|
674
|
-
const stringifiedExports = JSON.stringify(exportsObj);
|
|
675
720
|
|
|
676
|
-
return
|
|
721
|
+
return length + 42;
|
|
677
722
|
}
|
|
723
|
+
case CSS_TEXT_TYPE:
|
|
678
724
|
case CSS_TYPE: {
|
|
679
725
|
const originalSource = module.originalSource();
|
|
680
726
|
|
|
@@ -690,11 +736,233 @@ class CssGenerator extends Generator {
|
|
|
690
736
|
}
|
|
691
737
|
|
|
692
738
|
/**
|
|
739
|
+
* Updates the hash with the data contributed by this instance.
|
|
693
740
|
* @param {Hash} hash hash that will be modified
|
|
694
741
|
* @param {UpdateHashContext} updateHashContext context for updating hash
|
|
695
742
|
*/
|
|
696
743
|
updateHash(hash, { module }) {
|
|
697
744
|
hash.update(/** @type {boolean} */ (this._esModule).toString());
|
|
745
|
+
hash.update(/** @type {boolean} */ (this._exportsOnly).toString());
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/**
|
|
749
|
+
* Resolve the effective `@charset` by walking text imports.
|
|
750
|
+
* @param {NormalModule} module the module
|
|
751
|
+
* @param {ModuleGraph} moduleGraph module graph
|
|
752
|
+
* @param {WeakSet<NormalModule>=} visited cycle guard
|
|
753
|
+
* @returns {string | undefined} the effective charset
|
|
754
|
+
*/
|
|
755
|
+
_getEffectiveCharset(module, moduleGraph, visited = new WeakSet()) {
|
|
756
|
+
if (!module || visited.has(module)) return undefined;
|
|
757
|
+
const exportType = /** @type {CssModule} */ (module).exportType;
|
|
758
|
+
if (exportType !== "text" && exportType !== "css-style-sheet") {
|
|
759
|
+
return undefined;
|
|
760
|
+
}
|
|
761
|
+
visited.add(module);
|
|
762
|
+
const own =
|
|
763
|
+
module.buildInfo &&
|
|
764
|
+
/** @type {CssModuleBuildInfo} */ (module.buildInfo).charset;
|
|
765
|
+
if (own !== undefined) return own;
|
|
766
|
+
if (exportType !== "text") return undefined;
|
|
767
|
+
for (const dep of module.dependencies) {
|
|
768
|
+
if (dep instanceof CssImportDependency) {
|
|
769
|
+
const depModule = /** @type {NormalModule} */ (
|
|
770
|
+
moduleGraph.getModule(dep)
|
|
771
|
+
);
|
|
772
|
+
const inherited = this._getEffectiveCharset(
|
|
773
|
+
depModule,
|
|
774
|
+
moduleGraph,
|
|
775
|
+
visited
|
|
776
|
+
);
|
|
777
|
+
if (inherited !== undefined) return inherited;
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
return undefined;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
/**
|
|
784
|
+
* Generate JS expressions for `@import` side effects (`style` exportType only).
|
|
785
|
+
* @param {NormalModule} module the module to generate CSS text for
|
|
786
|
+
* @param {GenerateContext} generateContext the generate context
|
|
787
|
+
* @returns {string[]} JS expressions, one per `@import` dependency
|
|
788
|
+
*/
|
|
789
|
+
_generateImportExpressions(module, generateContext) {
|
|
790
|
+
const { moduleGraph, concatenationScope } = generateContext;
|
|
791
|
+
const parts = [];
|
|
792
|
+
|
|
793
|
+
for (const dep of module.dependencies) {
|
|
794
|
+
if (!(dep instanceof CssImportDependency)) continue;
|
|
795
|
+
const depModule = /** @type {CssModule} */ (moduleGraph.getModule(dep));
|
|
796
|
+
if (concatenationScope && concatenationScope.isModuleInScope(depModule)) {
|
|
797
|
+
continue;
|
|
798
|
+
}
|
|
799
|
+
parts.push(
|
|
800
|
+
generateContext.runtimeTemplate.moduleExports({
|
|
801
|
+
module: depModule,
|
|
802
|
+
chunkGraph: generateContext.chunkGraph,
|
|
803
|
+
request: depModule.userRequest,
|
|
804
|
+
weak: false,
|
|
805
|
+
runtimeRequirements: generateContext.runtimeRequirements
|
|
806
|
+
})
|
|
807
|
+
);
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
return parts;
|
|
811
|
+
}
|
|
812
|
+
|
|
813
|
+
/**
|
|
814
|
+
* Recursively merge `@import`'d CSS into a single Source (text/css-style-sheet only).
|
|
815
|
+
* @param {NormalModule} module the module to render
|
|
816
|
+
* @param {GenerateContext} generateContext the generate context
|
|
817
|
+
* @param {Set<NormalModule>} ancestors modules on the current path (cycle guard)
|
|
818
|
+
* @returns {Source | null} merged CSS source, or null when the module has no content
|
|
819
|
+
*/
|
|
820
|
+
_renderMergedCss(module, generateContext, ancestors) {
|
|
821
|
+
if (ancestors.has(module)) return null;
|
|
822
|
+
ancestors.add(module);
|
|
823
|
+
try {
|
|
824
|
+
const { moduleGraph } = generateContext;
|
|
825
|
+
/** @type {Source[]} */
|
|
826
|
+
const parts = [];
|
|
827
|
+
|
|
828
|
+
for (const dep of module.dependencies) {
|
|
829
|
+
if (!(dep instanceof CssImportDependency)) continue;
|
|
830
|
+
const depModule = /** @type {CssModule} */ (moduleGraph.getModule(dep));
|
|
831
|
+
if (!depModule) continue;
|
|
832
|
+
const depExportType = depModule.exportType;
|
|
833
|
+
if (depExportType !== "text" && depExportType !== "css-style-sheet") {
|
|
834
|
+
continue;
|
|
835
|
+
}
|
|
836
|
+
const depMerged = this._renderMergedCss(
|
|
837
|
+
depModule,
|
|
838
|
+
generateContext,
|
|
839
|
+
ancestors
|
|
840
|
+
);
|
|
841
|
+
if (depMerged) parts.push(depMerged);
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
const own = this._renderCss(module, generateContext);
|
|
845
|
+
if (own) parts.push(own);
|
|
846
|
+
|
|
847
|
+
if (parts.length === 0) return null;
|
|
848
|
+
if (parts.length === 1) return parts[0];
|
|
849
|
+
return new ConcatSource(...parts);
|
|
850
|
+
} finally {
|
|
851
|
+
ancestors.delete(module);
|
|
852
|
+
}
|
|
853
|
+
}
|
|
854
|
+
|
|
855
|
+
/**
|
|
856
|
+
* Generate CSS source for the current module
|
|
857
|
+
* @param {NormalModule} module the module to generate CSS source for
|
|
858
|
+
* @param {GenerateContext} generateContext the generate context
|
|
859
|
+
* @returns {Source | null} the CSS source
|
|
860
|
+
*/
|
|
861
|
+
_renderCss(module, generateContext) {
|
|
862
|
+
const moduleSourceContent = /** @type {Source} */ (
|
|
863
|
+
this.generate(module, {
|
|
864
|
+
...generateContext,
|
|
865
|
+
type: CSS_TYPE
|
|
866
|
+
})
|
|
867
|
+
);
|
|
868
|
+
|
|
869
|
+
if (!moduleSourceContent) {
|
|
870
|
+
return null;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
const compilation = generateContext.runtimeTemplate.compilation;
|
|
874
|
+
const undoPath = "";
|
|
875
|
+
|
|
876
|
+
const CssModulesPlugin = getCssModulesPlugin();
|
|
877
|
+
const hooks = CssModulesPlugin.getCompilationHooks(compilation);
|
|
878
|
+
return CssModulesPlugin.renderModule(
|
|
879
|
+
/** @type {CssModule} */ (module),
|
|
880
|
+
{
|
|
881
|
+
undoPath,
|
|
882
|
+
moduleSourceContent,
|
|
883
|
+
moduleFactoryCache: this._moduleFactoryCache,
|
|
884
|
+
runtimeTemplate: generateContext.runtimeTemplate
|
|
885
|
+
},
|
|
886
|
+
hooks
|
|
887
|
+
);
|
|
888
|
+
}
|
|
889
|
+
|
|
890
|
+
/**
|
|
891
|
+
* Convert a CSS Source into a JS string literal, splicing `__webpack_require__.h()` for `[fullhash]` placeholders.
|
|
892
|
+
* @param {Source} cssSource the CSS source
|
|
893
|
+
* @param {import("../../declarations/WebpackOptions").DevTool | undefined} devtool the devtool option
|
|
894
|
+
* @param {GenerateContext} generateContext the generate context
|
|
895
|
+
* @returns {Source} a Source representing a JS string literal
|
|
896
|
+
*/
|
|
897
|
+
_cssToJsLiteral(cssSource, devtool, generateContext) {
|
|
898
|
+
const { source, map } = cssSource.sourceAndMap();
|
|
899
|
+
let content = /** @type {string} */ (source);
|
|
900
|
+
if (map) {
|
|
901
|
+
const inlineMap =
|
|
902
|
+
typeof devtool === "string" && devtool.includes("nosources")
|
|
903
|
+
? { ...map, sourcesContent: undefined }
|
|
904
|
+
: map;
|
|
905
|
+
const base64Map = Buffer.from(JSON.stringify(inlineMap), "utf8").toString(
|
|
906
|
+
"base64"
|
|
907
|
+
);
|
|
908
|
+
const trailingNewline = content.endsWith("\n") ? "" : "\n";
|
|
909
|
+
content += `${trailingNewline}/*# sourceMappingURL=data:application/json;charset=utf-8;base64,${base64Map}*/`;
|
|
910
|
+
}
|
|
911
|
+
|
|
912
|
+
if (!content.includes(PUBLIC_PATH_FULL_HASH)) {
|
|
913
|
+
return new RawSource(JSON.stringify(content));
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
const result = new ConcatSource();
|
|
917
|
+
let last = 0;
|
|
918
|
+
walkFullHashPlaceholders(content, (start, end, length) => {
|
|
919
|
+
result.add(JSON.stringify(content.slice(last, start)));
|
|
920
|
+
result.add(
|
|
921
|
+
length === 0
|
|
922
|
+
? ` + ${RuntimeGlobals.getFullHash}() + `
|
|
923
|
+
: ` + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + `
|
|
924
|
+
);
|
|
925
|
+
last = end;
|
|
926
|
+
});
|
|
927
|
+
|
|
928
|
+
result.add(JSON.stringify(content.slice(last)));
|
|
929
|
+
generateContext.runtimeRequirements.add(RuntimeGlobals.getFullHash);
|
|
930
|
+
return result;
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
/**
|
|
934
|
+
* Generate the merged CSS text for a module, optionally wrapped as a
|
|
935
|
+
* JS string literal for embedding in JavaScript output.
|
|
936
|
+
* @param {NormalModule} module the module
|
|
937
|
+
* @param {GenerateContext} generateContext the generate context
|
|
938
|
+
* @param {boolean} asJsLiteral wrap the result as a JS string literal
|
|
939
|
+
* @returns {Source} the CSS text source
|
|
940
|
+
*/
|
|
941
|
+
_generateCssText(module, generateContext, asJsLiteral) {
|
|
942
|
+
const cssSource = this._renderMergedCss(module, generateContext, new Set());
|
|
943
|
+
const effectiveCharset = this._getEffectiveCharset(
|
|
944
|
+
module,
|
|
945
|
+
generateContext.moduleGraph
|
|
946
|
+
);
|
|
947
|
+
|
|
948
|
+
let result;
|
|
949
|
+
if (effectiveCharset !== undefined) {
|
|
950
|
+
const prefix = `@charset "${effectiveCharset}";\n`;
|
|
951
|
+
result = cssSource
|
|
952
|
+
? new ConcatSource(prefix, cssSource)
|
|
953
|
+
: new RawSource(prefix);
|
|
954
|
+
} else {
|
|
955
|
+
result = cssSource;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
if (asJsLiteral) {
|
|
959
|
+
const devtool =
|
|
960
|
+
generateContext.runtimeTemplate.compilation.options.devtool;
|
|
961
|
+
return result
|
|
962
|
+
? this._cssToJsLiteral(result, devtool, generateContext)
|
|
963
|
+
: new RawSource('""');
|
|
964
|
+
}
|
|
965
|
+
return result || new RawSource("");
|
|
698
966
|
}
|
|
699
967
|
}
|
|
700
968
|
|