webpack 5.76.1 → 5.88.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 +4 -0
- 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 +12 -8
- package/lib/ConcatenationScope.js +2 -2
- package/lib/ConditionalInitFragment.js +11 -1
- package/lib/ConstPlugin.js +79 -44
- 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/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 +20 -3
- package/lib/ExportsInfoApiPlugin.js +30 -14
- package/lib/ExternalModule.js +30 -9
- package/lib/FileSystemInfo.js +9 -1
- 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/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/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/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
- package/lib/cache/PackFileCacheStrategy.js +42 -15
- 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 +15 -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 +194 -194
- 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 +6 -4
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
- package/lib/library/ModuleLibraryPlugin.js +8 -4
- package/lib/library/SystemLibraryPlugin.js +1 -0
- package/lib/library/UmdLibraryPlugin.js +4 -0
- 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 +6 -0
- package/lib/util/StringXor.js +51 -0
- 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 +14 -1
- package/lib/util/semver.js +1 -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 +132 -5
- 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 +1608 -667
package/lib/util/runtime.js
CHANGED
@@ -434,7 +434,7 @@ class RuntimeSpecMap {
|
|
434
434
|
|
435
435
|
/**
|
436
436
|
* @param {RuntimeSpec} runtime the runtimes
|
437
|
-
* @returns {T} value
|
437
|
+
* @returns {T | undefined} value
|
438
438
|
*/
|
439
439
|
get(runtime) {
|
440
440
|
switch (this._mode) {
|
@@ -517,6 +517,9 @@ class RuntimeSpecMap {
|
|
517
517
|
}
|
518
518
|
}
|
519
519
|
|
520
|
+
/**
|
521
|
+
* @param {RuntimeSpec} runtime the runtimes
|
522
|
+
*/
|
520
523
|
delete(runtime) {
|
521
524
|
switch (this._mode) {
|
522
525
|
case 0:
|
@@ -593,6 +596,9 @@ class RuntimeSpecMap {
|
|
593
596
|
exports.RuntimeSpecMap = RuntimeSpecMap;
|
594
597
|
|
595
598
|
class RuntimeSpecSet {
|
599
|
+
/**
|
600
|
+
* @param {Iterable<RuntimeSpec>=} iterable iterable
|
601
|
+
*/
|
596
602
|
constructor(iterable) {
|
597
603
|
/** @type {Map<string, RuntimeSpec>} */
|
598
604
|
this._map = new Map();
|
@@ -603,10 +609,17 @@ class RuntimeSpecSet {
|
|
603
609
|
}
|
604
610
|
}
|
605
611
|
|
612
|
+
/**
|
613
|
+
* @param {RuntimeSpec} runtime runtime
|
614
|
+
*/
|
606
615
|
add(runtime) {
|
607
616
|
this._map.set(getRuntimeKey(runtime), runtime);
|
608
617
|
}
|
609
618
|
|
619
|
+
/**
|
620
|
+
* @param {RuntimeSpec} runtime runtime
|
621
|
+
* @returns {boolean} true, when the runtime exists
|
622
|
+
*/
|
610
623
|
has(runtime) {
|
611
624
|
return this._map.has(getRuntimeKey(runtime));
|
612
625
|
}
|
package/lib/util/semver.js
CHANGED
@@ -288,7 +288,7 @@ const satisfy = (range, version) => {
|
|
288
288
|
if (0 in range) {
|
289
289
|
// @ts-expect-error
|
290
290
|
version = parseVersion(version);
|
291
|
-
var fixCount = range[0];
|
291
|
+
var fixCount = /** @type {number} */ (range[0]);
|
292
292
|
// when negated is set it swill set for < instead of >=
|
293
293
|
var negated = fixCount < 0;
|
294
294
|
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 }) {
|
@@ -10,14 +10,23 @@ const Template = require("../Template");
|
|
10
10
|
const { compareModulesByIdentifier } = require("../util/comparators");
|
11
11
|
const WebAssemblyUtils = require("./WebAssemblyUtils");
|
12
12
|
|
13
|
+
/** @typedef {import("@webassemblyjs/ast").Signature} Signature */
|
14
|
+
/** @typedef {import("../Chunk")} Chunk */
|
13
15
|
/** @typedef {import("../ChunkGraph")} ChunkGraph */
|
14
16
|
/** @typedef {import("../Compilation")} Compilation */
|
15
17
|
/** @typedef {import("../Module")} Module */
|
18
|
+
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
16
19
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
17
20
|
|
18
21
|
// TODO webpack 6 remove the whole folder
|
19
22
|
|
20
23
|
// Get all wasm modules
|
24
|
+
/**
|
25
|
+
* @param {ModuleGraph} moduleGraph the module graph
|
26
|
+
* @param {ChunkGraph} chunkGraph the chunk graph
|
27
|
+
* @param {Chunk} chunk the chunk
|
28
|
+
* @returns {Module[]} all wasm modules
|
29
|
+
*/
|
21
30
|
const getAllWasmModules = (moduleGraph, chunkGraph, chunk) => {
|
22
31
|
const wasmModules = chunk.getAllAsyncChunks();
|
23
32
|
const array = [];
|
@@ -39,7 +48,7 @@ const getAllWasmModules = (moduleGraph, chunkGraph, chunk) => {
|
|
39
48
|
* generates the import object function for a module
|
40
49
|
* @param {ChunkGraph} chunkGraph the chunk graph
|
41
50
|
* @param {Module} module the module
|
42
|
-
* @param {boolean} mangle mangle imports
|
51
|
+
* @param {boolean | undefined} mangle mangle imports
|
43
52
|
* @param {string[]} declarations array where declarations are pushed to
|
44
53
|
* @param {RuntimeSpec} runtime the runtime
|
45
54
|
* @returns {string} source code
|
@@ -83,9 +92,11 @@ const generateImportObject = (
|
|
83
92
|
value: `${instanceVar}[${JSON.stringify(usedName)}]`
|
84
93
|
});
|
85
94
|
} else {
|
86
|
-
const params =
|
87
|
-
|
88
|
-
|
95
|
+
const params =
|
96
|
+
/** @type {Signature} */
|
97
|
+
(description.signature).params.map(
|
98
|
+
(param, k) => "p" + k + param.valtype
|
99
|
+
);
|
89
100
|
|
90
101
|
const mod = `${RuntimeGlobals.moduleCache}[${JSON.stringify(
|
91
102
|
chunkGraph.getModuleId(importedModule)
|
@@ -122,6 +133,7 @@ const generateImportObject = (
|
|
122
133
|
"};"
|
123
134
|
];
|
124
135
|
} else {
|
136
|
+
/** @type {Map<string, Array<{ name: string, value: string }>>} */
|
125
137
|
const propertiesByModule = new Map();
|
126
138
|
for (const p of properties) {
|
127
139
|
let list = propertiesByModule.get(p.module);
|
@@ -188,7 +200,18 @@ const generateImportObject = (
|
|
188
200
|
}
|
189
201
|
};
|
190
202
|
|
203
|
+
/**
|
204
|
+
* @typedef {Object} WasmChunkLoadingRuntimeModuleOptions
|
205
|
+
* @property {(path: string) => string} generateLoadBinaryCode
|
206
|
+
* @property {boolean} [supportsStreaming]
|
207
|
+
* @property {boolean} [mangleImports]
|
208
|
+
* @property {Set<string>} runtimeRequirements
|
209
|
+
*/
|
210
|
+
|
191
211
|
class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
212
|
+
/**
|
213
|
+
* @param {WasmChunkLoadingRuntimeModuleOptions} options options
|
214
|
+
*/
|
192
215
|
constructor({
|
193
216
|
generateLoadBinaryCode,
|
194
217
|
supportsStreaming,
|
@@ -203,22 +226,26 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
203
226
|
}
|
204
227
|
|
205
228
|
/**
|
206
|
-
* @returns {string} runtime code
|
229
|
+
* @returns {string | null} runtime code
|
207
230
|
*/
|
208
231
|
generate() {
|
209
|
-
const { chunkGraph, compilation, chunk, mangleImports } = this;
|
210
|
-
const { moduleGraph, outputOptions } = compilation;
|
211
232
|
const fn = RuntimeGlobals.ensureChunkHandlers;
|
212
233
|
const withHmr = this._runtimeRequirements.has(
|
213
234
|
RuntimeGlobals.hmrDownloadUpdateHandlers
|
214
235
|
);
|
236
|
+
const compilation = /** @type {Compilation} */ (this.compilation);
|
237
|
+
const { moduleGraph, outputOptions } = compilation;
|
238
|
+
const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
|
239
|
+
const chunk = /** @type {Chunk} */ (this.chunk);
|
215
240
|
const wasmModules = getAllWasmModules(moduleGraph, chunkGraph, chunk);
|
241
|
+
const { mangleImports } = this;
|
242
|
+
/** @type {string[]} */
|
216
243
|
const declarations = [];
|
217
244
|
const importObjects = wasmModules.map(module => {
|
218
245
|
return generateImportObject(
|
219
246
|
chunkGraph,
|
220
247
|
module,
|
221
|
-
|
248
|
+
mangleImports,
|
222
249
|
declarations,
|
223
250
|
chunk.runtime
|
224
251
|
);
|
@@ -226,6 +253,10 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
226
253
|
const chunkModuleIdMap = chunkGraph.getChunkModuleIdMap(chunk, m =>
|
227
254
|
m.type.startsWith("webassembly")
|
228
255
|
);
|
256
|
+
/**
|
257
|
+
* @param {string} content content
|
258
|
+
* @returns {string} created import object
|
259
|
+
*/
|
229
260
|
const createImportObject = content =>
|
230
261
|
mangleImports
|
231
262
|
? `{ ${JSON.stringify(WebAssemblyUtils.MANGLED_MODULE)}: ${content} }`
|
@@ -9,6 +9,9 @@ const formatLocation = require("../formatLocation");
|
|
9
9
|
const UnsupportedWebAssemblyFeatureError = require("./UnsupportedWebAssemblyFeatureError");
|
10
10
|
|
11
11
|
/** @typedef {import("../Compiler")} Compiler */
|
12
|
+
/** @typedef {import("../Dependency")} Dependency */
|
13
|
+
/** @typedef {import("../Module")} Module */
|
14
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
12
15
|
|
13
16
|
class WasmFinalizeExportsPlugin {
|
14
17
|
/**
|
@@ -25,7 +28,8 @@ class WasmFinalizeExportsPlugin {
|
|
25
28
|
// 1. if a WebAssembly module
|
26
29
|
if (module.type.startsWith("webassembly") === true) {
|
27
30
|
const jsIncompatibleExports =
|
28
|
-
|
31
|
+
/** @type {BuildMeta} */
|
32
|
+
(module.buildMeta).jsIncompatibleExports;
|
29
33
|
|
30
34
|
if (jsIncompatibleExports === undefined) {
|
31
35
|
continue;
|
@@ -37,12 +41,13 @@ class WasmFinalizeExportsPlugin {
|
|
37
41
|
// 2. is active and referenced by a non-WebAssembly module
|
38
42
|
if (
|
39
43
|
connection.isTargetActive(undefined) &&
|
40
|
-
|
44
|
+
/** @type {Module} */
|
45
|
+
(connection.originModule).type.startsWith("webassembly") ===
|
41
46
|
false
|
42
47
|
) {
|
43
48
|
const referencedExports =
|
44
49
|
compilation.getDependencyReferencedExports(
|
45
|
-
connection.dependency,
|
50
|
+
/** @type {Dependency} */ (connection.dependency),
|
46
51
|
undefined
|
47
52
|
);
|
48
53
|
|
@@ -61,9 +66,15 @@ class WasmFinalizeExportsPlugin {
|
|
61
66
|
// 4. error
|
62
67
|
const error = new UnsupportedWebAssemblyFeatureError(
|
63
68
|
`Export "${name}" with ${jsIncompatibleExports[name]} can only be used for direct wasm to wasm dependencies\n` +
|
64
|
-
`It's used from ${
|
65
|
-
|
66
|
-
|
69
|
+
`It's used from ${
|
70
|
+
/** @type {Module} */
|
71
|
+
(connection.originModule).readableIdentifier(
|
72
|
+
compilation.requestShortener
|
73
|
+
)
|
74
|
+
} at ${formatLocation(
|
75
|
+
/** @type {Dependency} */ (connection.dependency)
|
76
|
+
.loc
|
77
|
+
)}.`
|
67
78
|
);
|
68
79
|
error.module = module;
|
69
80
|
compilation.errors.push(error);
|
@@ -27,7 +27,7 @@ const WebAssemblyExportImportedDependency = require("../dependencies/WebAssembly
|
|
27
27
|
/** @typedef {import("./WebAssemblyUtils").UsedWasmDependency} UsedWasmDependency */
|
28
28
|
|
29
29
|
/**
|
30
|
-
* @typedef {(ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
|
30
|
+
* @typedef {(buf: ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
|
31
31
|
*/
|
32
32
|
|
33
33
|
/**
|
@@ -62,9 +62,10 @@ const removeStartFunc = state => bin => {
|
|
62
62
|
* Get imported globals
|
63
63
|
*
|
64
64
|
* @param {Object} ast Module's AST
|
65
|
-
* @returns {
|
65
|
+
* @returns {t.ModuleImport[]} - nodes
|
66
66
|
*/
|
67
67
|
const getImportedGlobals = ast => {
|
68
|
+
/** @type {t.ModuleImport[]} */
|
68
69
|
const importedGlobals = [];
|
69
70
|
|
70
71
|
t.traverse(ast, {
|
@@ -173,6 +174,7 @@ const createDefaultInitForGlobal = globalType => {
|
|
173
174
|
*/
|
174
175
|
const rewriteImportedGlobals = state => bin => {
|
175
176
|
const additionalInitCode = state.additionalInitCode;
|
177
|
+
/** @type {Array<t.Global>} */
|
176
178
|
const newGlobals = [];
|
177
179
|
|
178
180
|
bin = editWithAST(state.ast, bin, {
|
@@ -318,7 +320,10 @@ const addInitFunction =
|
|
318
320
|
`${importedGlobal.module}.${importedGlobal.name}`
|
319
321
|
);
|
320
322
|
|
321
|
-
return t.funcParam(
|
323
|
+
return t.funcParam(
|
324
|
+
/** @type {string} */ (importedGlobal.descr.valtype),
|
325
|
+
id
|
326
|
+
);
|
322
327
|
});
|
323
328
|
|
324
329
|
const funcBody = [];
|
@@ -344,6 +349,7 @@ const addInitFunction =
|
|
344
349
|
|
345
350
|
funcBody.push(t.instruction("end"));
|
346
351
|
|
352
|
+
/** @type {string[]} */
|
347
353
|
const funcResults = [];
|
348
354
|
|
349
355
|
// Code section
|
@@ -369,7 +375,7 @@ const addInitFunction =
|
|
369
375
|
* Extract mangle mappings from module
|
370
376
|
* @param {ModuleGraph} moduleGraph module graph
|
371
377
|
* @param {Module} module current module
|
372
|
-
* @param {boolean} mangle mangle imports
|
378
|
+
* @param {boolean | undefined} mangle mangle imports
|
373
379
|
* @returns {Map<string, UsedWasmDependency>} mappings to mangled names
|
374
380
|
*/
|
375
381
|
const getUsedDependencyMap = (moduleGraph, module, mangle) => {
|
@@ -390,7 +396,15 @@ const getUsedDependencyMap = (moduleGraph, module, mangle) => {
|
|
390
396
|
|
391
397
|
const TYPES = new Set(["webassembly"]);
|
392
398
|
|
399
|
+
/**
|
400
|
+
* @typedef {Object} WebAssemblyGeneratorOptions
|
401
|
+
* @property {boolean} [mangleImports] mangle imports
|
402
|
+
*/
|
403
|
+
|
393
404
|
class WebAssemblyGenerator extends Generator {
|
405
|
+
/**
|
406
|
+
* @param {WebAssemblyGeneratorOptions} options options
|
407
|
+
*/
|
394
408
|
constructor(options) {
|
395
409
|
super();
|
396
410
|
this.options = options;
|
@@ -423,7 +437,7 @@ class WebAssemblyGenerator extends Generator {
|
|
423
437
|
* @returns {Source} generated code
|
424
438
|
*/
|
425
439
|
generate(module, { moduleGraph, runtime }) {
|
426
|
-
const bin = module.originalSource().source();
|
440
|
+
const bin = /** @type {Source} */ (module.originalSource()).source();
|
427
441
|
|
428
442
|
const initFuncId = t.identifier("");
|
429
443
|
|
@@ -55,7 +55,7 @@ class WebAssemblyJavascriptGenerator extends Generator {
|
|
55
55
|
runtimeRequirements,
|
56
56
|
runtime
|
57
57
|
} = generateContext;
|
58
|
-
/** @type {InitFragment[]} */
|
58
|
+
/** @type {InitFragment<InitFragment<string>>[]} */
|
59
59
|
const initFragments = [];
|
60
60
|
|
61
61
|
const exportsInfo = moduleGraph.getExportsInfo(module);
|