webpack 5.59.0 → 5.94.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -38
- package/bin/webpack.js +34 -10
- package/hot/dev-server.js +19 -5
- package/hot/lazy-compilation-node.js +13 -1
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +23 -4
- package/hot/only-dev-server.js +3 -2
- package/hot/poll.js +5 -2
- package/hot/signal.js +6 -2
- package/lib/APIPlugin.js +226 -122
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +2 -1
- package/lib/BannerPlugin.js +33 -12
- package/lib/Cache.js +16 -12
- package/lib/CacheFacade.js +13 -16
- package/lib/CaseSensitiveModulesWarning.js +8 -8
- package/lib/Chunk.js +60 -33
- package/lib/ChunkGraph.js +207 -72
- package/lib/ChunkGroup.js +40 -20
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +117 -32
- package/lib/CodeGenerationResults.js +8 -7
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +712 -392
- package/lib/Compiler.js +393 -172
- package/lib/ConcatenationScope.js +10 -13
- package/lib/ConditionalInitFragment.js +22 -14
- package/lib/ConstPlugin.js +104 -64
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +283 -108
- package/lib/ContextModuleFactory.js +151 -63
- package/lib/ContextReplacementPlugin.js +25 -10
- package/lib/CssModule.js +166 -0
- package/lib/DefinePlugin.js +254 -148
- package/lib/DelegatedModule.js +29 -6
- package/lib/DelegatedModuleFactoryPlugin.js +42 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +17 -2
- package/lib/Dependency.js +58 -29
- package/lib/DependencyTemplate.js +24 -3
- package/lib/DependencyTemplates.js +2 -2
- package/lib/DllEntryPlugin.js +18 -1
- package/lib/DllModule.js +21 -4
- package/lib/DllModuleFactory.js +2 -1
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +50 -19
- package/lib/EntryOptionPlugin.js +6 -1
- package/lib/EntryPlugin.js +7 -4
- package/lib/Entrypoint.js +2 -2
- package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
- package/lib/EnvironmentPlugin.js +5 -2
- package/lib/ErrorHelpers.js +65 -26
- package/lib/EvalDevToolModulePlugin.js +37 -13
- package/lib/EvalSourceMapDevToolPlugin.js +50 -20
- package/lib/ExportsInfo.js +234 -133
- package/lib/ExportsInfoApiPlugin.js +31 -15
- package/lib/ExternalModule.js +391 -129
- package/lib/ExternalModuleFactoryPlugin.js +65 -17
- package/lib/FileSystemInfo.js +1038 -523
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +352 -349
- package/lib/FlagDependencyUsagePlugin.js +10 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +16 -8
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +11 -13
- package/lib/HotModuleReplacementPlugin.js +221 -128
- package/lib/IgnoreErrorModuleFactory.js +4 -4
- package/lib/IgnorePlugin.js +5 -4
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +39 -15
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +45 -16
- package/lib/LoaderOptionsPlugin.js +13 -3
- package/lib/MainTemplate.js +74 -21
- package/lib/Module.js +155 -34
- package/lib/ModuleBuildError.js +13 -11
- package/lib/ModuleDependencyError.js +6 -4
- package/lib/ModuleDependencyWarning.js +6 -4
- package/lib/ModuleError.js +10 -5
- package/lib/ModuleFactory.js +4 -4
- package/lib/ModuleFilenameHelpers.js +164 -54
- package/lib/ModuleGraph.js +93 -53
- package/lib/ModuleGraphConnection.js +27 -13
- package/lib/ModuleHashingError.js +29 -0
- package/lib/ModuleInfoHeaderPlugin.js +92 -33
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +17 -9
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +3 -1
- package/lib/ModuleStoreError.js +3 -2
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +168 -0
- package/lib/ModuleWarning.js +10 -5
- package/lib/MultiCompiler.js +115 -38
- package/lib/MultiStats.js +75 -33
- package/lib/MultiWatching.js +6 -2
- package/lib/NodeStuffPlugin.js +136 -37
- package/lib/NormalModule.js +437 -194
- package/lib/NormalModuleFactory.js +313 -116
- package/lib/NormalModuleReplacementPlugin.js +10 -4
- package/lib/NullFactory.js +1 -1
- package/lib/OptimizationStages.js +3 -3
- package/lib/Parser.js +1 -1
- package/lib/PlatformPlugin.js +39 -0
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +83 -28
- package/lib/ProvidePlugin.js +37 -19
- package/lib/RawModule.js +18 -5
- package/lib/RecordIdsPlugin.js +8 -8
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/ResolverFactory.js +8 -4
- package/lib/RuntimeGlobals.js +99 -65
- package/lib/RuntimeModule.js +17 -15
- package/lib/RuntimePlugin.js +116 -13
- package/lib/RuntimeTemplate.js +304 -102
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +89 -42
- package/lib/Stats.js +12 -7
- package/lib/Template.js +30 -33
- package/lib/TemplatedPathPlugin.js +102 -34
- package/lib/UseStrictPlugin.js +37 -12
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +6 -0
- package/lib/WatchIgnorePlugin.js +46 -13
- package/lib/Watching.js +139 -76
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +162 -56
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +351 -99
- package/lib/asset/AssetModulesPlugin.js +57 -33
- package/lib/asset/AssetParser.js +15 -6
- package/lib/asset/AssetSourceGenerator.js +30 -10
- package/lib/asset/AssetSourceParser.js +8 -2
- package/lib/asset/RawDataUrlModule.js +162 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +376 -420
- package/lib/cache/AddManagedPathsPlugin.js +6 -1
- package/lib/cache/IdleFileCachePlugin.js +26 -13
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
- package/lib/cache/PackFileCacheStrategy.js +172 -94
- package/lib/cache/ResolverCachePlugin.js +115 -43
- package/lib/cache/getLazyHashedEtag.js +2 -2
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +195 -110
- package/lib/config/browserslistTargetHandler.js +106 -41
- package/lib/config/defaults.js +572 -154
- package/lib/config/normalization.js +361 -322
- package/lib/config/target.js +105 -66
- package/lib/container/ContainerEntryDependency.js +2 -1
- package/lib/container/ContainerEntryModule.js +27 -11
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +18 -12
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +19 -8
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/ModuleFederationPlugin.js +2 -0
- package/lib/container/RemoteModule.js +17 -4
- package/lib/container/RemoteRuntimeModule.js +31 -17
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +203 -0
- package/lib/css/CssGenerator.js +151 -0
- package/lib/css/CssLoadingRuntimeModule.js +592 -0
- package/lib/css/CssModulesPlugin.js +888 -0
- package/lib/css/CssParser.js +1049 -0
- package/lib/css/walkCssTokens.js +775 -0
- package/lib/debug/ProfilingPlugin.js +102 -54
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
- package/lib/dependencies/AMDPlugin.js +44 -24
- package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
- package/lib/dependencies/AMDRequireDependency.js +21 -6
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +4 -4
- package/lib/dependencies/CachedConstDependency.js +22 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
- package/lib/dependencies/CommonJsExportsDependency.js +28 -5
- package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
- package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
- package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
- package/lib/dependencies/CommonJsRequireDependency.js +9 -1
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
- package/lib/dependencies/ConstDependency.js +12 -3
- package/lib/dependencies/ContextDependency.js +32 -5
- package/lib/dependencies/ContextDependencyHelpers.js +92 -62
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
- package/lib/dependencies/ContextElementDependency.js +41 -4
- package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
- package/lib/dependencies/CriticalDependencyWarning.js +4 -1
- package/lib/dependencies/CssExportDependency.js +156 -0
- package/lib/dependencies/CssImportDependency.js +125 -0
- package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
- package/lib/dependencies/CssUrlDependency.js +164 -0
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +15 -11
- package/lib/dependencies/ExportsInfoDependency.js +26 -5
- package/lib/dependencies/ExternalModuleDependency.js +109 -0
- package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
- package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
- package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
- package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +13 -7
- package/lib/dependencies/HarmonyImportDependency.js +65 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
- package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -2
- package/lib/dependencies/ImportDependency.js +50 -12
- package/lib/dependencies/ImportEagerDependency.js +11 -6
- package/lib/dependencies/ImportMetaContextDependency.js +42 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
- package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +128 -59
- package/lib/dependencies/ImportParserPlugin.js +153 -83
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +11 -6
- package/lib/dependencies/JsonExportsDependency.js +38 -30
- package/lib/dependencies/LoaderDependency.js +14 -0
- package/lib/dependencies/LoaderImportDependency.js +14 -0
- package/lib/dependencies/LoaderPlugin.js +54 -40
- package/lib/dependencies/LocalModule.js +17 -1
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +22 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
- package/lib/dependencies/ModuleDependency.js +24 -7
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +43 -8
- package/lib/dependencies/PureExpressionDependency.js +73 -39
- package/lib/dependencies/RequireContextDependency.js +6 -16
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
- package/lib/dependencies/RequireContextPlugin.js +20 -7
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +6 -1
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +19 -2
- package/lib/dependencies/RequireResolveDependency.js +8 -1
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +49 -22
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +20 -13
- package/lib/dependencies/URLPlugin.js +115 -27
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +143 -59
- package/lib/dependencies/getFunctionExpression.js +9 -0
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
- package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
- package/lib/hmr/LazyCompilationPlugin.js +94 -41
- package/lib/hmr/lazyCompilationBackend.js +107 -44
- package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
- package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
- package/lib/ids/HashedModuleIdsPlugin.js +24 -16
- package/lib/ids/IdHelpers.js +59 -49
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +20 -12
- package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
- package/lib/ids/SyncModuleIdsPlugin.js +146 -0
- package/lib/index.js +44 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
- package/lib/javascript/BasicEvaluatedExpression.js +133 -19
- package/lib/javascript/ChunkHelpers.js +33 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
- package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
- package/lib/javascript/JavascriptGenerator.js +37 -6
- package/lib/javascript/JavascriptModulesPlugin.js +523 -295
- package/lib/javascript/JavascriptParser.js +1591 -574
- package/lib/javascript/JavascriptParserHelpers.js +58 -37
- package/lib/javascript/StartupHelpers.js +69 -47
- package/lib/json/JsonData.js +33 -0
- package/lib/json/JsonGenerator.js +29 -21
- package/lib/json/JsonModulesPlugin.js +13 -7
- package/lib/json/JsonParser.js +30 -16
- package/lib/library/AbstractLibraryPlugin.js +6 -2
- package/lib/library/AmdLibraryPlugin.js +34 -18
- package/lib/library/AssignLibraryPlugin.js +68 -32
- package/lib/library/EnableLibraryPlugin.js +39 -14
- package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
- package/lib/library/JsonpLibraryPlugin.js +4 -3
- package/lib/library/ModernModuleLibraryPlugin.js +144 -0
- package/lib/library/ModuleLibraryPlugin.js +12 -7
- package/lib/library/SystemLibraryPlugin.js +6 -4
- package/lib/library/UmdLibraryPlugin.js +119 -100
- package/lib/logging/Logger.js +59 -6
- package/lib/logging/createConsoleLogger.js +25 -40
- package/lib/logging/runtime.js +8 -9
- package/lib/logging/truncateArgs.js +9 -8
- package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
- package/lib/node/NodeEnvironmentPlugin.js +14 -8
- package/lib/node/NodeTargetPlugin.js +7 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +100 -50
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
- package/lib/node/nodeConsole.js +48 -31
- package/lib/optimize/AggressiveMergingPlugin.js +10 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
- package/lib/optimize/ConcatenatedModule.js +353 -212
- package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
- package/lib/optimize/InnerGraph.js +30 -25
- package/lib/optimize/InnerGraphPlugin.js +105 -64
- package/lib/optimize/LimitChunkCountPlugin.js +32 -9
- package/lib/optimize/MangleExportsPlugin.js +7 -2
- package/lib/optimize/MinMaxSizeWarning.js +6 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
- package/lib/optimize/RealContentHashPlugin.js +99 -43
- package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
- package/lib/optimize/RuntimeChunkPlugin.js +15 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
- package/lib/optimize/SplitChunksPlugin.js +129 -78
- package/lib/performance/SizeLimitsPlugin.js +22 -8
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
- package/lib/rules/BasicEffectRulePlugin.js +7 -1
- package/lib/rules/BasicMatcherRulePlugin.js +8 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
- package/lib/rules/RuleSetCompiler.js +53 -32
- package/lib/rules/UseEffectRulePlugin.js +42 -36
- package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
- package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
- package/lib/runtime/BaseUriRuntimeModule.js +35 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
- package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +24 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
- package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +336 -120
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +212 -33
- package/lib/serialization/DateObjectSerializer.js +16 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -6
- package/lib/serialization/FileMiddleware.js +187 -86
- package/lib/serialization/MapObjectSerializer.js +25 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
- package/lib/serialization/ObjectMiddleware.js +96 -66
- package/lib/serialization/PlainObjectSerializer.js +51 -14
- package/lib/serialization/RegExpObjectSerializer.js +17 -5
- package/lib/serialization/Serializer.js +23 -5
- package/lib/serialization/SerializerMiddleware.js +8 -8
- package/lib/serialization/SetObjectSerializer.js +22 -6
- package/lib/serialization/SingleItemMiddleware.js +2 -2
- package/lib/serialization/types.js +2 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +40 -17
- package/lib/sharing/ConsumeSharedPlugin.js +139 -102
- package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +19 -6
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +37 -30
- package/lib/sharing/SharePlugin.js +2 -2
- package/lib/sharing/ShareRuntimeModule.js +20 -10
- package/lib/sharing/resolveMatchedConfigs.js +6 -5
- package/lib/sharing/utils.js +338 -34
- package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
- package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
- package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
- package/lib/stats/StatsFactory.js +128 -57
- package/lib/stats/StatsPrinter.js +77 -46
- package/lib/util/ArrayHelpers.js +35 -1
- package/lib/util/ArrayQueue.js +15 -22
- package/lib/util/AsyncQueue.js +37 -16
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +11 -2
- package/lib/util/MapHelpers.js +17 -5
- package/lib/util/ParallelismFactorCalculator.js +11 -1
- package/lib/util/Queue.js +9 -3
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +19 -6
- package/lib/util/StackedCacheMap.js +33 -3
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +46 -0
- package/lib/util/TupleQueue.js +9 -3
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +8 -8
- package/lib/util/WeakTupleMap.js +70 -28
- package/lib/util/binarySearchBounds.js +51 -9
- package/lib/util/chainedImports.js +97 -0
- package/lib/util/cleverMerge.js +51 -36
- package/lib/util/comparators.js +146 -83
- package/lib/util/compileBooleanMatcher.js +35 -7
- package/lib/util/conventions.js +126 -0
- package/lib/util/create-schema-validation.js +9 -2
- package/lib/util/createHash.js +49 -14
- package/lib/util/deprecation.js +48 -15
- package/lib/util/deterministicGrouping.js +71 -39
- package/lib/util/extractUrlAndGlobal.js +3 -0
- package/lib/util/findGraphRoots.js +7 -5
- package/lib/util/fs.js +419 -94
- package/lib/util/hash/BatchedHash.js +10 -4
- package/lib/util/hash/md4.js +20 -0
- package/lib/util/hash/wasm-hash.js +163 -0
- package/lib/util/hash/xxhash64.js +7 -141
- package/lib/util/identifier.js +140 -93
- package/lib/util/internalSerializables.js +22 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +10 -10
- package/lib/util/mergeScope.js +76 -0
- package/lib/util/nonNumericOnlyHash.js +22 -0
- package/lib/util/numberHash.js +84 -34
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +7 -55
- package/lib/util/propertyName.js +77 -0
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/runtime.js +188 -133
- package/lib/util/semver.js +64 -56
- package/lib/util/serialization.js +26 -1
- package/lib/util/smartGrouping.js +10 -10
- package/lib/util/source.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
- package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +23 -9
- package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
- package/lib/webpack.js +43 -12
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
- package/module.d.ts +233 -0
- package/package.json +85 -139
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +679 -47
- package/schemas/plugins/BannerPlugin.check.js +1 -1
- package/schemas/plugins/BannerPlugin.json +9 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssParserOptions.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5026 -1756
@@ -18,6 +18,7 @@ const ChunkGraph = require("./ChunkGraph");
|
|
18
18
|
const Module = require("./Module");
|
19
19
|
const ModuleFactory = require("./ModuleFactory");
|
20
20
|
const ModuleGraph = require("./ModuleGraph");
|
21
|
+
const { JAVASCRIPT_MODULE_TYPE_AUTO } = require("./ModuleTypeConstants");
|
21
22
|
const NormalModule = require("./NormalModule");
|
22
23
|
const BasicEffectRulePlugin = require("./rules/BasicEffectRulePlugin");
|
23
24
|
const BasicMatcherRulePlugin = require("./rules/BasicMatcherRulePlugin");
|
@@ -28,19 +29,34 @@ const LazySet = require("./util/LazySet");
|
|
28
29
|
const { getScheme } = require("./util/URLAbsoluteSpecifier");
|
29
30
|
const { cachedCleverMerge, cachedSetProperty } = require("./util/cleverMerge");
|
30
31
|
const { join } = require("./util/fs");
|
31
|
-
const {
|
32
|
+
const {
|
33
|
+
parseResource,
|
34
|
+
parseResourceWithoutFragment
|
35
|
+
} = require("./util/identifier");
|
32
36
|
|
33
37
|
/** @typedef {import("../declarations/WebpackOptions").ModuleOptionsNormalized} ModuleOptions */
|
38
|
+
/** @typedef {import("../declarations/WebpackOptions").RuleSetRule} RuleSetRule */
|
34
39
|
/** @typedef {import("./Generator")} Generator */
|
35
40
|
/** @typedef {import("./ModuleFactory").ModuleFactoryCreateData} ModuleFactoryCreateData */
|
41
|
+
/** @typedef {import("./ModuleFactory").ModuleFactoryCreateDataContextInfo} ModuleFactoryCreateDataContextInfo */
|
36
42
|
/** @typedef {import("./ModuleFactory").ModuleFactoryResult} ModuleFactoryResult */
|
43
|
+
/** @typedef {import("./NormalModule").GeneratorOptions} GeneratorOptions */
|
44
|
+
/** @typedef {import("./NormalModule").LoaderItem} LoaderItem */
|
45
|
+
/** @typedef {import("./NormalModule").NormalModuleCreateData} NormalModuleCreateData */
|
46
|
+
/** @typedef {import("./NormalModule").ParserOptions} ParserOptions */
|
37
47
|
/** @typedef {import("./Parser")} Parser */
|
38
48
|
/** @typedef {import("./ResolverFactory")} ResolverFactory */
|
49
|
+
/** @typedef {import("./ResolverFactory").ResolveContext} ResolveContext */
|
50
|
+
/** @typedef {import("./ResolverFactory").ResolveRequest} ResolveRequest */
|
51
|
+
/** @typedef {import("./ResolverFactory").ResolverWithOptions} ResolverWithOptions */
|
39
52
|
/** @typedef {import("./dependencies/ModuleDependency")} ModuleDependency */
|
40
53
|
/** @typedef {import("./util/fs").InputFileSystem} InputFileSystem */
|
41
54
|
|
55
|
+
/** @typedef {Pick<RuleSetRule, 'type'|'sideEffects'|'parser'|'generator'|'resolve'|'layer'>} ModuleSettings */
|
56
|
+
/** @typedef {Partial<NormalModuleCreateData & {settings: ModuleSettings}>} CreateData */
|
57
|
+
|
42
58
|
/**
|
43
|
-
* @typedef {
|
59
|
+
* @typedef {object} ResolveData
|
44
60
|
* @property {ModuleFactoryCreateData["contextInfo"]} contextInfo
|
45
61
|
* @property {ModuleFactoryCreateData["resolveOptions"]} resolveOptions
|
46
62
|
* @property {string} context
|
@@ -48,7 +64,7 @@ const { parseResource } = require("./util/identifier");
|
|
48
64
|
* @property {Record<string, any> | undefined} assertions
|
49
65
|
* @property {ModuleDependency[]} dependencies
|
50
66
|
* @property {string} dependencyType
|
51
|
-
* @property {
|
67
|
+
* @property {CreateData} createData
|
52
68
|
* @property {LazySet<string>} fileDependencies
|
53
69
|
* @property {LazySet<string>} missingDependencies
|
54
70
|
* @property {LazySet<string>} contextDependencies
|
@@ -56,80 +72,97 @@ const { parseResource } = require("./util/identifier");
|
|
56
72
|
*/
|
57
73
|
|
58
74
|
/**
|
59
|
-
* @typedef {
|
75
|
+
* @typedef {object} ResourceData
|
60
76
|
* @property {string} resource
|
61
|
-
* @property {string} path
|
62
|
-
* @property {string} query
|
63
|
-
* @property {string} fragment
|
77
|
+
* @property {string=} path
|
78
|
+
* @property {string=} query
|
79
|
+
* @property {string=} fragment
|
64
80
|
* @property {string=} context
|
65
81
|
*/
|
66
82
|
|
67
83
|
/** @typedef {ResourceData & { data: Record<string, any> }} ResourceDataWithData */
|
68
84
|
|
85
|
+
/**
|
86
|
+
* @typedef {object} ParsedLoaderRequest
|
87
|
+
* @property {string} loader loader
|
88
|
+
* @property {string|undefined} options options
|
89
|
+
*/
|
90
|
+
|
91
|
+
/**
|
92
|
+
* @template T
|
93
|
+
* @callback Callback
|
94
|
+
* @param {(Error | null)=} err
|
95
|
+
* @param {T=} stats
|
96
|
+
* @returns {void}
|
97
|
+
*/
|
98
|
+
|
69
99
|
const EMPTY_RESOLVE_OPTIONS = {};
|
100
|
+
/** @type {ParserOptions} */
|
70
101
|
const EMPTY_PARSER_OPTIONS = {};
|
102
|
+
/** @type {GeneratorOptions} */
|
71
103
|
const EMPTY_GENERATOR_OPTIONS = {};
|
104
|
+
/** @type {ParsedLoaderRequest[]} */
|
72
105
|
const EMPTY_ELEMENTS = [];
|
73
106
|
|
74
107
|
const MATCH_RESOURCE_REGEX = /^([^!]+)!=!/;
|
108
|
+
const LEADING_DOT_EXTENSION_REGEX = /^[^.]/;
|
75
109
|
|
110
|
+
/**
|
111
|
+
* @param {LoaderItem} data data
|
112
|
+
* @returns {string} ident
|
113
|
+
*/
|
76
114
|
const loaderToIdent = data => {
|
77
115
|
if (!data.options) {
|
78
116
|
return data.loader;
|
79
117
|
}
|
80
118
|
if (typeof data.options === "string") {
|
81
|
-
return data.loader
|
119
|
+
return `${data.loader}?${data.options}`;
|
82
120
|
}
|
83
121
|
if (typeof data.options !== "object") {
|
84
122
|
throw new Error("loader options must be string or object");
|
85
123
|
}
|
86
124
|
if (data.ident) {
|
87
|
-
return data.loader
|
125
|
+
return `${data.loader}??${data.ident}`;
|
88
126
|
}
|
89
|
-
return data.loader
|
127
|
+
return `${data.loader}?${JSON.stringify(data.options)}`;
|
90
128
|
};
|
91
129
|
|
130
|
+
/**
|
131
|
+
* @param {LoaderItem[]} loaders loaders
|
132
|
+
* @param {string} resource resource
|
133
|
+
* @returns {string} stringified loaders and resource
|
134
|
+
*/
|
92
135
|
const stringifyLoadersAndResource = (loaders, resource) => {
|
93
136
|
let str = "";
|
94
137
|
for (const loader of loaders) {
|
95
|
-
str += loaderToIdent(loader)
|
138
|
+
str += `${loaderToIdent(loader)}!`;
|
96
139
|
}
|
97
140
|
return str + resource;
|
98
141
|
};
|
99
142
|
|
100
143
|
/**
|
101
|
-
* @param {
|
102
|
-
* @
|
144
|
+
* @param {number} times times
|
145
|
+
* @param {(err?: null | Error) => void} callback callback
|
146
|
+
* @returns {(err?: null | Error) => void} callback
|
103
147
|
*/
|
104
|
-
const
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
options
|
112
|
-
};
|
113
|
-
} else {
|
114
|
-
return {
|
115
|
-
loader: resultString,
|
116
|
-
options: undefined
|
117
|
-
};
|
148
|
+
const needCalls = (times, callback) => err => {
|
149
|
+
if (--times === 0) {
|
150
|
+
return callback(err);
|
151
|
+
}
|
152
|
+
if (err && times > 0) {
|
153
|
+
times = Number.NaN;
|
154
|
+
return callback(err);
|
118
155
|
}
|
119
156
|
};
|
120
157
|
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
}
|
130
|
-
};
|
131
|
-
};
|
132
|
-
|
158
|
+
/**
|
159
|
+
* @template T
|
160
|
+
* @template O
|
161
|
+
* @param {T} globalOptions global options
|
162
|
+
* @param {string} type type
|
163
|
+
* @param {O} localOptions local options
|
164
|
+
* @returns {T & O | T | O} result
|
165
|
+
*/
|
133
166
|
const mergeGlobalOptions = (globalOptions, type, localOptions) => {
|
134
167
|
const parts = type.split("/");
|
135
168
|
let result;
|
@@ -138,26 +171,31 @@ const mergeGlobalOptions = (globalOptions, type, localOptions) => {
|
|
138
171
|
current = current ? `${current}/${part}` : part;
|
139
172
|
const options = globalOptions[current];
|
140
173
|
if (typeof options === "object") {
|
141
|
-
|
142
|
-
result
|
143
|
-
} else {
|
144
|
-
result = cachedCleverMerge(result, options);
|
145
|
-
}
|
174
|
+
result =
|
175
|
+
result === undefined ? options : cachedCleverMerge(result, options);
|
146
176
|
}
|
147
177
|
}
|
148
178
|
if (result === undefined) {
|
149
179
|
return localOptions;
|
150
|
-
} else {
|
151
|
-
return cachedCleverMerge(result, localOptions);
|
152
180
|
}
|
181
|
+
return cachedCleverMerge(result, localOptions);
|
153
182
|
};
|
154
183
|
|
155
184
|
// TODO webpack 6 remove
|
185
|
+
/**
|
186
|
+
* @param {string} name name
|
187
|
+
* @param {TODO} hook hook
|
188
|
+
* @returns {string} result
|
189
|
+
*/
|
156
190
|
const deprecationChangedHookMessage = (name, hook) => {
|
157
191
|
const names = hook.taps
|
158
|
-
.map(
|
159
|
-
|
160
|
-
|
192
|
+
.map(
|
193
|
+
/**
|
194
|
+
* @param {TODO} tapped tapped
|
195
|
+
* @returns {string} name
|
196
|
+
*/
|
197
|
+
tapped => tapped.name
|
198
|
+
)
|
161
199
|
.join(", ");
|
162
200
|
|
163
201
|
return (
|
@@ -181,7 +219,16 @@ const ruleSetCompiler = new RuleSetCompiler([
|
|
181
219
|
new BasicMatcherRulePlugin("issuer"),
|
182
220
|
new BasicMatcherRulePlugin("compiler"),
|
183
221
|
new BasicMatcherRulePlugin("issuerLayer"),
|
184
|
-
new ObjectMatcherRulePlugin(
|
222
|
+
new ObjectMatcherRulePlugin(
|
223
|
+
"assert",
|
224
|
+
"assertions",
|
225
|
+
value => value && /** @type {any} */ (value)._isLegacyAssert !== undefined
|
226
|
+
),
|
227
|
+
new ObjectMatcherRulePlugin(
|
228
|
+
"with",
|
229
|
+
"assertions",
|
230
|
+
value => value && !(/** @type {any} */ (value)._isLegacyAssert)
|
231
|
+
),
|
185
232
|
new ObjectMatcherRulePlugin("descriptionData"),
|
186
233
|
new BasicEffectRulePlugin("type"),
|
187
234
|
new BasicEffectRulePlugin("sideEffects"),
|
@@ -194,12 +241,12 @@ const ruleSetCompiler = new RuleSetCompiler([
|
|
194
241
|
|
195
242
|
class NormalModuleFactory extends ModuleFactory {
|
196
243
|
/**
|
197
|
-
* @param {
|
244
|
+
* @param {object} param params
|
198
245
|
* @param {string=} param.context context
|
199
246
|
* @param {InputFileSystem} param.fs file system
|
200
247
|
* @param {ResolverFactory} param.resolverFactory resolverFactory
|
201
248
|
* @param {ModuleOptions} param.options options
|
202
|
-
* @param {
|
249
|
+
* @param {object=} param.associatedObjectForCache an object to which the cache will be attached
|
203
250
|
* @param {boolean=} param.layers enable layers
|
204
251
|
*/
|
205
252
|
constructor({
|
@@ -212,7 +259,7 @@ class NormalModuleFactory extends ModuleFactory {
|
|
212
259
|
}) {
|
213
260
|
super();
|
214
261
|
this.hooks = Object.freeze({
|
215
|
-
/** @type {AsyncSeriesBailHook<[ResolveData],
|
262
|
+
/** @type {AsyncSeriesBailHook<[ResolveData], Module | false | void>} */
|
216
263
|
resolve: new AsyncSeriesBailHook(["resolveData"]),
|
217
264
|
/** @type {HookMap<AsyncSeriesBailHook<[ResourceDataWithData, ResolveData], true | void>>} */
|
218
265
|
resolveForScheme: new HookMap(
|
@@ -222,23 +269,31 @@ class NormalModuleFactory extends ModuleFactory {
|
|
222
269
|
resolveInScheme: new HookMap(
|
223
270
|
() => new AsyncSeriesBailHook(["resourceData", "resolveData"])
|
224
271
|
),
|
225
|
-
/** @type {AsyncSeriesBailHook<[ResolveData],
|
272
|
+
/** @type {AsyncSeriesBailHook<[ResolveData], Module | undefined>} */
|
226
273
|
factorize: new AsyncSeriesBailHook(["resolveData"]),
|
227
|
-
/** @type {AsyncSeriesBailHook<[ResolveData],
|
274
|
+
/** @type {AsyncSeriesBailHook<[ResolveData], false | void>} */
|
228
275
|
beforeResolve: new AsyncSeriesBailHook(["resolveData"]),
|
229
|
-
/** @type {AsyncSeriesBailHook<[ResolveData],
|
276
|
+
/** @type {AsyncSeriesBailHook<[ResolveData], false | void>} */
|
230
277
|
afterResolve: new AsyncSeriesBailHook(["resolveData"]),
|
231
|
-
/** @type {AsyncSeriesBailHook<[ResolveData["createData"], ResolveData],
|
278
|
+
/** @type {AsyncSeriesBailHook<[ResolveData["createData"], ResolveData], Module | void>} */
|
232
279
|
createModule: new AsyncSeriesBailHook(["createData", "resolveData"]),
|
233
|
-
/** @type {SyncWaterfallHook<[Module, ResolveData["createData"], ResolveData],
|
280
|
+
/** @type {SyncWaterfallHook<[Module, ResolveData["createData"], ResolveData], Module>} */
|
234
281
|
module: new SyncWaterfallHook(["module", "createData", "resolveData"]),
|
282
|
+
/** @type {HookMap<SyncBailHook<[ParserOptions], Parser>>} */
|
235
283
|
createParser: new HookMap(() => new SyncBailHook(["parserOptions"])),
|
284
|
+
/** @type {HookMap<SyncBailHook<[TODO, ParserOptions], void>>} */
|
236
285
|
parser: new HookMap(() => new SyncHook(["parser", "parserOptions"])),
|
286
|
+
/** @type {HookMap<SyncBailHook<[GeneratorOptions], Generator>>} */
|
237
287
|
createGenerator: new HookMap(
|
238
288
|
() => new SyncBailHook(["generatorOptions"])
|
239
289
|
),
|
290
|
+
/** @type {HookMap<SyncBailHook<[TODO, GeneratorOptions], void>>} */
|
240
291
|
generator: new HookMap(
|
241
292
|
() => new SyncHook(["generator", "generatorOptions"])
|
293
|
+
),
|
294
|
+
/** @type {HookMap<SyncBailHook<[TODO, ResolveData], Module>>} */
|
295
|
+
createModuleClass: new HookMap(
|
296
|
+
() => new SyncBailHook(["createData", "resolveData"])
|
242
297
|
)
|
243
298
|
});
|
244
299
|
this.resolverFactory = resolverFactory;
|
@@ -254,9 +309,9 @@ class NormalModuleFactory extends ModuleFactory {
|
|
254
309
|
this.fs = fs;
|
255
310
|
this._globalParserOptions = options.parser;
|
256
311
|
this._globalGeneratorOptions = options.generator;
|
257
|
-
/** @type {Map<string, WeakMap<
|
312
|
+
/** @type {Map<string, WeakMap<object, Parser>>} */
|
258
313
|
this.parserCache = new Map();
|
259
|
-
/** @type {Map<string, WeakMap<
|
314
|
+
/** @type {Map<string, WeakMap<object, Generator>>} */
|
260
315
|
this.generatorCache = new Map();
|
261
316
|
/** @type {Set<Module>} */
|
262
317
|
this._restoredUnsafeCacheEntries = new Set();
|
@@ -264,6 +319,9 @@ class NormalModuleFactory extends ModuleFactory {
|
|
264
319
|
const cacheParseResource = parseResource.bindCache(
|
265
320
|
associatedObjectForCache
|
266
321
|
);
|
322
|
+
const cachedParseResourceWithoutFragment =
|
323
|
+
parseResourceWithoutFragment.bindCache(associatedObjectForCache);
|
324
|
+
this._parseResourceWithoutFragment = cachedParseResourceWithoutFragment;
|
267
325
|
|
268
326
|
this.hooks.factorize.tapAsync(
|
269
327
|
{
|
@@ -282,8 +340,10 @@ class NormalModuleFactory extends ModuleFactory {
|
|
282
340
|
|
283
341
|
if (typeof result === "object")
|
284
342
|
throw new Error(
|
285
|
-
deprecationChangedHookMessage(
|
286
|
-
"
|
343
|
+
`${deprecationChangedHookMessage(
|
344
|
+
"resolve",
|
345
|
+
this.hooks.resolve
|
346
|
+
)} Returning a Module object will result in this module used as result.`
|
287
347
|
);
|
288
348
|
|
289
349
|
this.hooks.afterResolve.callAsync(resolveData, (err, result) => {
|
@@ -311,7 +371,20 @@ class NormalModuleFactory extends ModuleFactory {
|
|
311
371
|
return callback(new Error("Empty dependency (no request)"));
|
312
372
|
}
|
313
373
|
|
314
|
-
|
374
|
+
// TODO webpack 6 make it required and move javascript/wasm/asset properties to own module
|
375
|
+
createdModule = this.hooks.createModuleClass
|
376
|
+
.for(
|
377
|
+
/** @type {ModuleSettings} */ (createData.settings).type
|
378
|
+
)
|
379
|
+
.call(createData, resolveData);
|
380
|
+
|
381
|
+
if (!createdModule) {
|
382
|
+
createdModule = /** @type {Module} */ (
|
383
|
+
new NormalModule(
|
384
|
+
/** @type {NormalModuleCreateData} */ (createData)
|
385
|
+
)
|
386
|
+
);
|
387
|
+
}
|
315
388
|
}
|
316
389
|
|
317
390
|
createdModule = this.hooks.module.call(
|
@@ -348,10 +421,10 @@ class NormalModuleFactory extends ModuleFactory {
|
|
348
421
|
const loaderResolver = this.getResolver("loader");
|
349
422
|
|
350
423
|
/** @type {ResourceData | undefined} */
|
351
|
-
let matchResourceData
|
424
|
+
let matchResourceData;
|
352
425
|
/** @type {string} */
|
353
426
|
let unresolvedResource;
|
354
|
-
/** @type {
|
427
|
+
/** @type {ParsedLoaderRequest[]} */
|
355
428
|
let elements;
|
356
429
|
let noPreAutoLoaders = false;
|
357
430
|
let noAutoLoaders = false;
|
@@ -382,7 +455,7 @@ class NormalModuleFactory extends ModuleFactory {
|
|
382
455
|
resource: matchResource,
|
383
456
|
...cacheParseResource(matchResource)
|
384
457
|
};
|
385
|
-
requestWithoutMatchResource = request.
|
458
|
+
requestWithoutMatchResource = request.slice(
|
386
459
|
matchResourceMatch[0].length
|
387
460
|
);
|
388
461
|
}
|
@@ -400,12 +473,18 @@ class NormalModuleFactory extends ModuleFactory {
|
|
400
473
|
noPreAutoLoaders || noPrePostAutoLoaders
|
401
474
|
? 2
|
402
475
|
: noAutoLoaders
|
403
|
-
|
404
|
-
|
476
|
+
? 1
|
477
|
+
: 0
|
405
478
|
)
|
406
479
|
.split(/!+/);
|
407
|
-
unresolvedResource = rawElements.pop();
|
408
|
-
elements = rawElements.map(
|
480
|
+
unresolvedResource = /** @type {string} */ (rawElements.pop());
|
481
|
+
elements = rawElements.map(el => {
|
482
|
+
const { path, query } = cachedParseResourceWithoutFragment(el);
|
483
|
+
return {
|
484
|
+
loader: path,
|
485
|
+
options: query ? query.slice(1) : undefined
|
486
|
+
};
|
487
|
+
});
|
409
488
|
scheme = getScheme(unresolvedResource);
|
410
489
|
} else {
|
411
490
|
unresolvedResource = requestWithoutMatchResource;
|
@@ -416,6 +495,7 @@ class NormalModuleFactory extends ModuleFactory {
|
|
416
495
|
elements = EMPTY_ELEMENTS;
|
417
496
|
}
|
418
497
|
|
498
|
+
/** @type {ResolveContext} */
|
419
499
|
const resolveContext = {
|
420
500
|
fileDependencies,
|
421
501
|
missingDependencies,
|
@@ -425,6 +505,7 @@ class NormalModuleFactory extends ModuleFactory {
|
|
425
505
|
/** @type {ResourceDataWithData} */
|
426
506
|
let resourceData;
|
427
507
|
|
508
|
+
/** @type {undefined | LoaderItem[]} */
|
428
509
|
let loaders;
|
429
510
|
|
430
511
|
const continueCallback = needCalls(2, err => {
|
@@ -432,9 +513,9 @@ class NormalModuleFactory extends ModuleFactory {
|
|
432
513
|
|
433
514
|
// translate option idents
|
434
515
|
try {
|
435
|
-
for (const item of loaders) {
|
516
|
+
for (const item of /** @type {LoaderItem[]} */ (loaders)) {
|
436
517
|
if (typeof item.options === "string" && item.options[0] === "?") {
|
437
|
-
const ident = item.options.
|
518
|
+
const ident = item.options.slice(1);
|
438
519
|
if (ident === "[[missing ident]]") {
|
439
520
|
throw new Error(
|
440
521
|
"No ident is provided by referenced loader. " +
|
@@ -451,8 +532,8 @@ class NormalModuleFactory extends ModuleFactory {
|
|
451
532
|
item.ident = ident;
|
452
533
|
}
|
453
534
|
}
|
454
|
-
} catch (
|
455
|
-
return callback(
|
535
|
+
} catch (identErr) {
|
536
|
+
return callback(/** @type {Error} */ (identErr));
|
456
537
|
}
|
457
538
|
|
458
539
|
if (!resourceData) {
|
@@ -464,8 +545,12 @@ class NormalModuleFactory extends ModuleFactory {
|
|
464
545
|
(matchResourceData !== undefined
|
465
546
|
? `${matchResourceData.resource}!=!`
|
466
547
|
: "") +
|
467
|
-
stringifyLoadersAndResource(
|
548
|
+
stringifyLoadersAndResource(
|
549
|
+
/** @type {LoaderItem[]} */ (loaders),
|
550
|
+
resourceData.resource
|
551
|
+
);
|
468
552
|
|
553
|
+
/** @type {ModuleSettings} */
|
469
554
|
const settings = {};
|
470
555
|
const useLoadersPost = [];
|
471
556
|
const useLoaders = [];
|
@@ -485,7 +570,7 @@ class NormalModuleFactory extends ModuleFactory {
|
|
485
570
|
-settings.type.length - 10
|
486
571
|
);
|
487
572
|
} else {
|
488
|
-
settings.type =
|
573
|
+
settings.type = JAVASCRIPT_MODULE_TYPE_AUTO;
|
489
574
|
const resourceDataForRules = matchResourceData || resourceData;
|
490
575
|
const result = this.ruleSet.exec({
|
491
576
|
resource: resourceDataForRules.path,
|
@@ -506,6 +591,11 @@ class NormalModuleFactory extends ModuleFactory {
|
|
506
591
|
issuerLayer: contextInfo.issuerLayer || ""
|
507
592
|
});
|
508
593
|
for (const r of result) {
|
594
|
+
// https://github.com/webpack/webpack/issues/16466
|
595
|
+
// if a request exists PrePostAutoLoaders, should disable modifying Rule.type
|
596
|
+
if (r.type === "type" && noPrePostAutoLoaders) {
|
597
|
+
continue;
|
598
|
+
}
|
509
599
|
if (r.type === "use") {
|
510
600
|
if (!noAutoLoaders && !noPrePostAutoLoaders) {
|
511
601
|
useLoaders.push(r.value);
|
@@ -521,32 +611,47 @@ class NormalModuleFactory extends ModuleFactory {
|
|
521
611
|
} else if (
|
522
612
|
typeof r.value === "object" &&
|
523
613
|
r.value !== null &&
|
524
|
-
typeof settings[
|
525
|
-
|
614
|
+
typeof settings[
|
615
|
+
/** @type {keyof ModuleSettings} */ (r.type)
|
616
|
+
] === "object" &&
|
617
|
+
settings[/** @type {keyof ModuleSettings} */ (r.type)] !== null
|
526
618
|
) {
|
527
|
-
settings[r.type] = cachedCleverMerge(
|
619
|
+
settings[r.type] = cachedCleverMerge(
|
620
|
+
settings[/** @type {keyof ModuleSettings} */ (r.type)],
|
621
|
+
r.value
|
622
|
+
);
|
528
623
|
} else {
|
529
624
|
settings[r.type] = r.value;
|
530
625
|
}
|
531
626
|
}
|
532
627
|
}
|
533
628
|
|
534
|
-
|
629
|
+
/** @type {undefined | LoaderItem[]} */
|
630
|
+
let postLoaders;
|
631
|
+
/** @type {undefined | LoaderItem[]} */
|
632
|
+
let normalLoaders;
|
633
|
+
/** @type {undefined | LoaderItem[]} */
|
634
|
+
let preLoaders;
|
535
635
|
|
536
636
|
const continueCallback = needCalls(3, err => {
|
537
637
|
if (err) {
|
538
638
|
return callback(err);
|
539
639
|
}
|
540
|
-
const allLoaders = postLoaders;
|
640
|
+
const allLoaders = /** @type {LoaderItem[]} */ (postLoaders);
|
541
641
|
if (matchResourceData === undefined) {
|
542
|
-
for (const loader of
|
543
|
-
|
642
|
+
for (const loader of /** @type {LoaderItem[]} */ (loaders))
|
643
|
+
allLoaders.push(loader);
|
644
|
+
for (const loader of /** @type {LoaderItem[]} */ (normalLoaders))
|
645
|
+
allLoaders.push(loader);
|
544
646
|
} else {
|
545
|
-
for (const loader of
|
546
|
-
|
647
|
+
for (const loader of /** @type {LoaderItem[]} */ (normalLoaders))
|
648
|
+
allLoaders.push(loader);
|
649
|
+
for (const loader of /** @type {LoaderItem[]} */ (loaders))
|
650
|
+
allLoaders.push(loader);
|
547
651
|
}
|
548
|
-
for (const loader of
|
549
|
-
|
652
|
+
for (const loader of /** @type {LoaderItem[]} */ (preLoaders))
|
653
|
+
allLoaders.push(loader);
|
654
|
+
const type = /** @type {string} */ (settings.type);
|
550
655
|
const resolveOptions = settings.resolve;
|
551
656
|
const layer = settings.layer;
|
552
657
|
if (layer !== undefined && !layers) {
|
@@ -582,8 +687,8 @@ class NormalModuleFactory extends ModuleFactory {
|
|
582
687
|
generatorOptions: settings.generator,
|
583
688
|
resolveOptions
|
584
689
|
});
|
585
|
-
} catch (
|
586
|
-
return callback(
|
690
|
+
} catch (createDataErr) {
|
691
|
+
return callback(/** @type {Error} */ (createDataErr));
|
587
692
|
}
|
588
693
|
callback();
|
589
694
|
});
|
@@ -625,7 +730,7 @@ class NormalModuleFactory extends ModuleFactory {
|
|
625
730
|
this.resolveRequestArray(
|
626
731
|
contextInfo,
|
627
732
|
contextScheme ? this.context : context,
|
628
|
-
elements,
|
733
|
+
/** @type {LoaderItem[]} */ (elements),
|
629
734
|
loaderResolver,
|
630
735
|
resolveContext,
|
631
736
|
(err, result) => {
|
@@ -635,6 +740,9 @@ class NormalModuleFactory extends ModuleFactory {
|
|
635
740
|
}
|
636
741
|
);
|
637
742
|
|
743
|
+
/**
|
744
|
+
* @param {string} context context
|
745
|
+
*/
|
638
746
|
const defaultResolve = context => {
|
639
747
|
if (/^($|\?)/.test(unresolvedResource)) {
|
640
748
|
resourceData = {
|
@@ -654,7 +762,7 @@ class NormalModuleFactory extends ModuleFactory {
|
|
654
762
|
resolveOptions || EMPTY_RESOLVE_OPTIONS,
|
655
763
|
"dependencyType",
|
656
764
|
dependencyType
|
657
|
-
|
765
|
+
)
|
658
766
|
: resolveOptions
|
659
767
|
);
|
660
768
|
this.resolveResource(
|
@@ -663,12 +771,17 @@ class NormalModuleFactory extends ModuleFactory {
|
|
663
771
|
unresolvedResource,
|
664
772
|
normalResolver,
|
665
773
|
resolveContext,
|
666
|
-
(err,
|
774
|
+
(err, _resolvedResource, resolvedResourceResolveData) => {
|
667
775
|
if (err) return continueCallback(err);
|
668
|
-
if (
|
776
|
+
if (_resolvedResource !== false) {
|
777
|
+
const resolvedResource =
|
778
|
+
/** @type {string} */
|
779
|
+
(_resolvedResource);
|
669
780
|
resourceData = {
|
670
781
|
resource: resolvedResource,
|
671
|
-
data:
|
782
|
+
data:
|
783
|
+
/** @type {ResolveRequest} */
|
784
|
+
(resolvedResourceResolveData),
|
672
785
|
...cacheParseResource(resolvedResource)
|
673
786
|
};
|
674
787
|
}
|
@@ -731,7 +844,7 @@ class NormalModuleFactory extends ModuleFactory {
|
|
731
844
|
|
732
845
|
/**
|
733
846
|
* @param {ModuleFactoryCreateData} data data object
|
734
|
-
* @param {function(Error=, ModuleFactoryResult=): void} callback callback
|
847
|
+
* @param {function((Error | null)=, ModuleFactoryResult=): void} callback callback
|
735
848
|
* @returns {void}
|
736
849
|
*/
|
737
850
|
create(data, callback) {
|
@@ -813,6 +926,14 @@ class NormalModuleFactory extends ModuleFactory {
|
|
813
926
|
});
|
814
927
|
}
|
815
928
|
|
929
|
+
/**
|
930
|
+
* @param {ModuleFactoryCreateDataContextInfo} contextInfo context info
|
931
|
+
* @param {string} context context
|
932
|
+
* @param {string} unresolvedResource unresolved resource
|
933
|
+
* @param {ResolverWithOptions} resolver resolver
|
934
|
+
* @param {ResolveContext} resolveContext resolver context
|
935
|
+
* @param {(err: null | Error, res?: string | false, req?: ResolveRequest) => void} callback callback
|
936
|
+
*/
|
816
937
|
resolveResource(
|
817
938
|
contextInfo,
|
818
939
|
context,
|
@@ -838,10 +959,10 @@ class NormalModuleFactory extends ModuleFactory {
|
|
838
959
|
(err2, hints) => {
|
839
960
|
if (err2) {
|
840
961
|
err.message += `
|
841
|
-
|
962
|
+
A fatal error happened during resolving additional hints for this error: ${err2.message}`;
|
842
963
|
err.stack += `
|
843
964
|
|
844
|
-
|
965
|
+
A fatal error happened during resolving additional hints for this error:
|
845
966
|
${err2.stack}`;
|
846
967
|
return callback(err);
|
847
968
|
}
|
@@ -849,6 +970,25 @@ ${err2.stack}`;
|
|
849
970
|
err.message += `
|
850
971
|
${hints.join("\n\n")}`;
|
851
972
|
}
|
973
|
+
|
974
|
+
// Check if the extension is missing a leading dot (e.g. "js" instead of ".js")
|
975
|
+
let appendResolveExtensionsHint = false;
|
976
|
+
const specifiedExtensions = Array.from(
|
977
|
+
resolver.options.extensions
|
978
|
+
);
|
979
|
+
const expectedExtensions = specifiedExtensions.map(extension => {
|
980
|
+
if (LEADING_DOT_EXTENSION_REGEX.test(extension)) {
|
981
|
+
appendResolveExtensionsHint = true;
|
982
|
+
return `.${extension}`;
|
983
|
+
}
|
984
|
+
return extension;
|
985
|
+
});
|
986
|
+
if (appendResolveExtensionsHint) {
|
987
|
+
err.message += `\nDid you miss the leading dot in 'resolve.extensions'? Did you mean '${JSON.stringify(
|
988
|
+
expectedExtensions
|
989
|
+
)}' instead of '${JSON.stringify(specifiedExtensions)}'?`;
|
990
|
+
}
|
991
|
+
|
852
992
|
callback(err);
|
853
993
|
}
|
854
994
|
);
|
@@ -858,6 +998,16 @@ ${hints.join("\n\n")}`;
|
|
858
998
|
);
|
859
999
|
}
|
860
1000
|
|
1001
|
+
/**
|
1002
|
+
* @param {Error} error error
|
1003
|
+
* @param {ModuleFactoryCreateDataContextInfo} contextInfo context info
|
1004
|
+
* @param {string} context context
|
1005
|
+
* @param {string} unresolvedResource unresolved resource
|
1006
|
+
* @param {ResolverWithOptions} resolver resolver
|
1007
|
+
* @param {ResolveContext} resolveContext resolver context
|
1008
|
+
* @param {Callback<string[]>} callback callback
|
1009
|
+
* @private
|
1010
|
+
*/
|
861
1011
|
_resolveResourceErrorHints(
|
862
1012
|
error,
|
863
1013
|
contextInfo,
|
@@ -920,13 +1070,12 @@ Add the extension to the request.`
|
|
920
1070
|
/(\.[^.]+)(\?|$)/,
|
921
1071
|
"$2"
|
922
1072
|
);
|
923
|
-
|
924
|
-
|
925
|
-
|
926
|
-
hint = `Did you mean '${fixedRequest}'? Also note that '${match[1]}' is not in 'resolve.extensions' yet and need to be added for this to work?`;
|
927
|
-
}
|
1073
|
+
hint = resolver.options.extensions.has(match[1])
|
1074
|
+
? `Did you mean '${fixedRequest}'?`
|
1075
|
+
: `Did you mean '${fixedRequest}'? Also note that '${match[1]}' is not in 'resolve.extensions' yet and need to be added for this to work?`;
|
928
1076
|
} else {
|
929
|
-
hint =
|
1077
|
+
hint =
|
1078
|
+
"Did you mean to omit the extension or to remove 'resolve.enforceExtension'?";
|
930
1079
|
}
|
931
1080
|
return callback(
|
932
1081
|
null,
|
@@ -969,11 +1118,20 @@ If changing the source code is not an option there is also a resolve options cal
|
|
969
1118
|
],
|
970
1119
|
(err, hints) => {
|
971
1120
|
if (err) return callback(err);
|
972
|
-
callback(null, hints.filter(Boolean));
|
1121
|
+
callback(null, /** @type {string[]} */ (hints).filter(Boolean));
|
973
1122
|
}
|
974
1123
|
);
|
975
1124
|
}
|
976
1125
|
|
1126
|
+
/**
|
1127
|
+
* @param {ModuleFactoryCreateDataContextInfo} contextInfo context info
|
1128
|
+
* @param {string} context context
|
1129
|
+
* @param {LoaderItem[]} array array
|
1130
|
+
* @param {ResolverWithOptions} resolver resolver
|
1131
|
+
* @param {ResolveContext} resolveContext resolve context
|
1132
|
+
* @param {Callback<LoaderItem[]>} callback callback
|
1133
|
+
* @returns {void} result
|
1134
|
+
*/
|
977
1135
|
resolveRequestArray(
|
978
1136
|
contextInfo,
|
979
1137
|
context,
|
@@ -982,6 +1140,7 @@ If changing the source code is not an option there is also a resolve options cal
|
|
982
1140
|
resolveContext,
|
983
1141
|
callback
|
984
1142
|
) {
|
1143
|
+
// LoaderItem
|
985
1144
|
if (array.length === 0) return callback(null, array);
|
986
1145
|
asyncLib.map(
|
987
1146
|
array,
|
@@ -991,22 +1150,21 @@ If changing the source code is not an option there is also a resolve options cal
|
|
991
1150
|
context,
|
992
1151
|
item.loader,
|
993
1152
|
resolveContext,
|
994
|
-
(err, result) => {
|
1153
|
+
(err, result, resolveRequest) => {
|
995
1154
|
if (
|
996
1155
|
err &&
|
997
1156
|
/^[^/]*$/.test(item.loader) &&
|
998
|
-
|
1157
|
+
!item.loader.endsWith("-loader")
|
999
1158
|
) {
|
1000
1159
|
return resolver.resolve(
|
1001
1160
|
contextInfo,
|
1002
1161
|
context,
|
1003
|
-
item.loader
|
1162
|
+
`${item.loader}-loader`,
|
1004
1163
|
resolveContext,
|
1005
1164
|
err2 => {
|
1006
1165
|
if (!err2) {
|
1007
1166
|
err.message =
|
1008
|
-
err.message +
|
1009
|
-
"\n" +
|
1167
|
+
`${err.message}\n` +
|
1010
1168
|
"BREAKING CHANGE: It's no longer allowed to omit the '-loader' suffix when using loaders.\n" +
|
1011
1169
|
` You need to specify '${item.loader}-loader' instead of '${item.loader}',\n` +
|
1012
1170
|
" see https://webpack.js.org/migrate/3/#automatic-loader-module-name-extension-removed";
|
@@ -1017,23 +1175,47 @@ If changing the source code is not an option there is also a resolve options cal
|
|
1017
1175
|
}
|
1018
1176
|
if (err) return callback(err);
|
1019
1177
|
|
1020
|
-
const parsedResult =
|
1178
|
+
const parsedResult = this._parseResourceWithoutFragment(
|
1179
|
+
/** @type {string} */ (result)
|
1180
|
+
);
|
1181
|
+
|
1182
|
+
const type = /\.mjs$/i.test(parsedResult.path)
|
1183
|
+
? "module"
|
1184
|
+
: /\.cjs$/i.test(parsedResult.path)
|
1185
|
+
? "commonjs"
|
1186
|
+
: /** @type {ResolveRequest} */
|
1187
|
+
(resolveRequest).descriptionFileData === undefined
|
1188
|
+
? undefined
|
1189
|
+
: /** @type {ResolveRequest} */
|
1190
|
+
(resolveRequest).descriptionFileData.type;
|
1021
1191
|
const resolved = {
|
1022
|
-
loader: parsedResult.
|
1192
|
+
loader: parsedResult.path,
|
1193
|
+
type,
|
1023
1194
|
options:
|
1024
1195
|
item.options === undefined
|
1025
|
-
? parsedResult.
|
1196
|
+
? parsedResult.query
|
1197
|
+
? parsedResult.query.slice(1)
|
1198
|
+
: undefined
|
1026
1199
|
: item.options,
|
1027
|
-
ident:
|
1200
|
+
ident:
|
1201
|
+
item.options === undefined
|
1202
|
+
? undefined
|
1203
|
+
: /** @type {string} */ (item.ident)
|
1028
1204
|
};
|
1029
|
-
|
1205
|
+
|
1206
|
+
return callback(null, /** @type {LoaderItem} */ (resolved));
|
1030
1207
|
}
|
1031
1208
|
);
|
1032
1209
|
},
|
1033
|
-
callback
|
1210
|
+
/** @type {Callback<TODO>} */ (callback)
|
1034
1211
|
);
|
1035
1212
|
}
|
1036
1213
|
|
1214
|
+
/**
|
1215
|
+
* @param {string} type type
|
1216
|
+
* @param {ParserOptions} parserOptions parser options
|
1217
|
+
* @returns {Parser} parser
|
1218
|
+
*/
|
1037
1219
|
getParser(type, parserOptions = EMPTY_PARSER_OPTIONS) {
|
1038
1220
|
let cache = this.parserCache.get(type);
|
1039
1221
|
|
@@ -1054,7 +1236,7 @@ If changing the source code is not an option there is also a resolve options cal
|
|
1054
1236
|
|
1055
1237
|
/**
|
1056
1238
|
* @param {string} type type
|
1057
|
-
* @param {
|
1239
|
+
* @param {ParserOptions} parserOptions parser options
|
1058
1240
|
* @returns {Parser} parser
|
1059
1241
|
*/
|
1060
1242
|
createParser(type, parserOptions = {}) {
|
@@ -1071,6 +1253,11 @@ If changing the source code is not an option there is also a resolve options cal
|
|
1071
1253
|
return parser;
|
1072
1254
|
}
|
1073
1255
|
|
1256
|
+
/**
|
1257
|
+
* @param {string} type type of generator
|
1258
|
+
* @param {GeneratorOptions} generatorOptions generator options
|
1259
|
+
* @returns {Generator} generator
|
1260
|
+
*/
|
1074
1261
|
getGenerator(type, generatorOptions = EMPTY_GENERATOR_OPTIONS) {
|
1075
1262
|
let cache = this.generatorCache.get(type);
|
1076
1263
|
|
@@ -1089,6 +1276,11 @@ If changing the source code is not an option there is also a resolve options cal
|
|
1089
1276
|
return generator;
|
1090
1277
|
}
|
1091
1278
|
|
1279
|
+
/**
|
1280
|
+
* @param {string} type type of generator
|
1281
|
+
* @param {GeneratorOptions} generatorOptions generator options
|
1282
|
+
* @returns {Generator} generator
|
1283
|
+
*/
|
1092
1284
|
createGenerator(type, generatorOptions = {}) {
|
1093
1285
|
generatorOptions = mergeGlobalOptions(
|
1094
1286
|
this._globalGeneratorOptions,
|
@@ -1105,6 +1297,11 @@ If changing the source code is not an option there is also a resolve options cal
|
|
1105
1297
|
return generator;
|
1106
1298
|
}
|
1107
1299
|
|
1300
|
+
/**
|
1301
|
+
* @param {Parameters<ResolverFactory["get"]>[0]} type type of resolver
|
1302
|
+
* @param {Parameters<ResolverFactory["get"]>[1]=} resolveOptions options
|
1303
|
+
* @returns {ReturnType<ResolverFactory["get"]>} the resolver
|
1304
|
+
*/
|
1108
1305
|
getResolver(type, resolveOptions) {
|
1109
1306
|
return this.resolverFactory.get(type, resolveOptions);
|
1110
1307
|
}
|