@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
|
@@ -16,20 +16,28 @@ const ImportDependency = require("./dependencies/ImportDependency");
|
|
|
16
16
|
const { coreModules } = require("./node/nodeBuiltins");
|
|
17
17
|
const { cachedSetProperty, resolveByProperty } = require("./util/cleverMerge");
|
|
18
18
|
|
|
19
|
-
/** @
|
|
20
|
-
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
/** @
|
|
19
|
+
/** @import { ResolveContext } from "enhanced-resolve" */
|
|
20
|
+
/**
|
|
21
|
+
* @import {
|
|
22
|
+
* ResolveOptions,
|
|
23
|
+
* ExternalsType,
|
|
24
|
+
* ExternalItem,
|
|
25
|
+
* ExternalItemValue,
|
|
26
|
+
* ExternalItemObjectKnown,
|
|
27
|
+
* ExternalItemObjectUnknown,
|
|
28
|
+
* ExternalItemInterop,
|
|
29
|
+
* Externals
|
|
30
|
+
* } from "../declarations/WebpackOptions"
|
|
31
|
+
*/
|
|
32
|
+
/** @import Dependency from "./Dependency" */
|
|
33
|
+
/** @import { DependencyMeta, ExternalModuleRequest } from "./ExternalModule" */
|
|
34
|
+
/**
|
|
35
|
+
* @import {
|
|
36
|
+
* IssuerLayer,
|
|
37
|
+
* ModuleFactoryCreateDataContextInfo
|
|
38
|
+
* } from "./ModuleFactory"
|
|
39
|
+
*/
|
|
40
|
+
/** @import NormalModuleFactory from "./NormalModuleFactory" */
|
|
33
41
|
|
|
34
42
|
/** @typedef {((context: string, request: string, callback: (err?: Error | null, result?: string | false, resolveRequest?: import("enhanced-resolve").ResolveRequest) => void) => void)} ExternalItemFunctionDataGetResolveCallbackResult */
|
|
35
43
|
/** @typedef {((context: string, request: string) => Promise<string>)} ExternalItemFunctionDataGetResolveResult */
|
|
@@ -43,6 +51,7 @@ const { cachedSetProperty, resolveByProperty } = require("./util/cleverMerge");
|
|
|
43
51
|
* @property {string} dependencyType the category of the referencing dependency
|
|
44
52
|
* @property {ExternalItemFunctionDataGetResolve} getResolve get a resolve function with the current resolver options
|
|
45
53
|
* @property {string} request the request as written by the user in the require/import expression/statement
|
|
54
|
+
* @property {string} originalRequest same as `request`, except for an element of a context module (a request containing an expression), where it is the request as written by the user instead of the one relative to the resolved context directory
|
|
46
55
|
*/
|
|
47
56
|
|
|
48
57
|
/** @typedef {((data: ExternalItemFunctionData, callback: (err?: (Error | null), result?: ExternalItemValue) => void) => void)} ExternalItemFunctionCallback */
|
|
@@ -115,7 +124,12 @@ const resolveLayer = (obj, layer) => {
|
|
|
115
124
|
return result;
|
|
116
125
|
};
|
|
117
126
|
|
|
118
|
-
|
|
127
|
+
// the keys `ExternalItemValueWithOptions` allows, mirroring the schema
|
|
128
|
+
const OPTIONS_FORM_KEYS = new Set(["external", "sideEffects"]);
|
|
129
|
+
|
|
130
|
+
/** @typedef {string | string[] | boolean | Record<string, string | string[]>} ExternalTargetValue */
|
|
131
|
+
/** @typedef {{ external: ExternalTargetValue, sideEffects?: boolean }} ExternalValueWithOptions */
|
|
132
|
+
/** @typedef {ExternalTargetValue | ExternalValueWithOptions} ExternalValue */
|
|
119
133
|
|
|
120
134
|
const PLUGIN_NAME = "ExternalModuleFactoryPlugin";
|
|
121
135
|
|
|
@@ -145,6 +159,14 @@ class ExternalModuleFactoryPlugin {
|
|
|
145
159
|
const contextInfo = data.contextInfo;
|
|
146
160
|
const dependency = data.dependencies[0];
|
|
147
161
|
const dependencyType = data.dependencyType;
|
|
162
|
+
const request = dependency.request;
|
|
163
|
+
// a context element's request is relative to the resolved directory
|
|
164
|
+
// (`./file.mjs`), externals are written against what the user wrote
|
|
165
|
+
const originalRequest =
|
|
166
|
+
dependency instanceof ContextElementDependency
|
|
167
|
+
? dependency.originalRequest
|
|
168
|
+
: request;
|
|
169
|
+
const hasOriginalRequest = originalRequest !== request;
|
|
148
170
|
|
|
149
171
|
/** @typedef {(err?: Error | null, externalModule?: ExternalModule) => void} HandleExternalCallback */
|
|
150
172
|
|
|
@@ -156,12 +178,33 @@ class ExternalModuleFactoryPlugin {
|
|
|
156
178
|
* @returns {void}
|
|
157
179
|
*/
|
|
158
180
|
const handleExternal = (value, type, callback) => {
|
|
159
|
-
|
|
181
|
+
/** @type {boolean | undefined} */
|
|
182
|
+
let sideEffects;
|
|
183
|
+
/** @type {ExternalTargetValue} */
|
|
184
|
+
let target;
|
|
185
|
+
// the options form carries the target under `external`; a target
|
|
186
|
+
// map holding an `external` type key keeps its own meaning
|
|
187
|
+
if (
|
|
188
|
+
typeof value === "object" &&
|
|
189
|
+
value !== null &&
|
|
190
|
+
!Array.isArray(value) &&
|
|
191
|
+
Object.prototype.hasOwnProperty.call(value, "external") &&
|
|
192
|
+
Object.keys(value).every((key) => OPTIONS_FORM_KEYS.has(key))
|
|
193
|
+
) {
|
|
194
|
+
const withOptions =
|
|
195
|
+
/** @type {ExternalValueWithOptions} */
|
|
196
|
+
(value);
|
|
197
|
+
sideEffects = withOptions.sideEffects;
|
|
198
|
+
target = withOptions.external;
|
|
199
|
+
} else {
|
|
200
|
+
target = /** @type {ExternalTargetValue} */ (value);
|
|
201
|
+
}
|
|
202
|
+
if (target === false) {
|
|
160
203
|
// Not externals, fallback to original factory
|
|
161
204
|
return callback();
|
|
162
205
|
}
|
|
163
|
-
/** @type {
|
|
164
|
-
let externalConfig =
|
|
206
|
+
/** @type {ExternalModuleRequest} */
|
|
207
|
+
let externalConfig = target === true ? originalRequest : target;
|
|
165
208
|
// `interop` is a reserved key on the object form, not a target;
|
|
166
209
|
// pull it out so the rest stays a pure externalsType->request map.
|
|
167
210
|
/** @type {ExternalItemInterop | undefined} */
|
|
@@ -244,8 +287,12 @@ class ExternalModuleFactoryPlugin {
|
|
|
244
287
|
};
|
|
245
288
|
}
|
|
246
289
|
|
|
290
|
+
// a css `url()` reads the url out of the external: no js wrapper
|
|
291
|
+
// TODO webpack 6 drop "css-url" once the alias is removed
|
|
247
292
|
if (
|
|
248
|
-
resolvedType === "asset"
|
|
293
|
+
(resolvedType === "asset" ||
|
|
294
|
+
resolvedType === ASSET_URL_TYPE ||
|
|
295
|
+
resolvedType === "css-url") &&
|
|
249
296
|
dependency instanceof CssUrlDependency
|
|
250
297
|
) {
|
|
251
298
|
dependencyMeta = { sourceType: ASSET_URL_TYPE };
|
|
@@ -256,9 +303,10 @@ class ExternalModuleFactoryPlugin {
|
|
|
256
303
|
new ExternalModule(
|
|
257
304
|
externalConfig,
|
|
258
305
|
resolvedType,
|
|
259
|
-
|
|
306
|
+
originalRequest,
|
|
260
307
|
dependencyMeta,
|
|
261
|
-
interop
|
|
308
|
+
interop,
|
|
309
|
+
sideEffects
|
|
262
310
|
)
|
|
263
311
|
);
|
|
264
312
|
};
|
|
@@ -272,10 +320,11 @@ class ExternalModuleFactoryPlugin {
|
|
|
272
320
|
const handleExternals = (externals, callback) => {
|
|
273
321
|
if (typeof externals === "string") {
|
|
274
322
|
if (
|
|
275
|
-
externals ===
|
|
276
|
-
externals ===
|
|
323
|
+
externals === request ||
|
|
324
|
+
(hasOriginalRequest && externals === originalRequest) ||
|
|
325
|
+
externals === getAlternateCoreModuleRequest(request)
|
|
277
326
|
) {
|
|
278
|
-
return handleExternal(
|
|
327
|
+
return handleExternal(originalRequest, undefined, callback);
|
|
279
328
|
}
|
|
280
329
|
} else if (Array.isArray(externals)) {
|
|
281
330
|
let i = 0;
|
|
@@ -311,8 +360,11 @@ class ExternalModuleFactoryPlugin {
|
|
|
311
360
|
next();
|
|
312
361
|
return;
|
|
313
362
|
} else if (externals instanceof RegExp) {
|
|
314
|
-
if (
|
|
315
|
-
|
|
363
|
+
if (
|
|
364
|
+
externals.test(request) ||
|
|
365
|
+
(hasOriginalRequest && externals.test(originalRequest))
|
|
366
|
+
) {
|
|
367
|
+
return handleExternal(originalRequest, undefined, callback);
|
|
316
368
|
}
|
|
317
369
|
} else if (typeof externals === "function") {
|
|
318
370
|
/**
|
|
@@ -332,17 +384,13 @@ class ExternalModuleFactoryPlugin {
|
|
|
332
384
|
};
|
|
333
385
|
if (externals.length === 3) {
|
|
334
386
|
// TODO webpack 6 remove this
|
|
335
|
-
callDeprecatedExternals(
|
|
336
|
-
externals,
|
|
337
|
-
context,
|
|
338
|
-
dependency.request,
|
|
339
|
-
cb
|
|
340
|
-
);
|
|
387
|
+
callDeprecatedExternals(externals, context, request, cb);
|
|
341
388
|
} else {
|
|
342
389
|
const promise = externals(
|
|
343
390
|
{
|
|
344
391
|
context,
|
|
345
|
-
request
|
|
392
|
+
request,
|
|
393
|
+
originalRequest,
|
|
346
394
|
dependencyType,
|
|
347
395
|
contextInfo,
|
|
348
396
|
getResolve: (options) => (context, request, callback) => {
|
|
@@ -401,21 +449,29 @@ class ExternalModuleFactoryPlugin {
|
|
|
401
449
|
(contextInfo.issuerLayer)
|
|
402
450
|
);
|
|
403
451
|
if (
|
|
452
|
+
Object.prototype.hasOwnProperty.call(resolvedExternals, request)
|
|
453
|
+
) {
|
|
454
|
+
return handleExternal(
|
|
455
|
+
resolvedExternals[request],
|
|
456
|
+
undefined,
|
|
457
|
+
callback
|
|
458
|
+
);
|
|
459
|
+
}
|
|
460
|
+
if (
|
|
461
|
+
hasOriginalRequest &&
|
|
404
462
|
Object.prototype.hasOwnProperty.call(
|
|
405
463
|
resolvedExternals,
|
|
406
|
-
|
|
464
|
+
originalRequest
|
|
407
465
|
)
|
|
408
466
|
) {
|
|
409
467
|
return handleExternal(
|
|
410
|
-
resolvedExternals[
|
|
468
|
+
resolvedExternals[originalRequest],
|
|
411
469
|
undefined,
|
|
412
470
|
callback
|
|
413
471
|
);
|
|
414
472
|
}
|
|
415
473
|
// Fall back to the `node:`-prefixed/unprefixed core module form.
|
|
416
|
-
const alternateRequest = getAlternateCoreModuleRequest(
|
|
417
|
-
dependency.request
|
|
418
|
-
);
|
|
474
|
+
const alternateRequest = getAlternateCoreModuleRequest(request);
|
|
419
475
|
if (
|
|
420
476
|
alternateRequest !== undefined &&
|
|
421
477
|
Object.prototype.hasOwnProperty.call(
|
|
@@ -439,4 +495,7 @@ class ExternalModuleFactoryPlugin {
|
|
|
439
495
|
}
|
|
440
496
|
}
|
|
441
497
|
|
|
498
|
+
ExternalModuleFactoryPlugin.getAlternateCoreModuleRequest =
|
|
499
|
+
getAlternateCoreModuleRequest;
|
|
500
|
+
|
|
442
501
|
module.exports = ExternalModuleFactoryPlugin;
|
package/lib/ExternalsPlugin.js
CHANGED
|
@@ -9,11 +9,15 @@ const { ModuleExternalInitFragment } = require("./ExternalModule");
|
|
|
9
9
|
const ExternalModuleFactoryPlugin = require("./ExternalModuleFactoryPlugin");
|
|
10
10
|
const ConcatenatedModule = require("./optimize/ConcatenatedModule");
|
|
11
11
|
|
|
12
|
-
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
/**
|
|
13
|
+
* @import {
|
|
14
|
+
* ExternalsType,
|
|
15
|
+
* Externals
|
|
16
|
+
* } from "../declarations/WebpackOptions"
|
|
17
|
+
*/
|
|
18
|
+
/** @import Compiler from "./Compiler" */
|
|
19
|
+
/** @import { Imported } from "./ExternalModule" */
|
|
20
|
+
/** @import Dependency from "./Dependency" */
|
|
17
21
|
|
|
18
22
|
const PLUGIN_NAME = "ExternalsPlugin";
|
|
19
23
|
|
|
@@ -53,7 +57,7 @@ class ExternalsPlugin {
|
|
|
53
57
|
|
|
54
58
|
const chunkInitFragments = moduleInfo.chunkInitFragments;
|
|
55
59
|
const moduleExternalInitFragments =
|
|
56
|
-
/** @type {ModuleExternalInitFragment[]} */
|
|
60
|
+
/** @type {InstanceType<ModuleExternalInitFragment>[]} */
|
|
57
61
|
(
|
|
58
62
|
chunkInitFragments
|
|
59
63
|
? /** @type {unknown[]} */
|
package/lib/FileSystemInfo.js
CHANGED
|
@@ -10,6 +10,7 @@ const { isAbsolute } = require("path");
|
|
|
10
10
|
const { create: createResolver } = require("enhanced-resolve");
|
|
11
11
|
const asyncLib = require("neo-async");
|
|
12
12
|
const { DEFAULTS } = require("./config/defaults");
|
|
13
|
+
const { collectCjsRequireSpecifiers } = require("./javascript/syntax");
|
|
13
14
|
const AsyncQueue = require("./util/AsyncQueue");
|
|
14
15
|
const StackedCacheMap = require("./util/StackedCacheMap");
|
|
15
16
|
const createHash = require("./util/createHash");
|
|
@@ -18,16 +19,20 @@ const makeSerializable = require("./util/makeSerializable");
|
|
|
18
19
|
const memoize = require("./util/memoize");
|
|
19
20
|
const processAsyncTree = require("./util/processAsyncTree");
|
|
20
21
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
/** @
|
|
25
|
-
/** @
|
|
26
|
-
/** @
|
|
27
|
-
/** @
|
|
28
|
-
/** @
|
|
29
|
-
/**
|
|
30
|
-
|
|
22
|
+
// only the mjs build-dependency walk needs it
|
|
23
|
+
const getEsModuleLexer = memoize(() => require("es-module-lexer"));
|
|
24
|
+
|
|
25
|
+
/** @import { ResolveRequest, ResolveFunctionAsync } from "enhanced-resolve" */
|
|
26
|
+
/** @import { HashFunction } from "../declarations/WebpackOptions" */
|
|
27
|
+
/** @import { Logger } from "./logging/Logger" */
|
|
28
|
+
/** @import WebpackError from "./errors/WebpackError" */
|
|
29
|
+
/** @import { JsonObject, IStats, InputFileSystem } from "./util/fs" */
|
|
30
|
+
/**
|
|
31
|
+
* @import {
|
|
32
|
+
* ObjectDeserializerContext,
|
|
33
|
+
* ObjectSerializerContext
|
|
34
|
+
* } from "./serialization/ObjectMiddleware"
|
|
35
|
+
*/
|
|
31
36
|
/**
|
|
32
37
|
* Defines the processor callback type used by this module.
|
|
33
38
|
* @template T
|
|
@@ -1202,6 +1207,15 @@ const getManagedItem = (managedPath, path) => {
|
|
|
1202
1207
|
return path.slice(0, i);
|
|
1203
1208
|
};
|
|
1204
1209
|
|
|
1210
|
+
/**
|
|
1211
|
+
* The managed directory a `snapshot.managedPaths` RegExp matched. The schema
|
|
1212
|
+
* documents it as matching that directory, so a capture-less pattern is it.
|
|
1213
|
+
* @param {RegExpExecArray} match a match of a managed path RegExp
|
|
1214
|
+
* @returns {string} the managed directory
|
|
1215
|
+
*/
|
|
1216
|
+
const getManagedPathFromMatch = (match) =>
|
|
1217
|
+
match[1] === undefined ? match[0] : match[1];
|
|
1218
|
+
|
|
1205
1219
|
/**
|
|
1206
1220
|
* Gets resolved timestamp.
|
|
1207
1221
|
* @template {ContextFileSystemInfoEntry | ContextTimestampAndHash} T
|
|
@@ -1235,60 +1249,10 @@ const addAll = (source, target) => {
|
|
|
1235
1249
|
for (const key of source) target.add(key);
|
|
1236
1250
|
};
|
|
1237
1251
|
|
|
1238
|
-
const getEsModuleLexer = memoize(() => require("es-module-lexer"));
|
|
1239
|
-
|
|
1240
|
-
const getAcorn = memoize(/* istanbul ignore next */ () => require("acorn"));
|
|
1241
|
-
|
|
1242
1252
|
// Bun doesn't populate `require.cache` `module.children`, so the CJS build-dependency
|
|
1243
1253
|
// walk needs a source-parsing fallback there. Node/Deno populate it — never pay for it.
|
|
1244
1254
|
const IS_BUN = Boolean(process.versions.bun);
|
|
1245
1255
|
|
|
1246
|
-
/**
|
|
1247
|
-
* Collects static `require("literal")` specifiers from CommonJS source. Used as a
|
|
1248
|
-
* fallback where `require.cache` children aren't populated (e.g. Bun), so build
|
|
1249
|
-
* dependencies of a CJS file are still tracked. Dynamic requires can't be seen here.
|
|
1250
|
-
* @param {string} source source
|
|
1251
|
-
* @returns {Set<string>} required specifiers
|
|
1252
|
-
*/
|
|
1253
|
-
// Bun-only: exercised by BuildDependencies.longtest under the Bun CI job (no coverage upload).
|
|
1254
|
-
/* istanbul ignore next */
|
|
1255
|
-
const parseCjsRequires = (source) => {
|
|
1256
|
-
/** @type {Set<string>} */
|
|
1257
|
-
const requires = new Set();
|
|
1258
|
-
const ast = getAcorn().parse(source, {
|
|
1259
|
-
ecmaVersion: "latest",
|
|
1260
|
-
sourceType: "script",
|
|
1261
|
-
allowReturnOutsideFunction: true
|
|
1262
|
-
});
|
|
1263
|
-
/** @type {EXPECTED_ANY[]} */
|
|
1264
|
-
const stack = [ast];
|
|
1265
|
-
while (stack.length > 0) {
|
|
1266
|
-
const node = stack.pop();
|
|
1267
|
-
if (!node || typeof node.type !== "string") continue;
|
|
1268
|
-
if (
|
|
1269
|
-
node.type === "CallExpression" &&
|
|
1270
|
-
node.callee.type === "Identifier" &&
|
|
1271
|
-
node.callee.name === "require" &&
|
|
1272
|
-
node.arguments.length === 1 &&
|
|
1273
|
-
node.arguments[0].type === "Literal" &&
|
|
1274
|
-
typeof node.arguments[0].value === "string"
|
|
1275
|
-
) {
|
|
1276
|
-
requires.add(node.arguments[0].value);
|
|
1277
|
-
}
|
|
1278
|
-
for (const key of Object.keys(node)) {
|
|
1279
|
-
const value = node[key];
|
|
1280
|
-
if (Array.isArray(value)) {
|
|
1281
|
-
for (const item of value) {
|
|
1282
|
-
if (item && typeof item.type === "string") stack.push(item);
|
|
1283
|
-
}
|
|
1284
|
-
} else if (value && typeof value.type === "string") {
|
|
1285
|
-
stack.push(value);
|
|
1286
|
-
}
|
|
1287
|
-
}
|
|
1288
|
-
}
|
|
1289
|
-
return requires;
|
|
1290
|
-
};
|
|
1291
|
-
|
|
1292
1256
|
/** @typedef {Set<string>} LoggedPaths */
|
|
1293
1257
|
|
|
1294
1258
|
/** @typedef {FileSystemInfoEntry | ExistenceOnlyTimeEntry | "ignore" | null} FileTimestamp */
|
|
@@ -2290,12 +2254,11 @@ class FileSystemInfo {
|
|
|
2290
2254
|
try {
|
|
2291
2255
|
const context = dirname(this.fs, path);
|
|
2292
2256
|
const source = /** @type {Buffer} */ (content).toString();
|
|
2293
|
-
|
|
2294
|
-
|
|
2295
|
-
|
|
2257
|
+
for (const dependency of collectCjsRequireSpecifiers(
|
|
2258
|
+
source
|
|
2259
|
+
)) {
|
|
2296
2260
|
if (dependency.startsWith("node:")) continue;
|
|
2297
2261
|
if (builtinModules.has(dependency)) continue;
|
|
2298
|
-
if (added.has(dependency)) continue;
|
|
2299
2262
|
push({
|
|
2300
2263
|
type: RBDT_RESOLVE_CJS_FILE,
|
|
2301
2264
|
context,
|
|
@@ -2304,7 +2267,6 @@ class FileSystemInfo {
|
|
|
2304
2267
|
expected: false,
|
|
2305
2268
|
issuer: job
|
|
2306
2269
|
});
|
|
2307
|
-
added.add(dependency);
|
|
2308
2270
|
}
|
|
2309
2271
|
} catch (_err) {
|
|
2310
2272
|
// Source we can't parse as CommonJS — ignore its dependencies.
|
|
@@ -2710,7 +2672,10 @@ class FileSystemInfo {
|
|
|
2710
2672
|
for (const managedPath of this.managedPathsRegExps) {
|
|
2711
2673
|
const match = managedPath.exec(path);
|
|
2712
2674
|
if (match) {
|
|
2713
|
-
const managedItem = getManagedItem(
|
|
2675
|
+
const managedItem = getManagedItem(
|
|
2676
|
+
getManagedPathFromMatch(match),
|
|
2677
|
+
path
|
|
2678
|
+
);
|
|
2714
2679
|
if (managedItem) {
|
|
2715
2680
|
classificationCache.set(path, managedItem);
|
|
2716
2681
|
managedItems.add(managedItem);
|
|
@@ -3968,7 +3933,10 @@ class FileSystemInfo {
|
|
|
3968
3933
|
for (const managedPath of this.managedPathsRegExps) {
|
|
3969
3934
|
const match = managedPath.exec(path);
|
|
3970
3935
|
if (match) {
|
|
3971
|
-
const managedItem = getManagedItem(
|
|
3936
|
+
const managedItem = getManagedItem(
|
|
3937
|
+
getManagedPathFromMatch(match),
|
|
3938
|
+
path
|
|
3939
|
+
);
|
|
3972
3940
|
if (managedItem) {
|
|
3973
3941
|
// construct timestampHash from managed info
|
|
3974
3942
|
return this.managedItemQueue.add(managedItem, (err, info) => {
|
|
@@ -4332,12 +4300,17 @@ class FileSystemInfo {
|
|
|
4332
4300
|
/**
|
|
4333
4301
|
* Processes the provided timestamp.
|
|
4334
4302
|
* @param {ContextTimestamp} timestamp timestamp
|
|
4335
|
-
* @param {ContextHash} hash hash
|
|
4303
|
+
* @param {ContextHash | null} hash hash
|
|
4336
4304
|
*/
|
|
4337
4305
|
const finalize = (timestamp, hash) => {
|
|
4306
|
+
// Merging two `null` reads yields `{}`, which reads as "exists, no hash" (#21636)
|
|
4338
4307
|
const result =
|
|
4339
4308
|
/** @type {ContextTimestampAndHash} */
|
|
4340
|
-
(
|
|
4309
|
+
(
|
|
4310
|
+
hash === null || timestamp === "ignore"
|
|
4311
|
+
? hash
|
|
4312
|
+
: { ...timestamp, ...hash }
|
|
4313
|
+
);
|
|
4341
4314
|
this._contextTshs.set(path, result);
|
|
4342
4315
|
callback(null, result);
|
|
4343
4316
|
};
|
|
@@ -4655,5 +4628,6 @@ class FileSystemInfo {
|
|
|
4655
4628
|
}
|
|
4656
4629
|
}
|
|
4657
4630
|
|
|
4631
|
+
FileSystemInfo.Snapshot = Snapshot;
|
|
4632
|
+
|
|
4658
4633
|
module.exports = FileSystemInfo;
|
|
4659
|
-
module.exports.Snapshot = Snapshot;
|
|
@@ -7,9 +7,8 @@
|
|
|
7
7
|
|
|
8
8
|
const { getEntryRuntime, mergeRuntimeOwned } = require("./util/runtime");
|
|
9
9
|
|
|
10
|
-
/** @
|
|
11
|
-
/** @
|
|
12
|
-
/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
|
|
10
|
+
/** @import Compiler from "./Compiler" */
|
|
11
|
+
/** @import { RuntimeSpec } from "./util/runtime" */
|
|
13
12
|
|
|
14
13
|
const PLUGIN_NAME = "FlagAllModulesAsUsedPlugin";
|
|
15
14
|
class FlagAllModulesAsUsedPlugin {
|
|
@@ -7,25 +7,27 @@
|
|
|
7
7
|
|
|
8
8
|
const asyncLib = require("neo-async");
|
|
9
9
|
const Queue = require("./util/Queue");
|
|
10
|
+
const { compareModulesByIdentifier } = require("./util/comparators");
|
|
10
11
|
const createHash = require("./util/createHash");
|
|
11
12
|
|
|
12
|
-
/** @
|
|
13
|
-
/** @
|
|
14
|
-
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
/** @
|
|
22
|
-
/** @
|
|
23
|
-
/** @
|
|
13
|
+
/** @import Compiler from "./Compiler" */
|
|
14
|
+
/** @import DependenciesBlock from "./DependenciesBlock" */
|
|
15
|
+
/**
|
|
16
|
+
* @import Dependency, {
|
|
17
|
+
* ExportSpec,
|
|
18
|
+
* ExportsSpec,
|
|
19
|
+
* ExportInfoName
|
|
20
|
+
* } from "./Dependency"
|
|
21
|
+
*/
|
|
22
|
+
/** @import ExportsInfo, { RestoreProvidedData } from "./ExportsInfo" */
|
|
23
|
+
/** @import { HashFunction } from "../declarations/WebpackOptions" */
|
|
24
|
+
/** @import LazyBarrelController from "./LazyBarrel" */
|
|
25
|
+
/** @import Module, { BuildInfo } from "./Module" */
|
|
24
26
|
|
|
25
27
|
const PLUGIN_NAME = "FlagDependencyExportsPlugin";
|
|
26
28
|
const PLUGIN_LOGGER_NAME = `webpack.${PLUGIN_NAME}`;
|
|
27
29
|
|
|
28
|
-
/** @typedef {{ etag: string, data: RestoreProvidedData }} MemCacheEntry */
|
|
30
|
+
/** @typedef {{ etag: string, data: InstanceType<RestoreProvidedData> }} MemCacheEntry */
|
|
29
31
|
|
|
30
32
|
/**
|
|
31
33
|
* @param {Module} module the module
|
|
@@ -70,6 +72,8 @@ class FlagDependencyExportsPlugin {
|
|
|
70
72
|
|
|
71
73
|
/** @type {Queue<Module>} */
|
|
72
74
|
const queue = new Queue();
|
|
75
|
+
/** @type {Set<Module>} */
|
|
76
|
+
const modulesToAnalyse = new Set();
|
|
73
77
|
|
|
74
78
|
// Step 1: Try to restore cached provided export info from cache
|
|
75
79
|
logger.time("restore cached provided exports");
|
|
@@ -97,8 +101,8 @@ class FlagDependencyExportsPlugin {
|
|
|
97
101
|
"string"
|
|
98
102
|
) {
|
|
99
103
|
statFlaggedUncached++;
|
|
100
|
-
//
|
|
101
|
-
|
|
104
|
+
// Determined below, in a stable order
|
|
105
|
+
modulesToAnalyse.add(module);
|
|
102
106
|
exportsInfo.setHasProvideInfo();
|
|
103
107
|
return callback();
|
|
104
108
|
}
|
|
@@ -133,8 +137,8 @@ class FlagDependencyExportsPlugin {
|
|
|
133
137
|
exportsInfo.restoreProvided(result);
|
|
134
138
|
} else {
|
|
135
139
|
statNotCached++;
|
|
136
|
-
// Without cached info
|
|
137
|
-
|
|
140
|
+
// Without cached info determine the exports below
|
|
141
|
+
modulesToAnalyse.add(module);
|
|
138
142
|
exportsInfo.setHasProvideInfo();
|
|
139
143
|
}
|
|
140
144
|
callback();
|
|
@@ -145,6 +149,59 @@ class FlagDependencyExportsPlugin {
|
|
|
145
149
|
logger.timeEnd("restore cached provided exports");
|
|
146
150
|
if (err) return callback(err);
|
|
147
151
|
|
|
152
|
+
// Seed the queue with targets before the modules that read
|
|
153
|
+
// them. Enqueueing at the two branches above ordered the work by
|
|
154
|
+
// how fast each cache lookup answered — one is synchronous, the
|
|
155
|
+
// other a `cache.get` callback — so the persistent cache decided
|
|
156
|
+
// it. A module analysed before the module it re-exports from
|
|
157
|
+
// reads exports that are not determined yet and over-estimates,
|
|
158
|
+
// and this loop can add exports info but never retract it, so
|
|
159
|
+
// the over-estimate survives the pass that corrects it. The
|
|
160
|
+
// roots are sorted so the walk is stable, and post-order visits
|
|
161
|
+
// each module after everything it points at.
|
|
162
|
+
/** @type {Set<Module>} */
|
|
163
|
+
const visited = new Set();
|
|
164
|
+
/** @type {Module[]} */
|
|
165
|
+
const stack = [];
|
|
166
|
+
/** @type {Set<Module>} */
|
|
167
|
+
const expanded = new Set();
|
|
168
|
+
for (const root of [...modulesToAnalyse].sort(
|
|
169
|
+
compareModulesByIdentifier
|
|
170
|
+
)) {
|
|
171
|
+
if (visited.has(root)) continue;
|
|
172
|
+
stack.push(root);
|
|
173
|
+
while (stack.length > 0) {
|
|
174
|
+
const current = stack[stack.length - 1];
|
|
175
|
+
if (expanded.has(current)) {
|
|
176
|
+
stack.pop();
|
|
177
|
+
if (!visited.has(current)) {
|
|
178
|
+
visited.add(current);
|
|
179
|
+
if (modulesToAnalyse.has(current)) {
|
|
180
|
+
queue.enqueue(current);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
expanded.add(current);
|
|
186
|
+
for (const connection of moduleGraph.getOutgoingConnections(
|
|
187
|
+
current
|
|
188
|
+
)) {
|
|
189
|
+
const target = connection.module;
|
|
190
|
+
// A module restored from cache is already final, so
|
|
191
|
+
// nothing has to be ordered before it and the walk stops
|
|
192
|
+
// there — on an incremental build that is most of them.
|
|
193
|
+
if (
|
|
194
|
+
target !== undefined &&
|
|
195
|
+
target !== null &&
|
|
196
|
+
modulesToAnalyse.has(target) &&
|
|
197
|
+
!expanded.has(target)
|
|
198
|
+
) {
|
|
199
|
+
stack.push(target);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
148
205
|
/** @type {Set<Module>} */
|
|
149
206
|
const modulesToStore = new Set();
|
|
150
207
|
|
|
@@ -489,7 +546,7 @@ class FlagDependencyExportsPlugin {
|
|
|
489
546
|
}
|
|
490
547
|
);
|
|
491
548
|
|
|
492
|
-
/** @type {WeakMap<Module, RestoreProvidedData
|
|
549
|
+
/** @type {WeakMap<Module, InstanceType<RestoreProvidedData>>} */
|
|
493
550
|
const providedExportsCache = new WeakMap();
|
|
494
551
|
compilation.hooks.rebuildModule.tap(PLUGIN_NAME, (module) => {
|
|
495
552
|
providedExportsCache.set(
|
|
@@ -499,7 +556,7 @@ class FlagDependencyExportsPlugin {
|
|
|
499
556
|
});
|
|
500
557
|
compilation.hooks.finishRebuildingModule.tap(PLUGIN_NAME, (module) => {
|
|
501
558
|
moduleGraph.getExportsInfo(module).restoreProvided(
|
|
502
|
-
/** @type {RestoreProvidedData} */
|
|
559
|
+
/** @type {InstanceType<RestoreProvidedData>} */
|
|
503
560
|
(providedExportsCache.get(module))
|
|
504
561
|
);
|
|
505
562
|
});
|