@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
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
const { pathToFileURL } = require("url");
|
|
9
9
|
const { SyncBailHook } = require("tapable");
|
|
10
|
-
|
|
10
|
+
/** @typedef {import("../Compilation")} Compilation */
|
|
11
11
|
const DefinePlugin = require("../DefinePlugin");
|
|
12
12
|
const {
|
|
13
13
|
JAVASCRIPT_MODULE_TYPE_AUTO,
|
|
@@ -22,15 +22,31 @@ const {
|
|
|
22
22
|
evaluateToString,
|
|
23
23
|
toConstantDependency
|
|
24
24
|
} = require("../javascript/JavascriptParserHelpers");
|
|
25
|
+
const { getInnerGraphUtils } = require("../optimize/InnerGraph");
|
|
26
|
+
const createHooksRegistry = require("../util/createHooksRegistry");
|
|
25
27
|
const { propertyAccess } = require("../util/property");
|
|
26
28
|
const ConstDependency = require("./ConstDependency");
|
|
29
|
+
const ImportMetaResolveDependency = require("./ImportMetaResolveDependency");
|
|
27
30
|
const ModuleInitFragmentDependency = require("./ModuleInitFragmentDependency");
|
|
28
31
|
|
|
32
|
+
// Loaded at module scope, not inside the parser handler: the async resolver
|
|
33
|
+
// cache tail can run that handler after a test tears down the module registry.
|
|
34
|
+
const WEBPACK_VERSION = Number.parseInt(
|
|
35
|
+
require("../../package.json").version,
|
|
36
|
+
10
|
|
37
|
+
);
|
|
38
|
+
|
|
29
39
|
/** @typedef {import("estree").MemberExpression} MemberExpression */
|
|
30
40
|
/** @typedef {import("estree").Identifier} Identifier */
|
|
41
|
+
/** @typedef {import("estree").CallExpression} CallExpression */
|
|
42
|
+
/** @typedef {import("estree").Expression} Expression */
|
|
43
|
+
/** @typedef {import("estree").Super} Super */
|
|
31
44
|
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
|
|
32
45
|
/** @typedef {import("../Compiler")} Compiler */
|
|
46
|
+
/** @typedef {import("../DefinePlugin").MergedDefinitionNode} MergedDefinitionNode */
|
|
33
47
|
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
|
48
|
+
/** @typedef {import("../Module").ValueCacheVersion} ValueCacheVersion */
|
|
49
|
+
/** @typedef {import("../NormalModule").NormalModuleBuildInfo} NormalModuleBuildInfo */
|
|
34
50
|
/** @typedef {import("../NormalModule")} NormalModule */
|
|
35
51
|
/** @typedef {import("../javascript/JavascriptParser")} Parser */
|
|
36
52
|
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
|
@@ -40,69 +56,160 @@ const ModuleInitFragmentDependency = require("./ModuleInitFragmentDependency");
|
|
|
40
56
|
|
|
41
57
|
const PLUGIN_NAME = "ImportMetaPlugin";
|
|
42
58
|
|
|
43
|
-
|
|
44
|
-
const
|
|
59
|
+
const IMPORT_META = "import.meta";
|
|
60
|
+
const IMPORT_META_URL = "import.meta.url";
|
|
61
|
+
const IMPORT_META_WEBPACK = "import.meta.webpack";
|
|
62
|
+
const IMPORT_META_MAIN = "import.meta.main";
|
|
63
|
+
const IMPORT_META_ENV = "import.meta.env";
|
|
64
|
+
const IMPORT_META_DIRNAME = "import.meta.dirname";
|
|
65
|
+
const IMPORT_META_FILENAME = "import.meta.filename";
|
|
66
|
+
const IMPORT_META_RESOLVE = "import.meta.resolve";
|
|
67
|
+
|
|
68
|
+
const IMPORT_META_FIELDS = new Set([
|
|
69
|
+
"url",
|
|
70
|
+
"webpack",
|
|
71
|
+
"main",
|
|
72
|
+
"env",
|
|
73
|
+
"dirname",
|
|
74
|
+
"filename",
|
|
75
|
+
"resolve",
|
|
76
|
+
"webpackContext",
|
|
77
|
+
"webpackHot"
|
|
78
|
+
]);
|
|
79
|
+
|
|
80
|
+
// Single source of truth for `import.meta` accesses that only exist in ES modules
|
|
81
|
+
// and therefore mark a module as ESM (consumed by HarmonyDetectionParserPlugin).
|
|
82
|
+
// `dirname`/`filename` are resolved by NodeStuffPlugin, the rest here. The webpack
|
|
83
|
+
// pragmas `import.meta.webpackHot`/`webpackContext` are intentionally excluded:
|
|
84
|
+
// they are usable in CommonJS modules and must not force ESM.
|
|
85
|
+
const IMPORT_META_NAMES = [
|
|
86
|
+
IMPORT_META,
|
|
87
|
+
IMPORT_META_URL,
|
|
88
|
+
IMPORT_META_WEBPACK,
|
|
89
|
+
IMPORT_META_MAIN,
|
|
90
|
+
IMPORT_META_ENV,
|
|
91
|
+
IMPORT_META_DIRNAME,
|
|
92
|
+
IMPORT_META_FILENAME,
|
|
93
|
+
IMPORT_META_RESOLVE
|
|
94
|
+
];
|
|
95
|
+
|
|
96
|
+
// Ordering contract for import.meta parser hooks across plugins: ESM detection
|
|
97
|
+
// (HarmonyDetectionParserPlugin, non-bailing) must observe every access before
|
|
98
|
+
// any bailing replacement; the merged replacements here must run before
|
|
99
|
+
// DefinePlugin object defines (default stage 0) and its nested destructuring
|
|
100
|
+
// handler (stage 100).
|
|
101
|
+
const IMPORT_META_STAGE_ESM_DETECTION = -1000;
|
|
102
|
+
const IMPORT_META_STAGE_REPLACEMENT = -100;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* import.meta definitions collected from DefinePlugin's merged view.
|
|
106
|
+
* @typedef {object} ImportMetaDefinitions
|
|
107
|
+
* @property {MergedDefinitionNode | undefined} envNode `import.meta.env` node (a map unless custom-defined)
|
|
108
|
+
* @property {Map<string, MergedDefinitionNode>} customProps custom (non-field) property nodes
|
|
109
|
+
*/
|
|
110
|
+
|
|
111
|
+
/** @type {WeakMap<Compilation, ImportMetaDefinitions>} */
|
|
112
|
+
const compilationMetaDefinitionsMap = new WeakMap();
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Returns true if unknown import.meta properties should be preserved.
|
|
116
|
+
* @param {JavascriptParserOptions["importMeta"]} importMeta parser option
|
|
117
|
+
* @returns {boolean} true when unknown properties should be preserved
|
|
118
|
+
*/
|
|
119
|
+
const preserveUnknown = (importMeta) =>
|
|
120
|
+
importMeta === "preserve-unknown" ||
|
|
121
|
+
(Boolean(importMeta) && typeof importMeta === "object");
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Checks whether webpack should handle an import.meta field.
|
|
125
|
+
* @param {JavascriptParserOptions["importMeta"]} importMeta parser option
|
|
126
|
+
* @param {string} field field name
|
|
127
|
+
* @returns {boolean} true when the field should be handled
|
|
128
|
+
*/
|
|
129
|
+
const isImportMetaFieldEnabled = (importMeta, field) => {
|
|
130
|
+
if (importMeta === false) {
|
|
131
|
+
return false;
|
|
132
|
+
}
|
|
133
|
+
return !(
|
|
134
|
+
Boolean(importMeta) &&
|
|
135
|
+
typeof importMeta === "object" &&
|
|
136
|
+
/** @type {Record<string, boolean | undefined>} */ (importMeta)[field] ===
|
|
137
|
+
false
|
|
138
|
+
);
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Checks whether the callee is the `import.meta.resolve` member.
|
|
143
|
+
* @param {Expression | Super} callee call callee
|
|
144
|
+
* @returns {boolean} true when the callee is `import.meta.resolve`
|
|
145
|
+
*/
|
|
146
|
+
const isImportMetaResolveCallee = (callee) =>
|
|
147
|
+
callee.type === "MemberExpression" &&
|
|
148
|
+
callee.object.type === "MetaProperty" &&
|
|
149
|
+
callee.object.meta.name === "import" &&
|
|
150
|
+
callee.object.property.name === "meta" &&
|
|
151
|
+
(callee.computed
|
|
152
|
+
? callee.property.type === "Literal" && callee.property.value === "resolve"
|
|
153
|
+
: callee.property.type === "Identifier" &&
|
|
154
|
+
callee.property.name === "resolve");
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Only a single statically known specifier maps to an asset.
|
|
158
|
+
* @param {CallExpression} call the call expression
|
|
159
|
+
* @param {Parser} parser the parser
|
|
160
|
+
* @returns {string | undefined} the resolved static specifier, if any
|
|
161
|
+
*/
|
|
162
|
+
const getImportMetaResolveRequest = (call, parser) => {
|
|
163
|
+
if (call.arguments.length !== 1) return undefined;
|
|
164
|
+
const [arg] = call.arguments;
|
|
165
|
+
if (arg.type === "SpreadElement") return undefined;
|
|
166
|
+
return parser.evaluateExpression(arg).asString();
|
|
167
|
+
};
|
|
45
168
|
|
|
46
169
|
/**
|
|
47
|
-
*
|
|
170
|
+
* Collects import.meta definitions from DefinePlugin's merged view
|
|
171
|
+
* (object form and dotted keys of every instance).
|
|
48
172
|
* @param {Compilation} compilation the compilation
|
|
49
|
-
* @returns {
|
|
173
|
+
* @returns {ImportMetaDefinitions} collected definitions
|
|
50
174
|
*/
|
|
51
|
-
const
|
|
52
|
-
const cached =
|
|
175
|
+
const collectImportMetaDefinitions = (compilation) => {
|
|
176
|
+
const cached = compilationMetaDefinitionsMap.get(compilation);
|
|
53
177
|
if (cached) {
|
|
54
178
|
return cached;
|
|
55
179
|
}
|
|
56
180
|
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
/** @type {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
181
|
+
const metaNode = DefinePlugin.getMergedDefinitionNode(
|
|
182
|
+
compilation,
|
|
183
|
+
IMPORT_META
|
|
184
|
+
);
|
|
185
|
+
/** @type {MergedDefinitionNode | undefined} */
|
|
186
|
+
let envNode;
|
|
187
|
+
/** @type {Map<string, MergedDefinitionNode>} */
|
|
188
|
+
const customProps = new Map();
|
|
189
|
+
if (metaNode instanceof Map) {
|
|
190
|
+
for (const [prop, node] of metaNode) {
|
|
191
|
+
if (prop === "env") {
|
|
192
|
+
envNode = node;
|
|
193
|
+
} else if (!IMPORT_META_FIELDS.has(prop)) {
|
|
194
|
+
// fields (url, webpack, …) are handled by their own logic
|
|
195
|
+
customProps.set(prop, node);
|
|
196
|
+
}
|
|
69
197
|
}
|
|
70
198
|
}
|
|
71
|
-
const result = {
|
|
72
|
-
|
|
199
|
+
const result = { envNode, customProps };
|
|
200
|
+
compilationMetaDefinitionsMap.set(compilation, result);
|
|
73
201
|
return result;
|
|
74
202
|
};
|
|
75
203
|
|
|
76
204
|
/**
|
|
205
|
+
* Defines the import meta plugin hooks type used by this module.
|
|
77
206
|
* @typedef {object} ImportMetaPluginHooks
|
|
78
207
|
* @property {SyncBailHook<[DestructuringAssignmentProperty], string | void>} propertyInDestructuring
|
|
79
208
|
*/
|
|
80
209
|
|
|
81
|
-
/** @type {WeakMap<Compilation, ImportMetaPluginHooks>} */
|
|
82
|
-
const compilationHooksMap = new WeakMap();
|
|
83
|
-
|
|
84
210
|
class ImportMetaPlugin {
|
|
85
211
|
/**
|
|
86
|
-
*
|
|
87
|
-
* @returns {ImportMetaPluginHooks} the attached hooks
|
|
88
|
-
*/
|
|
89
|
-
static getCompilationHooks(compilation) {
|
|
90
|
-
if (!(compilation instanceof Compilation)) {
|
|
91
|
-
throw new TypeError(
|
|
92
|
-
"The 'compilation' argument must be an instance of Compilation"
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
let hooks = compilationHooksMap.get(compilation);
|
|
96
|
-
if (hooks === undefined) {
|
|
97
|
-
hooks = {
|
|
98
|
-
propertyInDestructuring: new SyncBailHook(["property"])
|
|
99
|
-
};
|
|
100
|
-
compilationHooksMap.set(compilation, hooks);
|
|
101
|
-
}
|
|
102
|
-
return hooks;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
212
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
106
213
|
* @param {Compiler} compiler compiler
|
|
107
214
|
*/
|
|
108
215
|
apply(compiler) {
|
|
@@ -115,59 +222,158 @@ class ImportMetaPlugin {
|
|
|
115
222
|
ModuleInitFragmentDependency,
|
|
116
223
|
new ModuleInitFragmentDependency.Template()
|
|
117
224
|
);
|
|
225
|
+
compilation.dependencyFactories.set(
|
|
226
|
+
ImportMetaResolveDependency,
|
|
227
|
+
normalModuleFactory
|
|
228
|
+
);
|
|
229
|
+
compilation.dependencyTemplates.set(
|
|
230
|
+
ImportMetaResolveDependency,
|
|
231
|
+
new ImportMetaResolveDependency.Template()
|
|
232
|
+
);
|
|
118
233
|
|
|
119
234
|
/**
|
|
235
|
+
* Returns file url.
|
|
120
236
|
* @param {NormalModule} module module
|
|
121
237
|
* @returns {string} file url
|
|
122
238
|
*/
|
|
123
239
|
const getUrl = (module) => pathToFileURL(module.resource).toString();
|
|
124
240
|
/**
|
|
241
|
+
* Processes the provided parser.
|
|
125
242
|
* @param {Parser} parser parser parser
|
|
126
243
|
* @param {JavascriptParserOptions} parserOptions parserOptions
|
|
127
244
|
* @returns {void}
|
|
128
245
|
*/
|
|
129
|
-
const parserHandler = (parser, { importMeta }) => {
|
|
246
|
+
const parserHandler = (parser, { importMeta, url }) => {
|
|
130
247
|
if (importMeta === false) {
|
|
131
248
|
const { importMetaName } = compilation.outputOptions;
|
|
132
249
|
if (importMetaName === "import.meta") return;
|
|
133
250
|
|
|
134
251
|
parser.hooks.expression
|
|
135
|
-
.for(
|
|
252
|
+
.for(IMPORT_META)
|
|
136
253
|
.tap(PLUGIN_NAME, (metaProperty) => {
|
|
137
254
|
const dep = new ConstDependency(
|
|
138
255
|
/** @type {string} */ (importMetaName),
|
|
139
256
|
/** @type {Range} */ (metaProperty.range)
|
|
140
257
|
);
|
|
141
|
-
dep.loc =
|
|
258
|
+
dep.loc = parser.getLocation(metaProperty);
|
|
142
259
|
parser.state.module.addPresentationalDependency(dep);
|
|
143
260
|
return true;
|
|
144
261
|
});
|
|
145
262
|
return;
|
|
146
263
|
}
|
|
147
264
|
|
|
265
|
+
const { envNode, customProps: allCustomProps } =
|
|
266
|
+
collectImportMetaDefinitions(compilation);
|
|
267
|
+
// a non-object definition: DefinePlugin replaces the whole object
|
|
268
|
+
const envIsCustom =
|
|
269
|
+
envNode !== undefined && !(envNode instanceof Map);
|
|
270
|
+
// per-field parser options may disable custom properties too
|
|
271
|
+
/** @type {Map<string, MergedDefinitionNode>} */
|
|
272
|
+
const customProps = new Map();
|
|
273
|
+
for (const [prop, node] of allCustomProps) {
|
|
274
|
+
if (isImportMetaFieldEnabled(importMeta, prop)) {
|
|
275
|
+
customProps.set(prop, node);
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/** @type {Map<string, ValueCacheVersion>} */
|
|
280
|
+
const definitionValueDependencies = new Map();
|
|
281
|
+
/**
|
|
282
|
+
* @param {string} name value cache key
|
|
283
|
+
*/
|
|
284
|
+
const addDefinitionValueDependency = (name) => {
|
|
285
|
+
const version = compilation.valueCacheVersions.get(name);
|
|
286
|
+
// an undefined version would force a rebuild on every build
|
|
287
|
+
if (version !== undefined) {
|
|
288
|
+
definitionValueDependencies.set(name, version);
|
|
289
|
+
}
|
|
290
|
+
};
|
|
291
|
+
addDefinitionValueDependency(DefinePlugin.VALUE_DEP_MAIN);
|
|
292
|
+
if (isImportMetaFieldEnabled(importMeta, "env")) {
|
|
293
|
+
addDefinitionValueDependency(
|
|
294
|
+
DefinePlugin.VALUE_DEP_PREFIX + IMPORT_META_ENV
|
|
295
|
+
);
|
|
296
|
+
if (envNode instanceof Map) {
|
|
297
|
+
for (const envKey of envNode.keys()) {
|
|
298
|
+
addDefinitionValueDependency(
|
|
299
|
+
`${DefinePlugin.VALUE_DEP_PREFIX + IMPORT_META_ENV}.${envKey}`
|
|
300
|
+
);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
for (const prop of customProps.keys()) {
|
|
305
|
+
addDefinitionValueDependency(
|
|
306
|
+
`${DefinePlugin.VALUE_DEP_PREFIX + IMPORT_META}.${prop}`
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Records value dependencies for every inlined definition so
|
|
311
|
+
* cached modules rebuild when a definition value changes.
|
|
312
|
+
* @returns {void}
|
|
313
|
+
*/
|
|
314
|
+
const addDefinitionValueDependencies = () => {
|
|
315
|
+
if (definitionValueDependencies.size === 0) return;
|
|
316
|
+
const buildInfo = /** @type {NormalModuleBuildInfo} */ (
|
|
317
|
+
parser.state.module.buildInfo
|
|
318
|
+
);
|
|
319
|
+
const valueDependencies =
|
|
320
|
+
buildInfo.valueDependencies ||
|
|
321
|
+
(buildInfo.valueDependencies = new Map());
|
|
322
|
+
for (const [name, version] of definitionValueDependencies) {
|
|
323
|
+
valueDependencies.set(name, version);
|
|
324
|
+
}
|
|
325
|
+
};
|
|
326
|
+
/**
|
|
327
|
+
* Renders a merged definition node at a use site.
|
|
328
|
+
* @param {MergedDefinitionNode | undefined} node node
|
|
329
|
+
* @param {string} key definition key
|
|
330
|
+
* @param {Set<string>=} objKeys used keys
|
|
331
|
+
* @returns {string} code
|
|
332
|
+
*/
|
|
333
|
+
const renderDefinition = (node, key, objKeys) =>
|
|
334
|
+
node === undefined
|
|
335
|
+
? "{}"
|
|
336
|
+
: DefinePlugin.stringifyMergedDefinition(
|
|
337
|
+
compilation,
|
|
338
|
+
parser,
|
|
339
|
+
node,
|
|
340
|
+
key,
|
|
341
|
+
objKeys
|
|
342
|
+
);
|
|
343
|
+
|
|
148
344
|
// import.meta direct
|
|
149
|
-
const webpackVersion = Number.parseInt(
|
|
150
|
-
require("../../package.json").version,
|
|
151
|
-
10
|
|
152
|
-
);
|
|
153
345
|
const importMetaUrl = () =>
|
|
154
346
|
JSON.stringify(getUrl(parser.state.module));
|
|
155
|
-
const importMetaWebpackVersion = () =>
|
|
347
|
+
const importMetaWebpackVersion = () =>
|
|
348
|
+
JSON.stringify(WEBPACK_VERSION);
|
|
156
349
|
/**
|
|
350
|
+
* Import meta unknown property.
|
|
157
351
|
* @param {Members} members members
|
|
158
352
|
* @returns {string} error message
|
|
159
353
|
*/
|
|
160
354
|
const importMetaUnknownProperty = (members) => {
|
|
161
|
-
if (
|
|
355
|
+
if (
|
|
356
|
+
preserveUnknown(importMeta) ||
|
|
357
|
+
(IMPORT_META_FIELDS.has(members[0]) &&
|
|
358
|
+
!isImportMetaFieldEnabled(importMeta, members[0]))
|
|
359
|
+
) {
|
|
162
360
|
return `import.meta${propertyAccess(members, 0)}`;
|
|
163
361
|
}
|
|
164
362
|
return `${Template.toNormalComment(
|
|
165
363
|
`unsupported import.meta.${members.join(".")}`
|
|
166
364
|
)} undefined${propertyAccess(members, 1)}`;
|
|
167
365
|
};
|
|
366
|
+
/**
|
|
367
|
+
* @param {string} field field name
|
|
368
|
+
* @returns {string} generated property
|
|
369
|
+
*/
|
|
370
|
+
const importMetaRuntimeProperty = (field) =>
|
|
371
|
+
`[${JSON.stringify(field)}]: ${importMetaUnknownProperty([
|
|
372
|
+
field
|
|
373
|
+
])},`;
|
|
168
374
|
|
|
169
375
|
parser.hooks.typeof
|
|
170
|
-
.for(
|
|
376
|
+
.for(IMPORT_META)
|
|
171
377
|
.tap(
|
|
172
378
|
PLUGIN_NAME,
|
|
173
379
|
toConstantDependency(parser, JSON.stringify("object"))
|
|
@@ -178,8 +384,17 @@ class ImportMetaPlugin {
|
|
|
178
384
|
if (expr.type === "MetaProperty") return true;
|
|
179
385
|
}
|
|
180
386
|
);
|
|
387
|
+
// `import.meta` is always replaced by the synthesized object, so it
|
|
388
|
+
// must never become a variable alias: the alias declaration would keep
|
|
389
|
+
// the raw MetaProperty. Staged before DefinePlugin's canRename taps.
|
|
390
|
+
parser.hooks.canRename
|
|
391
|
+
.for(IMPORT_META)
|
|
392
|
+
.tap(
|
|
393
|
+
{ name: PLUGIN_NAME, stage: IMPORT_META_STAGE_REPLACEMENT },
|
|
394
|
+
() => false
|
|
395
|
+
);
|
|
181
396
|
parser.hooks.expression
|
|
182
|
-
.for(
|
|
397
|
+
.for(IMPORT_META)
|
|
183
398
|
.tap(PLUGIN_NAME, (metaProperty) => {
|
|
184
399
|
/** @type {RawRuntimeRequirements} */
|
|
185
400
|
const runtimeRequirements = [];
|
|
@@ -189,43 +404,75 @@ class ImportMetaPlugin {
|
|
|
189
404
|
parser.destructuringAssignmentPropertiesFor(metaProperty);
|
|
190
405
|
if (!referencedPropertiesInDestructuring) {
|
|
191
406
|
const varName = "__webpack_import_meta__";
|
|
192
|
-
const
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
`
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
407
|
+
const knownProps = [];
|
|
408
|
+
if (isImportMetaFieldEnabled(importMeta, "url")) {
|
|
409
|
+
knownProps.push(`url: ${importMetaUrl()}`);
|
|
410
|
+
}
|
|
411
|
+
if (isImportMetaFieldEnabled(importMeta, "webpack")) {
|
|
412
|
+
knownProps.push(`webpack: ${importMetaWebpackVersion()}`);
|
|
413
|
+
}
|
|
414
|
+
if (isImportMetaFieldEnabled(importMeta, "main")) {
|
|
415
|
+
knownProps.push(
|
|
416
|
+
`main: ${RuntimeGlobals.moduleCache}[${RuntimeGlobals.entryModuleId}] === ${moduleArgument}`
|
|
417
|
+
);
|
|
418
|
+
}
|
|
419
|
+
if (isImportMetaFieldEnabled(importMeta, "env")) {
|
|
420
|
+
addDefinitionValueDependencies();
|
|
421
|
+
knownProps.push(
|
|
422
|
+
`env: ${renderDefinition(envNode, IMPORT_META_ENV)}`
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
for (const [prop, node] of customProps) {
|
|
426
|
+
addDefinitionValueDependencies();
|
|
427
|
+
knownProps.push(
|
|
428
|
+
`${DefinePlugin.toPropertyKey(prop)}: ${renderDefinition(
|
|
429
|
+
node,
|
|
430
|
+
`${IMPORT_META}.${prop}`
|
|
431
|
+
)}`
|
|
432
|
+
);
|
|
433
|
+
}
|
|
434
|
+
const initCode = preserveUnknown(importMeta)
|
|
435
|
+
? `var ${varName} = Object.assign(import.meta, {${knownProps.join(
|
|
436
|
+
", "
|
|
437
|
+
)}});\n`
|
|
438
|
+
: `var ${varName} = {${knownProps.join(", ")}};\n`;
|
|
439
|
+
/** @type {RawRuntimeRequirements} */
|
|
440
|
+
const initRuntimeRequirements = [
|
|
441
|
+
RuntimeGlobals.moduleCache,
|
|
442
|
+
RuntimeGlobals.entryModuleId,
|
|
443
|
+
RuntimeGlobals.module
|
|
444
|
+
];
|
|
445
|
+
const initCodeRequirements =
|
|
446
|
+
DefinePlugin.getRuntimeRequirements(initCode);
|
|
447
|
+
if (initCodeRequirements) {
|
|
448
|
+
initRuntimeRequirements.push(...initCodeRequirements);
|
|
449
|
+
}
|
|
203
450
|
const initDep = new ModuleInitFragmentDependency(
|
|
204
451
|
initCode,
|
|
205
|
-
|
|
206
|
-
RuntimeGlobals.moduleCache,
|
|
207
|
-
RuntimeGlobals.entryModuleId,
|
|
208
|
-
RuntimeGlobals.module
|
|
209
|
-
],
|
|
452
|
+
initRuntimeRequirements,
|
|
210
453
|
varName
|
|
211
454
|
);
|
|
212
|
-
initDep.loc =
|
|
213
|
-
metaProperty.loc
|
|
214
|
-
);
|
|
455
|
+
initDep.loc = parser.getLocation(metaProperty);
|
|
215
456
|
parser.state.module.addPresentationalDependency(initDep);
|
|
216
457
|
const dep = new ConstDependency(
|
|
217
458
|
varName,
|
|
218
459
|
/** @type {Range} */ (metaProperty.range),
|
|
219
460
|
runtimeRequirements
|
|
220
461
|
);
|
|
221
|
-
dep.loc =
|
|
462
|
+
dep.loc = parser.getLocation(metaProperty);
|
|
222
463
|
parser.state.module.addPresentationalDependency(dep);
|
|
223
464
|
return true;
|
|
224
465
|
}
|
|
225
466
|
|
|
226
467
|
let str = "";
|
|
227
468
|
for (const prop of referencedPropertiesInDestructuring) {
|
|
228
|
-
const
|
|
469
|
+
const fieldEnabled = isImportMetaFieldEnabled(
|
|
470
|
+
importMeta,
|
|
471
|
+
prop.id
|
|
472
|
+
);
|
|
473
|
+
const value = fieldEnabled
|
|
474
|
+
? hooks.propertyInDestructuring.call(prop)
|
|
475
|
+
: undefined;
|
|
229
476
|
|
|
230
477
|
if (value) {
|
|
231
478
|
str += value;
|
|
@@ -234,175 +481,283 @@ class ImportMetaPlugin {
|
|
|
234
481
|
|
|
235
482
|
switch (prop.id) {
|
|
236
483
|
case "url":
|
|
237
|
-
str +=
|
|
484
|
+
str += fieldEnabled
|
|
485
|
+
? `url: ${importMetaUrl()},`
|
|
486
|
+
: importMetaRuntimeProperty(prop.id);
|
|
238
487
|
break;
|
|
239
488
|
case "webpack":
|
|
240
|
-
str +=
|
|
489
|
+
str += fieldEnabled
|
|
490
|
+
? `webpack: ${importMetaWebpackVersion()},`
|
|
491
|
+
: importMetaRuntimeProperty(prop.id);
|
|
241
492
|
break;
|
|
242
493
|
case "main":
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
494
|
+
if (fieldEnabled) {
|
|
495
|
+
str += `main: ${RuntimeGlobals.moduleCache}[${RuntimeGlobals.entryModuleId}] === ${moduleArgument},`;
|
|
496
|
+
runtimeRequirements.push(
|
|
497
|
+
RuntimeGlobals.moduleCache,
|
|
498
|
+
RuntimeGlobals.entryModuleId,
|
|
499
|
+
RuntimeGlobals.module
|
|
500
|
+
);
|
|
501
|
+
} else {
|
|
502
|
+
str += importMetaRuntimeProperty(prop.id);
|
|
503
|
+
}
|
|
249
504
|
break;
|
|
250
505
|
case "env":
|
|
251
|
-
|
|
506
|
+
if (fieldEnabled) {
|
|
507
|
+
addDefinitionValueDependencies();
|
|
508
|
+
str += `env: ${renderDefinition(envNode, IMPORT_META_ENV)},`;
|
|
509
|
+
} else {
|
|
510
|
+
str += importMetaRuntimeProperty(prop.id);
|
|
511
|
+
}
|
|
252
512
|
break;
|
|
253
|
-
default:
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
513
|
+
default: {
|
|
514
|
+
const node = customProps.get(prop.id);
|
|
515
|
+
if (node !== undefined) {
|
|
516
|
+
addDefinitionValueDependencies();
|
|
517
|
+
str += `${DefinePlugin.toPropertyKey(prop.id)}: ${renderDefinition(
|
|
518
|
+
node,
|
|
519
|
+
`${IMPORT_META}.${prop.id}`
|
|
520
|
+
)},`;
|
|
521
|
+
} else {
|
|
522
|
+
str += importMetaRuntimeProperty(prop.id);
|
|
523
|
+
}
|
|
257
524
|
break;
|
|
525
|
+
}
|
|
258
526
|
}
|
|
259
527
|
}
|
|
528
|
+
const strCode = `({${str}})`;
|
|
529
|
+
const codeRequirements =
|
|
530
|
+
DefinePlugin.getRuntimeRequirements(strCode);
|
|
531
|
+
if (codeRequirements) {
|
|
532
|
+
runtimeRequirements.push(...codeRequirements);
|
|
533
|
+
}
|
|
260
534
|
const dep = new ConstDependency(
|
|
261
|
-
|
|
535
|
+
strCode,
|
|
262
536
|
/** @type {Range} */ (metaProperty.range),
|
|
263
537
|
runtimeRequirements
|
|
264
538
|
);
|
|
265
|
-
dep.loc =
|
|
539
|
+
dep.loc = parser.getLocation(metaProperty);
|
|
266
540
|
parser.state.module.addPresentationalDependency(dep);
|
|
267
541
|
return true;
|
|
268
542
|
});
|
|
269
543
|
parser.hooks.evaluateTypeof
|
|
270
|
-
.for(
|
|
544
|
+
.for(IMPORT_META)
|
|
271
545
|
.tap(PLUGIN_NAME, evaluateToString("object"));
|
|
272
|
-
parser.hooks.evaluateIdentifier.for(
|
|
546
|
+
parser.hooks.evaluateIdentifier.for(IMPORT_META).tap(
|
|
273
547
|
PLUGIN_NAME,
|
|
274
|
-
evaluateToIdentifier(
|
|
548
|
+
evaluateToIdentifier(IMPORT_META, IMPORT_META, () => [], true)
|
|
275
549
|
);
|
|
276
550
|
|
|
551
|
+
// custom import.meta properties defined only via nested dotted keys,
|
|
552
|
+
// e.g. reading `import.meta.build` with `"import.meta.build.time"` defined
|
|
553
|
+
if (customProps.size > 0) {
|
|
554
|
+
parser.hooks.expressionMemberChain
|
|
555
|
+
.for(IMPORT_META)
|
|
556
|
+
.tap(PLUGIN_NAME, (expr, members) => {
|
|
557
|
+
const node = customProps.get(members[0]);
|
|
558
|
+
if (node === undefined) return;
|
|
559
|
+
addDefinitionValueDependencies();
|
|
560
|
+
const strCode = `(${renderDefinition(
|
|
561
|
+
node,
|
|
562
|
+
`${IMPORT_META}.${members[0]}`
|
|
563
|
+
)})${propertyAccess(members, 1)}`;
|
|
564
|
+
return toConstantDependency(
|
|
565
|
+
parser,
|
|
566
|
+
strCode,
|
|
567
|
+
DefinePlugin.getRuntimeRequirements(strCode)
|
|
568
|
+
)(expr);
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// import.meta.resolve — resolve a static specifier to the emitted
|
|
573
|
+
// asset URL string (the string form of `new URL(x, import.meta.url)`).
|
|
574
|
+
if (isImportMetaFieldEnabled(importMeta, "resolve")) {
|
|
575
|
+
const relative = url === "relative";
|
|
576
|
+
parser.hooks.call
|
|
577
|
+
.for(IMPORT_META_RESOLVE)
|
|
578
|
+
.tap(PLUGIN_NAME, (expr) => {
|
|
579
|
+
const call = /** @type {CallExpression} */ (expr);
|
|
580
|
+
// Non-static forms are left untouched for runtime evaluation.
|
|
581
|
+
const request = getImportMetaResolveRequest(call, parser);
|
|
582
|
+
if (request === undefined) return;
|
|
583
|
+
const range = /** @type {Range} */ (call.range);
|
|
584
|
+
const dep = new ImportMetaResolveDependency(
|
|
585
|
+
request,
|
|
586
|
+
range,
|
|
587
|
+
range,
|
|
588
|
+
relative
|
|
589
|
+
);
|
|
590
|
+
dep.loc = parser.getLocation(call);
|
|
591
|
+
parser.state.current.addDependency(dep);
|
|
592
|
+
getInnerGraphUtils(parser.state.compilation).onUsage(
|
|
593
|
+
parser.state,
|
|
594
|
+
(e) => (dep.usedByExports = e)
|
|
595
|
+
);
|
|
596
|
+
return true;
|
|
597
|
+
});
|
|
598
|
+
// Computing a URL string is side-effect free, so an unused result
|
|
599
|
+
// can be tree-shaken (matching `new URL(..., import.meta.url)`).
|
|
600
|
+
parser.hooks.isPure
|
|
601
|
+
.for("CallExpression")
|
|
602
|
+
.tap(PLUGIN_NAME, (expr) => {
|
|
603
|
+
const call = /** @type {CallExpression} */ (expr);
|
|
604
|
+
if (!isImportMetaResolveCallee(call.callee)) return;
|
|
605
|
+
if (getImportMetaResolveRequest(call, parser) !== undefined) {
|
|
606
|
+
return true;
|
|
607
|
+
}
|
|
608
|
+
});
|
|
609
|
+
}
|
|
610
|
+
|
|
277
611
|
// import.meta.url
|
|
278
|
-
|
|
279
|
-
.
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
parser.hooks.expression
|
|
285
|
-
.for("import.meta.url")
|
|
286
|
-
.tap(PLUGIN_NAME, (expr) => {
|
|
287
|
-
const dep = new ConstDependency(
|
|
288
|
-
importMetaUrl(),
|
|
289
|
-
/** @type {Range} */ (expr.range)
|
|
612
|
+
if (isImportMetaFieldEnabled(importMeta, "url")) {
|
|
613
|
+
parser.hooks.typeof
|
|
614
|
+
.for(IMPORT_META_URL)
|
|
615
|
+
.tap(
|
|
616
|
+
PLUGIN_NAME,
|
|
617
|
+
toConstantDependency(parser, JSON.stringify("string"))
|
|
290
618
|
);
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
619
|
+
parser.hooks.expression
|
|
620
|
+
.for(IMPORT_META_URL)
|
|
621
|
+
.tap(PLUGIN_NAME, (expr) => {
|
|
622
|
+
const dep = new ConstDependency(
|
|
623
|
+
importMetaUrl(),
|
|
624
|
+
/** @type {Range} */ (expr.range)
|
|
625
|
+
);
|
|
626
|
+
dep.loc = parser.getLocation(expr);
|
|
627
|
+
parser.state.module.addPresentationalDependency(dep);
|
|
628
|
+
return true;
|
|
629
|
+
});
|
|
630
|
+
parser.hooks.evaluateTypeof
|
|
631
|
+
.for(IMPORT_META_URL)
|
|
632
|
+
.tap(PLUGIN_NAME, evaluateToString("string"));
|
|
633
|
+
parser.hooks.evaluateIdentifier
|
|
634
|
+
.for(IMPORT_META_URL)
|
|
635
|
+
.tap(PLUGIN_NAME, (expr) =>
|
|
636
|
+
new BasicEvaluatedExpression()
|
|
637
|
+
.setString(getUrl(parser.state.module))
|
|
638
|
+
.setRange(/** @type {Range} */ (expr.range))
|
|
639
|
+
);
|
|
640
|
+
}
|
|
305
641
|
|
|
306
642
|
// import.meta.webpack
|
|
307
|
-
|
|
308
|
-
.
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
.
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
.
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
.
|
|
324
|
-
|
|
643
|
+
if (isImportMetaFieldEnabled(importMeta, "webpack")) {
|
|
644
|
+
parser.hooks.expression
|
|
645
|
+
.for(IMPORT_META_WEBPACK)
|
|
646
|
+
.tap(
|
|
647
|
+
PLUGIN_NAME,
|
|
648
|
+
toConstantDependency(parser, importMetaWebpackVersion())
|
|
649
|
+
);
|
|
650
|
+
parser.hooks.typeof
|
|
651
|
+
.for(IMPORT_META_WEBPACK)
|
|
652
|
+
.tap(
|
|
653
|
+
PLUGIN_NAME,
|
|
654
|
+
toConstantDependency(parser, JSON.stringify("number"))
|
|
655
|
+
);
|
|
656
|
+
parser.hooks.evaluateTypeof
|
|
657
|
+
.for(IMPORT_META_WEBPACK)
|
|
658
|
+
.tap(PLUGIN_NAME, evaluateToString("number"));
|
|
659
|
+
parser.hooks.evaluateIdentifier
|
|
660
|
+
.for(IMPORT_META_WEBPACK)
|
|
661
|
+
.tap(PLUGIN_NAME, evaluateToNumber(WEBPACK_VERSION));
|
|
662
|
+
}
|
|
325
663
|
|
|
326
|
-
|
|
327
|
-
.
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
.
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
.
|
|
348
|
-
|
|
664
|
+
if (isImportMetaFieldEnabled(importMeta, "main")) {
|
|
665
|
+
parser.hooks.expression
|
|
666
|
+
.for(IMPORT_META_MAIN)
|
|
667
|
+
.tap(
|
|
668
|
+
PLUGIN_NAME,
|
|
669
|
+
toConstantDependency(
|
|
670
|
+
parser,
|
|
671
|
+
`${RuntimeGlobals.moduleCache}[${RuntimeGlobals.entryModuleId}] === ${RuntimeGlobals.module}`,
|
|
672
|
+
[
|
|
673
|
+
RuntimeGlobals.moduleCache,
|
|
674
|
+
RuntimeGlobals.entryModuleId,
|
|
675
|
+
RuntimeGlobals.module
|
|
676
|
+
]
|
|
677
|
+
)
|
|
678
|
+
);
|
|
679
|
+
parser.hooks.typeof
|
|
680
|
+
.for(IMPORT_META_MAIN)
|
|
681
|
+
.tap(
|
|
682
|
+
PLUGIN_NAME,
|
|
683
|
+
toConstantDependency(parser, JSON.stringify("boolean"))
|
|
684
|
+
);
|
|
685
|
+
parser.hooks.evaluateTypeof
|
|
686
|
+
.for(IMPORT_META_MAIN)
|
|
687
|
+
.tap(PLUGIN_NAME, evaluateToString("boolean"));
|
|
688
|
+
}
|
|
349
689
|
|
|
350
690
|
// import.meta.env
|
|
351
|
-
|
|
352
|
-
.
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
.
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
"undefined"
|
|
366
|
-
|
|
367
|
-
);
|
|
368
|
-
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
|
369
|
-
parser.state.module.addPresentationalDependency(dep);
|
|
370
|
-
return true;
|
|
691
|
+
if (isImportMetaFieldEnabled(importMeta, "env")) {
|
|
692
|
+
parser.hooks.typeof
|
|
693
|
+
.for(IMPORT_META_ENV)
|
|
694
|
+
.tap(
|
|
695
|
+
PLUGIN_NAME,
|
|
696
|
+
toConstantDependency(parser, JSON.stringify("object"))
|
|
697
|
+
);
|
|
698
|
+
parser.hooks.expressionMemberChain
|
|
699
|
+
.for(IMPORT_META)
|
|
700
|
+
.tap(PLUGIN_NAME, (expr, members) => {
|
|
701
|
+
if (members[0] === "env" && members[1]) {
|
|
702
|
+
// members of a custom definition resolve on it at runtime
|
|
703
|
+
if (envIsCustom) return;
|
|
704
|
+
if (!(envNode instanceof Map) || !envNode.has(members[1])) {
|
|
705
|
+
return toConstantDependency(parser, "undefined")(expr);
|
|
706
|
+
}
|
|
371
707
|
}
|
|
708
|
+
});
|
|
709
|
+
parser.hooks.expression.for(IMPORT_META_ENV).tap(
|
|
710
|
+
// before DefinePlugin object defines: merge every definition source
|
|
711
|
+
{ name: PLUGIN_NAME, stage: IMPORT_META_STAGE_REPLACEMENT },
|
|
712
|
+
(expr) => {
|
|
713
|
+
// a custom definition replaces the whole object via DefinePlugin
|
|
714
|
+
if (envIsCustom) return;
|
|
715
|
+
addDefinitionValueDependencies();
|
|
716
|
+
const destructured =
|
|
717
|
+
parser.destructuringAssignmentPropertiesFor(expr);
|
|
718
|
+
const objKeys =
|
|
719
|
+
destructured &&
|
|
720
|
+
new Set([...destructured].map((prop) => prop.id));
|
|
721
|
+
const code = renderDefinition(
|
|
722
|
+
envNode,
|
|
723
|
+
IMPORT_META_ENV,
|
|
724
|
+
objKeys
|
|
725
|
+
);
|
|
726
|
+
const strCode = parser.isAsiPosition(
|
|
727
|
+
/** @type {Range} */ (expr.range)[0]
|
|
728
|
+
)
|
|
729
|
+
? `;(${code})`
|
|
730
|
+
: `(${code})`;
|
|
731
|
+
return toConstantDependency(
|
|
732
|
+
parser,
|
|
733
|
+
strCode,
|
|
734
|
+
DefinePlugin.getRuntimeRequirements(strCode)
|
|
735
|
+
)(expr);
|
|
372
736
|
}
|
|
373
|
-
});
|
|
374
|
-
parser.hooks.expression
|
|
375
|
-
.for("import.meta.env")
|
|
376
|
-
.tap(PLUGIN_NAME, (expr) => {
|
|
377
|
-
const { stringify } =
|
|
378
|
-
collectImportMetaEnvDefinitions(compilation);
|
|
379
|
-
|
|
380
|
-
const dep = new ConstDependency(
|
|
381
|
-
stringify,
|
|
382
|
-
/** @type {Range} */ (expr.range)
|
|
383
|
-
);
|
|
384
|
-
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
|
385
|
-
parser.state.module.addPresentationalDependency(dep);
|
|
386
|
-
return true;
|
|
387
|
-
});
|
|
388
|
-
parser.hooks.evaluateTypeof
|
|
389
|
-
.for("import.meta.env")
|
|
390
|
-
.tap(PLUGIN_NAME, evaluateToString("object"));
|
|
391
|
-
parser.hooks.evaluateIdentifier
|
|
392
|
-
.for("import.meta.env")
|
|
393
|
-
.tap(PLUGIN_NAME, (expr) =>
|
|
394
|
-
new BasicEvaluatedExpression()
|
|
395
|
-
.setTruthy()
|
|
396
|
-
.setSideEffects(false)
|
|
397
|
-
.setRange(/** @type {Range} */ (expr.range))
|
|
398
737
|
);
|
|
738
|
+
parser.hooks.evaluateTypeof
|
|
739
|
+
.for(IMPORT_META_ENV)
|
|
740
|
+
.tap(PLUGIN_NAME, evaluateToString("object"));
|
|
741
|
+
parser.hooks.evaluateIdentifier
|
|
742
|
+
.for(IMPORT_META_ENV)
|
|
743
|
+
.tap(PLUGIN_NAME, (expr) =>
|
|
744
|
+
new BasicEvaluatedExpression()
|
|
745
|
+
.setTruthy()
|
|
746
|
+
.setSideEffects(false)
|
|
747
|
+
.setRange(/** @type {Range} */ (expr.range))
|
|
748
|
+
);
|
|
749
|
+
}
|
|
399
750
|
|
|
400
751
|
// Unknown properties
|
|
401
752
|
parser.hooks.unhandledExpressionMemberChain
|
|
402
|
-
.for(
|
|
753
|
+
.for(IMPORT_META)
|
|
403
754
|
.tap(PLUGIN_NAME, (expr, members) => {
|
|
404
755
|
// unknown import.meta properties should be determined at runtime
|
|
405
|
-
if (
|
|
756
|
+
if (
|
|
757
|
+
preserveUnknown(importMeta) ||
|
|
758
|
+
(IMPORT_META_FIELDS.has(members[0]) &&
|
|
759
|
+
!isImportMetaFieldEnabled(importMeta, members[0]))
|
|
760
|
+
) {
|
|
406
761
|
return true;
|
|
407
762
|
}
|
|
408
763
|
|
|
@@ -420,7 +775,7 @@ class ImportMetaPlugin {
|
|
|
420
775
|
importMetaUnknownProperty(members),
|
|
421
776
|
/** @type {Range} */ (expr.range)
|
|
422
777
|
);
|
|
423
|
-
dep.loc =
|
|
778
|
+
dep.loc = parser.getLocation(expr);
|
|
424
779
|
parser.state.module.addPresentationalDependency(dep);
|
|
425
780
|
return true;
|
|
426
781
|
});
|
|
@@ -436,6 +791,24 @@ class ImportMetaPlugin {
|
|
|
436
791
|
expr.property.type ===
|
|
437
792
|
(expr.computed ? "Literal" : "Identifier")
|
|
438
793
|
) {
|
|
794
|
+
const prop = expr.computed
|
|
795
|
+
? /** @type {import("estree").Literal} */ (expr.property)
|
|
796
|
+
.value
|
|
797
|
+
: /** @type {Identifier} */ (expr.property).name;
|
|
798
|
+
if (
|
|
799
|
+
!isImportMetaFieldEnabled(importMeta, String(prop)) ||
|
|
800
|
+
(preserveUnknown(importMeta) &&
|
|
801
|
+
!IMPORT_META_FIELDS.has(String(prop)))
|
|
802
|
+
) {
|
|
803
|
+
return;
|
|
804
|
+
}
|
|
805
|
+
if (IMPORT_META_FIELDS.has(String(prop))) {
|
|
806
|
+
return;
|
|
807
|
+
}
|
|
808
|
+
// custom-defined properties evaluate via DefinePlugin/runtime
|
|
809
|
+
if (customProps.has(String(prop))) {
|
|
810
|
+
return;
|
|
811
|
+
}
|
|
439
812
|
return new BasicEvaluatedExpression()
|
|
440
813
|
.setUndefined()
|
|
441
814
|
.setRange(/** @type {Range} */ (expr.range));
|
|
@@ -454,4 +827,17 @@ class ImportMetaPlugin {
|
|
|
454
827
|
}
|
|
455
828
|
}
|
|
456
829
|
|
|
830
|
+
ImportMetaPlugin.getCompilationHooks = createHooksRegistry(
|
|
831
|
+
() =>
|
|
832
|
+
/** @type {ImportMetaPluginHooks} */ ({
|
|
833
|
+
propertyInDestructuring: new SyncBailHook(["property"])
|
|
834
|
+
})
|
|
835
|
+
);
|
|
836
|
+
|
|
457
837
|
module.exports = ImportMetaPlugin;
|
|
838
|
+
module.exports.IMPORT_META_DIRNAME = IMPORT_META_DIRNAME;
|
|
839
|
+
module.exports.IMPORT_META_FILENAME = IMPORT_META_FILENAME;
|
|
840
|
+
module.exports.IMPORT_META_NAMES = IMPORT_META_NAMES;
|
|
841
|
+
module.exports.IMPORT_META_STAGE_ESM_DETECTION =
|
|
842
|
+
IMPORT_META_STAGE_ESM_DETECTION;
|
|
843
|
+
module.exports.isImportMetaFieldEnabled = isImportMetaFieldEnabled;
|