@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
|
@@ -5,43 +5,93 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const {
|
|
8
|
+
const { JAVASCRIPT_TYPE } = require("../ModuleSourceTypeConstants");
|
|
9
9
|
const { interpolate } = require("../TemplatedPathPlugin");
|
|
10
|
-
const WebpackError = require("../WebpackError");
|
|
10
|
+
const WebpackError = require("../errors/WebpackError");
|
|
11
11
|
const { cssExportConvention } = require("../util/conventions");
|
|
12
12
|
const createHash = require("../util/createHash");
|
|
13
13
|
const { makePathsRelative } = require("../util/identifier");
|
|
14
14
|
const makeSerializable = require("../util/makeSerializable");
|
|
15
15
|
const memoize = require("../util/memoize");
|
|
16
|
-
const
|
|
16
|
+
const { digestNonNumericOnly } = require("../util/nonNumericOnlyHash");
|
|
17
|
+
const { updateHashFromSource } = require("../util/source");
|
|
17
18
|
const CssIcssImportDependency = require("./CssIcssImportDependency");
|
|
18
19
|
const NullDependency = require("./NullDependency");
|
|
19
20
|
|
|
20
|
-
const
|
|
21
|
+
const getCssTokens = memoize(() => require("../css/syntax"));
|
|
21
22
|
|
|
22
23
|
/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
|
|
23
|
-
/** @typedef {import("../../declarations/WebpackOptions").HashFunction} HashFunction */
|
|
24
24
|
/** @typedef {import("../../declarations/WebpackOptions").CssGeneratorExportsConvention} CssGeneratorExportsConvention */
|
|
25
25
|
/** @typedef {import("../../declarations/WebpackOptions").CssGeneratorLocalIdentName} CssGeneratorLocalIdentName */
|
|
26
|
-
/** @typedef {import("
|
|
27
|
-
/** @typedef {import("../
|
|
28
|
-
/** @typedef {import("../
|
|
26
|
+
/** @typedef {import("../../declarations/WebpackOptions").HashFunction} HashFunction */
|
|
27
|
+
/** @typedef {import("../css/CssGenerator")} CssGenerator */
|
|
28
|
+
/** @typedef {import("../css/CssModule")} CssModule */
|
|
29
|
+
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
|
29
30
|
/** @typedef {import("../Dependency").ExportsSpec} ExportsSpec */
|
|
31
|
+
/** @typedef {import("../Dependency").ReferencedExports} ReferencedExports */
|
|
30
32
|
/** @typedef {import("../Dependency").UpdateHashContext} UpdateHashContext */
|
|
33
|
+
/** @typedef {import("../Dependency")} Dependency */
|
|
31
34
|
/** @typedef {import("../DependencyTemplate").CssDependencyTemplateContext} DependencyTemplateContext */
|
|
32
35
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
33
|
-
/** @typedef {import("../css/CssGenerator")} CssGenerator */
|
|
34
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
35
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
36
|
-
/** @typedef {import("../util/Hash")} Hash */
|
|
37
|
-
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
|
38
|
-
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
|
39
36
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
|
40
37
|
/** @typedef {import("../css/CssParser").Range} Range */
|
|
38
|
+
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
|
39
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext<(number | string | Value | Range | boolean | ExportMode | ExportType | DependencyLocation | undefined)[]>} ObjectDeserializerContext */
|
|
40
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext<(number | string | Value | Range | boolean | ExportMode | ExportType | DependencyLocation | undefined)[]>} ObjectSerializerContext */
|
|
41
|
+
/** @typedef {import("../util/Hash")} Hash */
|
|
42
|
+
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
|
43
|
+
/** @typedef {import("../errors/WebpackError")} WebpackErrorType */
|
|
41
44
|
|
|
42
|
-
/** @typedef {
|
|
45
|
+
/** @typedef {string | [string, string] | [string, string, string]} Value */
|
|
46
|
+
/** @typedef {(name: string) => string | string[]} ExportsConventionFn */
|
|
47
|
+
// 0 - none, 1 - replace, 2 - append, 3 - once, 4 - self-reference
|
|
48
|
+
/** @typedef {0 | 1 | 2 | 3 | 4} ExportMode */
|
|
49
|
+
// 0 - normal, 1 - custom css variable, 2 - grid custom ident, 3 - composes
|
|
50
|
+
/** @typedef {0 | 1 | 2 | 3} ExportType */
|
|
51
|
+
|
|
52
|
+
/** @type {Record<"NONE" | "REPLACE" | "APPEND" | "ONCE" | "SELF_REFERENCE", ExportMode>} */
|
|
53
|
+
const EXPORT_MODE = {
|
|
54
|
+
NONE: 0,
|
|
55
|
+
REPLACE: 1,
|
|
56
|
+
APPEND: 2,
|
|
57
|
+
ONCE: 3,
|
|
58
|
+
SELF_REFERENCE: 4
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/** @type {Record<"NORMAL" | "CUSTOM_VARIABLE" | "GRID_CUSTOM_IDENTIFIER" | "COMPOSES", ExportType>} */
|
|
62
|
+
const EXPORT_TYPE = {
|
|
63
|
+
NORMAL: 0,
|
|
64
|
+
CUSTOM_VARIABLE: 1,
|
|
65
|
+
GRID_CUSTOM_IDENTIFIER: 2,
|
|
66
|
+
COMPOSES: 3
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
// Hoisted out of `getLocalIdent`'s `prepareId` so the patterns + the replacer
|
|
70
|
+
// aren't recompiled/reallocated per interpolated id.
|
|
71
|
+
const IDENT_LEADING_INVALID_REGEXP = /^([.-]|[^a-z0-9_-])+/i;
|
|
72
|
+
const IDENT_INVALID_CHARS_REGEXP = /[^a-z0-9@_-]+/gi;
|
|
73
|
+
const IDENT_LOCAL_PLACEHOLDER_REGEXP = /\[local\]/g;
|
|
74
|
+
const IDENT_LEADING_PROTECT_REGEXP = /^((-?\d)|--)/;
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* `interpolate` `prepareId` hook — sanitize an id segment into a valid CSS ident.
|
|
78
|
+
* Pure (captures nothing), so it's shared rather than allocated per call.
|
|
79
|
+
* @param {string | number} id id segment
|
|
80
|
+
* @returns {string | number} sanitized id segment
|
|
81
|
+
*/
|
|
82
|
+
const prepareLocalIdentId = (id) => {
|
|
83
|
+
if (typeof id !== "string") return id;
|
|
84
|
+
return (
|
|
85
|
+
id
|
|
86
|
+
.replace(IDENT_LEADING_INVALID_REGEXP, "")
|
|
87
|
+
// We keep the `@` symbol because it can be used in the package name (e.g. `@company/package`), and if we replace it with `_`, a class conflict may occur.
|
|
88
|
+
// For example - `@import "@foo/package/style.module.css"` and `@import "foo/package/style.module.css"` (`foo` is a package, `package` is just a directory) will create a class conflict.
|
|
89
|
+
.replace(IDENT_INVALID_CHARS_REGEXP, "_")
|
|
90
|
+
);
|
|
91
|
+
};
|
|
43
92
|
|
|
44
93
|
/**
|
|
94
|
+
* Returns local ident.
|
|
45
95
|
* @param {string} local css local
|
|
46
96
|
* @param {CssModule} module module
|
|
47
97
|
* @param {ChunkGraph} chunkGraph chunk graph
|
|
@@ -63,11 +113,9 @@ const getLocalIdent = (local, module, chunkGraph, runtimeTemplate) => {
|
|
|
63
113
|
const { uniqueName } = runtimeTemplate.outputOptions;
|
|
64
114
|
|
|
65
115
|
let localIdentHash = "";
|
|
116
|
+
let localIdentHashFull = "";
|
|
66
117
|
|
|
67
|
-
if (
|
|
68
|
-
typeof localIdentName === "function" ||
|
|
69
|
-
/\[(?:fullhash|hash)\]/.test(localIdentName)
|
|
70
|
-
) {
|
|
118
|
+
if (generator._localIdentNeedsHash) {
|
|
71
119
|
const hashSalt = generator.options.localIdentHashSalt;
|
|
72
120
|
const hashDigest =
|
|
73
121
|
/** @type {string} */
|
|
@@ -90,108 +138,182 @@ const getLocalIdent = (local, module, chunkGraph, runtimeTemplate) => {
|
|
|
90
138
|
hash.update(relativeResourcePath);
|
|
91
139
|
hash.update(local);
|
|
92
140
|
|
|
93
|
-
|
|
141
|
+
// Keep the untruncated digest so an inline `[fullhash:<digest>]` re-encodes
|
|
142
|
+
// with full entropy (see the `fullHash`/`fullHashDigest` passed below).
|
|
143
|
+
localIdentHashFull = hash.digest(hashDigest);
|
|
144
|
+
localIdentHash = localIdentHashFull.slice(0, hashDigestLength);
|
|
94
145
|
}
|
|
95
146
|
|
|
96
147
|
let contentHash = "";
|
|
97
148
|
|
|
98
|
-
if (
|
|
99
|
-
typeof localIdentName === "function" ||
|
|
100
|
-
/\[contenthash\]/.test(localIdentName)
|
|
101
|
-
) {
|
|
149
|
+
if (generator._localIdentNeedsContentHash) {
|
|
102
150
|
const hash = createHash(runtimeTemplate.outputOptions.hashFunction);
|
|
103
151
|
const source = module.originalSource();
|
|
104
152
|
|
|
105
153
|
if (source) {
|
|
106
|
-
hash
|
|
154
|
+
updateHashFromSource(hash, source);
|
|
107
155
|
}
|
|
108
156
|
|
|
109
157
|
if (module.error) {
|
|
110
158
|
hash.update(module.error.toString());
|
|
111
159
|
}
|
|
112
160
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
contentHash = nonNumericOnlyHash(
|
|
118
|
-
fullContentHash,
|
|
119
|
-
runtimeTemplate.outputOptions.hashDigestLength
|
|
161
|
+
contentHash = digestNonNumericOnly(
|
|
162
|
+
hash,
|
|
163
|
+
/** @type {string} */ (runtimeTemplate.outputOptions.hashDigest),
|
|
164
|
+
/** @type {number} */ (runtimeTemplate.outputOptions.hashDigestLength)
|
|
120
165
|
);
|
|
121
166
|
}
|
|
122
167
|
|
|
123
168
|
let localIdent = interpolate(localIdentName, {
|
|
124
|
-
prepareId:
|
|
125
|
-
if (typeof id !== "string") return id;
|
|
126
|
-
|
|
127
|
-
return (
|
|
128
|
-
id
|
|
129
|
-
.replace(/^([.-]|[^a-z0-9_-])+/i, "")
|
|
130
|
-
// We keep the `@` symbol because it can be used in the package name (e.g. `@company/package`), and if we replace it with `_`, a class conflict may occur.
|
|
131
|
-
// For example - `@import "@foo/package/style.module.css"` and `@import "foo/package/style.module.css"` (`foo` is a package, `package` is just a directory) will create a class conflict.
|
|
132
|
-
.replace(/[^a-z0-9@_-]+/gi, "_")
|
|
133
|
-
);
|
|
134
|
-
},
|
|
169
|
+
prepareId: prepareLocalIdentId,
|
|
135
170
|
filename: relativeResourcePath,
|
|
136
171
|
hash: localIdentHash,
|
|
172
|
+
// css-loader semantics: `[hash]` is the local ident hash, not the module
|
|
173
|
+
// hash (use `[modulehash]` for that).
|
|
174
|
+
hashAsFullHash: true,
|
|
175
|
+
// `[hash]`/`[contenthash]` are encoded with the output digest, but the
|
|
176
|
+
// `[fullhash]` local ident hash uses `localIdentHashDigest`, so re-encode it
|
|
177
|
+
// from its own (full) digest.
|
|
178
|
+
hashDigest: runtimeTemplate.outputOptions.hashDigest,
|
|
179
|
+
fullHash: localIdentHashFull,
|
|
180
|
+
fullHashDigest:
|
|
181
|
+
/** @type {string} */
|
|
182
|
+
(generator.options.localIdentHashDigest),
|
|
137
183
|
local,
|
|
184
|
+
uniqueName,
|
|
138
185
|
contentHash,
|
|
139
186
|
chunkGraph,
|
|
140
187
|
module
|
|
141
188
|
});
|
|
142
189
|
|
|
143
|
-
// TODO move
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (/\[uniqueName\]/.test(localIdent)) {
|
|
149
|
-
localIdent = localIdent.replace(
|
|
150
|
-
/\[uniqueName\]/g,
|
|
151
|
-
/** @type {string} */ (uniqueName)
|
|
152
|
-
);
|
|
153
|
-
}
|
|
190
|
+
// TODO move this into interpolate
|
|
191
|
+
// `replace` on a non-matching global regexp returns the string unchanged, so
|
|
192
|
+
// the `.test` guard is redundant — one scan instead of two.
|
|
193
|
+
localIdent = localIdent.replace(IDENT_LOCAL_PLACEHOLDER_REGEXP, local);
|
|
154
194
|
|
|
155
195
|
// Protect the first character from unsupported values
|
|
156
|
-
return localIdent.replace(
|
|
196
|
+
return localIdent.replace(IDENT_LEADING_PROTECT_REGEXP, "_$1");
|
|
157
197
|
};
|
|
158
198
|
|
|
159
|
-
/**
|
|
199
|
+
/**
|
|
200
|
+
* Computes the interpolated identifier for `(module, value, exportType)`.
|
|
201
|
+
* Module-level reference so `moduleGraph.cached` can use it as a stable
|
|
202
|
+
* computer key — repeated lookups during a build skip `cssExportConvention`,
|
|
203
|
+
* `getLocalIdent` (with its content / path hashing) and `escapeIdentifier`.
|
|
204
|
+
* @param {ModuleGraph} _moduleGraph module graph (unused, kept for `cached` signature)
|
|
205
|
+
* @param {CssModule} module css module the value resolves in
|
|
206
|
+
* @param {string} value raw value to interpolate
|
|
207
|
+
* @param {ExportType} exportType export type discriminator
|
|
208
|
+
* @param {ChunkGraph} chunkGraph chunk graph
|
|
209
|
+
* @param {RuntimeTemplate} runtimeTemplate runtime template
|
|
210
|
+
* @returns {string} interpolated identifier
|
|
211
|
+
*/
|
|
212
|
+
const computeInterpolatedIdentifier = (
|
|
213
|
+
_moduleGraph,
|
|
214
|
+
module,
|
|
215
|
+
value,
|
|
216
|
+
exportType,
|
|
217
|
+
chunkGraph,
|
|
218
|
+
runtimeTemplate
|
|
219
|
+
) => {
|
|
220
|
+
const generator = /** @type {CssGenerator} */ (module.generator);
|
|
221
|
+
const local = cssExportConvention(
|
|
222
|
+
value,
|
|
223
|
+
/** @type {CssGeneratorExportsConvention} */
|
|
224
|
+
(generator.options.exportsConvention)
|
|
225
|
+
)[0];
|
|
226
|
+
const prefix = exportType === EXPORT_TYPE.CUSTOM_VARIABLE ? "--" : "";
|
|
227
|
+
return (
|
|
228
|
+
prefix +
|
|
229
|
+
getCssTokens().escapeIdentifier(
|
|
230
|
+
getLocalIdent(local, module, chunkGraph, runtimeTemplate),
|
|
231
|
+
runtimeTemplate.compilation.compiler.root
|
|
232
|
+
)
|
|
233
|
+
);
|
|
234
|
+
};
|
|
160
235
|
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
236
|
+
/**
|
|
237
|
+
* One `:export { name: value }` style entry — a plain object so a module holds
|
|
238
|
+
* a single `Dependency` plus a flat array instead of thousands of `Dependency`
|
|
239
|
+
* instances. `_conventionNames`/`_valueConventionNames` memoize the convention
|
|
240
|
+
* expansion per entry.
|
|
241
|
+
* @typedef {object} CssExportEntry
|
|
242
|
+
* @property {string} name export name
|
|
243
|
+
* @property {Value} value value or [localName, importName, request?]
|
|
244
|
+
* @property {Range=} range source range to replace, when present
|
|
245
|
+
* @property {boolean} interpolate whether the value needs interpolation
|
|
246
|
+
* @property {ExportMode} exportMode export mode
|
|
247
|
+
* @property {ExportType} exportType export type
|
|
248
|
+
* @property {number} locStartLine per-export source start line (1-based; flat numbers instead of a nested `DependencyLocation` — entries are per-export hot allocations)
|
|
249
|
+
* @property {number} locStartColumn per-export source start column
|
|
250
|
+
* @property {number} locEndLine per-export source end line
|
|
251
|
+
* @property {number} locEndColumn per-export source end column
|
|
252
|
+
* @property {string[]=} _conventionNames memoized convention names for `name`
|
|
253
|
+
* @property {string[]=} _valueConventionNames memoized convention names for `value`
|
|
254
|
+
*/
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* Memoized `cssExportConvention(entry.name, convention)`.
|
|
258
|
+
* @param {CssExportEntry} entry entry
|
|
259
|
+
* @param {CssGeneratorExportsConvention} convention convention
|
|
260
|
+
* @returns {string[]} convention names
|
|
261
|
+
*/
|
|
262
|
+
const entryConventionNames = (entry, convention) => {
|
|
263
|
+
if (entry._conventionNames) return entry._conventionNames;
|
|
264
|
+
entry._conventionNames = cssExportConvention(entry.name, convention);
|
|
265
|
+
return entry._conventionNames;
|
|
266
|
+
};
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Memoized `cssExportConvention(entry.value, convention)`. Caller guarantees
|
|
270
|
+
* `typeof entry.value === "string"`.
|
|
271
|
+
* @param {CssExportEntry} entry entry
|
|
272
|
+
* @param {CssGeneratorExportsConvention} convention convention
|
|
273
|
+
* @returns {string[]} convention names
|
|
274
|
+
*/
|
|
275
|
+
const entryValueConventionNames = (entry, convention) => {
|
|
276
|
+
if (entry._valueConventionNames) return entry._valueConventionNames;
|
|
277
|
+
entry._valueConventionNames = cssExportConvention(
|
|
278
|
+
/** @type {string} */ (entry.value),
|
|
279
|
+
convention
|
|
280
|
+
);
|
|
281
|
+
return entry._valueConventionNames;
|
|
282
|
+
};
|
|
165
283
|
|
|
166
284
|
class CssIcssExportDependency extends NullDependency {
|
|
167
285
|
/**
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
* :export { LOCAL_NAME: EXPORT_NAME }
|
|
171
|
-
* @param {string} name export name
|
|
172
|
-
* @param {Value} value value or local name and import name
|
|
173
|
-
* @param {Range=} range range
|
|
174
|
-
* @param {boolean=} interpolate true when value need to be interpolated, otherwise false
|
|
175
|
-
* @param {ExportMode=} exportMode export mode
|
|
176
|
-
* @param {ExportType=} exportType export type
|
|
286
|
+
* One consolidated `:export` dependency for a whole CSS module.
|
|
287
|
+
* @param {CssExportEntry[]} entries export entries in source order
|
|
177
288
|
*/
|
|
178
|
-
constructor(
|
|
179
|
-
name,
|
|
180
|
-
value,
|
|
181
|
-
range,
|
|
182
|
-
interpolate = false,
|
|
183
|
-
exportMode = CssIcssExportDependency.EXPORT_MODE.REPLACE,
|
|
184
|
-
exportType = CssIcssExportDependency.EXPORT_TYPE.NORMAL
|
|
185
|
-
) {
|
|
289
|
+
constructor(entries) {
|
|
186
290
|
super();
|
|
187
|
-
|
|
188
|
-
this.
|
|
189
|
-
this.range = range;
|
|
190
|
-
this.interpolate = interpolate;
|
|
191
|
-
this.exportMode = exportMode;
|
|
192
|
-
this.exportType = exportType;
|
|
291
|
+
/** @type {CssExportEntry[]} */
|
|
292
|
+
this.entries = entries;
|
|
193
293
|
/** @type {undefined | string} */
|
|
194
294
|
this._hashUpdate = undefined;
|
|
295
|
+
/** @type {undefined | Map<string, CssExportEntry[]>} lazily-built `name -> entries` index, reused across every importer's codegen */
|
|
296
|
+
this._entriesByName = undefined;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* The `entries` grouped by export name, built once and reused. `entries` is
|
|
301
|
+
* immutable after construction/deserialization, so this stays valid for the
|
|
302
|
+
* dependency's lifetime (the composes/`@value` target of many importers).
|
|
303
|
+
* @returns {Map<string, CssExportEntry[]>} entries grouped by export name
|
|
304
|
+
*/
|
|
305
|
+
getEntriesByName() {
|
|
306
|
+
if (this._entriesByName === undefined) {
|
|
307
|
+
/** @type {Map<string, CssExportEntry[]>} */
|
|
308
|
+
const map = new Map();
|
|
309
|
+
for (const e of this.entries) {
|
|
310
|
+
const list = map.get(e.name);
|
|
311
|
+
if (list) list.push(e);
|
|
312
|
+
else map.set(e.name, [e]);
|
|
313
|
+
}
|
|
314
|
+
this._entriesByName = map;
|
|
315
|
+
}
|
|
316
|
+
return this._entriesByName;
|
|
195
317
|
}
|
|
196
318
|
|
|
197
319
|
get type() {
|
|
@@ -199,16 +321,33 @@ class CssIcssExportDependency extends NullDependency {
|
|
|
199
321
|
}
|
|
200
322
|
|
|
201
323
|
/**
|
|
202
|
-
*
|
|
203
|
-
* @param {
|
|
204
|
-
* @returns {
|
|
324
|
+
* Returns the exported names
|
|
325
|
+
* @param {ModuleGraph} moduleGraph module graph
|
|
326
|
+
* @returns {ExportsSpec | undefined} export names
|
|
205
327
|
*/
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
328
|
+
getExports(moduleGraph) {
|
|
329
|
+
const module = /** @type {CssModule} */ (moduleGraph.getParentModule(this));
|
|
330
|
+
const generator = /** @type {CssGenerator} */ (module.generator);
|
|
331
|
+
const convention =
|
|
332
|
+
/** @type {CssGeneratorExportsConvention} */
|
|
333
|
+
(generator.options.exportsConvention);
|
|
334
|
+
|
|
335
|
+
/** @type {{ name: string, canMangle: boolean }[]} */
|
|
336
|
+
const exports = [];
|
|
337
|
+
for (const entry of this.entries) {
|
|
338
|
+
if (
|
|
339
|
+
entry.exportMode === EXPORT_MODE.NONE ||
|
|
340
|
+
entry.exportMode === EXPORT_MODE.SELF_REFERENCE
|
|
341
|
+
) {
|
|
342
|
+
continue;
|
|
343
|
+
}
|
|
344
|
+
for (const name of entryConventionNames(entry, convention)) {
|
|
345
|
+
exports.push({ name, canMangle: true });
|
|
346
|
+
}
|
|
209
347
|
}
|
|
210
|
-
|
|
211
|
-
return
|
|
348
|
+
|
|
349
|
+
if (exports.length === 0) return undefined;
|
|
350
|
+
return { exports, dependencies: undefined };
|
|
212
351
|
}
|
|
213
352
|
|
|
214
353
|
/**
|
|
@@ -218,80 +357,103 @@ class CssIcssExportDependency extends NullDependency {
|
|
|
218
357
|
* @returns {ReferencedExports} referenced exports
|
|
219
358
|
*/
|
|
220
359
|
getReferencedExports(moduleGraph, runtime) {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
)
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
360
|
+
// `composes: foo;` (SELF_REFERENCE) references the composed class
|
|
361
|
+
// (`entry.value`), not the composing class. Every other entry mode
|
|
362
|
+
// keeps the whole exports object referenced (legacy behaviour), so the
|
|
363
|
+
// presence of any such entry subsumes the self-reference names.
|
|
364
|
+
let hasNonSelfReference = false;
|
|
365
|
+
/** @type {ReferencedExports} */
|
|
366
|
+
const referenced = [];
|
|
367
|
+
let generator;
|
|
368
|
+
for (const entry of this.entries) {
|
|
369
|
+
if (
|
|
370
|
+
entry.exportMode === EXPORT_MODE.SELF_REFERENCE &&
|
|
371
|
+
typeof entry.value === "string"
|
|
372
|
+
) {
|
|
373
|
+
const module =
|
|
374
|
+
/** @type {CssModule} */
|
|
375
|
+
(moduleGraph.getParentModule(this));
|
|
376
|
+
generator = generator || /** @type {CssGenerator} */ (module.generator);
|
|
377
|
+
const names = entryValueConventionNames(
|
|
378
|
+
entry,
|
|
379
|
+
/** @type {CssGeneratorExportsConvention} */
|
|
380
|
+
(generator.options.exportsConvention)
|
|
381
|
+
);
|
|
382
|
+
for (const name of names) {
|
|
383
|
+
referenced.push({ name: [name], canMangle: true });
|
|
228
384
|
}
|
|
229
|
-
|
|
385
|
+
} else {
|
|
386
|
+
hasNonSelfReference = true;
|
|
387
|
+
}
|
|
230
388
|
}
|
|
231
389
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
/**
|
|
236
|
-
* Returns the exported names
|
|
237
|
-
* @param {ModuleGraph} moduleGraph module graph
|
|
238
|
-
* @returns {ExportsSpec | undefined} export names
|
|
239
|
-
*/
|
|
240
|
-
getExports(moduleGraph) {
|
|
241
|
-
if (
|
|
242
|
-
this.exportMode === CssIcssExportDependency.EXPORT_MODE.NONE ||
|
|
243
|
-
this.exportMode === CssIcssExportDependency.EXPORT_MODE.SELF_REFERENCE
|
|
244
|
-
) {
|
|
245
|
-
return;
|
|
390
|
+
if (hasNonSelfReference) {
|
|
391
|
+
return super.getReferencedExports(moduleGraph, runtime);
|
|
246
392
|
}
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
this.name,
|
|
252
|
-
/** @type {CssGeneratorExportsConvention} */
|
|
253
|
-
(generator.options.exportsConvention)
|
|
254
|
-
);
|
|
255
|
-
|
|
256
|
-
return {
|
|
257
|
-
exports: [...names].map((name) => ({
|
|
258
|
-
name,
|
|
259
|
-
canMangle: true
|
|
260
|
-
})),
|
|
261
|
-
dependencies: undefined
|
|
262
|
-
};
|
|
393
|
+
if (referenced.length === 0) {
|
|
394
|
+
return super.getReferencedExports(moduleGraph, runtime);
|
|
395
|
+
}
|
|
396
|
+
return referenced;
|
|
263
397
|
}
|
|
264
398
|
|
|
265
399
|
/**
|
|
266
|
-
* Returns warnings
|
|
400
|
+
* Returns warnings.
|
|
267
401
|
* @param {ModuleGraph} moduleGraph module graph
|
|
268
402
|
* @returns {WebpackError[] | null | undefined} warnings
|
|
269
403
|
*/
|
|
270
404
|
getWarnings(moduleGraph) {
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
405
|
+
/** @type {WebpackErrorType[] | null} */
|
|
406
|
+
let warnings = null;
|
|
407
|
+
let module;
|
|
408
|
+
let exportsInfo;
|
|
409
|
+
let convention;
|
|
410
|
+
for (const entry of this.entries) {
|
|
277
411
|
if (
|
|
278
|
-
|
|
279
|
-
|
|
412
|
+
entry.exportMode !== EXPORT_MODE.SELF_REFERENCE ||
|
|
413
|
+
typeof entry.value !== "string"
|
|
280
414
|
) {
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
if (module === undefined) {
|
|
418
|
+
module =
|
|
419
|
+
/** @type {CssModule | undefined} */
|
|
420
|
+
(moduleGraph.getParentModule(this));
|
|
421
|
+
if (!module) return warnings;
|
|
422
|
+
const generator = /** @type {CssGenerator} */ (module.generator);
|
|
423
|
+
convention =
|
|
424
|
+
/** @type {CssGeneratorExportsConvention} */
|
|
425
|
+
(generator.options.exportsConvention);
|
|
426
|
+
exportsInfo = moduleGraph.getExportsInfo(module);
|
|
427
|
+
}
|
|
428
|
+
const names = entryValueConventionNames(
|
|
429
|
+
entry,
|
|
430
|
+
/** @type {CssGeneratorExportsConvention} */ (convention)
|
|
431
|
+
);
|
|
432
|
+
const ei = /** @type {NonNullable<typeof exportsInfo>} */ (exportsInfo);
|
|
433
|
+
const isProvided = names.some((name) => ei.isExportProvided(name));
|
|
434
|
+
if (!isProvided) {
|
|
281
435
|
const error = new WebpackError(
|
|
282
|
-
`Self-referencing name "${
|
|
436
|
+
`Self-referencing name "${entry.value}" not found`
|
|
283
437
|
);
|
|
284
438
|
error.module = module;
|
|
285
|
-
|
|
286
|
-
|
|
439
|
+
// Per-entry loc so Compilation attributes the warning precisely
|
|
440
|
+
// (it can't use the consolidated dependency's single loc). Built
|
|
441
|
+
// on demand — entries carry flat numbers, not location objects.
|
|
442
|
+
if (entry.locStartLine > 0) {
|
|
443
|
+
error.loc = {
|
|
444
|
+
start: { line: entry.locStartLine, column: entry.locStartColumn },
|
|
445
|
+
end: { line: entry.locEndLine, column: entry.locEndColumn }
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
if (warnings === null) warnings = [];
|
|
449
|
+
warnings.push(error);
|
|
287
450
|
}
|
|
288
451
|
}
|
|
289
|
-
|
|
290
|
-
return null;
|
|
452
|
+
return warnings;
|
|
291
453
|
}
|
|
292
454
|
|
|
293
455
|
/**
|
|
294
|
-
*
|
|
456
|
+
* Updates the hash with the data contributed by this instance.
|
|
295
457
|
* @param {Hash} hash hash to be updated
|
|
296
458
|
* @param {UpdateHashContext} context context
|
|
297
459
|
* @returns {void}
|
|
@@ -302,100 +464,252 @@ class CssIcssExportDependency extends NullDependency {
|
|
|
302
464
|
/** @type {CssModule} */
|
|
303
465
|
(chunkGraph.moduleGraph.getParentModule(this));
|
|
304
466
|
const generator = /** @type {CssGenerator} */ (module.generator);
|
|
305
|
-
const
|
|
306
|
-
this.name,
|
|
467
|
+
const convention =
|
|
307
468
|
/** @type {CssGeneratorExportsConvention} */
|
|
308
|
-
(generator.options.exportsConvention)
|
|
309
|
-
);
|
|
310
|
-
|
|
469
|
+
(generator.options.exportsConvention);
|
|
470
|
+
const localIdentName = JSON.stringify(generator.options.localIdentName);
|
|
471
|
+
// Concatenate each entry's contribution with no separator so the byte
|
|
472
|
+
// stream matches the legacy per-export `updateHash` sequence exactly
|
|
473
|
+
// (keeps module hashes stable for import-free modules).
|
|
474
|
+
let update = "";
|
|
475
|
+
for (const entry of this.entries) {
|
|
476
|
+
const names = entryConventionNames(entry, convention);
|
|
477
|
+
update += `exportsConvention|${JSON.stringify(names)}|localIdentName|${localIdentName}|value|${JSON.stringify(entry.value)}|range|${JSON.stringify(entry.range)}|interpolate|${entry.interpolate}|exportMode|${entry.exportMode}|exportType|${entry.exportType}`;
|
|
478
|
+
}
|
|
479
|
+
this._hashUpdate = update;
|
|
311
480
|
}
|
|
312
481
|
hash.update(this._hashUpdate);
|
|
313
482
|
}
|
|
314
483
|
|
|
315
484
|
/**
|
|
485
|
+
* Serializes this instance into the provided serializer context.
|
|
316
486
|
* @param {ObjectSerializerContext} context context
|
|
317
487
|
*/
|
|
318
488
|
serialize(context) {
|
|
319
489
|
const { write } = context;
|
|
320
|
-
write(this.
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
490
|
+
write(this.entries.length);
|
|
491
|
+
for (const entry of this.entries) {
|
|
492
|
+
write(entry.name);
|
|
493
|
+
write(entry.value);
|
|
494
|
+
write(entry.range);
|
|
495
|
+
write(entry.interpolate);
|
|
496
|
+
write(entry.exportMode);
|
|
497
|
+
write(entry.exportType);
|
|
498
|
+
write(entry.locStartLine);
|
|
499
|
+
write(entry.locStartColumn);
|
|
500
|
+
write(entry.locEndLine);
|
|
501
|
+
write(entry.locEndColumn);
|
|
502
|
+
}
|
|
326
503
|
super.serialize(context);
|
|
327
504
|
}
|
|
328
505
|
|
|
329
506
|
/**
|
|
507
|
+
* Restores this instance from the provided deserializer context.
|
|
330
508
|
* @param {ObjectDeserializerContext} context context
|
|
331
509
|
*/
|
|
332
510
|
deserialize(context) {
|
|
333
511
|
const { read } = context;
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
512
|
+
const length = /** @type {number} */ (read());
|
|
513
|
+
/** @type {CssExportEntry[]} */
|
|
514
|
+
const entries = [];
|
|
515
|
+
for (let i = 0; i < length; i++) {
|
|
516
|
+
entries.push({
|
|
517
|
+
name: /** @type {string} */ (read()),
|
|
518
|
+
value: /** @type {Value} */ (read()),
|
|
519
|
+
range: /** @type {Range=} */ (read()),
|
|
520
|
+
interpolate: /** @type {boolean} */ (read()),
|
|
521
|
+
exportMode: /** @type {ExportMode} */ (read()),
|
|
522
|
+
exportType: /** @type {ExportType} */ (read()),
|
|
523
|
+
locStartLine: /** @type {number} */ (read()),
|
|
524
|
+
locStartColumn: /** @type {number} */ (read()),
|
|
525
|
+
locEndLine: /** @type {number} */ (read()),
|
|
526
|
+
locEndColumn: /** @type {number} */ (read())
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
this.entries = entries;
|
|
530
|
+
this._hashUpdate = undefined;
|
|
531
|
+
this._entriesByName = undefined;
|
|
340
532
|
super.deserialize(context);
|
|
341
533
|
}
|
|
342
534
|
}
|
|
343
535
|
|
|
536
|
+
/**
|
|
537
|
+
* @typedef {object} ResolutionCache
|
|
538
|
+
* @property {Map<CssModule, Map<string, CssExportEntry[]>>} exports module -> (export name -> entries) across all its export deps
|
|
539
|
+
* @property {Map<CssIcssImportDependency, CssModule | null>} targets import dep -> resolved target module
|
|
540
|
+
*/
|
|
541
|
+
|
|
542
|
+
/**
|
|
543
|
+
* Creates the transient per-`apply` cache shared by `resolve` and
|
|
544
|
+
* `resolveReferences`. It is GC'd when the codegen call returns and is never
|
|
545
|
+
* retained on the dependency.
|
|
546
|
+
* @returns {ResolutionCache} empty resolution cache
|
|
547
|
+
*/
|
|
548
|
+
const createResolutionCache = () => ({
|
|
549
|
+
exports: new Map(),
|
|
550
|
+
targets: new Map()
|
|
551
|
+
});
|
|
552
|
+
|
|
553
|
+
/**
|
|
554
|
+
* Shared read-only index for modules that own no export dep.
|
|
555
|
+
* @type {Map<string, CssExportEntry[]>}
|
|
556
|
+
*/
|
|
557
|
+
const EMPTY_INDEX = new Map();
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
* Per-module `local name -> import deps` index, keyed by module and validated by
|
|
561
|
+
* `buildInfo` identity (a fresh object per build). `apply` runs once per source
|
|
562
|
+
* type (CSS and JS), so this survives both passes — the index is built once per
|
|
563
|
+
* build instead of once per `apply`. Weakly held, so it never keeps a module
|
|
564
|
+
* alive.
|
|
565
|
+
* @type {WeakMap<CssModule, { buildInfo: unknown, index: Map<string, CssIcssImportDependency[]> }>}
|
|
566
|
+
*/
|
|
567
|
+
const moduleImportIndexes = new WeakMap();
|
|
568
|
+
|
|
569
|
+
/**
|
|
570
|
+
* Get (or lazily resolve) the target module of an `@value`/composes import dep.
|
|
571
|
+
* The same import dep is followed by many entries within one codegen, so the
|
|
572
|
+
* `moduleGraph.getModule` lookup is memoized per dep.
|
|
573
|
+
* @param {ResolutionCache} cache resolution cache
|
|
574
|
+
* @param {ModuleGraph} moduleGraph module graph
|
|
575
|
+
* @param {CssIcssImportDependency} importDep import dependency
|
|
576
|
+
* @returns {CssModule | null} resolved target module, or `null` if none
|
|
577
|
+
*/
|
|
578
|
+
const getTargetModule = (cache, moduleGraph, importDep) => {
|
|
579
|
+
let module = cache.targets.get(importDep);
|
|
580
|
+
if (module === undefined) {
|
|
581
|
+
module = /** @type {CssModule | null} */ (moduleGraph.getModule(importDep));
|
|
582
|
+
cache.targets.set(importDep, module);
|
|
583
|
+
}
|
|
584
|
+
return module;
|
|
585
|
+
};
|
|
586
|
+
|
|
587
|
+
/**
|
|
588
|
+
* Get (or lazily build) the `name -> entries` index for `module`. There is one
|
|
589
|
+
* consolidated `CssIcssExportDependency` per module, and its own index is cached
|
|
590
|
+
* on the dep — so a module composed/imported by many others builds its index
|
|
591
|
+
* once per build rather than once per importer, and resolution does a single Map
|
|
592
|
+
* lookup instead of re-scanning `module.dependencies` per reference.
|
|
593
|
+
* @param {ResolutionCache} cache resolution cache
|
|
594
|
+
* @param {CssModule} module css module
|
|
595
|
+
* @returns {Map<string, CssExportEntry[]>} entries grouped by export name
|
|
596
|
+
*/
|
|
597
|
+
const getExportIndex = (cache, module) => {
|
|
598
|
+
let map = cache.exports.get(module);
|
|
599
|
+
if (map === undefined) {
|
|
600
|
+
map = EMPTY_INDEX;
|
|
601
|
+
for (const dep of module.dependencies) {
|
|
602
|
+
if (dep instanceof CssIcssExportDependency) {
|
|
603
|
+
map = dep.getEntriesByName();
|
|
604
|
+
break;
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
cache.exports.set(module, map);
|
|
608
|
+
}
|
|
609
|
+
return map;
|
|
610
|
+
};
|
|
611
|
+
|
|
612
|
+
/**
|
|
613
|
+
* Get (or lazily build) the `local name -> import deps` index for `module`, so
|
|
614
|
+
* `findImportDep` is a Map lookup instead of a linear scan of every dependency.
|
|
615
|
+
* Cached per build on the module (validated by `buildInfo` identity) so both the
|
|
616
|
+
* CSS and JS codegen passes reuse one scan of `module.dependencies`.
|
|
617
|
+
* @param {CssModule} module css module
|
|
618
|
+
* @returns {Map<string, CssIcssImportDependency[]>} import deps grouped by local name
|
|
619
|
+
*/
|
|
620
|
+
const getImportIndex = (module) => {
|
|
621
|
+
const buildInfo = module.buildInfo;
|
|
622
|
+
const cached = moduleImportIndexes.get(module);
|
|
623
|
+
if (cached !== undefined && cached.buildInfo === buildInfo) {
|
|
624
|
+
return cached.index;
|
|
625
|
+
}
|
|
626
|
+
/** @type {Map<string, CssIcssImportDependency[]>} */
|
|
627
|
+
const index = new Map();
|
|
628
|
+
for (const d of module.dependencies) {
|
|
629
|
+
if (!(d instanceof CssIcssImportDependency)) continue;
|
|
630
|
+
const list = index.get(d.localName);
|
|
631
|
+
if (list) list.push(d);
|
|
632
|
+
else index.set(d.localName, [d]);
|
|
633
|
+
}
|
|
634
|
+
moduleImportIndexes.set(module, { buildInfo, index });
|
|
635
|
+
return index;
|
|
636
|
+
};
|
|
637
|
+
|
|
638
|
+
/**
|
|
639
|
+
* Finds the active `CssIcssImportDependency` for a given local name. When a
|
|
640
|
+
* `request` is provided the lookup also requires the import dependency's
|
|
641
|
+
* `request` to match, so references between two `@value foo from "..."`
|
|
642
|
+
* declarations resolve through the import in scope at the reference site.
|
|
643
|
+
* @param {CssModule} module module owning the dependencies to search
|
|
644
|
+
* @param {string} localName local name
|
|
645
|
+
* @param {string=} request user request of the `@value` import to match
|
|
646
|
+
* @returns {CssIcssImportDependency | undefined} matching import dep, if any
|
|
647
|
+
*/
|
|
648
|
+
const findImportDep = (module, localName, request) => {
|
|
649
|
+
const list = getImportIndex(module).get(localName);
|
|
650
|
+
if (list === undefined) return undefined;
|
|
651
|
+
// Import deps keep dependency order, so `list[0]` is the first match (the
|
|
652
|
+
// legacy `firstMatch` fallback when no request-specific match exists).
|
|
653
|
+
if (request === undefined) return list[0];
|
|
654
|
+
for (const d of list) if (d.request === request) return d;
|
|
655
|
+
return list[0];
|
|
656
|
+
};
|
|
657
|
+
|
|
344
658
|
CssIcssExportDependency.Template = class CssIcssExportDependencyTemplate extends (
|
|
345
659
|
NullDependency.Template
|
|
346
660
|
) {
|
|
347
|
-
// TODO looking how to cache
|
|
348
661
|
/**
|
|
662
|
+
* Resolves a `[localName, importName, request]` reference to its final
|
|
663
|
+
* value by following `@value` imports into other modules' consolidated
|
|
664
|
+
* export dependencies.
|
|
349
665
|
* @param {string} localName local name
|
|
350
666
|
* @param {string} importName import name
|
|
351
667
|
* @param {DependencyTemplateContext} templateContext the context object
|
|
352
|
-
* @param {
|
|
668
|
+
* @param {string | undefined} request user request of the `@value` import
|
|
669
|
+
* @param {Set<CssExportEntry>=} seen cycle guard
|
|
670
|
+
* @param {ResolutionCache=} cache transient per-codegen index (shared with `resolveReferences` within one `apply`)
|
|
353
671
|
* @returns {string | undefined} found reference
|
|
354
672
|
*/
|
|
355
|
-
static resolve(
|
|
673
|
+
static resolve(
|
|
674
|
+
localName,
|
|
675
|
+
importName,
|
|
676
|
+
templateContext,
|
|
677
|
+
request,
|
|
678
|
+
seen = new Set(),
|
|
679
|
+
cache = createResolutionCache()
|
|
680
|
+
) {
|
|
356
681
|
const { moduleGraph } = templateContext;
|
|
357
|
-
const importDep =
|
|
358
|
-
/** @type {
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
d instanceof CssIcssImportDependency && d.localName === localName
|
|
363
|
-
)
|
|
364
|
-
);
|
|
682
|
+
const importDep = findImportDep(
|
|
683
|
+
/** @type {CssModule} */ (templateContext.module),
|
|
684
|
+
localName,
|
|
685
|
+
request
|
|
686
|
+
);
|
|
365
687
|
if (!importDep) return undefined;
|
|
366
688
|
|
|
367
|
-
const module =
|
|
689
|
+
const module = getTargetModule(cache, moduleGraph, importDep);
|
|
368
690
|
if (!module) return undefined;
|
|
369
691
|
|
|
370
|
-
const
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
)
|
|
376
|
-
);
|
|
377
|
-
|
|
378
|
-
if (!exportDep) return undefined;
|
|
692
|
+
const matches = getExportIndex(cache, module).get(importName);
|
|
693
|
+
const exportEntry = matches && matches[0];
|
|
694
|
+
if (!exportEntry) return undefined;
|
|
695
|
+
if (seen.has(exportEntry)) return undefined;
|
|
696
|
+
seen.add(exportEntry);
|
|
379
697
|
|
|
380
|
-
|
|
381
|
-
seen.add(exportDep);
|
|
382
|
-
|
|
383
|
-
const { value, interpolate } = exportDep;
|
|
698
|
+
const { value, interpolate } = exportEntry;
|
|
384
699
|
|
|
385
700
|
if (Array.isArray(value)) {
|
|
386
|
-
return
|
|
701
|
+
return CssIcssExportDependencyTemplate.resolve(
|
|
387
702
|
value[0],
|
|
388
703
|
value[1],
|
|
389
|
-
{
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
seen
|
|
704
|
+
{ ...templateContext, module },
|
|
705
|
+
value[2],
|
|
706
|
+
seen,
|
|
707
|
+
cache
|
|
394
708
|
);
|
|
395
709
|
}
|
|
396
710
|
|
|
397
711
|
if (interpolate) {
|
|
398
|
-
return
|
|
712
|
+
return CssIcssExportDependencyTemplate.getIdentifier(value, exportEntry, {
|
|
399
713
|
...templateContext,
|
|
400
714
|
module
|
|
401
715
|
});
|
|
@@ -405,84 +719,86 @@ CssIcssExportDependency.Template = class CssIcssExportDependencyTemplate extends
|
|
|
405
719
|
}
|
|
406
720
|
|
|
407
721
|
/**
|
|
408
|
-
*
|
|
722
|
+
* Resolves all references of a `composes` entry, deduplicated.
|
|
723
|
+
* @param {CssExportEntry} entry composes entry
|
|
409
724
|
* @param {DependencyTemplateContext} templateContext template context
|
|
410
|
-
* @param {Set<
|
|
725
|
+
* @param {Set<CssExportEntry>} seen cycle guard
|
|
726
|
+
* @param {ResolutionCache} cache transient per-codegen index, discarded after the module's `apply` (so it isn't retained on the dependency)
|
|
411
727
|
* @returns {string[]} final names
|
|
412
728
|
*/
|
|
413
|
-
static resolveReferences(
|
|
729
|
+
static resolveReferences(entry, templateContext, seen, cache) {
|
|
414
730
|
/** @type {string[]} */
|
|
415
731
|
const references = [];
|
|
416
732
|
|
|
417
|
-
if (seen.has(
|
|
418
|
-
seen.add(
|
|
419
|
-
|
|
420
|
-
if (Array.isArray(
|
|
421
|
-
const importDep =
|
|
422
|
-
/** @type {
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
d instanceof CssIcssImportDependency &&
|
|
427
|
-
d.localName === dep.value[0]
|
|
428
|
-
)
|
|
429
|
-
);
|
|
733
|
+
if (seen.has(entry)) return references;
|
|
734
|
+
seen.add(entry);
|
|
735
|
+
|
|
736
|
+
if (Array.isArray(entry.value)) {
|
|
737
|
+
const importDep = findImportDep(
|
|
738
|
+
/** @type {CssModule} */ (templateContext.module),
|
|
739
|
+
entry.value[0],
|
|
740
|
+
entry.value[2]
|
|
741
|
+
);
|
|
430
742
|
if (!importDep) return references;
|
|
431
743
|
|
|
432
|
-
const module =
|
|
433
|
-
|
|
434
|
-
|
|
744
|
+
const module = getTargetModule(
|
|
745
|
+
cache,
|
|
746
|
+
templateContext.moduleGraph,
|
|
747
|
+
importDep
|
|
748
|
+
);
|
|
435
749
|
if (!module) return references;
|
|
436
750
|
|
|
437
|
-
for
|
|
438
|
-
|
|
751
|
+
// Same overridden context and target name for every matched entry — build once, not per entry.
|
|
752
|
+
const subContext = { ...templateContext, module };
|
|
753
|
+
const name = /** @type {string[]} */ (entry.value)[1];
|
|
754
|
+
const matches = getExportIndex(cache, module).get(name);
|
|
755
|
+
if (matches) {
|
|
756
|
+
for (const d of matches) {
|
|
439
757
|
if (Array.isArray(d.value)) {
|
|
440
|
-
|
|
441
|
-
CssIcssExportDependencyTemplate.resolveReferences(
|
|
758
|
+
references.push(
|
|
759
|
+
...CssIcssExportDependencyTemplate.resolveReferences(
|
|
442
760
|
d,
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
);
|
|
449
|
-
|
|
450
|
-
references.push(...deepReferences);
|
|
761
|
+
subContext,
|
|
762
|
+
seen,
|
|
763
|
+
cache
|
|
764
|
+
)
|
|
765
|
+
);
|
|
451
766
|
} else {
|
|
452
767
|
references.push(
|
|
453
|
-
CssIcssExportDependencyTemplate.getIdentifier(
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
768
|
+
CssIcssExportDependencyTemplate.getIdentifier(
|
|
769
|
+
d.value,
|
|
770
|
+
d,
|
|
771
|
+
subContext
|
|
772
|
+
)
|
|
457
773
|
);
|
|
458
774
|
}
|
|
459
775
|
}
|
|
460
776
|
}
|
|
461
777
|
} else {
|
|
462
|
-
// Adding basic class
|
|
463
778
|
references.push(
|
|
464
779
|
CssIcssExportDependencyTemplate.getIdentifier(
|
|
465
|
-
|
|
466
|
-
|
|
780
|
+
/** @type {string} */ (entry.value),
|
|
781
|
+
entry,
|
|
467
782
|
templateContext
|
|
468
783
|
)
|
|
469
784
|
);
|
|
470
785
|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
) {
|
|
786
|
+
const matches = getExportIndex(
|
|
787
|
+
cache,
|
|
788
|
+
/** @type {CssModule} */ (templateContext.module)
|
|
789
|
+
).get(/** @type {string} */ (entry.value));
|
|
790
|
+
if (matches) {
|
|
791
|
+
for (const d of matches) {
|
|
792
|
+
if (d.exportType !== EXPORT_TYPE.COMPOSES) continue;
|
|
477
793
|
if (Array.isArray(d.value)) {
|
|
478
|
-
|
|
479
|
-
CssIcssExportDependencyTemplate.resolveReferences(
|
|
794
|
+
references.push(
|
|
795
|
+
...CssIcssExportDependencyTemplate.resolveReferences(
|
|
480
796
|
d,
|
|
481
797
|
templateContext,
|
|
482
|
-
seen
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
798
|
+
seen,
|
|
799
|
+
cache
|
|
800
|
+
)
|
|
801
|
+
);
|
|
486
802
|
} else {
|
|
487
803
|
references.push(
|
|
488
804
|
CssIcssExportDependencyTemplate.getIdentifier(
|
|
@@ -496,50 +812,32 @@ CssIcssExportDependency.Template = class CssIcssExportDependencyTemplate extends
|
|
|
496
812
|
}
|
|
497
813
|
}
|
|
498
814
|
|
|
499
|
-
return [...new Set(references)];
|
|
815
|
+
return references.length > 1 ? [...new Set(references)] : references;
|
|
500
816
|
}
|
|
501
817
|
|
|
502
818
|
/**
|
|
819
|
+
* Returns the interpolated identifier for an entry value.
|
|
503
820
|
* @param {string} value value to identifier
|
|
504
|
-
* @param {
|
|
821
|
+
* @param {CssExportEntry} entry the entry
|
|
505
822
|
* @param {DependencyTemplateContext} templateContext the context object
|
|
506
823
|
* @returns {string} identifier
|
|
507
824
|
*/
|
|
508
|
-
static getIdentifier(value,
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
const prefix =
|
|
521
|
-
dep.exportType === CssIcssExportDependency.EXPORT_TYPE.CUSTOM_VARIABLE
|
|
522
|
-
? "--"
|
|
523
|
-
: "";
|
|
524
|
-
|
|
525
|
-
return (
|
|
526
|
-
prefix +
|
|
527
|
-
getCssParser().escapeIdentifier(
|
|
528
|
-
getLocalIdent(
|
|
529
|
-
local,
|
|
530
|
-
/** @type {CssModule} */
|
|
531
|
-
(m),
|
|
532
|
-
templateContext.chunkGraph,
|
|
533
|
-
templateContext.runtimeTemplate
|
|
534
|
-
)
|
|
535
|
-
)
|
|
536
|
-
);
|
|
537
|
-
}
|
|
538
|
-
|
|
539
|
-
return value;
|
|
825
|
+
static getIdentifier(value, entry, templateContext) {
|
|
826
|
+
if (!entry.interpolate) return value;
|
|
827
|
+
const { moduleGraph, module, chunkGraph, runtimeTemplate } =
|
|
828
|
+
templateContext;
|
|
829
|
+
return moduleGraph.cached(
|
|
830
|
+
computeInterpolatedIdentifier,
|
|
831
|
+
/** @type {CssModule} */ (module),
|
|
832
|
+
value,
|
|
833
|
+
entry.exportType,
|
|
834
|
+
chunkGraph,
|
|
835
|
+
runtimeTemplate
|
|
836
|
+
);
|
|
540
837
|
}
|
|
541
838
|
|
|
542
839
|
/**
|
|
840
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
543
841
|
* @param {Dependency} dependency the dependency for which the template should be applied
|
|
544
842
|
* @param {ReplaceSource} source the current replace source which can be modified
|
|
545
843
|
* @param {DependencyTemplateContext} templateContext the context object
|
|
@@ -547,112 +845,128 @@ CssIcssExportDependency.Template = class CssIcssExportDependencyTemplate extends
|
|
|
547
845
|
*/
|
|
548
846
|
apply(dependency, source, templateContext) {
|
|
549
847
|
const dep = /** @type {CssIcssExportDependency} */ (dependency);
|
|
550
|
-
if (!dep.range && templateContext.type !== JAVASCRIPT_TYPE) return;
|
|
551
848
|
const { module: m, moduleGraph, runtime, cssData } = templateContext;
|
|
552
849
|
const module = /** @type {CssModule} */ (m);
|
|
553
850
|
const generator = /** @type {CssGenerator} */ (module.generator);
|
|
554
|
-
const
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
//
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
dep,
|
|
566
|
-
templateContext
|
|
567
|
-
).join(" ");
|
|
568
|
-
} else if (isReference) {
|
|
569
|
-
const resolved = CssIcssExportDependencyTemplate.resolve(
|
|
570
|
-
dep.value[0],
|
|
571
|
-
dep.value[1],
|
|
572
|
-
templateContext
|
|
573
|
-
);
|
|
851
|
+
const isJs = templateContext.type === JAVASCRIPT_TYPE;
|
|
852
|
+
// All entries belong to this one module, so resolve its ExportsInfo once
|
|
853
|
+
// instead of re-resolving `module -> exportsInfo` per export name.
|
|
854
|
+
const exportsInfo = isJs ? moduleGraph.getExportsInfo(module) : undefined;
|
|
855
|
+
// Transient per-module indexes for composes resolution within this
|
|
856
|
+
// module's codegen; GC'd when apply returns (never retained on the dependency).
|
|
857
|
+
const cache = createResolutionCache();
|
|
858
|
+
|
|
859
|
+
for (const entry of dep.entries) {
|
|
860
|
+
if (!entry.range && !isJs) continue;
|
|
861
|
+
const isReference = Array.isArray(entry.value);
|
|
574
862
|
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
863
|
+
/** @type {string} */
|
|
864
|
+
let value;
|
|
865
|
+
if (entry.exportType === EXPORT_TYPE.COMPOSES && isJs) {
|
|
866
|
+
value = CssIcssExportDependencyTemplate.resolveReferences(
|
|
867
|
+
entry,
|
|
868
|
+
templateContext,
|
|
869
|
+
new Set(),
|
|
870
|
+
cache
|
|
871
|
+
).join(" ");
|
|
872
|
+
} else if (isReference) {
|
|
873
|
+
const resolved = CssIcssExportDependencyTemplate.resolve(
|
|
874
|
+
/** @type {string[]} */ (entry.value)[0],
|
|
875
|
+
/** @type {string[]} */ (entry.value)[1],
|
|
876
|
+
templateContext,
|
|
877
|
+
/** @type {string[]} */ (entry.value)[2],
|
|
878
|
+
new Set(),
|
|
879
|
+
cache
|
|
880
|
+
);
|
|
881
|
+
value = resolved || /** @type {string[]} */ (entry.value)[0];
|
|
882
|
+
} else {
|
|
883
|
+
value = CssIcssExportDependencyTemplate.getIdentifier(
|
|
884
|
+
/** @type {string} */ (entry.value),
|
|
885
|
+
entry,
|
|
886
|
+
templateContext
|
|
887
|
+
);
|
|
888
|
+
}
|
|
584
889
|
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
) {
|
|
589
|
-
value += `-${dep.name}`;
|
|
590
|
-
}
|
|
890
|
+
if (entry.exportType === EXPORT_TYPE.GRID_CUSTOM_IDENTIFIER) {
|
|
891
|
+
value += `-${entry.name}`;
|
|
892
|
+
}
|
|
591
893
|
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
dep.name,
|
|
598
|
-
/** @type {CssGeneratorExportsConvention} */
|
|
599
|
-
(generator.options.exportsConvention)
|
|
600
|
-
);
|
|
601
|
-
const usedNames =
|
|
602
|
-
/** @type {string[]} */
|
|
603
|
-
(
|
|
604
|
-
names
|
|
605
|
-
.map((name) =>
|
|
606
|
-
moduleGraph.getExportInfo(module, name).getUsedName(name, runtime)
|
|
607
|
-
)
|
|
608
|
-
.filter(Boolean)
|
|
894
|
+
if (isJs && entry.exportMode !== EXPORT_MODE.NONE) {
|
|
895
|
+
const names = entryConventionNames(
|
|
896
|
+
entry,
|
|
897
|
+
/** @type {CssGeneratorExportsConvention} */
|
|
898
|
+
(generator.options.exportsConvention)
|
|
609
899
|
);
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
900
|
+
/** @type {Set<string>} */
|
|
901
|
+
const allNames = new Set();
|
|
902
|
+
for (const name of names) {
|
|
903
|
+
if (
|
|
904
|
+
/** @type {NonNullable<typeof exportsInfo>} */ (exportsInfo)
|
|
905
|
+
.getExportInfo(name)
|
|
906
|
+
.getUsedName(name, runtime)
|
|
907
|
+
) {
|
|
908
|
+
allNames.add(name);
|
|
909
|
+
}
|
|
910
|
+
}
|
|
911
|
+
const unescaped = getCssTokens().unescapeIdentifier(
|
|
912
|
+
value,
|
|
913
|
+
templateContext.runtimeTemplate.compilation.compiler.root
|
|
914
|
+
);
|
|
915
|
+
|
|
916
|
+
const depLocLine = entry.locStartLine;
|
|
917
|
+
const depLocColumn = entry.locStartColumn;
|
|
918
|
+
for (const used of allNames) {
|
|
919
|
+
if (entry.exportMode === EXPORT_MODE.ONCE) {
|
|
920
|
+
if (cssData.exports.has(used)) continue;
|
|
921
|
+
cssData.exports.set(used, unescaped);
|
|
922
|
+
if (
|
|
923
|
+
depLocLine > 0 &&
|
|
924
|
+
cssData.exportLocs &&
|
|
925
|
+
!cssData.exportLocs.has(used)
|
|
926
|
+
) {
|
|
927
|
+
cssData.exportLocs.set(used, {
|
|
928
|
+
line: depLocLine,
|
|
929
|
+
column: depLocColumn
|
|
930
|
+
});
|
|
931
|
+
}
|
|
932
|
+
} else {
|
|
933
|
+
const originalValue =
|
|
934
|
+
entry.exportMode === EXPORT_MODE.REPLACE
|
|
935
|
+
? undefined
|
|
936
|
+
: cssData.exports.get(used);
|
|
937
|
+
cssData.exports.set(
|
|
938
|
+
used,
|
|
939
|
+
`${originalValue ? `${originalValue}${unescaped ? " " : ""}` : ""}${unescaped}`
|
|
940
|
+
);
|
|
941
|
+
if (
|
|
942
|
+
depLocLine > 0 &&
|
|
943
|
+
cssData.exportLocs &&
|
|
944
|
+
!cssData.exportLocs.has(used)
|
|
945
|
+
) {
|
|
946
|
+
cssData.exportLocs.set(used, {
|
|
947
|
+
line: depLocLine,
|
|
948
|
+
column: depLocColumn
|
|
949
|
+
});
|
|
950
|
+
}
|
|
951
|
+
}
|
|
627
952
|
}
|
|
953
|
+
} else if (
|
|
954
|
+
entry.range &&
|
|
955
|
+
templateContext.type !== JAVASCRIPT_TYPE &&
|
|
956
|
+
entry.exportMode !== EXPORT_MODE.APPEND &&
|
|
957
|
+
entry.exportMode !== EXPORT_MODE.SELF_REFERENCE
|
|
958
|
+
) {
|
|
959
|
+
source.replace(entry.range[0], entry.range[1] - 1, value);
|
|
628
960
|
}
|
|
629
|
-
} else if (
|
|
630
|
-
dep.range &&
|
|
631
|
-
templateContext.type === CSS_TYPE &&
|
|
632
|
-
dep.exportMode !== CssIcssExportDependency.EXPORT_MODE.APPEND &&
|
|
633
|
-
dep.exportMode !== CssIcssExportDependency.EXPORT_MODE.SELF_REFERENCE
|
|
634
|
-
) {
|
|
635
|
-
source.replace(dep.range[0], dep.range[1] - 1, value);
|
|
636
961
|
}
|
|
637
962
|
}
|
|
638
963
|
};
|
|
639
964
|
|
|
640
965
|
/** @type {Record<"NONE" | "REPLACE" | "APPEND" | "ONCE" | "SELF_REFERENCE", ExportMode>} */
|
|
641
|
-
CssIcssExportDependency.EXPORT_MODE =
|
|
642
|
-
NONE: 0,
|
|
643
|
-
REPLACE: 1,
|
|
644
|
-
APPEND: 2,
|
|
645
|
-
ONCE: 3,
|
|
646
|
-
SELF_REFERENCE: 4
|
|
647
|
-
};
|
|
966
|
+
CssIcssExportDependency.EXPORT_MODE = EXPORT_MODE;
|
|
648
967
|
|
|
649
968
|
/** @type {Record<"NORMAL" | "CUSTOM_VARIABLE" | "GRID_CUSTOM_IDENTIFIER" | "COMPOSES", ExportType>} */
|
|
650
|
-
CssIcssExportDependency.EXPORT_TYPE =
|
|
651
|
-
NORMAL: 0,
|
|
652
|
-
CUSTOM_VARIABLE: 1,
|
|
653
|
-
GRID_CUSTOM_IDENTIFIER: 2,
|
|
654
|
-
COMPOSES: 3
|
|
655
|
-
};
|
|
969
|
+
CssIcssExportDependency.EXPORT_TYPE = EXPORT_TYPE;
|
|
656
970
|
|
|
657
971
|
makeSerializable(
|
|
658
972
|
CssIcssExportDependency,
|