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
@@ -25,46 +25,50 @@ const WebAssemblyExportImportedDependency = require("../dependencies/WebAssembly
|
|
25
25
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
26
26
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
27
27
|
/** @typedef {import("./WebAssemblyUtils").UsedWasmDependency} UsedWasmDependency */
|
28
|
+
/** @typedef {import("@webassemblyjs/ast").Instruction} Instruction */
|
29
|
+
/** @typedef {import("@webassemblyjs/ast").ModuleImport} ModuleImport */
|
30
|
+
/** @typedef {import("@webassemblyjs/ast").ModuleExport} ModuleExport */
|
31
|
+
/** @typedef {import("@webassemblyjs/ast").Global} Global */
|
32
|
+
/**
|
33
|
+
* @template T
|
34
|
+
* @typedef {import("@webassemblyjs/ast").NodePath<T>} NodePath
|
35
|
+
*/
|
28
36
|
|
29
37
|
/**
|
30
|
-
* @typedef {(ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
|
38
|
+
* @typedef {(buf: ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
|
31
39
|
*/
|
32
40
|
|
33
41
|
/**
|
34
42
|
* @template T
|
35
|
-
* @param {
|
43
|
+
* @param {((prev: ArrayBuffer) => ArrayBuffer)[]} fns transforms
|
36
44
|
* @returns {Function} composed transform
|
37
45
|
*/
|
38
|
-
const compose = (...fns) =>
|
39
|
-
|
40
|
-
(prevFn, nextFn) =>
|
41
|
-
return value => nextFn(prevFn(value));
|
42
|
-
},
|
46
|
+
const compose = (...fns) =>
|
47
|
+
fns.reduce(
|
48
|
+
(prevFn, nextFn) => value => nextFn(prevFn(value)),
|
43
49
|
value => value
|
44
50
|
);
|
45
|
-
};
|
46
51
|
|
47
52
|
/**
|
48
53
|
* Removes the start instruction
|
49
|
-
*
|
50
|
-
* @param {
|
54
|
+
* @param {object} state state
|
55
|
+
* @param {object} state.ast Module's ast
|
51
56
|
* @returns {ArrayBufferTransform} transform
|
52
57
|
*/
|
53
|
-
const removeStartFunc = state => bin =>
|
54
|
-
|
58
|
+
const removeStartFunc = state => bin =>
|
59
|
+
editWithAST(state.ast, bin, {
|
55
60
|
Start(path) {
|
56
61
|
path.remove();
|
57
62
|
}
|
58
63
|
});
|
59
|
-
};
|
60
64
|
|
61
65
|
/**
|
62
66
|
* Get imported globals
|
63
|
-
*
|
64
|
-
* @
|
65
|
-
* @returns {Array<t.ModuleImport>} - nodes
|
67
|
+
* @param {object} ast Module's AST
|
68
|
+
* @returns {t.ModuleImport[]} - nodes
|
66
69
|
*/
|
67
70
|
const getImportedGlobals = ast => {
|
71
|
+
/** @type {t.ModuleImport[]} */
|
68
72
|
const importedGlobals = [];
|
69
73
|
|
70
74
|
t.traverse(ast, {
|
@@ -80,9 +84,8 @@ const getImportedGlobals = ast => {
|
|
80
84
|
|
81
85
|
/**
|
82
86
|
* Get the count for imported func
|
83
|
-
*
|
84
|
-
* @
|
85
|
-
* @returns {Number} - count
|
87
|
+
* @param {object} ast Module's AST
|
88
|
+
* @returns {number} - count
|
86
89
|
*/
|
87
90
|
const getCountImportedFunc = ast => {
|
88
91
|
let count = 0;
|
@@ -100,8 +103,7 @@ const getCountImportedFunc = ast => {
|
|
100
103
|
|
101
104
|
/**
|
102
105
|
* Get next type index
|
103
|
-
*
|
104
|
-
* @param {Object} ast Module's AST
|
106
|
+
* @param {object} ast Module's AST
|
105
107
|
* @returns {t.Index} - index
|
106
108
|
*/
|
107
109
|
const getNextTypeIndex = ast => {
|
@@ -116,13 +118,11 @@ const getNextTypeIndex = ast => {
|
|
116
118
|
|
117
119
|
/**
|
118
120
|
* Get next func index
|
119
|
-
*
|
120
|
-
* The Func section metadata provide informations for implemented funcs
|
121
|
+
* The Func section metadata provide information for implemented funcs
|
121
122
|
* in order to have the correct index we shift the index by number of external
|
122
123
|
* functions.
|
123
|
-
*
|
124
|
-
* @param {
|
125
|
-
* @param {Number} countImportedFunc number of imported funcs
|
124
|
+
* @param {object} ast Module's AST
|
125
|
+
* @param {number} countImportedFunc number of imported funcs
|
126
126
|
* @returns {t.Index} - index
|
127
127
|
*/
|
128
128
|
const getNextFuncIndex = (ast, countImportedFunc) => {
|
@@ -153,9 +153,8 @@ const createDefaultInitForGlobal = globalType => {
|
|
153
153
|
return t.objectInstruction("const", globalType.valtype, [
|
154
154
|
t.floatLiteral(66, false, false, "66")
|
155
155
|
]);
|
156
|
-
} else {
|
157
|
-
throw new Error("unknown type: " + globalType.valtype);
|
158
156
|
}
|
157
|
+
throw new Error(`unknown type: ${globalType.valtype}`);
|
159
158
|
};
|
160
159
|
|
161
160
|
/**
|
@@ -167,18 +166,20 @@ const createDefaultInitForGlobal = globalType => {
|
|
167
166
|
* indices will be preserved.
|
168
167
|
*
|
169
168
|
* Note that globals will become mutable.
|
170
|
-
*
|
171
|
-
* @param {
|
169
|
+
* @param {object} state transformation state
|
170
|
+
* @param {object} state.ast Module's ast
|
171
|
+
* @param {t.Instruction[]} state.additionalInitCode list of addition instructions for the init function
|
172
172
|
* @returns {ArrayBufferTransform} transform
|
173
173
|
*/
|
174
174
|
const rewriteImportedGlobals = state => bin => {
|
175
175
|
const additionalInitCode = state.additionalInitCode;
|
176
|
+
/** @type {Array<t.Global>} */
|
176
177
|
const newGlobals = [];
|
177
178
|
|
178
179
|
bin = editWithAST(state.ast, bin, {
|
179
180
|
ModuleImport(path) {
|
180
181
|
if (t.isGlobalType(path.node.descr)) {
|
181
|
-
const globalType = path.node.descr;
|
182
|
+
const globalType = /** @type {TODO} */ (path.node.descr);
|
182
183
|
|
183
184
|
globalType.mutability = "var";
|
184
185
|
|
@@ -195,6 +196,9 @@ const rewriteImportedGlobals = state => bin => {
|
|
195
196
|
|
196
197
|
// in order to preserve non-imported global's order we need to re-inject
|
197
198
|
// those as well
|
199
|
+
/**
|
200
|
+
* @param {NodePath<Global>} path path
|
201
|
+
*/
|
198
202
|
Global(path) {
|
199
203
|
const { node } = path;
|
200
204
|
const [init] = node.init;
|
@@ -232,8 +236,8 @@ const rewriteImportedGlobals = state => bin => {
|
|
232
236
|
|
233
237
|
/**
|
234
238
|
* Rewrite the export names
|
235
|
-
* @param {
|
236
|
-
* @param {
|
239
|
+
* @param {object} state state
|
240
|
+
* @param {object} state.ast Module's ast
|
237
241
|
* @param {Module} state.module Module
|
238
242
|
* @param {ModuleGraph} state.moduleGraph module graph
|
239
243
|
* @param {Set<string>} state.externalExports Module
|
@@ -242,8 +246,11 @@ const rewriteImportedGlobals = state => bin => {
|
|
242
246
|
*/
|
243
247
|
const rewriteExportNames =
|
244
248
|
({ ast, moduleGraph, module, externalExports, runtime }) =>
|
245
|
-
bin =>
|
246
|
-
|
249
|
+
bin =>
|
250
|
+
editWithAST(ast, bin, {
|
251
|
+
/**
|
252
|
+
* @param {NodePath<ModuleExport>} path path
|
253
|
+
*/
|
247
254
|
ModuleExport(path) {
|
248
255
|
const isExternal = externalExports.has(path.node.name);
|
249
256
|
if (isExternal) {
|
@@ -257,25 +264,27 @@ const rewriteExportNames =
|
|
257
264
|
path.remove();
|
258
265
|
return;
|
259
266
|
}
|
260
|
-
path.node.name = usedName;
|
267
|
+
path.node.name = /** @type {string} */ (usedName);
|
261
268
|
}
|
262
269
|
});
|
263
|
-
};
|
264
270
|
|
265
271
|
/**
|
266
272
|
* Mangle import names and modules
|
267
|
-
* @param {
|
268
|
-
* @param {
|
273
|
+
* @param {object} state state
|
274
|
+
* @param {object} state.ast Module's ast
|
269
275
|
* @param {Map<string, UsedWasmDependency>} state.usedDependencyMap mappings to mangle names
|
270
276
|
* @returns {ArrayBufferTransform} transform
|
271
277
|
*/
|
272
278
|
const rewriteImports =
|
273
279
|
({ ast, usedDependencyMap }) =>
|
274
|
-
bin =>
|
275
|
-
|
280
|
+
bin =>
|
281
|
+
editWithAST(ast, bin, {
|
282
|
+
/**
|
283
|
+
* @param {NodePath<ModuleImport>} path path
|
284
|
+
*/
|
276
285
|
ModuleImport(path) {
|
277
286
|
const result = usedDependencyMap.get(
|
278
|
-
path.node.module
|
287
|
+
`${path.node.module}:${path.node.name}`
|
279
288
|
);
|
280
289
|
|
281
290
|
if (result !== undefined) {
|
@@ -284,15 +293,13 @@ const rewriteImports =
|
|
284
293
|
}
|
285
294
|
}
|
286
295
|
});
|
287
|
-
};
|
288
296
|
|
289
297
|
/**
|
290
298
|
* Add an init function.
|
291
299
|
*
|
292
300
|
* The init function fills the globals given input arguments.
|
293
|
-
*
|
294
|
-
* @param {
|
295
|
-
* @param {Object} state.ast Module's ast
|
301
|
+
* @param {object} state transformation state
|
302
|
+
* @param {object} state.ast Module's ast
|
296
303
|
* @param {t.Identifier} state.initFuncId identifier of the init function
|
297
304
|
* @param {t.Index} state.startAtFuncOffset index of the start function
|
298
305
|
* @param {t.ModuleImport[]} state.importedGlobals list of imported globals
|
@@ -318,11 +325,15 @@ const addInitFunction =
|
|
318
325
|
`${importedGlobal.module}.${importedGlobal.name}`
|
319
326
|
);
|
320
327
|
|
321
|
-
return t.funcParam(
|
328
|
+
return t.funcParam(
|
329
|
+
/** @type {string} */ (importedGlobal.descr.valtype),
|
330
|
+
id
|
331
|
+
);
|
322
332
|
});
|
323
333
|
|
334
|
+
/** @type {Instruction[]} */
|
324
335
|
const funcBody = [];
|
325
|
-
importedGlobals.
|
336
|
+
for (const [index, _importedGlobal] of importedGlobals.entries()) {
|
326
337
|
const args = [t.indexLiteral(index)];
|
327
338
|
const body = [
|
328
339
|
t.instruction("get_local", args),
|
@@ -330,7 +341,7 @@ const addInitFunction =
|
|
330
341
|
];
|
331
342
|
|
332
343
|
funcBody.push(...body);
|
333
|
-
}
|
344
|
+
}
|
334
345
|
|
335
346
|
if (typeof startAtFuncOffset === "number") {
|
336
347
|
funcBody.push(
|
@@ -344,6 +355,7 @@ const addInitFunction =
|
|
344
355
|
|
345
356
|
funcBody.push(t.instruction("end"));
|
346
357
|
|
358
|
+
/** @type {string[]} */
|
347
359
|
const funcResults = [];
|
348
360
|
|
349
361
|
// Code section
|
@@ -369,7 +381,7 @@ const addInitFunction =
|
|
369
381
|
* Extract mangle mappings from module
|
370
382
|
* @param {ModuleGraph} moduleGraph module graph
|
371
383
|
* @param {Module} module current module
|
372
|
-
* @param {boolean} mangle mangle imports
|
384
|
+
* @param {boolean | undefined} mangle mangle imports
|
373
385
|
* @returns {Map<string, UsedWasmDependency>} mappings to mangled names
|
374
386
|
*/
|
375
387
|
const getUsedDependencyMap = (moduleGraph, module, mangle) => {
|
@@ -383,14 +395,22 @@ const getUsedDependencyMap = (moduleGraph, module, mangle) => {
|
|
383
395
|
const dep = usedDep.dependency;
|
384
396
|
const request = dep.request;
|
385
397
|
const exportName = dep.name;
|
386
|
-
map.set(request
|
398
|
+
map.set(`${request}:${exportName}`, usedDep);
|
387
399
|
}
|
388
400
|
return map;
|
389
401
|
};
|
390
402
|
|
391
403
|
const TYPES = new Set(["webassembly"]);
|
392
404
|
|
405
|
+
/**
|
406
|
+
* @typedef {object} WebAssemblyGeneratorOptions
|
407
|
+
* @property {boolean} [mangleImports] mangle imports
|
408
|
+
*/
|
409
|
+
|
393
410
|
class WebAssemblyGenerator extends Generator {
|
411
|
+
/**
|
412
|
+
* @param {WebAssemblyGeneratorOptions} options options
|
413
|
+
*/
|
394
414
|
constructor(options) {
|
395
415
|
super();
|
396
416
|
this.options = options;
|
@@ -423,7 +443,7 @@ class WebAssemblyGenerator extends Generator {
|
|
423
443
|
* @returns {Source} generated code
|
424
444
|
*/
|
425
445
|
generate(module, { moduleGraph, runtime }) {
|
426
|
-
const bin = module.originalSource().source();
|
446
|
+
const bin = /** @type {Source} */ (module.originalSource()).source();
|
427
447
|
|
428
448
|
const initFuncId = t.identifier("");
|
429
449
|
|
@@ -19,6 +19,7 @@ const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDe
|
|
19
19
|
/** @typedef {import("../Dependency")} Dependency */
|
20
20
|
/** @typedef {import("../DependencyTemplates")} DependencyTemplates */
|
21
21
|
/** @typedef {import("../Generator").GenerateContext} GenerateContext */
|
22
|
+
/** @typedef {import("../Module")} Module */
|
22
23
|
/** @typedef {import("../NormalModule")} NormalModule */
|
23
24
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
24
25
|
|
@@ -55,7 +56,7 @@ class WebAssemblyJavascriptGenerator extends Generator {
|
|
55
56
|
runtimeRequirements,
|
56
57
|
runtime
|
57
58
|
} = generateContext;
|
58
|
-
/** @type {InitFragment[]} */
|
59
|
+
/** @type {InitFragment<InitFragment<string>>[]} */
|
59
60
|
const initFragments = [];
|
60
61
|
|
61
62
|
const exportsInfo = moduleGraph.getExportsInfo(module);
|
@@ -127,7 +128,7 @@ class WebAssemblyJavascriptGenerator extends Generator {
|
|
127
128
|
const defineStatement = Template.asString([
|
128
129
|
`${exportProp} = ${runtimeTemplate.exportFromImport({
|
129
130
|
moduleGraph,
|
130
|
-
module: moduleGraph.getModule(dep),
|
131
|
+
module: /** @type {Module} */ (moduleGraph.getModule(dep)),
|
131
132
|
request: dep.request,
|
132
133
|
importVar: importData.importVar,
|
133
134
|
originModule: module,
|
@@ -200,8 +201,8 @@ class WebAssemblyJavascriptGenerator extends Generator {
|
|
200
201
|
copyAllExports
|
201
202
|
? `${module.moduleArgument}.exports = wasmExports;`
|
202
203
|
: "for(var name in wasmExports) " +
|
203
|
-
|
204
|
-
|
204
|
+
"if(name) " +
|
205
|
+
`${module.exportsArgument}[name] = wasmExports[name];`,
|
205
206
|
"// exec imports from WebAssembly module (for esm order)",
|
206
207
|
importsCode,
|
207
208
|
"",
|
@@ -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,10 +14,12 @@ 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
|
|
20
|
-
const JS_COMPAT_TYPES = new Set(["i32", "f32", "f64"]);
|
22
|
+
const JS_COMPAT_TYPES = new Set(["i32", "i64", "f32", "f64"]);
|
21
23
|
|
22
24
|
/**
|
23
25
|
* @param {t.Signature} signature the func signature
|
@@ -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,13 @@ 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
|
-
|
93
|
-
|
100
|
+
const buildMeta = /** @type {BuildMeta} */ (state.module.buildMeta);
|
101
|
+
/** @type {Record<string, string> | undefined} */
|
102
|
+
let jsIncompatibleExports = (buildMeta.jsIncompatibleExports = undefined);
|
94
103
|
|
104
|
+
/** @type {TODO[]} */
|
95
105
|
const importedGlobals = [];
|
96
106
|
t.traverse(module, {
|
97
107
|
ModuleExport({ node }) {
|
@@ -109,7 +119,8 @@ class WebAssemblyParser extends Parser {
|
|
109
119
|
if (incompatibleType) {
|
110
120
|
if (jsIncompatibleExports === undefined) {
|
111
121
|
jsIncompatibleExports =
|
112
|
-
|
122
|
+
/** @type {BuildMeta} */
|
123
|
+
(state.module.buildMeta).jsIncompatibleExports = {};
|
113
124
|
}
|
114
125
|
jsIncompatibleExports[node.name] = incompatibleType;
|
115
126
|
}
|
@@ -118,7 +129,8 @@ class WebAssemblyParser extends Parser {
|
|
118
129
|
exports.push(node.name);
|
119
130
|
|
120
131
|
if (node.descr && node.descr.exportType === "Global") {
|
121
|
-
const refNode =
|
132
|
+
const refNode =
|
133
|
+
importedGlobals[/** @type {TODO} */ (node.descr.id.value)];
|
122
134
|
if (refNode) {
|
123
135
|
const dep = new WebAssemblyExportImportedDependency(
|
124
136
|
node.name,
|
@@ -157,12 +169,14 @@ class WebAssemblyParser extends Parser {
|
|
157
169
|
} else if (t.isTable(node.descr) === true) {
|
158
170
|
onlyDirectImport = "Table";
|
159
171
|
} else if (t.isFuncImportDescr(node.descr) === true) {
|
160
|
-
const incompatibleType = getJsIncompatibleType(
|
172
|
+
const incompatibleType = getJsIncompatibleType(
|
173
|
+
/** @type {t.Signature} */ (node.descr.signature)
|
174
|
+
);
|
161
175
|
if (incompatibleType) {
|
162
176
|
onlyDirectImport = `Non-JS-compatible Func Signature (${incompatibleType})`;
|
163
177
|
}
|
164
178
|
} else if (t.isGlobalType(node.descr) === true) {
|
165
|
-
const type = node.descr.valtype;
|
179
|
+
const type = /** @type {string} */ (node.descr.valtype);
|
166
180
|
if (!JS_COMPAT_TYPES.has(type)) {
|
167
181
|
onlyDirectImport = `Non-JS-compatible Global Type (${type})`;
|
168
182
|
}
|
@@ -11,7 +11,8 @@ const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDe
|
|
11
11
|
/** @typedef {import("../Module")} Module */
|
12
12
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
13
13
|
|
14
|
-
/**
|
14
|
+
/**
|
15
|
+
* @typedef {object} UsedWasmDependency
|
15
16
|
* @property {WebAssemblyImportDependency} dependency the dependency
|
16
17
|
* @property {string} name the export name
|
17
18
|
* @property {string} module the module name
|
@@ -22,7 +23,7 @@ const MANGLED_MODULE = "a";
|
|
22
23
|
/**
|
23
24
|
* @param {ModuleGraph} moduleGraph the module graph
|
24
25
|
* @param {Module} module the module
|
25
|
-
* @param {boolean} mangle mangle module and export names
|
26
|
+
* @param {boolean | undefined} mangle mangle module and export names
|
26
27
|
* @returns {UsedWasmDependency[]} used dependencies and (mangled) name
|
27
28
|
*/
|
28
29
|
const getUsedDependencies = (moduleGraph, module, mangle) => {
|
@@ -61,5 +62,5 @@ const getUsedDependencies = (moduleGraph, module, mangle) => {
|
|
61
62
|
return array;
|
62
63
|
};
|
63
64
|
|
64
|
-
exports.getUsedDependencies = getUsedDependencies;
|
65
|
-
exports.MANGLED_MODULE = MANGLED_MODULE;
|
65
|
+
module.exports.getUsedDependencies = getUsedDependencies;
|
66
|
+
module.exports.MANGLED_MODULE = MANGLED_MODULE;
|
@@ -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;
|