webpack 5.76.1 → 5.88.2
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.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/README.md +10 -4
- package/bin/webpack.js +26 -2
- package/hot/dev-server.js +2 -1
- package/hot/lazy-compilation-node.js +10 -0
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +22 -0
- package/hot/only-dev-server.js +2 -1
- package/hot/poll.js +3 -0
- package/hot/signal.js +4 -0
- package/lib/APIPlugin.js +174 -116
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +1 -0
- package/lib/BannerPlugin.js +6 -1
- package/lib/CacheFacade.js +4 -0
- package/lib/CaseSensitiveModulesWarning.js +3 -1
- package/lib/Chunk.js +36 -18
- package/lib/ChunkGraph.js +4 -4
- package/lib/ChunkGroup.js +25 -10
- package/lib/CleanPlugin.js +30 -7
- package/lib/CodeGenerationResults.js +2 -2
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +17 -8
- package/lib/Compiler.js +18 -14
- package/lib/ConcatenationScope.js +2 -2
- package/lib/ConditionalInitFragment.js +11 -1
- package/lib/ConstPlugin.js +95 -47
- package/lib/ContextModule.js +20 -6
- package/lib/ContextModuleFactory.js +2 -1
- package/lib/ContextReplacementPlugin.js +13 -0
- package/lib/CssModule.js +169 -0
- package/lib/DefinePlugin.js +152 -86
- package/lib/DelegatedModule.js +22 -4
- package/lib/DelegatedModuleFactoryPlugin.js +6 -0
- package/lib/DependenciesBlock.js +17 -1
- package/lib/Dependency.js +19 -5
- package/lib/DependencyTemplates.js +1 -1
- package/lib/DllEntryPlugin.js +16 -1
- package/lib/DllModule.js +17 -2
- package/lib/DllModuleFactory.js +1 -1
- package/lib/DllReferencePlugin.js +13 -1
- package/lib/Entrypoint.js +1 -1
- package/lib/ErrorHelpers.js +62 -22
- package/lib/EvalSourceMapDevToolPlugin.js +9 -2
- package/lib/ExportsInfo.js +25 -4
- package/lib/ExportsInfoApiPlugin.js +30 -14
- package/lib/ExternalModule.js +30 -9
- package/lib/FileSystemInfo.js +61 -25
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +336 -348
- package/lib/FlagDependencyUsagePlugin.js +9 -9
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +7 -0
- package/lib/HookWebpackError.js +1 -1
- package/lib/HotModuleReplacementPlugin.js +60 -46
- package/lib/IgnoreErrorModuleFactory.js +1 -1
- package/lib/InitFragment.js +28 -5
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +22 -5
- package/lib/LoaderOptionsPlugin.js +12 -2
- package/lib/MainTemplate.js +2 -2
- package/lib/Module.js +44 -12
- package/lib/ModuleBuildError.js +9 -0
- package/lib/ModuleDependencyError.js +4 -2
- package/lib/ModuleDependencyWarning.js +4 -2
- package/lib/ModuleError.js +9 -0
- package/lib/ModuleFactory.js +1 -1
- package/lib/ModuleFilenameHelpers.js +114 -4
- package/lib/ModuleGraph.js +33 -23
- package/lib/ModuleGraphConnection.js +19 -6
- package/lib/ModuleInfoHeaderPlugin.js +9 -2
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +9 -0
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +2 -0
- package/lib/ModuleStoreError.js +2 -1
- package/lib/ModuleTypeConstants.js +169 -0
- package/lib/ModuleWarning.js +9 -0
- package/lib/MultiWatching.js +4 -0
- package/lib/NodeStuffPlugin.js +65 -35
- package/lib/NormalModule.js +12 -2
- package/lib/NormalModuleFactory.js +56 -8
- package/lib/NormalModuleReplacementPlugin.js +5 -3
- package/lib/NullFactory.js +1 -1
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +71 -15
- package/lib/ProvidePlugin.js +30 -14
- package/lib/RawModule.js +13 -2
- package/lib/RecordIdsPlugin.js +4 -4
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/RuntimeGlobals.js +5 -0
- package/lib/RuntimeModule.js +12 -11
- package/lib/RuntimePlugin.js +10 -3
- package/lib/RuntimeTemplate.js +29 -11
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +47 -11
- package/lib/Template.js +5 -3
- package/lib/UseStrictPlugin.js +29 -11
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +7 -0
- package/lib/WatchIgnorePlugin.js +4 -0
- package/lib/Watching.js +62 -25
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +41 -44
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +24 -9
- package/lib/asset/AssetModulesPlugin.js +28 -12
- package/lib/asset/AssetParser.js +15 -7
- package/lib/asset/AssetSourceParser.js +8 -3
- package/lib/asset/RawDataUrlModule.js +15 -4
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +37 -21
- package/lib/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
- package/lib/cache/PackFileCacheStrategy.js +59 -22
- package/lib/cache/ResolverCachePlugin.js +3 -0
- package/lib/config/browserslistTargetHandler.js +10 -10
- package/lib/config/defaults.js +306 -105
- package/lib/config/normalization.js +110 -71
- package/lib/config/target.js +37 -10
- package/lib/container/ContainerEntryModule.js +11 -1
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +3 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +12 -2
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/RemoteModule.js +11 -1
- package/lib/container/RemoteRuntimeModule.js +3 -2
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/css/CssExportsGenerator.js +9 -0
- package/lib/css/CssGenerator.js +5 -1
- package/lib/css/CssLoadingRuntimeModule.js +53 -22
- package/lib/css/CssModulesPlugin.js +253 -74
- package/lib/css/CssParser.js +697 -282
- package/lib/css/walkCssTokens.js +269 -138
- package/lib/debug/ProfilingPlugin.js +33 -12
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
- package/lib/dependencies/AMDPlugin.js +33 -20
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
- package/lib/dependencies/AMDRequireDependency.js +16 -1
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CachedConstDependency.js +14 -0
- package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
- package/lib/dependencies/CommonJsExportsDependency.js +16 -0
- package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
- package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
- package/lib/dependencies/CommonJsRequireDependency.js +7 -0
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
- package/lib/dependencies/ConstDependency.js +11 -2
- package/lib/dependencies/ContextDependency.js +15 -2
- package/lib/dependencies/ContextDependencyHelpers.js +3 -3
- package/lib/dependencies/ContextElementDependency.js +8 -0
- package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
- package/lib/dependencies/CriticalDependencyWarning.js +3 -0
- package/lib/dependencies/CssExportDependency.js +8 -0
- package/lib/dependencies/CssImportDependency.js +55 -3
- package/lib/dependencies/CssLocalIdentifierDependency.js +18 -1
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
- package/lib/dependencies/CssUrlDependency.js +46 -16
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +10 -6
- package/lib/dependencies/ExportsInfoDependency.js +25 -4
- package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
- package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
- package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +11 -5
- package/lib/dependencies/HarmonyImportDependency.js +10 -1
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
- package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -0
- package/lib/dependencies/ImportDependency.js +15 -4
- package/lib/dependencies/ImportEagerDependency.js +7 -4
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +103 -51
- package/lib/dependencies/ImportParserPlugin.js +83 -25
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +7 -4
- package/lib/dependencies/JsonExportsDependency.js +9 -1
- package/lib/dependencies/LocalModule.js +16 -0
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +18 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
- package/lib/dependencies/ModuleDependency.js +9 -1
- 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 +14 -2
- package/lib/dependencies/PureExpressionDependency.js +10 -1
- package/lib/dependencies/RequireContextDependency.js +6 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
- package/lib/dependencies/RequireContextPlugin.js +19 -6
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
- 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 +5 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +17 -0
- package/lib/dependencies/RequireResolveDependency.js +6 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +48 -21
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +13 -4
- package/lib/dependencies/URLPlugin.js +31 -18
- 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 +5 -0
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +105 -32
- package/lib/dependencies/getFunctionExpression.js +7 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
- package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +14 -5
- package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
- package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
- package/lib/ids/HashedModuleIdsPlugin.js +9 -2
- package/lib/ids/IdHelpers.js +6 -0
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +14 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -2
- package/lib/index.js +8 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +137 -11
- package/lib/javascript/ChunkHelpers.js +2 -2
- package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
- package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
- package/lib/javascript/JavascriptModulesPlugin.js +217 -198
- package/lib/javascript/JavascriptParser.js +941 -256
- package/lib/javascript/JavascriptParserHelpers.js +37 -15
- package/lib/javascript/StartupHelpers.js +2 -2
- package/lib/json/JsonData.js +26 -1
- package/lib/json/JsonGenerator.js +21 -7
- package/lib/json/JsonModulesPlugin.js +14 -5
- package/lib/json/JsonParser.js +27 -13
- package/lib/library/AbstractLibraryPlugin.js +4 -0
- package/lib/library/AmdLibraryPlugin.js +22 -6
- package/lib/library/AssignLibraryPlugin.js +19 -5
- package/lib/library/EnableLibraryPlugin.js +4 -0
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
- package/lib/library/ModuleLibraryPlugin.js +8 -4
- package/lib/library/SystemLibraryPlugin.js +2 -1
- package/lib/library/UmdLibraryPlugin.js +24 -2
- package/lib/logging/runtime.js +1 -1
- package/lib/logging/truncateArgs.js +4 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
- package/lib/node/NodeTargetPlugin.js +3 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +1 -1
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +8 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
- package/lib/optimize/ConcatenatedModule.js +8 -6
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
- package/lib/optimize/InnerGraph.js +5 -5
- package/lib/optimize/InnerGraphPlugin.js +57 -48
- package/lib/optimize/LimitChunkCountPlugin.js +29 -4
- package/lib/optimize/MangleExportsPlugin.js +1 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
- package/lib/optimize/RealContentHashPlugin.js +86 -30
- package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
- package/lib/optimize/RuntimeChunkPlugin.js +9 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
- package/lib/optimize/SplitChunksPlugin.js +71 -31
- package/lib/performance/SizeLimitsPlugin.js +7 -4
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
- package/lib/rules/BasicEffectRulePlugin.js +4 -0
- package/lib/rules/BasicMatcherRulePlugin.js +5 -0
- package/lib/rules/RuleSetCompiler.js +3 -3
- package/lib/rules/UseEffectRulePlugin.js +6 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
- package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
- package/lib/runtime/BaseUriRuntimeModule.js +8 -4
- 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 +5 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +1 -1
- 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 +13 -4
- package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +38 -0
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +164 -1
- package/lib/serialization/DateObjectSerializer.js +15 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -8
- package/lib/serialization/FileMiddleware.js +17 -0
- package/lib/serialization/MapObjectSerializer.js +24 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
- package/lib/serialization/ObjectMiddleware.js +33 -2
- package/lib/serialization/PlainObjectSerializer.js +23 -12
- package/lib/serialization/RegExpObjectSerializer.js +16 -5
- package/lib/serialization/SetObjectSerializer.js +21 -6
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +13 -2
- package/lib/sharing/ConsumeSharedPlugin.js +4 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +11 -1
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +22 -21
- package/lib/sharing/ShareRuntimeModule.js +19 -9
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/sharing/utils.js +320 -7
- package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
- package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
- package/lib/util/AsyncQueue.js +4 -2
- package/lib/util/LazySet.js +10 -2
- package/lib/util/MapHelpers.js +19 -5
- package/lib/util/ParallelismFactorCalculator.js +10 -0
- package/lib/util/Semaphore.js +1 -1
- package/lib/util/StackedCacheMap.js +7 -1
- package/lib/util/StringXor.js +51 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -1
- package/lib/util/binarySearchBounds.js +49 -0
- package/lib/util/compileBooleanMatcher.js +31 -0
- package/lib/util/createHash.js +35 -13
- package/lib/util/deprecation.js +18 -3
- package/lib/util/deterministicGrouping.js +50 -11
- package/lib/util/findGraphRoots.js +4 -2
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +4 -0
- package/lib/util/internalSerializables.js +1 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +3 -3
- package/lib/util/numberHash.js +75 -21
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +9 -54
- package/lib/util/propertyName.js +79 -0
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +84 -21
- package/lib/util/semver.js +2 -1
- package/lib/util/serialization.js +10 -0
- package/lib/util/smartGrouping.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
- package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +15 -4
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- 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 +26 -9
- package/lib/webpack.js +12 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
- package/module.d.ts +55 -37
- package/package.json +59 -56
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +133 -6
- 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/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
- package/schemas/plugins/css/CssParserOptions.json +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +1629 -683
@@ -6,15 +6,25 @@
|
|
6
6
|
"use strict";
|
7
7
|
|
8
8
|
const { pathToFileURL } = require("url");
|
9
|
+
const {
|
10
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
11
|
+
JAVASCRIPT_MODULE_TYPE_ESM
|
12
|
+
} = require("../ModuleTypeConstants");
|
9
13
|
const BasicEvaluatedExpression = require("../javascript/BasicEvaluatedExpression");
|
10
14
|
const { approve } = require("../javascript/JavascriptParserHelpers");
|
11
15
|
const InnerGraph = require("../optimize/InnerGraph");
|
12
16
|
const URLDependency = require("./URLDependency");
|
13
17
|
|
14
18
|
/** @typedef {import("estree").NewExpression} NewExpressionNode */
|
19
|
+
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
|
15
20
|
/** @typedef {import("../Compiler")} Compiler */
|
21
|
+
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
16
22
|
/** @typedef {import("../NormalModule")} NormalModule */
|
17
23
|
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
24
|
+
/** @typedef {import("../javascript/JavascriptParser")} Parser */
|
25
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
26
|
+
|
27
|
+
const PLUGIN_NAME = "URLPlugin";
|
18
28
|
|
19
29
|
class URLPlugin {
|
20
30
|
/**
|
@@ -22,7 +32,7 @@ class URLPlugin {
|
|
22
32
|
*/
|
23
33
|
apply(compiler) {
|
24
34
|
compiler.hooks.compilation.tap(
|
25
|
-
|
35
|
+
PLUGIN_NAME,
|
26
36
|
(compilation, { normalModuleFactory }) => {
|
27
37
|
compilation.dependencyFactories.set(URLDependency, normalModuleFactory);
|
28
38
|
compilation.dependencyTemplates.set(
|
@@ -37,9 +47,11 @@ class URLPlugin {
|
|
37
47
|
const getUrl = module => {
|
38
48
|
return pathToFileURL(module.resource);
|
39
49
|
};
|
50
|
+
|
40
51
|
/**
|
41
|
-
* @param {
|
42
|
-
* @param {
|
52
|
+
* @param {Parser} parser parser parser
|
53
|
+
* @param {JavascriptParserOptions} parserOptions parserOptions
|
54
|
+
* @returns {void}
|
43
55
|
*/
|
44
56
|
const parserCallback = (parser, parserOptions) => {
|
45
57
|
if (parserOptions.url === false) return;
|
@@ -71,24 +83,22 @@ class URLPlugin {
|
|
71
83
|
)
|
72
84
|
return;
|
73
85
|
|
74
|
-
|
75
|
-
|
76
|
-
return request;
|
86
|
+
return parser.evaluateExpression(arg1).asString();
|
77
87
|
};
|
78
88
|
|
79
|
-
parser.hooks.canRename.for("URL").tap(
|
89
|
+
parser.hooks.canRename.for("URL").tap(PLUGIN_NAME, approve);
|
80
90
|
parser.hooks.evaluateNewExpression
|
81
91
|
.for("URL")
|
82
|
-
.tap(
|
92
|
+
.tap(PLUGIN_NAME, expr => {
|
83
93
|
const request = getUrlRequest(expr);
|
84
94
|
if (!request) return;
|
85
95
|
const url = new URL(request, getUrl(parser.state.module));
|
86
96
|
|
87
97
|
return new BasicEvaluatedExpression()
|
88
98
|
.setString(url.toString())
|
89
|
-
.setRange(expr.range);
|
99
|
+
.setRange(/** @type {Range} */ (expr.range));
|
90
100
|
});
|
91
|
-
parser.hooks.new.for("URL").tap(
|
101
|
+
parser.hooks.new.for("URL").tap(PLUGIN_NAME, _expr => {
|
92
102
|
const expr = /** @type {NewExpressionNode} */ (_expr);
|
93
103
|
|
94
104
|
const request = getUrlRequest(expr);
|
@@ -98,16 +108,19 @@ class URLPlugin {
|
|
98
108
|
const [arg1, arg2] = expr.arguments;
|
99
109
|
const dep = new URLDependency(
|
100
110
|
request,
|
101
|
-
[
|
102
|
-
|
111
|
+
[
|
112
|
+
/** @type {Range} */ (arg1.range)[0],
|
113
|
+
/** @type {Range} */ (arg2.range)[1]
|
114
|
+
],
|
115
|
+
/** @type {Range} */ (expr.range),
|
103
116
|
relative
|
104
117
|
);
|
105
|
-
dep.loc = expr.loc;
|
118
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
106
119
|
parser.state.current.addDependency(dep);
|
107
120
|
InnerGraph.onUsage(parser.state, e => (dep.usedByExports = e));
|
108
121
|
return true;
|
109
122
|
});
|
110
|
-
parser.hooks.isPure.for("NewExpression").tap(
|
123
|
+
parser.hooks.isPure.for("NewExpression").tap(PLUGIN_NAME, _expr => {
|
111
124
|
const expr = /** @type {NewExpressionNode} */ (_expr);
|
112
125
|
const { callee } = expr;
|
113
126
|
if (callee.type !== "Identifier") return;
|
@@ -121,12 +134,12 @@ class URLPlugin {
|
|
121
134
|
};
|
122
135
|
|
123
136
|
normalModuleFactory.hooks.parser
|
124
|
-
.for(
|
125
|
-
.tap(
|
137
|
+
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
138
|
+
.tap(PLUGIN_NAME, parserCallback);
|
126
139
|
|
127
140
|
normalModuleFactory.hooks.parser
|
128
|
-
.for(
|
129
|
-
.tap(
|
141
|
+
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
142
|
+
.tap(PLUGIN_NAME, parserCallback);
|
130
143
|
}
|
131
144
|
);
|
132
145
|
}
|
@@ -11,8 +11,15 @@ const NullDependency = require("./NullDependency");
|
|
11
11
|
/** @typedef {import("webpack-sources").ReplaceSource} ReplaceSource */
|
12
12
|
/** @typedef {import("../Dependency")} Dependency */
|
13
13
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
14
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
15
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
16
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
14
17
|
|
15
18
|
class UnsupportedDependency extends NullDependency {
|
19
|
+
/**
|
20
|
+
* @param {string} request the request string
|
21
|
+
* @param {Range} range location in source code
|
22
|
+
*/
|
16
23
|
constructor(request, range) {
|
17
24
|
super();
|
18
25
|
|
@@ -20,6 +27,9 @@ class UnsupportedDependency extends NullDependency {
|
|
20
27
|
this.range = range;
|
21
28
|
}
|
22
29
|
|
30
|
+
/**
|
31
|
+
* @param {ObjectSerializerContext} context context
|
32
|
+
*/
|
23
33
|
serialize(context) {
|
24
34
|
const { write } = context;
|
25
35
|
|
@@ -29,6 +39,9 @@ class UnsupportedDependency extends NullDependency {
|
|
29
39
|
super.serialize(context);
|
30
40
|
}
|
31
41
|
|
42
|
+
/**
|
43
|
+
* @param {ObjectDeserializerContext} context context
|
44
|
+
*/
|
32
45
|
deserialize(context) {
|
33
46
|
const { read } = context;
|
34
47
|
|
@@ -12,9 +12,17 @@ const ModuleDependency = require("./ModuleDependency");
|
|
12
12
|
/** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
|
13
13
|
/** @typedef {import("../Dependency").TRANSITIVE} TRANSITIVE */
|
14
14
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
15
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
16
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
15
17
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
16
18
|
|
17
19
|
class WebAssemblyExportImportedDependency extends ModuleDependency {
|
20
|
+
/**
|
21
|
+
* @param {string} exportName export name
|
22
|
+
* @param {string} request request
|
23
|
+
* @param {string} name name
|
24
|
+
* @param {TODO} valueType value type
|
25
|
+
*/
|
18
26
|
constructor(exportName, request, name, valueType) {
|
19
27
|
super(request);
|
20
28
|
/** @type {string} */
|
@@ -50,6 +58,9 @@ class WebAssemblyExportImportedDependency extends ModuleDependency {
|
|
50
58
|
return "wasm";
|
51
59
|
}
|
52
60
|
|
61
|
+
/**
|
62
|
+
* @param {ObjectSerializerContext} context context
|
63
|
+
*/
|
53
64
|
serialize(context) {
|
54
65
|
const { write } = context;
|
55
66
|
|
@@ -60,6 +71,9 @@ class WebAssemblyExportImportedDependency extends ModuleDependency {
|
|
60
71
|
super.serialize(context);
|
61
72
|
}
|
62
73
|
|
74
|
+
/**
|
75
|
+
* @param {ObjectDeserializerContext} context context
|
76
|
+
*/
|
63
77
|
deserialize(context) {
|
64
78
|
const { read } = context;
|
65
79
|
|
@@ -13,6 +13,8 @@ const ModuleDependency = require("./ModuleDependency");
|
|
13
13
|
/** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
|
14
14
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
15
15
|
/** @typedef {import("../WebpackError")} WebpackError */
|
16
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
17
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
16
18
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
17
19
|
|
18
20
|
class WebAssemblyImportDependency extends ModuleDependency {
|
@@ -53,7 +55,7 @@ class WebAssemblyImportDependency extends ModuleDependency {
|
|
53
55
|
/**
|
54
56
|
* Returns errors
|
55
57
|
* @param {ModuleGraph} moduleGraph module graph
|
56
|
-
* @returns {WebpackError[]} errors
|
58
|
+
* @returns {WebpackError[] | null | undefined} errors
|
57
59
|
*/
|
58
60
|
getErrors(moduleGraph) {
|
59
61
|
const module = moduleGraph.getModule(this);
|
@@ -71,6 +73,9 @@ class WebAssemblyImportDependency extends ModuleDependency {
|
|
71
73
|
}
|
72
74
|
}
|
73
75
|
|
76
|
+
/**
|
77
|
+
* @param {ObjectSerializerContext} context context
|
78
|
+
*/
|
74
79
|
serialize(context) {
|
75
80
|
const { write } = context;
|
76
81
|
|
@@ -81,6 +86,9 @@ class WebAssemblyImportDependency extends ModuleDependency {
|
|
81
86
|
super.serialize(context);
|
82
87
|
}
|
83
88
|
|
89
|
+
/**
|
90
|
+
* @param {ObjectDeserializerContext} context context
|
91
|
+
*/
|
84
92
|
deserialize(context) {
|
85
93
|
const { read } = context;
|
86
94
|
|
@@ -15,9 +15,14 @@ const ModuleDependency = require("./ModuleDependency");
|
|
15
15
|
/** @typedef {import("../Dependency").ReferencedExport} ReferencedExport */
|
16
16
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
17
17
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
18
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
18
19
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
19
20
|
|
20
21
|
class WebpackIsIncludedDependency extends ModuleDependency {
|
22
|
+
/**
|
23
|
+
* @param {string} request the request string
|
24
|
+
* @param {Range} range location in source code
|
25
|
+
*/
|
21
26
|
constructor(request, range) {
|
22
27
|
super(request);
|
23
28
|
|
@@ -18,17 +18,26 @@ const ModuleDependency = require("./ModuleDependency");
|
|
18
18
|
/** @typedef {import("../DependencyTemplate").DependencyTemplateContext} DependencyTemplateContext */
|
19
19
|
/** @typedef {import("../Entrypoint")} Entrypoint */
|
20
20
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
21
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
22
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
23
|
+
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
21
24
|
/** @typedef {import("../util/Hash")} Hash */
|
22
25
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
23
26
|
|
24
27
|
class WorkerDependency extends ModuleDependency {
|
25
28
|
/**
|
26
29
|
* @param {string} request request
|
27
|
-
* @param {
|
30
|
+
* @param {Range} range range
|
31
|
+
* @param {Object} workerDependencyOptions options
|
32
|
+
* @param {string} workerDependencyOptions.publicPath public path for the worker
|
28
33
|
*/
|
29
|
-
constructor(request, range) {
|
34
|
+
constructor(request, range, workerDependencyOptions) {
|
30
35
|
super(request);
|
31
36
|
this.range = range;
|
37
|
+
// If options are updated, don't forget to update the hash and serialization functions
|
38
|
+
this.options = workerDependencyOptions;
|
39
|
+
/** Cache the hash */
|
40
|
+
this._hashUpdate = undefined;
|
32
41
|
}
|
33
42
|
|
34
43
|
/**
|
@@ -48,6 +57,37 @@ class WorkerDependency extends ModuleDependency {
|
|
48
57
|
get category() {
|
49
58
|
return "worker";
|
50
59
|
}
|
60
|
+
|
61
|
+
/**
|
62
|
+
* Update the hash
|
63
|
+
* @param {Hash} hash hash to be updated
|
64
|
+
* @param {UpdateHashContext} context context
|
65
|
+
* @returns {void}
|
66
|
+
*/
|
67
|
+
updateHash(hash, context) {
|
68
|
+
if (this._hashUpdate === undefined) {
|
69
|
+
this._hashUpdate = JSON.stringify(this.options);
|
70
|
+
}
|
71
|
+
hash.update(this._hashUpdate);
|
72
|
+
}
|
73
|
+
|
74
|
+
/**
|
75
|
+
* @param {ObjectSerializerContext} context context
|
76
|
+
*/
|
77
|
+
serialize(context) {
|
78
|
+
const { write } = context;
|
79
|
+
write(this.options);
|
80
|
+
super.serialize(context);
|
81
|
+
}
|
82
|
+
|
83
|
+
/**
|
84
|
+
* @param {ObjectDeserializerContext} context context
|
85
|
+
*/
|
86
|
+
deserialize(context) {
|
87
|
+
const { read } = context;
|
88
|
+
this.options = read();
|
89
|
+
super.deserialize(context);
|
90
|
+
}
|
51
91
|
}
|
52
92
|
|
53
93
|
WorkerDependency.Template = class WorkerDependencyTemplate extends (
|
@@ -69,6 +109,10 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
|
|
69
109
|
chunkGraph.getBlockChunkGroup(block)
|
70
110
|
);
|
71
111
|
const chunk = entrypoint.getEntrypointChunk();
|
112
|
+
// We use the workerPublicPath option if provided, else we fallback to the RuntimeGlobal publicPath
|
113
|
+
const workerImportBaseUrl = dep.options.publicPath
|
114
|
+
? `"${dep.options.publicPath}"`
|
115
|
+
: RuntimeGlobals.publicPath;
|
72
116
|
|
73
117
|
runtimeRequirements.add(RuntimeGlobals.publicPath);
|
74
118
|
runtimeRequirements.add(RuntimeGlobals.baseURI);
|
@@ -77,7 +121,7 @@ WorkerDependency.Template = class WorkerDependencyTemplate extends (
|
|
77
121
|
source.replace(
|
78
122
|
dep.range[0],
|
79
123
|
dep.range[1] - 1,
|
80
|
-
`/* worker import */ ${
|
124
|
+
`/* worker import */ ${workerImportBaseUrl} + ${
|
81
125
|
RuntimeGlobals.getChunkScriptFilename
|
82
126
|
}(${JSON.stringify(chunk.id)}), ${RuntimeGlobals.baseURI}`
|
83
127
|
);
|
@@ -8,6 +8,10 @@
|
|
8
8
|
const { pathToFileURL } = require("url");
|
9
9
|
const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
|
10
10
|
const CommentCompilationWarning = require("../CommentCompilationWarning");
|
11
|
+
const {
|
12
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
13
|
+
JAVASCRIPT_MODULE_TYPE_ESM
|
14
|
+
} = require("../ModuleTypeConstants");
|
11
15
|
const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
|
12
16
|
const EnableChunkLoadingPlugin = require("../javascript/EnableChunkLoadingPlugin");
|
13
17
|
const { equals } = require("../util/ArrayHelpers");
|
@@ -21,22 +25,38 @@ const {
|
|
21
25
|
} = require("./HarmonyImportDependencyParserPlugin");
|
22
26
|
const WorkerDependency = require("./WorkerDependency");
|
23
27
|
|
28
|
+
/** @typedef {import("estree").CallExpression} CallExpression */
|
24
29
|
/** @typedef {import("estree").Expression} Expression */
|
25
30
|
/** @typedef {import("estree").ObjectExpression} ObjectExpression */
|
26
31
|
/** @typedef {import("estree").Pattern} Pattern */
|
27
32
|
/** @typedef {import("estree").Property} Property */
|
28
33
|
/** @typedef {import("estree").SpreadElement} SpreadElement */
|
34
|
+
/** @typedef {import("../../declarations/WebpackOptions").ChunkLoading} ChunkLoading */
|
35
|
+
/** @typedef {import("../../declarations/WebpackOptions").JavascriptParserOptions} JavascriptParserOptions */
|
36
|
+
/** @typedef {import("../../declarations/WebpackOptions").OutputModule} OutputModule */
|
37
|
+
/** @typedef {import("../../declarations/WebpackOptions").WasmLoading} WasmLoading */
|
38
|
+
/** @typedef {import("../../declarations/WebpackOptions").WorkerPublicPath} WorkerPublicPath */
|
29
39
|
/** @typedef {import("../Compiler")} Compiler */
|
40
|
+
/** @typedef {import("../Dependency").DependencyLocation} DependencyLocation */
|
30
41
|
/** @typedef {import("../Entrypoint").EntryOptions} EntryOptions */
|
42
|
+
/** @typedef {import("../NormalModule")} NormalModule */
|
31
43
|
/** @typedef {import("../Parser").ParserState} ParserState */
|
32
44
|
/** @typedef {import("../javascript/BasicEvaluatedExpression")} BasicEvaluatedExpression */
|
33
45
|
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
46
|
+
/** @typedef {import("../javascript/JavascriptParser")} Parser */
|
47
|
+
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
34
48
|
/** @typedef {import("./HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */
|
35
49
|
|
50
|
+
/**
|
51
|
+
* @param {NormalModule} module module
|
52
|
+
* @returns {string} url
|
53
|
+
*/
|
36
54
|
const getUrl = module => {
|
37
55
|
return pathToFileURL(module.resource).toString();
|
38
56
|
};
|
39
57
|
|
58
|
+
const WorkerSpecifierTag = Symbol("worker specifier tag");
|
59
|
+
|
40
60
|
const DEFAULT_SYNTAX = [
|
41
61
|
"Worker",
|
42
62
|
"SharedWorker",
|
@@ -47,11 +67,20 @@ const DEFAULT_SYNTAX = [
|
|
47
67
|
/** @type {WeakMap<ParserState, number>} */
|
48
68
|
const workerIndexMap = new WeakMap();
|
49
69
|
|
70
|
+
const PLUGIN_NAME = "WorkerPlugin";
|
71
|
+
|
50
72
|
class WorkerPlugin {
|
51
|
-
|
73
|
+
/**
|
74
|
+
* @param {ChunkLoading} chunkLoading chunk loading
|
75
|
+
* @param {WasmLoading} wasmLoading wasm loading
|
76
|
+
* @param {OutputModule} module output module
|
77
|
+
* @param {WorkerPublicPath} workerPublicPath worker public path
|
78
|
+
*/
|
79
|
+
constructor(chunkLoading, wasmLoading, module, workerPublicPath) {
|
52
80
|
this._chunkLoading = chunkLoading;
|
53
81
|
this._wasmLoading = wasmLoading;
|
54
82
|
this._module = module;
|
83
|
+
this._workerPublicPath = workerPublicPath;
|
55
84
|
}
|
56
85
|
/**
|
57
86
|
* Apply the plugin
|
@@ -70,7 +99,7 @@ class WorkerPlugin {
|
|
70
99
|
compiler.root
|
71
100
|
);
|
72
101
|
compiler.hooks.thisCompilation.tap(
|
73
|
-
|
102
|
+
PLUGIN_NAME,
|
74
103
|
(compilation, { normalModuleFactory }) => {
|
75
104
|
compilation.dependencyFactories.set(
|
76
105
|
WorkerDependency,
|
@@ -88,7 +117,7 @@ class WorkerPlugin {
|
|
88
117
|
/**
|
89
118
|
* @param {JavascriptParser} parser the parser
|
90
119
|
* @param {Expression} expr expression
|
91
|
-
* @returns {[BasicEvaluatedExpression, [number, number]]} parsed
|
120
|
+
* @returns {[BasicEvaluatedExpression, [number, number]] | void} parsed
|
92
121
|
*/
|
93
122
|
const parseModuleUrl = (parser, expr) => {
|
94
123
|
if (
|
@@ -105,13 +134,19 @@ class WorkerPlugin {
|
|
105
134
|
const arg2Value = parser.evaluateExpression(arg2);
|
106
135
|
if (
|
107
136
|
!arg2Value.isString() ||
|
108
|
-
!arg2Value.string.startsWith("file://") ||
|
137
|
+
!(/** @type {string} */ (arg2Value.string).startsWith("file://")) ||
|
109
138
|
arg2Value.string !== getUrl(parser.state.module)
|
110
139
|
) {
|
111
140
|
return;
|
112
141
|
}
|
113
142
|
const arg1Value = parser.evaluateExpression(arg1);
|
114
|
-
return [
|
143
|
+
return [
|
144
|
+
arg1Value,
|
145
|
+
[
|
146
|
+
/** @type {Range} */ (arg1.range)[0],
|
147
|
+
/** @type {Range} */ (arg2.range)[1]
|
148
|
+
]
|
149
|
+
];
|
115
150
|
};
|
116
151
|
|
117
152
|
/**
|
@@ -162,14 +197,19 @@ class WorkerPlugin {
|
|
162
197
|
};
|
163
198
|
|
164
199
|
/**
|
165
|
-
* @param {
|
166
|
-
* @param {
|
200
|
+
* @param {Parser} parser parser parser
|
201
|
+
* @param {JavascriptParserOptions} parserOptions parserOptions
|
202
|
+
* @returns {void}
|
167
203
|
*/
|
168
204
|
const parserPlugin = (parser, parserOptions) => {
|
169
205
|
if (parserOptions.worker === false) return;
|
170
206
|
const options = !Array.isArray(parserOptions.worker)
|
171
207
|
? ["..."]
|
172
208
|
: parserOptions.worker;
|
209
|
+
/**
|
210
|
+
* @param {CallExpression} expr expression
|
211
|
+
* @returns {boolean | void} true when handled
|
212
|
+
*/
|
173
213
|
const handleNewWorker = expr => {
|
174
214
|
if (expr.arguments.length === 0 || expr.arguments.length > 2)
|
175
215
|
return;
|
@@ -197,10 +237,12 @@ class WorkerPlugin {
|
|
197
237
|
values: {},
|
198
238
|
spread: false,
|
199
239
|
insertType: arg2 ? "spread" : "argument",
|
200
|
-
insertLocation: arg2
|
240
|
+
insertLocation: arg2
|
241
|
+
? /** @type {Range} */ (arg2.range)
|
242
|
+
: /** @type {Range} */ (arg1.range)[1]
|
201
243
|
};
|
202
244
|
const { options: importOptions, errors: commentErrors } =
|
203
|
-
parser.parseCommentOptions(expr.range);
|
245
|
+
parser.parseCommentOptions(/** @type {Range} */ (expr.range));
|
204
246
|
|
205
247
|
if (commentErrors) {
|
206
248
|
for (const e of commentErrors) {
|
@@ -223,7 +265,7 @@ class WorkerPlugin {
|
|
223
265
|
parser.state.module.addWarning(
|
224
266
|
new UnsupportedFeatureWarning(
|
225
267
|
`\`webpackIgnore\` expected a boolean, but received: ${importOptions.webpackIgnore}.`,
|
226
|
-
expr.loc
|
268
|
+
/** @type {DependencyLocation} */ (expr.loc)
|
227
269
|
)
|
228
270
|
);
|
229
271
|
} else {
|
@@ -240,7 +282,7 @@ class WorkerPlugin {
|
|
240
282
|
parser.state.module.addWarning(
|
241
283
|
new UnsupportedFeatureWarning(
|
242
284
|
`\`webpackEntryOptions\` expected a object, but received: ${importOptions.webpackEntryOptions}.`,
|
243
|
-
expr.loc
|
285
|
+
/** @type {DependencyLocation} */ (expr.loc)
|
244
286
|
)
|
245
287
|
);
|
246
288
|
} else {
|
@@ -255,7 +297,7 @@ class WorkerPlugin {
|
|
255
297
|
parser.state.module.addWarning(
|
256
298
|
new UnsupportedFeatureWarning(
|
257
299
|
`\`webpackChunkName\` expected a string, but received: ${importOptions.webpackChunkName}.`,
|
258
|
-
expr.loc
|
300
|
+
/** @type {DependencyLocation} */ (expr.loc)
|
259
301
|
)
|
260
302
|
);
|
261
303
|
} else {
|
@@ -298,16 +340,22 @@ class WorkerPlugin {
|
|
298
340
|
}
|
299
341
|
});
|
300
342
|
block.loc = expr.loc;
|
301
|
-
const dep = new WorkerDependency(
|
302
|
-
|
343
|
+
const dep = new WorkerDependency(
|
344
|
+
/** @type {string} */ (url.string),
|
345
|
+
range,
|
346
|
+
{
|
347
|
+
publicPath: this._workerPublicPath
|
348
|
+
}
|
349
|
+
);
|
350
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
303
351
|
block.addDependency(dep);
|
304
352
|
parser.state.module.addBlock(block);
|
305
353
|
|
306
354
|
if (compilation.outputOptions.trustedTypes) {
|
307
355
|
const dep = new CreateScriptUrlDependency(
|
308
|
-
expr.arguments[0].range
|
356
|
+
/** @type {Range} */ (expr.arguments[0].range)
|
309
357
|
);
|
310
|
-
dep.loc = expr.loc;
|
358
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
311
359
|
parser.state.module.addDependency(dep);
|
312
360
|
}
|
313
361
|
|
@@ -316,9 +364,9 @@ class WorkerPlugin {
|
|
316
364
|
if (options.type !== false) {
|
317
365
|
const dep = new ConstDependency(
|
318
366
|
this._module ? '"module"' : "undefined",
|
319
|
-
expr.range
|
367
|
+
/** @type {Range} */ (expr.range)
|
320
368
|
);
|
321
|
-
dep.loc = expr.loc;
|
369
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
322
370
|
parser.state.module.addPresentationalDependency(dep);
|
323
371
|
expressions.type = undefined;
|
324
372
|
}
|
@@ -328,20 +376,20 @@ class WorkerPlugin {
|
|
328
376
|
`, type: ${this._module ? '"module"' : "undefined"}`,
|
329
377
|
insertLocation
|
330
378
|
);
|
331
|
-
dep.loc = expr.loc;
|
379
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
332
380
|
parser.state.module.addPresentationalDependency(dep);
|
333
381
|
}
|
334
382
|
} else if (insertType === "spread") {
|
335
383
|
const dep1 = new ConstDependency(
|
336
384
|
"Object.assign({}, ",
|
337
|
-
insertLocation[0]
|
385
|
+
/** @type {Range} */ (insertLocation)[0]
|
338
386
|
);
|
339
387
|
const dep2 = new ConstDependency(
|
340
388
|
`, { type: ${this._module ? '"module"' : "undefined"} })`,
|
341
|
-
insertLocation[1]
|
389
|
+
/** @type {Range} */ (insertLocation)[1]
|
342
390
|
);
|
343
|
-
dep1.loc = expr.loc;
|
344
|
-
dep2.loc = expr.loc;
|
391
|
+
dep1.loc = /** @type {DependencyLocation} */ (expr.loc);
|
392
|
+
dep2.loc = /** @type {DependencyLocation} */ (expr.loc);
|
345
393
|
parser.state.module.addPresentationalDependency(dep1);
|
346
394
|
parser.state.module.addPresentationalDependency(dep2);
|
347
395
|
} else if (insertType === "argument") {
|
@@ -350,7 +398,7 @@ class WorkerPlugin {
|
|
350
398
|
', { type: "module" }',
|
351
399
|
insertLocation
|
352
400
|
);
|
353
|
-
dep.loc = expr.loc;
|
401
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
354
402
|
parser.state.module.addPresentationalDependency(dep);
|
355
403
|
}
|
356
404
|
}
|
@@ -368,11 +416,36 @@ class WorkerPlugin {
|
|
368
416
|
|
369
417
|
return true;
|
370
418
|
};
|
419
|
+
/**
|
420
|
+
* @param {string} item item
|
421
|
+
*/
|
371
422
|
const processItem = item => {
|
372
|
-
if (
|
423
|
+
if (
|
424
|
+
item.startsWith("*") &&
|
425
|
+
item.includes(".") &&
|
426
|
+
item.endsWith("()")
|
427
|
+
) {
|
428
|
+
const firstDot = item.indexOf(".");
|
429
|
+
const pattern = item.slice(1, firstDot);
|
430
|
+
const itemMembers = item.slice(firstDot + 1, -2);
|
431
|
+
|
432
|
+
parser.hooks.pattern.for(pattern).tap(PLUGIN_NAME, pattern => {
|
433
|
+
parser.tagVariable(pattern.name, WorkerSpecifierTag);
|
434
|
+
return true;
|
435
|
+
});
|
436
|
+
parser.hooks.callMemberChain
|
437
|
+
.for(WorkerSpecifierTag)
|
438
|
+
.tap(PLUGIN_NAME, (expression, members) => {
|
439
|
+
if (itemMembers !== members.join(".")) {
|
440
|
+
return;
|
441
|
+
}
|
442
|
+
|
443
|
+
return handleNewWorker(expression);
|
444
|
+
});
|
445
|
+
} else if (item.endsWith("()")) {
|
373
446
|
parser.hooks.call
|
374
447
|
.for(item.slice(0, -2))
|
375
|
-
.tap(
|
448
|
+
.tap(PLUGIN_NAME, handleNewWorker);
|
376
449
|
} else {
|
377
450
|
const match = /^(.+?)(\(\))?\s+from\s+(.+)$/.exec(item);
|
378
451
|
if (match) {
|
@@ -381,7 +454,7 @@ class WorkerPlugin {
|
|
381
454
|
const source = match[3];
|
382
455
|
(call ? parser.hooks.call : parser.hooks.new)
|
383
456
|
.for(harmonySpecifierTag)
|
384
|
-
.tap(
|
457
|
+
.tap(PLUGIN_NAME, expr => {
|
385
458
|
const settings = /** @type {HarmonySettings} */ (
|
386
459
|
parser.currentTagData
|
387
460
|
);
|
@@ -395,7 +468,7 @@ class WorkerPlugin {
|
|
395
468
|
return handleNewWorker(expr);
|
396
469
|
});
|
397
470
|
} else {
|
398
|
-
parser.hooks.new.for(item).tap(
|
471
|
+
parser.hooks.new.for(item).tap(PLUGIN_NAME, handleNewWorker);
|
399
472
|
}
|
400
473
|
}
|
401
474
|
};
|
@@ -406,11 +479,11 @@ class WorkerPlugin {
|
|
406
479
|
}
|
407
480
|
};
|
408
481
|
normalModuleFactory.hooks.parser
|
409
|
-
.for(
|
410
|
-
.tap(
|
482
|
+
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
483
|
+
.tap(PLUGIN_NAME, parserPlugin);
|
411
484
|
normalModuleFactory.hooks.parser
|
412
|
-
.for(
|
413
|
-
.tap(
|
485
|
+
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
486
|
+
.tap(PLUGIN_NAME, parserPlugin);
|
414
487
|
}
|
415
488
|
);
|
416
489
|
}
|
@@ -5,6 +5,13 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
/** @typedef {import("estree").Expression} Expression */
|
9
|
+
/** @typedef {import("estree").SpreadElement} SpreadElement */
|
10
|
+
|
11
|
+
/**
|
12
|
+
* @param {Expression} expr expressions
|
13
|
+
* @returns {{fn: TODO, expressions: (Expression | SpreadElement)[], needThis: boolean | undefined }} function expression with additional information
|
14
|
+
*/
|
8
15
|
module.exports = expr => {
|
9
16
|
// <FunctionExpression>
|
10
17
|
if (
|
@@ -4,6 +4,7 @@
|
|
4
4
|
|
5
5
|
"use strict";
|
6
6
|
|
7
|
+
const RuntimeGlobals = require("../RuntimeGlobals");
|
7
8
|
const RuntimeModule = require("../RuntimeModule");
|
8
9
|
|
9
10
|
class ExportWebpackRequireRuntimeModule extends RuntimeModule {
|
@@ -19,10 +20,10 @@ class ExportWebpackRequireRuntimeModule extends RuntimeModule {
|
|
19
20
|
}
|
20
21
|
|
21
22
|
/**
|
22
|
-
* @returns {string} runtime code
|
23
|
+
* @returns {string | null} runtime code
|
23
24
|
*/
|
24
25
|
generate() {
|
25
|
-
return
|
26
|
+
return `export default ${RuntimeGlobals.require};`;
|
26
27
|
}
|
27
28
|
}
|
28
29
|
|