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
@@ -14,13 +14,13 @@ const DEFAULT_EXPORT = "__WEBPACK_DEFAULT_EXPORT__";
|
|
14
14
|
const NAMESPACE_OBJECT_EXPORT = "__WEBPACK_NAMESPACE_OBJECT__";
|
15
15
|
|
16
16
|
/**
|
17
|
-
* @typedef {
|
17
|
+
* @typedef {object} ExternalModuleInfo
|
18
18
|
* @property {number} index
|
19
19
|
* @property {Module} module
|
20
20
|
*/
|
21
21
|
|
22
22
|
/**
|
23
|
-
* @typedef {
|
23
|
+
* @typedef {object} ConcatenatedModuleInfo
|
24
24
|
* @property {number} index
|
25
25
|
* @property {Module} module
|
26
26
|
* @property {Map<string, string>} exportMap mapping from export name to symbol
|
@@ -31,7 +31,7 @@ const NAMESPACE_OBJECT_EXPORT = "__WEBPACK_NAMESPACE_OBJECT__";
|
|
31
31
|
/** @typedef {ConcatenatedModuleInfo | ExternalModuleInfo} ModuleInfo */
|
32
32
|
|
33
33
|
/**
|
34
|
-
* @typedef {
|
34
|
+
* @typedef {object} ModuleReferenceOptions
|
35
35
|
* @property {string[]} ids the properties/exports of the module
|
36
36
|
* @property {boolean} call true, when this referenced export is called
|
37
37
|
* @property {boolean} directImport true, when this referenced export is directly imported (not via property access)
|
@@ -64,7 +64,6 @@ class ConcatenationScope {
|
|
64
64
|
}
|
65
65
|
|
66
66
|
/**
|
67
|
-
*
|
68
67
|
* @param {string} exportName name of the export
|
69
68
|
* @param {string} symbol identifier of the export in source code
|
70
69
|
*/
|
@@ -78,7 +77,6 @@ class ConcatenationScope {
|
|
78
77
|
}
|
79
78
|
|
80
79
|
/**
|
81
|
-
*
|
82
80
|
* @param {string} exportName name of the export
|
83
81
|
* @param {string} expression expression to be used
|
84
82
|
*/
|
@@ -99,7 +97,6 @@ class ConcatenationScope {
|
|
99
97
|
}
|
100
98
|
|
101
99
|
/**
|
102
|
-
*
|
103
100
|
* @param {Module} module the referenced module
|
104
101
|
* @param {Partial<ModuleReferenceOptions>} options options
|
105
102
|
* @returns {string} the reference as identifier
|
@@ -108,14 +105,14 @@ class ConcatenationScope {
|
|
108
105
|
module,
|
109
106
|
{ ids = undefined, call = false, directImport = false, asiSafe = false }
|
110
107
|
) {
|
111
|
-
const info = this._modulesMap.get(module);
|
108
|
+
const info = /** @type {ModuleInfo} */ (this._modulesMap.get(module));
|
112
109
|
const callFlag = call ? "_call" : "";
|
113
110
|
const directImportFlag = directImport ? "_directImport" : "";
|
114
111
|
const asiSafeFlag = asiSafe
|
115
112
|
? "_asiSafe1"
|
116
113
|
: asiSafe === false
|
117
|
-
|
118
|
-
|
114
|
+
? "_asiSafe0"
|
115
|
+
: "";
|
119
116
|
const exportData = ids
|
120
117
|
? Buffer.from(JSON.stringify(ids), "utf-8").toString("hex")
|
121
118
|
: "ns";
|
@@ -133,12 +130,12 @@ class ConcatenationScope {
|
|
133
130
|
|
134
131
|
/**
|
135
132
|
* @param {string} name the identifier
|
136
|
-
* @returns {ModuleReferenceOptions & { index: number }} parsed options and index
|
133
|
+
* @returns {ModuleReferenceOptions & { index: number } | null} parsed options and index
|
137
134
|
*/
|
138
135
|
static matchModuleReference(name) {
|
139
136
|
const match = MODULE_REFERENCE_REGEXP.exec(name);
|
140
137
|
if (!match) return null;
|
141
|
-
const index =
|
138
|
+
const index = Number(match[1]);
|
142
139
|
const asiSafe = match[5];
|
143
140
|
return {
|
144
141
|
index,
|
@@ -146,8 +143,8 @@ class ConcatenationScope {
|
|
146
143
|
match[2] === "ns"
|
147
144
|
? []
|
148
145
|
: JSON.parse(Buffer.from(match[2], "hex").toString("utf-8")),
|
149
|
-
call:
|
150
|
-
directImport:
|
146
|
+
call: Boolean(match[3]),
|
147
|
+
directImport: Boolean(match[4]),
|
151
148
|
asiSafe: asiSafe ? asiSafe === "1" : undefined
|
152
149
|
};
|
153
150
|
}
|
@@ -14,6 +14,11 @@ const { mergeRuntime } = require("./util/runtime");
|
|
14
14
|
/** @typedef {import("./Generator").GenerateContext} GenerateContext */
|
15
15
|
/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
|
16
16
|
|
17
|
+
/**
|
18
|
+
* @param {string} condition condition
|
19
|
+
* @param {string | Source} source source
|
20
|
+
* @returns {string | Source} wrapped source
|
21
|
+
*/
|
17
22
|
const wrapInCondition = (condition, source) => {
|
18
23
|
if (typeof source === "string") {
|
19
24
|
return Template.asString([
|
@@ -22,26 +27,25 @@ const wrapInCondition = (condition, source) => {
|
|
22
27
|
"}",
|
23
28
|
""
|
24
29
|
]);
|
25
|
-
} else {
|
26
|
-
return new ConcatSource(
|
27
|
-
`if (${condition}) {\n`,
|
28
|
-
new PrefixSource("\t", source),
|
29
|
-
"}\n"
|
30
|
-
);
|
31
30
|
}
|
31
|
+
return new ConcatSource(
|
32
|
+
`if (${condition}) {\n`,
|
33
|
+
new PrefixSource("\t", source),
|
34
|
+
"}\n"
|
35
|
+
);
|
32
36
|
};
|
33
37
|
|
34
38
|
/**
|
35
|
-
* @
|
39
|
+
* @extends {InitFragment<GenerateContext>}
|
36
40
|
*/
|
37
41
|
class ConditionalInitFragment extends InitFragment {
|
38
42
|
/**
|
39
|
-
* @param {string|Source} content the source code that will be included as initialization code
|
43
|
+
* @param {string | Source | undefined} content the source code that will be included as initialization code
|
40
44
|
* @param {number} stage category of initialization code (contribute to order)
|
41
45
|
* @param {number} position position in the category (contribute to order)
|
42
|
-
* @param {string} key unique key to avoid emitting the same initialization code twice
|
46
|
+
* @param {string | undefined} key unique key to avoid emitting the same initialization code twice
|
43
47
|
* @param {RuntimeSpec | boolean} runtimeCondition in which runtime this fragment should be executed
|
44
|
-
* @param {string|Source=} endContent the source code that will be included at the end of the module
|
48
|
+
* @param {string | Source=} endContent the source code that will be included at the end of the module
|
45
49
|
*/
|
46
50
|
constructor(
|
47
51
|
content,
|
@@ -49,15 +53,15 @@ class ConditionalInitFragment extends InitFragment {
|
|
49
53
|
position,
|
50
54
|
key,
|
51
55
|
runtimeCondition = true,
|
52
|
-
endContent
|
56
|
+
endContent = undefined
|
53
57
|
) {
|
54
58
|
super(content, stage, position, key, endContent);
|
55
59
|
this.runtimeCondition = runtimeCondition;
|
56
60
|
}
|
57
61
|
|
58
62
|
/**
|
59
|
-
* @param {
|
60
|
-
* @returns {string|Source} the source code that will be included as initialization code
|
63
|
+
* @param {GenerateContext} context context
|
64
|
+
* @returns {string | Source | undefined} the source code that will be included as initialization code
|
61
65
|
*/
|
62
66
|
getContent(context) {
|
63
67
|
if (this.runtimeCondition === false || !this.content) return "";
|
@@ -73,7 +77,7 @@ class ConditionalInitFragment extends InitFragment {
|
|
73
77
|
}
|
74
78
|
|
75
79
|
/**
|
76
|
-
* @param {
|
80
|
+
* @param {GenerateContext} context context
|
77
81
|
* @returns {string|Source=} the source code that will be included at the end of the module
|
78
82
|
*/
|
79
83
|
getEndContent(context) {
|
@@ -89,6 +93,10 @@ class ConditionalInitFragment extends InitFragment {
|
|
89
93
|
return wrapInCondition(expr, this.endContent);
|
90
94
|
}
|
91
95
|
|
96
|
+
/**
|
97
|
+
* @param {ConditionalInitFragment} other fragment to merge with
|
98
|
+
* @returns {ConditionalInitFragment} merged fragment
|
99
|
+
*/
|
92
100
|
merge(other) {
|
93
101
|
if (this.runtimeCondition === true) return this;
|
94
102
|
if (other.runtimeCondition === true) return other;
|
package/lib/ConstPlugin.js
CHANGED
@@ -5,19 +5,36 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
const {
|
9
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
10
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
11
|
+
JAVASCRIPT_MODULE_TYPE_ESM
|
12
|
+
} = require("./ModuleTypeConstants");
|
8
13
|
const CachedConstDependency = require("./dependencies/CachedConstDependency");
|
9
14
|
const ConstDependency = require("./dependencies/ConstDependency");
|
10
15
|
const { evaluateToString } = require("./javascript/JavascriptParserHelpers");
|
11
16
|
const { parseResource } = require("./util/identifier");
|
12
17
|
|
13
|
-
/** @typedef {import("estree").
|
14
|
-
/** @typedef {import("estree").
|
18
|
+
/** @typedef {import("estree").AssignmentProperty} AssignmentProperty */
|
19
|
+
/** @typedef {import("estree").Expression} Expression */
|
20
|
+
/** @typedef {import("estree").Identifier} Identifier */
|
21
|
+
/** @typedef {import("estree").Pattern} Pattern */
|
22
|
+
/** @typedef {import("estree").SourceLocation} SourceLocation */
|
23
|
+
/** @typedef {import("estree").Statement} Statement */
|
24
|
+
/** @typedef {import("estree").Super} Super */
|
15
25
|
/** @typedef {import("./Compiler")} Compiler */
|
26
|
+
/** @typedef {import("./javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
|
27
|
+
/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
|
28
|
+
/** @typedef {import("./javascript/JavascriptParser").Range} Range */
|
16
29
|
|
30
|
+
/**
|
31
|
+
* @param {Set<string>} declarations set of declarations
|
32
|
+
* @param {Identifier | Pattern} pattern pattern to collect declarations from
|
33
|
+
*/
|
17
34
|
const collectDeclaration = (declarations, pattern) => {
|
18
35
|
const stack = [pattern];
|
19
36
|
while (stack.length > 0) {
|
20
|
-
const node = stack.pop();
|
37
|
+
const node = /** @type {Pattern} */ (stack.pop());
|
21
38
|
switch (node.type) {
|
22
39
|
case "Identifier":
|
23
40
|
declarations.add(node.name);
|
@@ -34,7 +51,7 @@ const collectDeclaration = (declarations, pattern) => {
|
|
34
51
|
break;
|
35
52
|
case "ObjectPattern":
|
36
53
|
for (const property of node.properties) {
|
37
|
-
stack.push(property.value);
|
54
|
+
stack.push(/** @type {AssignmentProperty} */ (property).value);
|
38
55
|
}
|
39
56
|
break;
|
40
57
|
case "RestElement":
|
@@ -44,8 +61,14 @@ const collectDeclaration = (declarations, pattern) => {
|
|
44
61
|
}
|
45
62
|
};
|
46
63
|
|
64
|
+
/**
|
65
|
+
* @param {Statement} branch branch to get hoisted declarations from
|
66
|
+
* @param {boolean} includeFunctionDeclarations whether to include function declarations
|
67
|
+
* @returns {Array<string>} hoisted declarations
|
68
|
+
*/
|
47
69
|
const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
|
48
70
|
const declarations = new Set();
|
71
|
+
/** @type {Array<TODO | null | undefined>} */
|
49
72
|
const stack = [branch];
|
50
73
|
while (stack.length > 0) {
|
51
74
|
const node = stack.pop();
|
@@ -93,7 +116,7 @@ const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
|
|
93
116
|
break;
|
94
117
|
case "FunctionDeclaration":
|
95
118
|
if (includeFunctionDeclarations) {
|
96
|
-
collectDeclaration(declarations, node.id);
|
119
|
+
collectDeclaration(declarations, /** @type {Identifier} */ (node.id));
|
97
120
|
}
|
98
121
|
break;
|
99
122
|
case "VariableDeclaration":
|
@@ -108,6 +131,8 @@ const getHoistedDeclarations = (branch, includeFunctionDeclarations) => {
|
|
108
131
|
return Array.from(declarations);
|
109
132
|
};
|
110
133
|
|
134
|
+
const PLUGIN_NAME = "ConstPlugin";
|
135
|
+
|
111
136
|
class ConstPlugin {
|
112
137
|
/**
|
113
138
|
* Apply the plugin
|
@@ -117,7 +142,7 @@ class ConstPlugin {
|
|
117
142
|
apply(compiler) {
|
118
143
|
const cachedParseResource = parseResource.bindCache(compiler.root);
|
119
144
|
compiler.hooks.compilation.tap(
|
120
|
-
|
145
|
+
PLUGIN_NAME,
|
121
146
|
(compilation, { normalModuleFactory }) => {
|
122
147
|
compilation.dependencyTemplates.set(
|
123
148
|
ConstDependency,
|
@@ -129,15 +154,21 @@ class ConstPlugin {
|
|
129
154
|
new CachedConstDependency.Template()
|
130
155
|
);
|
131
156
|
|
157
|
+
/**
|
158
|
+
* @param {JavascriptParser} parser the parser
|
159
|
+
*/
|
132
160
|
const handler = parser => {
|
133
|
-
parser.hooks.statementIf.tap(
|
161
|
+
parser.hooks.statementIf.tap(PLUGIN_NAME, statement => {
|
134
162
|
if (parser.scope.isAsmJs) return;
|
135
163
|
const param = parser.evaluateExpression(statement.test);
|
136
164
|
const bool = param.asBool();
|
137
165
|
if (typeof bool === "boolean") {
|
138
166
|
if (!param.couldHaveSideEffects()) {
|
139
|
-
const dep = new ConstDependency(
|
140
|
-
|
167
|
+
const dep = new ConstDependency(
|
168
|
+
`${bool}`,
|
169
|
+
/** @type {Range} */ (param.range)
|
170
|
+
);
|
171
|
+
dep.loc = /** @type {SourceLocation} */ (statement.loc);
|
141
172
|
parser.state.module.addPresentationalDependency(dep);
|
142
173
|
} else {
|
143
174
|
parser.walkExpression(statement.test);
|
@@ -176,41 +207,36 @@ class ConstPlugin {
|
|
176
207
|
// NOTE: When code runs in strict mode, `var` declarations
|
177
208
|
// are hoisted but `function` declarations don't.
|
178
209
|
//
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
declarations
|
184
|
-
|
185
|
-
|
186
|
-
declarations = getHoistedDeclarations(branchToRemove, true);
|
187
|
-
}
|
188
|
-
let replacement;
|
189
|
-
if (declarations.length > 0) {
|
190
|
-
replacement = `{ var ${declarations.join(", ")}; }`;
|
191
|
-
} else {
|
192
|
-
replacement = "{}";
|
193
|
-
}
|
210
|
+
const declarations = parser.scope.isStrict
|
211
|
+
? getHoistedDeclarations(branchToRemove, false)
|
212
|
+
: getHoistedDeclarations(branchToRemove, true);
|
213
|
+
const replacement =
|
214
|
+
declarations.length > 0
|
215
|
+
? `{ var ${declarations.join(", ")}; }`
|
216
|
+
: "{}";
|
194
217
|
const dep = new ConstDependency(
|
195
218
|
replacement,
|
196
|
-
branchToRemove.range
|
219
|
+
/** @type {Range} */ (branchToRemove.range)
|
197
220
|
);
|
198
|
-
dep.loc = branchToRemove.loc;
|
221
|
+
dep.loc = /** @type {SourceLocation} */ (branchToRemove.loc);
|
199
222
|
parser.state.module.addPresentationalDependency(dep);
|
200
223
|
}
|
201
224
|
return bool;
|
202
225
|
}
|
203
226
|
});
|
204
227
|
parser.hooks.expressionConditionalOperator.tap(
|
205
|
-
|
228
|
+
PLUGIN_NAME,
|
206
229
|
expression => {
|
207
230
|
if (parser.scope.isAsmJs) return;
|
208
231
|
const param = parser.evaluateExpression(expression.test);
|
209
232
|
const bool = param.asBool();
|
210
233
|
if (typeof bool === "boolean") {
|
211
234
|
if (!param.couldHaveSideEffects()) {
|
212
|
-
const dep = new ConstDependency(
|
213
|
-
|
235
|
+
const dep = new ConstDependency(
|
236
|
+
` ${bool}`,
|
237
|
+
/** @type {Range} */ (param.range)
|
238
|
+
);
|
239
|
+
dep.loc = /** @type {SourceLocation} */ (expression.loc);
|
214
240
|
parser.state.module.addPresentationalDependency(dep);
|
215
241
|
} else {
|
216
242
|
parser.walkExpression(expression.test);
|
@@ -229,15 +255,18 @@ class ConstPlugin {
|
|
229
255
|
const branchToRemove = bool
|
230
256
|
? expression.alternate
|
231
257
|
: expression.consequent;
|
232
|
-
const dep = new ConstDependency(
|
233
|
-
|
258
|
+
const dep = new ConstDependency(
|
259
|
+
"0",
|
260
|
+
/** @type {Range} */ (branchToRemove.range)
|
261
|
+
);
|
262
|
+
dep.loc = /** @type {SourceLocation} */ (branchToRemove.loc);
|
234
263
|
parser.state.module.addPresentationalDependency(dep);
|
235
264
|
return bool;
|
236
265
|
}
|
237
266
|
}
|
238
267
|
);
|
239
268
|
parser.hooks.expressionLogicalOperator.tap(
|
240
|
-
|
269
|
+
PLUGIN_NAME,
|
241
270
|
expression => {
|
242
271
|
if (parser.scope.isAsmJs) return;
|
243
272
|
if (
|
@@ -306,8 +335,11 @@ class ConstPlugin {
|
|
306
335
|
//
|
307
336
|
// returnfalse&&'foo'
|
308
337
|
//
|
309
|
-
const dep = new ConstDependency(
|
310
|
-
|
338
|
+
const dep = new ConstDependency(
|
339
|
+
` ${bool}`,
|
340
|
+
/** @type {Range} */ (param.range)
|
341
|
+
);
|
342
|
+
dep.loc = /** @type {SourceLocation} */ (expression.loc);
|
311
343
|
parser.state.module.addPresentationalDependency(dep);
|
312
344
|
} else {
|
313
345
|
parser.walkExpression(expression.left);
|
@@ -315,16 +347,16 @@ class ConstPlugin {
|
|
315
347
|
if (!keepRight) {
|
316
348
|
const dep = new ConstDependency(
|
317
349
|
"0",
|
318
|
-
expression.right.range
|
350
|
+
/** @type {Range} */ (expression.right.range)
|
319
351
|
);
|
320
|
-
dep.loc = expression.loc;
|
352
|
+
dep.loc = /** @type {SourceLocation} */ (expression.loc);
|
321
353
|
parser.state.module.addPresentationalDependency(dep);
|
322
354
|
}
|
323
355
|
return keepRight;
|
324
356
|
}
|
325
357
|
} else if (expression.operator === "??") {
|
326
358
|
const param = parser.evaluateExpression(expression.left);
|
327
|
-
const keepRight = param
|
359
|
+
const keepRight = param.asNullish();
|
328
360
|
if (typeof keepRight === "boolean") {
|
329
361
|
// ------------------------------------------
|
330
362
|
//
|
@@ -356,15 +388,18 @@ class ConstPlugin {
|
|
356
388
|
//
|
357
389
|
// returnnull??'foo'
|
358
390
|
//
|
359
|
-
const dep = new ConstDependency(
|
360
|
-
|
391
|
+
const dep = new ConstDependency(
|
392
|
+
" null",
|
393
|
+
/** @type {Range} */ (param.range)
|
394
|
+
);
|
395
|
+
dep.loc = /** @type {SourceLocation} */ (expression.loc);
|
361
396
|
parser.state.module.addPresentationalDependency(dep);
|
362
397
|
} else {
|
363
398
|
const dep = new ConstDependency(
|
364
399
|
"0",
|
365
|
-
expression.right.range
|
400
|
+
/** @type {Range} */ (expression.right.range)
|
366
401
|
);
|
367
|
-
dep.loc = expression.loc;
|
402
|
+
dep.loc = /** @type {SourceLocation} */ (expression.loc);
|
368
403
|
parser.state.module.addPresentationalDependency(dep);
|
369
404
|
parser.walkExpression(expression.left);
|
370
405
|
}
|
@@ -374,10 +409,10 @@ class ConstPlugin {
|
|
374
409
|
}
|
375
410
|
}
|
376
411
|
);
|
377
|
-
parser.hooks.optionalChaining.tap(
|
378
|
-
/** @type {
|
412
|
+
parser.hooks.optionalChaining.tap(PLUGIN_NAME, expr => {
|
413
|
+
/** @type {Expression[]} */
|
379
414
|
const optionalExpressionsStack = [];
|
380
|
-
/** @type {
|
415
|
+
/** @type {Expression | Super} */
|
381
416
|
let next = expr.expression;
|
382
417
|
|
383
418
|
while (
|
@@ -388,7 +423,7 @@ class ConstPlugin {
|
|
388
423
|
if (next.optional) {
|
389
424
|
// SuperNode can not be optional
|
390
425
|
optionalExpressionsStack.push(
|
391
|
-
/** @type {
|
426
|
+
/** @type {Expression} */ (next.object)
|
392
427
|
);
|
393
428
|
}
|
394
429
|
next = next.object;
|
@@ -396,7 +431,7 @@ class ConstPlugin {
|
|
396
431
|
if (next.optional) {
|
397
432
|
// SuperNode can not be optional
|
398
433
|
optionalExpressionsStack.push(
|
399
|
-
/** @type {
|
434
|
+
/** @type {Expression} */ (next.callee)
|
400
435
|
);
|
401
436
|
}
|
402
437
|
next = next.callee;
|
@@ -405,9 +440,11 @@ class ConstPlugin {
|
|
405
440
|
|
406
441
|
while (optionalExpressionsStack.length) {
|
407
442
|
const expression = optionalExpressionsStack.pop();
|
408
|
-
const evaluated = parser.evaluateExpression(
|
443
|
+
const evaluated = parser.evaluateExpression(
|
444
|
+
/** @type {Expression} */ (expression)
|
445
|
+
);
|
409
446
|
|
410
|
-
if (evaluated
|
447
|
+
if (evaluated.asNullish()) {
|
411
448
|
// ------------------------------------------
|
412
449
|
//
|
413
450
|
// Given the following code:
|
@@ -420,8 +457,11 @@ class ConstPlugin {
|
|
420
457
|
//
|
421
458
|
// ------------------------------------------
|
422
459
|
//
|
423
|
-
const dep = new ConstDependency(
|
424
|
-
|
460
|
+
const dep = new ConstDependency(
|
461
|
+
" undefined",
|
462
|
+
/** @type {Range} */ (expr.range)
|
463
|
+
);
|
464
|
+
dep.loc = /** @type {SourceLocation} */ (expr.loc);
|
425
465
|
parser.state.module.addPresentationalDependency(dep);
|
426
466
|
return true;
|
427
467
|
}
|
@@ -429,7 +469,7 @@ class ConstPlugin {
|
|
429
469
|
});
|
430
470
|
parser.hooks.evaluateIdentifier
|
431
471
|
.for("__resourceQuery")
|
432
|
-
.tap(
|
472
|
+
.tap(PLUGIN_NAME, expr => {
|
433
473
|
if (parser.scope.isAsmJs) return;
|
434
474
|
if (!parser.state.module) return;
|
435
475
|
return evaluateToString(
|
@@ -438,24 +478,24 @@ class ConstPlugin {
|
|
438
478
|
});
|
439
479
|
parser.hooks.expression
|
440
480
|
.for("__resourceQuery")
|
441
|
-
.tap(
|
481
|
+
.tap(PLUGIN_NAME, expr => {
|
442
482
|
if (parser.scope.isAsmJs) return;
|
443
483
|
if (!parser.state.module) return;
|
444
484
|
const dep = new CachedConstDependency(
|
445
485
|
JSON.stringify(
|
446
486
|
cachedParseResource(parser.state.module.resource).query
|
447
487
|
),
|
448
|
-
expr.range,
|
488
|
+
/** @type {Range} */ (expr.range),
|
449
489
|
"__resourceQuery"
|
450
490
|
);
|
451
|
-
dep.loc = expr.loc;
|
491
|
+
dep.loc = /** @type {SourceLocation} */ (expr.loc);
|
452
492
|
parser.state.module.addPresentationalDependency(dep);
|
453
493
|
return true;
|
454
494
|
});
|
455
495
|
|
456
496
|
parser.hooks.evaluateIdentifier
|
457
497
|
.for("__resourceFragment")
|
458
|
-
.tap(
|
498
|
+
.tap(PLUGIN_NAME, expr => {
|
459
499
|
if (parser.scope.isAsmJs) return;
|
460
500
|
if (!parser.state.module) return;
|
461
501
|
return evaluateToString(
|
@@ -464,31 +504,31 @@ class ConstPlugin {
|
|
464
504
|
});
|
465
505
|
parser.hooks.expression
|
466
506
|
.for("__resourceFragment")
|
467
|
-
.tap(
|
507
|
+
.tap(PLUGIN_NAME, expr => {
|
468
508
|
if (parser.scope.isAsmJs) return;
|
469
509
|
if (!parser.state.module) return;
|
470
510
|
const dep = new CachedConstDependency(
|
471
511
|
JSON.stringify(
|
472
512
|
cachedParseResource(parser.state.module.resource).fragment
|
473
513
|
),
|
474
|
-
expr.range,
|
514
|
+
/** @type {Range} */ (expr.range),
|
475
515
|
"__resourceFragment"
|
476
516
|
);
|
477
|
-
dep.loc = expr.loc;
|
517
|
+
dep.loc = /** @type {SourceLocation} */ (expr.loc);
|
478
518
|
parser.state.module.addPresentationalDependency(dep);
|
479
519
|
return true;
|
480
520
|
});
|
481
521
|
};
|
482
522
|
|
483
523
|
normalModuleFactory.hooks.parser
|
484
|
-
.for(
|
485
|
-
.tap(
|
524
|
+
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
525
|
+
.tap(PLUGIN_NAME, handler);
|
486
526
|
normalModuleFactory.hooks.parser
|
487
|
-
.for(
|
488
|
-
.tap(
|
527
|
+
.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
|
528
|
+
.tap(PLUGIN_NAME, handler);
|
489
529
|
normalModuleFactory.hooks.parser
|
490
|
-
.for(
|
491
|
-
.tap(
|
530
|
+
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
531
|
+
.tap(PLUGIN_NAME, handler);
|
492
532
|
}
|
493
533
|
);
|
494
534
|
}
|
@@ -22,9 +22,9 @@ class ContextExclusionPlugin {
|
|
22
22
|
*/
|
23
23
|
apply(compiler) {
|
24
24
|
compiler.hooks.contextModuleFactory.tap("ContextExclusionPlugin", cmf => {
|
25
|
-
cmf.hooks.contextModuleFiles.tap("ContextExclusionPlugin", files =>
|
26
|
-
|
27
|
-
|
25
|
+
cmf.hooks.contextModuleFiles.tap("ContextExclusionPlugin", files =>
|
26
|
+
files.filter(filePath => !this.negativeMatcher.test(filePath))
|
27
|
+
);
|
28
28
|
});
|
29
29
|
}
|
30
30
|
}
|