@depup/webpack 5.106.1-depup.0 → 5.109.2-depup.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 +9 -11
- package/bin/webpack.js +12 -0
- package/changes.json +16 -24
- package/hot/dev-server.js +2 -0
- package/lib/APIPlugin.js +60 -35
- package/lib/AsyncDependenciesBlock.js +3 -0
- package/lib/AutomaticPrefetchPlugin.js +6 -1
- package/lib/BannerPlugin.js +13 -5
- package/lib/Cache.js +27 -5
- package/lib/CacheFacade.js +41 -0
- package/lib/Chunk.js +71 -25
- package/lib/ChunkGraph.js +153 -19
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +27 -28
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +85 -37
- package/lib/Compilation.js +656 -112
- package/lib/Compiler.js +109 -35
- package/lib/ConcatenationScope.js +34 -4
- package/lib/ConditionalInitFragment.js +6 -0
- package/lib/ConstPlugin.js +15 -12
- package/lib/ContextExclusionPlugin.js +3 -1
- package/lib/ContextModule.js +345 -55
- package/lib/ContextModuleFactory.js +193 -51
- package/lib/ContextReplacementPlugin.js +8 -1
- package/lib/DefinePlugin.js +537 -139
- package/lib/DependenciesBlock.js +6 -1
- package/lib/Dependency.js +159 -11
- package/lib/DependencyTemplate.js +7 -1
- package/lib/DependencyTemplates.js +4 -0
- package/lib/DotenvPlugin.js +3 -0
- package/lib/DynamicEntryPlugin.js +3 -1
- package/lib/EntryOptionPlugin.js +42 -2
- package/lib/EntryPlugin.js +4 -1
- package/lib/Entrypoint.js +5 -1
- package/lib/EnvironmentPlugin.js +3 -2
- package/lib/ErrorHelpers.js +7 -0
- package/lib/EvalDevToolModulePlugin.js +3 -1
- package/lib/EvalSourceMapDevToolPlugin.js +11 -11
- package/lib/ExportsInfo.js +421 -113
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +381 -80
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +701 -175
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +115 -8
- package/lib/FlagEntryExportAsUsedPlugin.js +4 -1
- package/lib/Generator.js +24 -3
- package/lib/HotModuleReplacementPlugin.js +110 -44
- package/lib/IgnorePlugin.js +5 -2
- package/lib/IgnoreWarningsPlugin.js +2 -1
- package/lib/InitFragment.js +33 -30
- package/lib/JavascriptMetaInfoPlugin.js +9 -6
- package/lib/LazyBarrel.js +389 -0
- package/lib/LibraryTemplatePlugin.js +2 -1
- package/lib/LoaderOptionsPlugin.js +3 -1
- package/lib/LoaderTargetPlugin.js +3 -1
- package/lib/MainTemplate.js +15 -0
- package/lib/ManifestPlugin.js +9 -2
- package/lib/Module.js +121 -57
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +18 -4
- package/lib/ModuleGraph.js +69 -2
- package/lib/ModuleGraphConnection.js +9 -0
- package/lib/ModuleInfoHeaderPlugin.js +5 -0
- package/lib/ModuleNotFoundError.js +3 -83
- package/lib/ModuleProfile.js +27 -1
- package/lib/ModuleSourceTypeConstants.js +52 -19
- package/lib/ModuleTemplate.js +10 -0
- package/lib/ModuleTypeConstants.js +20 -4
- package/lib/MultiCompiler.js +59 -4
- package/lib/MultiStats.js +9 -0
- package/lib/MultiWatching.js +6 -0
- package/lib/NoEmitOnErrorsPlugin.js +1 -1
- package/lib/NodeStuffPlugin.js +78 -46
- package/lib/NormalModule.js +519 -206
- package/lib/NormalModuleFactory.js +156 -31
- package/lib/NormalModuleReplacementPlugin.js +3 -1
- package/lib/NullFactory.js +1 -0
- package/lib/OptionsApply.js +1 -0
- package/lib/Parser.js +3 -1
- package/lib/PlatformPlugin.js +2 -1
- package/lib/PrefetchPlugin.js +4 -1
- package/lib/ProgressPlugin.js +351 -161
- package/lib/ProvidePlugin.js +6 -3
- package/lib/RawModule.js +32 -16
- package/lib/RecordIdsPlugin.js +9 -0
- package/lib/RequestShortener.js +8 -0
- package/lib/ResolverFactory.js +5 -0
- package/lib/RuntimeGlobals.js +58 -5
- package/lib/RuntimeModule.js +22 -7
- package/lib/RuntimePlugin.js +123 -118
- package/lib/RuntimeTemplate.js +616 -37
- package/lib/SelfModuleFactory.js +3 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +2 -0
- package/lib/SourceMapDevToolPlugin.js +341 -63
- package/lib/Stats.js +6 -0
- package/lib/Template.js +52 -6
- package/lib/TemplatedPathPlugin.js +505 -138
- package/lib/UseStrictPlugin.js +3 -2
- package/lib/WarnCaseSensitiveModulesPlugin.js +72 -3
- package/lib/WarnDeprecatedOptionPlugin.js +6 -2
- package/lib/WarnNoModeSetPlugin.js +18 -2
- package/lib/WatchIgnorePlugin.js +5 -1
- package/lib/Watching.js +25 -3
- package/lib/WebpackError.js +3 -74
- package/lib/WebpackIsIncludedPlugin.js +4 -2
- package/lib/WebpackOptionsApply.js +88 -25
- package/lib/WebpackOptionsDefaulter.js +1 -0
- package/lib/asset/AssetBytesGenerator.js +28 -10
- package/lib/asset/AssetBytesParser.js +1 -0
- package/lib/asset/AssetGenerator.js +199 -60
- package/lib/asset/AssetModule.js +47 -0
- package/lib/asset/AssetModulesPlugin.js +115 -24
- package/lib/asset/AssetParser.js +4 -2
- package/lib/asset/AssetSourceGenerator.js +26 -8
- package/lib/asset/AssetSourceParser.js +1 -0
- package/lib/asset/RawDataUrlModule.js +23 -13
- package/lib/asset/WebManifestGenerator.js +164 -0
- package/lib/asset/WebManifestParser.js +130 -0
- package/lib/async-modules/AsyncModuleHelpers.js +1 -0
- package/lib/async-modules/AwaitDependenciesInitFragment.js +18 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/async-modules/isGeneratorLowered.js +26 -0
- package/lib/buildChunkGraph.js +107 -15
- package/lib/bun/BunTargetPlugin.js +42 -0
- package/lib/cache/AddBuildDependenciesPlugin.js +3 -1
- package/lib/cache/AddManagedPathsPlugin.js +5 -1
- package/lib/cache/IdleFileCachePlugin.js +6 -1
- package/lib/cache/MemoryCachePlugin.js +1 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +4 -1
- package/lib/cache/PackFileCacheStrategy.js +302 -12
- package/lib/cache/ResolverCachePlugin.js +12 -1
- package/lib/cache/getLazyHashedEtag.js +13 -2
- package/lib/cache/mergeEtags.js +4 -0
- package/lib/cli.js +142 -20
- package/lib/config/browserslistTargetHandler.js +141 -0
- package/lib/config/defaults.js +612 -43
- package/lib/config/defineConfig.js +31 -0
- package/lib/config/normalization.js +46 -1
- package/lib/config/target.js +200 -2
- package/lib/container/ContainerEntryDependency.js +2 -0
- package/lib/container/ContainerEntryModule.js +27 -14
- package/lib/container/ContainerEntryModuleFactory.js +1 -0
- package/lib/container/ContainerExposedDependency.js +6 -2
- package/lib/container/ContainerPlugin.js +2 -1
- package/lib/container/ContainerReferencePlugin.js +3 -2
- package/lib/container/FallbackDependency.js +9 -7
- package/lib/container/FallbackItemDependency.js +1 -0
- package/lib/container/FallbackModule.js +22 -9
- package/lib/container/FallbackModuleFactory.js +1 -0
- package/lib/container/HoistContainerReferencesPlugin.js +47 -55
- package/lib/container/ModuleFederationPlugin.js +21 -29
- package/lib/container/RemoteModule.js +33 -10
- package/lib/container/RemoteRuntimeModule.js +15 -12
- package/lib/container/RemoteToExternalDependency.js +1 -0
- package/lib/container/options.js +7 -0
- package/lib/css/CssGenerator.js +540 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +173 -81
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +371 -208
- package/lib/css/CssParser.js +3538 -1963
- package/lib/css/syntax.js +4155 -0
- package/lib/debug/ProfilingPlugin.js +33 -2
- package/lib/deno/DenoTargetPlugin.js +41 -0
- package/lib/dependencies/AMDDefineDependency.js +29 -17
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +19 -6
- package/lib/dependencies/AMDPlugin.js +6 -3
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -11
- package/lib/dependencies/AMDRequireContextDependency.js +10 -11
- package/lib/dependencies/AMDRequireDependenciesBlock.js +1 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +28 -14
- package/lib/dependencies/AMDRequireDependency.js +28 -20
- package/lib/dependencies/AMDRequireItemDependency.js +1 -0
- package/lib/dependencies/AMDRuntimeModules.js +3 -0
- package/lib/dependencies/CachedConstDependency.js +9 -1
- package/lib/dependencies/CommonJsDependencyHelpers.js +104 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +157 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +91 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +189 -24
- package/lib/dependencies/CommonJsPlugin.js +7 -4
- package/lib/dependencies/CommonJsRequireContextDependency.js +13 -13
- package/lib/dependencies/CommonJsRequireDependency.js +135 -13
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +60 -16
- package/lib/dependencies/ConstDependency.js +22 -12
- package/lib/dependencies/ContextDependency.js +13 -2
- package/lib/dependencies/ContextDependencyHelpers.js +7 -4
- package/lib/dependencies/ContextDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ContextDependencyTemplateAsRequireCall.js +1 -0
- package/lib/dependencies/ContextElementDependency.js +27 -14
- package/lib/dependencies/CreateRequireParserPlugin.js +14 -7
- package/lib/dependencies/CreateScriptUrlDependency.js +9 -7
- package/lib/dependencies/CriticalDependencyWarning.js +3 -1
- package/lib/dependencies/CssIcssExportDependency.js +681 -367
- package/lib/dependencies/CssIcssImportDependency.js +62 -17
- package/lib/dependencies/CssIcssSymbolDependency.js +36 -17
- package/lib/dependencies/CssImportDependency.js +37 -1
- package/lib/dependencies/CssUrlDependency.js +87 -14
- package/lib/dependencies/DelegatedSourceDependency.js +1 -0
- package/lib/dependencies/DllEntryDependency.js +12 -13
- package/lib/dependencies/DynamicExports.js +5 -0
- package/lib/dependencies/EntryDependency.js +1 -0
- package/lib/dependencies/ExportBindingInitFragment.js +164 -0
- package/lib/dependencies/ExportsInfoDependency.js +18 -12
- package/lib/dependencies/ExternalModuleDependency.js +13 -5
- package/lib/dependencies/ExternalModuleInitFragment.js +10 -5
- package/lib/dependencies/ExternalModuleInitFragmentDependency.js +19 -12
- package/lib/dependencies/HarmonyAcceptDependency.js +24 -26
- package/lib/dependencies/HarmonyAcceptImportDependency.js +2 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +33 -14
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +108 -30
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +34 -3
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +133 -43
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +268 -44
- package/lib/dependencies/HarmonyExportInitFragment.js +28 -20
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +88 -18
- package/lib/dependencies/HarmonyExports.js +6 -1
- package/lib/dependencies/HarmonyImportDependency.js +60 -4
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +427 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +146 -24
- package/lib/{HarmonyLinkingError.js → dependencies/HarmonyLinkingError.js} +6 -3
- package/lib/dependencies/HarmonyModulesPlugin.js +11 -1
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +2 -1
- package/lib/dependencies/HtmlEntryDependency.js +1295 -0
- package/lib/dependencies/HtmlInlineHtmlDependency.js +107 -0
- package/lib/dependencies/HtmlInlineScriptDependency.js +126 -0
- package/lib/dependencies/HtmlInlineStyleDependency.js +152 -0
- package/lib/dependencies/HtmlSourceDependency.js +172 -0
- package/lib/dependencies/ImportContextDependency.js +9 -9
- package/lib/dependencies/ImportDependency.js +92 -3
- package/lib/dependencies/ImportEagerDependency.js +2 -0
- package/lib/dependencies/ImportMetaContextDependency.js +1 -0
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +35 -19
- package/lib/dependencies/ImportMetaContextPlugin.js +40 -8
- package/lib/dependencies/ImportMetaGlobDependency.js +81 -0
- package/lib/dependencies/ImportMetaGlobDependencyParserPlugin.js +78 -0
- package/lib/dependencies/ImportMetaGlobHelpers.js +660 -0
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +2 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +2 -0
- package/lib/dependencies/ImportMetaPlugin.js +595 -209
- package/lib/dependencies/ImportMetaResolveDependency.js +90 -0
- package/lib/dependencies/ImportParserPlugin.js +114 -27
- package/lib/dependencies/ImportPhase.js +17 -11
- package/lib/dependencies/ImportPlugin.js +2 -1
- package/lib/dependencies/ImportWeakDependency.js +3 -0
- package/lib/dependencies/JsonExportsDependency.js +15 -10
- package/lib/dependencies/LoaderDependency.js +2 -0
- package/lib/dependencies/LoaderImportDependency.js +3 -0
- package/lib/dependencies/LoaderPlugin.js +9 -2
- package/lib/dependencies/LocalModule.js +15 -12
- package/lib/dependencies/LocalModuleDependency.js +15 -13
- package/lib/dependencies/LocalModulesHelpers.js +3 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +16 -10
- package/lib/dependencies/ModuleDependency.js +14 -0
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +1 -0
- package/lib/dependencies/ModuleDependencyTemplateAsRequireId.js +1 -0
- package/lib/dependencies/ModuleHotAcceptDependency.js +2 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +2 -0
- package/lib/dependencies/ModuleInitFragmentDependency.js +19 -11
- package/lib/dependencies/NullDependency.js +2 -0
- package/lib/dependencies/PrefetchDependency.js +1 -0
- package/lib/dependencies/ProvidedDependency.js +36 -27
- package/lib/dependencies/PureExpressionDependency.js +14 -10
- package/lib/dependencies/RequireContextDependency.js +1 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +2 -1
- package/lib/dependencies/RequireContextPlugin.js +2 -1
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +1 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +4 -6
- package/lib/dependencies/RequireEnsureDependency.js +16 -13
- package/lib/dependencies/RequireEnsureItemDependency.js +1 -0
- package/lib/dependencies/RequireEnsurePlugin.js +2 -1
- package/lib/dependencies/RequireHeaderDependency.js +7 -4
- package/lib/dependencies/RequireIncludeDependency.js +2 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +11 -12
- package/lib/dependencies/RequireIncludePlugin.js +2 -1
- package/lib/{RequireJsStuffPlugin.js → dependencies/RequireJsStuffPlugin.js} +9 -8
- package/lib/dependencies/RequireResolveContextDependency.js +10 -11
- package/lib/dependencies/RequireResolveDependency.js +2 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +8 -5
- package/lib/dependencies/RuntimeRequirementsDependency.js +11 -8
- package/lib/dependencies/StaticExportsDependency.js +13 -10
- package/lib/dependencies/SystemPlugin.js +9 -6
- package/lib/dependencies/SystemRuntimeModule.js +1 -0
- package/lib/dependencies/TopLevelAwaitDependency.js +93 -0
- package/lib/dependencies/URLContextDependency.js +8 -7
- package/lib/dependencies/URLDependency.js +157 -33
- package/lib/dependencies/URLPlugin.js +2 -0
- package/lib/dependencies/UnsupportedDependency.js +12 -13
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +15 -16
- package/lib/dependencies/WebAssemblyImportDependency.js +19 -18
- package/lib/dependencies/WebpackIsIncludedDependency.js +3 -0
- package/lib/dependencies/{WorkerPlugin.js → WorkerAndWorkletPlugin.js} +364 -114
- package/lib/dependencies/WorkerDependency.js +111 -27
- package/lib/dependencies/WorkletDependency.js +278 -0
- package/lib/dependencies/getFunctionExpression.js +1 -0
- package/lib/dependencies/processExportInfo.js +14 -11
- package/lib/{DelegatedModule.js → dll/DelegatedModule.js} +71 -44
- package/lib/{DelegatedModuleFactoryPlugin.js → dll/DelegatedModuleFactoryPlugin.js} +27 -4
- package/lib/{DelegatedPlugin.js → dll/DelegatedPlugin.js} +5 -3
- package/lib/{DllEntryPlugin.js → dll/DllEntryPlugin.js} +9 -5
- package/lib/{DllModule.js → dll/DllModule.js} +36 -24
- package/lib/{DllModuleFactory.js → dll/DllModuleFactory.js} +5 -4
- package/lib/{DllPlugin.js → dll/DllPlugin.js} +24 -6
- package/lib/{DllReferencePlugin.js → dll/DllReferencePlugin.js} +26 -18
- package/lib/{LibManifestPlugin.js → dll/LibManifestPlugin.js} +14 -10
- package/lib/electron/ElectronTargetPlugin.js +24 -5
- package/lib/{AbstractMethodError.js → errors/AbstractMethodError.js} +10 -1
- package/lib/{AsyncDependencyToInitialChunkError.js → errors/AsyncDependencyToInitialChunkError.js} +8 -3
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{ChunkRenderError.js → errors/ChunkRenderError.js} +1 -1
- package/lib/{CodeGenerationError.js → errors/CodeGenerationError.js} +1 -1
- package/lib/{CommentCompilationWarning.js → errors/CommentCompilationWarning.js} +9 -3
- package/lib/{ConcurrentCompilationError.js → errors/ConcurrentCompilationError.js} +5 -2
- package/lib/{EnvironmentNotSupportAsyncWarning.js → errors/EnvironmentNotSupportAsyncWarning.js} +5 -5
- package/lib/{HookWebpackError.js → errors/HookWebpackError.js} +20 -16
- package/lib/{IgnoreErrorModuleFactory.js → errors/IgnoreErrorModuleFactory.js} +7 -4
- package/lib/{InvalidDependenciesModuleWarning.js → errors/InvalidDependenciesModuleWarning.js} +6 -3
- package/lib/errors/JSONParseError.js +115 -0
- package/lib/errors/LoaderLoadingError.js +20 -0
- package/lib/{ModuleBuildError.js → errors/ModuleBuildError.js} +22 -16
- package/lib/{ModuleDependencyError.js → errors/ModuleDependencyError.js} +10 -3
- package/lib/{ModuleDependencyWarning.js → errors/ModuleDependencyWarning.js} +13 -5
- package/lib/{ModuleError.js → errors/ModuleError.js} +10 -14
- package/lib/{ModuleHashingError.js → errors/ModuleHashingError.js} +5 -1
- package/lib/errors/ModuleNotFoundError.js +94 -0
- package/lib/errors/ModuleParseError.js +141 -0
- package/lib/{ModuleRestoreError.js → errors/ModuleRestoreError.js} +4 -1
- package/lib/{ModuleStoreError.js → errors/ModuleStoreError.js} +5 -1
- package/lib/{ModuleWarning.js → errors/ModuleWarning.js} +13 -14
- package/lib/{NodeStuffInWebError.js → errors/NodeStuffInWebError.js} +7 -5
- package/lib/errors/NonErrorEmittedError.js +30 -0
- package/lib/{UnhandledSchemeError.js → errors/UnhandledSchemeError.js} +9 -2
- package/lib/{UnsupportedFeatureWarning.js → errors/UnsupportedFeatureWarning.js} +4 -3
- package/lib/errors/WebpackError.js +84 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -0
- package/lib/esm/ModuleChunkFormatPlugin.js +52 -15
- package/lib/esm/ModuleChunkLoadingPlugin.js +11 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +80 -52
- package/lib/hmr/HotModuleReplacement.runtime.js +175 -30
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +8 -0
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +173 -26
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +1 -0
- package/lib/hmr/LazyCompilationPlugin.js +154 -7
- package/lib/hmr/lazyCompilationBackend.js +53 -12
- package/lib/html/HtmlGenerator.js +1490 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1129 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9106 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +3 -1
- package/lib/ids/DeterministicChunkIdsPlugin.js +3 -1
- package/lib/ids/DeterministicModuleIdsPlugin.js +3 -1
- package/lib/ids/HashedModuleIdsPlugin.js +2 -1
- package/lib/ids/IdHelpers.js +49 -12
- package/lib/ids/NamedChunkIdsPlugin.js +3 -1
- package/lib/ids/NamedModuleIdsPlugin.js +3 -1
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/NaturalModuleIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +2 -1
- package/lib/ids/OccurrenceModuleIdsPlugin.js +4 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -1
- package/lib/index.js +66 -15
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +5 -6
- package/lib/javascript/BasicEvaluatedExpression.js +370 -49
- package/lib/javascript/ChunkFormatHelpers.js +2 -1
- package/lib/javascript/ChunkHelpers.js +1 -0
- package/lib/javascript/CommonJsChunkFormatPlugin.js +1 -1
- package/lib/javascript/EnableChunkLoadingPlugin.js +6 -1
- package/lib/javascript/JavascriptGenerator.js +213 -51
- package/lib/javascript/JavascriptModule.js +54 -0
- package/lib/javascript/JavascriptModulesPlugin.js +628 -198
- package/lib/javascript/JavascriptParser.js +1334 -471
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +5037 -0
- package/lib/json/JsonData.js +5 -0
- package/lib/json/JsonGenerator.js +21 -0
- package/lib/json/JsonModule.js +40 -0
- package/lib/json/JsonModulesPlugin.js +8 -1
- package/lib/json/JsonParser.js +18 -27
- package/lib/library/AbstractLibraryPlugin.js +17 -2
- package/lib/library/AmdLibraryPlugin.js +8 -0
- package/lib/library/AssignLibraryPlugin.js +21 -3
- package/lib/library/EnableLibraryPlugin.js +8 -2
- package/lib/library/ExportPropertyLibraryPlugin.js +10 -0
- package/lib/{FalseIIFEUmdWarning.js → library/FalseIIFEUmdWarning.js} +2 -1
- package/lib/library/JsonpLibraryPlugin.js +8 -0
- package/lib/library/ModuleLibraryPlugin.js +154 -7
- package/lib/library/SystemLibraryPlugin.js +11 -3
- package/lib/library/UmdLibraryPlugin.js +16 -0
- package/lib/loaders/LoaderRunner.js +714 -0
- package/lib/loaders/loadLoader.js +100 -0
- package/lib/logging/Logger.js +17 -0
- package/lib/logging/createConsoleLogger.js +7 -0
- package/lib/logging/runtime.js +2 -0
- package/lib/logging/truncateArgs.js +2 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +5 -1
- package/lib/node/NodeEnvironmentPlugin.js +7 -3
- package/lib/node/NodeSourcePlugin.js +1 -1
- package/lib/node/NodeTargetPlugin.js +4 -63
- package/lib/node/NodeTemplatePlugin.js +3 -1
- package/lib/node/NodeWatchFileSystem.js +40 -22
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +13 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +33 -3
- package/lib/node/ReadFileCompileWasmPlugin.js +28 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +21 -16
- package/lib/node/nodeBuiltins.js +80 -0
- package/lib/node/nodeConsole.js +116 -64
- package/lib/optimize/AggressiveMergingPlugin.js +22 -16
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +603 -130
- package/lib/optimize/ConstExportsPlugin.js +211 -0
- package/lib/optimize/EnsureChunkConditionsPlugin.js +2 -1
- package/lib/optimize/FlagIncludedChunksPlugin.js +15 -4
- package/lib/optimize/InlineExports.js +178 -0
- package/lib/optimize/InnerGraph.js +374 -262
- package/lib/optimize/InnerGraphPlugin.js +246 -117
- package/lib/optimize/LimitChunkCountPlugin.js +9 -0
- package/lib/optimize/MangleExportsPlugin.js +5 -1
- package/lib/optimize/MergeDuplicateChunksPlugin.js +2 -0
- package/lib/optimize/MinChunkSizePlugin.js +2 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -4
- package/lib/optimize/ModuleConcatenationPlugin.js +229 -55
- package/lib/optimize/RealContentHashPlugin.js +130 -52
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -1
- package/lib/optimize/RemoveParentModulesPlugin.js +3 -1
- package/lib/optimize/RuntimeChunkPlugin.js +2 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +381 -55
- package/lib/optimize/SplitChunksPlugin.js +200 -50
- package/lib/performance/AssetsOverSizeLimitWarning.js +3 -2
- package/lib/performance/EntrypointsOverSizeLimitWarning.js +3 -2
- package/lib/performance/NoAsyncChunksWarning.js +5 -3
- package/lib/performance/SizeLimitsPlugin.js +8 -2
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +21 -0
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +1 -0
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +5 -1
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +25 -13
- package/lib/prefetch/ResourceHintPlugin.js +687 -0
- package/lib/prefetch/ResourceHintRuntimeModule.js +149 -0
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +210 -0
- package/lib/prefetch/parseResourceHintOptions.js +103 -0
- package/lib/rules/BasicEffectRulePlugin.js +3 -0
- package/lib/rules/BasicMatcherRulePlugin.js +3 -0
- package/lib/rules/ObjectMatcherRulePlugin.js +3 -0
- package/lib/rules/RuleSetCompiler.js +132 -0
- package/lib/rules/UseEffectRulePlugin.js +10 -3
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +56 -0
- package/lib/runtime/AsyncModuleRuntimeModule.js +52 -33
- package/lib/runtime/AutoPublicPathRuntimeModule.js +22 -9
- package/lib/runtime/BaseUriRuntimeModule.js +1 -0
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -0
- package/lib/runtime/CommonJsWrapRuntimeModule.js +37 -0
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -1
- package/lib/runtime/CompatRuntimeModule.js +2 -0
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +7 -4
- package/lib/runtime/CreateScriptRuntimeModule.js +1 -0
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +1 -0
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +34 -4
- package/lib/runtime/EnsureChunkRuntimeModule.js +1 -0
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +88 -8
- package/lib/runtime/GetFullHashRuntimeModule.js +1 -0
- package/lib/runtime/GetMainFilenameRuntimeModule.js +1 -0
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +2 -1
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +59 -0
- package/lib/runtime/GlobalRuntimeModule.js +1 -0
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +2 -1
- package/lib/runtime/HelperRuntimeModule.js +5 -0
- package/lib/runtime/LoadScriptRuntimeModule.js +28 -37
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +354 -37
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -1
- package/lib/runtime/NonceRuntimeModule.js +1 -0
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +5 -4
- package/lib/runtime/PublicPathRuntimeModule.js +1 -0
- package/lib/runtime/RelativeUrlRuntimeModule.js +4 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +1 -0
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +38 -0
- package/lib/runtime/StartupChunkDependenciesPlugin.js +13 -1
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +2 -1
- package/lib/runtime/StartupEntrypointRuntimeModule.js +5 -3
- package/lib/runtime/SystemContextRuntimeModule.js +1 -0
- package/lib/runtime/ToBinaryRuntimeModule.js +1 -0
- package/lib/runtime/WorkerRuntimeModule.js +33 -0
- package/lib/schemes/DataUriPlugin.js +14 -2
- package/lib/schemes/FileUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +86 -4
- package/lib/schemes/VirtualUrlPlugin.js +8 -4
- package/lib/serialization/AggregateErrorSerializer.js +9 -6
- package/lib/serialization/ArraySerializer.js +6 -8
- package/lib/serialization/BinaryMiddleware.js +427 -1006
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +345 -59
- package/lib/serialization/MapObjectSerializer.js +7 -9
- package/lib/serialization/NullPrototypeObjectSerializer.js +9 -9
- package/lib/serialization/ObjectMiddleware.js +73 -13
- package/lib/serialization/PlainObjectSerializer.js +16 -8
- package/lib/serialization/RegExpObjectSerializer.js +4 -2
- package/lib/serialization/Serializer.js +6 -0
- package/lib/serialization/SerializerMiddleware.js +14 -2
- package/lib/serialization/SetObjectSerializer.js +6 -8
- package/lib/serialization/SingleItemMiddleware.js +3 -0
- package/lib/sharing/ConsumeSharedFallbackDependency.js +1 -0
- package/lib/sharing/ConsumeSharedModule.js +21 -7
- package/lib/sharing/ConsumeSharedPlugin.js +11 -11
- package/lib/sharing/ConsumeSharedRuntimeModule.js +55 -45
- package/lib/sharing/ProvideForSharedDependency.js +1 -0
- package/lib/sharing/ProvideSharedDependency.js +34 -15
- package/lib/sharing/ProvideSharedModule.js +42 -12
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -0
- package/lib/sharing/ProvideSharedPlugin.js +13 -8
- package/lib/sharing/SharePlugin.js +5 -1
- package/lib/sharing/ShareRuntimeModule.js +19 -16
- package/lib/sharing/resolveMatchedConfigs.js +6 -2
- package/lib/sharing/utils.js +9 -1
- package/lib/stats/DefaultStatsFactoryPlugin.js +289 -201
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +74 -170
- package/lib/stats/StatsFactory.js +70 -27
- package/lib/stats/StatsPrinter.js +16 -2
- package/lib/typescript/TypeScriptPlugin.js +210 -0
- package/lib/url/URLParserPlugin.js +111 -23
- package/lib/util/ArrayHelpers.js +1 -0
- package/lib/util/ArrayQueue.js +10 -5
- package/lib/util/AsyncQueue.js +154 -74
- package/lib/util/Hash.js +2 -2
- package/lib/util/IterableHelpers.js +3 -0
- package/lib/util/LazyBucketSortedSet.js +26 -0
- package/lib/util/LazySet.js +45 -4
- package/lib/util/LocConverter.js +64 -0
- package/lib/util/ParallelismFactorCalculator.js +1 -0
- package/lib/util/Queue.js +6 -3
- package/lib/util/Semaphore.js +15 -1
- package/lib/util/SetHelpers.js +4 -1
- package/lib/util/SortableSet.js +7 -1
- package/lib/util/SourceProcessor.js +119 -0
- package/lib/util/StackedCacheMap.js +20 -3
- package/lib/util/StackedMap.js +162 -43
- package/lib/util/StringXor.js +1 -1
- package/lib/util/TupleQueue.js +7 -3
- package/lib/util/TupleSet.js +14 -0
- package/lib/util/URLAbsoluteSpecifier.js +1 -0
- package/lib/util/WeakTupleMap.js +60 -1
- package/lib/util/binarySearchBounds.js +3 -2
- package/lib/util/chainedImports.js +3 -3
- package/lib/util/cleverMerge.js +19 -2
- package/lib/util/comparators.js +35 -4
- package/lib/util/compileBooleanMatcher.js +9 -0
- package/lib/util/concatenate.js +80 -24
- package/lib/util/conventions.js +46 -1
- package/lib/util/createHash.js +0 -1
- package/lib/util/createHooksRegistry.js +43 -0
- package/lib/util/createMappings.js +118 -0
- package/lib/util/dataURL.js +3 -2
- package/lib/util/deprecation.js +19 -0
- package/lib/util/deterministicGrouping.js +46 -17
- package/lib/util/extractSourceMap.js +2 -1
- package/lib/util/extractUrlAndGlobal.js +1 -0
- package/lib/util/findGraphRoots.js +7 -0
- package/lib/{formatLocation.js → util/formatLocation.js} +4 -2
- package/lib/{SizeFormatHelpers.js → util/formatSize.js} +10 -3
- package/lib/util/fs.js +87 -14
- package/lib/util/generateDebugId.js +1 -0
- package/lib/util/globUtils.js +710 -0
- package/lib/util/hash/BatchedHash.js +1 -0
- package/lib/util/hash/BulkUpdateHash.js +1 -0
- package/lib/util/hash/DebugHash.js +1 -0
- package/lib/util/hash/hash-digest.js +32 -15
- package/lib/util/hash/md4.js +1 -1
- package/lib/util/hash/wasm-hash.js +5 -0
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +118 -7
- package/lib/util/implicitTypeLoaderFallback.js +62 -0
- package/lib/util/internalSerializables.js +102 -60
- package/lib/util/magicComment.js +149 -7
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +2 -0
- package/lib/util/mimeTypes.js +176 -0
- package/lib/util/nonNumericOnlyHash.js +31 -1
- package/lib/util/numberHash.js +2 -2
- package/lib/util/parseJson.js +41 -0
- package/lib/util/processAsyncTree.js +8 -0
- package/lib/util/property.js +9 -2
- package/lib/util/publicPathPlaceholder.js +64 -0
- package/lib/util/registerExternalSerializer.js +24 -4
- package/lib/util/removeBOM.js +1 -0
- package/lib/util/runtime.js +32 -0
- package/lib/util/semver.js +15 -0
- package/lib/util/serialization.js +2 -0
- package/lib/util/smartGrouping.js +8 -0
- package/lib/util/source.js +23 -0
- package/lib/util/topologicalSort.js +69 -0
- package/lib/validateSchema.js +1 -0
- package/lib/wasm/EnableWasmLoadingPlugin.js +15 -1
- package/lib/wasm-async/AsyncWasmCompileRuntimeModule.js +25 -18
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +34 -22
- package/lib/wasm-async/AsyncWasmModule.js +77 -0
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +6 -0
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +6 -1
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +22 -126
- package/lib/wasm-async/AsyncWebAssemblyParser.js +3 -2
- package/lib/wasm-async/UniversalCompileAsyncWasmPlugin.js +13 -2
- package/lib/wasm-sync/SyncWasmModule.js +39 -0
- package/lib/wasm-sync/UnsupportedWebAssemblyFeatureError.js +7 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +86 -19
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +4 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +27 -1
- package/lib/wasm-sync/WebAssemblyInInitialChunkError.js +9 -3
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +4 -0
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +20 -1
- package/lib/wasm-sync/WebAssemblyParser.js +9 -3
- package/lib/wasm-sync/WebAssemblyUtils.js +2 -0
- package/lib/web/FetchCompileAsyncWasmPlugin.js +29 -1
- package/lib/web/FetchCompileWasmPlugin.js +27 -1
- package/lib/web/JsonpChunkLoadingPlugin.js +11 -1
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +58 -64
- package/lib/web/JsonpTemplatePlugin.js +2 -1
- package/lib/webpack.js +78 -1
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +10 -1
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +15 -10
- package/lib/webworker/WebWorkerTemplatePlugin.js +1 -1
- package/module.d.ts +21 -0
- package/package.json +79 -77
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +1173 -80
- package/schemas/plugins/{DllPlugin.check.d.ts → HtmlGeneratorOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlGeneratorOptions.check.js +6 -0
- package/schemas/plugins/HtmlGeneratorOptions.json +3 -0
- package/schemas/plugins/{DllReferencePlugin.check.d.ts → HtmlParserOptions.check.d.ts} +1 -1
- package/schemas/plugins/HtmlParserOptions.check.js +6 -0
- package/schemas/plugins/HtmlParserOptions.json +3 -0
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/ProgressPlugin.json +38 -0
- 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 +2 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +7 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +6 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.json +3 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -1
- package/schemas/plugins/css/CssParserOptions.check.js +1 -1
- package/schemas/plugins/dll/DllPlugin.check.d.ts +7 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +7 -0
- package/types.d.ts +11053 -3019
- package/lib/CaseSensitiveModulesWarning.js +0 -72
- package/lib/GraphHelpers.js +0 -46
- package/lib/ModuleParseError.js +0 -125
- package/lib/NoModeWarning.js +0 -23
- package/lib/css/CssMergeStyleSheetsRuntimeModule.js +0 -56
- package/lib/css/walkCssTokens.js +0 -1843
- package/lib/util/AppendOnlyStackedSet.js +0 -78
- /package/schemas/plugins/{DllPlugin.check.js → dll/DllPlugin.check.js} +0 -0
- /package/schemas/plugins/{DllPlugin.json → dll/DllPlugin.json} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.check.js → dll/DllReferencePlugin.check.js} +0 -0
- /package/schemas/plugins/{DllReferencePlugin.json → dll/DllReferencePlugin.json} +0 -0
|
@@ -6,15 +6,14 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const { SyncWaterfallHook } = require("tapable");
|
|
9
|
-
const Compilation = require("../Compilation");
|
|
10
9
|
const Generator = require("../Generator");
|
|
11
|
-
const { tryRunOrWebpackError } = require("../HookWebpackError");
|
|
12
10
|
const { WEBASSEMBLY_MODULE_TYPE_ASYNC } = require("../ModuleTypeConstants");
|
|
13
|
-
const NormalModule = require("../NormalModule");
|
|
14
11
|
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
|
|
12
|
+
const { tryRunOrWebpackError } = require("../errors/HookWebpackError");
|
|
15
13
|
const { compareModulesByFullName } = require("../util/comparators");
|
|
16
|
-
const
|
|
14
|
+
const createHooksRegistry = require("../util/createHooksRegistry");
|
|
17
15
|
const memoize = require("../util/memoize");
|
|
16
|
+
const AsyncWasmModule = require("./AsyncWasmModule");
|
|
18
17
|
|
|
19
18
|
/** @typedef {import("webpack-sources").Source} Source */
|
|
20
19
|
/** @typedef {import("../Chunk")} Chunk */
|
|
@@ -23,13 +22,9 @@ const memoize = require("../util/memoize");
|
|
|
23
22
|
/** @typedef {import("../Compiler")} Compiler */
|
|
24
23
|
/** @typedef {import("../DependencyTemplates")} DependencyTemplates */
|
|
25
24
|
/** @typedef {import("../Module")} Module */
|
|
26
|
-
/** @typedef {import("../dependencies/ImportPhase").ImportPhaseName} ImportPhaseName */
|
|
27
|
-
/** @typedef {import("../NormalModule").NormalModuleCreateData} NormalModuleCreateData */
|
|
28
25
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
29
26
|
/** @typedef {import("../RuntimeTemplate")} RuntimeTemplate */
|
|
30
|
-
/** @typedef {import("../WebpackError")} WebpackError */
|
|
31
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectDeserializerContext} ObjectDeserializerContext */
|
|
32
|
-
/** @typedef {import("../serialization/ObjectMiddleware").ObjectSerializerContext} ObjectSerializerContext */
|
|
27
|
+
/** @typedef {import("../errors/WebpackError")} WebpackError */
|
|
33
28
|
|
|
34
29
|
const getAsyncWebAssemblyGenerator = memoize(() =>
|
|
35
30
|
require("./AsyncWebAssemblyGenerator")
|
|
@@ -41,94 +36,8 @@ const getAsyncWebAssemblyParser = memoize(() =>
|
|
|
41
36
|
require("./AsyncWebAssemblyParser")
|
|
42
37
|
);
|
|
43
38
|
|
|
44
|
-
/** @typedef {NormalModule & { phase: ImportPhaseName | undefined }} AsyncWasmModuleClass */
|
|
45
|
-
|
|
46
|
-
class AsyncWasmModule extends NormalModule {
|
|
47
|
-
/**
|
|
48
|
-
* @param {NormalModuleCreateData & { phase: ImportPhaseName | undefined }} options options object
|
|
49
|
-
*/
|
|
50
|
-
constructor(options) {
|
|
51
|
-
super(options);
|
|
52
|
-
this.phase = options.phase;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* @returns {string} a unique identifier of the module
|
|
57
|
-
*/
|
|
58
|
-
identifier() {
|
|
59
|
-
let str = super.identifier();
|
|
60
|
-
|
|
61
|
-
if (this.phase) {
|
|
62
|
-
str = `${str}|${this.phase}`;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
return str;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Assuming this module is in the cache. Update the (cached) module with
|
|
70
|
-
* the fresh module from the factory. Usually updates internal references
|
|
71
|
-
* and properties.
|
|
72
|
-
* @param {Module} module fresh module
|
|
73
|
-
* @returns {void}
|
|
74
|
-
*/
|
|
75
|
-
updateCacheModule(module) {
|
|
76
|
-
super.updateCacheModule(module);
|
|
77
|
-
const m = /** @type {AsyncWasmModule} */ (module);
|
|
78
|
-
this.phase = m.phase;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* @param {ObjectSerializerContext} context context
|
|
83
|
-
*/
|
|
84
|
-
serialize(context) {
|
|
85
|
-
const { write } = context;
|
|
86
|
-
write(this.phase);
|
|
87
|
-
super.serialize(context);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* @param {ObjectDeserializerContext} context context
|
|
92
|
-
* @returns {AsyncWasmModule} the deserialized object
|
|
93
|
-
*/
|
|
94
|
-
static deserialize(context) {
|
|
95
|
-
const obj = new AsyncWasmModule({
|
|
96
|
-
// will be deserialized by Module
|
|
97
|
-
layer: /** @type {EXPECTED_ANY} */ (null),
|
|
98
|
-
type: "",
|
|
99
|
-
// will be filled by updateCacheModule
|
|
100
|
-
resource: "",
|
|
101
|
-
context: "",
|
|
102
|
-
request: /** @type {EXPECTED_ANY} */ (null),
|
|
103
|
-
userRequest: /** @type {EXPECTED_ANY} */ (null),
|
|
104
|
-
rawRequest: /** @type {EXPECTED_ANY} */ (null),
|
|
105
|
-
loaders: /** @type {EXPECTED_ANY} */ (null),
|
|
106
|
-
matchResource: /** @type {EXPECTED_ANY} */ (null),
|
|
107
|
-
parser: /** @type {EXPECTED_ANY} */ (null),
|
|
108
|
-
parserOptions: /** @type {EXPECTED_ANY} */ (null),
|
|
109
|
-
generator: /** @type {EXPECTED_ANY} */ (null),
|
|
110
|
-
generatorOptions: /** @type {EXPECTED_ANY} */ (null),
|
|
111
|
-
resolveOptions: /** @type {EXPECTED_ANY} */ (null),
|
|
112
|
-
extractSourceMap: /** @type {EXPECTED_ANY} */ (null),
|
|
113
|
-
phase: /** @type {EXPECTED_ANY} */ (null)
|
|
114
|
-
});
|
|
115
|
-
obj.deserialize(context);
|
|
116
|
-
return obj;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* @param {ObjectDeserializerContext} context context
|
|
121
|
-
*/
|
|
122
|
-
deserialize(context) {
|
|
123
|
-
const { read } = context;
|
|
124
|
-
this.phase = read();
|
|
125
|
-
super.deserialize(context);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
makeSerializable(AsyncWasmModule, "webpack/lib/wasm-async/AsyncWasmModule");
|
|
130
|
-
|
|
131
39
|
/**
|
|
40
|
+
* Defines the web assembly render context type used by this module.
|
|
132
41
|
* @typedef {object} WebAssemblyRenderContext
|
|
133
42
|
* @property {Chunk} chunk the chunk
|
|
134
43
|
* @property {DependencyTemplates} dependencyTemplates the dependency templates
|
|
@@ -139,46 +48,22 @@ makeSerializable(AsyncWasmModule, "webpack/lib/wasm-async/AsyncWasmModule");
|
|
|
139
48
|
*/
|
|
140
49
|
|
|
141
50
|
/**
|
|
51
|
+
* Defines the compilation hooks type used by this module.
|
|
142
52
|
* @typedef {object} CompilationHooks
|
|
143
53
|
* @property {SyncWaterfallHook<[Source, Module, WebAssemblyRenderContext]>} renderModuleContent
|
|
144
54
|
*/
|
|
145
55
|
|
|
146
56
|
/**
|
|
57
|
+
* Defines the async web assembly modules plugin options type used by this module.
|
|
147
58
|
* @typedef {object} AsyncWebAssemblyModulesPluginOptions
|
|
148
59
|
* @property {boolean=} mangleImports mangle imports
|
|
149
60
|
*/
|
|
150
61
|
|
|
151
|
-
/** @type {WeakMap<Compilation, CompilationHooks>} */
|
|
152
|
-
const compilationHooksMap = new WeakMap();
|
|
153
|
-
|
|
154
62
|
const PLUGIN_NAME = "AsyncWebAssemblyModulesPlugin";
|
|
155
63
|
|
|
156
64
|
class AsyncWebAssemblyModulesPlugin {
|
|
157
65
|
/**
|
|
158
|
-
*
|
|
159
|
-
* @returns {CompilationHooks} the attached hooks
|
|
160
|
-
*/
|
|
161
|
-
static getCompilationHooks(compilation) {
|
|
162
|
-
if (!(compilation instanceof Compilation)) {
|
|
163
|
-
throw new TypeError(
|
|
164
|
-
"The 'compilation' argument must be an instance of Compilation"
|
|
165
|
-
);
|
|
166
|
-
}
|
|
167
|
-
let hooks = compilationHooksMap.get(compilation);
|
|
168
|
-
if (hooks === undefined) {
|
|
169
|
-
hooks = {
|
|
170
|
-
renderModuleContent: new SyncWaterfallHook([
|
|
171
|
-
"source",
|
|
172
|
-
"module",
|
|
173
|
-
"renderContext"
|
|
174
|
-
])
|
|
175
|
-
};
|
|
176
|
-
compilationHooksMap.set(compilation, hooks);
|
|
177
|
-
}
|
|
178
|
-
return hooks;
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
66
|
+
* Creates an instance of AsyncWebAssemblyModulesPlugin.
|
|
182
67
|
* @param {AsyncWebAssemblyModulesPluginOptions} options options
|
|
183
68
|
*/
|
|
184
69
|
constructor(options) {
|
|
@@ -187,7 +72,7 @@ class AsyncWebAssemblyModulesPlugin {
|
|
|
187
72
|
}
|
|
188
73
|
|
|
189
74
|
/**
|
|
190
|
-
*
|
|
75
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
191
76
|
* @param {Compiler} compiler the compiler instance
|
|
192
77
|
* @returns {void}
|
|
193
78
|
*/
|
|
@@ -208,8 +93,7 @@ class AsyncWebAssemblyModulesPlugin {
|
|
|
208
93
|
PLUGIN_NAME,
|
|
209
94
|
(createData, resolveData) =>
|
|
210
95
|
new AsyncWasmModule({
|
|
211
|
-
|
|
212
|
-
(createData),
|
|
96
|
+
...createData,
|
|
213
97
|
phase: resolveData.phase
|
|
214
98
|
})
|
|
215
99
|
);
|
|
@@ -286,6 +170,7 @@ class AsyncWebAssemblyModulesPlugin {
|
|
|
286
170
|
}
|
|
287
171
|
|
|
288
172
|
/**
|
|
173
|
+
* Renders the newly generated source from rendering.
|
|
289
174
|
* @param {Module} module the rendered module
|
|
290
175
|
* @param {WebAssemblyRenderContext} renderContext options object
|
|
291
176
|
* @param {CompilationHooks} hooks hooks
|
|
@@ -311,4 +196,15 @@ class AsyncWebAssemblyModulesPlugin {
|
|
|
311
196
|
}
|
|
312
197
|
}
|
|
313
198
|
|
|
199
|
+
AsyncWebAssemblyModulesPlugin.getCompilationHooks = createHooksRegistry(
|
|
200
|
+
() =>
|
|
201
|
+
/** @type {CompilationHooks} */ ({
|
|
202
|
+
renderModuleContent: new SyncWaterfallHook([
|
|
203
|
+
"source",
|
|
204
|
+
"module",
|
|
205
|
+
"renderContext"
|
|
206
|
+
])
|
|
207
|
+
})
|
|
208
|
+
);
|
|
209
|
+
|
|
314
210
|
module.exports = AsyncWebAssemblyModulesPlugin;
|
|
@@ -7,12 +7,12 @@
|
|
|
7
7
|
|
|
8
8
|
const t = require("@webassemblyjs/ast");
|
|
9
9
|
const { decode } = require("@webassemblyjs/wasm-parser");
|
|
10
|
-
const EnvironmentNotSupportAsyncWarning = require("../EnvironmentNotSupportAsyncWarning");
|
|
11
10
|
const Parser = require("../Parser");
|
|
12
11
|
const StaticExportsDependency = require("../dependencies/StaticExportsDependency");
|
|
13
12
|
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
|
|
13
|
+
const EnvironmentNotSupportAsyncWarning = require("../errors/EnvironmentNotSupportAsyncWarning");
|
|
14
14
|
|
|
15
|
-
/** @typedef {import("./
|
|
15
|
+
/** @typedef {import("./AsyncWasmModule")} AsyncWasmModule */
|
|
16
16
|
/** @typedef {import("../Module").BuildInfo} BuildInfo */
|
|
17
17
|
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
|
18
18
|
/** @typedef {import("../NormalModule")} NormalModule */
|
|
@@ -31,6 +31,7 @@ const decoderOpts = {
|
|
|
31
31
|
|
|
32
32
|
class WebAssemblyParser extends Parser {
|
|
33
33
|
/**
|
|
34
|
+
* Parses the provided source and updates the parser state.
|
|
34
35
|
* @param {string | Buffer | PreparsedAst} source the source to parse
|
|
35
36
|
* @param {ParserState} state the parser state
|
|
36
37
|
* @returns {ParserState} the parser state
|
|
@@ -16,9 +16,14 @@ const AsyncWasmLoadingRuntimeModule = require("../wasm-async/AsyncWasmLoadingRun
|
|
|
16
16
|
|
|
17
17
|
const PLUGIN_NAME = "UniversalCompileAsyncWasmPlugin";
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* Enables async WebAssembly loading that works in both browser-like and Node.js
|
|
21
|
+
* environments by selecting the appropriate binary-loading strategy at runtime.
|
|
22
|
+
*/
|
|
19
23
|
class UniversalCompileAsyncWasmPlugin {
|
|
20
24
|
/**
|
|
21
|
-
*
|
|
25
|
+
* Registers compilation hooks that attach the universal async wasm runtime
|
|
26
|
+
* to chunks using `wasmLoading: "universal"`.
|
|
22
27
|
* @param {Compiler} compiler the compiler instance
|
|
23
28
|
* @returns {void}
|
|
24
29
|
*/
|
|
@@ -26,6 +31,8 @@ class UniversalCompileAsyncWasmPlugin {
|
|
|
26
31
|
compiler.hooks.thisCompilation.tap(PLUGIN_NAME, (compilation) => {
|
|
27
32
|
const globalWasmLoading = compilation.outputOptions.wasmLoading;
|
|
28
33
|
/**
|
|
34
|
+
* Determines whether the chunk should use the universal async wasm
|
|
35
|
+
* loading backend.
|
|
29
36
|
* @param {Chunk} chunk chunk
|
|
30
37
|
* @returns {boolean} true, if wasm loading is enabled for the chunk
|
|
31
38
|
*/
|
|
@@ -44,15 +51,19 @@ class UniversalCompileAsyncWasmPlugin {
|
|
|
44
51
|
"}"
|
|
45
52
|
]);
|
|
46
53
|
/**
|
|
54
|
+
* Generates setup code that decides whether the current environment can
|
|
55
|
+
* use `fetch` and captures the wasm module URL.
|
|
47
56
|
* @param {string} path path
|
|
48
57
|
* @returns {string} code
|
|
49
58
|
*/
|
|
50
59
|
const generateBeforeLoadBinaryCode = (path) =>
|
|
51
60
|
Template.asString([
|
|
52
|
-
|
|
61
|
+
`var useFetch = ${compilation.runtimeTemplate.isWebLikePlatformExpression()};`,
|
|
53
62
|
`var wasmUrl = ${path};`
|
|
54
63
|
]);
|
|
55
64
|
/**
|
|
65
|
+
* Generates the runtime expression that fetches the binary in browsers
|
|
66
|
+
* or reads it from the filesystem in Node.js.
|
|
56
67
|
* @type {(path: string) => string}
|
|
57
68
|
*/
|
|
58
69
|
const generateLoadBinaryCode = () =>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
|
|
7
|
+
const NormalModule = require("../NormalModule");
|
|
8
|
+
const makeSerializable = require("../util/makeSerializable");
|
|
9
|
+
|
|
10
|
+
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
|
11
|
+
/** @typedef {import("../NormalModule").NormalModuleCreateData} NormalModuleCreateData */
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* Defines the build meta properties specific to sync wasm modules.
|
|
15
|
+
* @typedef {object} KnownSyncWasmModuleBuildMeta
|
|
16
|
+
* @property {Record<string, string>=} jsIncompatibleExports
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/** @typedef {BuildMeta & KnownSyncWasmModuleBuildMeta} SyncWasmModuleBuildMeta */
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Module class for `webassembly/sync` modules. Wasm-specific properties should live here instead of `NormalModule`.
|
|
23
|
+
*/
|
|
24
|
+
class SyncWasmModule extends NormalModule {
|
|
25
|
+
/**
|
|
26
|
+
* @param {NormalModuleCreateData} options options object
|
|
27
|
+
*/
|
|
28
|
+
constructor(options) {
|
|
29
|
+
super(options);
|
|
30
|
+
|
|
31
|
+
// Redeclared with the sync wasm specific shape
|
|
32
|
+
/** @type {SyncWasmModuleBuildMeta | undefined} */
|
|
33
|
+
this.buildMeta = undefined;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
makeSerializable(SyncWasmModule, "webpack/lib/wasm-sync/SyncWasmModule");
|
|
38
|
+
|
|
39
|
+
module.exports = SyncWasmModule;
|
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
"use strict";
|
|
6
6
|
|
|
7
|
-
const WebpackError = require("../WebpackError");
|
|
7
|
+
const WebpackError = require("../errors/WebpackError");
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
class UnsupportedWebAssemblyFeatureError extends WebpackError {
|
|
10
10
|
/**
|
|
11
|
+
* Creates an instance of UnsupportedWebAssemblyFeatureError.
|
|
11
12
|
* @param {string} message Error message
|
|
12
13
|
*/
|
|
13
14
|
constructor(message) {
|
|
@@ -15,6 +16,9 @@ module.exports = class UnsupportedWebAssemblyFeatureError extends WebpackError {
|
|
|
15
16
|
|
|
16
17
|
/** @type {string} */
|
|
17
18
|
this.name = "UnsupportedWebAssemblyFeatureError";
|
|
19
|
+
/** @type {boolean} */
|
|
18
20
|
this.hideStack = true;
|
|
19
21
|
}
|
|
20
|
-
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
module.exports = UnsupportedWebAssemblyFeatureError;
|
|
@@ -239,12 +239,16 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
|
239
239
|
}) {
|
|
240
240
|
super("wasm chunk loading", RuntimeModule.STAGE_ATTACH);
|
|
241
241
|
this.generateLoadBinaryCode = generateLoadBinaryCode;
|
|
242
|
+
/** @type {boolean | undefined} */
|
|
242
243
|
this.supportsStreaming = supportsStreaming;
|
|
244
|
+
/** @type {boolean | undefined} */
|
|
243
245
|
this.mangleImports = mangleImports;
|
|
246
|
+
/** @type {ReadOnlyRuntimeRequirements} */
|
|
244
247
|
this._runtimeRequirements = runtimeRequirements;
|
|
245
248
|
}
|
|
246
249
|
|
|
247
250
|
/**
|
|
251
|
+
* Generates runtime code for this runtime module.
|
|
248
252
|
* @returns {string | null} runtime code
|
|
249
253
|
*/
|
|
250
254
|
generate() {
|
|
@@ -253,7 +257,7 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
|
253
257
|
RuntimeGlobals.hmrDownloadUpdateHandlers
|
|
254
258
|
);
|
|
255
259
|
const compilation = /** @type {Compilation} */ (this.compilation);
|
|
256
|
-
const { moduleGraph, outputOptions } = compilation;
|
|
260
|
+
const { moduleGraph, outputOptions, runtimeTemplate } = compilation;
|
|
257
261
|
const chunkGraph = /** @type {ChunkGraph} */ (this.chunkGraph);
|
|
258
262
|
const chunk = /** @type {Chunk} */ (this.chunk);
|
|
259
263
|
const wasmModules = getAllWasmModules(moduleGraph, chunkGraph, chunk);
|
|
@@ -280,12 +284,16 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
|
280
284
|
mangleImports
|
|
281
285
|
? `{ ${JSON.stringify(WebAssemblyUtils.MANGLED_MODULE)}: ${content} }`
|
|
282
286
|
: content;
|
|
287
|
+
// Opt-in fallback to non-streaming when the server serves wasm with a wrong MIME type.
|
|
288
|
+
const streamingFallback = outputOptions.wasmStreamingFallback;
|
|
289
|
+
const streamingMimeFallbackWarning =
|
|
290
|
+
'console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n", e);';
|
|
283
291
|
const wasmModuleSrcPath = compilation.getPath(
|
|
284
292
|
JSON.stringify(outputOptions.webassemblyModuleFilename),
|
|
285
293
|
{
|
|
286
294
|
hash: `" + ${RuntimeGlobals.getFullHash}() + "`,
|
|
287
295
|
hashWithLength: (length) =>
|
|
288
|
-
`" + ${RuntimeGlobals.getFullHash}
|
|
296
|
+
`" + ${RuntimeGlobals.getFullHash}().slice(0, ${length}) + "`,
|
|
289
297
|
module: {
|
|
290
298
|
id: '" + wasmModuleId + "',
|
|
291
299
|
hash: `" + ${JSON.stringify(
|
|
@@ -314,8 +322,8 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
|
314
322
|
return Template.asString([
|
|
315
323
|
"// object to store loaded and loading wasm modules",
|
|
316
324
|
`var installedWasmModules = ${
|
|
317
|
-
stateExpression ?
|
|
318
|
-
}
|
|
325
|
+
stateExpression ? runtimeTemplate.assignOr(stateExpression, "{}") : "{}"
|
|
326
|
+
};`,
|
|
319
327
|
"",
|
|
320
328
|
// This function is used to delay reading the installed wasm module promises
|
|
321
329
|
// by a microtask. Sorting them doesn't help because there are edge cases where
|
|
@@ -356,24 +364,83 @@ class WasmChunkLoadingRuntimeModule extends RuntimeModule {
|
|
|
356
364
|
`var req = ${this.generateLoadBinaryCode(wasmModuleSrcPath)};`,
|
|
357
365
|
"var promise;",
|
|
358
366
|
this.supportsStreaming
|
|
359
|
-
?
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
"promise = Promise.all([WebAssembly.compileStreaming(req), importObject]).then(function(items) {",
|
|
367
|
+
? streamingFallback
|
|
368
|
+
? Template.asString([
|
|
369
|
+
"if(importObject && typeof importObject.then === 'function' && typeof WebAssembly.compileStreaming === 'function') {",
|
|
363
370
|
Template.indent([
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
371
|
+
"promise = req.then(function(res) {",
|
|
372
|
+
Template.indent([
|
|
373
|
+
"return Promise.all([WebAssembly.compileStreaming(res), importObject]).then(function(items) {",
|
|
374
|
+
Template.indent([
|
|
375
|
+
`return WebAssembly.instantiate(items[0], ${createImportObject(
|
|
376
|
+
"items[1]"
|
|
377
|
+
)});`
|
|
378
|
+
]),
|
|
379
|
+
"}, function(e) {",
|
|
380
|
+
Template.indent([
|
|
381
|
+
'if(res.headers.get("Content-Type") !== "application/wasm") {',
|
|
382
|
+
Template.indent([
|
|
383
|
+
streamingMimeFallbackWarning,
|
|
384
|
+
"return Promise.all([res.arrayBuffer().then(function(bytes) { return WebAssembly.compile(bytes); }), importObject]).then(function(items) {",
|
|
385
|
+
Template.indent([
|
|
386
|
+
`return WebAssembly.instantiate(items[0], ${createImportObject(
|
|
387
|
+
"items[1]"
|
|
388
|
+
)});`
|
|
389
|
+
]),
|
|
390
|
+
"});"
|
|
391
|
+
]),
|
|
392
|
+
"}",
|
|
393
|
+
"throw e;"
|
|
394
|
+
]),
|
|
395
|
+
"});"
|
|
396
|
+
]),
|
|
397
|
+
"});"
|
|
367
398
|
]),
|
|
368
|
-
"})
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
399
|
+
"} else if(typeof WebAssembly.instantiateStreaming === 'function') {",
|
|
400
|
+
Template.indent([
|
|
401
|
+
"promise = req.then(function(res) {",
|
|
402
|
+
Template.indent([
|
|
403
|
+
`return WebAssembly.instantiateStreaming(res, ${createImportObject(
|
|
404
|
+
"importObject"
|
|
405
|
+
)}).then(undefined, function(e) {`,
|
|
406
|
+
Template.indent([
|
|
407
|
+
'if(res.headers.get("Content-Type") !== "application/wasm") {',
|
|
408
|
+
Template.indent([
|
|
409
|
+
streamingMimeFallbackWarning,
|
|
410
|
+
"return res.arrayBuffer().then(function(bytes) {",
|
|
411
|
+
Template.indent([
|
|
412
|
+
`return WebAssembly.instantiate(bytes, ${createImportObject(
|
|
413
|
+
"importObject"
|
|
414
|
+
)});`
|
|
415
|
+
]),
|
|
416
|
+
"});"
|
|
417
|
+
]),
|
|
418
|
+
"}",
|
|
419
|
+
"throw e;"
|
|
420
|
+
]),
|
|
421
|
+
"});"
|
|
422
|
+
]),
|
|
423
|
+
"});"
|
|
424
|
+
])
|
|
425
|
+
])
|
|
426
|
+
: Template.asString([
|
|
427
|
+
"if(importObject && typeof importObject.then === 'function' && typeof WebAssembly.compileStreaming === 'function') {",
|
|
428
|
+
Template.indent([
|
|
429
|
+
"promise = Promise.all([WebAssembly.compileStreaming(req), importObject]).then(function(items) {",
|
|
430
|
+
Template.indent([
|
|
431
|
+
`return WebAssembly.instantiate(items[0], ${createImportObject(
|
|
432
|
+
"items[1]"
|
|
433
|
+
)});`
|
|
434
|
+
]),
|
|
435
|
+
"});"
|
|
436
|
+
]),
|
|
437
|
+
"} else if(typeof WebAssembly.instantiateStreaming === 'function') {",
|
|
438
|
+
Template.indent([
|
|
439
|
+
`promise = WebAssembly.instantiateStreaming(req, ${createImportObject(
|
|
440
|
+
"importObject"
|
|
441
|
+
)});`
|
|
442
|
+
])
|
|
375
443
|
])
|
|
376
|
-
])
|
|
377
444
|
: Template.asString([
|
|
378
445
|
"if(importObject && typeof importObject.then === 'function') {",
|
|
379
446
|
Template.indent([
|
|
@@ -5,19 +5,20 @@
|
|
|
5
5
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
|
-
const formatLocation = require("../formatLocation");
|
|
8
|
+
const formatLocation = require("../util/formatLocation");
|
|
9
9
|
const UnsupportedWebAssemblyFeatureError = require("./UnsupportedWebAssemblyFeatureError");
|
|
10
10
|
|
|
11
11
|
/** @typedef {import("../Compiler")} Compiler */
|
|
12
12
|
/** @typedef {import("../Dependency")} Dependency */
|
|
13
13
|
/** @typedef {import("../Module")} Module */
|
|
14
14
|
/** @typedef {import("../Module").BuildMeta} BuildMeta */
|
|
15
|
+
/** @typedef {import("./SyncWasmModule").SyncWasmModuleBuildMeta} SyncWasmModuleBuildMeta */
|
|
15
16
|
|
|
16
17
|
const PLUGIN_NAME = "WasmFinalizeExportsPlugin";
|
|
17
18
|
|
|
18
19
|
class WasmFinalizeExportsPlugin {
|
|
19
20
|
/**
|
|
20
|
-
*
|
|
21
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
21
22
|
* @param {Compiler} compiler the compiler instance
|
|
22
23
|
* @returns {void}
|
|
23
24
|
*/
|
|
@@ -28,7 +29,7 @@ class WasmFinalizeExportsPlugin {
|
|
|
28
29
|
// 1. if a WebAssembly module
|
|
29
30
|
if (module.type.startsWith("webassembly") === true) {
|
|
30
31
|
const jsIncompatibleExports =
|
|
31
|
-
/** @type {
|
|
32
|
+
/** @type {SyncWasmModuleBuildMeta} */
|
|
32
33
|
(module.buildMeta).jsIncompatibleExports;
|
|
33
34
|
|
|
34
35
|
if (jsIncompatibleExports === undefined) {
|
|
@@ -17,11 +17,13 @@ const WebAssemblyUtils = require("./WebAssemblyUtils");
|
|
|
17
17
|
|
|
18
18
|
/** @typedef {import("webpack-sources").Source} Source */
|
|
19
19
|
/** @typedef {import("../Generator").GenerateContext} GenerateContext */
|
|
20
|
+
/** @typedef {import("../Generator").UpdateHashContext} UpdateHashContext */
|
|
20
21
|
/** @typedef {import("../Module")} Module */
|
|
21
22
|
/** @typedef {import("../Module").SourceType} SourceType */
|
|
22
23
|
/** @typedef {import("../Module").SourceTypes} SourceTypes */
|
|
23
24
|
/** @typedef {import("../ModuleGraph")} ModuleGraph */
|
|
24
25
|
/** @typedef {import("../NormalModule")} NormalModule */
|
|
26
|
+
/** @typedef {import("../util/Hash")} Hash */
|
|
25
27
|
/** @typedef {import("../util/runtime").RuntimeSpec} RuntimeSpec */
|
|
26
28
|
/** @typedef {import("./WebAssemblyUtils").UsedWasmDependency} UsedWasmDependency */
|
|
27
29
|
/** @typedef {import("@webassemblyjs/ast").Instruction} Instruction */
|
|
@@ -31,15 +33,18 @@ const WebAssemblyUtils = require("./WebAssemblyUtils");
|
|
|
31
33
|
/** @typedef {import("@webassemblyjs/ast").AST} AST */
|
|
32
34
|
/** @typedef {import("@webassemblyjs/ast").GlobalType} GlobalType */
|
|
33
35
|
/**
|
|
36
|
+
* Defines the node path type used by this module.
|
|
34
37
|
* @template T
|
|
35
38
|
* @typedef {import("@webassemblyjs/ast").NodePath<T>} NodePath
|
|
36
39
|
*/
|
|
37
40
|
|
|
38
41
|
/**
|
|
42
|
+
* Defines the array buffer transform type used by this module.
|
|
39
43
|
* @typedef {(buf: ArrayBuffer) => ArrayBuffer} ArrayBufferTransform
|
|
40
44
|
*/
|
|
41
45
|
|
|
42
46
|
/**
|
|
47
|
+
* Returns composed transform.
|
|
43
48
|
* @template T
|
|
44
49
|
* @param {((prev: ArrayBuffer) => ArrayBuffer)[]} fns transforms
|
|
45
50
|
* @returns {(buf: ArrayBuffer) => ArrayBuffer} composed transform
|
|
@@ -51,7 +56,7 @@ const compose = (...fns) =>
|
|
|
51
56
|
);
|
|
52
57
|
|
|
53
58
|
/**
|
|
54
|
-
* Removes
|
|
59
|
+
* Removes start func.
|
|
55
60
|
* @param {object} state state
|
|
56
61
|
* @param {AST} state.ast Module's ast
|
|
57
62
|
* @returns {ArrayBufferTransform} transform
|
|
@@ -200,6 +205,7 @@ const rewriteImportedGlobals = (state) => (bin) => {
|
|
|
200
205
|
// in order to preserve non-imported global's order we need to re-inject
|
|
201
206
|
// those as well
|
|
202
207
|
/**
|
|
208
|
+
* Processes the provided path.
|
|
203
209
|
* @param {NodePath<Global>} path path
|
|
204
210
|
*/
|
|
205
211
|
Global(path) {
|
|
@@ -252,6 +258,7 @@ const rewriteExportNames =
|
|
|
252
258
|
(bin) =>
|
|
253
259
|
editWithAST(ast, bin, {
|
|
254
260
|
/**
|
|
261
|
+
* Processes the provided path.
|
|
255
262
|
* @param {NodePath<ModuleExport>} path path
|
|
256
263
|
*/
|
|
257
264
|
ModuleExport(path) {
|
|
@@ -285,6 +292,7 @@ const rewriteImports =
|
|
|
285
292
|
(bin) =>
|
|
286
293
|
editWithAST(ast, bin, {
|
|
287
294
|
/**
|
|
295
|
+
* Processes the provided path.
|
|
288
296
|
* @param {NodePath<ModuleImport>} path path
|
|
289
297
|
*/
|
|
290
298
|
ModuleImport(path) {
|
|
@@ -406,20 +414,24 @@ const getUsedDependencyMap = (moduleGraph, module, mangle) => {
|
|
|
406
414
|
};
|
|
407
415
|
|
|
408
416
|
/**
|
|
417
|
+
* Represents the web assembly generator runtime component.
|
|
409
418
|
* @typedef {object} WebAssemblyGeneratorOptions
|
|
410
419
|
* @property {boolean=} mangleImports mangle imports
|
|
411
420
|
*/
|
|
412
421
|
|
|
413
422
|
class WebAssemblyGenerator extends Generator {
|
|
414
423
|
/**
|
|
424
|
+
* Creates an instance of WebAssemblyGenerator.
|
|
415
425
|
* @param {WebAssemblyGeneratorOptions} options options
|
|
416
426
|
*/
|
|
417
427
|
constructor(options) {
|
|
418
428
|
super();
|
|
429
|
+
/** @type {WebAssemblyGeneratorOptions} */
|
|
419
430
|
this.options = options;
|
|
420
431
|
}
|
|
421
432
|
|
|
422
433
|
/**
|
|
434
|
+
* Returns the source types available for this module.
|
|
423
435
|
* @param {NormalModule} module fresh module
|
|
424
436
|
* @returns {SourceTypes} available types (do not mutate)
|
|
425
437
|
*/
|
|
@@ -428,6 +440,7 @@ class WebAssemblyGenerator extends Generator {
|
|
|
428
440
|
}
|
|
429
441
|
|
|
430
442
|
/**
|
|
443
|
+
* Returns the estimated size for the requested source type.
|
|
431
444
|
* @param {NormalModule} module the module
|
|
432
445
|
* @param {SourceType=} type source type
|
|
433
446
|
* @returns {number} estimate size of the module
|
|
@@ -441,6 +454,7 @@ class WebAssemblyGenerator extends Generator {
|
|
|
441
454
|
}
|
|
442
455
|
|
|
443
456
|
/**
|
|
457
|
+
* Generates generated code for this runtime module.
|
|
444
458
|
* @param {NormalModule} module module for which the code should be generated
|
|
445
459
|
* @param {GenerateContext} generateContext context for generate
|
|
446
460
|
* @returns {Source | null} generated code
|
|
@@ -522,6 +536,7 @@ class WebAssemblyGenerator extends Generator {
|
|
|
522
536
|
}
|
|
523
537
|
|
|
524
538
|
/**
|
|
539
|
+
* Generates fallback output for the provided error condition.
|
|
525
540
|
* @param {Error} error the error
|
|
526
541
|
* @param {NormalModule} module module for which the code should be generated
|
|
527
542
|
* @param {GenerateContext} generateContext context for generate
|
|
@@ -530,6 +545,17 @@ class WebAssemblyGenerator extends Generator {
|
|
|
530
545
|
generateError(error, module, generateContext) {
|
|
531
546
|
return new RawSource(error.message);
|
|
532
547
|
}
|
|
548
|
+
|
|
549
|
+
/**
|
|
550
|
+
* Updates the hash with the data contributed by this instance.
|
|
551
|
+
* @param {Hash} hash hash that will be modified
|
|
552
|
+
* @param {UpdateHashContext} updateHashContext context for updating hash
|
|
553
|
+
*/
|
|
554
|
+
updateHash(hash, updateHashContext) {
|
|
555
|
+
if (this.options.mangleImports) {
|
|
556
|
+
hash.update("mangle-imports");
|
|
557
|
+
}
|
|
558
|
+
}
|
|
533
559
|
}
|
|
534
560
|
|
|
535
561
|
module.exports = WebAssemblyGenerator;
|