@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -11
- package/bin/webpack.js +12 -0
- package/changes.json +16 -24
- package/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +60 -35
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +13 -5
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +41 -0
- package/lib/Chunk.js +71 -25
- package/lib/ChunkGraph.js +153 -19
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +27 -28
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +85 -37
- package/lib/Compilation.js +656 -112
- package/lib/Compiler.js +109 -35
- package/lib/ConcatenationScope.js +34 -4
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +15 -12
- package/lib/ContextExclusionPlugin.js +3 -1
- package/lib/ContextModule.js +345 -55
- package/lib/ContextModuleFactory.js +193 -51
- package/lib/ContextReplacementPlugin.js +8 -1
- package/lib/DefinePlugin.js +537 -139
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +159 -11
- package/lib/DependencyTemplate.js +7 -1
- package/lib/DependencyTemplates.js +4 -0
- package/lib/DotenvPlugin.js +3 -0
- package/lib/DynamicEntryPlugin.js +3 -1
- package/lib/EntryOptionPlugin.js +42 -2
- package/lib/EntryPlugin.js +4 -1
- package/lib/Entrypoint.js +5 -1
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -11
- package/lib/ExportsInfo.js +421 -113
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +381 -80
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +701 -175
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +115 -8
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
- package/lib/Generator.js +24 -3
- package/lib/HotModuleReplacementPlugin.js +110 -44
- package/lib/IgnorePlugin.js +5 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +33 -30
- package/lib/JavascriptMetaInfoPlugin.js +9 -6
- package/lib/LazyBarrel.js +389 -0
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +3 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +121 -57
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +18 -4
- package/lib/ModuleGraph.js +69 -2
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleNotFoundError.js +3 -83
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleSourceTypeConstants.js +52 -19
- package/lib/ModuleTemplate.js +10 -0
- package/lib/ModuleTypeConstants.js +20 -4
- package/lib/MultiCompiler.js +59 -4
- package/lib/MultiStats.js +9 -0
- package/lib/MultiWatching.js +6 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +78 -46
- package/lib/NormalModule.js +519 -206
- package/lib/NormalModuleFactory.js +156 -31
- package/lib/NormalModuleReplacementPlugin.js +3 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptionsApply.js +1 -0
- package/lib/Parser.js +3 -1
- package/lib/PlatformPlugin.js +2 -1
- package/lib/PrefetchPlugin.js +4 -1
- package/lib/ProgressPlugin.js +351 -161
- package/lib/ProvidePlugin.js +6 -3
- package/lib/RawModule.js +32 -16
- package/lib/RecordIdsPlugin.js +9 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +58 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +123 -118
- package/lib/RuntimeTemplate.js +616 -37
- package/lib/SelfModuleFactory.js +3 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +341 -63
- package/lib/Stats.js +6 -0
- package/lib/Template.js +52 -6
- package/lib/TemplatedPathPlugin.js +505 -138
- package/lib/UseStrictPlugin.js +3 -2
- package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
- package/lib/WarnDeprecatedOptionPlugin.js +6 -2
- package/lib/WarnNoModeSetPlugin.js +18 -2
- package/lib/WatchIgnorePlugin.js +5 -1
- package/lib/Watching.js +25 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +4 -2
- package/lib/WebpackOptionsApply.js +88 -25
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +28 -10
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +199 -60
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +115 -24
- package/lib/asset/AssetParser.js +4 -2
- package/lib/asset/AssetSourceGenerator.js +26 -8
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +23 -13
- package/lib/asset/WebManifestGenerator.js +164 -0
- package/lib/asset/WebManifestParser.js +130 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/async-modules/isGeneratorLowered.js +26 -0
- package/lib/buildChunkGraph.js +107 -15
- package/lib/bun/BunTargetPlugin.js +42 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
- package/lib/cache/AddManagedPathsPlugin.js +5 -1
- package/lib/cache/IdleFileCachePlugin.js +6 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
- package/lib/cache/PackFileCacheStrategy.js +302 -12
- package/lib/cache/ResolverCachePlugin.js +12 -1
- package/lib/cache/getLazyHashedEtag.js +13 -2
- package/lib/cache/mergeEtags.js +4 -0
- package/lib/cli.js +142 -20
- package/lib/config/browserslistTargetHandler.js +141 -0
- package/lib/config/defaults.js +612 -43
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +46 -1
- package/lib/config/target.js +200 -2
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +27 -14
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +6 -2
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +3 -2
- package/lib/container/FallbackDependency.js +9 -7
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +22 -9
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/HoistContainerReferencesPlugin.js +47 -55
- package/lib/container/ModuleFederationPlugin.js +21 -29
- package/lib/container/RemoteModule.js +33 -10
- package/lib/container/RemoteRuntimeModule.js +15 -12
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +540 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +173 -81
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +371 -208
- package/lib/css/CssParser.js +3538 -1963
- package/lib/css/syntax.js +4155 -0
- package/lib/debug/ProfilingPlugin.js +33 -2
- package/lib/deno/DenoTargetPlugin.js +41 -0
- package/lib/dependencies/AMDDefineDependency.js +29 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
- package/lib/dependencies/AMDPlugin.js +6 -3
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
- package/lib/dependencies/AMDRequireContextDependency.js +10 -11
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
- package/lib/dependencies/AMDRequireDependency.js +28 -20
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +9 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
- package/lib/dependencies/CommonJsPlugin.js +7 -4
- package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
- package/lib/dependencies/CommonJsRequireDependency.js +135 -13
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
- package/lib/dependencies/ConstDependency.js +22 -12
- package/lib/dependencies/ContextDependency.js +13 -2
- package/lib/dependencies/ContextDependencyHelpers.js +7 -4
- package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +27 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
- package/lib/dependencies/CriticalDependencyWarning.js +3 -1
- package/lib/dependencies/CssIcssExportDependency.js +681 -367
- package/lib/dependencies/CssIcssImportDependency.js +62 -17
- package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
- package/lib/dependencies/CssImportDependency.js +37 -1
- package/lib/dependencies/CssUrlDependency.js +87 -14
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +12 -13
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +18 -12
- package/lib/dependencies/ExternalModuleDependency.js +13 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
- package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
- package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
- package/lib/dependencies/HarmonyExports.js +6 -1
- package/lib/dependencies/HarmonyImportDependency.js +60 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +427 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
- package/lib/dependencies/HtmlEntryDependency.js +1295 -0
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
- package/lib/dependencies/HtmlSourceDependency.js +172 -0
- package/lib/dependencies/ImportContextDependency.js +9 -9
- package/lib/dependencies/ImportDependency.js +92 -3
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
- package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
- package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
- package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
- package/lib/dependencies/ImportMetaPlugin.js +595 -209
- package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
- package/lib/dependencies/ImportParserPlugin.js +114 -27
- package/lib/dependencies/ImportPhase.js +17 -11
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +3 -0
- package/lib/dependencies/JsonExportsDependency.js +15 -10
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +3 -0
- package/lib/dependencies/LoaderPlugin.js +9 -2
- package/lib/dependencies/LocalModule.js +15 -12
- package/lib/dependencies/LocalModuleDependency.js +15 -13
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
- package/lib/dependencies/ModuleDependency.js +14 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +36 -27
- package/lib/dependencies/PureExpressionDependency.js +14 -10
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
- package/lib/dependencies/RequireEnsureDependency.js +16 -13
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +7 -4
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +10 -11
- package/lib/dependencies/RequireResolveDependency.js +2 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
- package/lib/dependencies/StaticExportsDependency.js +13 -10
- package/lib/dependencies/SystemPlugin.js +9 -6
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
- package/lib/dependencies/URLContextDependency.js +8 -7
- package/lib/dependencies/URLDependency.js +157 -33
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +12 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
- package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
- package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
- package/lib/dependencies/WorkerDependency.js +111 -27
- package/lib/dependencies/WorkletDependency.js +278 -0
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +14 -11
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
- package/lib/{DllModule.js → dll/DllModule.js} +36 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
- package/lib/electron/ElectronTargetPlugin.js +24 -5
- package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
- package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
- package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
- package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
- package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
- package/lib/errors/JSONParseError.js +115 -0
- package/lib/errors/LoaderLoadingError.js +20 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
- package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
- package/lib/errors/ModuleNotFoundError.js +94 -0
- package/lib/errors/ModuleParseError.js +141 -0
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
- package/lib/errors/NonErrorEmittedError.js +30 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
- package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
- package/lib/errors/WebpackError.js +84 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
- package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +154 -7
- package/lib/hmr/lazyCompilationBackend.js +53 -12
- package/lib/html/HtmlGenerator.js +1490 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1129 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9106 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
- package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +49 -12
- package/lib/ids/NamedChunkIdsPlugin.js +3 -1
- package/lib/ids/NamedModuleIdsPlugin.js +3 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -1
- package/lib/index.js +66 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
- package/lib/javascript/BasicEvaluatedExpression.js +370 -49
- package/lib/javascript/ChunkFormatHelpers.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
- package/lib/javascript/JavascriptGenerator.js +213 -51
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +628 -198
- package/lib/javascript/JavascriptParser.js +1334 -471
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +5037 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +8 -1
- package/lib/json/JsonParser.js +18 -27
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +21 -3
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +154 -7
- package/lib/library/SystemLibraryPlugin.js +11 -3
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/loaders/LoaderRunner.js +714 -0
- package/lib/loaders/loadLoader.js +100 -0
- package/lib/logging/Logger.js +17 -0
- package/lib/logging/createConsoleLogger.js +7 -0
- package/lib/logging/runtime.js +2 -0
- package/lib/logging/truncateArgs.js +2 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
- package/lib/node/NodeEnvironmentPlugin.js +7 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -63
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +40 -22
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
- package/lib/node/nodeBuiltins.js +80 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +22 -16
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +603 -130
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +374 -262
- package/lib/optimize/InnerGraphPlugin.js +246 -117
- package/lib/optimize/LimitChunkCountPlugin.js +9 -0
- package/lib/optimize/MangleExportsPlugin.js +5 -1
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
- package/lib/optimize/MinChunkSizePlugin.js +2 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
- package/lib/optimize/RealContentHashPlugin.js +130 -52
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
- package/lib/optimize/RuntimeChunkPlugin.js +2 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
- package/lib/optimize/SplitChunksPlugin.js +200 -50
- package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
- package/lib/performance/NoAsyncChunksWarning.js +5 -3
- package/lib/performance/SizeLimitsPlugin.js +8 -2
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
- package/lib/prefetch/ResourceHintPlugin.js +687 -0
- package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
- package/lib/prefetch/parseResourceHintOptions.js +103 -0
- package/lib/rules/BasicEffectRulePlugin.js +3 -0
- package/lib/rules/BasicMatcherRulePlugin.js +3 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
- package/lib/rules/RuleSetCompiler.js +132 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
- package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
- package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +86 -4
- package/lib/schemes/VirtualUrlPlugin.js +8 -4
- package/lib/serialization/AggregateErrorSerializer.js +9 -6
- package/lib/serialization/ArraySerializer.js +6 -8
- package/lib/serialization/BinaryMiddleware.js +427 -1006
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +345 -59
- package/lib/serialization/MapObjectSerializer.js +7 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
- package/lib/serialization/ObjectMiddleware.js +73 -13
- package/lib/serialization/PlainObjectSerializer.js +16 -8
- package/lib/serialization/RegExpObjectSerializer.js +4 -2
- package/lib/serialization/Serializer.js +6 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +6 -8
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +21 -7
- package/lib/sharing/ConsumeSharedPlugin.js +11 -11
- package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +34 -15
- package/lib/sharing/ProvideSharedModule.js +42 -12
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +13 -8
- package/lib/sharing/SharePlugin.js +5 -1
- package/lib/sharing/ShareRuntimeModule.js +19 -16
- package/lib/sharing/resolveMatchedConfigs.js +6 -2
- package/lib/sharing/utils.js +9 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
- package/lib/stats/StatsFactory.js +70 -27
- package/lib/stats/StatsPrinter.js +16 -2
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +111 -23
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +154 -74
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +26 -0
- package/lib/util/LazySet.js +45 -4
- package/lib/util/LocConverter.js +64 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +15 -1
- package/lib/util/SetHelpers.js +4 -1
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/SourceProcessor.js +119 -0
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +162 -43
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +14 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +60 -1
- package/lib/util/binarySearchBounds.js +3 -2
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +35 -4
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +80 -24
- package/lib/util/conventions.js +46 -1
- package/lib/util/createHash.js +0 -1
- package/lib/util/createHooksRegistry.js +43 -0
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +3 -2
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +46 -17
- package/lib/util/extractSourceMap.js +2 -1
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +7 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
- package/lib/util/fs.js +87 -14
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/globUtils.js +710 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +32 -15
- package/lib/util/hash/md4.js +1 -1
- package/lib/util/hash/wasm-hash.js +5 -0
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +118 -7
- package/lib/util/implicitTypeLoaderFallback.js +62 -0
- package/lib/util/internalSerializables.js +102 -60
- package/lib/util/magicComment.js +149 -7
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +31 -1
- package/lib/util/numberHash.js +2 -2
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +9 -2
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +24 -4
- package/lib/util/removeBOM.js +1 -0
- package/lib/util/runtime.js +32 -0
- package/lib/util/semver.js +15 -0
- package/lib/util/serialization.js +2 -0
- package/lib/util/smartGrouping.js +8 -0
- package/lib/util/source.js +23 -0
- package/lib/util/topologicalSort.js +69 -0
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
- package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
- package/lib/wasm-sync/WebAssemblyParser.js +9 -3
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
- package/lib/web/FetchCompileWasmPlugin.js +27 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +78 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +21 -0
- package/package.json +79 -77
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1173 -80
- package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
- package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
- package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +38 -0
- 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 +2 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +11053 -3019
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/ModuleParseError.js +0 -125
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- package/lib/css/walkCssTokens.js +0 -1843
- package/lib/util/AppendOnlyStackedSet.js +0 -78
- /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
- /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
|
@@ -12,14 +12,17 @@ const { SyncHook } = require("tapable");
|
|
|
12
12
|
/** @typedef {import("../../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */
|
|
13
13
|
/** @typedef {import("../../declarations/WebpackOptions").RuleSetLoaderOptions} RuleSetLoaderOptions */
|
|
14
14
|
/** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
|
|
15
|
+
/** @typedef {import("../../declarations/WebpackOptions").RuleSetConditionAbsolute} RuleSetConditionAbsolute */
|
|
15
16
|
|
|
16
17
|
/** @typedef {(Falsy | RuleSetRule)[]} RuleSetRules */
|
|
17
18
|
|
|
18
19
|
/**
|
|
20
|
+
* Defines the rule condition function type used by this module.
|
|
19
21
|
* @typedef {(value: EffectData[keyof EffectData]) => boolean} RuleConditionFunction
|
|
20
22
|
*/
|
|
21
23
|
|
|
22
24
|
/**
|
|
25
|
+
* Defines the rule condition type used by this module.
|
|
23
26
|
* @typedef {object} RuleCondition
|
|
24
27
|
* @property {string | string[]} property
|
|
25
28
|
* @property {boolean} matchWhenEmpty
|
|
@@ -27,12 +30,14 @@ const { SyncHook } = require("tapable");
|
|
|
27
30
|
*/
|
|
28
31
|
|
|
29
32
|
/**
|
|
33
|
+
* Defines the condition type used by this module.
|
|
30
34
|
* @typedef {object} Condition
|
|
31
35
|
* @property {boolean} matchWhenEmpty
|
|
32
36
|
* @property {RuleConditionFunction} fn
|
|
33
37
|
*/
|
|
34
38
|
|
|
35
39
|
/**
|
|
40
|
+
* Defines the effect data type used by this module.
|
|
36
41
|
* @typedef {object} EffectData
|
|
37
42
|
* @property {string=} resource
|
|
38
43
|
* @property {string=} realResource
|
|
@@ -50,6 +55,7 @@ const { SyncHook } = require("tapable");
|
|
|
50
55
|
*/
|
|
51
56
|
|
|
52
57
|
/**
|
|
58
|
+
* Defines the compiled rule type used by this module.
|
|
53
59
|
* @typedef {object} CompiledRule
|
|
54
60
|
* @property {RuleCondition[]} conditions
|
|
55
61
|
* @property {(Effect | ((effectData: EffectData) => Effect[]))[]} effects
|
|
@@ -60,12 +66,14 @@ const { SyncHook } = require("tapable");
|
|
|
60
66
|
/** @typedef {"use" | "use-pre" | "use-post"} EffectUseType */
|
|
61
67
|
|
|
62
68
|
/**
|
|
69
|
+
* Defines the effect use type used by this module.
|
|
63
70
|
* @typedef {object} EffectUse
|
|
64
71
|
* @property {EffectUseType} type
|
|
65
72
|
* @property {{ loader: string, options?: string | null | Record<string, EXPECTED_ANY>, ident?: string }} value
|
|
66
73
|
*/
|
|
67
74
|
|
|
68
75
|
/**
|
|
76
|
+
* Defines the effect basic type used by this module.
|
|
69
77
|
* @typedef {object} EffectBasic
|
|
70
78
|
* @property {string} type
|
|
71
79
|
* @property {EXPECTED_ANY} value
|
|
@@ -76,12 +84,14 @@ const { SyncHook } = require("tapable");
|
|
|
76
84
|
/** @typedef {Map<string, RuleSetLoaderOptions>} References */
|
|
77
85
|
|
|
78
86
|
/**
|
|
87
|
+
* Defines the rule set type used by this module.
|
|
79
88
|
* @typedef {object} RuleSet
|
|
80
89
|
* @property {References} references map of references in the rule set (may grow over time)
|
|
81
90
|
* @property {(effectData: EffectData) => Effect[]} exec execute the rule set
|
|
82
91
|
*/
|
|
83
92
|
|
|
84
93
|
/**
|
|
94
|
+
* Defines the keys of types type used by this module.
|
|
85
95
|
* @template T
|
|
86
96
|
* @template {T[keyof T]} V
|
|
87
97
|
* @typedef {({ [key in keyof Required<T>]: Required<T>[key] extends V ? key : never })[keyof T]} KeysOfTypes
|
|
@@ -96,6 +106,7 @@ const { SyncHook } = require("tapable");
|
|
|
96
106
|
|
|
97
107
|
class RuleSetCompiler {
|
|
98
108
|
/**
|
|
109
|
+
* Creates an instance of RuleSetCompiler.
|
|
99
110
|
* @param {RuleSetPlugin[]} plugins plugins
|
|
100
111
|
*/
|
|
101
112
|
constructor(plugins) {
|
|
@@ -117,6 +128,7 @@ class RuleSetCompiler {
|
|
|
117
128
|
}
|
|
118
129
|
|
|
119
130
|
/**
|
|
131
|
+
* Returns compiled RuleSet.
|
|
120
132
|
* @param {RuleSetRules} ruleSet raw user provided rules
|
|
121
133
|
* @returns {RuleSet} compiled RuleSet
|
|
122
134
|
*/
|
|
@@ -126,6 +138,7 @@ class RuleSetCompiler {
|
|
|
126
138
|
const rules = this.compileRules("ruleSet", ruleSet, refs);
|
|
127
139
|
|
|
128
140
|
/**
|
|
141
|
+
* Returns true, if the rule has matched.
|
|
129
142
|
* @param {EffectData} data data passed in
|
|
130
143
|
* @param {CompiledRule} rule the compiled rule
|
|
131
144
|
* @param {Effect[]} effects an array where effects are pushed to
|
|
@@ -203,6 +216,7 @@ class RuleSetCompiler {
|
|
|
203
216
|
}
|
|
204
217
|
|
|
205
218
|
/**
|
|
219
|
+
* Returns rules.
|
|
206
220
|
* @param {string} path current path
|
|
207
221
|
* @param {RuleSetRules} rules the raw rules provided by user
|
|
208
222
|
* @param {References} refs references
|
|
@@ -221,6 +235,7 @@ class RuleSetCompiler {
|
|
|
221
235
|
}
|
|
222
236
|
|
|
223
237
|
/**
|
|
238
|
+
* Returns normalized and compiled rule for processing.
|
|
224
239
|
* @param {string} path current path
|
|
225
240
|
* @param {RuleSetRule} rule the raw rule provided by user
|
|
226
241
|
* @param {References} refs references
|
|
@@ -274,6 +289,7 @@ class RuleSetCompiler {
|
|
|
274
289
|
}
|
|
275
290
|
|
|
276
291
|
/**
|
|
292
|
+
* Returns compiled condition.
|
|
277
293
|
* @param {string} path current path
|
|
278
294
|
* @param {RuleSetLoaderOptions} condition user provided condition value
|
|
279
295
|
* @returns {Condition} compiled condition
|
|
@@ -395,6 +411,7 @@ class RuleSetCompiler {
|
|
|
395
411
|
}
|
|
396
412
|
|
|
397
413
|
/**
|
|
414
|
+
* Combine conditions or.
|
|
398
415
|
* @param {Condition[]} conditions some conditions
|
|
399
416
|
* @returns {Condition} merged condition
|
|
400
417
|
*/
|
|
@@ -414,6 +431,7 @@ class RuleSetCompiler {
|
|
|
414
431
|
}
|
|
415
432
|
|
|
416
433
|
/**
|
|
434
|
+
* Combine conditions and.
|
|
417
435
|
* @param {Condition[]} conditions some conditions
|
|
418
436
|
* @returns {Condition} merged condition
|
|
419
437
|
*/
|
|
@@ -433,6 +451,7 @@ class RuleSetCompiler {
|
|
|
433
451
|
}
|
|
434
452
|
|
|
435
453
|
/**
|
|
454
|
+
* Returns an error object.
|
|
436
455
|
* @param {string} path current path
|
|
437
456
|
* @param {EXPECTED_ANY} value value at the error location
|
|
438
457
|
* @param {string} message message explaining the problem
|
|
@@ -443,6 +462,119 @@ class RuleSetCompiler {
|
|
|
443
462
|
`Compiling RuleSet failed: ${message} (at ${path}: ${value})`
|
|
444
463
|
);
|
|
445
464
|
}
|
|
465
|
+
|
|
466
|
+
/**
|
|
467
|
+
* Best-effort detection of a user-registered loader (or explicit module type)
|
|
468
|
+
* for a resource, without building the whole rule set. Used to resolve the
|
|
469
|
+
* `experiments.css`/`experiments.html`/`experiments.asyncWebAssembly` "auto"
|
|
470
|
+
* defaults: when the user already handles these files the built-in module type
|
|
471
|
+
* stays off, so enabling it by default is non-breaking.
|
|
472
|
+
*
|
|
473
|
+
* `include`/`exclude` are treated leniently — a matching `test`/`resource`/
|
|
474
|
+
* `include` with a loader counts even when another condition would narrow it —
|
|
475
|
+
* so a loader scoped to e.g. `include: /src/` still keeps the built-in type off
|
|
476
|
+
* and those files are not double-processed. `enforce: "pre"`/`"post"` loaders
|
|
477
|
+
* are ignored: they don't establish the module type (e.g. a stylelint pre-loader
|
|
478
|
+
* must not suppress the built-in css type). A `test` regexp that references the
|
|
479
|
+
* extension (e.g. `/source\.css$/`) also counts even if the sample path itself
|
|
480
|
+
* doesn't match, so a loader scoped to specific filenames is still detected.
|
|
481
|
+
* @param {import("../../declarations/WebpackOptions").RuleSetRules | undefined} rules user `module.rules`
|
|
482
|
+
* @param {string} resource sample resource path (e.g. `"/file.css"`)
|
|
483
|
+
* @param {boolean=} inherited whether an enclosing rule already matched the resource
|
|
484
|
+
* @returns {boolean} whether a rule assigns a loader or module type to the resource
|
|
485
|
+
*/
|
|
486
|
+
static hasRuleForResource(rules, resource, inherited = false) {
|
|
487
|
+
if (!rules) return false;
|
|
488
|
+
// `\.css` for `/file.css`, `\.wasm` for `/file.wasm`, …
|
|
489
|
+
const extProbe = `\\.${resource.slice(resource.lastIndexOf(".") + 1)}`;
|
|
490
|
+
for (const rule of rules) {
|
|
491
|
+
if (!rule || typeof rule !== "object") continue;
|
|
492
|
+
const matched =
|
|
493
|
+
inherited ||
|
|
494
|
+
matchesResource(rule.test, resource, extProbe) ||
|
|
495
|
+
matchesResource(rule.resource, resource, extProbe) ||
|
|
496
|
+
matchesResource(rule.include, resource, extProbe);
|
|
497
|
+
const establishesType =
|
|
498
|
+
rule.type !== undefined ||
|
|
499
|
+
((rule.use !== undefined || rule.loader !== undefined) &&
|
|
500
|
+
rule.enforce === undefined);
|
|
501
|
+
if (matched && establishesType) return true;
|
|
502
|
+
if (
|
|
503
|
+
rule.oneOf &&
|
|
504
|
+
RuleSetCompiler.hasRuleForResource(rule.oneOf, resource, matched)
|
|
505
|
+
) {
|
|
506
|
+
return true;
|
|
507
|
+
}
|
|
508
|
+
if (
|
|
509
|
+
rule.rules &&
|
|
510
|
+
RuleSetCompiler.hasRuleForResource(rule.rules, resource, matched)
|
|
511
|
+
) {
|
|
512
|
+
return true;
|
|
513
|
+
}
|
|
514
|
+
}
|
|
515
|
+
return false;
|
|
516
|
+
}
|
|
446
517
|
}
|
|
447
518
|
|
|
519
|
+
// Bare compiler reused to match single conditions via `compileCondition`
|
|
520
|
+
// (no plugins needed); created lazily on first use.
|
|
521
|
+
/** @type {RuleSetCompiler | undefined} */
|
|
522
|
+
let conditionCompiler;
|
|
523
|
+
|
|
524
|
+
/**
|
|
525
|
+
* Matches a single rule condition against a sample string, reusing the ruleset
|
|
526
|
+
* condition logic (string/regexp/function/array/and/or/not).
|
|
527
|
+
* @param {RuleSetConditionAbsolute | undefined} condition condition
|
|
528
|
+
* @param {string} resource sample resource path
|
|
529
|
+
* @returns {boolean} whether the condition matches
|
|
530
|
+
*/
|
|
531
|
+
const matchRuleSetCondition = (condition, resource) => {
|
|
532
|
+
if (condition === undefined) return false;
|
|
533
|
+
if (conditionCompiler === undefined) {
|
|
534
|
+
conditionCompiler = new RuleSetCompiler([]);
|
|
535
|
+
}
|
|
536
|
+
try {
|
|
537
|
+
return conditionCompiler
|
|
538
|
+
.compileCondition("ruleSet", condition)
|
|
539
|
+
.fn(resource);
|
|
540
|
+
} catch (_err) {
|
|
541
|
+
return false;
|
|
542
|
+
}
|
|
543
|
+
};
|
|
544
|
+
|
|
545
|
+
/**
|
|
546
|
+
* Whether any regexp in the condition references the extension probe (e.g.
|
|
547
|
+
* `\.css`), i.e. the rule clearly targets that extension even if the generic
|
|
548
|
+
* sample path doesn't match its (possibly filename-scoped) pattern.
|
|
549
|
+
* @param {EXPECTED_ANY} condition condition
|
|
550
|
+
* @param {string} extProbe escaped extension probe (e.g. `"\\.css"`)
|
|
551
|
+
* @returns {boolean} whether a regexp in the condition targets the extension
|
|
552
|
+
*/
|
|
553
|
+
const conditionReferencesExtension = (condition, extProbe) => {
|
|
554
|
+
if (condition instanceof RegExp) return condition.source.includes(extProbe);
|
|
555
|
+
if (Array.isArray(condition)) {
|
|
556
|
+
return condition.some((c) => conditionReferencesExtension(c, extProbe));
|
|
557
|
+
}
|
|
558
|
+
if (condition && typeof condition === "object") {
|
|
559
|
+
return (
|
|
560
|
+
conditionReferencesExtension(condition.and, extProbe) ||
|
|
561
|
+
conditionReferencesExtension(condition.or, extProbe)
|
|
562
|
+
);
|
|
563
|
+
}
|
|
564
|
+
return false;
|
|
565
|
+
};
|
|
566
|
+
|
|
567
|
+
/**
|
|
568
|
+
* A condition counts as targeting the resource if it matches the sample path or
|
|
569
|
+
* references the extension via a regexp.
|
|
570
|
+
* @param {RuleSetConditionAbsolute | undefined} condition condition
|
|
571
|
+
* @param {string} resource sample resource path
|
|
572
|
+
* @param {string} extProbe escaped extension probe (e.g. `"\\.css"`)
|
|
573
|
+
* @returns {boolean} whether the condition targets the resource's extension
|
|
574
|
+
*/
|
|
575
|
+
const matchesResource = (condition, resource, extProbe) =>
|
|
576
|
+
condition !== undefined &&
|
|
577
|
+
(matchRuleSetCondition(condition, resource) ||
|
|
578
|
+
conditionReferencesExtension(condition, extProbe));
|
|
579
|
+
|
|
448
580
|
module.exports = RuleSetCompiler;
|
|
@@ -13,6 +13,7 @@ const util = require("util");
|
|
|
13
13
|
/** @typedef {import("../../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
|
|
14
14
|
/** @typedef {import("../../declarations/WebpackOptions").RuleSetUse} RuleSetUse */
|
|
15
15
|
/** @typedef {import("../../declarations/WebpackOptions").RuleSetUseItem} RuleSetUseItem */
|
|
16
|
+
/** @typedef {import("../../declarations/WebpackOptions").RuleSetUseFunction} RuleSetUseFunction */
|
|
16
17
|
/** @typedef {import("./RuleSetCompiler")} RuleSetCompiler */
|
|
17
18
|
/** @typedef {import("./RuleSetCompiler").Effect} Effect */
|
|
18
19
|
/** @typedef {import("./RuleSetCompiler").EffectData} EffectData */
|
|
@@ -22,6 +23,7 @@ const PLUGIN_NAME = "UseEffectRulePlugin";
|
|
|
22
23
|
|
|
23
24
|
class UseEffectRulePlugin {
|
|
24
25
|
/**
|
|
26
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
25
27
|
* @param {RuleSetCompiler} ruleSetCompiler the rule set compiler
|
|
26
28
|
* @returns {void}
|
|
27
29
|
*/
|
|
@@ -30,6 +32,7 @@ class UseEffectRulePlugin {
|
|
|
30
32
|
PLUGIN_NAME,
|
|
31
33
|
(path, rule, unhandledProperties, result, references) => {
|
|
32
34
|
/**
|
|
35
|
+
* Processes the provided property.
|
|
33
36
|
* @param {keyof RuleSetRule} property property
|
|
34
37
|
* @param {string} correctProperty correct property
|
|
35
38
|
*/
|
|
@@ -58,6 +61,7 @@ class UseEffectRulePlugin {
|
|
|
58
61
|
(enforce ? `use-${enforce}` : "use");
|
|
59
62
|
|
|
60
63
|
/**
|
|
64
|
+
* Returns effect.
|
|
61
65
|
* @param {string} path options path
|
|
62
66
|
* @param {string} defaultIdent default ident when none is provided
|
|
63
67
|
* @param {RuleSetUseItem} item user provided use value
|
|
@@ -76,9 +80,10 @@ class UseEffectRulePlugin {
|
|
|
76
80
|
};
|
|
77
81
|
|
|
78
82
|
/**
|
|
83
|
+
* Returns effect.
|
|
79
84
|
* @param {string} path options path
|
|
80
85
|
* @param {string} defaultIdent default ident when none is provided
|
|
81
|
-
* @param {Exclude<NonNullable<RuleSetUseItem>,
|
|
86
|
+
* @param {Exclude<NonNullable<RuleSetUseItem>, RuleSetUseFunction>} item user provided use value
|
|
82
87
|
* @returns {Effect} effect
|
|
83
88
|
*/
|
|
84
89
|
const useToEffectRaw = (path, defaultIdent, item) => {
|
|
@@ -117,6 +122,7 @@ class UseEffectRulePlugin {
|
|
|
117
122
|
};
|
|
118
123
|
|
|
119
124
|
/**
|
|
125
|
+
* Use to effects without ident.
|
|
120
126
|
* @param {string} path options path
|
|
121
127
|
* @param {RuleSetUseItem | (Falsy | RuleSetUseItem)[]} items user provided use value
|
|
122
128
|
* @returns {Effect[]} effects
|
|
@@ -127,7 +133,7 @@ class UseEffectRulePlugin {
|
|
|
127
133
|
useToEffectRaw(
|
|
128
134
|
`${path}[${idx}]`,
|
|
129
135
|
"[[missing ident]]",
|
|
130
|
-
/** @type {Exclude<RuleSetUseItem,
|
|
136
|
+
/** @type {Exclude<RuleSetUseItem, RuleSetUseFunction>} */
|
|
131
137
|
(item)
|
|
132
138
|
)
|
|
133
139
|
);
|
|
@@ -136,13 +142,14 @@ class UseEffectRulePlugin {
|
|
|
136
142
|
useToEffectRaw(
|
|
137
143
|
path,
|
|
138
144
|
"[[missing ident]]",
|
|
139
|
-
/** @type {Exclude<RuleSetUseItem,
|
|
145
|
+
/** @type {Exclude<RuleSetUseItem, RuleSetUseFunction>} */
|
|
140
146
|
(items)
|
|
141
147
|
)
|
|
142
148
|
];
|
|
143
149
|
};
|
|
144
150
|
|
|
145
151
|
/**
|
|
152
|
+
* Returns effects.
|
|
146
153
|
* @param {string} path current path
|
|
147
154
|
* @param {RuleSetUse} items user provided use value
|
|
148
155
|
* @returns {(Effect | ((effectData: EffectData) => Effect[]))[]} effects
|
|
@@ -0,0 +1,56 @@
|
|
|
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("../Compilation")} Compilation */
|
|
12
|
+
|
|
13
|
+
class AsyncModuleGeneratorRuntimeModule extends HelperRuntimeModule {
|
|
14
|
+
constructor() {
|
|
15
|
+
super("async module generator");
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Generates runtime code for this runtime module.
|
|
20
|
+
* @returns {string | null} runtime code
|
|
21
|
+
*/
|
|
22
|
+
generate() {
|
|
23
|
+
const compilation = /** @type {Compilation} */ (this.compilation);
|
|
24
|
+
const { runtimeTemplate } = compilation;
|
|
25
|
+
const fn = RuntimeGlobals.asyncModuleGenerator;
|
|
26
|
+
const cst = runtimeTemplate.renderConst();
|
|
27
|
+
// Wrap a generator-based async module body so it drives like an `async`
|
|
28
|
+
// function: run the generator and resolve each `yield`ed dependency
|
|
29
|
+
// promise, without emitting `async`/`await`.
|
|
30
|
+
return Template.asString([
|
|
31
|
+
`${fn} = ${runtimeTemplate.returningFunction(
|
|
32
|
+
runtimeTemplate.basicFunction(
|
|
33
|
+
"__webpack_handle_async_dependencies__, __webpack_async_result__",
|
|
34
|
+
[
|
|
35
|
+
`${cst} gen = body(__webpack_handle_async_dependencies__, __webpack_async_result__);`,
|
|
36
|
+
`${cst} step = ${runtimeTemplate.basicFunction("key, arg", [
|
|
37
|
+
`${cst} info = gen[key](arg);`,
|
|
38
|
+
"if (info.done) return;",
|
|
39
|
+
`Promise.resolve(info.value).then(${runtimeTemplate.expressionFunction(
|
|
40
|
+
'step("next", value)',
|
|
41
|
+
"value"
|
|
42
|
+
)}, ${runtimeTemplate.expressionFunction(
|
|
43
|
+
'step("throw", err)',
|
|
44
|
+
"err"
|
|
45
|
+
)});`
|
|
46
|
+
])};`,
|
|
47
|
+
'step("next");'
|
|
48
|
+
]
|
|
49
|
+
),
|
|
50
|
+
"body"
|
|
51
|
+
)};`
|
|
52
|
+
]);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
module.exports = AsyncModuleGeneratorRuntimeModule;
|
|
@@ -21,6 +21,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
+
* Generates runtime code for this runtime module.
|
|
24
25
|
* @returns {string | null} runtime code
|
|
25
26
|
*/
|
|
26
27
|
generate() {
|
|
@@ -28,24 +29,34 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
28
29
|
const { runtimeTemplate } = compilation;
|
|
29
30
|
const fn = RuntimeGlobals.asyncModule;
|
|
30
31
|
const defer = this._deferInterop;
|
|
32
|
+
const cst = runtimeTemplate.renderConst();
|
|
33
|
+
const lt = runtimeTemplate.renderLet();
|
|
34
|
+
const supportsSymbol = runtimeTemplate.supportsSymbol();
|
|
35
|
+
/** @type {(name: string, fallback: string) => string} */
|
|
36
|
+
const renderSymbol = (name, fallback) =>
|
|
37
|
+
supportsSymbol
|
|
38
|
+
? `Symbol("${name}")`
|
|
39
|
+
: `hasSymbol ? Symbol("${name}") : "${fallback}"`;
|
|
31
40
|
return Template.asString([
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
41
|
+
...(supportsSymbol
|
|
42
|
+
? []
|
|
43
|
+
: [`${cst} hasSymbol = typeof Symbol === "function";`]),
|
|
44
|
+
`${cst} webpackQueues = ${renderSymbol("webpack queues", "__webpack_queues__")};`,
|
|
45
|
+
`${cst} webpackExports = ${
|
|
35
46
|
defer ? `${RuntimeGlobals.asyncModuleExportSymbol}= ` : ""
|
|
36
|
-
}
|
|
37
|
-
|
|
47
|
+
}${renderSymbol("webpack exports", RuntimeGlobals.exports)};`,
|
|
48
|
+
`${cst} webpackError = ${renderSymbol("webpack error", "__webpack_error__")};`,
|
|
38
49
|
defer
|
|
39
50
|
? Template.asString([
|
|
40
|
-
|
|
41
|
-
|
|
51
|
+
`${cst} webpackDone = ${RuntimeGlobals.asyncModuleDoneSymbol} = ${renderSymbol("webpack done", "__webpack_done__")};`,
|
|
52
|
+
`${cst} webpackDefer = ${RuntimeGlobals.deferredModuleAsyncTransitiveDependenciesSymbol} = ${renderSymbol("webpack defer", "__webpack_defer__")};`,
|
|
42
53
|
`${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies} = ${runtimeTemplate.basicFunction(
|
|
43
54
|
"asyncDeps",
|
|
44
55
|
[
|
|
45
56
|
Template.indent([
|
|
46
|
-
|
|
57
|
+
`${cst} hasUnresolvedAsyncSubgraph = asyncDeps.some((id) => {`,
|
|
47
58
|
Template.indent([
|
|
48
|
-
|
|
59
|
+
`${cst} cache = __webpack_module_cache__[id];`,
|
|
49
60
|
"return !cache || cache[webpackDone] === false;"
|
|
50
61
|
]),
|
|
51
62
|
"});",
|
|
@@ -59,8 +70,8 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
59
70
|
)}`
|
|
60
71
|
])
|
|
61
72
|
: "",
|
|
62
|
-
|
|
63
|
-
|
|
73
|
+
`${cst} resolveQueue = ${runtimeTemplate.basicFunction("queue", [
|
|
74
|
+
`if(${runtimeTemplate.optionalChaining("queue", "d < 1")}) {`,
|
|
64
75
|
Template.indent([
|
|
65
76
|
"queue.d = 1;",
|
|
66
77
|
`queue.forEach(${runtimeTemplate.expressionFunction(
|
|
@@ -74,7 +85,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
74
85
|
]),
|
|
75
86
|
"}"
|
|
76
87
|
])}`,
|
|
77
|
-
|
|
88
|
+
`${cst} wrapDeps = ${runtimeTemplate.returningFunction(
|
|
78
89
|
`deps.map(${runtimeTemplate.basicFunction("dep", [
|
|
79
90
|
'if(dep !== null && typeof dep === "object") {',
|
|
80
91
|
Template.indent([
|
|
@@ -82,10 +93,10 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
82
93
|
? Template.asString([
|
|
83
94
|
"if(!dep[webpackQueues] && dep[webpackDefer]) {",
|
|
84
95
|
Template.indent([
|
|
85
|
-
|
|
96
|
+
`${cst} asyncDeps = ${RuntimeGlobals.deferredModuleAsyncTransitiveDependencies}(dep[webpackDefer]);`,
|
|
86
97
|
"if (asyncDeps) {",
|
|
87
98
|
Template.indent([
|
|
88
|
-
|
|
99
|
+
`${cst} d = dep;`,
|
|
89
100
|
"dep = {",
|
|
90
101
|
Template.indent([
|
|
91
102
|
"then(onFulfilled, onRejected) {",
|
|
@@ -106,7 +117,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
106
117
|
"if(dep[webpackQueues]) return dep;",
|
|
107
118
|
"if(dep.then) {",
|
|
108
119
|
Template.indent([
|
|
109
|
-
|
|
120
|
+
`${cst} queue = [];`,
|
|
110
121
|
"queue.d = 0;",
|
|
111
122
|
`dep.then(${runtimeTemplate.basicFunction("r", [
|
|
112
123
|
"obj[webpackExports] = r;",
|
|
@@ -115,7 +126,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
115
126
|
"obj[webpackError] = e;",
|
|
116
127
|
"resolveQueue(queue);"
|
|
117
128
|
])});`,
|
|
118
|
-
|
|
129
|
+
`${cst} obj = {};`,
|
|
119
130
|
defer ? "obj[webpackDefer] = false;" : "",
|
|
120
131
|
`obj[webpackQueues] = ${runtimeTemplate.expressionFunction(
|
|
121
132
|
"fn(queue)",
|
|
@@ -126,7 +137,7 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
126
137
|
"}"
|
|
127
138
|
]),
|
|
128
139
|
"}",
|
|
129
|
-
|
|
140
|
+
`${cst} ret = {};`,
|
|
130
141
|
`ret[webpackQueues] = ${runtimeTemplate.emptyFunction()};`,
|
|
131
142
|
"ret[webpackExports] = dep;",
|
|
132
143
|
"return ret;"
|
|
@@ -134,14 +145,14 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
134
145
|
"deps"
|
|
135
146
|
)};`,
|
|
136
147
|
`${fn} = ${runtimeTemplate.basicFunction("module, body, hasAwait", [
|
|
137
|
-
|
|
148
|
+
`${lt} queue;`,
|
|
138
149
|
"hasAwait && ((queue = []).d = -1);",
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
150
|
+
`${cst} depQueues = new Set();`,
|
|
151
|
+
`${cst} exports = module.exports;`,
|
|
152
|
+
`${lt} currentDeps;`,
|
|
153
|
+
`${lt} outerResolve;`,
|
|
154
|
+
`${lt} reject;`,
|
|
155
|
+
`${cst} promise = new Promise(${runtimeTemplate.basicFunction(
|
|
145
156
|
"resolve, rej",
|
|
146
157
|
["reject = rej;", "outerResolve = resolve;"]
|
|
147
158
|
)});`,
|
|
@@ -151,17 +162,17 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
151
162
|
"fn"
|
|
152
163
|
)};`,
|
|
153
164
|
"module.exports = promise;",
|
|
154
|
-
|
|
165
|
+
`${cst} handle = ${runtimeTemplate.basicFunction("deps", [
|
|
155
166
|
"currentDeps = wrapDeps(deps);",
|
|
156
|
-
|
|
157
|
-
|
|
167
|
+
`${lt} fn;`,
|
|
168
|
+
`${cst} getResult = ${runtimeTemplate.returningFunction(
|
|
158
169
|
`currentDeps.map(${runtimeTemplate.basicFunction("d", [
|
|
159
170
|
defer ? "if(d[webpackDefer]) return d;" : "",
|
|
160
171
|
"if(d[webpackError]) throw d[webpackError];",
|
|
161
172
|
"return d[webpackExports];"
|
|
162
173
|
])})`
|
|
163
174
|
)}`,
|
|
164
|
-
|
|
175
|
+
`${cst} promise = new Promise(${runtimeTemplate.basicFunction(
|
|
165
176
|
"resolve",
|
|
166
177
|
[
|
|
167
178
|
`fn = ${runtimeTemplate.expressionFunction(
|
|
@@ -169,11 +180,11 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
169
180
|
""
|
|
170
181
|
)};`,
|
|
171
182
|
"fn.r = 0;",
|
|
172
|
-
|
|
183
|
+
`${cst} fnQueue = ${runtimeTemplate.expressionFunction(
|
|
173
184
|
"q !== queue && !depQueues.has(q) && (depQueues.add(q), q && !q.d && (fn.r++, q.push(fn)))",
|
|
174
185
|
"q"
|
|
175
186
|
)};`,
|
|
176
|
-
`currentDeps.
|
|
187
|
+
`currentDeps.forEach(${runtimeTemplate.expressionFunction(
|
|
177
188
|
`${
|
|
178
189
|
defer ? "dep[webpackDefer]||" : ""
|
|
179
190
|
}dep[webpackQueues](fnQueue)`,
|
|
@@ -183,14 +194,22 @@ class AsyncModuleRuntimeModule extends HelperRuntimeModule {
|
|
|
183
194
|
)});`,
|
|
184
195
|
"return fn.r ? promise : getResult();"
|
|
185
196
|
])}`,
|
|
186
|
-
|
|
197
|
+
`${cst} done = ${runtimeTemplate.expressionFunction(
|
|
187
198
|
`(err ? reject(promise[webpackError] = err) : outerResolve(exports)), resolveQueue(queue)${
|
|
188
|
-
defer
|
|
199
|
+
defer
|
|
200
|
+
? ", promise[webpackDone] = true, module.evaluatingAsync = false"
|
|
201
|
+
: ""
|
|
189
202
|
}`,
|
|
190
203
|
"err"
|
|
191
204
|
)}`,
|
|
205
|
+
// Track the async body's whole lifetime (evaluating +
|
|
206
|
+
// evaluating-async states) with a dedicated flag — the sync require
|
|
207
|
+
// wrapper clears `module.evaluating` as soon as `.a` returns, so a
|
|
208
|
+
// deferred namespace reaching this module through a cycle relies on
|
|
209
|
+
// `evaluatingAsync` to keep throwing until it is fully evaluated.
|
|
210
|
+
defer ? "module.evaluatingAsync = true;" : "",
|
|
192
211
|
"body(handle, done);",
|
|
193
|
-
"queue
|
|
212
|
+
`${runtimeTemplate.optionalChaining("queue", "d < 0")} && (queue.d = 0);`
|
|
194
213
|
])};`
|
|
195
214
|
]);
|
|
196
215
|
}
|
|
@@ -19,20 +19,21 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
|
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
/**
|
|
22
|
+
* Generates runtime code for this runtime module.
|
|
22
23
|
* @returns {string | null} runtime code
|
|
23
24
|
*/
|
|
24
25
|
generate() {
|
|
25
26
|
const compilation = /** @type {Compilation} */ (this.compilation);
|
|
26
27
|
const { scriptType, importMetaName, path, environment } =
|
|
27
28
|
compilation.outputOptions;
|
|
29
|
+
const chunk = /** @type {Chunk} */ (this.chunk);
|
|
28
30
|
const chunkName = compilation.getPath(
|
|
29
31
|
JavascriptModulesPlugin.getChunkFilenameTemplate(
|
|
30
|
-
|
|
31
|
-
(this.chunk),
|
|
32
|
+
chunk,
|
|
32
33
|
compilation.outputOptions
|
|
33
34
|
),
|
|
34
35
|
{
|
|
35
|
-
chunk
|
|
36
|
+
chunk,
|
|
36
37
|
contentHashType: "javascript"
|
|
37
38
|
}
|
|
38
39
|
);
|
|
@@ -46,26 +47,38 @@ class AutoPublicPathRuntimeModule extends RuntimeModule {
|
|
|
46
47
|
? "globalThis"
|
|
47
48
|
: RuntimeGlobals.global;
|
|
48
49
|
|
|
50
|
+
const entryOptions = chunk.getEntryOptions();
|
|
51
|
+
// A worklet chunk is always loaded as a module via `addModule`, so it can
|
|
52
|
+
// read `import.meta.url` directly instead of the worker-scope detection.
|
|
53
|
+
const fromImportMeta =
|
|
54
|
+
scriptType === "module" || Boolean(entryOptions && entryOptions.worklet);
|
|
55
|
+
|
|
56
|
+
const runtimeTemplate = compilation.runtimeTemplate;
|
|
57
|
+
const cst = runtimeTemplate.renderConst();
|
|
58
|
+
const lt = runtimeTemplate.renderLet();
|
|
49
59
|
return Template.asString([
|
|
50
|
-
|
|
51
|
-
|
|
60
|
+
`${lt} scriptUrl;`,
|
|
61
|
+
fromImportMeta
|
|
52
62
|
? `if (typeof ${importMetaName}.url === "string") scriptUrl = ${importMetaName}.url`
|
|
53
63
|
: Template.asString([
|
|
54
64
|
`if (${global}.importScripts) scriptUrl = ${global}.location + "";`,
|
|
55
|
-
|
|
65
|
+
`${cst} document = ${global}.document;`,
|
|
56
66
|
"if (!scriptUrl && document) {",
|
|
57
67
|
Template.indent([
|
|
58
68
|
// Technically we could use `document.currentScript instanceof window.HTMLScriptElement`,
|
|
59
69
|
// but an attacker could try to inject `<script>HTMLScriptElement = HTMLImageElement</script>`
|
|
60
70
|
// and use `<img name="currentScript" src="https://attacker.controlled.server/"></img>`
|
|
61
|
-
|
|
71
|
+
`if (${runtimeTemplate.optionalChaining(
|
|
72
|
+
"document.currentScript",
|
|
73
|
+
"tagName.toUpperCase() === 'SCRIPT'"
|
|
74
|
+
)})`,
|
|
62
75
|
Template.indent("scriptUrl = document.currentScript.src;"),
|
|
63
76
|
"if (!scriptUrl) {",
|
|
64
77
|
Template.indent([
|
|
65
|
-
|
|
78
|
+
`${cst} scripts = document.getElementsByTagName("script");`,
|
|
66
79
|
"if(scripts.length) {",
|
|
67
80
|
Template.indent([
|
|
68
|
-
|
|
81
|
+
`${lt} i = scripts.length - 1;`,
|
|
69
82
|
"while (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;"
|
|
70
83
|
]),
|
|
71
84
|
"}"
|