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