@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
|
@@ -7,13 +7,14 @@
|
|
|
7
7
|
|
|
8
8
|
const { pathToFileURL } = require("url");
|
|
9
9
|
const AsyncDependenciesBlock = require("../AsyncDependenciesBlock");
|
|
10
|
-
const CommentCompilationWarning = require("../CommentCompilationWarning");
|
|
11
10
|
const {
|
|
12
11
|
JAVASCRIPT_MODULE_TYPE_AUTO,
|
|
13
12
|
JAVASCRIPT_MODULE_TYPE_ESM
|
|
14
13
|
} = require("../ModuleTypeConstants");
|
|
15
|
-
const
|
|
14
|
+
const CommentCompilationWarning = require("../errors/CommentCompilationWarning");
|
|
15
|
+
const UnsupportedFeatureWarning = require("../errors/UnsupportedFeatureWarning");
|
|
16
16
|
const EnableChunkLoadingPlugin = require("../javascript/EnableChunkLoadingPlugin");
|
|
17
|
+
const parseResourceHintOptions = require("../prefetch/parseResourceHintOptions");
|
|
17
18
|
const { equals } = require("../util/ArrayHelpers");
|
|
18
19
|
const createHash = require("../util/createHash");
|
|
19
20
|
const { contextify } = require("../util/identifier");
|
|
@@ -23,7 +24,9 @@ const CreateScriptUrlDependency = require("./CreateScriptUrlDependency");
|
|
|
23
24
|
const {
|
|
24
25
|
harmonySpecifierTag
|
|
25
26
|
} = require("./HarmonyImportDependencyParserPlugin");
|
|
27
|
+
const { isImportMetaFieldEnabled } = require("./ImportMetaPlugin");
|
|
26
28
|
const WorkerDependency = require("./WorkerDependency");
|
|
29
|
+
const WorkletDependency = require("./WorkletDependency");
|
|
27
30
|
|
|
28
31
|
/** @typedef {import("estree").CallExpression} CallExpression */
|
|
29
32
|
/** @typedef {import("estree").Expression} Expression */
|
|
@@ -46,43 +49,72 @@ const WorkerDependency = require("./WorkerDependency");
|
|
|
46
49
|
/** @typedef {import("../javascript/JavascriptParser").JavascriptParserState} JavascriptParserState */
|
|
47
50
|
/** @typedef {import("../javascript/JavascriptParser").Range} Range */
|
|
48
51
|
/** @typedef {import("./HarmonyImportDependencyParserPlugin").HarmonySettings} HarmonySettings */
|
|
52
|
+
/** @typedef {import("./WorkerDependency").ResourceHint} ResourceHint */
|
|
49
53
|
|
|
50
54
|
/**
|
|
55
|
+
* Returns url.
|
|
51
56
|
* @param {NormalModule} module module
|
|
52
57
|
* @returns {string} url
|
|
53
58
|
*/
|
|
54
59
|
const getUrl = (module) => pathToFileURL(module.resource).toString();
|
|
55
60
|
|
|
56
61
|
const WorkerSpecifierTag = Symbol("worker specifier tag");
|
|
62
|
+
const WorkletSpecifierTag = Symbol("worklet specifier tag");
|
|
57
63
|
|
|
58
|
-
const
|
|
64
|
+
const WORKER_DEFAULT_SYNTAX = [
|
|
59
65
|
"Worker",
|
|
60
66
|
"SharedWorker",
|
|
61
67
|
"navigator.serviceWorker.register()",
|
|
62
68
|
"Worker from worker_threads"
|
|
63
69
|
];
|
|
64
70
|
|
|
71
|
+
// Worklets are always module scripts loaded through `addModule` and — unlike Web
|
|
72
|
+
// Workers — cannot load additional chunks at runtime (no `importScripts`, no
|
|
73
|
+
// dynamic `import()`). The WorkletDependency wraps the call so every chunk is
|
|
74
|
+
// pre-added via `addModule` from the calling scope (see WorkletDependency).
|
|
75
|
+
const WORKLET_DEFAULT_SYNTAX = [
|
|
76
|
+
"*context.audioWorklet.addModule()",
|
|
77
|
+
"*audioWorklet.addModule()",
|
|
78
|
+
"CSS.paintWorklet.addModule()",
|
|
79
|
+
"CSS.layoutWorklet.addModule()",
|
|
80
|
+
"CSS.animationWorklet.addModule()"
|
|
81
|
+
];
|
|
82
|
+
|
|
65
83
|
/** @type {WeakMap<JavascriptParserState, number>} */
|
|
66
84
|
const workerIndexMap = new WeakMap();
|
|
67
85
|
|
|
68
|
-
const PLUGIN_NAME = "
|
|
86
|
+
const PLUGIN_NAME = "WorkerAndWorkletPlugin";
|
|
69
87
|
|
|
70
|
-
class
|
|
88
|
+
class WorkerAndWorkletPlugin {
|
|
71
89
|
/**
|
|
90
|
+
* Creates an instance of WorkerAndWorkletPlugin.
|
|
72
91
|
* @param {ChunkLoading=} chunkLoading chunk loading
|
|
73
92
|
* @param {WasmLoading=} wasmLoading wasm loading
|
|
74
93
|
* @param {OutputModule=} module output module
|
|
75
94
|
* @param {WorkerPublicPath=} workerPublicPath worker public path
|
|
95
|
+
* @param {boolean=} workletDefault whether worklet parsing is on when `parser.worklet` is unset (enabled by `futureDefaults`)
|
|
76
96
|
*/
|
|
77
|
-
constructor(
|
|
97
|
+
constructor(
|
|
98
|
+
chunkLoading,
|
|
99
|
+
wasmLoading,
|
|
100
|
+
module,
|
|
101
|
+
workerPublicPath,
|
|
102
|
+
workletDefault
|
|
103
|
+
) {
|
|
104
|
+
/** @type {ChunkLoading | undefined} */
|
|
78
105
|
this._chunkLoading = chunkLoading;
|
|
106
|
+
/** @type {WasmLoading | undefined} */
|
|
79
107
|
this._wasmLoading = wasmLoading;
|
|
108
|
+
/** @type {boolean | undefined} */
|
|
80
109
|
this._module = module;
|
|
110
|
+
/** @type {string | undefined} */
|
|
81
111
|
this._workerPublicPath = workerPublicPath;
|
|
112
|
+
/** @type {boolean} */
|
|
113
|
+
this._workletDefault = Boolean(workletDefault);
|
|
82
114
|
}
|
|
83
115
|
|
|
84
116
|
/**
|
|
85
|
-
*
|
|
117
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
86
118
|
* @param {Compiler} compiler the compiler instance
|
|
87
119
|
* @returns {void}
|
|
88
120
|
*/
|
|
@@ -108,21 +140,54 @@ class WorkerPlugin {
|
|
|
108
140
|
WorkerDependency,
|
|
109
141
|
new WorkerDependency.Template()
|
|
110
142
|
);
|
|
143
|
+
compilation.dependencyFactories.set(
|
|
144
|
+
WorkletDependency,
|
|
145
|
+
normalModuleFactory
|
|
146
|
+
);
|
|
147
|
+
compilation.dependencyTemplates.set(
|
|
148
|
+
WorkletDependency,
|
|
149
|
+
new WorkletDependency.Template()
|
|
150
|
+
);
|
|
111
151
|
compilation.dependencyTemplates.set(
|
|
112
152
|
CreateScriptUrlDependency,
|
|
113
153
|
new CreateScriptUrlDependency.Template()
|
|
114
154
|
);
|
|
115
155
|
|
|
116
156
|
/**
|
|
157
|
+
* Checks whether the expression is `import.meta.url`.
|
|
158
|
+
* @param {JavascriptParser} parser the parser
|
|
159
|
+
* @param {MemberExpression} expr expression
|
|
160
|
+
* @returns {boolean} is `import.meta.url`
|
|
161
|
+
*/
|
|
162
|
+
const isMetaUrl = (parser, expr) => {
|
|
163
|
+
const chain = parser.extractMemberExpressionChain(expr);
|
|
164
|
+
|
|
165
|
+
if (
|
|
166
|
+
chain.members.length !== 1 ||
|
|
167
|
+
chain.object.type !== "MetaProperty" ||
|
|
168
|
+
chain.object.meta.name !== "import" ||
|
|
169
|
+
chain.object.property.name !== "meta" ||
|
|
170
|
+
chain.members[0] !== "url"
|
|
171
|
+
) {
|
|
172
|
+
return false;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
return true;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Resolves a `new URL(..., import.meta.url)` argument to its module url.
|
|
117
180
|
* @param {JavascriptParser} parser the parser
|
|
118
181
|
* @param {Expression} expr expression
|
|
182
|
+
* @param {boolean} importMetaUrlEnabled true when import.meta.url should be handled
|
|
119
183
|
* @returns {[string, Range] | void} parsed
|
|
120
184
|
*/
|
|
121
|
-
const parseModuleUrl = (parser, expr) => {
|
|
185
|
+
const parseModuleUrl = (parser, expr, importMetaUrlEnabled) => {
|
|
122
186
|
if (expr.type !== "NewExpression" || expr.callee.type === "Super") {
|
|
123
187
|
return;
|
|
124
188
|
}
|
|
125
189
|
if (
|
|
190
|
+
importMetaUrlEnabled &&
|
|
126
191
|
expr.arguments.length === 1 &&
|
|
127
192
|
expr.arguments[0].type === "MemberExpression" &&
|
|
128
193
|
isMetaUrl(parser, expr.arguments[0])
|
|
@@ -163,30 +228,10 @@ class WorkerPlugin {
|
|
|
163
228
|
}
|
|
164
229
|
};
|
|
165
230
|
|
|
166
|
-
/**
|
|
167
|
-
* @param {JavascriptParser} parser the parser
|
|
168
|
-
* @param {MemberExpression} expr expression
|
|
169
|
-
* @returns {boolean} is `import.meta.url`
|
|
170
|
-
*/
|
|
171
|
-
const isMetaUrl = (parser, expr) => {
|
|
172
|
-
const chain = parser.extractMemberExpressionChain(expr);
|
|
173
|
-
|
|
174
|
-
if (
|
|
175
|
-
chain.members.length !== 1 ||
|
|
176
|
-
chain.object.type !== "MetaProperty" ||
|
|
177
|
-
chain.object.meta.name !== "import" ||
|
|
178
|
-
chain.object.property.name !== "meta" ||
|
|
179
|
-
chain.members[0] !== "url"
|
|
180
|
-
) {
|
|
181
|
-
return false;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
return true;
|
|
185
|
-
};
|
|
186
|
-
|
|
187
231
|
/** @typedef {Record<string, EXPECTED_ANY>} Values */
|
|
188
232
|
|
|
189
233
|
/**
|
|
234
|
+
* Parses object expression.
|
|
190
235
|
* @param {JavascriptParser} parser the parser
|
|
191
236
|
* @param {ObjectExpression} expr expression
|
|
192
237
|
* @returns {{ expressions: Record<string, Expression | Pattern>, otherElements: (Property | SpreadElement)[], values: Values, spread: boolean, insertType: "comma" | "single", insertLocation: number }} parsed object
|
|
@@ -223,9 +268,12 @@ class WorkerPlugin {
|
|
|
223
268
|
}
|
|
224
269
|
}
|
|
225
270
|
const insertType = expr.properties.length > 0 ? "comma" : "single";
|
|
226
|
-
const insertLocation =
|
|
227
|
-
expr.properties
|
|
228
|
-
|
|
271
|
+
const insertLocation =
|
|
272
|
+
expr.properties.length > 0
|
|
273
|
+
? /** @type {Range} */ (
|
|
274
|
+
expr.properties[expr.properties.length - 1].range
|
|
275
|
+
)[1]
|
|
276
|
+
: /** @type {Range} */ (expr.range)[0] + 1;
|
|
229
277
|
return {
|
|
230
278
|
expressions,
|
|
231
279
|
otherElements,
|
|
@@ -237,20 +285,23 @@ class WorkerPlugin {
|
|
|
237
285
|
};
|
|
238
286
|
|
|
239
287
|
/**
|
|
288
|
+
* Processes the provided parser.
|
|
240
289
|
* @param {Parser} parser parser parser
|
|
241
290
|
* @param {JavascriptParserOptions} parserOptions parserOptions
|
|
242
291
|
* @returns {void}
|
|
243
292
|
*/
|
|
244
293
|
const parserPlugin = (parser, parserOptions) => {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
294
|
+
const importMetaUrlEnabled = isImportMetaFieldEnabled(
|
|
295
|
+
parserOptions.importMeta,
|
|
296
|
+
"url"
|
|
297
|
+
);
|
|
298
|
+
|
|
249
299
|
/**
|
|
300
|
+
* Resolves the url argument (the `new URL(...)` / bare `import.meta.url`).
|
|
250
301
|
* @param {CallExpression} expr expression
|
|
251
|
-
* @returns {boolean | void}
|
|
302
|
+
* @returns {{ url: string, range: Range, needNewUrl: boolean, arg1: Expression | SpreadElement, arg2: Expression | SpreadElement | undefined } | void} resolved url info
|
|
252
303
|
*/
|
|
253
|
-
const
|
|
304
|
+
const resolveWorkerUrl = (expr) => {
|
|
254
305
|
if (expr.arguments.length === 0 || expr.arguments.length > 2) {
|
|
255
306
|
return;
|
|
256
307
|
}
|
|
@@ -262,10 +313,13 @@ class WorkerPlugin {
|
|
|
262
313
|
let url;
|
|
263
314
|
/** @type {Range} */
|
|
264
315
|
let range;
|
|
265
|
-
/** @type {boolean} */
|
|
266
316
|
let needNewUrl = false;
|
|
267
317
|
|
|
268
|
-
if (
|
|
318
|
+
if (
|
|
319
|
+
arg1.type === "MemberExpression" &&
|
|
320
|
+
importMetaUrlEnabled &&
|
|
321
|
+
isMetaUrl(parser, arg1)
|
|
322
|
+
) {
|
|
269
323
|
url = getUrl(parser.state.module);
|
|
270
324
|
range = [
|
|
271
325
|
/** @type {Range} */ (arg1.range)[0],
|
|
@@ -273,32 +327,24 @@ class WorkerPlugin {
|
|
|
273
327
|
];
|
|
274
328
|
needNewUrl = true;
|
|
275
329
|
} else {
|
|
276
|
-
const parsedUrl = parseModuleUrl(
|
|
330
|
+
const parsedUrl = parseModuleUrl(
|
|
331
|
+
parser,
|
|
332
|
+
arg1,
|
|
333
|
+
importMetaUrlEnabled
|
|
334
|
+
);
|
|
277
335
|
if (!parsedUrl) return;
|
|
278
336
|
[url, range] = parsedUrl;
|
|
279
337
|
}
|
|
280
338
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
: {
|
|
291
|
-
expressions:
|
|
292
|
-
/** @type {Record<string, Expression | Pattern>} */ ({}),
|
|
293
|
-
otherElements: [],
|
|
294
|
-
/** @type {Values} */
|
|
295
|
-
values: {},
|
|
296
|
-
spread: false,
|
|
297
|
-
insertType: arg2 ? "spread" : "argument",
|
|
298
|
-
insertLocation: arg2
|
|
299
|
-
? /** @type {Range} */ (arg2.range)
|
|
300
|
-
: /** @type {Range} */ (arg1.range)[1]
|
|
301
|
-
};
|
|
339
|
+
return { url, range, needNewUrl, arg1, arg2 };
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
/**
|
|
343
|
+
* Reads the magic-comment entry options for the matched expression.
|
|
344
|
+
* @param {CallExpression} expr expression
|
|
345
|
+
* @returns {EntryOptions | false} entry options, or false when `webpackIgnore`
|
|
346
|
+
*/
|
|
347
|
+
const parseEntryOptions = (expr) => {
|
|
302
348
|
const { options: importOptions, errors: commentErrors } =
|
|
303
349
|
parser.parseCommentOptions(/** @type {Range} */ (expr.range));
|
|
304
350
|
|
|
@@ -308,7 +354,7 @@ class WorkerPlugin {
|
|
|
308
354
|
parser.state.module.addWarning(
|
|
309
355
|
new CommentCompilationWarning(
|
|
310
356
|
`Compilation error while processing magic comment(-s): /*${comment.value}*/: ${e.message}`,
|
|
311
|
-
|
|
357
|
+
parser.getLocation(comment)
|
|
312
358
|
)
|
|
313
359
|
);
|
|
314
360
|
}
|
|
@@ -323,7 +369,7 @@ class WorkerPlugin {
|
|
|
323
369
|
parser.state.module.addWarning(
|
|
324
370
|
new UnsupportedFeatureWarning(
|
|
325
371
|
`\`webpackIgnore\` expected a boolean, but received: ${importOptions.webpackIgnore}.`,
|
|
326
|
-
|
|
372
|
+
parser.getLocation(expr)
|
|
327
373
|
)
|
|
328
374
|
);
|
|
329
375
|
} else if (importOptions.webpackIgnore) {
|
|
@@ -338,14 +384,28 @@ class WorkerPlugin {
|
|
|
338
384
|
parser.state.module.addWarning(
|
|
339
385
|
new UnsupportedFeatureWarning(
|
|
340
386
|
`\`webpackEntryOptions\` expected a object, but received: ${importOptions.webpackEntryOptions}.`,
|
|
341
|
-
|
|
387
|
+
parser.getLocation(expr)
|
|
342
388
|
)
|
|
343
389
|
);
|
|
344
390
|
} else {
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
391
|
+
// `webpackEntryOptions` is user input from a magic
|
|
392
|
+
// comment, so copy only safe own keys to avoid
|
|
393
|
+
// prototype pollution via `__proto__`/`constructor`/
|
|
394
|
+
// `prototype`.
|
|
395
|
+
const userEntryOptions = importOptions.webpackEntryOptions;
|
|
396
|
+
for (const key of Object.keys(userEntryOptions)) {
|
|
397
|
+
if (
|
|
398
|
+
key === "__proto__" ||
|
|
399
|
+
key === "constructor" ||
|
|
400
|
+
key === "prototype"
|
|
401
|
+
) {
|
|
402
|
+
continue;
|
|
403
|
+
}
|
|
404
|
+
/** @type {EXPECTED_ANY} */
|
|
405
|
+
(entryOptions)[key] = /** @type {EXPECTED_ANY} */ (
|
|
406
|
+
userEntryOptions
|
|
407
|
+
)[key];
|
|
408
|
+
}
|
|
349
409
|
}
|
|
350
410
|
}
|
|
351
411
|
if (importOptions.webpackChunkName !== undefined) {
|
|
@@ -353,7 +413,7 @@ class WorkerPlugin {
|
|
|
353
413
|
parser.state.module.addWarning(
|
|
354
414
|
new UnsupportedFeatureWarning(
|
|
355
415
|
`\`webpackChunkName\` expected a string, but received: ${importOptions.webpackChunkName}.`,
|
|
356
|
-
|
|
416
|
+
parser.getLocation(expr)
|
|
357
417
|
)
|
|
358
418
|
);
|
|
359
419
|
} else {
|
|
@@ -362,6 +422,94 @@ class WorkerPlugin {
|
|
|
362
422
|
}
|
|
363
423
|
}
|
|
364
424
|
|
|
425
|
+
return entryOptions;
|
|
426
|
+
};
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Assigns a unique runtime to the entry so each worker gets its own runtime chunk.
|
|
430
|
+
* @param {EntryOptions} entryOptions entry options
|
|
431
|
+
* @returns {void}
|
|
432
|
+
*/
|
|
433
|
+
const ensureRuntime = (entryOptions) => {
|
|
434
|
+
if (entryOptions.runtime !== undefined) return;
|
|
435
|
+
const i = workerIndexMap.get(parser.state) || 0;
|
|
436
|
+
workerIndexMap.set(parser.state, i + 1);
|
|
437
|
+
const name = `${cachedContextify(
|
|
438
|
+
parser.state.module.identifier()
|
|
439
|
+
)}|${i}`;
|
|
440
|
+
const hash = createHash(compilation.outputOptions.hashFunction);
|
|
441
|
+
hash.update(name);
|
|
442
|
+
const digest = hash.digest(compilation.outputOptions.hashDigest);
|
|
443
|
+
entryOptions.runtime = digest.slice(
|
|
444
|
+
0,
|
|
445
|
+
compilation.outputOptions.hashDigestLength
|
|
446
|
+
);
|
|
447
|
+
};
|
|
448
|
+
|
|
449
|
+
/**
|
|
450
|
+
* Handles a matched `new Worker(...)` expression.
|
|
451
|
+
* @param {CallExpression} expr expression
|
|
452
|
+
* @param {boolean=} isGlobalWorker matched the global `new Worker()` syntax (eligible for universal rewrite)
|
|
453
|
+
* @returns {boolean | void} true when handled
|
|
454
|
+
*/
|
|
455
|
+
const handleNewWorker = (expr, isGlobalWorker = false) => {
|
|
456
|
+
const parsedUrl = resolveWorkerUrl(expr);
|
|
457
|
+
if (!parsedUrl) return;
|
|
458
|
+
const { url, range, needNewUrl, arg1, arg2 } = parsedUrl;
|
|
459
|
+
|
|
460
|
+
const {
|
|
461
|
+
expressions,
|
|
462
|
+
otherElements,
|
|
463
|
+
values: options,
|
|
464
|
+
spread: hasSpreadInOptions,
|
|
465
|
+
insertType,
|
|
466
|
+
insertLocation
|
|
467
|
+
} = arg2 && arg2.type === "ObjectExpression"
|
|
468
|
+
? parseObjectExpression(parser, arg2)
|
|
469
|
+
: {
|
|
470
|
+
expressions:
|
|
471
|
+
/** @type {Record<string, Expression | Pattern>} */ ({}),
|
|
472
|
+
otherElements: [],
|
|
473
|
+
/** @type {Values} */
|
|
474
|
+
values: {},
|
|
475
|
+
spread: false,
|
|
476
|
+
insertType: arg2 ? "spread" : "argument",
|
|
477
|
+
insertLocation: arg2
|
|
478
|
+
? /** @type {Range} */ (arg2.range)
|
|
479
|
+
: /** @type {Range} */ (arg1.range)[1]
|
|
480
|
+
};
|
|
481
|
+
|
|
482
|
+
const entryOptions = parseEntryOptions(expr);
|
|
483
|
+
if (entryOptions === false) return false;
|
|
484
|
+
|
|
485
|
+
/** @type {ResourceHint | undefined} */
|
|
486
|
+
let resourceHint;
|
|
487
|
+
// Resource-hint comments belong to the asset expression — read
|
|
488
|
+
// them from the inner `new URL(...)` range only, never from
|
|
489
|
+
// elsewhere inside `new Worker(...)`. When `arg1` is bare
|
|
490
|
+
// `import.meta.url` there is no `new URL` and no place for
|
|
491
|
+
// the comments to go, so resource hints are skipped.
|
|
492
|
+
if (arg1.type === "NewExpression") {
|
|
493
|
+
const { options: urlImportOptions } = parser.parseCommentOptions(
|
|
494
|
+
/** @type {Range} */ (arg1.range)
|
|
495
|
+
);
|
|
496
|
+
const hints = parseResourceHintOptions(
|
|
497
|
+
urlImportOptions,
|
|
498
|
+
parser.state.module,
|
|
499
|
+
/** @type {DependencyLocation} */ (expr.loc)
|
|
500
|
+
);
|
|
501
|
+
if (hints.prefetch || hints.preload) {
|
|
502
|
+
resourceHint = {
|
|
503
|
+
prefetch: hints.prefetch,
|
|
504
|
+
preload: hints.preload,
|
|
505
|
+
fetchPriority: hints.fetchPriority,
|
|
506
|
+
as: hints.as,
|
|
507
|
+
type: hints.type,
|
|
508
|
+
media: hints.media
|
|
509
|
+
};
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
|
|
365
513
|
if (
|
|
366
514
|
!Object.prototype.hasOwnProperty.call(entryOptions, "name") &&
|
|
367
515
|
options &&
|
|
@@ -370,20 +518,7 @@ class WorkerPlugin {
|
|
|
370
518
|
entryOptions.name = options.name;
|
|
371
519
|
}
|
|
372
520
|
|
|
373
|
-
|
|
374
|
-
const i = workerIndexMap.get(parser.state) || 0;
|
|
375
|
-
workerIndexMap.set(parser.state, i + 1);
|
|
376
|
-
const name = `${cachedContextify(
|
|
377
|
-
parser.state.module.identifier()
|
|
378
|
-
)}|${i}`;
|
|
379
|
-
const hash = createHash(compilation.outputOptions.hashFunction);
|
|
380
|
-
hash.update(name);
|
|
381
|
-
const digest = hash.digest(compilation.outputOptions.hashDigest);
|
|
382
|
-
entryOptions.runtime = digest.slice(
|
|
383
|
-
0,
|
|
384
|
-
compilation.outputOptions.hashDigestLength
|
|
385
|
-
);
|
|
386
|
-
}
|
|
521
|
+
ensureRuntime(entryOptions);
|
|
387
522
|
|
|
388
523
|
const block = new AsyncDependenciesBlock({
|
|
389
524
|
name: entryOptions.name,
|
|
@@ -391,15 +526,20 @@ class WorkerPlugin {
|
|
|
391
526
|
entryOptions: {
|
|
392
527
|
chunkLoading: this._chunkLoading,
|
|
393
528
|
wasmLoading: this._wasmLoading,
|
|
394
|
-
...entryOptions
|
|
529
|
+
...entryOptions,
|
|
530
|
+
worker: true
|
|
395
531
|
}
|
|
396
532
|
});
|
|
397
|
-
block.loc = expr
|
|
533
|
+
block.loc = parser.getLocation(expr);
|
|
398
534
|
const dep = new WorkerDependency(url, range, {
|
|
399
535
|
publicPath: this._workerPublicPath,
|
|
400
|
-
needNewUrl
|
|
536
|
+
needNewUrl,
|
|
537
|
+
workerConstructorRange: isGlobalWorker
|
|
538
|
+
? /** @type {Range} */ (expr.callee.range)
|
|
539
|
+
: undefined,
|
|
540
|
+
resourceHint
|
|
401
541
|
});
|
|
402
|
-
dep.loc =
|
|
542
|
+
dep.loc = parser.getLocation(expr);
|
|
403
543
|
block.addDependency(dep);
|
|
404
544
|
parser.state.module.addBlock(block);
|
|
405
545
|
|
|
@@ -407,7 +547,7 @@ class WorkerPlugin {
|
|
|
407
547
|
const dep = new CreateScriptUrlDependency(
|
|
408
548
|
/** @type {Range} */ (expr.arguments[0].range)
|
|
409
549
|
);
|
|
410
|
-
dep.loc =
|
|
550
|
+
dep.loc = parser.getLocation(expr);
|
|
411
551
|
parser.state.module.addDependency(dep);
|
|
412
552
|
}
|
|
413
553
|
|
|
@@ -418,7 +558,7 @@ class WorkerPlugin {
|
|
|
418
558
|
this._module ? '"module"' : "undefined",
|
|
419
559
|
/** @type {Range} */ (expr.range)
|
|
420
560
|
);
|
|
421
|
-
dep.loc =
|
|
561
|
+
dep.loc = parser.getLocation(expr);
|
|
422
562
|
parser.state.module.addPresentationalDependency(dep);
|
|
423
563
|
/** @type {EXPECTED_ANY} */
|
|
424
564
|
(expressions).type = undefined;
|
|
@@ -429,20 +569,23 @@ class WorkerPlugin {
|
|
|
429
569
|
`, type: ${this._module ? '"module"' : "undefined"}`,
|
|
430
570
|
insertLocation
|
|
431
571
|
);
|
|
432
|
-
dep.loc =
|
|
572
|
+
dep.loc = parser.getLocation(expr);
|
|
433
573
|
parser.state.module.addPresentationalDependency(dep);
|
|
434
574
|
}
|
|
435
575
|
} else if (insertType === "spread") {
|
|
576
|
+
const type = this._module ? '"module"' : "undefined";
|
|
577
|
+
// `{ ...(opts), type }` is equivalent to `Object.assign({}, opts, { type })`
|
|
578
|
+
const useSpread = compilation.outputOptions.environment.spread;
|
|
436
579
|
const dep1 = new ConstDependency(
|
|
437
|
-
"Object.assign({}, ",
|
|
580
|
+
useSpread ? "{ ...(" : "Object.assign({}, ",
|
|
438
581
|
/** @type {Range} */ (insertLocation)[0]
|
|
439
582
|
);
|
|
440
583
|
const dep2 = new ConstDependency(
|
|
441
|
-
|
|
584
|
+
useSpread ? `), type: ${type} }` : `, { type: ${type} })`,
|
|
442
585
|
/** @type {Range} */ (insertLocation)[1]
|
|
443
586
|
);
|
|
444
|
-
dep1.loc =
|
|
445
|
-
dep2.loc =
|
|
587
|
+
dep1.loc = parser.getLocation(expr);
|
|
588
|
+
dep2.loc = parser.getLocation(expr);
|
|
446
589
|
parser.state.module.addPresentationalDependency(dep1);
|
|
447
590
|
parser.state.module.addPresentationalDependency(dep2);
|
|
448
591
|
} else if (insertType === "argument" && this._module) {
|
|
@@ -450,7 +593,7 @@ class WorkerPlugin {
|
|
|
450
593
|
', { type: "module" }',
|
|
451
594
|
insertLocation
|
|
452
595
|
);
|
|
453
|
-
dep.loc =
|
|
596
|
+
dep.loc = parser.getLocation(expr);
|
|
454
597
|
parser.state.module.addPresentationalDependency(dep);
|
|
455
598
|
}
|
|
456
599
|
|
|
@@ -468,15 +611,75 @@ class WorkerPlugin {
|
|
|
468
611
|
parser.walkProperty(prop);
|
|
469
612
|
}
|
|
470
613
|
if (insertType === "spread") {
|
|
471
|
-
parser.walkExpression(arg2);
|
|
614
|
+
parser.walkExpression(/** @type {Expression} */ (arg2));
|
|
472
615
|
}
|
|
473
616
|
|
|
474
617
|
return true;
|
|
475
618
|
};
|
|
619
|
+
|
|
476
620
|
/**
|
|
621
|
+
* Handles a matched `addModule(...)` worklet expression.
|
|
622
|
+
* @param {CallExpression} expr expression
|
|
623
|
+
* @returns {boolean | void} true when handled
|
|
624
|
+
*/
|
|
625
|
+
const handleNewWorklet = (expr) => {
|
|
626
|
+
const parsedUrl = resolveWorkerUrl(expr);
|
|
627
|
+
if (!parsedUrl) return;
|
|
628
|
+
const { url } = parsedUrl;
|
|
629
|
+
|
|
630
|
+
const entryOptions = parseEntryOptions(expr);
|
|
631
|
+
if (entryOptions === false) return false;
|
|
632
|
+
|
|
633
|
+
const block = new AsyncDependenciesBlock({
|
|
634
|
+
name: entryOptions.name,
|
|
635
|
+
circular: false,
|
|
636
|
+
entryOptions: {
|
|
637
|
+
// A module worklet links its split chunks via native `import`
|
|
638
|
+
// (resolved by `addModule`), so it keeps the module chunk
|
|
639
|
+
// loading. A script worklet can't load chunks at runtime, so its
|
|
640
|
+
// chunks use import-scripts and are pre-added from the calling scope.
|
|
641
|
+
chunkLoading: this._module
|
|
642
|
+
? this._chunkLoading
|
|
643
|
+
: "import-scripts",
|
|
644
|
+
wasmLoading: false,
|
|
645
|
+
...entryOptions,
|
|
646
|
+
worker: true,
|
|
647
|
+
// `addModule` always loads the chunk as a module, so its
|
|
648
|
+
// auto public-path can read `import.meta.url` (no shim needed).
|
|
649
|
+
worklet: true
|
|
650
|
+
}
|
|
651
|
+
});
|
|
652
|
+
block.loc = parser.getLocation(expr);
|
|
653
|
+
// The dependency rewrites the call site: the fast path swaps the URL
|
|
654
|
+
// argument directly, the multi-chunk path wraps it in a bootstrap.
|
|
655
|
+
const dep = new WorkletDependency(
|
|
656
|
+
url,
|
|
657
|
+
[
|
|
658
|
+
/** @type {Range} */ (expr.range)[0],
|
|
659
|
+
/** @type {Range} */ (expr.range)[0]
|
|
660
|
+
],
|
|
661
|
+
[
|
|
662
|
+
/** @type {Range} */ (expr.callee.range)[1],
|
|
663
|
+
/** @type {Range} */ (expr.range)[1]
|
|
664
|
+
],
|
|
665
|
+
{ publicPath: this._workerPublicPath }
|
|
666
|
+
);
|
|
667
|
+
dep.loc = parser.getLocation(expr);
|
|
668
|
+
block.addDependency(dep);
|
|
669
|
+
parser.state.module.addBlock(block);
|
|
670
|
+
|
|
671
|
+
parser.walkExpression(expr.callee);
|
|
672
|
+
|
|
673
|
+
return true;
|
|
674
|
+
};
|
|
675
|
+
|
|
676
|
+
/**
|
|
677
|
+
* Registers the parser hooks matching a single syntax item.
|
|
477
678
|
* @param {string} item item
|
|
679
|
+
* @param {(expr: CallExpression, isGlobalWorker?: boolean) => boolean | void} handle handler invoked on a match
|
|
680
|
+
* @param {symbol} specifierTag tag used for `*variable` syntax
|
|
478
681
|
*/
|
|
479
|
-
const processItem = (item) => {
|
|
682
|
+
const processItem = (item, handle, specifierTag) => {
|
|
480
683
|
if (
|
|
481
684
|
item.startsWith("*") &&
|
|
482
685
|
item.includes(".") &&
|
|
@@ -493,28 +696,26 @@ class WorkerPlugin {
|
|
|
493
696
|
decl.id.type === "Identifier" &&
|
|
494
697
|
decl.id.name === pattern
|
|
495
698
|
) {
|
|
496
|
-
parser.tagVariable(decl.id.name,
|
|
699
|
+
parser.tagVariable(decl.id.name, specifierTag);
|
|
497
700
|
return true;
|
|
498
701
|
}
|
|
499
702
|
}
|
|
500
703
|
);
|
|
501
704
|
parser.hooks.pattern.for(pattern).tap(PLUGIN_NAME, (pattern) => {
|
|
502
|
-
parser.tagVariable(pattern.name,
|
|
705
|
+
parser.tagVariable(pattern.name, specifierTag);
|
|
503
706
|
return true;
|
|
504
707
|
});
|
|
505
708
|
parser.hooks.callMemberChain
|
|
506
|
-
.for(
|
|
709
|
+
.for(specifierTag)
|
|
507
710
|
.tap(PLUGIN_NAME, (expression, members) => {
|
|
508
711
|
if (itemMembers !== members.join(".")) {
|
|
509
712
|
return;
|
|
510
713
|
}
|
|
511
714
|
|
|
512
|
-
return
|
|
715
|
+
return handle(expression);
|
|
513
716
|
});
|
|
514
717
|
} else if (item.endsWith("()")) {
|
|
515
|
-
parser.hooks.call
|
|
516
|
-
.for(item.slice(0, -2))
|
|
517
|
-
.tap(PLUGIN_NAME, handleNewWorker);
|
|
718
|
+
parser.hooks.call.for(item.slice(0, -2)).tap(PLUGIN_NAME, handle);
|
|
518
719
|
} else {
|
|
519
720
|
const match = /^(.+?)(\(\))?\s+from\s+(.+)$/.exec(item);
|
|
520
721
|
if (match) {
|
|
@@ -534,21 +735,70 @@ class WorkerPlugin {
|
|
|
534
735
|
) {
|
|
535
736
|
return;
|
|
536
737
|
}
|
|
537
|
-
return
|
|
738
|
+
return handle(expr);
|
|
538
739
|
});
|
|
539
740
|
} else {
|
|
540
|
-
parser.hooks.new
|
|
741
|
+
parser.hooks.new
|
|
742
|
+
.for(item)
|
|
743
|
+
.tap(PLUGIN_NAME, (expr) => handle(expr, item === "Worker"));
|
|
541
744
|
}
|
|
542
745
|
}
|
|
543
746
|
};
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
747
|
+
|
|
748
|
+
/**
|
|
749
|
+
* Expands and registers a syntax list.
|
|
750
|
+
* @param {string[]} syntaxList syntax list (may contain "...")
|
|
751
|
+
* @param {string[]} defaultSyntax default syntax used for "..."
|
|
752
|
+
* @param {(expr: CallExpression, isGlobalWorker?: boolean) => boolean | void} handle handler
|
|
753
|
+
* @param {symbol} specifierTag tag used for `*variable` syntax
|
|
754
|
+
*/
|
|
755
|
+
const processList = (
|
|
756
|
+
syntaxList,
|
|
757
|
+
defaultSyntax,
|
|
758
|
+
handle,
|
|
759
|
+
specifierTag
|
|
760
|
+
) => {
|
|
761
|
+
for (const item of syntaxList) {
|
|
762
|
+
if (item === "...") {
|
|
763
|
+
for (const itemFromDefault of defaultSyntax) {
|
|
764
|
+
processItem(itemFromDefault, handle, specifierTag);
|
|
765
|
+
}
|
|
766
|
+
} else {
|
|
767
|
+
processItem(item, handle, specifierTag);
|
|
548
768
|
}
|
|
549
|
-
} else {
|
|
550
|
-
processItem(item);
|
|
551
769
|
}
|
|
770
|
+
};
|
|
771
|
+
|
|
772
|
+
if (parserOptions.worker !== false) {
|
|
773
|
+
const workerSyntax = !Array.isArray(parserOptions.worker)
|
|
774
|
+
? ["..."]
|
|
775
|
+
: parserOptions.worker;
|
|
776
|
+
processList(
|
|
777
|
+
workerSyntax,
|
|
778
|
+
WORKER_DEFAULT_SYNTAX,
|
|
779
|
+
handleNewWorker,
|
|
780
|
+
WorkerSpecifierTag
|
|
781
|
+
);
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
// Worklet parsing is opt-in: unset falls back to the `futureDefaults`
|
|
785
|
+
// default, `false` disables it. It is not defaulted in
|
|
786
|
+
// `config/defaults.js` because that would splice into the `"..."`
|
|
787
|
+
// merge sentinel of a user-provided list.
|
|
788
|
+
const workletOption =
|
|
789
|
+
parserOptions.worklet === undefined
|
|
790
|
+
? this._workletDefault
|
|
791
|
+
: parserOptions.worklet;
|
|
792
|
+
if (workletOption) {
|
|
793
|
+
const workletSyntax = !Array.isArray(workletOption)
|
|
794
|
+
? ["..."]
|
|
795
|
+
: workletOption;
|
|
796
|
+
processList(
|
|
797
|
+
workletSyntax,
|
|
798
|
+
WORKLET_DEFAULT_SYNTAX,
|
|
799
|
+
handleNewWorklet,
|
|
800
|
+
WorkletSpecifierTag
|
|
801
|
+
);
|
|
552
802
|
}
|
|
553
803
|
};
|
|
554
804
|
normalModuleFactory.hooks.parser
|
|
@@ -562,4 +812,4 @@ class WorkerPlugin {
|
|
|
562
812
|
}
|
|
563
813
|
}
|
|
564
814
|
|
|
565
|
-
module.exports =
|
|
815
|
+
module.exports = WorkerAndWorkletPlugin;
|