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
package/lib/util/runtime.js
CHANGED
@@ -53,7 +53,7 @@ exports.getEntryRuntime = (compilation, name, options) => {
|
|
53
53
|
|
54
54
|
/**
|
55
55
|
* @param {RuntimeSpec} runtime runtime
|
56
|
-
* @param {function(string): void} fn functor
|
56
|
+
* @param {function(string | undefined): void} fn functor
|
57
57
|
* @param {boolean} deterministicOrder enforce a deterministic order
|
58
58
|
* @returns {void}
|
59
59
|
*/
|
@@ -70,6 +70,11 @@ exports.forEachRuntime = (runtime, fn, deterministicOrder = false) => {
|
|
70
70
|
}
|
71
71
|
};
|
72
72
|
|
73
|
+
/**
|
74
|
+
* @template T
|
75
|
+
* @param {SortableSet<T>} set set
|
76
|
+
* @returns {string} runtime key
|
77
|
+
*/
|
73
78
|
const getRuntimesKey = set => {
|
74
79
|
set.sort();
|
75
80
|
return Array.from(set).join("\n");
|
@@ -98,6 +103,11 @@ const keyToRuntime = key => {
|
|
98
103
|
};
|
99
104
|
exports.keyToRuntime = keyToRuntime;
|
100
105
|
|
106
|
+
/**
|
107
|
+
* @template T
|
108
|
+
* @param {SortableSet<T>} set set
|
109
|
+
* @returns {string} runtime string
|
110
|
+
*/
|
101
111
|
const getRuntimesString = set => {
|
102
112
|
set.sort();
|
103
113
|
return Array.from(set).join("+");
|
@@ -415,6 +425,11 @@ exports.filterRuntime = (runtime, filter) => {
|
|
415
425
|
return result;
|
416
426
|
};
|
417
427
|
|
428
|
+
/**
|
429
|
+
* @template T
|
430
|
+
* @typedef {Map<string, T>} RuntimeSpecMapInnerMap
|
431
|
+
* */
|
432
|
+
|
418
433
|
/**
|
419
434
|
* @template T
|
420
435
|
*/
|
@@ -426,15 +441,15 @@ class RuntimeSpecMap {
|
|
426
441
|
this._mode = clone ? clone._mode : 0; // 0 = empty, 1 = single entry, 2 = map
|
427
442
|
/** @type {RuntimeSpec} */
|
428
443
|
this._singleRuntime = clone ? clone._singleRuntime : undefined;
|
429
|
-
/** @type {T} */
|
444
|
+
/** @type {T | undefined} */
|
430
445
|
this._singleValue = clone ? clone._singleValue : undefined;
|
431
|
-
/** @type {
|
446
|
+
/** @type {RuntimeSpecMapInnerMap<T> | undefined} */
|
432
447
|
this._map = clone && clone._map ? new Map(clone._map) : undefined;
|
433
448
|
}
|
434
449
|
|
435
450
|
/**
|
436
451
|
* @param {RuntimeSpec} runtime the runtimes
|
437
|
-
* @returns {T} value
|
452
|
+
* @returns {T | undefined} value
|
438
453
|
*/
|
439
454
|
get(runtime) {
|
440
455
|
switch (this._mode) {
|
@@ -445,7 +460,9 @@ class RuntimeSpecMap {
|
|
445
460
|
? this._singleValue
|
446
461
|
: undefined;
|
447
462
|
default:
|
448
|
-
return this._map.get(
|
463
|
+
return /** @type {RuntimeSpecMapInnerMap<T>} */ (this._map).get(
|
464
|
+
getRuntimeKey(runtime)
|
465
|
+
);
|
449
466
|
}
|
450
467
|
}
|
451
468
|
|
@@ -460,10 +477,16 @@ class RuntimeSpecMap {
|
|
460
477
|
case 1:
|
461
478
|
return runtimeEqual(this._singleRuntime, runtime);
|
462
479
|
default:
|
463
|
-
return this._map.has(
|
480
|
+
return /** @type {RuntimeSpecMapInnerMap<T>} */ (this._map).has(
|
481
|
+
getRuntimeKey(runtime)
|
482
|
+
);
|
464
483
|
}
|
465
484
|
}
|
466
485
|
|
486
|
+
/**
|
487
|
+
* @param {RuntimeSpec} runtime the runtimes
|
488
|
+
* @param {T} value the value
|
489
|
+
*/
|
467
490
|
set(runtime, value) {
|
468
491
|
switch (this._mode) {
|
469
492
|
case 0:
|
@@ -478,15 +501,24 @@ class RuntimeSpecMap {
|
|
478
501
|
}
|
479
502
|
this._mode = 2;
|
480
503
|
this._map = new Map();
|
481
|
-
this._map.set(
|
504
|
+
this._map.set(
|
505
|
+
getRuntimeKey(this._singleRuntime),
|
506
|
+
/** @type {T} */ (this._singleValue)
|
507
|
+
);
|
482
508
|
this._singleRuntime = undefined;
|
483
509
|
this._singleValue = undefined;
|
484
510
|
/* falls through */
|
485
511
|
default:
|
486
|
-
|
512
|
+
/** @type {RuntimeSpecMapInnerMap<T>} */
|
513
|
+
(this._map).set(getRuntimeKey(runtime), value);
|
487
514
|
}
|
488
515
|
}
|
489
516
|
|
517
|
+
/**
|
518
|
+
* @param {RuntimeSpec} runtime the runtimes
|
519
|
+
* @param {() => TODO} computer function to compute the value
|
520
|
+
* @returns {TODO} true, when the runtime was deleted
|
521
|
+
*/
|
490
522
|
provide(runtime, computer) {
|
491
523
|
switch (this._mode) {
|
492
524
|
case 0:
|
@@ -495,11 +527,14 @@ class RuntimeSpecMap {
|
|
495
527
|
return (this._singleValue = computer());
|
496
528
|
case 1: {
|
497
529
|
if (runtimeEqual(this._singleRuntime, runtime)) {
|
498
|
-
return this._singleValue;
|
530
|
+
return /** @type {T} */ (this._singleValue);
|
499
531
|
}
|
500
532
|
this._mode = 2;
|
501
533
|
this._map = new Map();
|
502
|
-
this._map.set(
|
534
|
+
this._map.set(
|
535
|
+
getRuntimeKey(this._singleRuntime),
|
536
|
+
/** @type {T} */ (this._singleValue)
|
537
|
+
);
|
503
538
|
this._singleRuntime = undefined;
|
504
539
|
this._singleValue = undefined;
|
505
540
|
const newValue = computer();
|
@@ -508,15 +543,19 @@ class RuntimeSpecMap {
|
|
508
543
|
}
|
509
544
|
default: {
|
510
545
|
const key = getRuntimeKey(runtime);
|
511
|
-
const value = this._map.get(key);
|
546
|
+
const value = /** @type {Map<string, T>} */ (this._map).get(key);
|
512
547
|
if (value !== undefined) return value;
|
513
548
|
const newValue = computer();
|
514
|
-
|
549
|
+
/** @type {Map<string, T>} */
|
550
|
+
(this._map).set(key, newValue);
|
515
551
|
return newValue;
|
516
552
|
}
|
517
553
|
}
|
518
554
|
}
|
519
555
|
|
556
|
+
/**
|
557
|
+
* @param {RuntimeSpec} runtime the runtimes
|
558
|
+
*/
|
520
559
|
delete(runtime) {
|
521
560
|
switch (this._mode) {
|
522
561
|
case 0:
|
@@ -529,10 +568,15 @@ class RuntimeSpecMap {
|
|
529
568
|
}
|
530
569
|
return;
|
531
570
|
default:
|
532
|
-
|
571
|
+
/** @type {RuntimeSpecMapInnerMap<T>} */
|
572
|
+
(this._map).delete(getRuntimeKey(runtime));
|
533
573
|
}
|
534
574
|
}
|
535
575
|
|
576
|
+
/**
|
577
|
+
* @param {RuntimeSpec} runtime the runtimes
|
578
|
+
* @param {function(T | undefined): T} fn function to update the value
|
579
|
+
*/
|
536
580
|
update(runtime, fn) {
|
537
581
|
switch (this._mode) {
|
538
582
|
case 0:
|
@@ -546,7 +590,10 @@ class RuntimeSpecMap {
|
|
546
590
|
if (newValue !== undefined) {
|
547
591
|
this._mode = 2;
|
548
592
|
this._map = new Map();
|
549
|
-
this._map.set(
|
593
|
+
this._map.set(
|
594
|
+
getRuntimeKey(this._singleRuntime),
|
595
|
+
/** @type {T} */ (this._singleValue)
|
596
|
+
);
|
550
597
|
this._singleRuntime = undefined;
|
551
598
|
this._singleValue = undefined;
|
552
599
|
this._map.set(getRuntimeKey(runtime), newValue);
|
@@ -555,9 +602,11 @@ class RuntimeSpecMap {
|
|
555
602
|
}
|
556
603
|
default: {
|
557
604
|
const key = getRuntimeKey(runtime);
|
558
|
-
const oldValue = this._map.get(key);
|
605
|
+
const oldValue = /** @type {Map<string, T>} */ (this._map).get(key);
|
559
606
|
const newValue = fn(oldValue);
|
560
|
-
if (newValue !== oldValue)
|
607
|
+
if (newValue !== oldValue)
|
608
|
+
/** @type {RuntimeSpecMapInnerMap<T>} */
|
609
|
+
(this._map).set(key, newValue);
|
561
610
|
}
|
562
611
|
}
|
563
612
|
}
|
@@ -569,7 +618,11 @@ class RuntimeSpecMap {
|
|
569
618
|
case 1:
|
570
619
|
return [this._singleRuntime];
|
571
620
|
default:
|
572
|
-
return Array.from(
|
621
|
+
return Array.from(
|
622
|
+
/** @type {RuntimeSpecMapInnerMap<T>} */
|
623
|
+
(this._map).keys(),
|
624
|
+
keyToRuntime
|
625
|
+
);
|
573
626
|
}
|
574
627
|
}
|
575
628
|
|
@@ -578,21 +631,24 @@ class RuntimeSpecMap {
|
|
578
631
|
case 0:
|
579
632
|
return [][Symbol.iterator]();
|
580
633
|
case 1:
|
581
|
-
return [this._singleValue][Symbol.iterator]();
|
634
|
+
return [/** @type {T} */ (this._singleValue)][Symbol.iterator]();
|
582
635
|
default:
|
583
|
-
return this._map.values();
|
636
|
+
return /** @type {Map<string, T>} */ (this._map).values();
|
584
637
|
}
|
585
638
|
}
|
586
639
|
|
587
640
|
get size() {
|
588
|
-
if (this._mode <= 1) return this._mode;
|
589
|
-
return this._map.size;
|
641
|
+
if (/** @type {number} */ (this._mode) <= 1) return this._mode;
|
642
|
+
return /** @type {Map<string, T>} */ (this._map).size;
|
590
643
|
}
|
591
644
|
}
|
592
645
|
|
593
646
|
exports.RuntimeSpecMap = RuntimeSpecMap;
|
594
647
|
|
595
648
|
class RuntimeSpecSet {
|
649
|
+
/**
|
650
|
+
* @param {Iterable<RuntimeSpec>=} iterable iterable
|
651
|
+
*/
|
596
652
|
constructor(iterable) {
|
597
653
|
/** @type {Map<string, RuntimeSpec>} */
|
598
654
|
this._map = new Map();
|
@@ -603,10 +659,17 @@ class RuntimeSpecSet {
|
|
603
659
|
}
|
604
660
|
}
|
605
661
|
|
662
|
+
/**
|
663
|
+
* @param {RuntimeSpec} runtime runtime
|
664
|
+
*/
|
606
665
|
add(runtime) {
|
607
666
|
this._map.set(getRuntimeKey(runtime), runtime);
|
608
667
|
}
|
609
668
|
|
669
|
+
/**
|
670
|
+
* @param {RuntimeSpec} runtime runtime
|
671
|
+
* @returns {boolean} true, when the runtime exists
|
672
|
+
*/
|
610
673
|
has(runtime) {
|
611
674
|
return this._map.has(getRuntimeKey(runtime));
|
612
675
|
}
|
package/lib/util/semver.js
CHANGED
@@ -5,6 +5,7 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
8
9
|
/** @typedef {(string|number|undefined|[])[]} SemVerRange */
|
9
10
|
|
10
11
|
/**
|
@@ -288,7 +289,7 @@ const satisfy = (range, version) => {
|
|
288
289
|
if (0 in range) {
|
289
290
|
// @ts-expect-error
|
290
291
|
version = parseVersion(version);
|
291
|
-
var fixCount = range[0];
|
292
|
+
var fixCount = /** @type {number} */ (range[0]);
|
292
293
|
// when negated is set it swill set for < instead of >=
|
293
294
|
var negated = fixCount < 0;
|
294
295
|
if (negated) fixCount = -fixCount - 1;
|
@@ -11,6 +11,8 @@ const memoize = require("./memoize");
|
|
11
11
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
12
12
|
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
13
13
|
/** @typedef {import("../serialization/Serializer")} Serializer */
|
14
|
+
/** @typedef {typeof import("../util/Hash")} Hash */
|
15
|
+
/** @typedef {import("../util/fs").IntermediateFileSystem} IntermediateFileSystem */
|
14
16
|
|
15
17
|
const getBinaryMiddleware = memoize(() =>
|
16
18
|
require("../serialization/BinaryMiddleware")
|
@@ -72,6 +74,9 @@ module.exports = {
|
|
72
74
|
get MEASURE_END_OPERATION() {
|
73
75
|
return getBinaryMiddleware().MEASURE_END_OPERATION;
|
74
76
|
},
|
77
|
+
/**
|
78
|
+
* @returns {Serializer} buffer serializer
|
79
|
+
*/
|
75
80
|
get buffersSerializer() {
|
76
81
|
if (buffersSerializer !== undefined) return buffersSerializer;
|
77
82
|
registerSerializers();
|
@@ -93,6 +98,11 @@ module.exports = {
|
|
93
98
|
binaryMiddleware
|
94
99
|
]));
|
95
100
|
},
|
101
|
+
/**
|
102
|
+
* @param {IntermediateFileSystem} fs filesystem
|
103
|
+
* @param {string | Hash} hashFunction hash function to use
|
104
|
+
* @returns {Serializer} file serializer
|
105
|
+
*/
|
96
106
|
createFileSerializer: (fs, hashFunction) => {
|
97
107
|
registerSerializers();
|
98
108
|
const Serializer = getSerializer();
|
@@ -110,7 +110,7 @@ const smartGrouping = (items, groupConfigs) => {
|
|
110
110
|
/** @type {(T | R)[]} */
|
111
111
|
const results = [];
|
112
112
|
for (;;) {
|
113
|
-
/** @type {Group<T, R>} */
|
113
|
+
/** @type {Group<T, R> | undefined} */
|
114
114
|
let bestGroup = undefined;
|
115
115
|
let bestGroupSize = -1;
|
116
116
|
let bestGroupItems = undefined;
|
package/lib/validateSchema.js
CHANGED
@@ -119,7 +119,9 @@ const validateSchema = (schema, options, validationConfiguration) => {
|
|
119
119
|
)
|
120
120
|
) {
|
121
121
|
return `${formattedError}\nDid you mean ${
|
122
|
-
DID_YOU_MEAN[
|
122
|
+
DID_YOU_MEAN[
|
123
|
+
/** @type {keyof DID_YOU_MEAN} */ (params.additionalProperty)
|
124
|
+
]
|
123
125
|
}?`;
|
124
126
|
}
|
125
127
|
|
@@ -129,7 +131,9 @@ const validateSchema = (schema, options, validationConfiguration) => {
|
|
129
131
|
params.additionalProperty
|
130
132
|
)
|
131
133
|
) {
|
132
|
-
return `${formattedError}\n${
|
134
|
+
return `${formattedError}\n${
|
135
|
+
REMOVED[/** @type {keyof REMOVED} */ (params.additionalProperty)]
|
136
|
+
}?`;
|
133
137
|
}
|
134
138
|
|
135
139
|
if (!error.dataPath) {
|
@@ -12,6 +12,10 @@
|
|
12
12
|
/** @type {WeakMap<Compiler, Set<WasmLoadingType>>} */
|
13
13
|
const enabledTypes = new WeakMap();
|
14
14
|
|
15
|
+
/**
|
16
|
+
* @param {Compiler} compiler compiler instance
|
17
|
+
* @returns {Set<WasmLoadingType>} enabled types
|
18
|
+
*/
|
15
19
|
const getEnabledTypes = compiler => {
|
16
20
|
let set = enabledTypes.get(compiler);
|
17
21
|
if (set === undefined) {
|
@@ -9,7 +9,19 @@ const RuntimeGlobals = require("../RuntimeGlobals");
|
|
9
9
|
const RuntimeModule = require("../RuntimeModule");
|
10
10
|
const Template = require("../Template");
|
11
11
|
|
12
|
+
/** @typedef {import("../Chunk")} Chunk */
|
13
|
+
/** @typedef {import("../Compilation")} Compilation */
|
14
|
+
|
15
|
+
/**
|
16
|
+
* @typedef {Object} AsyncWasmLoadingRuntimeModuleOptions
|
17
|
+
* @property {function(string): string} generateLoadBinaryCode
|
18
|
+
* @property {boolean} supportsStreaming
|
19
|
+
*/
|
20
|
+
|
12
21
|
class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
|
22
|
+
/**
|
23
|
+
* @param {AsyncWasmLoadingRuntimeModuleOptions} options options
|
24
|
+
*/
|
13
25
|
constructor({ generateLoadBinaryCode, supportsStreaming }) {
|
14
26
|
super("wasm loading", RuntimeModule.STAGE_NORMAL);
|
15
27
|
this.generateLoadBinaryCode = generateLoadBinaryCode;
|
@@ -17,10 +29,11 @@ class AsyncWasmLoadingRuntimeModule extends RuntimeModule {
|
|
17
29
|
}
|
18
30
|
|
19
31
|
/**
|
20
|
-
* @returns {string} runtime code
|
32
|
+
* @returns {string | null} runtime code
|
21
33
|
*/
|
22
34
|
generate() {
|
23
|
-
const
|
35
|
+
const compilation = /** @type {Compilation} */ (this.compilation);
|
36
|
+
const chunk = /** @type {Chunk} */ (this.chunk);
|
24
37
|
const { outputOptions, runtimeTemplate } = compilation;
|
25
38
|
const fn = RuntimeGlobals.instantiateWasm;
|
26
39
|
const wasmModuleSrcPath = compilation.getPath(
|
@@ -13,7 +13,15 @@ const Generator = require("../Generator");
|
|
13
13
|
|
14
14
|
const TYPES = new Set(["webassembly"]);
|
15
15
|
|
16
|
+
/**
|
17
|
+
* @typedef {Object} AsyncWebAssemblyGeneratorOptions
|
18
|
+
* @property {boolean} [mangleImports] mangle imports
|
19
|
+
*/
|
20
|
+
|
16
21
|
class AsyncWebAssemblyGenerator extends Generator {
|
22
|
+
/**
|
23
|
+
* @param {AsyncWebAssemblyGeneratorOptions} options options
|
24
|
+
*/
|
17
25
|
constructor(options) {
|
18
26
|
super();
|
19
27
|
this.options = options;
|
@@ -46,7 +54,7 @@ class AsyncWebAssemblyGenerator extends Generator {
|
|
46
54
|
* @returns {Source} generated code
|
47
55
|
*/
|
48
56
|
generate(module, generateContext) {
|
49
|
-
return module.originalSource();
|
57
|
+
return /** @type {Source} */ (module.originalSource());
|
50
58
|
}
|
51
59
|
}
|
52
60
|
|
@@ -13,6 +13,7 @@ const Template = require("../Template");
|
|
13
13
|
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
|
14
14
|
|
15
15
|
/** @typedef {import("webpack-sources").Source} Source */
|
16
|
+
/** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
|
16
17
|
/** @typedef {import("../DependencyTemplates")} DependencyTemplates */
|
17
18
|
/** @typedef {import("../Generator").GenerateContext} GenerateContext */
|
18
19
|
/** @typedef {import("../Module")} Module */
|
@@ -21,7 +22,14 @@ const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDe
|
|
21
22
|
|
22
23
|
const TYPES = new Set(["webassembly"]);
|
23
24
|
|
25
|
+
/**
|
26
|
+
* @typedef {{ request: string, importVar: string }} ImportObjRequestItem
|
27
|
+
*/
|
28
|
+
|
24
29
|
class AsyncWebAssemblyJavascriptGenerator extends Generator {
|
30
|
+
/**
|
31
|
+
* @param {OutputOptions["webassemblyModuleFilename"]} filenameTemplate template for the WebAssembly module filename
|
32
|
+
*/
|
25
33
|
constructor(filenameTemplate) {
|
26
34
|
super();
|
27
35
|
this.filenameTemplate = filenameTemplate;
|
@@ -61,9 +69,9 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
|
|
61
69
|
runtimeRequirements.add(RuntimeGlobals.moduleId);
|
62
70
|
runtimeRequirements.add(RuntimeGlobals.exports);
|
63
71
|
runtimeRequirements.add(RuntimeGlobals.instantiateWasm);
|
64
|
-
/** @type {InitFragment[]} */
|
72
|
+
/** @type {InitFragment<InitFragment<string>>[]} */
|
65
73
|
const initFragments = [];
|
66
|
-
/** @type {Map<Module,
|
74
|
+
/** @type {Map<Module, ImportObjRequestItem>} */
|
67
75
|
const depModules = new Map();
|
68
76
|
/** @type {Map<string, WebAssemblyImportDependency[]>} */
|
69
77
|
const wasmDepsByRequest = new Map();
|
@@ -85,6 +93,7 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
|
|
85
93
|
}
|
86
94
|
}
|
87
95
|
|
96
|
+
/** @type {Array<string>} */
|
88
97
|
const promises = [];
|
89
98
|
|
90
99
|
const importStatements = Array.from(
|
@@ -112,7 +121,9 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
|
|
112
121
|
([request, deps]) => {
|
113
122
|
const exportItems = deps.map(dep => {
|
114
123
|
const importedModule = moduleGraph.getModule(dep);
|
115
|
-
const importVar =
|
124
|
+
const importVar =
|
125
|
+
/** @type {ImportObjRequestItem} */
|
126
|
+
(depModules.get(importedModule)).importVar;
|
116
127
|
return `${JSON.stringify(
|
117
128
|
dep.name
|
118
129
|
)}: ${runtimeTemplate.exportFromImport({
|
@@ -9,11 +9,13 @@ const { SyncWaterfallHook } = require("tapable");
|
|
9
9
|
const Compilation = require("../Compilation");
|
10
10
|
const Generator = require("../Generator");
|
11
11
|
const { tryRunOrWebpackError } = require("../HookWebpackError");
|
12
|
+
const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
|
12
13
|
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
|
13
14
|
const { compareModulesByIdentifier } = require("../util/comparators");
|
14
15
|
const memoize = require("../util/memoize");
|
15
16
|
|
16
17
|
/** @typedef {import("webpack-sources").Source} Source */
|
18
|
+
/** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
|
17
19
|
/** @typedef {import("../Chunk")} Chunk */
|
18
20
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
19
21
|
/** @typedef {import("../CodeGenerationResults")} CodeGenerationResults */
|
@@ -24,6 +26,7 @@ const memoize = require("../util/memoize");
|
|
24
26
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
25
27
|
/** @typedef {import("../Template").RenderManifestEntry} RenderManifestEntry */
|
26
28
|
/** @typedef {import("../Template").RenderManifestOptions} RenderManifestOptions */
|
29
|
+
/** @typedef {import("../WebpackError")} WebpackError */
|
27
30
|
|
28
31
|
const getAsyncWebAssemblyGenerator = memoize(() =>
|
29
32
|
require("./AsyncWebAssemblyGenerator")
|
@@ -50,9 +53,16 @@ const getAsyncWebAssemblyParser = memoize(() =>
|
|
50
53
|
* @property {SyncWaterfallHook<[Source, Module, WebAssemblyRenderContext]>} renderModuleContent
|
51
54
|
*/
|
52
55
|
|
56
|
+
/**
|
57
|
+
* @typedef {Object} AsyncWebAssemblyModulesPluginOptions
|
58
|
+
* @property {boolean} [mangleImports] mangle imports
|
59
|
+
*/
|
60
|
+
|
53
61
|
/** @type {WeakMap<Compilation, CompilationHooks>} */
|
54
62
|
const compilationHooksMap = new WeakMap();
|
55
63
|
|
64
|
+
const PLUGIN_NAME = "AsyncWebAssemblyModulesPlugin";
|
65
|
+
|
56
66
|
class AsyncWebAssemblyModulesPlugin {
|
57
67
|
/**
|
58
68
|
* @param {Compilation} compilation the compilation
|
@@ -78,6 +88,9 @@ class AsyncWebAssemblyModulesPlugin {
|
|
78
88
|
return hooks;
|
79
89
|
}
|
80
90
|
|
91
|
+
/**
|
92
|
+
* @param {AsyncWebAssemblyModulesPluginOptions} options options
|
93
|
+
*/
|
81
94
|
constructor(options) {
|
82
95
|
this.options = options;
|
83
96
|
}
|
@@ -89,7 +102,7 @@ class AsyncWebAssemblyModulesPlugin {
|
|
89
102
|
*/
|
90
103
|
apply(compiler) {
|
91
104
|
compiler.hooks.compilation.tap(
|
92
|
-
|
105
|
+
PLUGIN_NAME,
|
93
106
|
(compilation, { normalModuleFactory }) => {
|
94
107
|
const hooks =
|
95
108
|
AsyncWebAssemblyModulesPlugin.getCompilationHooks(compilation);
|
@@ -99,15 +112,15 @@ class AsyncWebAssemblyModulesPlugin {
|
|
99
112
|
);
|
100
113
|
|
101
114
|
normalModuleFactory.hooks.createParser
|
102
|
-
.for(
|
103
|
-
.tap(
|
115
|
+
.for(WEBASSEMBLY_MODULE_TYPE_ASYNC)
|
116
|
+
.tap(PLUGIN_NAME, () => {
|
104
117
|
const AsyncWebAssemblyParser = getAsyncWebAssemblyParser();
|
105
118
|
|
106
119
|
return new AsyncWebAssemblyParser();
|
107
120
|
});
|
108
121
|
normalModuleFactory.hooks.createGenerator
|
109
|
-
.for(
|
110
|
-
.tap(
|
122
|
+
.for(WEBASSEMBLY_MODULE_TYPE_ASYNC)
|
123
|
+
.tap(PLUGIN_NAME, () => {
|
111
124
|
const AsyncWebAssemblyJavascriptGenerator =
|
112
125
|
getAsyncWebAssemblyJavascriptGenerator();
|
113
126
|
const AsyncWebAssemblyGenerator = getAsyncWebAssemblyGenerator();
|
@@ -135,9 +148,10 @@ class AsyncWebAssemblyModulesPlugin {
|
|
135
148
|
chunk,
|
136
149
|
compareModulesByIdentifier
|
137
150
|
)) {
|
138
|
-
if (module.type ===
|
151
|
+
if (module.type === WEBASSEMBLY_MODULE_TYPE_ASYNC) {
|
139
152
|
const filenameTemplate =
|
140
|
-
|
153
|
+
/** @type {NonNullable<OutputOptions["webassemblyModuleFilename"]>} */
|
154
|
+
(outputOptions.webassemblyModuleFilename);
|
141
155
|
|
142
156
|
result.push({
|
143
157
|
render: () =>
|
@@ -175,6 +189,12 @@ class AsyncWebAssemblyModulesPlugin {
|
|
175
189
|
);
|
176
190
|
}
|
177
191
|
|
192
|
+
/**
|
193
|
+
* @param {Module} module the rendered module
|
194
|
+
* @param {WebAssemblyRenderContext} renderContext options object
|
195
|
+
* @param {CompilationHooks} hooks hooks
|
196
|
+
* @returns {Source} the newly generated source from rendering
|
197
|
+
*/
|
178
198
|
renderModule(module, renderContext, hooks) {
|
179
199
|
const { codeGenerationResults, chunk } = renderContext;
|
180
200
|
try {
|
@@ -189,7 +209,7 @@ class AsyncWebAssemblyModulesPlugin {
|
|
189
209
|
"AsyncWebAssemblyModulesPlugin.getCompilationHooks().renderModuleContent"
|
190
210
|
);
|
191
211
|
} catch (e) {
|
192
|
-
e.module = module;
|
212
|
+
/** @type {WebpackError} */ (e).module = module;
|
193
213
|
throw e;
|
194
214
|
}
|
195
215
|
}
|
@@ -11,6 +11,8 @@ const Parser = require("../Parser");
|
|
11
11
|
const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
|
12
12
|
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
|
13
13
|
|
14
|
+
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
15
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
14
16
|
/** @typedef {import("../Parser").ParserState} ParserState */
|
15
17
|
/** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
|
16
18
|
|
@@ -23,6 +25,9 @@ const decoderOpts = {
|
|
23
25
|
};
|
24
26
|
|
25
27
|
class WebAssemblyParser extends Parser {
|
28
|
+
/**
|
29
|
+
* @param {{}=} options parser options
|
30
|
+
*/
|
26
31
|
constructor(options) {
|
27
32
|
super();
|
28
33
|
this.hooks = Object.freeze({});
|
@@ -40,14 +45,16 @@ class WebAssemblyParser extends Parser {
|
|
40
45
|
}
|
41
46
|
|
42
47
|
// flag it as async module
|
43
|
-
state.module.buildInfo
|
44
|
-
|
45
|
-
state.module.buildMeta
|
48
|
+
const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo);
|
49
|
+
buildInfo.strict = true;
|
50
|
+
const BuildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
|
51
|
+
BuildMeta.exportsType = "namespace";
|
52
|
+
BuildMeta.async = true;
|
46
53
|
|
47
54
|
// parse it
|
48
55
|
const program = decode(source, decoderOpts);
|
49
56
|
const module = program.body[0];
|
50
|
-
|
57
|
+
/** @type {Array<string>} */
|
51
58
|
const exports = [];
|
52
59
|
t.traverse(module, {
|
53
60
|
ModuleExport({ node }) {
|