webpack 5.59.0 → 5.94.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -38
- package/bin/webpack.js +34 -10
- package/hot/dev-server.js +19 -5
- package/hot/lazy-compilation-node.js +13 -1
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +23 -4
- package/hot/only-dev-server.js +3 -2
- package/hot/poll.js +5 -2
- package/hot/signal.js +6 -2
- package/lib/APIPlugin.js +226 -122
- package/lib/AbstractMethodError.js +10 -5
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +2 -1
- package/lib/BannerPlugin.js +33 -12
- package/lib/Cache.js +16 -12
- package/lib/CacheFacade.js +13 -16
- package/lib/CaseSensitiveModulesWarning.js +8 -8
- package/lib/Chunk.js +60 -33
- package/lib/ChunkGraph.js +207 -72
- package/lib/ChunkGroup.js +40 -20
- package/lib/ChunkTemplate.js +43 -0
- package/lib/CleanPlugin.js +117 -32
- package/lib/CodeGenerationResults.js +8 -7
- package/lib/CommentCompilationWarning.js +0 -1
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +712 -392
- package/lib/Compiler.js +393 -172
- package/lib/ConcatenationScope.js +10 -13
- package/lib/ConditionalInitFragment.js +22 -14
- package/lib/ConstPlugin.js +104 -64
- package/lib/ContextExclusionPlugin.js +3 -3
- package/lib/ContextModule.js +283 -108
- package/lib/ContextModuleFactory.js +151 -63
- package/lib/ContextReplacementPlugin.js +25 -10
- package/lib/CssModule.js +166 -0
- package/lib/DefinePlugin.js +254 -148
- package/lib/DelegatedModule.js +29 -6
- package/lib/DelegatedModuleFactoryPlugin.js +42 -22
- package/lib/DelegatedPlugin.js +4 -0
- package/lib/DependenciesBlock.js +17 -2
- package/lib/Dependency.js +58 -29
- package/lib/DependencyTemplate.js +24 -3
- package/lib/DependencyTemplates.js +2 -2
- package/lib/DllEntryPlugin.js +18 -1
- package/lib/DllModule.js +21 -4
- package/lib/DllModuleFactory.js +2 -1
- package/lib/DllPlugin.js +9 -7
- package/lib/DllReferencePlugin.js +50 -19
- package/lib/EntryOptionPlugin.js +6 -1
- package/lib/EntryPlugin.js +7 -4
- package/lib/Entrypoint.js +2 -2
- package/lib/EnvironmentNotSupportAsyncWarning.js +52 -0
- package/lib/EnvironmentPlugin.js +5 -2
- package/lib/ErrorHelpers.js +65 -26
- package/lib/EvalDevToolModulePlugin.js +37 -13
- package/lib/EvalSourceMapDevToolPlugin.js +50 -20
- package/lib/ExportsInfo.js +234 -133
- package/lib/ExportsInfoApiPlugin.js +31 -15
- package/lib/ExternalModule.js +391 -129
- package/lib/ExternalModuleFactoryPlugin.js +65 -17
- package/lib/FileSystemInfo.js +1038 -523
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +352 -349
- package/lib/FlagDependencyUsagePlugin.js +10 -10
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/Generator.js +16 -8
- package/lib/GraphHelpers.js +3 -2
- package/lib/HookWebpackError.js +11 -13
- package/lib/HotModuleReplacementPlugin.js +221 -128
- package/lib/IgnoreErrorModuleFactory.js +4 -4
- package/lib/IgnorePlugin.js +5 -4
- package/lib/IgnoreWarningsPlugin.js +6 -9
- package/lib/InitFragment.js +39 -15
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +45 -16
- package/lib/LoaderOptionsPlugin.js +13 -3
- package/lib/MainTemplate.js +74 -21
- package/lib/Module.js +155 -34
- package/lib/ModuleBuildError.js +13 -11
- package/lib/ModuleDependencyError.js +6 -4
- package/lib/ModuleDependencyWarning.js +6 -4
- package/lib/ModuleError.js +10 -5
- package/lib/ModuleFactory.js +4 -4
- package/lib/ModuleFilenameHelpers.js +164 -54
- package/lib/ModuleGraph.js +93 -53
- package/lib/ModuleGraphConnection.js +27 -13
- package/lib/ModuleHashingError.js +29 -0
- package/lib/ModuleInfoHeaderPlugin.js +92 -33
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +17 -9
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +3 -1
- package/lib/ModuleStoreError.js +3 -2
- package/lib/ModuleTemplate.js +33 -1
- package/lib/ModuleTypeConstants.js +168 -0
- package/lib/ModuleWarning.js +10 -5
- package/lib/MultiCompiler.js +115 -38
- package/lib/MultiStats.js +75 -33
- package/lib/MultiWatching.js +6 -2
- package/lib/NodeStuffPlugin.js +136 -37
- package/lib/NormalModule.js +437 -194
- package/lib/NormalModuleFactory.js +313 -116
- package/lib/NormalModuleReplacementPlugin.js +10 -4
- package/lib/NullFactory.js +1 -1
- package/lib/OptimizationStages.js +3 -3
- package/lib/Parser.js +1 -1
- package/lib/PlatformPlugin.js +39 -0
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +83 -28
- package/lib/ProvidePlugin.js +37 -19
- package/lib/RawModule.js +18 -5
- package/lib/RecordIdsPlugin.js +8 -8
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/ResolverFactory.js +8 -4
- package/lib/RuntimeGlobals.js +99 -65
- package/lib/RuntimeModule.js +17 -15
- package/lib/RuntimePlugin.js +116 -13
- package/lib/RuntimeTemplate.js +304 -102
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SizeFormatHelpers.js +2 -4
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +89 -42
- package/lib/Stats.js +12 -7
- package/lib/Template.js +30 -33
- package/lib/TemplatedPathPlugin.js +102 -34
- package/lib/UseStrictPlugin.js +37 -12
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +6 -0
- package/lib/WatchIgnorePlugin.js +46 -13
- package/lib/Watching.js +139 -76
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +162 -56
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +351 -99
- package/lib/asset/AssetModulesPlugin.js +57 -33
- package/lib/asset/AssetParser.js +15 -6
- package/lib/asset/AssetSourceGenerator.js +30 -10
- package/lib/asset/AssetSourceParser.js +8 -2
- package/lib/asset/RawDataUrlModule.js +162 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +16 -13
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/buildChunkGraph.js +376 -420
- package/lib/cache/AddManagedPathsPlugin.js +6 -1
- package/lib/cache/IdleFileCachePlugin.js +26 -13
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +13 -7
- package/lib/cache/PackFileCacheStrategy.js +172 -94
- package/lib/cache/ResolverCachePlugin.js +115 -43
- package/lib/cache/getLazyHashedEtag.js +2 -2
- package/lib/cache/mergeEtags.js +16 -21
- package/lib/cli.js +195 -110
- package/lib/config/browserslistTargetHandler.js +106 -41
- package/lib/config/defaults.js +572 -154
- package/lib/config/normalization.js +361 -322
- package/lib/config/target.js +105 -66
- package/lib/container/ContainerEntryDependency.js +2 -1
- package/lib/container/ContainerEntryModule.js +27 -11
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +18 -12
- package/lib/container/ContainerReferencePlugin.js +1 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +19 -8
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/ModuleFederationPlugin.js +2 -0
- package/lib/container/RemoteModule.js +17 -4
- package/lib/container/RemoteRuntimeModule.js +31 -17
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/container/options.js +18 -4
- package/lib/css/CssExportsGenerator.js +203 -0
- package/lib/css/CssGenerator.js +151 -0
- package/lib/css/CssLoadingRuntimeModule.js +592 -0
- package/lib/css/CssModulesPlugin.js +888 -0
- package/lib/css/CssParser.js +1049 -0
- package/lib/css/walkCssTokens.js +775 -0
- package/lib/debug/ProfilingPlugin.js +102 -54
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +204 -61
- package/lib/dependencies/AMDPlugin.js +44 -24
- package/lib/dependencies/AMDRequireArrayDependency.js +34 -10
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +185 -54
- package/lib/dependencies/AMDRequireDependency.js +21 -6
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +4 -4
- package/lib/dependencies/CachedConstDependency.js +22 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +16 -2
- package/lib/dependencies/CommonJsExportRequireDependency.js +77 -47
- package/lib/dependencies/CommonJsExportsDependency.js +28 -5
- package/lib/dependencies/CommonJsExportsParserPlugin.js +111 -39
- package/lib/dependencies/CommonJsFullRequireDependency.js +42 -8
- package/lib/dependencies/CommonJsImportsParserPlugin.js +530 -130
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +23 -2
- package/lib/dependencies/CommonJsRequireDependency.js +9 -1
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +22 -8
- package/lib/dependencies/ConstDependency.js +12 -3
- package/lib/dependencies/ContextDependency.js +32 -5
- package/lib/dependencies/ContextDependencyHelpers.js +92 -62
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +4 -1
- package/lib/dependencies/ContextElementDependency.js +41 -4
- package/lib/dependencies/CreateScriptUrlDependency.js +22 -1
- package/lib/dependencies/CriticalDependencyWarning.js +4 -1
- package/lib/dependencies/CssExportDependency.js +156 -0
- package/lib/dependencies/CssImportDependency.js +125 -0
- package/lib/dependencies/CssLocalIdentifierDependency.js +245 -0
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +111 -0
- package/lib/dependencies/CssUrlDependency.js +164 -0
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +15 -11
- package/lib/dependencies/ExportsInfoDependency.js +26 -5
- package/lib/dependencies/ExternalModuleDependency.js +109 -0
- package/lib/dependencies/ExternalModuleInitFragment.js +133 -0
- package/lib/dependencies/HarmonyAcceptDependency.js +11 -2
- package/lib/dependencies/HarmonyAcceptImportDependency.js +9 -4
- package/lib/dependencies/HarmonyCompatibilityDependency.js +6 -5
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +29 -3
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +152 -0
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +96 -51
- package/lib/dependencies/HarmonyExportExpressionDependency.js +21 -4
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +216 -108
- package/lib/dependencies/HarmonyExportInitFragment.js +21 -9
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +13 -7
- package/lib/dependencies/HarmonyImportDependency.js +65 -19
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +268 -74
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +11 -5
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +180 -36
- package/lib/dependencies/HarmonyModulesPlugin.js +33 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -2
- package/lib/dependencies/ImportDependency.js +50 -12
- package/lib/dependencies/ImportEagerDependency.js +11 -6
- package/lib/dependencies/ImportMetaContextDependency.js +42 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +301 -0
- package/lib/dependencies/ImportMetaContextPlugin.js +72 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +128 -59
- package/lib/dependencies/ImportParserPlugin.js +153 -83
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +11 -6
- package/lib/dependencies/JsonExportsDependency.js +38 -30
- package/lib/dependencies/LoaderDependency.js +14 -0
- package/lib/dependencies/LoaderImportDependency.js +14 -0
- package/lib/dependencies/LoaderPlugin.js +54 -40
- package/lib/dependencies/LocalModule.js +17 -1
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +22 -4
- package/lib/dependencies/ModuleDecoratorDependency.js +9 -1
- package/lib/dependencies/ModuleDependency.js +24 -7
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +43 -8
- package/lib/dependencies/PureExpressionDependency.js +73 -39
- package/lib/dependencies/RequireContextDependency.js +6 -16
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +14 -6
- package/lib/dependencies/RequireContextPlugin.js +20 -7
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +29 -12
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +6 -1
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +19 -2
- package/lib/dependencies/RequireResolveDependency.js +8 -1
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +9 -1
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +49 -22
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +20 -13
- package/lib/dependencies/URLPlugin.js +115 -27
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +6 -1
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +143 -59
- package/lib/dependencies/getFunctionExpression.js +9 -0
- package/lib/dependencies/processExportInfo.js +3 -1
- package/lib/electron/ElectronTargetPlugin.js +1 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +92 -55
- package/lib/esm/ModuleChunkLoadingPlugin.js +12 -1
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +141 -25
- package/lib/formatLocation.js +1 -2
- package/lib/hmr/HotModuleReplacement.runtime.js +37 -25
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +2 -1
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +13 -15
- package/lib/hmr/LazyCompilationPlugin.js +94 -41
- package/lib/hmr/lazyCompilationBackend.js +107 -44
- package/lib/ids/ChunkModuleIdRangePlugin.js +12 -3
- package/lib/ids/DeterministicChunkIdsPlugin.js +13 -6
- package/lib/ids/DeterministicModuleIdsPlugin.js +59 -35
- package/lib/ids/HashedModuleIdsPlugin.js +24 -16
- package/lib/ids/IdHelpers.js +59 -49
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +20 -12
- package/lib/ids/NaturalModuleIdsPlugin.js +10 -13
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +14 -11
- package/lib/ids/SyncModuleIdsPlugin.js +146 -0
- package/lib/index.js +44 -5
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +9 -7
- package/lib/javascript/BasicEvaluatedExpression.js +133 -19
- package/lib/javascript/ChunkHelpers.js +33 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +18 -15
- package/lib/javascript/EnableChunkLoadingPlugin.js +11 -6
- package/lib/javascript/JavascriptGenerator.js +37 -6
- package/lib/javascript/JavascriptModulesPlugin.js +523 -295
- package/lib/javascript/JavascriptParser.js +1591 -574
- package/lib/javascript/JavascriptParserHelpers.js +58 -37
- package/lib/javascript/StartupHelpers.js +69 -47
- package/lib/json/JsonData.js +33 -0
- package/lib/json/JsonGenerator.js +29 -21
- package/lib/json/JsonModulesPlugin.js +13 -7
- package/lib/json/JsonParser.js +30 -16
- package/lib/library/AbstractLibraryPlugin.js +6 -2
- package/lib/library/AmdLibraryPlugin.js +34 -18
- package/lib/library/AssignLibraryPlugin.js +68 -32
- package/lib/library/EnableLibraryPlugin.js +39 -14
- package/lib/library/ExportPropertyLibraryPlugin.js +14 -5
- package/lib/library/JsonpLibraryPlugin.js +4 -3
- package/lib/library/ModernModuleLibraryPlugin.js +144 -0
- package/lib/library/ModuleLibraryPlugin.js +12 -7
- package/lib/library/SystemLibraryPlugin.js +6 -4
- package/lib/library/UmdLibraryPlugin.js +119 -100
- package/lib/logging/Logger.js +59 -6
- package/lib/logging/createConsoleLogger.js +25 -40
- package/lib/logging/runtime.js +8 -9
- package/lib/logging/truncateArgs.js +9 -8
- package/lib/node/CommonJsChunkLoadingPlugin.js +18 -2
- package/lib/node/NodeEnvironmentPlugin.js +14 -8
- package/lib/node/NodeTargetPlugin.js +7 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +100 -50
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +51 -26
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +13 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +49 -26
- package/lib/node/nodeConsole.js +48 -31
- package/lib/optimize/AggressiveMergingPlugin.js +10 -4
- package/lib/optimize/AggressiveSplittingPlugin.js +26 -21
- package/lib/optimize/ConcatenatedModule.js +353 -212
- package/lib/optimize/EnsureChunkConditionsPlugin.js +4 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +14 -8
- package/lib/optimize/InnerGraph.js +30 -25
- package/lib/optimize/InnerGraphPlugin.js +105 -64
- package/lib/optimize/LimitChunkCountPlugin.js +32 -9
- package/lib/optimize/MangleExportsPlugin.js +7 -2
- package/lib/optimize/MinMaxSizeWarning.js +6 -1
- package/lib/optimize/ModuleConcatenationPlugin.js +150 -83
- package/lib/optimize/RealContentHashPlugin.js +99 -43
- package/lib/optimize/RemoveParentModulesPlugin.js +131 -48
- package/lib/optimize/RuntimeChunkPlugin.js +15 -2
- package/lib/optimize/SideEffectsFlagPlugin.js +119 -63
- package/lib/optimize/SplitChunksPlugin.js +129 -78
- package/lib/performance/SizeLimitsPlugin.js +22 -8
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +4 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +8 -5
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -3
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +5 -3
- package/lib/rules/BasicEffectRulePlugin.js +7 -1
- package/lib/rules/BasicMatcherRulePlugin.js +8 -1
- package/lib/rules/ObjectMatcherRulePlugin.js +19 -2
- package/lib/rules/RuleSetCompiler.js +53 -32
- package/lib/rules/UseEffectRulePlugin.js +42 -36
- package/lib/runtime/AsyncModuleRuntimeModule.js +56 -69
- package/lib/runtime/AutoPublicPathRuntimeModule.js +25 -9
- package/lib/runtime/BaseUriRuntimeModule.js +35 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +38 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +13 -36
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -3
- package/lib/runtime/EnsureChunkRuntimeModule.js +29 -15
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +56 -43
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +98 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +61 -45
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +24 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +36 -28
- package/lib/runtime/StartupEntrypointRuntimeModule.js +13 -9
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +336 -120
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +212 -33
- package/lib/serialization/DateObjectSerializer.js +16 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -6
- package/lib/serialization/FileMiddleware.js +187 -86
- package/lib/serialization/MapObjectSerializer.js +25 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +26 -8
- package/lib/serialization/ObjectMiddleware.js +96 -66
- package/lib/serialization/PlainObjectSerializer.js +51 -14
- package/lib/serialization/RegExpObjectSerializer.js +17 -5
- package/lib/serialization/Serializer.js +23 -5
- package/lib/serialization/SerializerMiddleware.js +8 -8
- package/lib/serialization/SetObjectSerializer.js +22 -6
- package/lib/serialization/SingleItemMiddleware.js +2 -2
- package/lib/serialization/types.js +2 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +40 -17
- package/lib/sharing/ConsumeSharedPlugin.js +139 -102
- package/lib/sharing/ConsumeSharedRuntimeModule.js +144 -130
- package/lib/sharing/ProvideForSharedDependency.js +0 -1
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +19 -6
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +37 -30
- package/lib/sharing/SharePlugin.js +2 -2
- package/lib/sharing/ShareRuntimeModule.js +20 -10
- package/lib/sharing/resolveMatchedConfigs.js +6 -5
- package/lib/sharing/utils.js +338 -34
- package/lib/stats/DefaultStatsFactoryPlugin.js +660 -396
- package/lib/stats/DefaultStatsPresetPlugin.js +85 -25
- package/lib/stats/DefaultStatsPrinterPlugin.js +525 -145
- package/lib/stats/StatsFactory.js +128 -57
- package/lib/stats/StatsPrinter.js +77 -46
- package/lib/util/ArrayHelpers.js +35 -1
- package/lib/util/ArrayQueue.js +15 -22
- package/lib/util/AsyncQueue.js +37 -16
- package/lib/util/IterableHelpers.js +3 -4
- package/lib/util/LazyBucketSortedSet.js +60 -44
- package/lib/util/LazySet.js +11 -2
- package/lib/util/MapHelpers.js +17 -5
- package/lib/util/ParallelismFactorCalculator.js +11 -1
- package/lib/util/Queue.js +9 -3
- package/lib/util/Semaphore.js +4 -7
- package/lib/util/SetHelpers.js +5 -5
- package/lib/util/SortableSet.js +19 -6
- package/lib/util/StackedCacheMap.js +33 -3
- package/lib/util/StackedMap.js +1 -3
- package/lib/util/StringXor.js +46 -0
- package/lib/util/TupleQueue.js +9 -3
- package/lib/util/TupleSet.js +15 -5
- package/lib/util/URLAbsoluteSpecifier.js +8 -8
- package/lib/util/WeakTupleMap.js +70 -28
- package/lib/util/binarySearchBounds.js +51 -9
- package/lib/util/chainedImports.js +97 -0
- package/lib/util/cleverMerge.js +51 -36
- package/lib/util/comparators.js +146 -83
- package/lib/util/compileBooleanMatcher.js +35 -7
- package/lib/util/conventions.js +126 -0
- package/lib/util/create-schema-validation.js +9 -2
- package/lib/util/createHash.js +49 -14
- package/lib/util/deprecation.js +48 -15
- package/lib/util/deterministicGrouping.js +71 -39
- package/lib/util/extractUrlAndGlobal.js +3 -0
- package/lib/util/findGraphRoots.js +7 -5
- package/lib/util/fs.js +419 -94
- package/lib/util/hash/BatchedHash.js +10 -4
- package/lib/util/hash/md4.js +20 -0
- package/lib/util/hash/wasm-hash.js +163 -0
- package/lib/util/hash/xxhash64.js +7 -141
- package/lib/util/identifier.js +140 -93
- package/lib/util/internalSerializables.js +22 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +10 -10
- package/lib/util/mergeScope.js +76 -0
- package/lib/util/nonNumericOnlyHash.js +22 -0
- package/lib/util/numberHash.js +84 -34
- package/lib/util/objectToMap.js +0 -1
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +7 -55
- package/lib/util/propertyName.js +77 -0
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/runtime.js +188 -133
- package/lib/util/semver.js +64 -56
- package/lib/util/serialization.js +26 -1
- package/lib/util/smartGrouping.js +10 -10
- package/lib/util/source.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +9 -4
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +70 -30
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +34 -16
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +32 -12
- package/lib/wasm-async/AsyncWebAssemblyParser.js +17 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +72 -31
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +72 -52
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +5 -4
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +23 -9
- package/lib/wasm-sync/WebAssemblyUtils.js +5 -4
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +71 -41
- package/lib/webpack.js +43 -12
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +15 -12
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +55 -40
- package/module.d.ts +233 -0
- package/package.json +85 -139
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +679 -47
- package/schemas/plugins/BannerPlugin.check.js +1 -1
- package/schemas/plugins/BannerPlugin.json +9 -1
- package/schemas/plugins/DllReferencePlugin.check.js +1 -1
- package/schemas/plugins/HashedModuleIdsPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -1
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +10 -1
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerReferencePlugin.json +2 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +12 -1
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoParserOptions.json +3 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssGlobalParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssGlobalParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssParserOptions.json +3 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -1
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -1
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -1
- package/schemas/plugins/schemes/HttpUriPlugin.json +4 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +5026 -1756
@@ -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,15 +69,15 @@ 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();
|
70
78
|
for (const dep of module.dependencies) {
|
71
79
|
if (dep instanceof WebAssemblyImportDependency) {
|
72
|
-
const module = moduleGraph.getModule(dep);
|
80
|
+
const module = /** @type {Module} */ (moduleGraph.getModule(dep));
|
73
81
|
if (!depModules.has(module)) {
|
74
82
|
depModules.set(module, {
|
75
83
|
request: dep.request,
|
@@ -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(
|
@@ -111,8 +120,12 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
|
|
111
120
|
wasmDepsByRequest,
|
112
121
|
([request, deps]) => {
|
113
122
|
const exportItems = deps.map(dep => {
|
114
|
-
const importedModule =
|
115
|
-
|
123
|
+
const importedModule =
|
124
|
+
/** @type {Module} */
|
125
|
+
(moduleGraph.getModule(dep));
|
126
|
+
const importVar =
|
127
|
+
/** @type {ImportObjRequestItem} */
|
128
|
+
(depModules.get(importedModule)).importVar;
|
116
129
|
return `${JSON.stringify(
|
117
130
|
dep.name
|
118
131
|
)}: ${runtimeTemplate.exportFromImport({
|
@@ -145,15 +158,14 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
|
|
145
158
|
"{",
|
146
159
|
Template.indent(importObjRequestItems.join(",\n")),
|
147
160
|
"}"
|
148
|
-
|
161
|
+
])
|
149
162
|
: undefined;
|
150
163
|
|
151
|
-
const instantiateCall =
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
)}` + (importsObj ? `, ${importsObj})` : `)`);
|
164
|
+
const instantiateCall = `${RuntimeGlobals.instantiateWasm}(${module.exportsArgument}, ${
|
165
|
+
module.moduleArgument
|
166
|
+
}.id, ${JSON.stringify(
|
167
|
+
chunkGraph.getRenderedModuleHash(module, runtime)
|
168
|
+
)}${importsObj ? `, ${importsObj})` : ")"}`;
|
157
169
|
|
158
170
|
if (promises.length > 0)
|
159
171
|
runtimeRequirements.add(RuntimeGlobals.asyncModule);
|
@@ -167,17 +179,23 @@ class AsyncWebAssemblyJavascriptGenerator extends Generator {
|
|
167
179
|
)}`,
|
168
180
|
`${RuntimeGlobals.asyncModule}(${
|
169
181
|
module.moduleArgument
|
170
|
-
}, ${runtimeTemplate.basicFunction(
|
171
|
-
"__webpack_handle_async_dependencies__",
|
182
|
+
}, async ${runtimeTemplate.basicFunction(
|
183
|
+
"__webpack_handle_async_dependencies__, __webpack_async_result__",
|
172
184
|
[
|
185
|
+
"try {",
|
173
186
|
importsCode,
|
174
187
|
`var __webpack_async_dependencies__ = __webpack_handle_async_dependencies__([${promises.join(
|
175
188
|
", "
|
176
189
|
)}]);`,
|
177
|
-
|
190
|
+
`var [${promises.join(
|
191
|
+
", "
|
192
|
+
)}] = __webpack_async_dependencies__.then ? (await __webpack_async_dependencies__)() : __webpack_async_dependencies__;`,
|
193
|
+
`${importsCompatCode}await ${instantiateCall};`,
|
194
|
+
"__webpack_async_result__();",
|
195
|
+
"} catch(e) { __webpack_async_result__(e); }"
|
178
196
|
]
|
179
197
|
)}, 1);`
|
180
|
-
|
198
|
+
])
|
181
199
|
: `${importsCode}${importsCompatCode}module.exports = ${instantiateCall};`
|
182
200
|
);
|
183
201
|
|
@@ -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")
|
@@ -36,7 +39,7 @@ const getAsyncWebAssemblyParser = memoize(() =>
|
|
36
39
|
);
|
37
40
|
|
38
41
|
/**
|
39
|
-
* @typedef {
|
42
|
+
* @typedef {object} WebAssemblyRenderContext
|
40
43
|
* @property {Chunk} chunk the chunk
|
41
44
|
* @property {DependencyTemplates} dependencyTemplates the dependency templates
|
42
45
|
* @property {RuntimeTemplate} runtimeTemplate the runtime template
|
@@ -46,13 +49,20 @@ const getAsyncWebAssemblyParser = memoize(() =>
|
|
46
49
|
*/
|
47
50
|
|
48
51
|
/**
|
49
|
-
* @typedef {
|
52
|
+
* @typedef {object} CompilationHooks
|
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 {
|
@@ -188,9 +208,9 @@ class AsyncWebAssemblyModulesPlugin {
|
|
188
208
|
hooks.renderModuleContent.call(moduleSource, module, renderContext),
|
189
209
|
"AsyncWebAssemblyModulesPlugin.getCompilationHooks().renderModuleContent"
|
190
210
|
);
|
191
|
-
} catch (
|
192
|
-
|
193
|
-
throw
|
211
|
+
} catch (err) {
|
212
|
+
/** @type {WebpackError} */ (err).module = module;
|
213
|
+
throw err;
|
194
214
|
}
|
195
215
|
}
|
196
216
|
}
|
@@ -7,10 +7,13 @@
|
|
7
7
|
|
8
8
|
const t = require("@webassemblyjs/ast");
|
9
9
|
const { decode } = require("@webassemblyjs/wasm-parser");
|
10
|
+
const EnvironmentNotSupportAsyncWarning = require("../EnvironmentNotSupportAsyncWarning");
|
10
11
|
const Parser = require("../Parser");
|
11
12
|
const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
|
12
13
|
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
|
13
14
|
|
15
|
+
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
16
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
14
17
|
/** @typedef {import("../Parser").ParserState} ParserState */
|
15
18
|
/** @typedef {import("../Parser").PreparsedAst} PreparsedAst */
|
16
19
|
|
@@ -23,6 +26,9 @@ const decoderOpts = {
|
|
23
26
|
};
|
24
27
|
|
25
28
|
class WebAssemblyParser extends Parser {
|
29
|
+
/**
|
30
|
+
* @param {{}=} options parser options
|
31
|
+
*/
|
26
32
|
constructor(options) {
|
27
33
|
super();
|
28
34
|
this.hooks = Object.freeze({});
|
@@ -40,14 +46,21 @@ class WebAssemblyParser extends Parser {
|
|
40
46
|
}
|
41
47
|
|
42
48
|
// flag it as async module
|
43
|
-
state.module.buildInfo
|
44
|
-
|
45
|
-
state.module.buildMeta
|
49
|
+
const buildInfo = /** @type {BuildInfo} */ (state.module.buildInfo);
|
50
|
+
buildInfo.strict = true;
|
51
|
+
const BuildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
|
52
|
+
BuildMeta.exportsType = "namespace";
|
53
|
+
BuildMeta.async = true;
|
54
|
+
EnvironmentNotSupportAsyncWarning.check(
|
55
|
+
state.module,
|
56
|
+
state.compilation.runtimeTemplate,
|
57
|
+
"asyncWebAssembly"
|
58
|
+
);
|
46
59
|
|
47
60
|
// parse it
|
48
61
|
const program = decode(source, decoderOpts);
|
49
62
|
const module = program.body[0];
|
50
|
-
|
63
|
+
/** @type {Array<string>} */
|
51
64
|
const exports = [];
|
52
65
|
t.traverse(module, {
|
53
66
|
ModuleExport({ node }) {
|
@@ -10,14 +10,25 @@ 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 */
|
16
|
+
/** @typedef {import("../ChunkGraph").ModuleId} ModuleId */
|
14
17
|
/** @typedef {import("../Compilation")} Compilation */
|
15
18
|
/** @typedef {import("../Module")} Module */
|
19
|
+
/** @typedef {import("../Module").ReadOnlyRuntimeRequirements} ReadOnlyRuntimeRequirements */
|
20
|
+
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
16
21
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
17
22
|
|
18
23
|
// TODO webpack 6 remove the whole folder
|
19
24
|
|
20
25
|
// Get all wasm modules
|
26
|
+
/**
|
27
|
+
* @param {ModuleGraph} moduleGraph the module graph
|
28
|
+
* @param {ChunkGraph} chunkGraph the chunk graph
|
29
|
+
* @param {Chunk} chunk the chunk
|
30
|
+
* @returns {Module[]} all wasm modules
|
31
|
+
*/
|
21
32
|
const getAllWasmModules = (moduleGraph, chunkGraph, chunk) => {
|
22
33
|
const wasmModules = chunk.getAllAsyncChunks();
|
23
34
|
const array = [];
|
@@ -39,7 +50,7 @@ const getAllWasmModules = (moduleGraph, chunkGraph, chunk) => {
|
|
39
50
|
* generates the import object function for a module
|
40
51
|
* @param {ChunkGraph} chunkGraph the chunk graph
|
41
52
|
* @param {Module} module the module
|
42
|
-
* @param {boolean} mangle mangle imports
|
53
|
+
* @param {boolean | undefined} mangle mangle imports
|
43
54
|
* @param {string[]} declarations array where declarations are pushed to
|
44
55
|
* @param {RuntimeSpec} runtime the runtime
|
45
56
|
* @returns {string} source code
|
@@ -52,6 +63,7 @@ const generateImportObject = (
|
|
52
63
|
runtime
|
53
64
|
) => {
|
54
65
|
const moduleGraph = chunkGraph.moduleGraph;
|
66
|
+
/** @type {Map<string, string | number>} */
|
55
67
|
const waitForInstances = new Map();
|
56
68
|
const properties = [];
|
57
69
|
const usedWasmDependencies = WebAssemblyUtils.getUsedDependencies(
|
@@ -76,32 +88,42 @@ const generateImportObject = (
|
|
76
88
|
|
77
89
|
if (direct) {
|
78
90
|
const instanceVar = `m${waitForInstances.size}`;
|
79
|
-
waitForInstances.set(
|
91
|
+
waitForInstances.set(
|
92
|
+
instanceVar,
|
93
|
+
/** @type {ModuleId} */
|
94
|
+
(chunkGraph.getModuleId(/** @type {Module} */ (importedModule)))
|
95
|
+
);
|
80
96
|
properties.push({
|
81
97
|
module,
|
82
98
|
name,
|
83
99
|
value: `${instanceVar}[${JSON.stringify(usedName)}]`
|
84
100
|
});
|
85
101
|
} else {
|
86
|
-
const params =
|
87
|
-
|
88
|
-
|
102
|
+
const params =
|
103
|
+
/** @type {Signature} */
|
104
|
+
(description.signature).params.map(
|
105
|
+
(param, k) => `p${k}${param.valtype}`
|
106
|
+
);
|
89
107
|
|
90
108
|
const mod = `${RuntimeGlobals.moduleCache}[${JSON.stringify(
|
91
|
-
chunkGraph.getModuleId(importedModule)
|
109
|
+
chunkGraph.getModuleId(/** @type {Module} */ (importedModule))
|
92
110
|
)}]`;
|
93
111
|
const modExports = `${mod}.exports`;
|
94
112
|
|
95
113
|
const cache = `wasmImportedFuncCache${declarations.length}`;
|
96
114
|
declarations.push(`var ${cache};`);
|
97
115
|
|
116
|
+
const modCode =
|
117
|
+
/** @type {Module} */
|
118
|
+
(importedModule).type.startsWith("webassembly")
|
119
|
+
? `${mod} ? ${modExports}[${JSON.stringify(usedName)}] : `
|
120
|
+
: "";
|
121
|
+
|
98
122
|
properties.push({
|
99
123
|
module,
|
100
124
|
name,
|
101
125
|
value: Template.asString([
|
102
|
-
(
|
103
|
-
? `${mod} ? ${modExports}[${JSON.stringify(usedName)}] : `
|
104
|
-
: "") + `function(${params}) {`,
|
126
|
+
`${modCode}function(${params}) {`,
|
105
127
|
Template.indent([
|
106
128
|
`if(${cache} === undefined) ${cache} = ${modExports};`,
|
107
129
|
`return ${cache}[${JSON.stringify(usedName)}](${params});`
|
@@ -122,6 +144,7 @@ const generateImportObject = (
|
|
122
144
|
"};"
|
123
145
|
];
|
124
146
|
} else {
|
147
|
+
/** @type {Map<string, Array<{ name: string, value: string }>>} */
|
125
148
|
const propertiesByModule = new Map();
|
126
149
|
for (const p of properties) {
|
127
150
|
let list = propertiesByModule.get(p.module);
|
@@ -133,15 +156,15 @@ const generateImportObject = (
|
|
133
156
|
importObject = [
|
134
157
|
"return {",
|
135
158
|
Template.indent([
|
136
|
-
Array.from(propertiesByModule, ([module, list]) =>
|
137
|
-
|
159
|
+
Array.from(propertiesByModule, ([module, list]) =>
|
160
|
+
Template.asString([
|
138
161
|
`${JSON.stringify(module)}: {`,
|
139
162
|
Template.indent([
|
140
163
|
list.map(p => `${JSON.stringify(p.name)}: ${p.value}`).join(",\n")
|
141
164
|
]),
|
142
165
|
"}"
|
143
|
-
])
|
144
|
-
|
166
|
+
])
|
167
|
+
).join(",\n")
|
145
168
|
]),
|
146
169
|
"};"
|
147
170
|
];
|
@@ -179,16 +202,26 @@ const generateImportObject = (
|
|
179
202
|
]),
|
180
203
|
"},"
|
181
204
|
]);
|
182
|
-
} else {
|
183
|
-
return Template.asString([
|
184
|
-
`${moduleIdStringified}: function() {`,
|
185
|
-
Template.indent(importObject),
|
186
|
-
"},"
|
187
|
-
]);
|
188
205
|
}
|
206
|
+
return Template.asString([
|
207
|
+
`${moduleIdStringified}: function() {`,
|
208
|
+
Template.indent(importObject),
|
209
|
+
"},"
|
210
|
+
]);
|
189
211
|
};
|
190
212
|
|
213
|
+
/**
|
214
|
+
* @typedef {object} WasmChunkLoadingRuntimeModuleOptions
|
215
|
+
* @property {(path: string) => string} generateLoadBinaryCode
|
216
|
+
* @property {boolean} [supportsStreaming]
|
217
|
+
* @property {boolean} [mangleImports]
|
218
|
+
* @property {ReadOnlyRuntimeRequirements} runtimeRequirements
|
219
|
+
*/
|
220
|
+
|
191
221
|
class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
222
|
+
/**
|
223
|
+
* @param {WasmChunkLoadingRuntimeModuleOptions} options options
|
224
|
+
*/
|
192
225
|
constructor({
|
193
226
|
generateLoadBinaryCode,
|
194
227
|
supportsStreaming,
|
@@ -203,29 +236,37 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
203
236
|
}
|
204
237
|
|
205
238
|
/**
|
206
|
-
* @returns {string} runtime code
|
239
|
+
* @returns {string | null} runtime code
|
207
240
|
*/
|
208
241
|
generate() {
|
209
|
-
const { chunkGraph, compilation, chunk, mangleImports } = this;
|
210
|
-
const { moduleGraph, outputOptions } = compilation;
|
211
242
|
const fn = RuntimeGlobals.ensureChunkHandlers;
|
212
243
|
const withHmr = this._runtimeRequirements.has(
|
213
244
|
RuntimeGlobals.hmrDownloadUpdateHandlers
|
214
245
|
);
|
246
|
+
const compilation = /** @type {Compilation} */ (this.compilation);
|
247
|
+
const { moduleGraph, outputOptions } = compilation;
|
248
|
+
const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
|
249
|
+
const chunk = /** @type {Chunk} */ (this.chunk);
|
215
250
|
const wasmModules = getAllWasmModules(moduleGraph, chunkGraph, chunk);
|
251
|
+
const { mangleImports } = this;
|
252
|
+
/** @type {string[]} */
|
216
253
|
const declarations = [];
|
217
|
-
const importObjects = wasmModules.map(module =>
|
218
|
-
|
254
|
+
const importObjects = wasmModules.map(module =>
|
255
|
+
generateImportObject(
|
219
256
|
chunkGraph,
|
220
257
|
module,
|
221
|
-
|
258
|
+
mangleImports,
|
222
259
|
declarations,
|
223
260
|
chunk.runtime
|
224
|
-
)
|
225
|
-
|
261
|
+
)
|
262
|
+
);
|
226
263
|
const chunkModuleIdMap = chunkGraph.getChunkModuleIdMap(chunk, m =>
|
227
264
|
m.type.startsWith("webassembly")
|
228
265
|
);
|
266
|
+
/**
|
267
|
+
* @param {string} content content
|
268
|
+
* @returns {string} created import object
|
269
|
+
*/
|
229
270
|
const createImportObject = content =>
|
230
271
|
mangleImports
|
231
272
|
? `{ ${JSON.stringify(WebAssemblyUtils.MANGLED_MODULE)}: ${content} }`
|
@@ -291,7 +332,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
291
332
|
`${fn}.wasm = function(chunkId, promises) {`,
|
292
333
|
Template.indent([
|
293
334
|
"",
|
294
|
-
|
335
|
+
"var wasmModules = wasmModuleMap[chunkId] || [];",
|
295
336
|
"",
|
296
337
|
"wasmModules.forEach(function(wasmModuleId, idx) {",
|
297
338
|
Template.indent([
|
@@ -302,7 +343,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
302
343
|
Template.indent(["promises.push(installedWasmModuleData);"]),
|
303
344
|
"else {",
|
304
345
|
Template.indent([
|
305
|
-
|
346
|
+
"var importObject = wasmImportObjects[wasmModuleId]();",
|
306
347
|
`var req = ${this.generateLoadBinaryCode(wasmModuleSrcPath)};`,
|
307
348
|
"var promise;",
|
308
349
|
this.supportsStreaming
|
@@ -323,7 +364,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
323
364
|
"importObject"
|
324
365
|
)});`
|
325
366
|
])
|
326
|
-
|
367
|
+
])
|
327
368
|
: Template.asString([
|
328
369
|
"if(importObject && typeof importObject.then === 'function') {",
|
329
370
|
Template.indent([
|
@@ -341,7 +382,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
341
382
|
]),
|
342
383
|
"});"
|
343
384
|
])
|
344
|
-
|
385
|
+
]),
|
345
386
|
"} else {",
|
346
387
|
Template.indent([
|
347
388
|
"var bytesPromise = req.then(function(x) { return x.arrayBuffer(); });",
|
@@ -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);
|