webpack 5.76.1 → 5.88.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.
Potentially problematic release.
This version of webpack might be problematic. Click here for more details.
- package/README.md +10 -4
- package/bin/webpack.js +26 -2
- package/hot/dev-server.js +2 -1
- package/hot/lazy-compilation-node.js +10 -0
- package/hot/lazy-compilation-web.js +9 -0
- package/hot/log-apply-result.js +5 -0
- package/hot/log.js +22 -0
- package/hot/only-dev-server.js +2 -1
- package/hot/poll.js +3 -0
- package/hot/signal.js +4 -0
- package/lib/APIPlugin.js +174 -116
- package/lib/AsyncDependenciesBlock.js +13 -5
- package/lib/AutomaticPrefetchPlugin.js +1 -0
- package/lib/BannerPlugin.js +4 -0
- package/lib/CacheFacade.js +4 -0
- package/lib/CaseSensitiveModulesWarning.js +3 -1
- package/lib/Chunk.js +36 -18
- package/lib/ChunkGraph.js +4 -4
- package/lib/ChunkGroup.js +25 -10
- package/lib/CleanPlugin.js +30 -7
- package/lib/CodeGenerationResults.js +2 -2
- package/lib/CompatibilityPlugin.js +85 -46
- package/lib/Compilation.js +17 -8
- package/lib/Compiler.js +12 -8
- package/lib/ConcatenationScope.js +2 -2
- package/lib/ConditionalInitFragment.js +11 -1
- package/lib/ConstPlugin.js +79 -44
- package/lib/ContextModule.js +20 -6
- package/lib/ContextModuleFactory.js +2 -1
- package/lib/ContextReplacementPlugin.js +13 -0
- package/lib/CssModule.js +169 -0
- package/lib/DefinePlugin.js +152 -86
- package/lib/DelegatedModule.js +22 -4
- package/lib/DelegatedModuleFactoryPlugin.js +6 -0
- package/lib/DependenciesBlock.js +17 -1
- package/lib/Dependency.js +19 -5
- package/lib/DllEntryPlugin.js +16 -1
- package/lib/DllModule.js +17 -2
- package/lib/DllModuleFactory.js +1 -1
- package/lib/DllReferencePlugin.js +13 -1
- package/lib/Entrypoint.js +1 -1
- package/lib/ErrorHelpers.js +62 -22
- package/lib/EvalSourceMapDevToolPlugin.js +9 -2
- package/lib/ExportsInfo.js +20 -3
- package/lib/ExportsInfoApiPlugin.js +30 -14
- package/lib/ExternalModule.js +30 -9
- package/lib/FileSystemInfo.js +9 -1
- package/lib/FlagAllModulesAsUsedPlugin.js +27 -27
- package/lib/FlagDependencyExportsPlugin.js +336 -348
- package/lib/FlagDependencyUsagePlugin.js +9 -9
- package/lib/FlagEntryExportAsUsedPlugin.js +26 -23
- package/lib/HookWebpackError.js +1 -1
- package/lib/HotModuleReplacementPlugin.js +60 -46
- package/lib/IgnoreErrorModuleFactory.js +1 -1
- package/lib/InitFragment.js +28 -5
- package/lib/JavascriptMetaInfoPlugin.js +27 -15
- package/lib/LibManifestPlugin.js +22 -5
- package/lib/LoaderOptionsPlugin.js +12 -2
- package/lib/MainTemplate.js +2 -2
- package/lib/Module.js +44 -12
- package/lib/ModuleBuildError.js +9 -0
- package/lib/ModuleDependencyError.js +4 -2
- package/lib/ModuleDependencyWarning.js +4 -2
- package/lib/ModuleError.js +9 -0
- package/lib/ModuleFactory.js +1 -1
- package/lib/ModuleFilenameHelpers.js +114 -4
- package/lib/ModuleGraph.js +33 -23
- package/lib/ModuleGraphConnection.js +19 -6
- package/lib/ModuleInfoHeaderPlugin.js +9 -2
- package/lib/ModuleNotFoundError.js +5 -2
- package/lib/ModuleParseError.js +9 -0
- package/lib/ModuleProfile.js +1 -0
- package/lib/ModuleRestoreError.js +2 -0
- package/lib/ModuleStoreError.js +2 -1
- package/lib/ModuleTypeConstants.js +169 -0
- package/lib/ModuleWarning.js +9 -0
- package/lib/MultiWatching.js +4 -0
- package/lib/NodeStuffPlugin.js +65 -35
- package/lib/NormalModule.js +12 -2
- package/lib/NormalModuleFactory.js +56 -8
- package/lib/NormalModuleReplacementPlugin.js +5 -3
- package/lib/NullFactory.js +1 -1
- package/lib/PrefetchPlugin.js +4 -0
- package/lib/ProgressPlugin.js +71 -15
- package/lib/ProvidePlugin.js +30 -14
- package/lib/RawModule.js +13 -2
- package/lib/RecordIdsPlugin.js +4 -4
- package/lib/RequireJsStuffPlugin.js +22 -15
- package/lib/RuntimeGlobals.js +5 -0
- package/lib/RuntimeModule.js +12 -11
- package/lib/RuntimePlugin.js +10 -3
- package/lib/RuntimeTemplate.js +29 -11
- package/lib/SelfModuleFactory.js +12 -0
- package/lib/SourceMapDevToolModuleOptionsPlugin.js +4 -0
- package/lib/SourceMapDevToolPlugin.js +47 -11
- package/lib/Template.js +5 -3
- package/lib/UseStrictPlugin.js +29 -11
- package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
- package/lib/WarnDeprecatedOptionPlugin.js +7 -0
- package/lib/WatchIgnorePlugin.js +4 -0
- package/lib/WebpackError.js +14 -5
- package/lib/WebpackIsIncludedPlugin.js +22 -13
- package/lib/WebpackOptionsApply.js +41 -44
- package/lib/WebpackOptionsDefaulter.js +10 -3
- package/lib/asset/AssetGenerator.js +24 -9
- package/lib/asset/AssetModulesPlugin.js +28 -12
- package/lib/asset/AssetParser.js +15 -7
- package/lib/asset/AssetSourceParser.js +8 -3
- package/lib/asset/RawDataUrlModule.js +15 -4
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -0
- package/lib/async-modules/InferAsyncModulesPlugin.js +1 -1
- package/lib/cache/IdleFileCachePlugin.js +2 -1
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -0
- package/lib/cache/PackFileCacheStrategy.js +42 -15
- package/lib/cache/ResolverCachePlugin.js +3 -0
- package/lib/config/browserslistTargetHandler.js +10 -10
- package/lib/config/defaults.js +306 -105
- package/lib/config/normalization.js +110 -71
- package/lib/config/target.js +37 -10
- package/lib/container/ContainerEntryModule.js +11 -1
- package/lib/container/ContainerEntryModuleFactory.js +1 -1
- package/lib/container/ContainerExposedDependency.js +9 -0
- package/lib/container/ContainerPlugin.js +3 -1
- package/lib/container/FallbackDependency.js +13 -0
- package/lib/container/FallbackItemDependency.js +3 -0
- package/lib/container/FallbackModule.js +12 -2
- package/lib/container/FallbackModuleFactory.js +1 -1
- package/lib/container/RemoteModule.js +11 -1
- package/lib/container/RemoteRuntimeModule.js +3 -2
- package/lib/container/RemoteToExternalDependency.js +3 -0
- package/lib/css/CssExportsGenerator.js +9 -0
- package/lib/css/CssGenerator.js +5 -1
- package/lib/css/CssLoadingRuntimeModule.js +53 -22
- package/lib/css/CssModulesPlugin.js +253 -74
- package/lib/css/CssParser.js +697 -282
- package/lib/css/walkCssTokens.js +269 -138
- package/lib/debug/ProfilingPlugin.js +33 -12
- package/lib/dependencies/AMDDefineDependency.js +54 -10
- package/lib/dependencies/AMDDefineDependencyParserPlugin.js +13 -2
- package/lib/dependencies/AMDPlugin.js +33 -20
- package/lib/dependencies/AMDRequireArrayDependency.js +13 -0
- package/lib/dependencies/AMDRequireContextDependency.js +15 -0
- package/lib/dependencies/AMDRequireDependenciesBlock.js +6 -0
- package/lib/dependencies/AMDRequireDependenciesBlockParserPlugin.js +8 -2
- package/lib/dependencies/AMDRequireDependency.js +16 -1
- package/lib/dependencies/AMDRequireItemDependency.js +6 -0
- package/lib/dependencies/AMDRuntimeModules.js +2 -2
- package/lib/dependencies/CachedConstDependency.js +14 -0
- package/lib/dependencies/CommonJsDependencyHelpers.js +9 -0
- package/lib/dependencies/CommonJsExportRequireDependency.js +19 -0
- package/lib/dependencies/CommonJsExportsDependency.js +16 -0
- package/lib/dependencies/CommonJsExportsParserPlugin.js +77 -5
- package/lib/dependencies/CommonJsFullRequireDependency.js +10 -1
- package/lib/dependencies/CommonJsImportsParserPlugin.js +174 -63
- package/lib/dependencies/CommonJsPlugin.js +51 -26
- package/lib/dependencies/CommonJsRequireContextDependency.js +17 -0
- package/lib/dependencies/CommonJsRequireDependency.js +7 -0
- package/lib/dependencies/CommonJsSelfReferenceDependency.js +16 -0
- package/lib/dependencies/ConstDependency.js +11 -2
- package/lib/dependencies/ContextDependency.js +15 -2
- package/lib/dependencies/ContextDependencyHelpers.js +3 -3
- package/lib/dependencies/ContextElementDependency.js +8 -0
- package/lib/dependencies/CreateScriptUrlDependency.js +10 -1
- package/lib/dependencies/CriticalDependencyWarning.js +3 -0
- package/lib/dependencies/CssExportDependency.js +8 -0
- package/lib/dependencies/CssImportDependency.js +55 -3
- package/lib/dependencies/CssLocalIdentifierDependency.js +15 -1
- package/lib/dependencies/CssSelfLocalIdentifierDependency.js +10 -1
- package/lib/dependencies/CssUrlDependency.js +46 -16
- package/lib/dependencies/DelegatedSourceDependency.js +3 -0
- package/lib/dependencies/DllEntryDependency.js +14 -0
- package/lib/dependencies/DynamicExports.js +10 -6
- package/lib/dependencies/ExportsInfoDependency.js +25 -4
- package/lib/dependencies/HarmonyAcceptDependency.js +10 -1
- package/lib/dependencies/HarmonyAcceptImportDependency.js +3 -0
- package/lib/dependencies/HarmonyCompatibilityDependency.js +2 -1
- package/lib/dependencies/HarmonyDetectionParserPlugin.js +22 -2
- package/lib/dependencies/HarmonyEvaluatedImportSpecifierDependency.js +32 -6
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +5 -0
- package/lib/dependencies/HarmonyExportExpressionDependency.js +20 -3
- package/lib/dependencies/HarmonyExportHeaderDependency.js +13 -0
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +22 -6
- package/lib/dependencies/HarmonyExportInitFragment.js +2 -1
- package/lib/dependencies/HarmonyExportSpecifierDependency.js +12 -0
- package/lib/dependencies/HarmonyExports.js +11 -5
- package/lib/dependencies/HarmonyImportDependency.js +10 -1
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +53 -22
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +7 -2
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +139 -16
- package/lib/dependencies/HarmonyModulesPlugin.js +23 -5
- package/lib/dependencies/HarmonyTopLevelThisParserPlugin.js +15 -3
- package/lib/dependencies/ImportContextDependency.js +15 -0
- package/lib/dependencies/ImportDependency.js +15 -4
- package/lib/dependencies/ImportEagerDependency.js +7 -4
- package/lib/dependencies/ImportMetaContextDependencyParserPlugin.js +51 -13
- package/lib/dependencies/ImportMetaContextPlugin.js +18 -5
- package/lib/dependencies/ImportMetaHotAcceptDependency.js +6 -0
- package/lib/dependencies/ImportMetaHotDeclineDependency.js +6 -0
- package/lib/dependencies/ImportMetaPlugin.js +103 -51
- package/lib/dependencies/ImportParserPlugin.js +83 -25
- package/lib/dependencies/ImportPlugin.js +21 -7
- package/lib/dependencies/ImportWeakDependency.js +7 -4
- package/lib/dependencies/JsonExportsDependency.js +9 -1
- package/lib/dependencies/LocalModule.js +16 -0
- package/lib/dependencies/LocalModuleDependency.js +15 -0
- package/lib/dependencies/LocalModulesHelpers.js +18 -0
- package/lib/dependencies/ModuleDecoratorDependency.js +8 -0
- package/lib/dependencies/ModuleDependency.js +9 -1
- package/lib/dependencies/ModuleDependencyTemplateAsId.js +2 -1
- package/lib/dependencies/ModuleHotAcceptDependency.js +6 -0
- package/lib/dependencies/ModuleHotDeclineDependency.js +6 -0
- package/lib/dependencies/PrefetchDependency.js +3 -0
- package/lib/dependencies/ProvidedDependency.js +14 -2
- package/lib/dependencies/PureExpressionDependency.js +10 -1
- package/lib/dependencies/RequireContextDependency.js +6 -0
- package/lib/dependencies/RequireContextDependencyParserPlugin.js +13 -5
- package/lib/dependencies/RequireContextPlugin.js +19 -6
- package/lib/dependencies/RequireEnsureDependenciesBlock.js +7 -0
- package/lib/dependencies/RequireEnsureDependenciesBlockParserPlugin.js +6 -1
- package/lib/dependencies/RequireEnsureDependency.js +16 -2
- package/lib/dependencies/RequireEnsureItemDependency.js +3 -0
- package/lib/dependencies/RequireEnsurePlugin.js +27 -7
- package/lib/dependencies/RequireHeaderDependency.js +14 -1
- package/lib/dependencies/RequireIncludeDependency.js +5 -0
- package/lib/dependencies/RequireIncludeDependencyParserPlugin.js +29 -5
- package/lib/dependencies/RequireIncludePlugin.js +25 -5
- package/lib/dependencies/RequireResolveContextDependency.js +17 -0
- package/lib/dependencies/RequireResolveDependency.js +6 -0
- package/lib/dependencies/RequireResolveHeaderDependency.js +18 -0
- package/lib/dependencies/RuntimeRequirementsDependency.js +8 -0
- package/lib/dependencies/StaticExportsDependency.js +8 -0
- package/lib/dependencies/SystemPlugin.js +48 -21
- package/lib/dependencies/SystemRuntimeModule.js +1 -1
- package/lib/dependencies/URLDependency.js +13 -4
- package/lib/dependencies/URLPlugin.js +31 -18
- package/lib/dependencies/UnsupportedDependency.js +13 -0
- package/lib/dependencies/WebAssemblyExportImportedDependency.js +14 -0
- package/lib/dependencies/WebAssemblyImportDependency.js +9 -1
- package/lib/dependencies/WebpackIsIncludedDependency.js +5 -0
- package/lib/dependencies/WorkerDependency.js +47 -3
- package/lib/dependencies/WorkerPlugin.js +105 -32
- package/lib/dependencies/getFunctionExpression.js +7 -0
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +3 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +21 -8
- package/lib/esm/ModuleChunkLoadingPlugin.js +9 -0
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +19 -12
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +1 -1
- package/lib/hmr/LazyCompilationPlugin.js +14 -5
- package/lib/ids/ChunkModuleIdRangePlugin.js +11 -0
- package/lib/ids/DeterministicChunkIdsPlugin.js +11 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +11 -7
- package/lib/ids/HashedModuleIdsPlugin.js +9 -2
- package/lib/ids/IdHelpers.js +6 -0
- package/lib/ids/NamedChunkIdsPlugin.js +13 -1
- package/lib/ids/NamedModuleIdsPlugin.js +14 -3
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -2
- package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
- package/lib/ids/SyncModuleIdsPlugin.js +3 -2
- package/lib/index.js +8 -0
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +3 -3
- package/lib/javascript/BasicEvaluatedExpression.js +137 -11
- package/lib/javascript/ChunkHelpers.js +2 -2
- package/lib/javascript/CommonJsChunkFormatPlugin.js +7 -3
- package/lib/javascript/EnableChunkLoadingPlugin.js +4 -0
- package/lib/javascript/JavascriptModulesPlugin.js +194 -194
- package/lib/javascript/JavascriptParser.js +941 -256
- package/lib/javascript/JavascriptParserHelpers.js +37 -15
- package/lib/javascript/StartupHelpers.js +2 -2
- package/lib/json/JsonData.js +26 -1
- package/lib/json/JsonGenerator.js +21 -7
- package/lib/json/JsonModulesPlugin.js +14 -5
- package/lib/json/JsonParser.js +27 -13
- package/lib/library/AbstractLibraryPlugin.js +4 -0
- package/lib/library/AmdLibraryPlugin.js +22 -6
- package/lib/library/AssignLibraryPlugin.js +6 -4
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -1
- package/lib/library/ModuleLibraryPlugin.js +8 -4
- package/lib/library/SystemLibraryPlugin.js +1 -0
- package/lib/library/UmdLibraryPlugin.js +4 -0
- package/lib/logging/runtime.js +1 -1
- package/lib/logging/truncateArgs.js +4 -0
- package/lib/node/CommonJsChunkLoadingPlugin.js +17 -2
- package/lib/node/NodeTargetPlugin.js +3 -0
- package/lib/node/NodeTemplatePlugin.js +10 -2
- package/lib/node/NodeWatchFileSystem.js +1 -1
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +18 -9
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +12 -2
- package/lib/node/ReadFileCompileWasmPlugin.js +21 -3
- package/lib/node/RequireChunkLoadingRuntimeModule.js +15 -8
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +8 -0
- package/lib/optimize/AggressiveSplittingPlugin.js +9 -2
- package/lib/optimize/ConcatenatedModule.js +8 -6
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -0
- package/lib/optimize/FlagIncludedChunksPlugin.js +11 -5
- package/lib/optimize/InnerGraph.js +5 -5
- package/lib/optimize/InnerGraphPlugin.js +57 -48
- package/lib/optimize/LimitChunkCountPlugin.js +29 -4
- package/lib/optimize/MangleExportsPlugin.js +1 -1
- package/lib/optimize/MinMaxSizeWarning.js +5 -0
- package/lib/optimize/ModuleConcatenationPlugin.js +59 -2
- package/lib/optimize/RealContentHashPlugin.js +86 -30
- package/lib/optimize/RemoveParentModulesPlugin.js +6 -0
- package/lib/optimize/RuntimeChunkPlugin.js +9 -1
- package/lib/optimize/SideEffectsFlagPlugin.js +53 -44
- package/lib/optimize/SplitChunksPlugin.js +71 -31
- package/lib/performance/SizeLimitsPlugin.js +7 -4
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +3 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +6 -3
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -2
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -2
- package/lib/rules/BasicEffectRulePlugin.js +4 -0
- package/lib/rules/BasicMatcherRulePlugin.js +5 -0
- package/lib/rules/RuleSetCompiler.js +3 -3
- package/lib/rules/UseEffectRulePlugin.js +6 -4
- package/lib/runtime/AsyncModuleRuntimeModule.js +9 -6
- package/lib/runtime/AutoPublicPathRuntimeModule.js +16 -5
- package/lib/runtime/BaseUriRuntimeModule.js +8 -4
- package/lib/runtime/ChunkNameRuntimeModule.js +1 -1
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +5 -2
- package/lib/runtime/CompatRuntimeModule.js +7 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +4 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +4 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +5 -2
- package/lib/runtime/EnsureChunkRuntimeModule.js +18 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +45 -26
- package/lib/runtime/GetFullHashRuntimeModule.js +4 -3
- package/lib/runtime/GetMainFilenameRuntimeModule.js +5 -2
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +27 -6
- package/lib/runtime/GlobalRuntimeModule.js +1 -1
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +5 -2
- package/lib/runtime/LoadScriptRuntimeModule.js +65 -50
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +5 -2
- package/lib/runtime/NonceRuntimeModule.js +1 -1
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -2
- package/lib/runtime/PublicPathRuntimeModule.js +9 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +5 -2
- package/lib/runtime/RuntimeIdRuntimeModule.js +6 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +15 -0
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +13 -4
- package/lib/runtime/StartupEntrypointRuntimeModule.js +11 -7
- package/lib/runtime/SystemContextRuntimeModule.js +1 -1
- package/lib/schemes/DataUriPlugin.js +16 -3
- package/lib/schemes/HttpUriPlugin.js +38 -0
- package/lib/serialization/ArraySerializer.js +22 -6
- package/lib/serialization/BinaryMiddleware.js +164 -1
- package/lib/serialization/DateObjectSerializer.js +15 -4
- package/lib/serialization/ErrorObjectSerializer.js +23 -8
- package/lib/serialization/FileMiddleware.js +17 -0
- package/lib/serialization/MapObjectSerializer.js +24 -8
- package/lib/serialization/NullPrototypeObjectSerializer.js +25 -8
- package/lib/serialization/ObjectMiddleware.js +33 -2
- package/lib/serialization/PlainObjectSerializer.js +23 -12
- package/lib/serialization/RegExpObjectSerializer.js +16 -5
- package/lib/serialization/SetObjectSerializer.js +21 -6
- package/lib/serialization/types.js +1 -1
- package/lib/sharing/ConsumeSharedFallbackDependency.js +3 -0
- package/lib/sharing/ConsumeSharedModule.js +13 -2
- package/lib/sharing/ConsumeSharedPlugin.js +4 -0
- package/lib/sharing/ConsumeSharedRuntimeModule.js +22 -7
- package/lib/sharing/ProvideSharedDependency.js +17 -0
- package/lib/sharing/ProvideSharedModule.js +11 -1
- package/lib/sharing/ProvideSharedModuleFactory.js +1 -1
- package/lib/sharing/ProvideSharedPlugin.js +22 -21
- package/lib/sharing/ShareRuntimeModule.js +19 -9
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/sharing/utils.js +320 -7
- package/lib/stats/DefaultStatsFactoryPlugin.js +105 -29
- package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
- package/lib/stats/DefaultStatsPrinterPlugin.js +43 -0
- package/lib/util/AsyncQueue.js +4 -2
- package/lib/util/LazySet.js +10 -2
- package/lib/util/MapHelpers.js +19 -5
- package/lib/util/ParallelismFactorCalculator.js +10 -0
- package/lib/util/Semaphore.js +1 -1
- package/lib/util/StackedCacheMap.js +6 -0
- package/lib/util/StringXor.js +51 -0
- package/lib/util/binarySearchBounds.js +49 -0
- package/lib/util/compileBooleanMatcher.js +31 -0
- package/lib/util/createHash.js +35 -13
- package/lib/util/deprecation.js +18 -3
- package/lib/util/deterministicGrouping.js +50 -11
- package/lib/util/findGraphRoots.js +4 -2
- package/lib/util/hash/md4.js +2 -2
- package/lib/util/hash/xxhash64.js +1 -1
- package/lib/util/identifier.js +4 -0
- package/lib/util/internalSerializables.js +1 -0
- package/lib/util/makeSerializable.js +7 -0
- package/lib/util/memoize.js +3 -3
- package/lib/util/numberHash.js +75 -21
- package/lib/util/processAsyncTree.js +7 -1
- package/lib/util/propertyAccess.js +9 -54
- package/lib/util/propertyName.js +79 -0
- package/lib/util/registerExternalSerializer.js +1 -1
- package/lib/util/runtime.js +14 -1
- package/lib/util/semver.js +1 -1
- package/lib/util/serialization.js +10 -0
- package/lib/util/smartGrouping.js +1 -1
- package/lib/validateSchema.js +6 -2
- package/lib/wasm/EnableWasmLoadingPlugin.js +4 -0
- package/lib/wasm-async/AsyncWasmLoadingRuntimeModule.js +15 -2
- package/lib/wasm-async/AsyncWebAssemblyGenerator.js +9 -1
- package/lib/wasm-async/AsyncWebAssemblyJavascriptGenerator.js +14 -3
- package/lib/wasm-async/AsyncWebAssemblyModulesPlugin.js +28 -8
- package/lib/wasm-async/AsyncWebAssemblyParser.js +11 -4
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +39 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +17 -6
- package/lib/wasm-sync/WebAssemblyGenerator.js +19 -5
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +1 -1
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +53 -43
- package/lib/wasm-sync/WebAssemblyParser.js +15 -4
- package/lib/wasm-sync/WebAssemblyUtils.js +1 -1
- package/lib/web/FetchCompileAsyncWasmPlugin.js +11 -1
- package/lib/web/FetchCompileWasmPlugin.js +59 -42
- package/lib/web/JsonpChunkLoadingPlugin.js +9 -0
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +26 -9
- package/lib/webpack.js +12 -3
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +9 -0
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +20 -17
- package/module.d.ts +55 -37
- package/package.json +59 -56
- package/schemas/WebpackOptions.check.js +1 -1
- package/schemas/WebpackOptions.json +132 -5
- package/schemas/plugins/ProgressPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +4 -0
- package/schemas/plugins/container/ContainerPlugin.check.js +1 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +8 -0
- package/schemas/plugins/css/CssGeneratorOptions.json +1 -1
- package/schemas/plugins/css/CssParserOptions.json +1 -1
- package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
- package/types.d.ts +1608 -667
@@ -5,12 +5,22 @@
|
|
5
5
|
|
6
6
|
"use strict";
|
7
7
|
|
8
|
+
const {
|
9
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
10
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
11
|
+
JAVASCRIPT_MODULE_TYPE_ESM
|
12
|
+
} = require("./ModuleTypeConstants");
|
13
|
+
const RuntimeGlobals = require("./RuntimeGlobals");
|
8
14
|
const ConstDependency = require("./dependencies/ConstDependency");
|
9
15
|
|
16
|
+
/** @typedef {import("estree").CallExpression} CallExpression */
|
10
17
|
/** @typedef {import("./Compiler")} Compiler */
|
18
|
+
/** @typedef {import("./Dependency").DependencyLocation} DependencyLocation */
|
11
19
|
/** @typedef {import("./javascript/JavascriptParser")} JavascriptParser */
|
20
|
+
/** @typedef {import("./javascript/JavascriptParser").Range} Range */
|
12
21
|
|
13
|
-
const
|
22
|
+
const nestedWebpackIdentifierTag = Symbol("nested webpack identifier");
|
23
|
+
const PLUGIN_NAME = "CompatibilityPlugin";
|
14
24
|
|
15
25
|
class CompatibilityPlugin {
|
16
26
|
/**
|
@@ -20,7 +30,7 @@ class CompatibilityPlugin {
|
|
20
30
|
*/
|
21
31
|
apply(compiler) {
|
22
32
|
compiler.hooks.compilation.tap(
|
23
|
-
|
33
|
+
PLUGIN_NAME,
|
24
34
|
(compilation, { normalModuleFactory }) => {
|
25
35
|
compilation.dependencyTemplates.set(
|
26
36
|
ConstDependency,
|
@@ -28,24 +38,31 @@ class CompatibilityPlugin {
|
|
28
38
|
);
|
29
39
|
|
30
40
|
normalModuleFactory.hooks.parser
|
31
|
-
.for(
|
32
|
-
.tap(
|
41
|
+
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
42
|
+
.tap(PLUGIN_NAME, (parser, parserOptions) => {
|
33
43
|
if (
|
34
44
|
parserOptions.browserify !== undefined &&
|
35
45
|
!parserOptions.browserify
|
36
46
|
)
|
37
47
|
return;
|
38
48
|
|
39
|
-
parser.hooks.call
|
40
|
-
|
41
|
-
|
49
|
+
parser.hooks.call.for("require").tap(
|
50
|
+
PLUGIN_NAME,
|
51
|
+
/**
|
52
|
+
* @param {CallExpression} expr call expression
|
53
|
+
* @returns {boolean | void} true when need to handle
|
54
|
+
*/
|
55
|
+
expr => {
|
42
56
|
// support for browserify style require delegator: "require(o, !0)"
|
43
57
|
if (expr.arguments.length !== 2) return;
|
44
58
|
const second = parser.evaluateExpression(expr.arguments[1]);
|
45
59
|
if (!second.isBoolean()) return;
|
46
60
|
if (second.asBool() !== true) return;
|
47
|
-
const dep = new ConstDependency(
|
48
|
-
|
61
|
+
const dep = new ConstDependency(
|
62
|
+
"require",
|
63
|
+
/** @type {Range} */ (expr.callee.range)
|
64
|
+
);
|
65
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
49
66
|
if (parser.state.current.dependencies.length > 0) {
|
50
67
|
const last =
|
51
68
|
parser.state.current.dependencies[
|
@@ -62,7 +79,8 @@ class CompatibilityPlugin {
|
|
62
79
|
}
|
63
80
|
parser.state.module.addPresentationalDependency(dep);
|
64
81
|
return true;
|
65
|
-
}
|
82
|
+
}
|
83
|
+
);
|
66
84
|
});
|
67
85
|
|
68
86
|
/**
|
@@ -71,30 +89,51 @@ class CompatibilityPlugin {
|
|
71
89
|
*/
|
72
90
|
const handler = parser => {
|
73
91
|
// Handle nested requires
|
74
|
-
parser.hooks.preStatement.tap(
|
92
|
+
parser.hooks.preStatement.tap(PLUGIN_NAME, statement => {
|
75
93
|
if (
|
76
94
|
statement.type === "FunctionDeclaration" &&
|
77
95
|
statement.id &&
|
78
|
-
statement.id.name ===
|
96
|
+
statement.id.name === RuntimeGlobals.require
|
79
97
|
) {
|
80
|
-
const newName = `__nested_webpack_require_${
|
81
|
-
|
98
|
+
const newName = `__nested_webpack_require_${
|
99
|
+
/** @type {Range} */ (statement.range)[0]
|
100
|
+
}__`;
|
101
|
+
parser.tagVariable(
|
102
|
+
statement.id.name,
|
103
|
+
nestedWebpackIdentifierTag,
|
104
|
+
{
|
105
|
+
name: newName,
|
106
|
+
declaration: {
|
107
|
+
updated: false,
|
108
|
+
loc: statement.id.loc,
|
109
|
+
range: statement.id.range
|
110
|
+
}
|
111
|
+
}
|
112
|
+
);
|
113
|
+
return true;
|
114
|
+
}
|
115
|
+
});
|
116
|
+
parser.hooks.pattern
|
117
|
+
.for(RuntimeGlobals.require)
|
118
|
+
.tap(PLUGIN_NAME, pattern => {
|
119
|
+
const newName = `__nested_webpack_require_${
|
120
|
+
/** @type {Range} */ (pattern.range)[0]
|
121
|
+
}__`;
|
122
|
+
parser.tagVariable(pattern.name, nestedWebpackIdentifierTag, {
|
82
123
|
name: newName,
|
83
124
|
declaration: {
|
84
125
|
updated: false,
|
85
|
-
loc:
|
86
|
-
range:
|
126
|
+
loc: pattern.loc,
|
127
|
+
range: pattern.range
|
87
128
|
}
|
88
129
|
});
|
89
130
|
return true;
|
90
|
-
}
|
91
|
-
});
|
131
|
+
});
|
92
132
|
parser.hooks.pattern
|
93
|
-
.for(
|
94
|
-
.tap(
|
95
|
-
|
96
|
-
|
97
|
-
name: newName,
|
133
|
+
.for(RuntimeGlobals.exports)
|
134
|
+
.tap(PLUGIN_NAME, pattern => {
|
135
|
+
parser.tagVariable(pattern.name, nestedWebpackIdentifierTag, {
|
136
|
+
name: "__nested_webpack_exports__",
|
98
137
|
declaration: {
|
99
138
|
updated: false,
|
100
139
|
loc: pattern.loc,
|
@@ -104,8 +143,8 @@ class CompatibilityPlugin {
|
|
104
143
|
return true;
|
105
144
|
});
|
106
145
|
parser.hooks.expression
|
107
|
-
.for(
|
108
|
-
.tap(
|
146
|
+
.for(nestedWebpackIdentifierTag)
|
147
|
+
.tap(PLUGIN_NAME, expr => {
|
109
148
|
const { name, declaration } = parser.currentTagData;
|
110
149
|
if (!declaration.updated) {
|
111
150
|
const dep = new ConstDependency(name, declaration.range);
|
@@ -113,38 +152,38 @@ class CompatibilityPlugin {
|
|
113
152
|
parser.state.module.addPresentationalDependency(dep);
|
114
153
|
declaration.updated = true;
|
115
154
|
}
|
116
|
-
const dep = new ConstDependency(
|
117
|
-
|
155
|
+
const dep = new ConstDependency(
|
156
|
+
name,
|
157
|
+
/** @type {Range} */ (expr.range)
|
158
|
+
);
|
159
|
+
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
118
160
|
parser.state.module.addPresentationalDependency(dep);
|
119
161
|
return true;
|
120
162
|
});
|
121
163
|
|
122
164
|
// Handle hashbang
|
123
|
-
parser.hooks.program.tap(
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
dep.loc = c.loc;
|
133
|
-
parser.state.module.addPresentationalDependency(dep);
|
134
|
-
}
|
165
|
+
parser.hooks.program.tap(PLUGIN_NAME, (program, comments) => {
|
166
|
+
if (comments.length === 0) return;
|
167
|
+
const c = comments[0];
|
168
|
+
if (c.type === "Line" && /** @type {Range} */ (c.range)[0] === 0) {
|
169
|
+
if (parser.state.source.slice(0, 2).toString() !== "#!") return;
|
170
|
+
// this is a hashbang comment
|
171
|
+
const dep = new ConstDependency("//", 0);
|
172
|
+
dep.loc = /** @type {DependencyLocation} */ (c.loc);
|
173
|
+
parser.state.module.addPresentationalDependency(dep);
|
135
174
|
}
|
136
|
-
);
|
175
|
+
});
|
137
176
|
};
|
138
177
|
|
139
178
|
normalModuleFactory.hooks.parser
|
140
|
-
.for(
|
141
|
-
.tap(
|
179
|
+
.for(JAVASCRIPT_MODULE_TYPE_AUTO)
|
180
|
+
.tap(PLUGIN_NAME, handler);
|
142
181
|
normalModuleFactory.hooks.parser
|
143
|
-
.for(
|
144
|
-
.tap(
|
182
|
+
.for(JAVASCRIPT_MODULE_TYPE_DYNAMIC)
|
183
|
+
.tap(PLUGIN_NAME, handler);
|
145
184
|
normalModuleFactory.hooks.parser
|
146
|
-
.for(
|
147
|
-
.tap(
|
185
|
+
.for(JAVASCRIPT_MODULE_TYPE_ESM)
|
186
|
+
.tap(PLUGIN_NAME, handler);
|
148
187
|
}
|
149
188
|
);
|
150
189
|
}
|
package/lib/Compilation.js
CHANGED
@@ -49,6 +49,7 @@ const ModuleProfile = require("./ModuleProfile");
|
|
49
49
|
const ModuleRestoreError = require("./ModuleRestoreError");
|
50
50
|
const ModuleStoreError = require("./ModuleStoreError");
|
51
51
|
const ModuleTemplate = require("./ModuleTemplate");
|
52
|
+
const { WEBPACK_MODULE_TYPE_RUNTIME } = require("./ModuleTypeConstants");
|
52
53
|
const RuntimeGlobals = require("./RuntimeGlobals");
|
53
54
|
const RuntimeTemplate = require("./RuntimeTemplate");
|
54
55
|
const Stats = require("./Stats");
|
@@ -61,7 +62,7 @@ const StatsPrinter = require("./stats/StatsPrinter");
|
|
61
62
|
const { equals: arrayEquals } = require("./util/ArrayHelpers");
|
62
63
|
const AsyncQueue = require("./util/AsyncQueue");
|
63
64
|
const LazySet = require("./util/LazySet");
|
64
|
-
const {
|
65
|
+
const { getOrInsert } = require("./util/MapHelpers");
|
65
66
|
const WeakTupleMap = require("./util/WeakTupleMap");
|
66
67
|
const { cachedCleverMerge } = require("./util/cleverMerge");
|
67
68
|
const {
|
@@ -646,7 +647,12 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
|
|
646
647
|
|
647
648
|
/** @type {SyncHook<[]>} */
|
648
649
|
beforeChunks: new SyncHook([]),
|
649
|
-
/**
|
650
|
+
/**
|
651
|
+
* The `afterChunks` hook is called directly after the chunks and module graph have
|
652
|
+
* been created and before the chunks and modules have been optimized. This hook is useful to
|
653
|
+
* inspect, analyze, and/or modify the chunk graph.
|
654
|
+
* @type {SyncHook<[Iterable<Chunk>]>}
|
655
|
+
*/
|
650
656
|
afterChunks: new SyncHook(["chunks"]),
|
651
657
|
|
652
658
|
/** @type {SyncBailHook<[Iterable<Module>]>} */
|
@@ -675,7 +681,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
|
|
675
681
|
optimizeChunkModules: new AsyncSeriesBailHook(["chunks", "modules"]),
|
676
682
|
/** @type {SyncHook<[Iterable<Chunk>, Iterable<Module>]>} */
|
677
683
|
afterOptimizeChunkModules: new SyncHook(["chunks", "modules"]),
|
678
|
-
/** @type {SyncBailHook<[], boolean>} */
|
684
|
+
/** @type {SyncBailHook<[], boolean | undefined>} */
|
679
685
|
shouldRecord: new SyncBailHook([]),
|
680
686
|
|
681
687
|
/** @type {SyncHook<[Chunk, Set<string>, RuntimeRequirementsContext]>} */
|
@@ -2578,6 +2584,8 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
|
|
2578
2584
|
p.calculate();
|
2579
2585
|
|
2580
2586
|
const logger = this.getLogger("webpack.Compilation.ModuleProfile");
|
2587
|
+
// Avoid coverage problems due indirect changes
|
2588
|
+
/* istanbul ignore next */
|
2581
2589
|
const logByValue = (value, msg) => {
|
2582
2590
|
if (value > 1000) {
|
2583
2591
|
logger.error(msg);
|
@@ -2618,7 +2626,7 @@ BREAKING CHANGE: Asset processing hooks in Compilation has been merged into a si
|
|
2618
2626
|
const logByLoadersSummary = (category, getDuration, getParallelism) => {
|
2619
2627
|
const map = new Map();
|
2620
2628
|
for (const [module, profile] of modulesWithProfiles) {
|
2621
|
-
const list =
|
2629
|
+
const list = getOrInsert(
|
2622
2630
|
map,
|
2623
2631
|
module.type + "!" + module.identifier().replace(/(!|^)[^!]*$/, ""),
|
2624
2632
|
() => []
|
@@ -3200,6 +3208,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
|
|
3200
3208
|
const { chunkGraph, moduleGraph, dependencyTemplates, runtimeTemplate } =
|
3201
3209
|
this;
|
3202
3210
|
const results = this.codeGenerationResults;
|
3211
|
+
/** @type {WebpackError[]} */
|
3203
3212
|
const errors = [];
|
3204
3213
|
/** @type {Set<Module> | undefined} */
|
3205
3214
|
let notCodeGeneratedModules = undefined;
|
@@ -3295,7 +3304,7 @@ Or do you want to use the entrypoints '${name}' and '${runtime}' independently o
|
|
3295
3304
|
* @param {RuntimeTemplate} runtimeTemplate runtimeTemplate
|
3296
3305
|
* @param {WebpackError[]} errors errors
|
3297
3306
|
* @param {CodeGenerationResults} results results
|
3298
|
-
* @param {function(WebpackError=, boolean=): void} callback callback
|
3307
|
+
* @param {function((WebpackError | null)=, boolean=): void} callback callback
|
3299
3308
|
*/
|
3300
3309
|
_codeGenerationModule(
|
3301
3310
|
module,
|
@@ -5016,13 +5025,13 @@ This prevents using hashes of each other and should be avoided.`);
|
|
5016
5025
|
};
|
5017
5026
|
const interceptModuleExecution = (__webpack_require__[
|
5018
5027
|
RuntimeGlobals.interceptModuleExecution.replace(
|
5019
|
-
|
5028
|
+
`${RuntimeGlobals.require}.`,
|
5020
5029
|
""
|
5021
5030
|
)
|
5022
5031
|
] = []);
|
5023
5032
|
const moduleCache = (__webpack_require__[
|
5024
5033
|
RuntimeGlobals.moduleCache.replace(
|
5025
|
-
|
5034
|
+
`${RuntimeGlobals.require}.`,
|
5026
5035
|
""
|
5027
5036
|
)
|
5028
5037
|
] = {});
|
@@ -5119,7 +5128,7 @@ This prevents using hashes of each other and should be avoided.`);
|
|
5119
5128
|
const usedIds = new Set();
|
5120
5129
|
|
5121
5130
|
for (const module of this.modules) {
|
5122
|
-
if (module.type ===
|
5131
|
+
if (module.type === WEBPACK_MODULE_TYPE_RUNTIME) continue;
|
5123
5132
|
const moduleId = chunkGraph.getModuleId(module);
|
5124
5133
|
if (moduleId === null) continue;
|
5125
5134
|
if (usedIds.has(moduleId)) {
|
package/lib/Compiler.js
CHANGED
@@ -126,7 +126,7 @@ class Compiler {
|
|
126
126
|
/** @type {SyncHook<[]>} */
|
127
127
|
initialize: new SyncHook([]),
|
128
128
|
|
129
|
-
/** @type {SyncBailHook<[Compilation], boolean>} */
|
129
|
+
/** @type {SyncBailHook<[Compilation], boolean | undefined>} */
|
130
130
|
shouldEmit: new SyncBailHook(["compilation"]),
|
131
131
|
/** @type {AsyncSeriesHook<[Stats]>} */
|
132
132
|
done: new AsyncSeriesHook(["stats"]),
|
@@ -970,10 +970,13 @@ ${other}`);
|
|
970
970
|
readRecords(callback) {
|
971
971
|
if (this.hooks.readRecords.isUsed()) {
|
972
972
|
if (this.recordsInputPath) {
|
973
|
-
asyncLib.parallel(
|
974
|
-
|
975
|
-
|
976
|
-
|
973
|
+
asyncLib.parallel(
|
974
|
+
[
|
975
|
+
cb => this.hooks.readRecords.callAsync(cb),
|
976
|
+
this._readRecords.bind(this)
|
977
|
+
],
|
978
|
+
err => callback(err)
|
979
|
+
);
|
977
980
|
} else {
|
978
981
|
this.records = {};
|
979
982
|
this.hooks.readRecords.callAsync(callback);
|
@@ -1008,8 +1011,7 @@ ${other}`);
|
|
1008
1011
|
try {
|
1009
1012
|
this.records = parseJson(content.toString("utf-8"));
|
1010
1013
|
} catch (e) {
|
1011
|
-
|
1012
|
-
return callback(e);
|
1014
|
+
return callback(new Error(`Cannot parse records: ${e.message}`));
|
1013
1015
|
}
|
1014
1016
|
|
1015
1017
|
return callback();
|
@@ -1071,7 +1073,9 @@ ${other}`);
|
|
1071
1073
|
childCompiler.root = this.root;
|
1072
1074
|
if (Array.isArray(plugins)) {
|
1073
1075
|
for (const plugin of plugins) {
|
1074
|
-
plugin
|
1076
|
+
if (plugin) {
|
1077
|
+
plugin.apply(childCompiler);
|
1078
|
+
}
|
1075
1079
|
}
|
1076
1080
|
}
|
1077
1081
|
for (const name in this.hooks) {
|
@@ -108,7 +108,7 @@ class ConcatenationScope {
|
|
108
108
|
module,
|
109
109
|
{ ids = undefined, call = false, directImport = false, asiSafe = false }
|
110
110
|
) {
|
111
|
-
const info = this._modulesMap.get(module);
|
111
|
+
const info = /** @type {ModuleInfo} */ (this._modulesMap.get(module));
|
112
112
|
const callFlag = call ? "_call" : "";
|
113
113
|
const directImportFlag = directImport ? "_directImport" : "";
|
114
114
|
const asiSafeFlag = asiSafe
|
@@ -133,7 +133,7 @@ class ConcatenationScope {
|
|
133
133
|
|
134
134
|
/**
|
135
135
|
* @param {string} name the identifier
|
136
|
-
* @returns {ModuleReferenceOptions & { index: number }} parsed options and index
|
136
|
+
* @returns {ModuleReferenceOptions & { index: number } | null} parsed options and index
|
137
137
|
*/
|
138
138
|
static matchModuleReference(name) {
|
139
139
|
const match = MODULE_REFERENCE_REGEXP.exec(name);
|
@@ -14,6 +14,11 @@ const { mergeRuntime } = require("./util/runtime");
|
|
14
14
|
/** @typedef {import("./Generator").GenerateContext} GenerateContext */
|
15
15
|
/** @typedef {import("./util/runtime").RuntimeSpec} RuntimeSpec */
|
16
16
|
|
17
|
+
/**
|
18
|
+
* @param {string} condition condition
|
19
|
+
* @param {string | Source} source source
|
20
|
+
* @returns {string | Source} wrapped source
|
21
|
+
*/
|
17
22
|
const wrapInCondition = (condition, source) => {
|
18
23
|
if (typeof source === "string") {
|
19
24
|
return Template.asString([
|
@@ -33,13 +38,14 @@ const wrapInCondition = (condition, source) => {
|
|
33
38
|
|
34
39
|
/**
|
35
40
|
* @typedef {GenerateContext} Context
|
41
|
+
* @extends {InitFragment<Context>}
|
36
42
|
*/
|
37
43
|
class ConditionalInitFragment extends InitFragment {
|
38
44
|
/**
|
39
45
|
* @param {string|Source} content the source code that will be included as initialization code
|
40
46
|
* @param {number} stage category of initialization code (contribute to order)
|
41
47
|
* @param {number} position position in the category (contribute to order)
|
42
|
-
* @param {string} key unique key to avoid emitting the same initialization code twice
|
48
|
+
* @param {string | undefined} key unique key to avoid emitting the same initialization code twice
|
43
49
|
* @param {RuntimeSpec | boolean} runtimeCondition in which runtime this fragment should be executed
|
44
50
|
* @param {string|Source=} endContent the source code that will be included at the end of the module
|
45
51
|
*/
|
@@ -89,6 +95,10 @@ class ConditionalInitFragment extends InitFragment {
|
|
89
95
|
return wrapInCondition(expr, this.endContent);
|
90
96
|
}
|
91
97
|
|
98
|
+
/**
|
99
|
+
* @param {ConditionalInitFragment} other fragment to merge with
|
100
|
+
* @returns {ConditionalInitFragment} merged fragment
|
101
|
+
*/
|
92
102
|
merge(other) {
|
93
103
|
if (this.runtimeCondition === true) return this;
|
94
104
|
if (other.runtimeCondition === true) return other;
|