@depup/webpack 5.106.0-depup.0 → 5.109.0-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/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 +141 -9
- package/lib/ChunkGroup.js +115 -28
- package/lib/ChunkTemplate.js +9 -0
- package/lib/CircularModulesPlugin.js +190 -0
- package/lib/CleanPlugin.js +23 -26
- package/lib/CodeGenerationResults.js +19 -0
- package/lib/CompatibilityPlugin.js +54 -37
- package/lib/Compilation.js +635 -107
- package/lib/Compiler.js +93 -31
- 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 +498 -127
- 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 +399 -108
- package/lib/ExportsInfoApiPlugin.js +4 -3
- package/lib/ExternalModule.js +376 -78
- package/lib/ExternalModuleFactoryPlugin.js +75 -3
- package/lib/ExternalsPlugin.js +3 -1
- package/lib/FileSystemInfo.js +575 -149
- package/lib/FlagAllModulesAsUsedPlugin.js +3 -6
- package/lib/FlagDependencyExportsPlugin.js +82 -9
- package/lib/FlagDependencyUsagePlugin.js +92 -6
- 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 +15 -0
- 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 -60
- package/lib/ModuleFactory.js +6 -1
- package/lib/ModuleFilenameHelpers.js +5 -2
- 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 +485 -181
- package/lib/NormalModuleFactory.js +148 -29
- 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 +104 -26
- 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 +29 -3
- 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 +43 -7
- 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 +591 -41
- 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/ModuleFederationPlugin.js +12 -26
- 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 +534 -272
- package/lib/css/CssInjectStyleRuntimeModule.js +86 -70
- package/lib/css/CssLoadingRuntimeModule.js +156 -77
- package/lib/{CssModule.js → css/CssModule.js} +72 -37
- package/lib/css/CssModulesPlugin.js +356 -204
- package/lib/css/CssParser.js +3452 -1950
- package/lib/css/syntax.js +4058 -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 +138 -38
- package/lib/dependencies/CommonJsExportsDependency.js +74 -20
- package/lib/dependencies/CommonJsExportsParserPlugin.js +246 -15
- package/lib/dependencies/CommonJsFullRequireDependency.js +62 -27
- package/lib/dependencies/CommonJsImportsParserPlugin.js +187 -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 +682 -368
- 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 +32 -2
- package/lib/dependencies/HarmonyExportDependencyParserPlugin.js +70 -33
- package/lib/dependencies/HarmonyExportExpressionDependency.js +140 -46
- package/lib/dependencies/HarmonyExportHeaderDependency.js +11 -9
- package/lib/dependencies/HarmonyExportImportedSpecifierDependency.js +253 -37
- 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 +59 -3
- package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +139 -146
- package/lib/dependencies/HarmonyImportGuard.js +426 -0
- package/lib/dependencies/HarmonyImportSideEffectDependency.js +22 -1
- package/lib/dependencies/HarmonyImportSpecifierDependency.js +136 -17
- 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 +71 -49
- 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 +34 -8
- package/lib/html/HtmlGenerator.js +1470 -0
- package/lib/html/HtmlModule.js +41 -0
- package/lib/html/HtmlModulesPlugin.js +1111 -0
- package/lib/html/HtmlParser.js +1970 -0
- package/lib/html/favicon.svg +1 -0
- package/lib/html/syntax.js +9020 -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 +25 -2
- 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 +579 -183
- package/lib/javascript/JavascriptParser.js +1289 -462
- package/lib/javascript/JavascriptParserHelpers.js +10 -7
- package/lib/javascript/StartupHelpers.js +5 -0
- package/lib/javascript/syntax.js +4380 -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 +23 -1
- package/lib/node/ReadFileCompileWasmPlugin.js +18 -1
- 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 +3 -1
- package/lib/optimize/AggressiveSplittingPlugin.js +6 -1
- package/lib/optimize/ConcatenatedModule.js +585 -116
- 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 +159 -34
- package/lib/optimize/RealContentHashPlugin.js +125 -50
- 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 +54 -6
- 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 +663 -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 +552 -463
- package/lib/serialization/DateObjectSerializer.js +4 -2
- package/lib/serialization/ErrorObjectSerializer.js +10 -6
- package/lib/serialization/FileMiddleware.js +50 -3
- 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 +94 -12
- package/lib/stats/DefaultStatsPresetPlugin.js +14 -2
- package/lib/stats/DefaultStatsPrinterPlugin.js +64 -18
- package/lib/stats/StatsFactory.js +39 -18
- 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 +97 -6
- 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 +1117 -79
- 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 +8608 -1159
- 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
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/*
|
|
2
|
+
MIT License http://www.opensource.org/licenses/mit-license.php
|
|
3
|
+
Author Alexander Akait @alexander-akait
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
"use strict";
|
|
7
|
+
|
|
8
|
+
const mod = require("module");
|
|
9
|
+
const {
|
|
10
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
|
11
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
|
12
|
+
JAVASCRIPT_MODULE_TYPE_ESM
|
|
13
|
+
} = require("../ModuleTypeConstants");
|
|
14
|
+
const NormalModule = require("../NormalModule");
|
|
15
|
+
const ModuleBuildError = require("../errors/ModuleBuildError");
|
|
16
|
+
const memoize = require("../util/memoize");
|
|
17
|
+
const removeBOM = require("../util/removeBOM");
|
|
18
|
+
|
|
19
|
+
/** @typedef {import("webpack-sources").RawSourceMap} RawSourceMap */
|
|
20
|
+
/** @typedef {import("../Compiler")} Compiler */
|
|
21
|
+
/** @typedef {import("../NormalModule")} NormalModuleType */
|
|
22
|
+
/** @typedef {import("../NormalModule").Result} Result */
|
|
23
|
+
/** @typedef {import("../javascript/JavascriptParser")} JavascriptParser */
|
|
24
|
+
|
|
25
|
+
const getSourceMapSource = memoize(
|
|
26
|
+
() => require("webpack-sources").SourceMapSource
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const PLUGIN_NAME = "TypeScriptPlugin";
|
|
30
|
+
|
|
31
|
+
/** @type {Set<string>} */
|
|
32
|
+
const JS_MODULE_TYPES = new Set([
|
|
33
|
+
JAVASCRIPT_MODULE_TYPE_AUTO,
|
|
34
|
+
JAVASCRIPT_MODULE_TYPE_DYNAMIC,
|
|
35
|
+
JAVASCRIPT_MODULE_TYPE_ESM
|
|
36
|
+
]);
|
|
37
|
+
|
|
38
|
+
const TS_RESOURCE_RE = /\.(?:[mc]?tsx?)$/i;
|
|
39
|
+
const TSX_RESOURCE_RE = /\.[mc]?tsx$/i;
|
|
40
|
+
const TS_DATA_URI_RE = /^data:(?:text|application)\/typescript/i;
|
|
41
|
+
|
|
42
|
+
const TSX_NOT_SUPPORTED =
|
|
43
|
+
"experiments.typescript does not support .tsx/JSX. " +
|
|
44
|
+
"Use a TSX-capable loader (e.g. swc-loader, esbuild-loader, ts-loader) for .tsx files.";
|
|
45
|
+
|
|
46
|
+
const NODE_API_MISSING =
|
|
47
|
+
"experiments.typescript requires Node.js >= 22.6. " +
|
|
48
|
+
"`module.stripTypeScriptTypes` is not available on this Node.js version.";
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Whether the resource (path or `data:` URI) should go through the TypeScript
|
|
52
|
+
* transform. Returns true for `.ts`, `.cts`, `.mts`, and the JSX-flavoured
|
|
53
|
+
* variants (so the `.tsx` branch can throw a friendly error), as well as the
|
|
54
|
+
* `text/typescript` / `application/typescript` data URIs.
|
|
55
|
+
* @param {string} resource module resource (without query string)
|
|
56
|
+
* @returns {boolean} true if the resource should be transformed
|
|
57
|
+
*/
|
|
58
|
+
const isTypeScriptResource = (resource) =>
|
|
59
|
+
TS_RESOURCE_RE.test(resource) || TS_DATA_URI_RE.test(resource);
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Build a line-granularity identity source map for a strip-types output.
|
|
63
|
+
* `mode: "strip"` replaces type annotations with whitespace, so the stripped
|
|
64
|
+
* output preserves the original line layout — an identity mapping is correct.
|
|
65
|
+
* Node's API does not emit a source map in strip mode (`sourceMap: true` is
|
|
66
|
+
* rejected on Node 22+ and Node 26+), so we construct one by hand.
|
|
67
|
+
* @param {string} resource module resource path
|
|
68
|
+
* @param {string} originalSource pre-strip source content
|
|
69
|
+
* @returns {RawSourceMap} identity source map
|
|
70
|
+
*/
|
|
71
|
+
const createIdentitySourceMap = (resource, originalSource) => {
|
|
72
|
+
const lineCount = (originalSource.match(/\n/g) || []).length + 1;
|
|
73
|
+
// Mappings: each line emits a single segment at column 0 mapping to
|
|
74
|
+
// column 0 of the same line in the source. `AAAA` for line 1, `;AACA`
|
|
75
|
+
// for each subsequent line (cumulative source-line delta of +1 per line).
|
|
76
|
+
const mappings = `AAAA${";AACA".repeat(lineCount - 1)}`;
|
|
77
|
+
|
|
78
|
+
return {
|
|
79
|
+
version: 3,
|
|
80
|
+
file: resource,
|
|
81
|
+
sources: [resource],
|
|
82
|
+
sourcesContent: [originalSource],
|
|
83
|
+
names: [],
|
|
84
|
+
mappings
|
|
85
|
+
};
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Compose the strip-types source map with an upstream loader source map so the
|
|
90
|
+
* final map points back to the loader's original input (e.g. a `.vue` /
|
|
91
|
+
* `.svelte` / custom loader that emits TS code).
|
|
92
|
+
* @param {string} resource module resource
|
|
93
|
+
* @param {string} strippedSource post-strip JS
|
|
94
|
+
* @param {RawSourceMap} stripMap identity map for the strip step
|
|
95
|
+
* @param {string} preStripSource pre-strip TS (loader output)
|
|
96
|
+
* @param {string | RawSourceMap} loaderSourceMap upstream loader source map
|
|
97
|
+
* @returns {RawSourceMap} composed map
|
|
98
|
+
*/
|
|
99
|
+
const composeWithLoaderSourceMap = (
|
|
100
|
+
resource,
|
|
101
|
+
strippedSource,
|
|
102
|
+
stripMap,
|
|
103
|
+
preStripSource,
|
|
104
|
+
loaderSourceMap
|
|
105
|
+
) => {
|
|
106
|
+
const SourceMapSource = getSourceMapSource();
|
|
107
|
+
const composed = new SourceMapSource(
|
|
108
|
+
strippedSource,
|
|
109
|
+
resource,
|
|
110
|
+
stripMap,
|
|
111
|
+
preStripSource,
|
|
112
|
+
loaderSourceMap,
|
|
113
|
+
true
|
|
114
|
+
);
|
|
115
|
+
return /** @type {RawSourceMap} */ (composed.sourceAndMap().map) || stripMap;
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Run `module.stripTypeScriptTypes` on the input, wrapping any thrown
|
|
120
|
+
* `TypeScript ...` errors as `ModuleBuildError` so they surface as
|
|
121
|
+
* per-module build errors instead of uncaught exceptions.
|
|
122
|
+
* @param {string} input pre-strip TS source (BOM-free string)
|
|
123
|
+
* @returns {string} stripped JS
|
|
124
|
+
*/
|
|
125
|
+
const stripTypes = (input) => {
|
|
126
|
+
try {
|
|
127
|
+
// Pass only `mode`. `sourceUrl` would emit a `//# sourceURL=…` pragma
|
|
128
|
+
// into the output (V8 debugger hint), and `sourceMap: true` is
|
|
129
|
+
// rejected in strip mode — we build the source map by hand instead.
|
|
130
|
+
// eslint-disable-next-line n/no-unsupported-features/node-builtins
|
|
131
|
+
return mod.stripTypeScriptTypes(input, { mode: "strip" });
|
|
132
|
+
} catch (err) {
|
|
133
|
+
throw new ModuleBuildError(/** @type {Error} */ (err));
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Coerce a Buffer-or-string source to a UTF-8 string, dropping any BOM.
|
|
139
|
+
* @param {string | Buffer} source raw source from the loader pipeline
|
|
140
|
+
* @returns {string} UTF-8 string without BOM
|
|
141
|
+
*/
|
|
142
|
+
const toBomFreeString = (source) => {
|
|
143
|
+
const text = Buffer.isBuffer(source) ? source.toString("utf8") : source;
|
|
144
|
+
const stripped = removeBOM(text);
|
|
145
|
+
return typeof stripped === "string" ? stripped : stripped.toString("utf8");
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
class TypeScriptPlugin {
|
|
149
|
+
/**
|
|
150
|
+
* @param {Compiler} compiler webpack compiler
|
|
151
|
+
* @returns {void}
|
|
152
|
+
*/
|
|
153
|
+
apply(compiler) {
|
|
154
|
+
compiler.hooks.compilation.tap(PLUGIN_NAME, (compilation) => {
|
|
155
|
+
NormalModule.getCompilationHooks(compilation).processResult.tap(
|
|
156
|
+
PLUGIN_NAME,
|
|
157
|
+
(result, module) => this._processResult(result, module)
|
|
158
|
+
);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* processResult tap body. Returns the input untouched unless this is a
|
|
164
|
+
* TypeScript module that needs to be transformed.
|
|
165
|
+
* @param {Result} result loader result tuple
|
|
166
|
+
* @param {NormalModuleType} module the normal module
|
|
167
|
+
* @returns {Result} possibly transformed result
|
|
168
|
+
*/
|
|
169
|
+
_processResult(result, module) {
|
|
170
|
+
if (!JS_MODULE_TYPES.has(module.type)) return result;
|
|
171
|
+
|
|
172
|
+
const parser = /** @type {JavascriptParser} */ (module.parser);
|
|
173
|
+
if (!parser.options.typescript) return result;
|
|
174
|
+
|
|
175
|
+
const resource = module.nameForCondition();
|
|
176
|
+
if (!resource || !isTypeScriptResource(resource)) return result;
|
|
177
|
+
|
|
178
|
+
if (TSX_RESOURCE_RE.test(resource)) {
|
|
179
|
+
throw new ModuleBuildError(new Error(TSX_NOT_SUPPORTED));
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (!("stripTypeScriptTypes" in mod)) {
|
|
183
|
+
throw new ModuleBuildError(new Error(NODE_API_MISSING));
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const [rawSource, loaderSourceMap, ...rest] = result;
|
|
187
|
+
const preStripSource = toBomFreeString(rawSource);
|
|
188
|
+
const strippedSource = stripTypes(preStripSource);
|
|
189
|
+
|
|
190
|
+
const needSourceMap = module.useSourceMap || module.useSimpleSourceMap;
|
|
191
|
+
const stripMap = needSourceMap
|
|
192
|
+
? createIdentitySourceMap(module.resource, preStripSource)
|
|
193
|
+
: undefined;
|
|
194
|
+
|
|
195
|
+
const outputSourceMap =
|
|
196
|
+
stripMap && loaderSourceMap
|
|
197
|
+
? composeWithLoaderSourceMap(
|
|
198
|
+
module.resource,
|
|
199
|
+
strippedSource,
|
|
200
|
+
stripMap,
|
|
201
|
+
preStripSource,
|
|
202
|
+
loaderSourceMap
|
|
203
|
+
)
|
|
204
|
+
: stripMap || loaderSourceMap;
|
|
205
|
+
|
|
206
|
+
return [strippedSource, outputSourceMap, ...rest];
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
module.exports = TypeScriptPlugin;
|
|
@@ -6,16 +6,20 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
const { pathToFileURL } = require("url");
|
|
9
|
-
const CommentCompilationWarning = require("../CommentCompilationWarning");
|
|
10
9
|
const RuntimeGlobals = require("../RuntimeGlobals");
|
|
11
|
-
const UnsupportedFeatureWarning = require("../UnsupportedFeatureWarning");
|
|
12
10
|
const ConstDependency = require("../dependencies/ConstDependency");
|
|
13
11
|
const ContextDependencyHelpers = require("../dependencies/ContextDependencyHelpers");
|
|
12
|
+
const {
|
|
13
|
+
isImportMetaFieldEnabled
|
|
14
|
+
} = require("../dependencies/ImportMetaPlugin");
|
|
14
15
|
const URLContextDependency = require("../dependencies/URLContextDependency");
|
|
15
16
|
const URLDependency = require("../dependencies/URLDependency");
|
|
17
|
+
const CommentCompilationWarning = require("../errors/CommentCompilationWarning");
|
|
18
|
+
const UnsupportedFeatureWarning = require("../errors/UnsupportedFeatureWarning");
|
|
16
19
|
const BasicEvaluatedExpression = require("../javascript/BasicEvaluatedExpression");
|
|
17
20
|
const { approve } = require("../javascript/JavascriptParserHelpers");
|
|
18
|
-
const
|
|
21
|
+
const { getInnerGraphUtils } = require("../optimize/InnerGraph");
|
|
22
|
+
const ResourceHintPlugin = require("../prefetch/ResourceHintPlugin");
|
|
19
23
|
|
|
20
24
|
/** @typedef {import("estree").MemberExpression} MemberExpression */
|
|
21
25
|
/** @typedef {import("estree").NewExpression} NewExpressionNode */
|
|
@@ -28,12 +32,14 @@ const InnerGraph = require("../optimize/InnerGraph");
|
|
|
28
32
|
const PLUGIN_NAME = "URLParserPlugin";
|
|
29
33
|
|
|
30
34
|
/**
|
|
35
|
+
* Returns file url.
|
|
31
36
|
* @param {NormalModule} module module
|
|
32
37
|
* @returns {URL} file url
|
|
33
38
|
*/
|
|
34
39
|
const getUrl = (module) => pathToFileURL(module.resource);
|
|
35
40
|
|
|
36
41
|
/**
|
|
42
|
+
* Checks whether this object is meta url.
|
|
37
43
|
* @param {JavascriptParser} parser parser parser
|
|
38
44
|
* @param {MemberExpression} arg arg
|
|
39
45
|
* @returns {boolean} true when it is `meta.url`, otherwise false
|
|
@@ -54,19 +60,48 @@ const isMetaUrl = (parser, arg) => {
|
|
|
54
60
|
return true;
|
|
55
61
|
};
|
|
56
62
|
|
|
63
|
+
/**
|
|
64
|
+
* Whether the request points to a directory and thus can't be an asset.
|
|
65
|
+
* @param {string} request request
|
|
66
|
+
* @returns {boolean} true when the request is a directory reference
|
|
67
|
+
*/
|
|
68
|
+
const isDirectoryRequest = (request) =>
|
|
69
|
+
request === "." || request === ".." || request.endsWith("/");
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Replaces `import.meta.url` with the runtime base URI, leaving the
|
|
73
|
+
* `new URL(...)` construction untouched so it's evaluated at runtime.
|
|
74
|
+
* @param {JavascriptParser} parser parser
|
|
75
|
+
* @param {NewExpressionNode} expr expression
|
|
76
|
+
* @returns {void}
|
|
77
|
+
*/
|
|
78
|
+
const keepNewURL = (parser, expr) => {
|
|
79
|
+
const [, arg2] = expr.arguments;
|
|
80
|
+
const dep = new ConstDependency(
|
|
81
|
+
RuntimeGlobals.baseURI,
|
|
82
|
+
/** @type {Range} */ (arg2.range),
|
|
83
|
+
[RuntimeGlobals.baseURI]
|
|
84
|
+
);
|
|
85
|
+
dep.loc = parser.getLocation(expr);
|
|
86
|
+
parser.state.module.addPresentationalDependency(dep);
|
|
87
|
+
};
|
|
88
|
+
|
|
57
89
|
/** @type {WeakMap<NewExpressionNode, BasicEvaluatedExpression | undefined>} */
|
|
58
90
|
const getEvaluatedExprCache = new WeakMap();
|
|
59
91
|
|
|
60
92
|
/**
|
|
93
|
+
* Gets evaluated expr.
|
|
61
94
|
* @param {NewExpressionNode} expr expression
|
|
62
95
|
* @param {JavascriptParser} parser parser parser
|
|
96
|
+
* @param {boolean} importMetaUrlEnabled true when import.meta.url should be handled
|
|
63
97
|
* @returns {BasicEvaluatedExpression | undefined} basic evaluated expression
|
|
64
98
|
*/
|
|
65
|
-
const getEvaluatedExpr = (expr, parser) => {
|
|
99
|
+
const getEvaluatedExpr = (expr, parser, importMetaUrlEnabled) => {
|
|
66
100
|
let result = getEvaluatedExprCache.get(expr);
|
|
67
101
|
if (result !== undefined) return result;
|
|
68
102
|
|
|
69
103
|
/**
|
|
104
|
+
* Returns basic evaluated expression.
|
|
70
105
|
* @returns {BasicEvaluatedExpression | undefined} basic evaluated expression
|
|
71
106
|
*/
|
|
72
107
|
const evaluate = () => {
|
|
@@ -77,7 +112,9 @@ const getEvaluatedExpr = (expr, parser) => {
|
|
|
77
112
|
if (arg2.type !== "MemberExpression" || arg1.type === "SpreadElement") {
|
|
78
113
|
return;
|
|
79
114
|
}
|
|
80
|
-
if (!isMetaUrl(parser, arg2))
|
|
115
|
+
if (!importMetaUrlEnabled || !isMetaUrl(parser, arg2)) {
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
81
118
|
|
|
82
119
|
return parser.evaluateExpression(arg1);
|
|
83
120
|
};
|
|
@@ -88,8 +125,16 @@ const getEvaluatedExpr = (expr, parser) => {
|
|
|
88
125
|
return result;
|
|
89
126
|
};
|
|
90
127
|
|
|
128
|
+
/**
|
|
129
|
+
* @typedef {object} ResolvedResourceHints
|
|
130
|
+
* @property {boolean=} prefetch project-wide prefetch default
|
|
131
|
+
* @property {boolean=} preload project-wide preload default
|
|
132
|
+
* @property {("low" | "high" | "auto" | false)=} fetchPriority project-wide fetchPriority default
|
|
133
|
+
*/
|
|
134
|
+
|
|
91
135
|
class URLParserPlugin {
|
|
92
136
|
/**
|
|
137
|
+
* Creates an instance of URLParserPlugin.
|
|
93
138
|
* @param {JavascriptParserOptions} options options
|
|
94
139
|
*/
|
|
95
140
|
constructor(options) {
|
|
@@ -98,15 +143,24 @@ class URLParserPlugin {
|
|
|
98
143
|
}
|
|
99
144
|
|
|
100
145
|
/**
|
|
146
|
+
* Applies the plugin by registering its hooks on the compiler.
|
|
101
147
|
* @param {JavascriptParser} parser the parser
|
|
102
148
|
* @returns {void}
|
|
103
149
|
*/
|
|
104
150
|
apply(parser) {
|
|
105
151
|
const relative = this.options.url === "relative";
|
|
152
|
+
const importMetaUrlEnabled = isImportMetaFieldEnabled(
|
|
153
|
+
this.options.importMeta,
|
|
154
|
+
"url"
|
|
155
|
+
);
|
|
106
156
|
|
|
107
157
|
parser.hooks.canRename.for("URL").tap(PLUGIN_NAME, approve);
|
|
108
158
|
parser.hooks.evaluateNewExpression.for("URL").tap(PLUGIN_NAME, (expr) => {
|
|
109
|
-
const evaluatedExpr = getEvaluatedExpr(
|
|
159
|
+
const evaluatedExpr = getEvaluatedExpr(
|
|
160
|
+
expr,
|
|
161
|
+
parser,
|
|
162
|
+
importMetaUrlEnabled
|
|
163
|
+
);
|
|
110
164
|
const request = evaluatedExpr && evaluatedExpr.asString();
|
|
111
165
|
|
|
112
166
|
if (!request) return;
|
|
@@ -127,7 +181,7 @@ class URLParserPlugin {
|
|
|
127
181
|
parser.state.module.addWarning(
|
|
128
182
|
new CommentCompilationWarning(
|
|
129
183
|
`Compilation error while processing magic comment(-s): /*${comment.value}*/: ${e.message}`,
|
|
130
|
-
|
|
184
|
+
parser.getLocation(comment)
|
|
131
185
|
)
|
|
132
186
|
);
|
|
133
187
|
}
|
|
@@ -138,7 +192,7 @@ class URLParserPlugin {
|
|
|
138
192
|
parser.state.module.addWarning(
|
|
139
193
|
new UnsupportedFeatureWarning(
|
|
140
194
|
`\`webpackIgnore\` expected a boolean, but received: ${importOptions.webpackIgnore}.`,
|
|
141
|
-
|
|
195
|
+
parser.getLocation(expr)
|
|
142
196
|
)
|
|
143
197
|
);
|
|
144
198
|
return;
|
|
@@ -147,23 +201,25 @@ class URLParserPlugin {
|
|
|
147
201
|
|
|
148
202
|
const [, arg2] = expr.arguments;
|
|
149
203
|
|
|
150
|
-
if (
|
|
204
|
+
if (
|
|
205
|
+
arg2.type !== "MemberExpression" ||
|
|
206
|
+
!importMetaUrlEnabled ||
|
|
207
|
+
!isMetaUrl(parser, arg2)
|
|
208
|
+
) {
|
|
151
209
|
return;
|
|
152
210
|
}
|
|
153
211
|
|
|
154
|
-
|
|
155
|
-
RuntimeGlobals.baseURI,
|
|
156
|
-
/** @type {Range} */ (arg2.range),
|
|
157
|
-
[RuntimeGlobals.baseURI]
|
|
158
|
-
);
|
|
159
|
-
dep.loc = /** @type {DependencyLocation} */ (expr.loc);
|
|
160
|
-
parser.state.module.addPresentationalDependency(dep);
|
|
212
|
+
keepNewURL(parser, expr);
|
|
161
213
|
|
|
162
214
|
return true;
|
|
163
215
|
}
|
|
164
216
|
}
|
|
165
217
|
|
|
166
|
-
const evaluatedExpr = getEvaluatedExpr(
|
|
218
|
+
const evaluatedExpr = getEvaluatedExpr(
|
|
219
|
+
expr,
|
|
220
|
+
parser,
|
|
221
|
+
importMetaUrlEnabled
|
|
222
|
+
);
|
|
167
223
|
if (!evaluatedExpr) return;
|
|
168
224
|
|
|
169
225
|
/** @type {string | undefined} */
|
|
@@ -171,6 +227,12 @@ class URLParserPlugin {
|
|
|
171
227
|
|
|
172
228
|
// static URL
|
|
173
229
|
if ((request = evaluatedExpr.asString())) {
|
|
230
|
+
// A directory is not an asset; keep `new URL(...)` as-is, matching Node/browsers.
|
|
231
|
+
if (isDirectoryRequest(request)) {
|
|
232
|
+
keepNewURL(parser, expr);
|
|
233
|
+
return true;
|
|
234
|
+
}
|
|
235
|
+
|
|
174
236
|
const [arg1, arg2] = expr.arguments;
|
|
175
237
|
const dep = new URLDependency(
|
|
176
238
|
request,
|
|
@@ -181,9 +243,31 @@ class URLParserPlugin {
|
|
|
181
243
|
/** @type {Range} */ (expr.range),
|
|
182
244
|
relative
|
|
183
245
|
);
|
|
184
|
-
dep.loc =
|
|
246
|
+
dep.loc = parser.getLocation(expr);
|
|
247
|
+
// `parser.javascript.urlHints` provides project-wide defaults
|
|
248
|
+
// (resolved per-request, with `test` / `include` / `exclude`
|
|
249
|
+
// matching); a per-URL magic comment for the same hint wins
|
|
250
|
+
// when both are set.
|
|
251
|
+
ResourceHintPlugin.applyResourceHints(
|
|
252
|
+
dep,
|
|
253
|
+
this.options.urlHints,
|
|
254
|
+
request,
|
|
255
|
+
importOptions,
|
|
256
|
+
parser.state.module,
|
|
257
|
+
parser.getLocation(expr)
|
|
258
|
+
);
|
|
185
259
|
parser.state.current.addDependency(dep);
|
|
186
|
-
|
|
260
|
+
// For ESM module output the template embeds the asset's resolved
|
|
261
|
+
// filename, so the asset must be code-generated first. Only added in
|
|
262
|
+
// that mode — a code-gen dependency on an asset that a later watch
|
|
263
|
+
// rebuild leaves unaffected can otherwise deadlock the scheduler.
|
|
264
|
+
if (parser.state.compilation.options.output.module) {
|
|
265
|
+
parser.state.module.addCodeGenerationDependency(dep);
|
|
266
|
+
}
|
|
267
|
+
getInnerGraphUtils(parser.state.compilation).onUsage(
|
|
268
|
+
parser.state,
|
|
269
|
+
(e) => (dep.usedByExports = e)
|
|
270
|
+
);
|
|
187
271
|
return true;
|
|
188
272
|
}
|
|
189
273
|
|
|
@@ -204,7 +288,7 @@ class URLParserPlugin {
|
|
|
204
288
|
parser.state.module.addWarning(
|
|
205
289
|
new UnsupportedFeatureWarning(
|
|
206
290
|
`\`webpackInclude\` expected a regular expression, but received: ${importOptions.webpackInclude}.`,
|
|
207
|
-
|
|
291
|
+
parser.getLocation(expr)
|
|
208
292
|
)
|
|
209
293
|
);
|
|
210
294
|
} else {
|
|
@@ -219,7 +303,7 @@ class URLParserPlugin {
|
|
|
219
303
|
parser.state.module.addWarning(
|
|
220
304
|
new UnsupportedFeatureWarning(
|
|
221
305
|
`\`webpackExclude\` expected a regular expression, but received: ${importOptions.webpackExclude}.`,
|
|
222
|
-
|
|
306
|
+
parser.getLocation(expr)
|
|
223
307
|
)
|
|
224
308
|
);
|
|
225
309
|
} else {
|
|
@@ -243,7 +327,7 @@ class URLParserPlugin {
|
|
|
243
327
|
parser
|
|
244
328
|
);
|
|
245
329
|
if (!dep) return;
|
|
246
|
-
dep.loc =
|
|
330
|
+
dep.loc = parser.getLocation(expr);
|
|
247
331
|
dep.optional = Boolean(parser.scope.inTry);
|
|
248
332
|
parser.state.current.addDependency(dep);
|
|
249
333
|
return true;
|
|
@@ -255,7 +339,11 @@ class URLParserPlugin {
|
|
|
255
339
|
const calleeInfo = parser.getFreeInfoFromVariable(callee.name);
|
|
256
340
|
if (!calleeInfo || calleeInfo.name !== "URL") return;
|
|
257
341
|
|
|
258
|
-
const evaluatedExpr = getEvaluatedExpr(
|
|
342
|
+
const evaluatedExpr = getEvaluatedExpr(
|
|
343
|
+
expr,
|
|
344
|
+
parser,
|
|
345
|
+
importMetaUrlEnabled
|
|
346
|
+
);
|
|
259
347
|
const request = evaluatedExpr && evaluatedExpr.asString();
|
|
260
348
|
|
|
261
349
|
if (request) return true;
|
package/lib/util/ArrayHelpers.js
CHANGED
|
@@ -34,6 +34,7 @@ module.exports.groupBy = (
|
|
|
34
34
|
) =>
|
|
35
35
|
arr.reduce(
|
|
36
36
|
/**
|
|
37
|
+
* Handles the callback logic for this hook.
|
|
37
38
|
* @param {[T[], T[]]} groups An accumulator storing already partitioned values returned from previous call.
|
|
38
39
|
* @param {T} value The value of the current element
|
|
39
40
|
* @returns {[T[], T[]]} returns an array of partitioned groups accumulator resulting from calling a predicate on the current value.
|
package/lib/util/ArrayQueue.js
CHANGED
|
@@ -6,10 +6,13 @@
|
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
+
* FIFO queue backed by arrays with a reversed dequeue buffer to avoid the cost
|
|
10
|
+
* of repeated `Array#shift` operations.
|
|
9
11
|
* @template T
|
|
10
12
|
*/
|
|
11
13
|
class ArrayQueue {
|
|
12
14
|
/**
|
|
15
|
+
* Seeds the queue with an optional iterable of items in dequeue order.
|
|
13
16
|
* @param {Iterable<T>=} items The initial elements.
|
|
14
17
|
*/
|
|
15
18
|
constructor(items) {
|
|
@@ -26,7 +29,7 @@ class ArrayQueue {
|
|
|
26
29
|
}
|
|
27
30
|
|
|
28
31
|
/**
|
|
29
|
-
* Returns the number of
|
|
32
|
+
* Returns the current number of items waiting in either internal buffer.
|
|
30
33
|
* @returns {number} The number of elements in this queue.
|
|
31
34
|
*/
|
|
32
35
|
get length() {
|
|
@@ -34,7 +37,7 @@ class ArrayQueue {
|
|
|
34
37
|
}
|
|
35
38
|
|
|
36
39
|
/**
|
|
37
|
-
*
|
|
40
|
+
* Removes all pending items from both internal buffers.
|
|
38
41
|
*/
|
|
39
42
|
clear() {
|
|
40
43
|
this._list.length = 0;
|
|
@@ -42,7 +45,7 @@ class ArrayQueue {
|
|
|
42
45
|
}
|
|
43
46
|
|
|
44
47
|
/**
|
|
45
|
-
* Appends the
|
|
48
|
+
* Appends an item to the tail of the queue.
|
|
46
49
|
* @param {T} item The element to add.
|
|
47
50
|
* @returns {void}
|
|
48
51
|
*/
|
|
@@ -51,7 +54,8 @@ class ArrayQueue {
|
|
|
51
54
|
}
|
|
52
55
|
|
|
53
56
|
/**
|
|
54
|
-
*
|
|
57
|
+
* Removes and returns the next item in FIFO order, switching to a reversed
|
|
58
|
+
* buffer when that is cheaper than shifting from the front of the array.
|
|
55
59
|
* @returns {T | undefined} The head of the queue of `undefined` if this queue is empty.
|
|
56
60
|
*/
|
|
57
61
|
dequeue() {
|
|
@@ -68,7 +72,8 @@ class ArrayQueue {
|
|
|
68
72
|
}
|
|
69
73
|
|
|
70
74
|
/**
|
|
71
|
-
*
|
|
75
|
+
* Removes the first matching item from whichever internal buffer currently
|
|
76
|
+
* contains it.
|
|
72
77
|
* @param {T} item the item
|
|
73
78
|
* @returns {void}
|
|
74
79
|
*/
|