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
@@ -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);
|
@@ -6,6 +6,7 @@
|
|
6
6
|
"use strict";
|
7
7
|
|
8
8
|
const Generator = require("../Generator");
|
9
|
+
const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
|
9
10
|
const WebAssemblyExportImportedDependency = require("../dependencies/WebAssemblyExportImportedDependency");
|
10
11
|
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
|
11
12
|
const { compareModulesByIdentifier } = require("../util/comparators");
|
@@ -13,6 +14,7 @@ const memoize = require("../util/memoize");
|
|
13
14
|
const WebAssemblyInInitialChunkError = require("./WebAssemblyInInitialChunkError");
|
14
15
|
|
15
16
|
/** @typedef {import("webpack-sources").Source} Source */
|
17
|
+
/** @typedef {import("../../declarations/WebpackOptions").OutputNormalized} OutputOptions */
|
16
18
|
/** @typedef {import("../Compiler")} Compiler */
|
17
19
|
/** @typedef {import("../Module")} Module */
|
18
20
|
/** @typedef {import("../ModuleTemplate")} ModuleTemplate */
|
@@ -26,7 +28,17 @@ const getWebAssemblyJavascriptGenerator = memoize(() =>
|
|
26
28
|
);
|
27
29
|
const getWebAssemblyParser = memoize(() => require("./WebAssemblyParser"));
|
28
30
|
|
31
|
+
const PLUGIN_NAME = "WebAssemblyModulesPlugin";
|
32
|
+
|
33
|
+
/**
|
34
|
+
* @typedef {Object} WebAssemblyModulesPluginOptions
|
35
|
+
* @property {boolean} [mangleImports] mangle imports
|
36
|
+
*/
|
37
|
+
|
29
38
|
class WebAssemblyModulesPlugin {
|
39
|
+
/**
|
40
|
+
* @param {WebAssemblyModulesPluginOptions} options options
|
41
|
+
*/
|
30
42
|
constructor(options) {
|
31
43
|
this.options = options;
|
32
44
|
}
|
@@ -38,7 +50,7 @@ class WebAssemblyModulesPlugin {
|
|
38
50
|
*/
|
39
51
|
apply(compiler) {
|
40
52
|
compiler.hooks.compilation.tap(
|
41
|
-
|
53
|
+
PLUGIN_NAME,
|
42
54
|
(compilation, { normalModuleFactory }) => {
|
43
55
|
compilation.dependencyFactories.set(
|
44
56
|
WebAssemblyImportDependency,
|
@@ -51,16 +63,16 @@ class WebAssemblyModulesPlugin {
|
|
51
63
|
);
|
52
64
|
|
53
65
|
normalModuleFactory.hooks.createParser
|
54
|
-
.for(
|
55
|
-
.tap(
|
66
|
+
.for(WEBASSEMBLY_MODULE_TYPE_SYNC)
|
67
|
+
.tap(PLUGIN_NAME, () => {
|
56
68
|
const WebAssemblyParser = getWebAssemblyParser();
|
57
69
|
|
58
70
|
return new WebAssemblyParser();
|
59
71
|
});
|
60
72
|
|
61
73
|
normalModuleFactory.hooks.createGenerator
|
62
|
-
.for(
|
63
|
-
.tap(
|
74
|
+
.for(WEBASSEMBLY_MODULE_TYPE_SYNC)
|
75
|
+
.tap(PLUGIN_NAME, () => {
|
64
76
|
const WebAssemblyJavascriptGenerator =
|
65
77
|
getWebAssemblyJavascriptGenerator();
|
66
78
|
const WebAssemblyGenerator = getWebAssemblyGenerator();
|
@@ -71,53 +83,51 @@ class WebAssemblyModulesPlugin {
|
|
71
83
|
});
|
72
84
|
});
|
73
85
|
|
74
|
-
compilation.hooks.renderManifest.tap(
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
codeGenerationResults.getSource(
|
91
|
-
module,
|
92
|
-
chunk.runtime,
|
93
|
-
"webassembly"
|
94
|
-
),
|
95
|
-
filenameTemplate,
|
96
|
-
pathOptions: {
|
86
|
+
compilation.hooks.renderManifest.tap(PLUGIN_NAME, (result, options) => {
|
87
|
+
const { chunkGraph } = compilation;
|
88
|
+
const { chunk, outputOptions, codeGenerationResults } = options;
|
89
|
+
|
90
|
+
for (const module of chunkGraph.getOrderedChunkModulesIterable(
|
91
|
+
chunk,
|
92
|
+
compareModulesByIdentifier
|
93
|
+
)) {
|
94
|
+
if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
|
95
|
+
const filenameTemplate =
|
96
|
+
/** @type {NonNullable<OutputOptions["webassemblyModuleFilename"]>} */
|
97
|
+
(outputOptions.webassemblyModuleFilename);
|
98
|
+
|
99
|
+
result.push({
|
100
|
+
render: () =>
|
101
|
+
codeGenerationResults.getSource(
|
97
102
|
module,
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
}
|
107
|
-
|
103
|
+
chunk.runtime,
|
104
|
+
"webassembly"
|
105
|
+
),
|
106
|
+
filenameTemplate,
|
107
|
+
pathOptions: {
|
108
|
+
module,
|
109
|
+
runtime: chunk.runtime,
|
110
|
+
chunkGraph
|
111
|
+
},
|
112
|
+
auxiliary: true,
|
113
|
+
identifier: `webassemblyModule${chunkGraph.getModuleId(
|
114
|
+
module
|
115
|
+
)}`,
|
116
|
+
hash: chunkGraph.getModuleHash(module, chunk.runtime)
|
117
|
+
});
|
108
118
|
}
|
109
|
-
|
110
|
-
return result;
|
111
119
|
}
|
112
|
-
);
|
113
120
|
|
114
|
-
|
121
|
+
return result;
|
122
|
+
});
|
123
|
+
|
124
|
+
compilation.hooks.afterChunks.tap(PLUGIN_NAME, () => {
|
115
125
|
const chunkGraph = compilation.chunkGraph;
|
116
126
|
const initialWasmModules = new Set();
|
117
127
|
for (const chunk of compilation.chunks) {
|
118
128
|
if (chunk.canBeInitial()) {
|
119
129
|
for (const module of chunkGraph.getChunkModulesIterable(chunk)) {
|
120
|
-
if (module.type ===
|
130
|
+
if (module.type === WEBASSEMBLY_MODULE_TYPE_SYNC) {
|
121
131
|
initialWasmModules.add(module);
|
122
132
|
}
|
123
133
|
}
|
@@ -14,6 +14,8 @@ const WebAssemblyExportImportedDependency = require("../dependencies/WebAssembly
|
|
14
14
|
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
|
15
15
|
|
16
16
|
/** @typedef {import("../Module")} Module */
|
17
|
+
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
18
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
17
19
|
/** @typedef {import("../Parser").ParserState} ParserState */
|
18
20
|
/** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
|
19
21
|
|
@@ -61,6 +63,9 @@ const decoderOpts = {
|
|
61
63
|
};
|
62
64
|
|
63
65
|
class WebAssemblyParser extends Parser {
|
66
|
+
/**
|
67
|
+
* @param {{}=} options parser options
|
68
|
+
*/
|
64
69
|
constructor(options) {
|
65
70
|
super();
|
66
71
|
this.hooks = Object.freeze({});
|
@@ -78,8 +83,10 @@ class WebAssemblyParser extends Parser {
|
|
78
83
|
}
|
79
84
|
|
80
85
|
// flag it as ESM
|
81
|
-
|
82
|
-
state.module.
|
86
|
+
/** @type {BuildInfo} */
|
87
|
+
(state.module.buildInfo).strict = true;
|
88
|
+
/** @type {BuildMeta} */
|
89
|
+
(state.module.buildMeta).exportsType = "namespace";
|
83
90
|
|
84
91
|
// parse it
|
85
92
|
const program = decode(source, decoderOpts);
|
@@ -88,10 +95,12 @@ class WebAssemblyParser extends Parser {
|
|
88
95
|
const moduleContext = moduleContextFromModuleAST(module);
|
89
96
|
|
90
97
|
// extract imports and exports
|
98
|
+
/** @type {string[]} */
|
91
99
|
const exports = [];
|
92
100
|
let jsIncompatibleExports = (state.module.buildMeta.jsIncompatibleExports =
|
93
101
|
undefined);
|
94
102
|
|
103
|
+
/** @type {TODO[]} */
|
95
104
|
const importedGlobals = [];
|
96
105
|
t.traverse(module, {
|
97
106
|
ModuleExport({ node }) {
|
@@ -157,12 +166,14 @@ class WebAssemblyParser extends Parser {
|
|
157
166
|
} else if (t.isTable(node.descr) === true) {
|
158
167
|
onlyDirectImport = "Table";
|
159
168
|
} else if (t.isFuncImportDescr(node.descr) === true) {
|
160
|
-
const incompatibleType = getJsIncompatibleType(
|
169
|
+
const incompatibleType = getJsIncompatibleType(
|
170
|
+
/** @type {t.Signature} */ (node.descr.signature)
|
171
|
+
);
|
161
172
|
if (incompatibleType) {
|
162
173
|
onlyDirectImport = `Non-JS-compatible Func Signature (${incompatibleType})`;
|
163
174
|
}
|
164
175
|
} else if (t.isGlobalType(node.descr) === true) {
|
165
|
-
const type = node.descr.valtype;
|
176
|
+
const type = /** @type {string} */ (node.descr.valtype);
|
166
177
|
if (!JS_COMPAT_TYPES.has(type)) {
|
167
178
|
onlyDirectImport = `Non-JS-compatible Global Type (${type})`;
|
168
179
|
}
|
@@ -22,7 +22,7 @@ const MANGLED_MODULE = "a";
|
|
22
22
|
/**
|
23
23
|
* @param {ModuleGraph} moduleGraph the module graph
|
24
24
|
* @param {Module} module the module
|
25
|
-
* @param {boolean} mangle mangle module and export names
|
25
|
+
* @param {boolean | undefined} mangle mangle module and export names
|
26
26
|
* @returns {UsedWasmDependency[]} used dependencies and (mangled) name
|
27
27
|
*/
|
28
28
|
const getUsedDependencies = (moduleGraph, module, mangle) => {
|
@@ -5,9 +5,11 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
|
8
9
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
9
10
|
const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRuntimeModule");
|
10
11
|
|
12
|
+
/** @typedef {import("../Chunk")} Chunk */
|
11
13
|
/** @typedef {import("../Compiler")} Compiler */
|
12
14
|
|
13
15
|
class FetchCompileAsyncWasmPlugin {
|
@@ -21,6 +23,10 @@ class FetchCompileAsyncWasmPlugin {
|
|
21
23
|
"FetchCompileAsyncWasmPlugin",
|
22
24
|
compilation => {
|
23
25
|
const globalWasmLoading = compilation.outputOptions.wasmLoading;
|
26
|
+
/**
|
27
|
+
* @param {Chunk} chunk chunk
|
28
|
+
* @returns {boolean} true, if wasm loading is enabled for the chunk
|
29
|
+
*/
|
24
30
|
const isEnabledForChunk = chunk => {
|
25
31
|
const options = chunk.getEntryOptions();
|
26
32
|
const wasmLoading =
|
@@ -29,6 +35,10 @@ class FetchCompileAsyncWasmPlugin {
|
|
29
35
|
: globalWasmLoading;
|
30
36
|
return wasmLoading === "fetch";
|
31
37
|
};
|
38
|
+
/**
|
39
|
+
* @param {string} path path to the wasm file
|
40
|
+
* @returns {string} code to load the wasm file
|
41
|
+
*/
|
32
42
|
const generateLoadBinaryCode = path =>
|
33
43
|
`fetch(${RuntimeGlobals.publicPath} + ${path})`;
|
34
44
|
|
@@ -40,7 +50,7 @@ class FetchCompileAsyncWasmPlugin {
|
|
40
50
|
if (
|
41
51
|
!chunkGraph.hasModuleInGraph(
|
42
52
|
chunk,
|
43
|
-
m => m.type ===
|
53
|
+
m => m.type === WEBASSEMBLY_MODULE_TYPE_ASYNC
|
44
54
|
)
|
45
55
|
) {
|
46
56
|
return;
|
@@ -5,16 +5,28 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
const { WEBASSEMBLY_MODULE_TYPE_SYNC } = require("../ModuleTypeConstants");
|
8
9
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
9
10
|
const WasmChunkLoadingRuntimeModule = require("../wasm-sync/WasmChunkLoadingRuntimeModule");
|
10
11
|
|
12
|
+
/** @typedef {import("../Chunk")} Chunk */
|
11
13
|
/** @typedef {import("../Compiler")} Compiler */
|
12
14
|
|
13
15
|
// TODO webpack 6 remove
|
14
16
|
|
17
|
+
const PLUGIN_NAME = "FetchCompileWasmPlugin";
|
18
|
+
|
19
|
+
/**
|
20
|
+
* @typedef {Object} FetchCompileWasmPluginOptions
|
21
|
+
* @property {boolean} [mangleImports] mangle imports
|
22
|
+
*/
|
23
|
+
|
15
24
|
class FetchCompileWasmPlugin {
|
16
|
-
|
17
|
-
|
25
|
+
/**
|
26
|
+
* @param {FetchCompileWasmPluginOptions} [options] options
|
27
|
+
*/
|
28
|
+
constructor(options = {}) {
|
29
|
+
this.options = options;
|
18
30
|
}
|
19
31
|
|
20
32
|
/**
|
@@ -23,48 +35,53 @@ class FetchCompileWasmPlugin {
|
|
23
35
|
* @returns {void}
|
24
36
|
*/
|
25
37
|
apply(compiler) {
|
26
|
-
compiler.hooks.thisCompilation.tap(
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
38
|
+
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, compilation => {
|
39
|
+
const globalWasmLoading = compilation.outputOptions.wasmLoading;
|
40
|
+
/**
|
41
|
+
* @param {Chunk} chunk chunk
|
42
|
+
* @returns {boolean} true, if wasm loading is enabled for the chunk
|
43
|
+
*/
|
44
|
+
const isEnabledForChunk = chunk => {
|
45
|
+
const options = chunk.getEntryOptions();
|
46
|
+
const wasmLoading =
|
47
|
+
options && options.wasmLoading !== undefined
|
48
|
+
? options.wasmLoading
|
49
|
+
: globalWasmLoading;
|
50
|
+
return wasmLoading === "fetch";
|
51
|
+
};
|
52
|
+
/**
|
53
|
+
* @param {string} path path to the wasm file
|
54
|
+
* @returns {string} code to load the wasm file
|
55
|
+
*/
|
56
|
+
const generateLoadBinaryCode = path =>
|
57
|
+
`fetch(${RuntimeGlobals.publicPath} + ${path})`;
|
40
58
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
chunk,
|
49
|
-
m => m.type === "webassembly/sync"
|
50
|
-
)
|
51
|
-
) {
|
52
|
-
return;
|
53
|
-
}
|
54
|
-
set.add(RuntimeGlobals.moduleCache);
|
55
|
-
set.add(RuntimeGlobals.publicPath);
|
56
|
-
compilation.addRuntimeModule(
|
59
|
+
compilation.hooks.runtimeRequirementInTree
|
60
|
+
.for(RuntimeGlobals.ensureChunkHandlers)
|
61
|
+
.tap(PLUGIN_NAME, (chunk, set) => {
|
62
|
+
if (!isEnabledForChunk(chunk)) return;
|
63
|
+
const chunkGraph = compilation.chunkGraph;
|
64
|
+
if (
|
65
|
+
!chunkGraph.hasModuleInGraph(
|
57
66
|
chunk,
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
67
|
+
m => m.type === WEBASSEMBLY_MODULE_TYPE_SYNC
|
68
|
+
)
|
69
|
+
) {
|
70
|
+
return;
|
71
|
+
}
|
72
|
+
set.add(RuntimeGlobals.moduleCache);
|
73
|
+
set.add(RuntimeGlobals.publicPath);
|
74
|
+
compilation.addRuntimeModule(
|
75
|
+
chunk,
|
76
|
+
new WasmChunkLoadingRuntimeModule({
|
77
|
+
generateLoadBinaryCode,
|
78
|
+
supportsStreaming: true,
|
79
|
+
mangleImports: this.options.mangleImports,
|
80
|
+
runtimeRequirements: set
|
81
|
+
})
|
82
|
+
);
|
83
|
+
});
|
84
|
+
});
|
68
85
|
}
|
69
86
|
}
|
70
87
|
|
@@ -8,6 +8,7 @@
|
|
8
8
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
9
9
|
const JsonpChunkLoadingRuntimeModule = require("./JsonpChunkLoadingRuntimeModule");
|
10
10
|
|
11
|
+
/** @typedef {import("../Chunk")} Chunk */
|
11
12
|
/** @typedef {import("../Compiler")} Compiler */
|
12
13
|
|
13
14
|
class JsonpChunkLoadingPlugin {
|
@@ -21,6 +22,10 @@ class JsonpChunkLoadingPlugin {
|
|
21
22
|
"JsonpChunkLoadingPlugin",
|
22
23
|
compilation => {
|
23
24
|
const globalChunkLoading = compilation.outputOptions.chunkLoading;
|
25
|
+
/**
|
26
|
+
* @param {Chunk} chunk chunk
|
27
|
+
* @returns {boolean} true, if wasm loading is enabled for the chunk
|
28
|
+
*/
|
24
29
|
const isEnabledForChunk = chunk => {
|
25
30
|
const options = chunk.getEntryOptions();
|
26
31
|
const chunkLoading =
|
@@ -30,6 +35,10 @@ class JsonpChunkLoadingPlugin {
|
|
30
35
|
return chunkLoading === "jsonp";
|
31
36
|
};
|
32
37
|
const onceForChunkSet = new WeakSet();
|
38
|
+
/**
|
39
|
+
* @param {Chunk} chunk chunk
|
40
|
+
* @param {Set<string>} set runtime requirements
|
41
|
+
*/
|
33
42
|
const handler = (chunk, set) => {
|
34
43
|
if (onceForChunkSet.has(chunk)) return;
|
35
44
|
onceForChunkSet.add(chunk);
|