webpack 5.59.0 → 5.94.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 +48 -38
- package/bin/webpack.js +34 -10
- package/hot/dev-server.js +19 -5
- package/hot/lazy-compilation-node.js +13 -1
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +23 -4
- package/hot/only-dev-server.js +3 -2
- package/hot/poll.js +5 -2
- package/hot/signal.js +6 -2
- package/lib/APIPlugin.js +226 -122
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +2 -1
- package/lib/BannerPlugin.js +33 -12
- package/lib/Cache.js +16 -12
- package/lib/CacheFacade.js +13 -16
- package/lib/CaseSensitiveModulesWarning.js +8 -8
- package/lib/Chunk.js +60 -33
- package/lib/ChunkGraph.js +207 -72
- package/lib/ChunkGroup.js +40 -20
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +117 -32
- package/lib/CodeGenerationResults.js +8 -7
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +712 -392
- package/lib/Compiler.js +393 -172
- package/lib/ConcatenationScope.js +10 -13
- package/lib/ConditionalInitFragment.js +22 -14
- package/lib/ConstPlugin.js +104 -64
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +283 -108
- package/lib/ContextModuleFactory.js +151 -63
- package/lib/ContextReplacementPlugin.js +25 -10
- package/lib/CssModule.js +166 -0
- package/lib/DefinePlugin.js +254 -148
- package/lib/DelegatedModule.js +29 -6
- package/lib/DelegatedModuleFactoryPlugin.js +42 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +17 -2
- package/lib/Dependency.js +58 -29
- package/lib/DependencyTemplate.js +24 -3
- package/lib/DependencyTemplates.js +2 -2
- package/lib/DllEntryPlugin.js +18 -1
- package/lib/DllModule.js +21 -4
- package/lib/DllModuleFactory.js +2 -1
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +50 -19
- package/lib/EntryOptionPlugin.js +6 -1
- package/lib/EntryPlugin.js +7 -4
- package/lib/Entrypoint.js +2 -2
- package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
- package/lib/EnvironmentPlugin.js +5 -2
- package/lib/ErrorHelpers.js +65 -26
- package/lib/EvalDevToolModulePlugin.js +37 -13
- package/lib/EvalSourceMapDevToolPlugin.js +50 -20
- package/lib/ExportsInfo.js +234 -133
- package/lib/ExportsInfoApiPlugin.js +31 -15
- package/lib/ExternalModule.js +391 -129
- package/lib/ExternalModuleFactoryPlugin.js +65 -17
- package/lib/FileSystemInfo.js +1038 -523
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +352 -349
- package/lib/FlagDependencyUsagePlugin.js +10 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +16 -8
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +11 -13
- package/lib/HotModuleReplacementPlugin.js +221 -128
- package/lib/IgnoreErrorModuleFactory.js +4 -4
- package/lib/IgnorePlugin.js +5 -4
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +39 -15
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +45 -16
- package/lib/LoaderOptionsPlugin.js +13 -3
- package/lib/MainTemplate.js +74 -21
- package/lib/Module.js +155 -34
- package/lib/ModuleBuildError.js +13 -11
- package/lib/ModuleDependencyError.js +6 -4
- package/lib/ModuleDependencyWarning.js +6 -4
- package/lib/ModuleError.js +10 -5
- package/lib/ModuleFactory.js +4 -4
- package/lib/ModuleFilenameHelpers.js +164 -54
- package/lib/ModuleGraph.js +93 -53
- package/lib/ModuleGraphConnection.js +27 -13
- package/lib/ModuleHashingError.js +29 -0
- package/lib/ModuleInfoHeaderPlugin.js +92 -33
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +17 -9
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +3 -1
- package/lib/ModuleStoreError.js +3 -2
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +168 -0
- package/lib/ModuleWarning.js +10 -5
- package/lib/MultiCompiler.js +115 -38
- package/lib/MultiStats.js +75 -33
- package/lib/MultiWatching.js +6 -2
- package/lib/NodeStuffPlugin.js +136 -37
- package/lib/NormalModule.js +437 -194
- package/lib/NormalModuleFactory.js +313 -116
- package/lib/NormalModuleReplacementPlugin.js +10 -4
- package/lib/NullFactory.js +1 -1
- package/lib/OptimizationStages.js +3 -3
- package/lib/Parser.js +1 -1
- package/lib/PlatformPlugin.js +39 -0
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +83 -28
- package/lib/ProvidePlugin.js +37 -19
- package/lib/RawModule.js +18 -5
- package/lib/RecordIdsPlugin.js +8 -8
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/ResolverFactory.js +8 -4
- package/lib/RuntimeGlobals.js +99 -65
- package/lib/RuntimeModule.js +17 -15
- package/lib/RuntimePlugin.js +116 -13
- package/lib/RuntimeTemplate.js +304 -102
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +89 -42
- package/lib/Stats.js +12 -7
- package/lib/Template.js +30 -33
- package/lib/TemplatedPathPlugin.js +102 -34
- package/lib/UseStrictPlugin.js +37 -12
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +6 -0
- package/lib/WatchIgnorePlugin.js +46 -13
- package/lib/Watching.js +139 -76
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +162 -56
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +351 -99
- package/lib/asset/AssetModulesPlugin.js +57 -33
- package/lib/asset/AssetParser.js +15 -6
- package/lib/asset/AssetSourceGenerator.js +30 -10
- package/lib/asset/AssetSourceParser.js +8 -2
- package/lib/asset/RawDataUrlModule.js +162 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +376 -420
- package/lib/cache/AddManagedPathsPlugin.js +6 -1
- package/lib/cache/IdleFileCachePlugin.js +26 -13
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
- package/lib/cache/PackFileCacheStrategy.js +172 -94
- package/lib/cache/ResolverCachePlugin.js +115 -43
- package/lib/cache/getLazyHashedEtag.js +2 -2
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +195 -110
- package/lib/config/browserslistTargetHandler.js +106 -41
- package/lib/config/defaults.js +572 -154
- package/lib/config/normalization.js +361 -322
- package/lib/config/target.js +105 -66
- package/lib/container/ContainerEntryDependency.js +2 -1
- package/lib/container/ContainerEntryModule.js +27 -11
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +18 -12
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +19 -8
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/ModuleFederationPlugin.js +2 -0
- package/lib/container/RemoteModule.js +17 -4
- package/lib/container/RemoteRuntimeModule.js +31 -17
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +203 -0
- package/lib/css/CssGenerator.js +151 -0
- package/lib/css/CssLoadingRuntimeModule.js +592 -0
- package/lib/css/CssModulesPlugin.js +888 -0
- package/lib/css/CssParser.js +1049 -0
- package/lib/css/walkCssTokens.js +775 -0
- package/lib/debug/ProfilingPlugin.js +102 -54
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
- package/lib/dependencies/AMDPlugin.js +44 -24
- package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
- package/lib/dependencies/AMDRequireDependency.js +21 -6
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +4 -4
- package/lib/dependencies/CachedConstDependency.js +22 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
- package/lib/dependencies/CommonJsExportsDependency.js +28 -5
- package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
- package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
- package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
- package/lib/dependencies/CommonJsRequireDependency.js +9 -1
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
- package/lib/dependencies/ConstDependency.js +12 -3
- package/lib/dependencies/ContextDependency.js +32 -5
- package/lib/dependencies/ContextDependencyHelpers.js +92 -62
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
- package/lib/dependencies/ContextElementDependency.js +41 -4
- package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
- package/lib/dependencies/CriticalDependencyWarning.js +4 -1
- package/lib/dependencies/CssExportDependency.js +156 -0
- package/lib/dependencies/CssImportDependency.js +125 -0
- package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
- package/lib/dependencies/CssUrlDependency.js +164 -0
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +15 -11
- package/lib/dependencies/ExportsInfoDependency.js +26 -5
- package/lib/dependencies/ExternalModuleDependency.js +109 -0
- package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
- package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
- package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
- package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +13 -7
- package/lib/dependencies/HarmonyImportDependency.js +65 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
- package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -2
- package/lib/dependencies/ImportDependency.js +50 -12
- package/lib/dependencies/ImportEagerDependency.js +11 -6
- package/lib/dependencies/ImportMetaContextDependency.js +42 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
- package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +128 -59
- package/lib/dependencies/ImportParserPlugin.js +153 -83
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +11 -6
- package/lib/dependencies/JsonExportsDependency.js +38 -30
- package/lib/dependencies/LoaderDependency.js +14 -0
- package/lib/dependencies/LoaderImportDependency.js +14 -0
- package/lib/dependencies/LoaderPlugin.js +54 -40
- package/lib/dependencies/LocalModule.js +17 -1
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +22 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
- package/lib/dependencies/ModuleDependency.js +24 -7
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +43 -8
- package/lib/dependencies/PureExpressionDependency.js +73 -39
- package/lib/dependencies/RequireContextDependency.js +6 -16
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
- package/lib/dependencies/RequireContextPlugin.js +20 -7
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +6 -1
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +19 -2
- package/lib/dependencies/RequireResolveDependency.js +8 -1
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +49 -22
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +20 -13
- package/lib/dependencies/URLPlugin.js +115 -27
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +143 -59
- package/lib/dependencies/getFunctionExpression.js +9 -0
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
- package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
- package/lib/hmr/LazyCompilationPlugin.js +94 -41
- package/lib/hmr/lazyCompilationBackend.js +107 -44
- package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
- package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
- package/lib/ids/HashedModuleIdsPlugin.js +24 -16
- package/lib/ids/IdHelpers.js +59 -49
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +20 -12
- package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
- package/lib/ids/SyncModuleIdsPlugin.js +146 -0
- package/lib/index.js +44 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
- package/lib/javascript/BasicEvaluatedExpression.js +133 -19
- package/lib/javascript/ChunkHelpers.js +33 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
- package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
- package/lib/javascript/JavascriptGenerator.js +37 -6
- package/lib/javascript/JavascriptModulesPlugin.js +523 -295
- package/lib/javascript/JavascriptParser.js +1591 -574
- package/lib/javascript/JavascriptParserHelpers.js +58 -37
- package/lib/javascript/StartupHelpers.js +69 -47
- package/lib/json/JsonData.js +33 -0
- package/lib/json/JsonGenerator.js +29 -21
- package/lib/json/JsonModulesPlugin.js +13 -7
- package/lib/json/JsonParser.js +30 -16
- package/lib/library/AbstractLibraryPlugin.js +6 -2
- package/lib/library/AmdLibraryPlugin.js +34 -18
- package/lib/library/AssignLibraryPlugin.js +68 -32
- package/lib/library/EnableLibraryPlugin.js +39 -14
- package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
- package/lib/library/JsonpLibraryPlugin.js +4 -3
- package/lib/library/ModernModuleLibraryPlugin.js +144 -0
- package/lib/library/ModuleLibraryPlugin.js +12 -7
- package/lib/library/SystemLibraryPlugin.js +6 -4
- package/lib/library/UmdLibraryPlugin.js +119 -100
- package/lib/logging/Logger.js +59 -6
- package/lib/logging/createConsoleLogger.js +25 -40
- package/lib/logging/runtime.js +8 -9
- package/lib/logging/truncateArgs.js +9 -8
- package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
- package/lib/node/NodeEnvironmentPlugin.js +14 -8
- package/lib/node/NodeTargetPlugin.js +7 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +100 -50
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
- package/lib/node/nodeConsole.js +48 -31
- package/lib/optimize/AggressiveMergingPlugin.js +10 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
- package/lib/optimize/ConcatenatedModule.js +353 -212
- package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
- package/lib/optimize/InnerGraph.js +30 -25
- package/lib/optimize/InnerGraphPlugin.js +105 -64
- package/lib/optimize/LimitChunkCountPlugin.js +32 -9
- package/lib/optimize/MangleExportsPlugin.js +7 -2
- package/lib/optimize/MinMaxSizeWarning.js +6 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
- package/lib/optimize/RealContentHashPlugin.js +99 -43
- package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
- package/lib/optimize/RuntimeChunkPlugin.js +15 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
- package/lib/optimize/SplitChunksPlugin.js +129 -78
- package/lib/performance/SizeLimitsPlugin.js +22 -8
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
- package/lib/rules/BasicEffectRulePlugin.js +7 -1
- package/lib/rules/BasicMatcherRulePlugin.js +8 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
- package/lib/rules/RuleSetCompiler.js +53 -32
- package/lib/rules/UseEffectRulePlugin.js +42 -36
- package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
- package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
- package/lib/runtime/BaseUriRuntimeModule.js +35 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
- package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +24 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
- package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +336 -120
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +212 -33
- package/lib/serialization/DateObjectSerializer.js +16 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -6
- package/lib/serialization/FileMiddleware.js +187 -86
- package/lib/serialization/MapObjectSerializer.js +25 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
- package/lib/serialization/ObjectMiddleware.js +96 -66
- package/lib/serialization/PlainObjectSerializer.js +51 -14
- package/lib/serialization/RegExpObjectSerializer.js +17 -5
- package/lib/serialization/Serializer.js +23 -5
- package/lib/serialization/SerializerMiddleware.js +8 -8
- package/lib/serialization/SetObjectSerializer.js +22 -6
- package/lib/serialization/SingleItemMiddleware.js +2 -2
- package/lib/serialization/types.js +2 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +40 -17
- package/lib/sharing/ConsumeSharedPlugin.js +139 -102
- package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +19 -6
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +37 -30
- package/lib/sharing/SharePlugin.js +2 -2
- package/lib/sharing/ShareRuntimeModule.js +20 -10
- package/lib/sharing/resolveMatchedConfigs.js +6 -5
- package/lib/sharing/utils.js +338 -34
- package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
- package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
- package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
- package/lib/stats/StatsFactory.js +128 -57
- package/lib/stats/StatsPrinter.js +77 -46
- package/lib/util/ArrayHelpers.js +35 -1
- package/lib/util/ArrayQueue.js +15 -22
- package/lib/util/AsyncQueue.js +37 -16
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +11 -2
- package/lib/util/MapHelpers.js +17 -5
- package/lib/util/ParallelismFactorCalculator.js +11 -1
- package/lib/util/Queue.js +9 -3
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +19 -6
- package/lib/util/StackedCacheMap.js +33 -3
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +46 -0
- package/lib/util/TupleQueue.js +9 -3
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +8 -8
- package/lib/util/WeakTupleMap.js +70 -28
- package/lib/util/binarySearchBounds.js +51 -9
- package/lib/util/chainedImports.js +97 -0
- package/lib/util/cleverMerge.js +51 -36
- package/lib/util/comparators.js +146 -83
- package/lib/util/compileBooleanMatcher.js +35 -7
- package/lib/util/conventions.js +126 -0
- package/lib/util/create-schema-validation.js +9 -2
- package/lib/util/createHash.js +49 -14
- package/lib/util/deprecation.js +48 -15
- package/lib/util/deterministicGrouping.js +71 -39
- package/lib/util/extractUrlAndGlobal.js +3 -0
- package/lib/util/findGraphRoots.js +7 -5
- package/lib/util/fs.js +419 -94
- package/lib/util/hash/BatchedHash.js +10 -4
- package/lib/util/hash/md4.js +20 -0
- package/lib/util/hash/wasm-hash.js +163 -0
- package/lib/util/hash/xxhash64.js +7 -141
- package/lib/util/identifier.js +140 -93
- package/lib/util/internalSerializables.js +22 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +10 -10
- package/lib/util/mergeScope.js +76 -0
- package/lib/util/nonNumericOnlyHash.js +22 -0
- package/lib/util/numberHash.js +84 -34
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +7 -55
- package/lib/util/propertyName.js +77 -0
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/runtime.js +188 -133
- package/lib/util/semver.js +64 -56
- package/lib/util/serialization.js +26 -1
- package/lib/util/smartGrouping.js +10 -10
- package/lib/util/source.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
- package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +23 -9
- package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
- package/lib/webpack.js +43 -12
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
- package/module.d.ts +233 -0
- package/package.json +85 -139
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +679 -47
- package/schemas/plugins/BannerPlugin.check.js +1 -1
- package/schemas/plugins/BannerPlugin.json +9 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssParserOptions.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5026 -1756
@@ -16,11 +16,36 @@ const DynamicExports = require("./DynamicExports");
|
|
16
16
|
const HarmonyExports = require("./HarmonyExports");
|
17
17
|
const ModuleDecoratorDependency = require("./ModuleDecoratorDependency");
|
18
18
|
|
19
|
-
/** @typedef {import("estree").
|
19
|
+
/** @typedef {import("estree").AssignmentExpression} AssignmentExpression */
|
20
|
+
/** @typedef {import("estree").CallExpression} CallExpression */
|
21
|
+
/** @typedef {import("estree").Expression} Expression */
|
22
|
+
/** @typedef {import("estree").Super} Super */
|
23
|
+
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
24
|
+
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
20
25
|
/** @typedef {import("../NormalModule")} NormalModule */
|
21
26
|
/** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
|
22
27
|
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
28
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
29
|
+
/** @typedef {import("./CommonJsDependencyHelpers").CommonJSDependencyBaseKeywords} CommonJSDependencyBaseKeywords */
|
23
30
|
|
31
|
+
/**
|
32
|
+
* This function takes a generic expression and detects whether it is an ObjectExpression.
|
33
|
+
* This is used in the context of parsing CommonJS exports to get the value of the property descriptor
|
34
|
+
* when the `exports` object is assigned to `Object.defineProperty`.
|
35
|
+
*
|
36
|
+
* In CommonJS modules, the `exports` object can be assigned to `Object.defineProperty` and therefore
|
37
|
+
* webpack has to detect this case and get the value key of the property descriptor. See the following example
|
38
|
+
* for more information: https://astexplorer.net/#/gist/83ce51a4e96e59d777df315a6d111da6/8058ead48a1bb53c097738225db0967ef7f70e57
|
39
|
+
*
|
40
|
+
* This would be an example of a CommonJS module that exports an object with a property descriptor:
|
41
|
+
* ```js
|
42
|
+
* Object.defineProperty(exports, "__esModule", { value: true });
|
43
|
+
* exports.foo = void 0;
|
44
|
+
* exports.foo = "bar";
|
45
|
+
* ```
|
46
|
+
* @param {TODO} expr expression
|
47
|
+
* @returns {Expression | undefined} returns the value of property descriptor
|
48
|
+
*/
|
24
49
|
const getValueOfPropertyDescription = expr => {
|
25
50
|
if (expr.type !== "ObjectExpression") return;
|
26
51
|
for (const property of expr.properties) {
|
@@ -31,16 +56,30 @@ const getValueOfPropertyDescription = expr => {
|
|
31
56
|
}
|
32
57
|
};
|
33
58
|
|
59
|
+
/**
|
60
|
+
* The purpose of this function is to check whether an expression is a truthy literal or not. This is
|
61
|
+
* useful when parsing CommonJS exports, because CommonJS modules can export any value, including falsy
|
62
|
+
* values like `null` and `false`. However, exports should only be created if the exported value is truthy.
|
63
|
+
* @param {Expression} expr expression being checked
|
64
|
+
* @returns {boolean} true, when the expression is a truthy literal
|
65
|
+
*/
|
34
66
|
const isTruthyLiteral = expr => {
|
35
67
|
switch (expr.type) {
|
36
68
|
case "Literal":
|
37
|
-
return
|
69
|
+
return Boolean(expr.value);
|
38
70
|
case "UnaryExpression":
|
39
71
|
if (expr.operator === "!") return isFalsyLiteral(expr.argument);
|
40
72
|
}
|
41
73
|
return false;
|
42
74
|
};
|
43
75
|
|
76
|
+
/**
|
77
|
+
* The purpose of this function is to check whether an expression is a falsy literal or not. This is
|
78
|
+
* useful when parsing CommonJS exports, because CommonJS modules can export any value, including falsy
|
79
|
+
* values like `null` and `false`. However, exports should only be created if the exported value is truthy.
|
80
|
+
* @param {Expression} expr expression being checked
|
81
|
+
* @returns {boolean} true, when the expression is a falsy literal
|
82
|
+
*/
|
44
83
|
const isFalsyLiteral = expr => {
|
45
84
|
switch (expr.type) {
|
46
85
|
case "Literal":
|
@@ -53,7 +92,7 @@ const isFalsyLiteral = expr => {
|
|
53
92
|
|
54
93
|
/**
|
55
94
|
* @param {JavascriptParser} parser the parser
|
56
|
-
* @param {
|
95
|
+
* @param {Expression} expr expression
|
57
96
|
* @returns {{ argument: BasicEvaluatedExpression, ids: string[] } | undefined} parsed call
|
58
97
|
*/
|
59
98
|
const parseRequireCall = (parser, expr) => {
|
@@ -86,17 +125,28 @@ const parseRequireCall = (parser, expr) => {
|
|
86
125
|
};
|
87
126
|
|
88
127
|
class CommonJsExportsParserPlugin {
|
128
|
+
/**
|
129
|
+
* @param {ModuleGraph} moduleGraph module graph
|
130
|
+
*/
|
89
131
|
constructor(moduleGraph) {
|
90
132
|
this.moduleGraph = moduleGraph;
|
91
133
|
}
|
92
134
|
|
93
135
|
/**
|
94
136
|
* @param {JavascriptParser} parser the parser
|
137
|
+
* @returns {void}
|
95
138
|
*/
|
96
139
|
apply(parser) {
|
97
140
|
const enableStructuredExports = () => {
|
98
141
|
DynamicExports.enable(parser.state);
|
99
142
|
};
|
143
|
+
|
144
|
+
/**
|
145
|
+
* @param {boolean} topLevel true, when the export is on top level
|
146
|
+
* @param {string[]} members members of the export
|
147
|
+
* @param {Expression | undefined} valueExpr expression for the value
|
148
|
+
* @returns {void}
|
149
|
+
*/
|
100
150
|
const checkNamespace = (topLevel, members, valueExpr) => {
|
101
151
|
if (!DynamicExports.isEnabled(parser.state)) return;
|
102
152
|
if (members.length > 0 && members[0] === "__esModule") {
|
@@ -107,10 +157,16 @@ class CommonJsExportsParserPlugin {
|
|
107
157
|
}
|
108
158
|
}
|
109
159
|
};
|
160
|
+
/**
|
161
|
+
* @param {string=} reason reason
|
162
|
+
*/
|
110
163
|
const bailout = reason => {
|
111
164
|
DynamicExports.bailout(parser.state);
|
112
165
|
if (reason) bailoutHint(reason);
|
113
166
|
};
|
167
|
+
/**
|
168
|
+
* @param {string} reason reason
|
169
|
+
*/
|
114
170
|
const bailoutHint = reason => {
|
115
171
|
this.moduleGraph
|
116
172
|
.getOptimizationBailout(parser.state.module)
|
@@ -126,6 +182,13 @@ class CommonJsExportsParserPlugin {
|
|
126
182
|
.tap("CommonJsPlugin", evaluateToString("object"));
|
127
183
|
|
128
184
|
// exporting //
|
185
|
+
|
186
|
+
/**
|
187
|
+
* @param {AssignmentExpression} expr expression
|
188
|
+
* @param {CommonJSDependencyBaseKeywords} base commonjs base keywords
|
189
|
+
* @param {string[]} members members of the export
|
190
|
+
* @returns {boolean | undefined} true, when the expression was handled
|
191
|
+
*/
|
129
192
|
const handleAssignExport = (expr, base, members) => {
|
130
193
|
if (HarmonyExports.isEnabled(parser.state)) return;
|
131
194
|
// Handle reexporting
|
@@ -139,16 +202,16 @@ class CommonJsExportsParserPlugin {
|
|
139
202
|
// It's possible to reexport __esModule, so we must convert to a dynamic module
|
140
203
|
if (members.length === 0) DynamicExports.setDynamic(parser.state);
|
141
204
|
const dep = new CommonJsExportRequireDependency(
|
142
|
-
expr.range,
|
205
|
+
/** @type {Range} */ (expr.range),
|
143
206
|
null,
|
144
207
|
base,
|
145
208
|
members,
|
146
|
-
requireCall.argument.string,
|
209
|
+
/** @type {string} */ (requireCall.argument.string),
|
147
210
|
requireCall.ids,
|
148
211
|
!parser.isStatementLevelExpression(expr)
|
149
212
|
);
|
150
|
-
dep.loc = expr.loc;
|
151
|
-
dep.optional =
|
213
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
214
|
+
dep.optional = Boolean(parser.scope.inTry);
|
152
215
|
parser.state.module.addDependency(dep);
|
153
216
|
return true;
|
154
217
|
}
|
@@ -162,21 +225,21 @@ class CommonJsExportsParserPlugin {
|
|
162
225
|
expr.right
|
163
226
|
);
|
164
227
|
const dep = new CommonJsExportsDependency(
|
165
|
-
expr.left.range,
|
228
|
+
/** @type {Range} */ (expr.left.range),
|
166
229
|
null,
|
167
230
|
base,
|
168
231
|
remainingMembers
|
169
232
|
);
|
170
|
-
dep.loc = expr.loc;
|
233
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
171
234
|
parser.state.module.addDependency(dep);
|
172
235
|
parser.walkExpression(expr.right);
|
173
236
|
return true;
|
174
237
|
};
|
175
238
|
parser.hooks.assignMemberChain
|
176
239
|
.for("exports")
|
177
|
-
.tap("CommonJsExportsParserPlugin", (expr, members) =>
|
178
|
-
|
179
|
-
|
240
|
+
.tap("CommonJsExportsParserPlugin", (expr, members) =>
|
241
|
+
handleAssignExport(expr, "exports", members)
|
242
|
+
);
|
180
243
|
parser.hooks.assignMemberChain
|
181
244
|
.for("this")
|
182
245
|
.tap("CommonJsExportsParserPlugin", (expr, members) => {
|
@@ -192,16 +255,14 @@ class CommonJsExportsParserPlugin {
|
|
192
255
|
parser.hooks.call
|
193
256
|
.for("Object.defineProperty")
|
194
257
|
.tap("CommonJsExportsParserPlugin", expression => {
|
195
|
-
const expr = /** @type {
|
196
|
-
expression
|
197
|
-
);
|
258
|
+
const expr = /** @type {CallExpression} */ (expression);
|
198
259
|
if (!parser.isStatementLevelExpression(expr)) return;
|
199
260
|
if (expr.arguments.length !== 3) return;
|
200
261
|
if (expr.arguments[0].type === "SpreadElement") return;
|
201
262
|
if (expr.arguments[1].type === "SpreadElement") return;
|
202
263
|
if (expr.arguments[2].type === "SpreadElement") return;
|
203
264
|
const exportsArg = parser.evaluateExpression(expr.arguments[0]);
|
204
|
-
if (!exportsArg
|
265
|
+
if (!exportsArg.isIdentifier()) return;
|
205
266
|
if (
|
206
267
|
exportsArg.identifier !== "exports" &&
|
207
268
|
exportsArg.identifier !== "module.exports" &&
|
@@ -210,7 +271,6 @@ class CommonJsExportsParserPlugin {
|
|
210
271
|
return;
|
211
272
|
}
|
212
273
|
const propertyArg = parser.evaluateExpression(expr.arguments[1]);
|
213
|
-
if (!propertyArg) return;
|
214
274
|
const property = propertyArg.asString();
|
215
275
|
if (typeof property !== "string") return;
|
216
276
|
enableStructuredExports();
|
@@ -221,12 +281,12 @@ class CommonJsExportsParserPlugin {
|
|
221
281
|
getValueOfPropertyDescription(descArg)
|
222
282
|
);
|
223
283
|
const dep = new CommonJsExportsDependency(
|
224
|
-
expr.range,
|
225
|
-
expr.arguments[2].range,
|
284
|
+
/** @type {Range} */ (expr.range),
|
285
|
+
/** @type {Range} */ (expr.arguments[2].range),
|
226
286
|
`Object.defineProperty(${exportsArg.identifier})`,
|
227
287
|
[property]
|
228
288
|
);
|
229
|
-
dep.loc = expr.loc;
|
289
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
230
290
|
parser.state.module.addDependency(dep);
|
231
291
|
|
232
292
|
parser.walkExpression(expr.arguments[2]);
|
@@ -234,27 +294,39 @@ class CommonJsExportsParserPlugin {
|
|
234
294
|
});
|
235
295
|
|
236
296
|
// Self reference //
|
237
|
-
|
297
|
+
|
298
|
+
/**
|
299
|
+
* @param {Expression | Super} expr expression
|
300
|
+
* @param {CommonJSDependencyBaseKeywords} base commonjs base keywords
|
301
|
+
* @param {string[]} members members of the export
|
302
|
+
* @param {CallExpression=} call call expression
|
303
|
+
* @returns {boolean | void} true, when the expression was handled
|
304
|
+
*/
|
305
|
+
const handleAccessExport = (expr, base, members, call) => {
|
238
306
|
if (HarmonyExports.isEnabled(parser.state)) return;
|
239
307
|
if (members.length === 0) {
|
240
|
-
bailout(
|
308
|
+
bailout(
|
309
|
+
`${base} is used directly at ${formatLocation(
|
310
|
+
/** @type {DependencyLocation} */ (expr.loc)
|
311
|
+
)}`
|
312
|
+
);
|
241
313
|
}
|
242
314
|
if (call && members.length === 1) {
|
243
315
|
bailoutHint(
|
244
316
|
`${base}${propertyAccess(
|
245
317
|
members
|
246
318
|
)}(...) prevents optimization as ${base} is passed as call context at ${formatLocation(
|
247
|
-
expr.loc
|
319
|
+
/** @type {DependencyLocation} */ (expr.loc)
|
248
320
|
)}`
|
249
321
|
);
|
250
322
|
}
|
251
323
|
const dep = new CommonJsSelfReferenceDependency(
|
252
|
-
expr.range,
|
324
|
+
/** @type {Range} */ (expr.range),
|
253
325
|
base,
|
254
326
|
members,
|
255
|
-
|
327
|
+
Boolean(call)
|
256
328
|
);
|
257
|
-
dep.loc = expr.loc;
|
329
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
258
330
|
parser.state.module.addDependency(dep);
|
259
331
|
if (call) {
|
260
332
|
parser.walkExpressions(call.arguments);
|
@@ -263,19 +335,19 @@ class CommonJsExportsParserPlugin {
|
|
263
335
|
};
|
264
336
|
parser.hooks.callMemberChain
|
265
337
|
.for("exports")
|
266
|
-
.tap("CommonJsExportsParserPlugin", (expr, members) =>
|
267
|
-
|
268
|
-
|
338
|
+
.tap("CommonJsExportsParserPlugin", (expr, members) =>
|
339
|
+
handleAccessExport(expr.callee, "exports", members, expr)
|
340
|
+
);
|
269
341
|
parser.hooks.expressionMemberChain
|
270
342
|
.for("exports")
|
271
|
-
.tap("CommonJsExportsParserPlugin", (expr, members) =>
|
272
|
-
|
273
|
-
|
343
|
+
.tap("CommonJsExportsParserPlugin", (expr, members) =>
|
344
|
+
handleAccessExport(expr, "exports", members)
|
345
|
+
);
|
274
346
|
parser.hooks.expression
|
275
347
|
.for("exports")
|
276
|
-
.tap("CommonJsExportsParserPlugin", expr =>
|
277
|
-
|
278
|
-
|
348
|
+
.tap("CommonJsExportsParserPlugin", expr =>
|
349
|
+
handleAccessExport(expr, "exports", [])
|
350
|
+
);
|
279
351
|
parser.hooks.callMemberChain
|
280
352
|
.for("module")
|
281
353
|
.tap("CommonJsExportsParserPlugin", (expr, members) => {
|
@@ -295,9 +367,9 @@ class CommonJsExportsParserPlugin {
|
|
295
367
|
});
|
296
368
|
parser.hooks.expression
|
297
369
|
.for("module.exports")
|
298
|
-
.tap("CommonJsExportsParserPlugin", expr =>
|
299
|
-
|
300
|
-
|
370
|
+
.tap("CommonJsExportsParserPlugin", expr =>
|
371
|
+
handleAccessExport(expr, "module.exports", [])
|
372
|
+
);
|
301
373
|
parser.hooks.callMemberChain
|
302
374
|
.for("this")
|
303
375
|
.tap("CommonJsExportsParserPlugin", (expr, members) => {
|
@@ -327,7 +399,7 @@ class CommonJsExportsParserPlugin {
|
|
327
399
|
: RuntimeGlobals.nodeModuleDecorator,
|
328
400
|
!isHarmony
|
329
401
|
);
|
330
|
-
dep.loc = expr.loc;
|
402
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
331
403
|
parser.state.module.addDependency(dep);
|
332
404
|
return true;
|
333
405
|
});
|
@@ -7,6 +7,7 @@
|
|
7
7
|
|
8
8
|
const Template = require("../Template");
|
9
9
|
const { equals } = require("../util/ArrayHelpers");
|
10
|
+
const { getTrimmedIdsAndRange } = require("../util/chainedImports");
|
10
11
|
const makeSerializable = require("../util/makeSerializable");
|
11
12
|
const propertyAccess = require("../util/propertyAccess");
|
12
13
|
const ModuleDependency = require("./ModuleDependency");
|
@@ -16,18 +17,28 @@ const ModuleDependency = require("./ModuleDependency");
|
|
16
17
|
/** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
|
17
18
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
18
19
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
20
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
21
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
22
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
19
23
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
20
24
|
|
21
25
|
class CommonJsFullRequireDependency extends ModuleDependency {
|
22
26
|
/**
|
23
27
|
* @param {string} request the request string
|
24
|
-
* @param {
|
28
|
+
* @param {Range} range location in source code
|
25
29
|
* @param {string[]} names accessed properties on module
|
30
|
+
* @param {Range[]=} idRanges ranges for members of ids; the two arrays are right-aligned
|
26
31
|
*/
|
27
|
-
constructor(
|
32
|
+
constructor(
|
33
|
+
request,
|
34
|
+
range,
|
35
|
+
names,
|
36
|
+
idRanges /* TODO webpack 6 make this non-optional. It must always be set to properly trim ids. */
|
37
|
+
) {
|
28
38
|
super(request);
|
29
39
|
this.range = range;
|
30
40
|
this.names = names;
|
41
|
+
this.idRanges = idRanges;
|
31
42
|
this.call = false;
|
32
43
|
this.asiSafe = undefined;
|
33
44
|
}
|
@@ -51,17 +62,25 @@ class CommonJsFullRequireDependency extends ModuleDependency {
|
|
51
62
|
return [this.names];
|
52
63
|
}
|
53
64
|
|
65
|
+
/**
|
66
|
+
* @param {ObjectSerializerContext} context context
|
67
|
+
*/
|
54
68
|
serialize(context) {
|
55
69
|
const { write } = context;
|
56
70
|
write(this.names);
|
71
|
+
write(this.idRanges);
|
57
72
|
write(this.call);
|
58
73
|
write(this.asiSafe);
|
59
74
|
super.serialize(context);
|
60
75
|
}
|
61
76
|
|
77
|
+
/**
|
78
|
+
* @param {ObjectDeserializerContext} context context
|
79
|
+
*/
|
62
80
|
deserialize(context) {
|
63
81
|
const { read } = context;
|
64
82
|
this.names = read();
|
83
|
+
this.idRanges = read();
|
65
84
|
this.call = read();
|
66
85
|
this.asiSafe = read();
|
67
86
|
super.deserialize(context);
|
@@ -108,19 +127,34 @@ CommonJsFullRequireDependency.Template = class CommonJsFullRequireDependencyTemp
|
|
108
127
|
weak: dep.weak,
|
109
128
|
runtimeRequirements
|
110
129
|
});
|
130
|
+
|
131
|
+
const {
|
132
|
+
trimmedRange: [trimmedRangeStart, trimmedRangeEnd],
|
133
|
+
trimmedIds
|
134
|
+
} = getTrimmedIdsAndRange(
|
135
|
+
dep.names,
|
136
|
+
dep.range,
|
137
|
+
dep.idRanges,
|
138
|
+
moduleGraph,
|
139
|
+
dep
|
140
|
+
);
|
141
|
+
|
111
142
|
if (importedModule) {
|
112
|
-
const ids = dep.names;
|
113
143
|
const usedImported = moduleGraph
|
114
144
|
.getExportsInfo(importedModule)
|
115
|
-
.getUsedName(
|
145
|
+
.getUsedName(trimmedIds, runtime);
|
116
146
|
if (usedImported) {
|
117
|
-
const comment = equals(usedImported,
|
147
|
+
const comment = equals(usedImported, trimmedIds)
|
118
148
|
? ""
|
119
|
-
: Template.toNormalComment(propertyAccess(
|
120
|
-
|
149
|
+
: `${Template.toNormalComment(propertyAccess(trimmedIds))} `;
|
150
|
+
const access = `${comment}${propertyAccess(usedImported)}`;
|
151
|
+
requireExpr =
|
152
|
+
dep.asiSafe === true
|
153
|
+
? `(${requireExpr}${access})`
|
154
|
+
: `${requireExpr}${access}`;
|
121
155
|
}
|
122
156
|
}
|
123
|
-
source.replace(
|
157
|
+
source.replace(trimmedRangeStart, trimmedRangeEnd - 1, requireExpr);
|
124
158
|
}
|
125
159
|
};
|
126
160
|
|