webpack 5.97.1 → 5.104.1
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 +368 -434
- package/bin/webpack.js +15 -9
- package/hot/dev-server.js +18 -3
- package/hot/emitter-event-target.js +7 -0
- package/hot/lazy-compilation-node.js +45 -29
- package/hot/lazy-compilation-universal.js +18 -0
- package/hot/lazy-compilation-web.js +15 -5
- package/hot/load-http.js +7 -0
- package/hot/log.js +15 -15
- package/hot/only-dev-server.js +19 -4
- package/hot/poll.js +1 -0
- package/lib/APIPlugin.js +48 -50
- package/lib/AbstractMethodError.js +1 -0
- package/lib/AsyncDependenciesBlock.js +4 -5
- package/lib/AutomaticPrefetchPlugin.js +22 -22
- package/lib/BannerPlugin.js +35 -40
- package/lib/Cache.js +12 -9
- package/lib/CacheFacade.js +13 -13
- package/lib/CaseSensitiveModulesWarning.js +6 -6
- package/lib/Chunk.js +68 -47
- package/lib/ChunkGraph.js +174 -95
- package/lib/ChunkGroup.js +32 -24
- package/lib/ChunkTemplate.js +8 -8
- package/lib/CleanPlugin.js +90 -42
- package/lib/CodeGenerationResults.js +12 -9
- package/lib/CompatibilityPlugin.js +70 -21
- package/lib/Compilation.js +827 -550
- package/lib/Compiler.js +137 -109
- package/lib/ConcatenationScope.js +45 -8
- package/lib/ConditionalInitFragment.js +1 -1
- package/lib/ConstPlugin.js +89 -59
- package/lib/ContextExclusionPlugin.js +5 -4
- package/lib/ContextModule.js +66 -51
- package/lib/ContextModuleFactory.js +51 -30
- package/lib/ContextReplacementPlugin.js +89 -34
- package/lib/CssModule.js +8 -4
- package/lib/DefinePlugin.js +209 -57
- package/lib/DelegatedModule.js +34 -23
- package/lib/DelegatedModuleFactoryPlugin.js +27 -24
- package/lib/DelegatedPlugin.js +4 -2
- package/lib/DependenciesBlock.js +0 -2
- package/lib/Dependency.js +37 -19
- package/lib/DependencyTemplate.js +2 -0
- package/lib/DependencyTemplates.js +5 -6
- package/lib/DllEntryPlugin.js +8 -4
- package/lib/DllModule.js +11 -12
- package/lib/DllModuleFactory.js +2 -2
- package/lib/DllPlugin.js +9 -6
- package/lib/DllReferencePlugin.js +60 -65
- package/lib/DotenvPlugin.js +462 -0
- package/lib/DynamicEntryPlugin.js +8 -8
- package/lib/EntryOptionPlugin.js +8 -6
- package/lib/EntryPlugin.js +5 -3
- package/lib/Entrypoint.js +19 -0
- package/lib/EnvironmentNotSupportAsyncWarning.js +0 -3
- package/lib/EnvironmentPlugin.js +26 -19
- package/lib/ErrorHelpers.js +6 -6
- package/lib/EvalDevToolModulePlugin.js +17 -14
- package/lib/EvalSourceMapDevToolPlugin.js +156 -142
- package/lib/ExportsInfo.js +180 -115
- package/lib/ExportsInfoApiPlugin.js +2 -2
- package/lib/ExternalModule.js +256 -102
- package/lib/ExternalModuleFactoryPlugin.js +66 -29
- package/lib/ExternalsPlugin.js +57 -2
- package/lib/FileSystemInfo.js +313 -247
- package/lib/FlagAllModulesAsUsedPlugin.js +2 -2
- package/lib/FlagDependencyExportsPlugin.js +29 -19
- package/lib/FlagDependencyUsagePlugin.js +9 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +1 -1
- package/lib/Generator.js +43 -10
- package/lib/GraphHelpers.js +11 -3
- package/lib/HookWebpackError.js +35 -7
- package/lib/HotModuleReplacementPlugin.js +149 -108
- package/lib/HotUpdateChunk.js +0 -3
- package/lib/IgnoreErrorModuleFactory.js +2 -2
- package/lib/IgnorePlugin.js +16 -13
- package/lib/IgnoreWarningsPlugin.js +6 -4
- package/lib/InitFragment.js +41 -23
- package/lib/InvalidDependenciesModuleWarning.js +2 -3
- package/lib/JavascriptMetaInfoPlugin.js +2 -4
- package/lib/LibManifestPlugin.js +12 -13
- package/lib/LoaderOptionsPlugin.js +12 -14
- package/lib/LoaderTargetPlugin.js +5 -3
- package/lib/MainTemplate.js +18 -29
- package/lib/ManifestPlugin.js +235 -0
- package/lib/Module.js +138 -60
- package/lib/ModuleBuildError.js +4 -2
- package/lib/ModuleDependencyError.js +4 -3
- package/lib/ModuleDependencyWarning.js +4 -3
- package/lib/ModuleError.js +1 -1
- package/lib/ModuleFactory.js +10 -3
- package/lib/ModuleFilenameHelpers.js +63 -60
- package/lib/ModuleGraph.js +195 -70
- package/lib/ModuleGraphConnection.js +14 -20
- package/lib/ModuleInfoHeaderPlugin.js +15 -16
- package/lib/ModuleNotFoundError.js +1 -1
- package/lib/ModuleParseError.js +8 -4
- package/lib/ModuleSourceTypeConstants.js +189 -0
- package/lib/ModuleTemplate.js +7 -8
- package/lib/ModuleTypeConstants.js +37 -15
- package/lib/ModuleWarning.js +1 -1
- package/lib/MultiCompiler.js +64 -49
- package/lib/MultiStats.js +19 -14
- package/lib/MultiWatching.js +7 -11
- package/lib/NoEmitOnErrorsPlugin.js +5 -3
- package/lib/NodeStuffPlugin.js +438 -126
- package/lib/NormalModule.js +322 -201
- package/lib/NormalModuleFactory.js +230 -117
- package/lib/NormalModuleReplacementPlugin.js +37 -39
- package/lib/NullFactory.js +3 -2
- package/lib/OptimizationStages.js +1 -1
- package/lib/OptionsApply.js +1 -1
- package/lib/Parser.js +5 -3
- package/lib/PlatformPlugin.js +3 -1
- package/lib/PrefetchPlugin.js +6 -4
- package/lib/ProgressPlugin.js +48 -49
- package/lib/ProvidePlugin.js +7 -5
- package/lib/RawModule.js +26 -12
- package/lib/RecordIdsPlugin.js +88 -110
- package/lib/RequestShortener.js +3 -1
- package/lib/ResolverFactory.js +15 -14
- package/lib/RuntimeGlobals.js +216 -153
- package/lib/RuntimeModule.js +7 -6
- package/lib/RuntimePlugin.js +115 -62
- package/lib/RuntimeTemplate.js +248 -76
- package/lib/SelfModuleFactory.js +2 -2
- package/lib/SizeFormatHelpers.js +2 -2
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +17 -27
- package/lib/SourceMapDevToolPlugin.js +72 -59
- package/lib/Stats.js +2 -3
- package/lib/Template.js +31 -24
- package/lib/TemplatedPathPlugin.js +24 -21
- package/lib/UseStrictPlugin.js +1 -1
- package/lib/WarnCaseSensitiveModulesPlugin.js +36 -37
- package/lib/WarnDeprecatedOptionPlugin.js +7 -8
- package/lib/WarnNoModeSetPlugin.js +3 -1
- package/lib/WatchIgnorePlugin.js +11 -9
- package/lib/Watching.js +27 -29
- package/lib/WebpackError.js +10 -3
- package/lib/WebpackIsIncludedPlugin.js +4 -5
- package/lib/WebpackOptionsApply.js +263 -135
- package/lib/asset/AssetBytesGenerator.js +171 -0
- package/lib/asset/AssetBytesParser.js +37 -0
- package/lib/asset/AssetGenerator.js +285 -223
- package/lib/asset/AssetModulesPlugin.js +103 -41
- package/lib/asset/AssetParser.js +7 -3
- package/lib/asset/AssetSourceGenerator.js +41 -17
- package/lib/asset/RawDataUrlModule.js +17 -9
- package/lib/async-modules/AsyncModuleHelpers.js +52 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +39 -24
- package/lib/async-modules/InferAsyncModulesPlugin.js +25 -26
- package/lib/buildChunkGraph.js +36 -17
- package/lib/cache/AddBuildDependenciesPlugin.js +5 -6
- package/lib/cache/IdleFileCachePlugin.js +22 -20
- package/lib/cache/MemoryCachePlugin.js +3 -3
- package/lib/cache/MemoryWithGcCachePlugin.js +17 -11
- package/lib/cache/PackFileCacheStrategy.js +198 -170
- package/lib/cache/ResolverCachePlugin.js +58 -48
- package/lib/cache/getLazyHashedEtag.js +5 -4
- package/lib/cli.js +197 -39
- package/lib/config/browserslistTargetHandler.js +110 -85
- package/lib/config/defaults.js +514 -113
- package/lib/config/normalization.js +91 -64
- package/lib/config/target.js +30 -18
- package/lib/container/ContainerEntryDependency.js +0 -1
- package/lib/container/ContainerEntryModule.js +16 -15
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/ContainerPlugin.js +5 -6
- package/lib/container/ContainerReferencePlugin.js +27 -30
- package/lib/container/FallbackDependency.js +2 -1
- package/lib/container/FallbackModule.js +19 -14
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +7 -7
- package/lib/container/ModuleFederationPlugin.js +4 -4
- package/lib/container/RemoteModule.js +14 -14
- package/lib/container/RemoteRuntimeModule.js +2 -2
- package/lib/container/options.js +9 -9
- package/lib/css/CssGenerator.js +366 -74
- package/lib/css/CssLoadingRuntimeModule.js +26 -16
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +56 -0
- package/lib/css/CssModulesPlugin.js +191 -142
- package/lib/css/CssParser.js +1756 -740
- package/lib/css/walkCssTokens.js +180 -67
- package/lib/debug/ProfilingPlugin.js +135 -51
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +29 -28
- package/lib/dependencies/AMDPlugin.js +18 -11
- package/lib/dependencies/AMDRequireArrayDependency.js +5 -4
- package/lib/dependencies/AMDRequireContextDependency.js +2 -1
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +35 -26
- package/lib/dependencies/AMDRuntimeModules.js +3 -1
- package/lib/dependencies/CachedConstDependency.js +24 -18
- package/lib/dependencies/CommonJsExportRequireDependency.js +31 -24
- package/lib/dependencies/CommonJsExportsDependency.js +2 -1
- package/lib/dependencies/CommonJsExportsParserPlugin.js +50 -36
- package/lib/dependencies/CommonJsFullRequireDependency.js +7 -13
- package/lib/dependencies/CommonJsImportsParserPlugin.js +146 -127
- package/lib/dependencies/CommonJsPlugin.js +29 -18
- package/lib/dependencies/CommonJsRequireContextDependency.js +4 -3
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +4 -4
- package/lib/dependencies/ConstDependency.js +2 -2
- package/lib/dependencies/ContextDependency.js +10 -5
- package/lib/dependencies/ContextDependencyHelpers.js +21 -13
- package/lib/dependencies/ContextDependencyTemplateAsId.js +10 -9
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +13 -10
- package/lib/dependencies/ContextElementDependency.js +23 -12
- package/lib/dependencies/CssIcssExportDependency.js +402 -22
- package/lib/dependencies/CssIcssImportDependency.js +116 -51
- package/lib/dependencies/CssIcssSymbolDependency.js +33 -35
- package/lib/dependencies/CssImportDependency.js +17 -14
- package/lib/dependencies/CssUrlDependency.js +8 -13
- package/lib/dependencies/DynamicExports.js +19 -19
- package/lib/dependencies/ExportsInfoDependency.js +13 -10
- package/lib/dependencies/ExternalModuleDependency.js +7 -7
- package/lib/dependencies/ExternalModuleInitFragment.js +3 -2
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +96 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +96 -5
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -5
- package/lib/dependencies/HarmonyCompatibilityDependency.js +0 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +10 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +19 -8
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +136 -99
- package/lib/dependencies/HarmonyExportExpressionDependency.js +1 -1
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +152 -61
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -2
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +2 -2
- package/lib/dependencies/HarmonyExports.js +5 -5
- package/lib/dependencies/HarmonyImportDependency.js +92 -45
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +201 -163
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +5 -6
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +69 -42
- package/lib/dependencies/HarmonyModulesPlugin.js +16 -11
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -15
- package/lib/dependencies/ImportContextDependency.js +15 -1
- package/lib/dependencies/ImportDependency.js +25 -7
- package/lib/dependencies/ImportEagerDependency.js +7 -5
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +23 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +2 -2
- package/lib/dependencies/ImportMetaPlugin.js +172 -20
- package/lib/dependencies/ImportParserPlugin.js +327 -49
- package/lib/dependencies/ImportPhase.js +121 -0
- package/lib/dependencies/ImportPlugin.js +3 -1
- package/lib/dependencies/ImportWeakDependency.js +7 -5
- package/lib/dependencies/JsonExportsDependency.js +54 -28
- package/lib/dependencies/LoaderDependency.js +0 -3
- package/lib/dependencies/LoaderImportDependency.js +0 -3
- package/lib/dependencies/LoaderPlugin.js +24 -25
- package/lib/dependencies/LocalModulesHelpers.js +4 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +2 -4
- package/lib/dependencies/ModuleDependency.js +14 -13
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +1 -1
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/ProvidedDependency.js +8 -10
- package/lib/dependencies/PureExpressionDependency.js +1 -2
- package/lib/dependencies/RequireContextDependency.js +2 -1
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +47 -44
- package/lib/dependencies/RequireContextPlugin.js +5 -2
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +3 -3
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +101 -99
- package/lib/dependencies/RequireEnsurePlugin.js +6 -6
- package/lib/dependencies/RequireIncludeDependency.js +2 -2
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +33 -34
- package/lib/dependencies/RequireIncludePlugin.js +1 -0
- package/lib/dependencies/RequireResolveContextDependency.js +1 -1
- package/lib/dependencies/RequireResolveDependency.js +3 -3
- package/lib/dependencies/RuntimeRequirementsDependency.js +3 -4
- package/lib/dependencies/StaticExportsDependency.js +3 -5
- package/lib/dependencies/SystemPlugin.js +4 -4
- package/lib/dependencies/URLContextDependency.js +65 -0
- package/lib/dependencies/URLDependency.js +3 -8
- package/lib/dependencies/URLPlugin.js +18 -159
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +3 -3
- package/lib/dependencies/WebAssemblyImportDependency.js +2 -2
- package/lib/dependencies/WebpackIsIncludedDependency.js +2 -3
- package/lib/dependencies/WorkerDependency.js +8 -6
- package/lib/dependencies/WorkerPlugin.js +131 -67
- package/lib/dependencies/getFunctionExpression.js +2 -2
- package/lib/dependencies/processExportInfo.js +4 -4
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +1 -1
- package/lib/esm/ModuleChunkFormatPlugin.js +232 -179
- package/lib/esm/ModuleChunkLoadingPlugin.js +112 -57
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +102 -28
- package/lib/formatLocation.js +2 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +41 -29
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +43 -33
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +37 -0
- package/lib/hmr/LazyCompilationPlugin.js +67 -54
- package/lib/hmr/lazyCompilationBackend.js +23 -18
- package/lib/ids/ChunkModuleIdRangePlugin.js +14 -11
- package/lib/ids/DeterministicChunkIdsPlugin.js +32 -37
- package/lib/ids/DeterministicModuleIdsPlugin.js +52 -52
- package/lib/ids/HashedModuleIdsPlugin.js +15 -13
- package/lib/ids/IdHelpers.js +66 -49
- package/lib/ids/NamedChunkIdsPlugin.js +14 -17
- package/lib/ids/NamedModuleIdsPlugin.js +12 -14
- package/lib/ids/NaturalChunkIdsPlugin.js +6 -4
- package/lib/ids/NaturalModuleIdsPlugin.js +4 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +7 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +8 -7
- package/lib/ids/SyncModuleIdsPlugin.js +18 -13
- package/lib/index.js +54 -14
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +116 -119
- package/lib/javascript/BasicEvaluatedExpression.js +26 -18
- package/lib/javascript/ChunkFormatHelpers.js +70 -0
- package/lib/javascript/ChunkHelpers.js +17 -5
- package/lib/javascript/CommonJsChunkFormatPlugin.js +114 -141
- package/lib/javascript/EnableChunkLoadingPlugin.js +7 -4
- package/lib/javascript/JavascriptGenerator.js +122 -100
- package/lib/javascript/JavascriptModulesPlugin.js +332 -152
- package/lib/javascript/JavascriptParser.js +1488 -1052
- package/lib/javascript/JavascriptParserHelpers.js +48 -47
- package/lib/javascript/StartupHelpers.js +23 -22
- package/lib/json/JsonData.js +4 -4
- package/lib/json/JsonGenerator.js +66 -32
- package/lib/json/JsonModulesPlugin.js +16 -6
- package/lib/json/JsonParser.js +23 -8
- package/lib/library/AbstractLibraryPlugin.js +45 -10
- package/lib/library/AmdLibraryPlugin.js +7 -5
- package/lib/library/AssignLibraryPlugin.js +71 -17
- package/lib/library/EnableLibraryPlugin.js +51 -25
- package/lib/library/ExportPropertyLibraryPlugin.js +12 -18
- package/lib/library/JsonpLibraryPlugin.js +5 -2
- package/lib/library/ModuleLibraryPlugin.js +230 -18
- package/lib/library/SystemLibraryPlugin.js +29 -11
- package/lib/library/UmdLibraryPlugin.js +35 -32
- package/lib/logging/Logger.js +18 -15
- package/lib/logging/createConsoleLogger.js +27 -27
- package/lib/logging/runtime.js +11 -11
- package/lib/logging/truncateArgs.js +5 -5
- package/lib/node/CommonJsChunkLoadingPlugin.js +72 -75
- package/lib/node/NodeEnvironmentPlugin.js +9 -3
- package/lib/node/NodeTargetPlugin.js +9 -1
- package/lib/node/NodeTemplatePlugin.js +2 -2
- package/lib/node/NodeWatchFileSystem.js +4 -4
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +22 -38
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +10 -11
- package/lib/node/ReadFileCompileWasmPlugin.js +11 -14
- package/lib/node/RequireChunkLoadingRuntimeModule.js +22 -30
- package/lib/node/nodeConsole.js +12 -7
- package/lib/optimize/AggressiveMergingPlugin.js +46 -47
- package/lib/optimize/AggressiveSplittingPlugin.js +233 -238
- package/lib/optimize/ConcatenatedModule.js +620 -251
- package/lib/optimize/EnsureChunkConditionsPlugin.js +58 -58
- package/lib/optimize/FlagIncludedChunksPlugin.js +93 -96
- package/lib/optimize/InnerGraph.js +139 -124
- package/lib/optimize/InnerGraphPlugin.js +29 -24
- package/lib/optimize/LimitChunkCountPlugin.js +32 -8
- package/lib/optimize/MangleExportsPlugin.js +22 -22
- package/lib/optimize/MergeDuplicateChunksPlugin.js +80 -81
- package/lib/optimize/MinChunkSizePlugin.js +12 -7
- package/lib/optimize/ModuleConcatenationPlugin.js +92 -71
- package/lib/optimize/RealContentHashPlugin.js +58 -44
- package/lib/optimize/RemoveEmptyChunksPlugin.js +8 -5
- package/lib/optimize/RemoveParentModulesPlugin.js +7 -4
- package/lib/optimize/RuntimeChunkPlugin.js +22 -25
- package/lib/optimize/SideEffectsFlagPlugin.js +44 -26
- package/lib/optimize/SplitChunksPlugin.js +209 -158
- package/lib/performance/AssetsOverSizeLimitWarning.js +1 -1
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +8 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +5 -7
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +61 -64
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +3 -4
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +2 -2
- package/lib/rules/BasicEffectRulePlugin.js +14 -5
- package/lib/rules/BasicMatcherRulePlugin.js +18 -7
- package/lib/rules/ObjectMatcherRulePlugin.js +17 -6
- package/lib/rules/RuleSetCompiler.js +73 -32
- package/lib/rules/UseEffectRulePlugin.js +61 -25
- package/lib/runtime/AsyncModuleRuntimeModule.js +74 -9
- package/lib/runtime/AutoPublicPathRuntimeModule.js +9 -4
- package/lib/runtime/BaseUriRuntimeModule.js +2 -2
- package/lib/runtime/CompatRuntimeModule.js +0 -1
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +1 -1
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +34 -35
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -1
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +1 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +0 -2
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +248 -0
- package/lib/runtime/PublicPathRuntimeModule.js +2 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +2 -1
- package/lib/runtime/StartupChunkDependenciesPlugin.js +39 -42
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +10 -9
- package/lib/runtime/StartupEntrypointRuntimeModule.js +0 -1
- package/lib/runtime/SystemContextRuntimeModule.js +0 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +64 -0
- package/lib/schemes/DataUriPlugin.js +9 -31
- package/lib/schemes/FileUriPlugin.js +11 -6
- package/lib/schemes/HttpUriPlugin.js +381 -261
- package/lib/schemes/VirtualUrlPlugin.js +222 -0
- package/lib/serialization/AggregateErrorSerializer.js +41 -0
- package/lib/serialization/BinaryMiddleware.js +51 -33
- package/lib/serialization/ErrorObjectSerializer.js +7 -2
- package/lib/serialization/FileMiddleware.js +101 -71
- package/lib/serialization/NullPrototypeObjectSerializer.js +5 -3
- package/lib/serialization/ObjectMiddleware.js +130 -54
- package/lib/serialization/PlainObjectSerializer.js +1 -1
- package/lib/serialization/Serializer.js +38 -20
- package/lib/serialization/SerializerMiddleware.js +121 -49
- package/lib/serialization/SingleItemMiddleware.js +9 -7
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedModule.js +9 -9
- package/lib/sharing/ConsumeSharedPlugin.js +14 -14
- package/lib/sharing/ConsumeSharedRuntimeModule.js +11 -8
- package/lib/sharing/ProvideSharedModule.js +9 -11
- package/lib/sharing/ProvideSharedModuleFactory.js +5 -3
- package/lib/sharing/ProvideSharedPlugin.js +15 -10
- package/lib/sharing/SharePlugin.js +3 -4
- package/lib/sharing/ShareRuntimeModule.js +7 -6
- package/lib/sharing/resolveMatchedConfigs.js +27 -13
- package/lib/sharing/utils.js +37 -43
- package/lib/stats/DefaultStatsFactoryPlugin.js +455 -286
- package/lib/stats/DefaultStatsPresetPlugin.js +77 -46
- package/lib/stats/DefaultStatsPrinterPlugin.js +583 -419
- package/lib/stats/StatsFactory.js +75 -32
- package/lib/stats/StatsPrinter.js +71 -51
- package/lib/url/URLParserPlugin.js +264 -0
- package/lib/util/ArrayHelpers.js +6 -8
- package/lib/util/ArrayQueue.js +1 -1
- package/lib/util/AsyncQueue.js +11 -10
- package/lib/util/Hash.js +37 -5
- package/lib/util/IterableHelpers.js +4 -4
- package/lib/util/LazyBucketSortedSet.js +46 -27
- package/lib/util/LazySet.js +16 -10
- package/lib/util/MapHelpers.js +1 -1
- package/lib/util/ParallelismFactorCalculator.js +2 -2
- package/lib/util/Semaphore.js +3 -3
- package/lib/util/SetHelpers.js +6 -6
- package/lib/util/SortableSet.js +11 -9
- package/lib/util/StackedCacheMap.js +2 -2
- package/lib/util/StackedMap.js +3 -3
- package/lib/util/StringXor.js +2 -1
- package/lib/util/TupleQueue.js +11 -8
- package/lib/util/TupleSet.js +44 -19
- package/lib/util/URLAbsoluteSpecifier.js +3 -4
- package/lib/util/WeakTupleMap.js +56 -42
- package/lib/util/binarySearchBounds.js +4 -3
- package/lib/util/chainedImports.js +3 -1
- package/lib/util/cleverMerge.js +171 -107
- package/lib/util/comparators.js +265 -162
- package/lib/util/compileBooleanMatcher.js +120 -41
- package/lib/util/concatenate.js +20 -16
- package/lib/util/conventions.js +73 -74
- package/lib/util/create-schema-validation.js +8 -8
- package/lib/util/createHash.js +32 -135
- package/lib/util/dataURL.js +39 -0
- package/lib/util/deprecation.js +119 -116
- package/lib/util/deterministicGrouping.js +56 -47
- package/lib/util/extractSourceMap.js +319 -0
- package/lib/util/extractUrlAndGlobal.js +1 -1
- package/lib/util/findGraphRoots.js +19 -9
- package/lib/util/fs.js +169 -141
- package/lib/util/hash/BatchedHash.js +50 -10
- package/lib/util/hash/BulkUpdateHash.js +138 -0
- package/lib/util/hash/DebugHash.js +75 -0
- package/lib/util/hash/hash-digest.js +216 -0
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/wasm-hash.js +59 -17
- package/lib/util/identifier.js +124 -61
- package/lib/util/internalSerializables.js +4 -6
- package/lib/util/magicComment.js +9 -5
- package/lib/util/makeSerializable.js +2 -2
- package/lib/util/memoize.js +5 -2
- package/lib/util/objectToMap.js +3 -2
- package/lib/util/processAsyncTree.js +5 -5
- package/lib/util/propertyAccess.js +1 -1
- package/lib/util/propertyName.js +2 -3
- package/lib/util/registerExternalSerializer.js +16 -20
- package/lib/util/removeBOM.js +25 -0
- package/lib/util/runtime.js +72 -56
- package/lib/util/semver.js +44 -33
- package/lib/util/serialization.js +56 -56
- package/lib/util/smartGrouping.js +42 -27
- package/lib/util/source.js +5 -4
- package/lib/util/traverseDestructuringAssignmentProperties.js +45 -0
- package/lib/validateSchema.js +7 -9
- package/lib/wasm/EnableWasmLoadingPlugin.js +22 -12
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +9 -5
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +15 -3
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +28 -22
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +47 -57
- package/lib/wasm-async/AsyncWebAssemblyParser.js +2 -10
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +8 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +23 -17
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +55 -57
- package/lib/wasm-sync/WebAssemblyGenerator.js +56 -41
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +6 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +25 -10
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +11 -12
- package/lib/wasm-sync/WebAssemblyParser.js +10 -17
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- package/lib/web/FetchCompileAsyncWasmPlugin.js +4 -4
- package/lib/web/FetchCompileWasmPlugin.js +6 -8
- package/lib/web/JsonpChunkLoadingPlugin.js +74 -74
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +10 -26
- package/lib/web/JsonpTemplatePlugin.js +0 -1
- package/lib/webpack.js +107 -87
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +79 -75
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +38 -51
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -0
- package/module.d.ts +5 -0
- package/package.json +149 -129
- package/schemas/WebpackOptions.check.d.ts +1 -1
- package/schemas/WebpackOptions.check.js +2 -2
- package/schemas/WebpackOptions.json +543 -190
- package/schemas/plugins/BannerPlugin.check.d.ts +1 -1
- package/schemas/plugins/BannerPlugin.check.js +2 -2
- package/schemas/plugins/BannerPlugin.json +4 -0
- package/schemas/plugins/DllPlugin.check.d.ts +1 -1
- package/schemas/plugins/DllPlugin.check.js +1 -1
- package/schemas/plugins/DllReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -1
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -1
- package/schemas/plugins/{HashedModuleIdsPlugin.check.d.ts → ManifestPlugin.check.d.ts} +2 -2
- package/schemas/plugins/ManifestPlugin.check.js +6 -0
- package/schemas/plugins/ManifestPlugin.json +98 -0
- package/schemas/plugins/ProgressPlugin.check.d.ts +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -2
- package/schemas/plugins/SourceMapDevToolPlugin.json +23 -6
- package/schemas/plugins/WatchIgnorePlugin.check.d.ts +1 -1
- package/schemas/plugins/WatchIgnorePlugin.check.js +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +2 -2
- package/schemas/plugins/container/ContainerReferencePlugin.json +4 -1
- package/schemas/plugins/container/ExternalsType.check.d.ts +1 -1
- package/schemas/plugins/container/ExternalsType.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -2
- package/schemas/plugins/container/ModuleFederationPlugin.json +4 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +2 -2
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssModuleParserOptions.check.js +2 -2
- package/schemas/plugins/css/CssParserOptions.check.d.ts +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +2 -2
- package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +1 -1
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -1
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +7 -0
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +6 -0
- package/schemas/plugins/{HashedModuleIdsPlugin.json → ids/HashedModuleIdsPlugin.json} +15 -2
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +1 -1
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/{css/CssGlobalParserOptions.check.d.ts → json/JsonModulesPluginGenerator.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.json +3 -0
- package/schemas/plugins/{css/CssGlobalGeneratorOptions.check.d.ts → json/JsonModulesPluginParser.check.d.ts} +1 -1
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +6 -0
- package/schemas/plugins/json/JsonModulesPluginParser.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +7 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +6 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.json +77 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.d.ts +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5115 -1863
- package/SECURITY.md +0 -9
- package/lib/ModuleSourceTypesConstants.js +0 -112
- package/lib/dependencies/CssLocalIdentifierDependency.js +0 -250
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +0 -111
- package/lib/library/ModernModuleLibraryPlugin.js +0 -144
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.check.d.ts +0 -7
- package/schemas/plugins/JsonModulesPluginParser.check.js +0 -6
- package/schemas/plugins/JsonModulesPluginParser.json +0 -12
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssAutoParserOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +0 -3
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +0 -6
- package/schemas/plugins/css/CssGlobalParserOptions.json +0 -3
|
@@ -10,9 +10,10 @@ const Template = require("../Template");
|
|
|
10
10
|
const { first } = require("../util/SetHelpers");
|
|
11
11
|
|
|
12
12
|
/** @typedef {import("../Chunk")} Chunk */
|
|
13
|
+
/** @typedef {import("../Chunk").ChunkId} ChunkId */
|
|
13
14
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
|
14
15
|
/** @typedef {import("../Compilation")} Compilation */
|
|
15
|
-
/** @typedef {import("../Compilation").
|
|
16
|
+
/** @typedef {import("../Compilation").HashWithLengthFunction} HashWithLengthFunction */
|
|
16
17
|
/** @typedef {import("../TemplatedPathPlugin").TemplatePath} TemplatePath */
|
|
17
18
|
|
|
18
19
|
class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
@@ -20,7 +21,7 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
20
21
|
* @param {string} contentType the contentType to use the content hash for
|
|
21
22
|
* @param {string} name kind of filename
|
|
22
23
|
* @param {string} global function name to be assigned
|
|
23
|
-
* @param {
|
|
24
|
+
* @param {(chunk: Chunk) => TemplatePath | false} getFilenameForChunk functor to get the filename or function
|
|
24
25
|
* @param {boolean} allChunks when false, only async chunks are included
|
|
25
26
|
*/
|
|
26
27
|
constructor(contentType, name, global, getFilenameForChunk, allChunks) {
|
|
@@ -52,7 +53,7 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
52
53
|
* @param {Chunk} c the chunk
|
|
53
54
|
* @returns {void}
|
|
54
55
|
*/
|
|
55
|
-
const addChunk = c => {
|
|
56
|
+
const addChunk = (c) => {
|
|
56
57
|
const chunkFilename = getFilenameForChunk(c);
|
|
57
58
|
if (chunkFilename) {
|
|
58
59
|
let set = chunkFilenames.get(chunkFilename);
|
|
@@ -100,8 +101,8 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
100
101
|
.getTreeRuntimeRequirements(chunk)
|
|
101
102
|
.has(RuntimeGlobals.ensureChunkIncludeEntries);
|
|
102
103
|
if (includeEntries) {
|
|
103
|
-
includedChunksMessages.push("
|
|
104
|
-
for (const c of chunkGraph.
|
|
104
|
+
includedChunksMessages.push("chunks that the entrypoint depends on");
|
|
105
|
+
for (const c of chunkGraph.getRuntimeChunkDependentChunksIterable(
|
|
105
106
|
chunk
|
|
106
107
|
)) {
|
|
107
108
|
addChunk(c);
|
|
@@ -124,10 +125,10 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
124
125
|
*/
|
|
125
126
|
const addStaticUrl = (c, chunkFilename) => {
|
|
126
127
|
/**
|
|
127
|
-
* @param {
|
|
128
|
+
* @param {ChunkId} value a value
|
|
128
129
|
* @returns {string} string to put in quotes
|
|
129
130
|
*/
|
|
130
|
-
const unquotedStringify = value => {
|
|
131
|
+
const unquotedStringify = (value) => {
|
|
131
132
|
const str = `${value}`;
|
|
132
133
|
if (str.length >= 5 && str === `${c.id}`) {
|
|
133
134
|
// This is shorter and generates the same result
|
|
@@ -138,9 +139,9 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
138
139
|
};
|
|
139
140
|
/**
|
|
140
141
|
* @param {string} value string
|
|
141
|
-
* @returns {
|
|
142
|
+
* @returns {HashWithLengthFunction} string to put in quotes with length
|
|
142
143
|
*/
|
|
143
|
-
const unquotedStringifyWithLength = value => length =>
|
|
144
|
+
const unquotedStringifyWithLength = (value) => (length) =>
|
|
144
145
|
unquotedStringify(`${value}`.slice(0, length));
|
|
145
146
|
const chunkFilenameValue =
|
|
146
147
|
typeof chunkFilename === "function"
|
|
@@ -153,17 +154,15 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
153
154
|
: JSON.stringify(chunkFilename);
|
|
154
155
|
const staticChunkFilename = compilation.getPath(chunkFilenameValue, {
|
|
155
156
|
hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
|
|
156
|
-
hashWithLength: length =>
|
|
157
|
+
hashWithLength: (length) =>
|
|
157
158
|
`" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
|
|
158
159
|
chunk: {
|
|
159
|
-
id: unquotedStringify(/** @type {
|
|
160
|
+
id: unquotedStringify(/** @type {ChunkId} */ (c.id)),
|
|
160
161
|
hash: unquotedStringify(/** @type {string} */ (c.renderedHash)),
|
|
161
162
|
hashWithLength: unquotedStringifyWithLength(
|
|
162
163
|
/** @type {string} */ (c.renderedHash)
|
|
163
164
|
),
|
|
164
|
-
name: unquotedStringify(
|
|
165
|
-
c.name || /** @type {number | string} */ (c.id)
|
|
166
|
-
),
|
|
165
|
+
name: unquotedStringify(c.name || /** @type {ChunkId} */ (c.id)),
|
|
167
166
|
contentHash: {
|
|
168
167
|
[contentType]: unquotedStringify(c.contentHash[contentType])
|
|
169
168
|
},
|
|
@@ -191,14 +190,14 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
191
190
|
}
|
|
192
191
|
|
|
193
192
|
/**
|
|
194
|
-
* @param {
|
|
193
|
+
* @param {(chunk: Chunk) => string | number} fn function from chunk to value
|
|
195
194
|
* @returns {string} code with static mapping of results of fn
|
|
196
195
|
*/
|
|
197
|
-
const createMap = fn => {
|
|
198
|
-
/** @type {Record<
|
|
196
|
+
const createMap = (fn) => {
|
|
197
|
+
/** @type {Record<ChunkId, ChunkId>} */
|
|
199
198
|
const obj = {};
|
|
200
199
|
let useId = false;
|
|
201
|
-
/** @type {
|
|
200
|
+
/** @type {ChunkId | undefined} */
|
|
202
201
|
let lastKey;
|
|
203
202
|
let entries = 0;
|
|
204
203
|
for (const c of dynamicUrlChunks) {
|
|
@@ -206,8 +205,8 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
206
205
|
if (value === c.id) {
|
|
207
206
|
useId = true;
|
|
208
207
|
} else {
|
|
209
|
-
obj[/** @type {
|
|
210
|
-
lastKey = /** @type {
|
|
208
|
+
obj[/** @type {ChunkId} */ (c.id)] = value;
|
|
209
|
+
lastKey = /** @type {ChunkId} */ (c.id);
|
|
211
210
|
entries++;
|
|
212
211
|
}
|
|
213
212
|
}
|
|
@@ -215,9 +214,9 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
215
214
|
if (entries === 1) {
|
|
216
215
|
return useId
|
|
217
216
|
? `(chunkId === ${JSON.stringify(lastKey)} ? ${JSON.stringify(
|
|
218
|
-
obj[/** @type {
|
|
217
|
+
obj[/** @type {ChunkId} */ (lastKey)]
|
|
219
218
|
)} : chunkId)`
|
|
220
|
-
: JSON.stringify(obj[/** @type {
|
|
219
|
+
: JSON.stringify(obj[/** @type {ChunkId} */ (lastKey)]);
|
|
221
220
|
}
|
|
222
221
|
return useId
|
|
223
222
|
? `(${JSON.stringify(obj)}[chunkId] || chunkId)`
|
|
@@ -225,36 +224,36 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
225
224
|
};
|
|
226
225
|
|
|
227
226
|
/**
|
|
228
|
-
* @param {
|
|
227
|
+
* @param {(chunk: Chunk) => string | number} fn function from chunk to value
|
|
229
228
|
* @returns {string} code with static mapping of results of fn for including in quoted string
|
|
230
229
|
*/
|
|
231
|
-
const mapExpr = fn => `" + ${createMap(fn)} + "`;
|
|
230
|
+
const mapExpr = (fn) => `" + ${createMap(fn)} + "`;
|
|
232
231
|
|
|
233
232
|
/**
|
|
234
|
-
* @param {
|
|
235
|
-
* @returns {
|
|
233
|
+
* @param {(chunk: Chunk) => string | number} fn function from chunk to value
|
|
234
|
+
* @returns {HashWithLengthFunction} function which generates code with static mapping of results of fn for including in quoted string for specific length
|
|
236
235
|
*/
|
|
237
|
-
const mapExprWithLength = fn => length =>
|
|
238
|
-
`" + ${createMap(c => `${fn(c)}`.slice(0, length))} + "`;
|
|
236
|
+
const mapExprWithLength = (fn) => (length) =>
|
|
237
|
+
`" + ${createMap((c) => `${fn(c)}`.slice(0, length))} + "`;
|
|
239
238
|
|
|
240
239
|
const url =
|
|
241
240
|
dynamicFilename &&
|
|
242
241
|
compilation.getPath(JSON.stringify(dynamicFilename), {
|
|
243
242
|
hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
|
|
244
|
-
hashWithLength: length =>
|
|
243
|
+
hashWithLength: (length) =>
|
|
245
244
|
`" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
|
|
246
245
|
chunk: {
|
|
247
246
|
id: '" + chunkId + "',
|
|
248
|
-
hash: mapExpr(c => /** @type {string} */ (c.renderedHash)),
|
|
247
|
+
hash: mapExpr((c) => /** @type {string} */ (c.renderedHash)),
|
|
249
248
|
hashWithLength: mapExprWithLength(
|
|
250
|
-
c => /** @type {string} */ (c.renderedHash)
|
|
249
|
+
(c) => /** @type {string} */ (c.renderedHash)
|
|
251
250
|
),
|
|
252
|
-
name: mapExpr(c => c.name || /** @type {
|
|
251
|
+
name: mapExpr((c) => c.name || /** @type {ChunkId} */ (c.id)),
|
|
253
252
|
contentHash: {
|
|
254
|
-
[contentType]: mapExpr(c => c.contentHash[contentType])
|
|
253
|
+
[contentType]: mapExpr((c) => c.contentHash[contentType])
|
|
255
254
|
},
|
|
256
255
|
contentHashWithLength: {
|
|
257
|
-
[contentType]: mapExprWithLength(c => c.contentHash[contentType])
|
|
256
|
+
[contentType]: mapExprWithLength((c) => c.contentHash[contentType])
|
|
258
257
|
}
|
|
259
258
|
},
|
|
260
259
|
contentHashType: contentType
|
|
@@ -278,7 +277,7 @@ class GetChunkFilenameRuntimeModule extends RuntimeModule {
|
|
|
278
277
|
? `chunkId === ${JSON.stringify(first(ids))}`
|
|
279
278
|
: `{${Array.from(
|
|
280
279
|
ids,
|
|
281
|
-
id => `${JSON.stringify(id)}:1`
|
|
280
|
+
(id) => `${JSON.stringify(id)}:1`
|
|
282
281
|
).join(",")}}[chunkId]`;
|
|
283
282
|
return `if (${condition}) return ${url};`;
|
|
284
283
|
})
|
|
@@ -33,7 +33,7 @@ class GetMainFilenameRuntimeModule extends RuntimeModule {
|
|
|
33
33
|
const { runtimeTemplate } = compilation;
|
|
34
34
|
const url = compilation.getPath(JSON.stringify(filename), {
|
|
35
35
|
hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
|
|
36
|
-
hashWithLength: length =>
|
|
36
|
+
hashWithLength: (length) =>
|
|
37
37
|
`" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
|
|
38
38
|
chunk,
|
|
39
39
|
runtime: chunk.runtime
|
|
@@ -69,7 +69,7 @@ class GetTrustedTypesPolicyRuntimeModule extends HelperRuntimeModule {
|
|
|
69
69
|
`policy = trustedTypes.createPolicy(${JSON.stringify(
|
|
70
70
|
trustedTypes.policyName
|
|
71
71
|
)}, policy);`
|
|
72
|
-
].map(line =>
|
|
72
|
+
].map((line) =>
|
|
73
73
|
wrapPolicyCreationInTryCatch ? Template.indent(line) : line
|
|
74
74
|
),
|
|
75
75
|
...(wrapPolicyCreationInTryCatch
|
|
@@ -11,7 +11,6 @@ const Template = require("../Template");
|
|
|
11
11
|
const HelperRuntimeModule = require("./HelperRuntimeModule");
|
|
12
12
|
|
|
13
13
|
/** @typedef {import("../Chunk")} Chunk */
|
|
14
|
-
/** @typedef {import("../Compiler")} Compiler */
|
|
15
14
|
|
|
16
15
|
/**
|
|
17
16
|
* @typedef {object} LoadScriptCompilationHooks
|
|
@@ -74,7 +73,6 @@ class LoadScriptRuntimeModule extends HelperRuntimeModule {
|
|
|
74
73
|
"script = document.createElement('script');",
|
|
75
74
|
scriptType ? `script.type = ${JSON.stringify(scriptType)};` : "",
|
|
76
75
|
charset ? "script.charset = 'utf-8';" : "",
|
|
77
|
-
`script.timeout = ${/** @type {number} */ (loadTimeout) / 1000};`,
|
|
78
76
|
`if (${RuntimeGlobals.scriptNonce}) {`,
|
|
79
77
|
Template.indent(
|
|
80
78
|
`script.setAttribute("nonce", ${RuntimeGlobals.scriptNonce});`
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
8
|
+
const Template = require("../Template");
|
|
9
|
+
const HelperRuntimeModule = require("./HelperRuntimeModule");
|
|
10
|
+
|
|
11
|
+
/** @typedef {import("../Module").RuntimeRequirements} RuntimeRequirements */
|
|
12
|
+
/** @typedef {import("../Module").ExportsType} ExportsType */
|
|
13
|
+
/** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @param {ExportsType} exportsType exports type
|
|
17
|
+
* @returns {string} mode
|
|
18
|
+
*/
|
|
19
|
+
function getMakeDeferredNamespaceModeFromExportsType(exportsType) {
|
|
20
|
+
if (exportsType === "namespace") return `/* ${exportsType} */ 0`;
|
|
21
|
+
if (exportsType === "default-only") return `/* ${exportsType} */ 1`;
|
|
22
|
+
if (exportsType === "default-with-named") return `/* ${exportsType} */ 2`;
|
|
23
|
+
if (exportsType === "dynamic") return `/* ${exportsType} */ 3`;
|
|
24
|
+
return "";
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* @param {string} moduleId moduleId
|
|
29
|
+
* @param {ExportsType} exportsType exportsType
|
|
30
|
+
* @param {(ModuleId | null)[]} asyncDepsIds asyncDepsIds
|
|
31
|
+
* @param {RuntimeRequirements} runtimeRequirements runtime requirements
|
|
32
|
+
* @returns {string} call make optimized deferred namespace object
|
|
33
|
+
*/
|
|
34
|
+
function getOptimizedDeferredModule(
|
|
35
|
+
moduleId,
|
|
36
|
+
exportsType,
|
|
37
|
+
asyncDepsIds,
|
|
38
|
+
runtimeRequirements
|
|
39
|
+
) {
|
|
40
|
+
runtimeRequirements.add(RuntimeGlobals.makeOptimizedDeferredNamespaceObject);
|
|
41
|
+
const mode = getMakeDeferredNamespaceModeFromExportsType(exportsType);
|
|
42
|
+
return `${RuntimeGlobals.makeOptimizedDeferredNamespaceObject}(${moduleId}, ${mode}${
|
|
43
|
+
asyncDepsIds.length > 0
|
|
44
|
+
? `, ${JSON.stringify(asyncDepsIds.filter((x) => x !== null))}`
|
|
45
|
+
: ""
|
|
46
|
+
})`;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
class MakeOptimizedDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
50
|
+
/**
|
|
51
|
+
* @param {boolean} hasAsyncRuntime if async module is used.
|
|
52
|
+
*/
|
|
53
|
+
constructor(hasAsyncRuntime) {
|
|
54
|
+
super("make optimized deferred namespace object");
|
|
55
|
+
this.hasAsyncRuntime = hasAsyncRuntime;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/**
|
|
59
|
+
* @returns {string | null} runtime code
|
|
60
|
+
*/
|
|
61
|
+
generate() {
|
|
62
|
+
if (!this.compilation) return null;
|
|
63
|
+
const fn = RuntimeGlobals.makeOptimizedDeferredNamespaceObject;
|
|
64
|
+
const hasAsync = this.hasAsyncRuntime;
|
|
65
|
+
return Template.asString([
|
|
66
|
+
// Note: must be a function (not arrow), because this is used in body!
|
|
67
|
+
`${fn} = function(moduleId, mode${hasAsync ? ", asyncDeps" : ""}) {`,
|
|
68
|
+
Template.indent([
|
|
69
|
+
"// mode: 0 => namespace (esm)",
|
|
70
|
+
"// mode: 1 => default-only (esm strict cjs)",
|
|
71
|
+
"// mode: 2 => default-with-named (esm-cjs compat)",
|
|
72
|
+
"// mode: 3 => dynamic (if exports has __esModule, then esm, otherwise default-with-named)",
|
|
73
|
+
"var r = this;",
|
|
74
|
+
hasAsync ? "var isAsync = asyncDeps && asyncDeps.length;" : "",
|
|
75
|
+
"var obj = {",
|
|
76
|
+
Template.indent([
|
|
77
|
+
"get a() {",
|
|
78
|
+
Template.indent([
|
|
79
|
+
"var exports = r(moduleId);",
|
|
80
|
+
hasAsync
|
|
81
|
+
? `if(isAsync) exports = exports[${RuntimeGlobals.asyncModuleExportSymbol}];`
|
|
82
|
+
: "",
|
|
83
|
+
// if exportsType is "namespace" we can generate the most optimized code,
|
|
84
|
+
// on the second access, we can avoid trigger the getter.
|
|
85
|
+
// we can also do this if exportsType is "dynamic" and there is a "__esModule" property on it.
|
|
86
|
+
'if(mode == 0 || (mode == 3 && exports.__esModule)) Object.defineProperty(this, "a", { value: exports });',
|
|
87
|
+
"return exports;"
|
|
88
|
+
]),
|
|
89
|
+
"}"
|
|
90
|
+
]),
|
|
91
|
+
"};",
|
|
92
|
+
hasAsync
|
|
93
|
+
? `if(isAsync) obj[${RuntimeGlobals.deferredModuleAsyncTransitiveDependenciesSymbol}] = asyncDeps;`
|
|
94
|
+
: "",
|
|
95
|
+
"return obj;"
|
|
96
|
+
]),
|
|
97
|
+
"};"
|
|
98
|
+
]);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
class MakeDeferredNamespaceObjectRuntimeModule extends HelperRuntimeModule {
|
|
103
|
+
/**
|
|
104
|
+
* @param {boolean} hasAsyncRuntime if async module is used.
|
|
105
|
+
*/
|
|
106
|
+
constructor(hasAsyncRuntime) {
|
|
107
|
+
super("make deferred namespace object");
|
|
108
|
+
this.hasAsyncRuntime = hasAsyncRuntime;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* @returns {string | null} runtime code
|
|
113
|
+
*/
|
|
114
|
+
generate() {
|
|
115
|
+
if (!this.compilation) return null;
|
|
116
|
+
const { runtimeTemplate } = this.compilation;
|
|
117
|
+
const fn = RuntimeGlobals.makeDeferredNamespaceObject;
|
|
118
|
+
const hasAsync = this.hasAsyncRuntime;
|
|
119
|
+
const init = runtimeTemplate.supportsOptionalChaining()
|
|
120
|
+
? "init?.();"
|
|
121
|
+
: "if (init) init();";
|
|
122
|
+
return `${fn} = ${runtimeTemplate.basicFunction("moduleId, mode", [
|
|
123
|
+
"// mode: 0 => namespace (esm)",
|
|
124
|
+
"// mode: 1 => default-only (esm strict cjs)",
|
|
125
|
+
"// mode: 2 => default-with-named (esm-cjs compat)",
|
|
126
|
+
"// mode: 3 => dynamic (if exports has __esModule, then esm, otherwise default-with-named)",
|
|
127
|
+
"",
|
|
128
|
+
"var cachedModule = __webpack_module_cache__[moduleId];",
|
|
129
|
+
"if (cachedModule && cachedModule.error === undefined) {",
|
|
130
|
+
Template.indent([
|
|
131
|
+
"var exports = cachedModule.exports;",
|
|
132
|
+
hasAsync
|
|
133
|
+
? `if (${RuntimeGlobals.asyncModuleExportSymbol} in exports) exports = exports[${RuntimeGlobals.asyncModuleExportSymbol}];`
|
|
134
|
+
: "",
|
|
135
|
+
"if (mode == 0) return exports;",
|
|
136
|
+
`if (mode == 1) return ${RuntimeGlobals.createFakeNamespaceObject}(exports);`,
|
|
137
|
+
`if (mode == 2) return ${RuntimeGlobals.createFakeNamespaceObject}(exports, 2);`,
|
|
138
|
+
`if (mode == 3) return ${RuntimeGlobals.createFakeNamespaceObject}(exports, 6);` // 2 | 4
|
|
139
|
+
]),
|
|
140
|
+
"}",
|
|
141
|
+
"",
|
|
142
|
+
`var init = ${runtimeTemplate.basicFunction("", [
|
|
143
|
+
`ns = ${RuntimeGlobals.require}(moduleId);`,
|
|
144
|
+
hasAsync
|
|
145
|
+
? `if (${RuntimeGlobals.asyncModuleExportSymbol} in ns) ns = ns[${RuntimeGlobals.asyncModuleExportSymbol}];`
|
|
146
|
+
: "",
|
|
147
|
+
"init = null;",
|
|
148
|
+
"if (mode == 0 || mode == 3 && ns.__esModule && typeof ns === 'object') {",
|
|
149
|
+
Template.indent([
|
|
150
|
+
"delete handler.defineProperty;",
|
|
151
|
+
"delete handler.deleteProperty;",
|
|
152
|
+
"delete handler.set;",
|
|
153
|
+
"delete handler.get;",
|
|
154
|
+
"delete handler.has;",
|
|
155
|
+
"delete handler.ownKeys;",
|
|
156
|
+
"delete handler.getOwnPropertyDescriptor;"
|
|
157
|
+
]),
|
|
158
|
+
"} else if (mode == 1) {",
|
|
159
|
+
Template.indent([
|
|
160
|
+
`ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns);`
|
|
161
|
+
]),
|
|
162
|
+
"} else if (mode == 2) {",
|
|
163
|
+
Template.indent([
|
|
164
|
+
`ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns, 2);`
|
|
165
|
+
]),
|
|
166
|
+
"} else if (mode == 3) {",
|
|
167
|
+
Template.indent([
|
|
168
|
+
`ns = ${RuntimeGlobals.createFakeNamespaceObject}(ns, 6);`
|
|
169
|
+
]),
|
|
170
|
+
"}"
|
|
171
|
+
])};`,
|
|
172
|
+
"",
|
|
173
|
+
"var ns = __webpack_module_deferred_exports__[moduleId] || (__webpack_module_deferred_exports__[moduleId] = { __proto__: null });",
|
|
174
|
+
"var handler = {",
|
|
175
|
+
Template.indent([
|
|
176
|
+
"__proto__: null,",
|
|
177
|
+
`get: ${runtimeTemplate.basicFunction("_, name", [
|
|
178
|
+
"switch (name) {",
|
|
179
|
+
Template.indent([
|
|
180
|
+
'case "__esModule": return true;',
|
|
181
|
+
'case Symbol.toStringTag: return "Deferred Module";',
|
|
182
|
+
'case "then": return undefined;'
|
|
183
|
+
]),
|
|
184
|
+
"}",
|
|
185
|
+
init,
|
|
186
|
+
"return ns[name];"
|
|
187
|
+
])},`,
|
|
188
|
+
`has: ${runtimeTemplate.basicFunction("_, name", [
|
|
189
|
+
"switch (name) {",
|
|
190
|
+
Template.indent(
|
|
191
|
+
[
|
|
192
|
+
'case "__esModule":',
|
|
193
|
+
"case Symbol.toStringTag:",
|
|
194
|
+
hasAsync
|
|
195
|
+
? `case ${RuntimeGlobals.deferredModuleAsyncTransitiveDependenciesSymbol}:`
|
|
196
|
+
: "",
|
|
197
|
+
Template.indent("return true;"),
|
|
198
|
+
'case "then":',
|
|
199
|
+
Template.indent("return false;")
|
|
200
|
+
].filter(Boolean)
|
|
201
|
+
),
|
|
202
|
+
"}",
|
|
203
|
+
init,
|
|
204
|
+
"return name in ns;"
|
|
205
|
+
])},`,
|
|
206
|
+
`ownKeys: ${runtimeTemplate.basicFunction("", [
|
|
207
|
+
init,
|
|
208
|
+
`var keys = Reflect.ownKeys(ns).filter(${runtimeTemplate.expressionFunction('x !== "then" && x !== Symbol.toStringTag', "x")}).concat([Symbol.toStringTag]);`,
|
|
209
|
+
"return keys;"
|
|
210
|
+
])},`,
|
|
211
|
+
`getOwnPropertyDescriptor: ${runtimeTemplate.basicFunction("_, name", [
|
|
212
|
+
"switch (name) {",
|
|
213
|
+
Template.indent([
|
|
214
|
+
'case "__esModule": return { value: true, configurable: !!mode };',
|
|
215
|
+
'case Symbol.toStringTag: return { value: "Deferred Module", configurable: !!mode };',
|
|
216
|
+
'case "then": return undefined;'
|
|
217
|
+
]),
|
|
218
|
+
"}",
|
|
219
|
+
init,
|
|
220
|
+
"var desc = Reflect.getOwnPropertyDescriptor(ns, name);",
|
|
221
|
+
'if (mode == 2 && name == "default" && !desc) {',
|
|
222
|
+
Template.indent("desc = { value: ns, configurable: true };"),
|
|
223
|
+
"}",
|
|
224
|
+
"return desc;"
|
|
225
|
+
])},`,
|
|
226
|
+
`defineProperty: ${runtimeTemplate.basicFunction("_, name", [
|
|
227
|
+
init,
|
|
228
|
+
// Note: This behavior does not match the spec one, but since webpack does not do it either
|
|
229
|
+
// for a normal Module Namespace object (in MakeNamespaceObjectRuntimeModule), let's keep it simple.
|
|
230
|
+
"return false;"
|
|
231
|
+
])},`,
|
|
232
|
+
`deleteProperty: ${runtimeTemplate.returningFunction("false")},`,
|
|
233
|
+
`set: ${runtimeTemplate.returningFunction("false")},`
|
|
234
|
+
]),
|
|
235
|
+
"}",
|
|
236
|
+
// we don't fully emulate ES Module semantics in this Proxy to align with normal webpack esm namespace object.
|
|
237
|
+
"return new Proxy(ns, handler);"
|
|
238
|
+
])};`;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
module.exports.MakeDeferredNamespaceObjectRuntimeModule =
|
|
243
|
+
MakeDeferredNamespaceObjectRuntimeModule;
|
|
244
|
+
module.exports.MakeOptimizedDeferredNamespaceObjectRuntimeModule =
|
|
245
|
+
MakeOptimizedDeferredNamespaceObjectRuntimeModule;
|
|
246
|
+
module.exports.getMakeDeferredNamespaceModeFromExportsType =
|
|
247
|
+
getMakeDeferredNamespaceModeFromExportsType;
|
|
248
|
+
module.exports.getOptimizedDeferredModule = getOptimizedDeferredModule;
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
8
8
|
const RuntimeModule = require("../RuntimeModule");
|
|
9
9
|
|
|
10
|
-
/** @typedef {import("../../declarations/WebpackOptions").
|
|
10
|
+
/** @typedef {import("../../declarations/WebpackOptions").PublicPath} PublicPath */
|
|
11
11
|
/** @typedef {import("../Compilation")} Compilation */
|
|
12
12
|
|
|
13
13
|
class PublicPathRuntimeModule extends RuntimeModule {
|
|
14
14
|
/**
|
|
15
|
-
* @param {
|
|
15
|
+
* @param {PublicPath} publicPath public path
|
|
16
16
|
*/
|
|
17
17
|
constructor(publicPath) {
|
|
18
18
|
super("publicPath", RuntimeModule.STAGE_BASIC);
|
|
@@ -22,8 +22,9 @@ class RuntimeIdRuntimeModule extends RuntimeModule {
|
|
|
22
22
|
const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
|
|
23
23
|
const chunk = /** @type {Chunk} */ (this.chunk);
|
|
24
24
|
const runtime = chunk.runtime;
|
|
25
|
-
if (typeof runtime !== "string")
|
|
25
|
+
if (typeof runtime !== "string") {
|
|
26
26
|
throw new Error("RuntimeIdRuntimeModule must be in a single runtime");
|
|
27
|
+
}
|
|
27
28
|
const id = chunkGraph.getRuntimeId(runtime);
|
|
28
29
|
return `${RuntimeGlobals.runtimeId} = ${JSON.stringify(id)};`;
|
|
29
30
|
}
|
|
@@ -18,6 +18,8 @@ const StartupEntrypointRuntimeModule = require("./StartupEntrypointRuntimeModule
|
|
|
18
18
|
* @property {boolean=} asyncChunkLoading
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
+
const PLUGIN_NAME = "StartupChunkDependenciesPlugin";
|
|
22
|
+
|
|
21
23
|
class StartupChunkDependenciesPlugin {
|
|
22
24
|
/**
|
|
23
25
|
* @param {Options} options options
|
|
@@ -36,53 +38,48 @@ class StartupChunkDependenciesPlugin {
|
|
|
36
38
|
* @returns {void}
|
|
37
39
|
*/
|
|
38
40
|
apply(compiler) {
|
|
39
|
-
compiler.hooks.thisCompilation.tap(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
(chunk
|
|
58
|
-
|
|
59
|
-
if (chunkGraph.hasChunkEntryDependentChunks(chunk)) {
|
|
60
|
-
set.add(RuntimeGlobals.startup);
|
|
61
|
-
set.add(RuntimeGlobals.ensureChunk);
|
|
62
|
-
set.add(RuntimeGlobals.ensureChunkIncludeEntries);
|
|
63
|
-
compilation.addRuntimeModule(
|
|
64
|
-
chunk,
|
|
65
|
-
new StartupChunkDependenciesRuntimeModule(
|
|
66
|
-
this.asyncChunkLoading
|
|
67
|
-
)
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
);
|
|
72
|
-
compilation.hooks.runtimeRequirementInTree
|
|
73
|
-
.for(RuntimeGlobals.startupEntrypoint)
|
|
74
|
-
.tap("StartupChunkDependenciesPlugin", (chunk, set) => {
|
|
75
|
-
if (!isEnabledForChunk(chunk)) return;
|
|
76
|
-
set.add(RuntimeGlobals.require);
|
|
41
|
+
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
|
|
42
|
+
const globalChunkLoading = compilation.outputOptions.chunkLoading;
|
|
43
|
+
/**
|
|
44
|
+
* @param {Chunk} chunk chunk to check
|
|
45
|
+
* @returns {boolean} true, when the plugin is enabled for the chunk
|
|
46
|
+
*/
|
|
47
|
+
const isEnabledForChunk = (chunk) => {
|
|
48
|
+
const options = chunk.getEntryOptions();
|
|
49
|
+
const chunkLoading =
|
|
50
|
+
options && options.chunkLoading !== undefined
|
|
51
|
+
? options.chunkLoading
|
|
52
|
+
: globalChunkLoading;
|
|
53
|
+
return chunkLoading === this.chunkLoading;
|
|
54
|
+
};
|
|
55
|
+
compilation.hooks.additionalTreeRuntimeRequirements.tap(
|
|
56
|
+
PLUGIN_NAME,
|
|
57
|
+
(chunk, set, { chunkGraph }) => {
|
|
58
|
+
if (!isEnabledForChunk(chunk)) return;
|
|
59
|
+
if (chunkGraph.hasChunkEntryDependentChunks(chunk)) {
|
|
60
|
+
set.add(RuntimeGlobals.startup);
|
|
77
61
|
set.add(RuntimeGlobals.ensureChunk);
|
|
78
62
|
set.add(RuntimeGlobals.ensureChunkIncludeEntries);
|
|
79
63
|
compilation.addRuntimeModule(
|
|
80
64
|
chunk,
|
|
81
|
-
new
|
|
65
|
+
new StartupChunkDependenciesRuntimeModule(this.asyncChunkLoading)
|
|
82
66
|
);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
compilation.hooks.runtimeRequirementInTree
|
|
71
|
+
.for(RuntimeGlobals.startupEntrypoint)
|
|
72
|
+
.tap(PLUGIN_NAME, (chunk, set) => {
|
|
73
|
+
if (!isEnabledForChunk(chunk)) return;
|
|
74
|
+
set.add(RuntimeGlobals.require);
|
|
75
|
+
set.add(RuntimeGlobals.ensureChunk);
|
|
76
|
+
set.add(RuntimeGlobals.ensureChunkIncludeEntries);
|
|
77
|
+
compilation.addRuntimeModule(
|
|
78
|
+
chunk,
|
|
79
|
+
new StartupEntrypointRuntimeModule(this.asyncChunkLoading)
|
|
80
|
+
);
|
|
81
|
+
});
|
|
82
|
+
});
|
|
86
83
|
}
|
|
87
84
|
}
|
|
88
85
|
|
|
@@ -28,9 +28,9 @@ class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
|
|
|
28
28
|
generate() {
|
|
29
29
|
const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
|
|
30
30
|
const chunk = /** @type {Chunk} */ (this.chunk);
|
|
31
|
-
const chunkIds =
|
|
32
|
-
chunkGraph.getChunkEntryDependentChunksIterable(chunk)
|
|
33
|
-
|
|
31
|
+
const chunkIds = [
|
|
32
|
+
...chunkGraph.getChunkEntryDependentChunksIterable(chunk)
|
|
33
|
+
].map((chunk) => chunk.id);
|
|
34
34
|
const compilation = /** @type {Compilation} */ (this.compilation);
|
|
35
35
|
const { runtimeTemplate } = compilation;
|
|
36
36
|
return Template.asString([
|
|
@@ -38,11 +38,12 @@ class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
|
|
|
38
38
|
`${RuntimeGlobals.startup} = ${runtimeTemplate.basicFunction(
|
|
39
39
|
"",
|
|
40
40
|
!this.asyncChunkLoading
|
|
41
|
-
?
|
|
42
|
-
.map(
|
|
43
|
-
id => `${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)});`
|
|
44
|
-
)
|
|
45
|
-
|
|
41
|
+
? [
|
|
42
|
+
...chunkIds.map(
|
|
43
|
+
(id) => `${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)});`
|
|
44
|
+
),
|
|
45
|
+
"return next();"
|
|
46
|
+
]
|
|
46
47
|
: chunkIds.length === 1
|
|
47
48
|
? `return ${RuntimeGlobals.ensureChunk}(${JSON.stringify(
|
|
48
49
|
chunkIds[0]
|
|
@@ -60,7 +61,7 @@ class StartupChunkDependenciesRuntimeModule extends RuntimeModule {
|
|
|
60
61
|
Template.indent(
|
|
61
62
|
chunkIds
|
|
62
63
|
.map(
|
|
63
|
-
id =>
|
|
64
|
+
(id) =>
|
|
64
65
|
`${RuntimeGlobals.ensureChunk}(${JSON.stringify(id)})`
|
|
65
66
|
)
|
|
66
67
|
.join(",\n")
|
|
@@ -8,7 +8,6 @@ const RuntimeGlobals = require("../RuntimeGlobals");
|
|
|
8
8
|
const RuntimeModule = require("../RuntimeModule");
|
|
9
9
|
|
|
10
10
|
/** @typedef {import("../Compilation")} Compilation */
|
|
11
|
-
/** @typedef {import("../MainTemplate")} MainTemplate */
|
|
12
11
|
|
|
13
12
|
class StartupEntrypointRuntimeModule extends RuntimeModule {
|
|
14
13
|
/**
|
|
@@ -7,8 +7,6 @@
|
|
|
7
7
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
8
8
|
const RuntimeModule = require("../RuntimeModule");
|
|
9
9
|
|
|
10
|
-
/** @typedef {import("../Compilation")} Compilation */
|
|
11
|
-
|
|
12
10
|
class SystemContextRuntimeModule extends RuntimeModule {
|
|
13
11
|
constructor() {
|
|
14
12
|
super("__system_context__");
|