@depup/webpack 5.109.2-depup.0 → 5.110.3-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 +5 -5
- package/changes.json +7 -7
- package/lib/APIPlugin.js +123 -17
- package/lib/AsyncDependenciesBlock.js +10 -7
- package/lib/AutomaticPrefetchPlugin.js +1 -1
- package/lib/BannerPlugin.js +10 -6
- package/lib/CacheFacade.js +6 -6
- package/lib/Chunk.js +14 -11
- package/lib/ChunkGraph.js +46 -35
- package/lib/ChunkGroup.js +7 -7
- package/lib/ChunkTemplate.js +35 -44
- package/lib/CircularModulesPlugin.js +205 -28
- package/lib/CleanPlugin.js +4 -7
- package/lib/CodeGenerationResults.js +11 -8
- package/lib/CompatibilityPlugin.js +7 -7
- package/lib/Compilation.js +688 -409
- package/lib/Compiler.js +53 -38
- package/lib/ConcatenationScope.js +107 -8
- package/lib/ConditionalInitFragment.js +3 -3
- package/lib/ConstPlugin.js +13 -11
- package/lib/ContextExclusionPlugin.js +1 -1
- package/lib/ContextModule.js +146 -54
- package/lib/ContextModuleFactory.js +46 -14
- package/lib/ContextReplacementPlugin.js +12 -14
- package/lib/DefinePlugin.js +121 -37
- package/lib/DependenciesBlock.js +9 -6
- package/lib/Dependency.js +36 -16
- package/lib/DependencyTemplate.js +11 -12
- package/lib/DependencyTemplates.js +3 -3
- package/lib/DotenvPlugin.js +91 -26
- package/lib/DynamicEntryPlugin.js +8 -4
- package/lib/EntryOptionPlugin.js +8 -4
- package/lib/EntryPlugin.js +2 -2
- package/lib/Entrypoint.js +6 -2
- package/lib/EnvironmentPlugin.js +2 -2
- package/lib/EvalDevToolModulePlugin.js +8 -4
- package/lib/EvalSourceMapDevToolPlugin.js +15 -8
- package/lib/ExportsInfo.js +111 -14
- package/lib/ExportsInfoApiPlugin.js +2 -4
- package/lib/ExternalModule.js +232 -77
- package/lib/ExternalModuleFactoryPlugin.js +97 -38
- package/lib/ExternalsPlugin.js +10 -6
- package/lib/FileSystemInfo.js +44 -70
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -3
- package/lib/FlagDependencyExportsPlugin.js +76 -19
- package/lib/FlagDependencyUsagePlugin.js +40 -49
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +36 -15
- package/lib/HotModuleReplacementPlugin.js +16 -44
- package/lib/IgnorePlugin.js +8 -4
- package/lib/IgnoreWarningsPlugin.js +2 -2
- package/lib/InitFragment.js +8 -4
- package/lib/JavascriptMetaInfoPlugin.js +35 -4
- package/lib/LazyBarrel.js +3 -4
- package/lib/LibraryTemplatePlugin.js +10 -6
- package/lib/LoaderOptionsPlugin.js +7 -3
- package/lib/LoaderTargetPlugin.js +1 -1
- package/lib/MainTemplate.js +49 -42
- package/lib/ManifestPlugin.js +12 -11
- package/lib/Module.js +62 -33
- package/lib/ModuleFactory.js +3 -3
- package/lib/ModuleFilenameHelpers.js +9 -4
- package/lib/ModuleGraph.js +195 -21
- package/lib/ModuleGraphConnection.js +6 -13
- package/lib/ModuleInfoHeaderPlugin.js +8 -10
- package/lib/ModuleTemplate.js +62 -63
- package/lib/MultiCompiler.js +130 -64
- package/lib/MultiStats.js +40 -9
- package/lib/MultiWatching.js +3 -3
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +29 -19
- package/lib/NormalModule.js +152 -103
- package/lib/NormalModuleFactory.js +555 -110
- package/lib/NormalModuleReplacementPlugin.js +5 -8
- package/lib/NullFactory.js +6 -2
- package/lib/OptionsApply.js +7 -3
- package/lib/Parser.js +7 -3
- package/lib/PlatformPlugin.js +2 -2
- package/lib/PrefetchPlugin.js +1 -1
- package/lib/ProgressPlugin.js +16 -13
- package/lib/ProvidePlugin.js +3 -5
- package/lib/RawModule.js +25 -17
- package/lib/RecordIdsPlugin.js +3 -3
- package/lib/RequestShortener.js +1 -1
- package/lib/ResolverFactory.js +2 -2
- package/lib/RuntimeGlobals.js +22 -10
- package/lib/RuntimeModule.js +29 -19
- package/lib/RuntimePlugin.js +335 -169
- package/lib/RuntimeTemplate.js +2761 -316
- package/lib/SelfModuleFactory.js +7 -3
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +6 -2
- package/lib/SourceMapDevToolPlugin.js +30 -20
- package/lib/Stats.js +3 -4
- package/lib/Template.js +32 -22
- package/lib/TemplatedPathPlugin.js +96 -14
- package/lib/UseStrictPlugin.js +4 -6
- package/lib/WarnCaseSensitiveModulesPlugin.js +4 -4
- package/lib/WarnDeprecatedOptionPlugin.js +1 -1
- package/lib/WarnNoModeSetPlugin.js +1 -1
- package/lib/WatchIgnorePlugin.js +8 -6
- package/lib/Watching.js +8 -8
- package/lib/WebpackIsIncludedPlugin.js +2 -4
- package/lib/WebpackOptionsApply.js +308 -18
- package/lib/WebpackOptionsDefaulter.js +6 -2
- package/lib/asset/AssetBytesGenerator.js +12 -10
- package/lib/asset/AssetBytesParser.js +2 -4
- package/lib/asset/AssetGenerator.js +188 -95
- package/lib/asset/AssetModule.js +7 -3
- package/lib/asset/AssetModulesPlugin.js +110 -38
- package/lib/asset/AssetParser.js +9 -7
- package/lib/asset/AssetSourceGenerator.js +60 -13
- package/lib/asset/AssetSourceParser.js +2 -4
- package/lib/asset/RawDataUrlModule.js +24 -16
- package/lib/asset/WebManifestGenerator.js +8 -10
- package/lib/asset/WebManifestParser.js +24 -10
- package/lib/async-modules/AsyncModuleHelpers.js +12 -6
- package/lib/async-modules/AwaitDependenciesInitFragment.js +2 -2
- package/lib/async-modules/InferAsyncModulesPlugin.js +2 -2
- package/lib/async-modules/isGeneratorLowered.js +4 -4
- package/lib/buildChunkGraph.js +36 -27
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +1 -1
- package/lib/cache/AddManagedPathsPlugin.js +1 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +18 -10
- package/lib/cache/MemoryWithGcCachePlugin.js +34 -22
- package/lib/cache/PackFileCacheStrategy.js +30 -23
- package/lib/cache/ResolverCachePlugin.js +38 -18
- package/lib/cache/getLazyHashedEtag.js +1 -2
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/cli.js +1 -3
- package/lib/config/browserslistTargetHandler.js +41 -5
- package/lib/config/defaults.js +270 -78
- package/lib/config/defineConfig.js +10 -2
- package/lib/config/getClaimedAssetTypes.js +65 -0
- package/lib/config/normalization.js +46 -16
- package/lib/config/target.js +46 -3
- package/lib/container/ContainerEntryDependency.js +1 -1
- package/lib/container/ContainerEntryModule.js +24 -15
- package/lib/container/ContainerEntryModuleFactory.js +7 -3
- package/lib/container/ContainerPlugin.js +9 -10
- package/lib/container/ContainerReferencePlugin.js +6 -2
- package/lib/container/FallbackDependency.js +1 -1
- package/lib/container/FallbackModule.js +24 -17
- package/lib/container/FallbackModuleFactory.js +7 -3
- package/lib/container/HoistContainerReferencesPlugin.js +6 -11
- package/lib/container/ModuleFederationPlugin.js +7 -24
- package/lib/container/RemoteModule.js +27 -19
- package/lib/container/RemoteRuntimeModule.js +10 -8
- package/lib/container/moduleFederationHooks.js +32 -0
- package/lib/css/CssGenerator.js +171 -43
- package/lib/css/CssInjectStyleRuntimeModule.js +7 -5
- package/lib/css/CssLoadingRuntimeModule.js +84 -32
- package/lib/css/CssModule.js +10 -7
- package/lib/css/CssModulesPlugin.js +172 -100
- package/lib/css/CssParser.js +1113 -568
- package/lib/css/CssServerStylesRuntimeModule.js +54 -0
- package/lib/css/cssMinify.js +168 -0
- package/lib/css/data.js +5334 -0
- package/lib/css/syntax.js +9647 -232
- package/lib/debug/ProfilingPlugin.js +14 -9
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/AMDDefineDependency.js +112 -87
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +30 -17
- package/lib/dependencies/AMDPlugin.js +9 -7
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -5
- package/lib/dependencies/AMDRequireContextDependency.js +2 -2
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +25 -14
- package/lib/dependencies/AMDRequireDependency.js +8 -7
- package/lib/dependencies/AMDRequireItemDependency.js +1 -1
- package/lib/dependencies/AMDRuntimeModules.js +21 -1
- package/lib/dependencies/BuildTimeConstDependency.js +102 -0
- package/lib/dependencies/CachedConstDependency.js +11 -8
- package/lib/dependencies/CommonJsDependencyHelpers.js +67 -46
- package/lib/dependencies/CommonJsExportRequireDependency.js +121 -45
- package/lib/dependencies/CommonJsExportsDependency.js +53 -49
- package/lib/dependencies/CommonJsExportsParserPlugin.js +207 -25
- package/lib/dependencies/CommonJsFullRequireDependency.js +119 -34
- package/lib/dependencies/CommonJsImportsParserPlugin.js +100 -50
- package/lib/dependencies/CommonJsObjectExportDependency.js +188 -0
- package/lib/dependencies/CommonJsPlugin.js +35 -6
- package/lib/dependencies/CommonJsRequireContextDependency.js +5 -6
- package/lib/dependencies/CommonJsRequireDependency.js +170 -27
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +63 -38
- package/lib/dependencies/ConstDependency.js +8 -9
- package/lib/dependencies/ContextDependency.js +12 -8
- package/lib/dependencies/ContextDependencyHelpers.js +14 -9
- package/lib/dependencies/ContextDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +24 -11
- package/lib/dependencies/ContextElementDependency.js +31 -12
- package/lib/dependencies/CreateRequireParserPlugin.js +12 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +4 -4
- package/lib/dependencies/CssIcssExportDependency.js +56 -28
- package/lib/dependencies/CssIcssImportDependency.js +17 -13
- package/lib/dependencies/CssIcssSymbolDependency.js +9 -10
- package/lib/dependencies/CssImportDependency.js +18 -9
- package/lib/dependencies/CssUrlDependency.js +17 -13
- package/lib/dependencies/DllEntryDependency.js +1 -1
- package/lib/dependencies/DynamicExports.js +2 -2
- package/lib/dependencies/ExportBindingInitFragment.js +36 -9
- package/lib/dependencies/ExportsInfoDependency.js +7 -8
- package/lib/dependencies/ExternalModuleDependency.js +9 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +2 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +8 -5
- package/lib/dependencies/HarmonyAcceptDependency.js +5 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +52 -17
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +11 -7
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +23 -14
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +80 -12
- package/lib/dependencies/HarmonyExportExpressionDependency.js +23 -18
- package/lib/dependencies/HarmonyExportHeaderDependency.js +7 -7
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +286 -80
- package/lib/dependencies/HarmonyExportInitFragment.js +18 -6
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +51 -14
- package/lib/dependencies/HarmonyExports.js +7 -4
- package/lib/dependencies/HarmonyImportDependency.js +121 -60
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +124 -38
- package/lib/dependencies/HarmonyImportGuard.js +20 -30
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +152 -9
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +97 -49
- package/lib/dependencies/HarmonyModulesPlugin.js +7 -3
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +1 -3
- package/lib/dependencies/HtmlEntryDependency.js +49 -31
- package/lib/dependencies/HtmlInlineHtmlDependency.js +7 -8
- package/lib/dependencies/HtmlInlineScriptDependency.js +11 -8
- package/lib/dependencies/HtmlInlineStyleDependency.js +7 -10
- package/lib/dependencies/HtmlSourceDependency.js +22 -14
- package/lib/dependencies/ImportContextDependency.js +45 -5
- package/lib/dependencies/ImportDependency.js +33 -50
- package/lib/dependencies/ImportEagerDependency.js +6 -9
- package/lib/dependencies/ImportMetaContextDependency.js +2 -2
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +14 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +7 -3
- package/lib/dependencies/ImportMetaGlobDependency.js +2 -2
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +2 -3
- package/lib/dependencies/ImportMetaGlobHelpers.js +19 -22
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +1 -1
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +1 -1
- package/lib/dependencies/ImportMetaPlugin.js +154 -71
- package/lib/dependencies/ImportMetaResolveDependency.js +3 -4
- package/lib/dependencies/ImportParserPlugin.js +73 -49
- package/lib/dependencies/ImportPhase.js +12 -5
- package/lib/dependencies/ImportPlugin.js +7 -3
- package/lib/dependencies/ImportWeakDependency.js +6 -9
- package/lib/dependencies/JsonExportsDependency.js +11 -7
- package/lib/dependencies/LoaderDependency.js +2 -2
- package/lib/dependencies/LoaderImportDependency.js +2 -2
- package/lib/dependencies/LoaderPlugin.js +11 -7
- package/lib/dependencies/LocalModuleDependency.js +5 -5
- package/lib/dependencies/LocalModulesHelpers.js +1 -1
- package/lib/dependencies/ModuleDecoratorDependency.js +6 -7
- package/lib/dependencies/ModuleDependency.js +9 -6
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +4 -4
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +3 -3
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/ModuleHotDeclineDependency.js +1 -1
- package/lib/dependencies/ModuleInitFragmentDependency.js +24 -10
- package/lib/dependencies/NullDependency.js +3 -3
- package/lib/dependencies/ProvidedDependency.js +14 -10
- package/lib/dependencies/PureExpressionDependency.js +9 -10
- package/lib/dependencies/RequireContextDependency.js +2 -2
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -4
- package/lib/dependencies/RequireContextPlugin.js +8 -4
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +2 -2
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +5 -8
- package/lib/dependencies/RequireEnsureDependency.js +8 -7
- package/lib/dependencies/RequireEnsurePlugin.js +7 -3
- package/lib/dependencies/RequireHeaderDependency.js +50 -12
- package/lib/dependencies/RequireIncludeDependency.js +6 -6
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +2 -3
- package/lib/dependencies/RequireIncludePlugin.js +7 -3
- package/lib/dependencies/RequireJsStuffPlugin.js +7 -3
- package/lib/dependencies/RequireResolveContextDependency.js +2 -2
- package/lib/dependencies/RequireResolveDependency.js +4 -4
- package/lib/dependencies/RequireResolveHeaderDependency.js +4 -4
- package/lib/dependencies/RuntimeRequirementsDependency.js +5 -6
- package/lib/dependencies/StaticExportsDependency.js +2 -2
- package/lib/dependencies/SystemPlugin.js +10 -6
- package/lib/dependencies/SystemRuntimeModule.js +10 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +11 -7
- package/lib/dependencies/URLContextDependency.js +2 -2
- package/lib/dependencies/URLDependency.js +110 -64
- package/lib/dependencies/URLPlugin.js +7 -3
- package/lib/dependencies/UnsupportedDependency.js +4 -4
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -4
- package/lib/dependencies/WebAssemblyImportDependency.js +5 -5
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -6
- package/lib/dependencies/WorkerAndWorkletPlugin.js +47 -28
- package/lib/dependencies/WorkerDependency.js +22 -22
- package/lib/dependencies/WorkletDependency.js +18 -21
- package/lib/dependencies/getFunctionExpression.js +8 -4
- package/lib/dependencies/importOptionsCheck.js +47 -0
- package/lib/dependencies/processExportInfo.js +5 -5
- package/lib/dll/DelegatedModule.js +34 -22
- package/lib/dll/DelegatedModuleFactoryPlugin.js +15 -7
- package/lib/dll/DelegatedPlugin.js +2 -2
- package/lib/dll/DllEntryPlugin.js +2 -2
- package/lib/dll/DllModule.js +22 -15
- package/lib/dll/DllModuleFactory.js +7 -3
- package/lib/dll/DllPlugin.js +7 -5
- package/lib/dll/DllReferencePlugin.js +10 -7
- package/lib/dll/LibManifestPlugin.js +5 -5
- package/lib/electron/ElectronTargetPlugin.js +53 -49
- package/lib/errors/AsyncChunkWaterfallWarning.js +36 -0
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BroadContextsWarning.js +43 -0
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/errors/CacheEffectivenessWarning.js +55 -0
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CircularDependenciesWarning.js +38 -0
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingResourceHintsWarning.js +35 -0
- package/lib/errors/DotenvFileError.js +29 -0
- package/lib/errors/DuplicateModulesWarning.js +45 -0
- package/lib/errors/DynamicExportsWarning.js +30 -0
- package/lib/errors/EmbeddedSourceMapsWarning.js +25 -0
- package/lib/errors/EntrypointOverlapWarning.js +45 -0
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/errors/EvalUsageWarning.js +28 -0
- package/lib/errors/HookWebpackError.js +5 -5
- package/lib/errors/HotspotsWarning.js +57 -0
- package/lib/errors/IgnoreErrorModuleFactory.js +7 -3
- package/lib/errors/ImportedBindingAssignmentError.js +30 -0
- package/lib/errors/InlinedAssetsWarning.js +36 -0
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/errors/LargeModulesWarning.js +45 -0
- package/lib/errors/LegacyJavascriptWarning.js +48 -0
- package/lib/errors/MissingSideEffectsWarning.js +36 -0
- package/lib/errors/MixedExportsWarning.js +41 -0
- package/lib/errors/ModuleDependencyError.js +13 -16
- package/lib/errors/ModuleDependencyWarning.js +5 -15
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +2 -2
- package/lib/errors/ModuleParseError.js +1 -2
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/NodeStuffInWebError.js +1 -1
- package/lib/errors/OsDependentRuleWarning.js +31 -0
- package/lib/errors/PureAnnotationsWarning.js +36 -0
- package/lib/errors/RedundantDynamicImportWarning.js +31 -0
- package/lib/errors/ScopeHoistingBailoutsWarning.js +41 -0
- package/lib/errors/SplitChunksCappedWarning.js +41 -0
- package/lib/errors/TinyChunksWarning.js +40 -0
- package/lib/errors/TopLevelThisWarning.js +34 -0
- package/lib/errors/UnsplitVendorsWarning.js +42 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/errors/UnusedAliasesWarning.js +29 -0
- package/lib/errors/UnusedDefinesWarning.js +29 -0
- package/lib/errors/UnusedExternalsWarning.js +29 -0
- package/lib/errors/UnusedReexportsWarning.js +42 -0
- package/lib/errors/UnusedRuleWarning.js +29 -0
- package/lib/errors/WebpackError.js +9 -5
- package/lib/errors/deriveStackFromNestedError.js +90 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +37 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +86 -51
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +161 -62
- package/lib/hmr/HotModuleReplacement.runtime.js +24 -5
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +45 -24
- package/lib/hmr/lazyCompilationBackend.js +9 -6
- package/lib/hmr/parserHooks.js +56 -0
- package/lib/html/HtmlGenerator.js +277 -77
- package/lib/html/HtmlModule.js +7 -3
- package/lib/html/HtmlModulesPlugin.js +366 -200
- package/lib/html/HtmlParser.js +31 -86
- package/lib/html/data.js +1928 -0
- package/lib/html/htmlMinify.js +288 -0
- package/lib/html/syntax.js +6034 -1384
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +1 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +2 -2
- package/lib/ids/HashedModuleIdsPlugin.js +6 -2
- package/lib/ids/IdHelpers.js +7 -8
- package/lib/ids/NamedChunkIdsPlugin.js +1 -1
- package/lib/ids/NamedModuleIdsPlugin.js +1 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +2 -2
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -3
- package/lib/ids/OccurrenceModuleIdsPlugin.js +7 -3
- package/lib/ids/SyncModuleIdsPlugin.js +4 -4
- package/lib/index.js +10 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +18 -14
- package/lib/javascript/ChunkFormatHelpers.js +6 -6
- package/lib/javascript/ChunkHelpers.js +1 -1
- package/lib/javascript/CommonJsChunkFormatPlugin.js +11 -5
- package/lib/javascript/EnableChunkLoadingPlugin.js +2 -2
- package/lib/javascript/JavascriptGenerator.js +65 -165
- package/lib/javascript/JavascriptModule.js +9 -3
- package/lib/javascript/JavascriptModulesPlugin.js +103 -123
- package/lib/javascript/JavascriptParser.js +242 -99
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/ScopeAnalyzer.js +1094 -0
- package/lib/javascript/StartupHelpers.js +55 -9
- package/lib/javascript/syntax.js +2678 -232
- package/lib/json/JsonData.js +8 -4
- package/lib/json/JsonGenerator.js +38 -16
- package/lib/json/JsonModule.js +7 -3
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -6
- package/lib/library/AbstractLibraryPlugin.js +20 -14
- package/lib/library/AmdLibraryPlugin.js +11 -7
- package/lib/library/AssignLibraryPlugin.js +19 -13
- package/lib/library/EnableLibraryPlugin.js +2 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +15 -8
- package/lib/library/JsonpLibraryPlugin.js +11 -7
- package/lib/library/ModuleLibraryPlugin.js +256 -64
- package/lib/library/SystemLibraryPlugin.js +12 -8
- package/lib/library/UmdLibraryPlugin.js +62 -25
- package/lib/loaders/LoaderRunner.js +47 -6
- package/lib/loaders/loadLoader.js +8 -4
- package/lib/logging/createConsoleLogger.js +7 -4
- package/lib/node/CommonJsChunkLoadingPlugin.js +36 -22
- package/lib/node/NodeEnvironmentPlugin.js +17 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -3
- package/lib/node/NodeTemplatePlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +70 -9
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +65 -19
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -16
- package/lib/node/RequireChunkLoadingRuntimeModule.js +35 -38
- package/lib/node/nodeConsole.js +7 -3
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -6
- package/lib/optimize/ConcatenatedModule.js +1030 -476
- package/lib/optimize/ConstExportsPlugin.js +16 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/optimize/FlagIncludedChunksPlugin.js +3 -4
- package/lib/optimize/InlineExports.js +130 -5
- package/lib/optimize/InnerGraph.js +28 -12
- package/lib/optimize/InnerGraphPlugin.js +23 -18
- package/lib/optimize/LimitChunkCountPlugin.js +7 -3
- package/lib/optimize/MangleExportsPlugin.js +7 -8
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -3
- package/lib/optimize/MinChunkSizePlugin.js +7 -3
- package/lib/optimize/ModuleConcatenationPlugin.js +51 -35
- package/lib/optimize/RealContentHashPlugin.js +121 -41
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/RuntimeChunkPlugin.js +2 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +262 -39
- package/lib/optimize/SplitChunksPlugin.js +86 -24
- package/lib/performance/AssetsOverSizeLimitWarning.js +10 -2
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +136 -0
- package/lib/performance/BroadContextsPlugin.js +142 -0
- package/lib/performance/CacheEffectivenessPlugin.js +125 -0
- package/lib/performance/ConflictingResourceHintsPlugin.js +99 -0
- package/lib/performance/DuplicateModulesPlugin.js +93 -0
- package/lib/performance/DuplicatePackagesPlugin.js +119 -0
- package/lib/performance/DuplicatePackagesWarning.js +84 -0
- package/lib/performance/DynamicExportsPlugin.js +120 -0
- package/lib/performance/EmbeddedSourceMapsPlugin.js +71 -0
- package/lib/performance/EntrypointOverlapPlugin.js +122 -0
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EvalUsagePlugin.js +115 -0
- package/lib/performance/HotspotsPlugin.js +296 -0
- package/lib/performance/InlinedAssetsPlugin.js +99 -0
- package/lib/performance/LargeModulesPlugin.js +126 -0
- package/lib/performance/LegacyJavascriptPlugin.js +139 -0
- package/lib/performance/MissingSideEffectsPlugin.js +138 -0
- package/lib/performance/MixedExportsPlugin.js +136 -0
- package/lib/performance/OsDependentRuleWarningPlugin.js +178 -0
- package/lib/performance/PureAnnotationsPlugin.js +219 -0
- package/lib/performance/RedundantDynamicImportsPlugin.js +225 -0
- package/lib/performance/RuntimeInLargeChunkWarning.js +27 -0
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +164 -0
- package/lib/performance/SizeLimitsPlugin.js +139 -7
- package/lib/performance/SplitChunksCappedPlugin.js +99 -0
- package/lib/performance/TinyChunksPlugin.js +128 -0
- package/lib/performance/TopLevelThisPlugin.js +208 -0
- package/lib/performance/UnsplitVendorsPlugin.js +112 -0
- package/lib/performance/UnusedAliasesPlugin.js +253 -0
- package/lib/performance/UnusedDefinesPlugin.js +87 -0
- package/lib/performance/UnusedExternalsPlugin.js +110 -0
- package/lib/performance/UnusedReexportsPlugin.js +159 -0
- package/lib/performance/UnusedRuleWarningPlugin.js +105 -0
- package/lib/performance/getModuleSize.js +22 -0
- package/lib/performance/getSourceModules.js +22 -0
- package/lib/performance/hasOnlyUnusedExports.js +40 -0
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +24 -10
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +63 -46
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +2 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ResourceHintPlugin.js +295 -79
- package/lib/prefetch/ResourceHintRuntimeModule.js +1 -21
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +10 -133
- package/lib/prefetch/parseResourceHintOptions.js +31 -4
- package/lib/rules/BasicEffectRulePlugin.js +2 -2
- package/lib/rules/BasicMatcherRulePlugin.js +8 -4
- package/lib/rules/GlobMatcherRulePlugin.js +68 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +12 -5
- package/lib/rules/RuleSetCompiler.js +146 -12
- package/lib/rules/UseEffectRulePlugin.js +18 -11
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +11 -1
- package/lib/runtime/AsyncModuleRuntimeModule.js +6 -2
- package/lib/runtime/AutoPublicPathRuntimeModule.js +15 -20
- package/lib/runtime/BaseUriRuntimeModule.js +33 -7
- package/lib/runtime/ChunkNameRuntimeModule.js +10 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +11 -1
- package/lib/runtime/CompatRuntimeModule.js +5 -3
- package/lib/runtime/ConcatenationWrapRuntimeModule.js +90 -0
- package/lib/runtime/ConstructRequireRuntimeModule.js +52 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +8 -6
- package/lib/runtime/CreateScriptRuntimeModule.js +11 -1
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +11 -1
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +56 -38
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -2
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +62 -37
- package/lib/runtime/GetFullHashRuntimeModule.js +12 -2
- package/lib/runtime/GetMainFilenameRuntimeModule.js +12 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -2
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +16 -3
- package/lib/runtime/GlobalRuntimeModule.js +18 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +12 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +2 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +34 -7
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +22 -6
- package/lib/runtime/NonceRuntimeModule.js +10 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -3
- package/lib/runtime/PublicPathRuntimeModule.js +12 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +11 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +12 -2
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +11 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +18 -9
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +3 -3
- package/lib/runtime/StartupEntrypointRuntimeModule.js +21 -4
- package/lib/runtime/SystemContextRuntimeModule.js +10 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -1
- package/lib/runtime/WorkerRuntimeModule.js +11 -1
- package/lib/runtime/baseUri.js +63 -0
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +46 -20
- package/lib/schemes/VirtualUrlPlugin.js +13 -7
- package/lib/serialization/AggregateErrorSerializer.js +1 -1
- package/lib/serialization/BinaryMiddleware.js +4 -4
- package/lib/serialization/ErrorObjectSerializer.js +1 -1
- package/lib/serialization/FileMiddleware.js +22 -9
- package/lib/serialization/ObjectMiddleware.js +139 -114
- package/lib/serialization/PlainObjectSerializer.js +19 -16
- package/lib/sharing/ConsumeSharedModule.js +30 -21
- package/lib/sharing/ConsumeSharedPlugin.js +18 -10
- package/lib/sharing/ConsumeSharedRuntimeModule.js +6 -9
- package/lib/sharing/ProvideSharedModule.js +25 -16
- package/lib/sharing/ProvideSharedModuleFactory.js +7 -3
- package/lib/sharing/ProvideSharedPlugin.js +8 -4
- package/lib/sharing/SharePlugin.js +17 -5
- package/lib/sharing/ShareRuntimeModule.js +4 -4
- package/lib/sharing/resolveMatchedConfigs.js +9 -6
- package/lib/sharing/utils.js +1 -3
- package/lib/stats/DefaultStatsFactoryPlugin.js +50 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +17 -8
- package/lib/stats/DefaultStatsPrinterPlugin.js +36 -26
- package/lib/stats/StatsFactory.js +25 -26
- package/lib/stats/StatsPrinter.js +16 -12
- package/lib/typescript/TypeScriptPlugin.js +20 -24
- package/lib/url/URLParserPlugin.js +26 -13
- package/lib/util/ArrayQueue.js +3 -3
- package/lib/util/AsyncQueue.js +4 -3
- package/lib/util/Hash.js +5 -1
- package/lib/util/LazySet.js +35 -22
- package/lib/util/LocConverter.js +36 -13
- package/lib/util/SourceProcessor.js +1066 -24
- package/lib/util/StringXor.js +1 -1
- package/lib/util/URLAbsoluteSpecifier.js +3 -1
- package/lib/util/chainedImports.js +9 -5
- package/lib/util/cleverMerge.js +1 -1
- package/lib/util/comparators.js +45 -14
- package/lib/util/concatenate.js +203 -77
- package/lib/util/conventions.js +10 -2
- package/lib/util/createHash.js +2 -2
- package/lib/util/createHooksRegistry.js +8 -10
- package/lib/util/createMappings.js +25 -3
- package/lib/util/dataURL.js +225 -1
- package/lib/util/extractSourceMap.js +4 -3
- package/lib/util/findCaseMismatch.js +139 -0
- package/lib/util/formatLocation.js +1 -2
- package/lib/util/fs.js +22 -5
- package/lib/util/globUtils.js +298 -24
- package/lib/util/hash/BatchedHash.js +5 -1
- package/lib/util/hash/BulkUpdateHash.js +5 -1
- package/lib/util/hash/DebugHash.js +5 -1
- package/lib/util/hash/hash-digest.js +6 -2
- package/lib/util/identifier.js +4 -0
- package/lib/util/implicitTypeLoaderFallback.js +1 -1
- package/lib/util/internalSerializables.js +8 -0
- package/lib/util/lazyModule.js +56 -0
- package/lib/util/makeSerializable.js +7 -3
- package/lib/util/matchAlias.js +25 -0
- package/lib/util/mimeTypes.js +11 -5
- package/lib/util/nonNumericOnlyHash.js +4 -3
- package/lib/util/parseJson.js +5 -3
- package/lib/util/preloadModuleType.js +32 -0
- package/lib/util/registerExternalSerializer.js +7 -5
- package/lib/util/removeBOM.js +82 -1
- package/lib/util/runtime.js +2 -2
- package/lib/util/semver.js +1 -1
- package/lib/util/serialization.js +28 -28
- package/lib/util/source.js +2 -2
- package/lib/util/traverseDestructuringAssignmentProperties.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +10 -8
- package/lib/wasm/wasmModuleFilename.js +54 -0
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +43 -21
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +45 -21
- package/lib/wasm-async/AsyncWasmModule.js +3 -3
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +4 -5
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +57 -17
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +34 -18
- package/lib/wasm-async/AsyncWebAssemblyParser.js +9 -8
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +29 -8
- package/lib/wasm-sync/SyncWasmModule.js +2 -2
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +18 -13
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -5
- package/lib/wasm-sync/WebAssemblyGenerator.js +18 -17
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +4 -4
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +7 -7
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +24 -11
- package/lib/wasm-sync/WebAssemblyParser.js +4 -6
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -2
- package/lib/web/FetchCompileAsyncWasmPlugin.js +105 -19
- package/lib/web/FetchCompileWasmPlugin.js +48 -16
- package/lib/web/JsonpChunkLoadingPlugin.js +47 -23
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +50 -20
- package/lib/web/JsonpTemplatePlugin.js +2 -2
- package/lib/webpack.js +22 -11
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +60 -26
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +30 -32
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +1 -0
- package/package.json +32 -25
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +667 -34
- package/schemas/plugins/HtmlParserOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +10 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/types.d.ts +3223 -465
- package/lib/runtime/CommonJsWrapRuntimeModule.js +0 -37
package/lib/DefinePlugin.js
CHANGED
|
@@ -23,20 +23,26 @@ const {
|
|
|
23
23
|
const createHash = require("./util/createHash");
|
|
24
24
|
const createHooksRegistry = require("./util/createHooksRegistry");
|
|
25
25
|
|
|
26
|
-
/** @
|
|
27
|
-
/** @
|
|
28
|
-
/**
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
/** @
|
|
36
|
-
/** @
|
|
37
|
-
/**
|
|
38
|
-
|
|
39
|
-
|
|
26
|
+
/** @import { Expression, MemberExpression } from "estree" */
|
|
27
|
+
/** @import Compiler from "./Compiler" */
|
|
28
|
+
/**
|
|
29
|
+
* @import {
|
|
30
|
+
* BuildInfo,
|
|
31
|
+
* ValueCacheVersion,
|
|
32
|
+
* ValueCacheVersions
|
|
33
|
+
* } from "./Module"
|
|
34
|
+
*/
|
|
35
|
+
/** @import NormalModule, { NormalModuleBuildInfo } from "./NormalModule" */
|
|
36
|
+
/** @import RuntimeTemplate from "./RuntimeTemplate" */
|
|
37
|
+
/**
|
|
38
|
+
* @import JavascriptParser, {
|
|
39
|
+
* DestructuringAssignmentProperties,
|
|
40
|
+
* Members,
|
|
41
|
+
* Range
|
|
42
|
+
* } from "./javascript/JavascriptParser"
|
|
43
|
+
*/
|
|
44
|
+
/** @import { Logger } from "./logging/Logger" */
|
|
45
|
+
/** @import Compilation from "./Compilation" */
|
|
40
46
|
|
|
41
47
|
/** @typedef {null | undefined | RegExp | EXPECTED_FUNCTION | string | number | boolean | bigint | undefined} CodeValuePrimitive */
|
|
42
48
|
/** @typedef {RecursiveArrayOrRecord<CodeValuePrimitive | RuntimeValue>} CodeValue */
|
|
@@ -158,6 +164,21 @@ const isObjectDefinition = (code) =>
|
|
|
158
164
|
!(code instanceof RuntimeValue) &&
|
|
159
165
|
!(code instanceof RegExp);
|
|
160
166
|
|
|
167
|
+
/**
|
|
168
|
+
* Walks a member chain up, dropping its last `count` members.
|
|
169
|
+
* @param {Expression} node member expression
|
|
170
|
+
* @param {number} count members to drop
|
|
171
|
+
* @returns {Expression} the chain without them
|
|
172
|
+
*/
|
|
173
|
+
const dropTrailingMembers = (node, count) => {
|
|
174
|
+
while (count--) {
|
|
175
|
+
node = /** @type {Expression} */ (
|
|
176
|
+
/** @type {MemberExpression} */ (node).object
|
|
177
|
+
);
|
|
178
|
+
}
|
|
179
|
+
return node;
|
|
180
|
+
};
|
|
181
|
+
|
|
161
182
|
/** @typedef {Set<string> | null} ObjKeys */
|
|
162
183
|
/** @typedef {boolean | undefined | null} AsiSafe */
|
|
163
184
|
|
|
@@ -353,6 +374,13 @@ const toCacheVersion = (code) => {
|
|
|
353
374
|
const PLUGIN_NAME = "DefinePlugin";
|
|
354
375
|
const VALUE_DEP_PREFIX = `webpack/${PLUGIN_NAME} `;
|
|
355
376
|
const VALUE_DEP_MAIN = `webpack/${PLUGIN_NAME}_hash`;
|
|
377
|
+
|
|
378
|
+
// Keys webpack injects itself are not the user's to remove, so `performance.unusedDefines`
|
|
379
|
+
// never sees them.
|
|
380
|
+
/** @type {WeakSet<DefinePlugin>} */
|
|
381
|
+
const INTERNAL_PLUGINS = new WeakSet();
|
|
382
|
+
/** @type {WeakMap<Compilation, Set<string>>} */
|
|
383
|
+
const DECLARED_KEYS = new WeakMap();
|
|
356
384
|
const TYPEOF_OPERATOR_REGEXP = /^typeof\s+/;
|
|
357
385
|
const EMPTY_OBJECT = {};
|
|
358
386
|
|
|
@@ -692,6 +720,22 @@ class DefinePlugin {
|
|
|
692
720
|
PLUGIN_NAME,
|
|
693
721
|
(compilation, { normalModuleFactory }) => {
|
|
694
722
|
const definitions = this.definitions;
|
|
723
|
+
const { performance } = compilation.options;
|
|
724
|
+
// Only `performance.unusedDefines` reads these, so a build without it
|
|
725
|
+
// collects nothing.
|
|
726
|
+
const collectDeclared =
|
|
727
|
+
performance !== false &&
|
|
728
|
+
performance.unusedDefines === true &&
|
|
729
|
+
!INTERNAL_PLUGINS.has(this);
|
|
730
|
+
/** @type {Set<string> | undefined} */
|
|
731
|
+
let declaredKeys;
|
|
732
|
+
if (collectDeclared) {
|
|
733
|
+
declaredKeys = DECLARED_KEYS.get(compilation);
|
|
734
|
+
if (declaredKeys === undefined) {
|
|
735
|
+
declaredKeys = new Set();
|
|
736
|
+
DECLARED_KEYS.set(compilation, declaredKeys);
|
|
737
|
+
}
|
|
738
|
+
}
|
|
695
739
|
const hooks = DefinePlugin.getCompilationHooks(compilation);
|
|
696
740
|
|
|
697
741
|
hooks.definitions.tap(PLUGIN_NAME, (previousDefinitions) => ({
|
|
@@ -1120,7 +1164,7 @@ class DefinePlugin {
|
|
|
1120
1164
|
const chainRoot = isMeta ? "import.meta" : chainParts[0];
|
|
1121
1165
|
const chainPrefix = chainParts.slice(isMeta ? 2 : 1);
|
|
1122
1166
|
/**
|
|
1123
|
-
*
|
|
1167
|
+
* Finds the member of a chain that reads a property that is not defined.
|
|
1124
1168
|
* Walks the merged view so dotted keys of every instance count.
|
|
1125
1169
|
* Collects every define key consulted so the caller can record a
|
|
1126
1170
|
* value dependency on each (a sibling key like `OBJECT.SUB2` affects
|
|
@@ -1128,12 +1172,12 @@ class DefinePlugin {
|
|
|
1128
1172
|
* Inherited members (e.g. `toString`) stay defined.
|
|
1129
1173
|
* @param {Members} members chain members (after the root)
|
|
1130
1174
|
* @param {string[]} deps consulted define keys (mutated)
|
|
1131
|
-
* @returns {
|
|
1175
|
+
* @returns {number} index of the member resolving to `undefined`, or -1
|
|
1132
1176
|
*/
|
|
1133
|
-
const
|
|
1134
|
-
if (members.length <= chainPrefix.length) return
|
|
1177
|
+
const findUndefinedMemberAccess = (members, deps) => {
|
|
1178
|
+
if (members.length <= chainPrefix.length) return -1;
|
|
1135
1179
|
for (let i = 0; i < chainPrefix.length; i++) {
|
|
1136
|
-
if (members[i] !== chainPrefix[i]) return
|
|
1180
|
+
if (members[i] !== chainPrefix[i]) return -1;
|
|
1137
1181
|
}
|
|
1138
1182
|
/** @type {MergedDefinitionNode | undefined} */
|
|
1139
1183
|
let value = definition;
|
|
@@ -1146,9 +1190,9 @@ class DefinePlugin {
|
|
|
1146
1190
|
deps.push(nextPath);
|
|
1147
1191
|
value = value.get(member);
|
|
1148
1192
|
} else if (member in EMPTY_OBJECT) {
|
|
1149
|
-
return
|
|
1193
|
+
return -1;
|
|
1150
1194
|
} else {
|
|
1151
|
-
return
|
|
1195
|
+
return i;
|
|
1152
1196
|
}
|
|
1153
1197
|
} else if (isObjectDefinition(value)) {
|
|
1154
1198
|
// non-expandable object leaf (e.g. an array)
|
|
@@ -1164,37 +1208,45 @@ class DefinePlugin {
|
|
|
1164
1208
|
deps.push(nextPath);
|
|
1165
1209
|
value = mergedDefinitions.definitions[nextPath];
|
|
1166
1210
|
} else {
|
|
1167
|
-
return
|
|
1211
|
+
return i;
|
|
1168
1212
|
}
|
|
1169
1213
|
} else {
|
|
1170
1214
|
// a leaf with members left is a real property access on a value
|
|
1171
|
-
return
|
|
1215
|
+
return -1;
|
|
1172
1216
|
}
|
|
1173
1217
|
path = nextPath;
|
|
1174
1218
|
}
|
|
1175
|
-
return
|
|
1219
|
+
return -1;
|
|
1176
1220
|
};
|
|
1177
1221
|
parser.hooks.expressionMemberChain
|
|
1178
1222
|
.for(chainRoot)
|
|
1179
1223
|
.tap(PLUGIN_NAME, (expr, members) => {
|
|
1180
1224
|
const deps = [key];
|
|
1181
|
-
if (
|
|
1225
|
+
if (findUndefinedMemberAccess(members, deps) === -1) return;
|
|
1182
1226
|
for (const dep of deps) addValueDependency(dep);
|
|
1183
1227
|
return toConstantDependency(parser, "undefined")(expr);
|
|
1184
1228
|
});
|
|
1185
|
-
//
|
|
1186
|
-
//
|
|
1187
|
-
// short-circuits, with the object never inlined.
|
|
1229
|
+
// Cut the chain at the undefined member, so what follows still
|
|
1230
|
+
// throws; an optional link there takes the call, arguments unevaluated.
|
|
1188
1231
|
parser.hooks.callMemberChain
|
|
1189
1232
|
.for(chainRoot)
|
|
1190
|
-
.tap(PLUGIN_NAME, (expr, members) => {
|
|
1233
|
+
.tap(PLUGIN_NAME, (expr, members, membersOptionals) => {
|
|
1191
1234
|
const deps = [key];
|
|
1192
|
-
|
|
1235
|
+
const undefinedIndex = findUndefinedMemberAccess(members, deps);
|
|
1236
|
+
if (undefinedIndex === -1) return;
|
|
1193
1237
|
for (const dep of deps) addValueDependency(dep);
|
|
1238
|
+
if (membersOptionals[undefinedIndex + 1]) {
|
|
1239
|
+
return toConstantDependency(parser, "undefined")(expr);
|
|
1240
|
+
}
|
|
1194
1241
|
toConstantDependency(
|
|
1195
1242
|
parser,
|
|
1196
1243
|
"undefined"
|
|
1197
|
-
)(
|
|
1244
|
+
)(
|
|
1245
|
+
dropTrailingMembers(
|
|
1246
|
+
/** @type {Expression} */ (expr.callee),
|
|
1247
|
+
members.length - 1 - undefinedIndex
|
|
1248
|
+
)
|
|
1249
|
+
);
|
|
1198
1250
|
parser.walkExpressions(expr.arguments);
|
|
1199
1251
|
return true;
|
|
1200
1252
|
});
|
|
@@ -1245,6 +1297,17 @@ class DefinePlugin {
|
|
|
1245
1297
|
warning.hideStack = true;
|
|
1246
1298
|
compilation.warnings.push(warning);
|
|
1247
1299
|
}
|
|
1300
|
+
// Leaves only: an object key counts as used whenever any of its
|
|
1301
|
+
// members is, which would report the parent as unused. An object
|
|
1302
|
+
// with no members has none, and still substitutes.
|
|
1303
|
+
const isLeaf =
|
|
1304
|
+
!isObjectDefinition(code) ||
|
|
1305
|
+
Object.keys(/** @type {Definitions} */ (code)).length === 0;
|
|
1306
|
+
|
|
1307
|
+
if (declaredKeys !== undefined && isLeaf) {
|
|
1308
|
+
declaredKeys.add(prefix + key);
|
|
1309
|
+
}
|
|
1310
|
+
|
|
1248
1311
|
if (isObjectDefinition(code)) {
|
|
1249
1312
|
walkDefinitionsForValues(
|
|
1250
1313
|
/** @type {Definitions} */ (code),
|
|
@@ -1267,10 +1330,31 @@ class DefinePlugin {
|
|
|
1267
1330
|
|
|
1268
1331
|
DefinePlugin.getCompilationHooks = createHooksRegistry(createCompilationHooks);
|
|
1269
1332
|
|
|
1333
|
+
/**
|
|
1334
|
+
* Marks an instance as webpack's own, so `performance.unusedDefines` never
|
|
1335
|
+
* reports the keys it declares against the user.
|
|
1336
|
+
* @param {DefinePlugin} plugin the instance webpack constructed itself
|
|
1337
|
+
* @returns {DefinePlugin} the same instance
|
|
1338
|
+
*/
|
|
1339
|
+
const markInternal = (plugin) => {
|
|
1340
|
+
INTERNAL_PLUGINS.add(plugin);
|
|
1341
|
+
return plugin;
|
|
1342
|
+
};
|
|
1343
|
+
|
|
1344
|
+
/**
|
|
1345
|
+
* The keys the configuration declared, webpack's own excluded.
|
|
1346
|
+
* @param {Compilation} compilation the compilation
|
|
1347
|
+
* @returns {Set<string> | undefined} the keys, or undefined when none were collected
|
|
1348
|
+
*/
|
|
1349
|
+
const getDeclaredKeys = (compilation) => DECLARED_KEYS.get(compilation);
|
|
1350
|
+
|
|
1351
|
+
DefinePlugin.VALUE_DEP_MAIN = VALUE_DEP_MAIN;
|
|
1352
|
+
DefinePlugin.VALUE_DEP_PREFIX = VALUE_DEP_PREFIX;
|
|
1353
|
+
DefinePlugin.getDeclaredKeys = getDeclaredKeys;
|
|
1354
|
+
DefinePlugin.getMergedDefinitionNode = getMergedDefinitionNode;
|
|
1355
|
+
DefinePlugin.getRuntimeRequirements = getRuntimeRequirements;
|
|
1356
|
+
DefinePlugin.markInternal = markInternal;
|
|
1357
|
+
DefinePlugin.stringifyMergedDefinition = stringifyMergedDefinition;
|
|
1358
|
+
DefinePlugin.toPropertyKey = toPropertyKey;
|
|
1359
|
+
|
|
1270
1360
|
module.exports = DefinePlugin;
|
|
1271
|
-
module.exports.VALUE_DEP_MAIN = VALUE_DEP_MAIN;
|
|
1272
|
-
module.exports.VALUE_DEP_PREFIX = VALUE_DEP_PREFIX;
|
|
1273
|
-
module.exports.getMergedDefinitionNode = getMergedDefinitionNode;
|
|
1274
|
-
module.exports.getRuntimeRequirements = getRuntimeRequirements;
|
|
1275
|
-
module.exports.stringifyMergedDefinition = stringifyMergedDefinition;
|
|
1276
|
-
module.exports.toPropertyKey = toPropertyKey;
|
package/lib/DependenciesBlock.js
CHANGED
|
@@ -7,12 +7,15 @@
|
|
|
7
7
|
|
|
8
8
|
const makeSerializable = require("./util/makeSerializable");
|
|
9
9
|
|
|
10
|
-
/** @
|
|
11
|
-
/** @
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
/** @import AsyncDependenciesBlock from "./AsyncDependenciesBlock" */
|
|
11
|
+
/** @import Dependency, { UpdateHashContext } from "./Dependency" */
|
|
12
|
+
/**
|
|
13
|
+
* @import {
|
|
14
|
+
* ObjectDeserializerContext,
|
|
15
|
+
* ObjectSerializerContext
|
|
16
|
+
* } from "./serialization/ObjectMiddleware"
|
|
17
|
+
*/
|
|
18
|
+
/** @import Hash from "./util/Hash" */
|
|
16
19
|
|
|
17
20
|
/** @typedef {(d: Dependency) => boolean} DependencyFilterFunction */
|
|
18
21
|
|
package/lib/Dependency.js
CHANGED
|
@@ -5,21 +5,29 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
+
const { JAVASCRIPT_TYPE } = require("./ModuleSourceTypeConstants");
|
|
8
9
|
const memoize = require("./util/memoize");
|
|
9
10
|
|
|
10
|
-
/** @
|
|
11
|
-
/** @
|
|
12
|
-
/** @
|
|
13
|
-
/** @
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
/** @
|
|
20
|
-
/** @
|
|
21
|
-
/**
|
|
22
|
-
|
|
11
|
+
/** @import ChunkGraph from "./ChunkGraph" */
|
|
12
|
+
/** @import DependenciesBlock from "./DependenciesBlock" */
|
|
13
|
+
/** @import Module, { SourceType } from "./Module" */
|
|
14
|
+
/** @import ModuleGraph from "./ModuleGraph" */
|
|
15
|
+
/**
|
|
16
|
+
* @import ModuleGraphConnection, {
|
|
17
|
+
* ConnectionState
|
|
18
|
+
* } from "./ModuleGraphConnection"
|
|
19
|
+
*/
|
|
20
|
+
/** @import RuntimeTemplate from "./RuntimeTemplate" */
|
|
21
|
+
/** @import WebpackError from "./errors/WebpackError" */
|
|
22
|
+
/**
|
|
23
|
+
* @import {
|
|
24
|
+
* ObjectDeserializerContext,
|
|
25
|
+
* ObjectSerializerContext
|
|
26
|
+
* } from "./serialization/ObjectMiddleware"
|
|
27
|
+
*/
|
|
28
|
+
/** @import Hash from "./util/Hash" */
|
|
29
|
+
/** @import { RuntimeSpec } from "./util/runtime" */
|
|
30
|
+
/** @import ModuleDependency from "./dependencies/ModuleDependency" */
|
|
23
31
|
/**
|
|
24
32
|
* Defines the update hash context type used by this module.
|
|
25
33
|
* @typedef {object} UpdateHashContext
|
|
@@ -165,6 +173,16 @@ class Dependency {
|
|
|
165
173
|
return "unknown";
|
|
166
174
|
}
|
|
167
175
|
|
|
176
|
+
/**
|
|
177
|
+
* Returns the source type this dependency reads from the module it references:
|
|
178
|
+
* `javascript` for anything going through the module wrapper, `asset-url` for a
|
|
179
|
+
* bare url embedded into non-javascript output (css, html, a manifest).
|
|
180
|
+
* @returns {SourceType} the source type read from the referenced module
|
|
181
|
+
*/
|
|
182
|
+
get referencedSourceType() {
|
|
183
|
+
return JAVASCRIPT_TYPE;
|
|
184
|
+
}
|
|
185
|
+
|
|
168
186
|
/**
|
|
169
187
|
* Returns location.
|
|
170
188
|
* @returns {DependencyLocation} location
|
|
@@ -424,9 +442,10 @@ class Dependency {
|
|
|
424
442
|
|
|
425
443
|
/**
|
|
426
444
|
* Returns true if this dependency can be concatenated
|
|
445
|
+
* @param {boolean} concatenateCommonJsModules whether optimization.concatenateModules.commonjs is enabled
|
|
427
446
|
* @returns {boolean} true if this dependency can be concatenated
|
|
428
447
|
*/
|
|
429
|
-
canConcatenate() {
|
|
448
|
+
canConcatenate(concatenateCommonJsModules) {
|
|
430
449
|
return false;
|
|
431
450
|
}
|
|
432
451
|
|
|
@@ -506,11 +525,12 @@ Dependency.isLowPriorityDependency = (dependency) =>
|
|
|
506
525
|
/**
|
|
507
526
|
* Returns true if the dependency can be concatenated (scope hoisting).
|
|
508
527
|
* @param {Dependency} dependency dep
|
|
528
|
+
* @param {boolean} concatenateCommonJsModules whether optimization.concatenateModules.commonjs is enabled
|
|
509
529
|
* @returns {boolean} true if this dependency supports concatenation
|
|
510
530
|
*/
|
|
511
|
-
Dependency.canConcatenate = (dependency) => {
|
|
531
|
+
Dependency.canConcatenate = (dependency, concatenateCommonJsModules) => {
|
|
512
532
|
if (typeof dependency.canConcatenate === "function") {
|
|
513
|
-
return dependency.canConcatenate();
|
|
533
|
+
return dependency.canConcatenate(concatenateCommonJsModules);
|
|
514
534
|
}
|
|
515
535
|
return false;
|
|
516
536
|
};
|
|
@@ -5,18 +5,17 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
/** @
|
|
9
|
-
/** @
|
|
10
|
-
/** @
|
|
11
|
-
/** @
|
|
12
|
-
/** @
|
|
13
|
-
/** @
|
|
14
|
-
/** @
|
|
15
|
-
/** @
|
|
16
|
-
/** @
|
|
17
|
-
/** @
|
|
18
|
-
/** @
|
|
19
|
-
/** @typedef {import("./RuntimeTemplate")} RuntimeTemplate */
|
|
8
|
+
/** @import { ReplaceSource } from "webpack-sources" */
|
|
9
|
+
/** @import ChunkGraph from "./ChunkGraph" */
|
|
10
|
+
/** @import CodeGenerationResults from "./CodeGenerationResults" */
|
|
11
|
+
/** @import ConcatenationScope from "./ConcatenationScope" */
|
|
12
|
+
/** @import Dependency from "./Dependency" */
|
|
13
|
+
/** @import DependencyTemplates from "./DependencyTemplates" */
|
|
14
|
+
/** @import { GenerateContext } from "./Generator" */
|
|
15
|
+
/** @import Module, { RuntimeRequirements } from "./Module" */
|
|
16
|
+
/** @import ModuleGraph from "./ModuleGraph" */
|
|
17
|
+
/** @import RuntimeTemplate from "./RuntimeTemplate" */
|
|
18
|
+
/** @import { RuntimeSpec } from "./util/runtime" */
|
|
20
19
|
|
|
21
20
|
/**
|
|
22
21
|
* Defines the init fragment type used by this module.
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
const { DEFAULTS } = require("./config/defaults");
|
|
9
9
|
const createHash = require("./util/createHash");
|
|
10
10
|
|
|
11
|
-
/** @
|
|
12
|
-
/** @
|
|
13
|
-
/** @
|
|
11
|
+
/** @import { DependencyConstructor } from "./Compilation" */
|
|
12
|
+
/** @import DependencyTemplate from "./DependencyTemplate" */
|
|
13
|
+
/** @import { HashFunction } from "./util/Hash" */
|
|
14
14
|
|
|
15
15
|
class DependencyTemplates {
|
|
16
16
|
/**
|
package/lib/DotenvPlugin.js
CHANGED
|
@@ -6,13 +6,14 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const FileSystemInfo = require("./FileSystemInfo");
|
|
9
|
+
const DotenvFileError = require("./errors/DotenvFileError");
|
|
9
10
|
const { join } = require("./util/fs");
|
|
10
11
|
|
|
11
|
-
/** @
|
|
12
|
-
/** @
|
|
13
|
-
/** @
|
|
14
|
-
/** @
|
|
15
|
-
/** @
|
|
12
|
+
/** @import { DotenvPluginOptions } from "../declarations/WebpackOptions" */
|
|
13
|
+
/** @import Compiler from "./Compiler" */
|
|
14
|
+
/** @import { ItemCacheFacade } from "./CacheFacade" */
|
|
15
|
+
/** @import { InputFileSystem } from "./util/fs" */
|
|
16
|
+
/** @import { Snapshot } from "./FileSystemInfo" */
|
|
16
17
|
|
|
17
18
|
/** @typedef {Exclude<DotenvPluginOptions["prefix"], string | undefined>} Prefix */
|
|
18
19
|
/** @typedef {Record<string, string>} Env */
|
|
@@ -24,8 +25,45 @@ const DEFAULT_TEMPLATE = [
|
|
|
24
25
|
".env.[mode].local"
|
|
25
26
|
];
|
|
26
27
|
|
|
28
|
+
// cspell:ignore Motte, motdotla
|
|
29
|
+
|
|
30
|
+
/*
|
|
31
|
+
* `LINE`, `parse`, `_resolveEscapeSequences`, `expandValue` and `expand`
|
|
32
|
+
* below are ported from dotenv v17.4.2 and dotenv-expand v13.0.0, both
|
|
33
|
+
* BSD-2-Clause. Links stay version-pinned: later dotenv-expand releases
|
|
34
|
+
* ship different license text.
|
|
35
|
+
*
|
|
36
|
+
* https://github.com/motdotla/dotenv/blob/v17.4.2/lib/main.js
|
|
37
|
+
* https://github.com/motdotla/dotenv-expand/blob/v13.0.0/lib/main.js
|
|
38
|
+
*
|
|
39
|
+
* Copyright (c) 2015, Scott Motte
|
|
40
|
+
* Copyright (c) 2016, Scott Motte
|
|
41
|
+
* All rights reserved.
|
|
42
|
+
*
|
|
43
|
+
* Redistribution and use in source and binary forms, with or without
|
|
44
|
+
* modification, are permitted provided that the following conditions are met:
|
|
45
|
+
*
|
|
46
|
+
* * Redistributions of source code must retain the above copyright notice, this
|
|
47
|
+
* list of conditions and the following disclaimer.
|
|
48
|
+
*
|
|
49
|
+
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
50
|
+
* this list of conditions and the following disclaimer in the documentation
|
|
51
|
+
* and/or other materials provided with the distribution.
|
|
52
|
+
*
|
|
53
|
+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
54
|
+
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
55
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
56
|
+
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
57
|
+
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
58
|
+
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
59
|
+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
60
|
+
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
61
|
+
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
62
|
+
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
63
|
+
*/
|
|
64
|
+
|
|
27
65
|
// Regex for parsing .env files
|
|
28
|
-
// ported from https://github.com/motdotla/dotenv/blob/
|
|
66
|
+
// ported from https://github.com/motdotla/dotenv/blob/v17.4.2/lib/main.js#L38
|
|
29
67
|
const LINE =
|
|
30
68
|
/^\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?$/gm;
|
|
31
69
|
|
|
@@ -33,7 +71,7 @@ const PLUGIN_NAME = "DotenvPlugin";
|
|
|
33
71
|
|
|
34
72
|
/**
|
|
35
73
|
* Parse .env file content
|
|
36
|
-
* ported from https://github.com/motdotla/dotenv/blob/
|
|
74
|
+
* ported from https://github.com/motdotla/dotenv/blob/v17.4.2/lib/main.js#L41
|
|
37
75
|
* @param {string | Buffer} src the source content to parse
|
|
38
76
|
* @returns {Env} parsed environment variables object
|
|
39
77
|
*/
|
|
@@ -79,7 +117,7 @@ function parse(src) {
|
|
|
79
117
|
|
|
80
118
|
/**
|
|
81
119
|
* Resolve escape sequences
|
|
82
|
-
* ported from https://github.com/motdotla/dotenv-expand
|
|
120
|
+
* ported from https://github.com/motdotla/dotenv-expand/blob/v13.0.0/lib/main.js#L3
|
|
83
121
|
* @param {string} value value to resolve
|
|
84
122
|
* @returns {string} resolved value
|
|
85
123
|
*/
|
|
@@ -89,7 +127,7 @@ function _resolveEscapeSequences(value) {
|
|
|
89
127
|
|
|
90
128
|
/**
|
|
91
129
|
* Expand environment variable value
|
|
92
|
-
* ported from https://github.com/motdotla/dotenv-expand
|
|
130
|
+
* ported from https://github.com/motdotla/dotenv-expand/blob/v13.0.0/lib/main.js#L7
|
|
93
131
|
* @param {string} value value to expand
|
|
94
132
|
* @param {Record<string, string | undefined>} processEnv process.env object
|
|
95
133
|
* @param {Env} runningParsed running parsed object
|
|
@@ -118,8 +156,8 @@ function expandValue(value, processEnv, runningParsed) {
|
|
|
118
156
|
const opMatch = expression.match(opRegex);
|
|
119
157
|
const splitter = opMatch ? opMatch[0] : null;
|
|
120
158
|
|
|
121
|
-
|
|
122
|
-
|
|
159
|
+
// `split(null)` splits on the string "null", cutting up names containing it
|
|
160
|
+
const r = splitter ? expression.split(splitter) : [expression];
|
|
123
161
|
|
|
124
162
|
/** @type {string} */
|
|
125
163
|
let defaultValue;
|
|
@@ -158,7 +196,7 @@ function expandValue(value, processEnv, runningParsed) {
|
|
|
158
196
|
|
|
159
197
|
/**
|
|
160
198
|
* Expand environment variables in parsed object
|
|
161
|
-
* ported from https://github.com/motdotla/dotenv-expand
|
|
199
|
+
* ported from https://github.com/motdotla/dotenv-expand/blob/v13.0.0/lib/main.js#L65
|
|
162
200
|
* @param {{ parsed: Env, processEnv: Record<string, string | undefined> }} options expand options
|
|
163
201
|
* @returns {{ parsed: Env }} expanded options
|
|
164
202
|
*/
|
|
@@ -198,16 +236,21 @@ function expand(options) {
|
|
|
198
236
|
/**
|
|
199
237
|
* Format environment variables as DefinePlugin definitions
|
|
200
238
|
* @param {Env} env environment variables
|
|
201
|
-
* @returns {Record<string, string>} formatted definitions
|
|
239
|
+
* @returns {Record<string, string | Env>} formatted definitions
|
|
202
240
|
*/
|
|
203
241
|
const envToDefinitions = (env) => {
|
|
204
|
-
const definitions = /** @type {Record<string, string>} */ ({});
|
|
242
|
+
const definitions = /** @type {Record<string, string | Env>} */ ({});
|
|
243
|
+
// one nested definition rather than a `import.meta.env.<key>` per key: a
|
|
244
|
+
// dotted key would otherwise read back as a nested object, not as the key
|
|
245
|
+
const importMetaEnv = /** @type {Env} */ (Object.create(null));
|
|
205
246
|
|
|
206
247
|
for (const [key, value] of Object.entries(env)) {
|
|
207
248
|
const defValue = JSON.stringify(value);
|
|
249
|
+
// `process.env` stays flat — it must not shadow the real one at runtime
|
|
208
250
|
definitions[`process.env.${key}`] = defValue;
|
|
209
|
-
|
|
251
|
+
importMetaEnv[key] = defValue;
|
|
210
252
|
}
|
|
253
|
+
definitions["import.meta.env"] = importMetaEnv;
|
|
211
254
|
|
|
212
255
|
return definitions;
|
|
213
256
|
};
|
|
@@ -257,8 +300,10 @@ class DotenvPlugin {
|
|
|
257
300
|
? compiler.context
|
|
258
301
|
: this.options.dir;
|
|
259
302
|
|
|
260
|
-
/** @type {undefined | Snapshot} */
|
|
303
|
+
/** @type {undefined | InstanceType<Snapshot>} */
|
|
261
304
|
let snapshot;
|
|
305
|
+
/** @type {undefined | DotenvFileError} */
|
|
306
|
+
let loadError;
|
|
262
307
|
|
|
263
308
|
const cache = compiler.getCache(PLUGIN_NAME);
|
|
264
309
|
const identifier = JSON.stringify(
|
|
@@ -267,16 +312,31 @@ class DotenvPlugin {
|
|
|
267
312
|
const itemCache = cache.getItemCache(identifier, null);
|
|
268
313
|
|
|
269
314
|
compiler.hooks.beforeCompile.tapPromise(PLUGIN_NAME, async () => {
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
315
|
+
loadError = undefined;
|
|
316
|
+
try {
|
|
317
|
+
const { parsed, snapshot: newSnapshot } = dir
|
|
318
|
+
? await this._loadEnv(compiler, itemCache, dir)
|
|
319
|
+
: { parsed: {} };
|
|
320
|
+
const env = this._getEnv(prefixes, parsed);
|
|
321
|
+
|
|
322
|
+
definePlugin.definitions = envToDefinitions(env || {});
|
|
323
|
+
snapshot = newSnapshot;
|
|
324
|
+
} catch (err) {
|
|
325
|
+
// reported on the compilation so watch mode recovers when it is fixed
|
|
326
|
+
if (!(err instanceof DotenvFileError)) throw err;
|
|
327
|
+
loadError = err;
|
|
328
|
+
definePlugin.definitions = envToDefinitions({});
|
|
329
|
+
snapshot = undefined;
|
|
330
|
+
}
|
|
277
331
|
});
|
|
278
332
|
|
|
279
333
|
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
334
|
+
if (loadError) {
|
|
335
|
+
compilation.errors.push(loadError);
|
|
336
|
+
compilation.fileDependencies.add(
|
|
337
|
+
/** @type {string} */ (loadError.file)
|
|
338
|
+
);
|
|
339
|
+
}
|
|
280
340
|
if (snapshot) {
|
|
281
341
|
compilation.fileDependencies.addAll(snapshot.getFileIterable());
|
|
282
342
|
compilation.missingDependencies.addAll(snapshot.getMissingIterable());
|
|
@@ -332,7 +392,12 @@ class DotenvPlugin {
|
|
|
332
392
|
fileDependencies.push(filePath);
|
|
333
393
|
return content;
|
|
334
394
|
},
|
|
335
|
-
() => {
|
|
395
|
+
(err) => {
|
|
396
|
+
const code = /** @type {NodeJS.ErrnoException} */ (err).code;
|
|
397
|
+
// only an absent file is normal; anything else is a real fault
|
|
398
|
+
if (code !== "ENOENT" && code !== "ENOTDIR") {
|
|
399
|
+
throw new DotenvFileError(filePath, err);
|
|
400
|
+
}
|
|
336
401
|
// File doesn't exist, add to missingDependencies (this is normal)
|
|
337
402
|
missingDependencies.push(filePath);
|
|
338
403
|
return "";
|
|
@@ -360,9 +425,9 @@ class DotenvPlugin {
|
|
|
360
425
|
* Loads the provided compiler.
|
|
361
426
|
* @private
|
|
362
427
|
* @param {Compiler} compiler compiler
|
|
363
|
-
* @param {ItemCacheFacade} itemCache item cache facade
|
|
428
|
+
* @param {InstanceType<ItemCacheFacade>} itemCache item cache facade
|
|
364
429
|
* @param {string} dir directory to read
|
|
365
|
-
* @returns {Promise<{ parsed: Env, snapshot: Snapshot }>} parsed result and snapshot
|
|
430
|
+
* @returns {Promise<{ parsed: Env, snapshot: InstanceType<Snapshot> }>} parsed result and snapshot
|
|
366
431
|
*/
|
|
367
432
|
async _loadEnv(compiler, itemCache, dir) {
|
|
368
433
|
const fs = /** @type {InputFileSystem} */ (compiler.inputFileSystem);
|
|
@@ -9,10 +9,14 @@ const EntryOptionPlugin = require("./EntryOptionPlugin");
|
|
|
9
9
|
const EntryPlugin = require("./EntryPlugin");
|
|
10
10
|
const EntryDependency = require("./dependencies/EntryDependency");
|
|
11
11
|
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
/**
|
|
13
|
+
* @import {
|
|
14
|
+
* EntryDescriptionNormalized,
|
|
15
|
+
* EntryStatic,
|
|
16
|
+
* EntryStaticNormalized
|
|
17
|
+
* } from "../declarations/WebpackOptions"
|
|
18
|
+
*/
|
|
19
|
+
/** @import Compiler from "./Compiler" */
|
|
16
20
|
|
|
17
21
|
const PLUGIN_NAME = "DynamicEntryPlugin";
|
|
18
22
|
|
package/lib/EntryOptionPlugin.js
CHANGED
|
@@ -7,10 +7,14 @@
|
|
|
7
7
|
|
|
8
8
|
const { SyncBailHook } = require("tapable");
|
|
9
9
|
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
/**
|
|
11
|
+
* @import {
|
|
12
|
+
* EntryDescriptionNormalized as EntryDescription,
|
|
13
|
+
* EntryNormalized as Entry
|
|
14
|
+
* } from "../declarations/WebpackOptions"
|
|
15
|
+
*/
|
|
16
|
+
/** @import Compiler from "./Compiler" */
|
|
17
|
+
/** @import { EntryOptions } from "./Entrypoint" */
|
|
14
18
|
|
|
15
19
|
/**
|
|
16
20
|
* @typedef {object} EntryOptionPluginHooks
|