@depup/webpack 5.111.1-depup.1 → 5.112.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 +4 -7
- package/changes.json +3 -15
- package/lib/Chunk.js +3 -966
- package/lib/Compilation.js +224 -106
- package/lib/Compiler.js +19 -19
- package/lib/Dependency.js +3 -551
- package/lib/DependencyTemplate.js +3 -70
- package/lib/EntryPlugin.js +3 -68
- package/lib/Entrypoint.js +3 -121
- package/lib/ExternalsPlugin.js +3 -92
- package/lib/FileSystemInfo.js +3 -4629
- package/lib/InitFragment.js +3 -204
- package/lib/LibraryTemplatePlugin.js +3 -46
- package/lib/ModuleFilenameHelpers.js +3 -400
- package/lib/ModuleNotFoundError.js +2 -2
- package/lib/MultiCompiler.js +37 -8
- package/lib/NormalModule.js +3 -2242
- package/lib/NullFactory.js +3 -22
- package/lib/ProgressPlugin.js +3 -908
- package/lib/RawModule.js +3 -197
- package/lib/RequestShortener.js +3 -37
- package/lib/SingleEntryPlugin.js +1 -1
- package/lib/WebpackError.js +2 -2
- package/lib/asset/AssetBytesGenerator.js +8 -8
- package/lib/asset/AssetBytesParser.js +3 -3
- package/lib/asset/AssetGenerator.js +36 -22
- package/lib/asset/AssetModule.js +2 -2
- package/lib/asset/AssetModulesPlugin.js +6 -9
- package/lib/asset/AssetParser.js +3 -3
- package/lib/asset/AssetSourceGenerator.js +8 -8
- package/lib/asset/AssetSourceParser.js +3 -3
- package/lib/asset/RawDataUrlModule.js +17 -10
- package/lib/asset/WebManifestGenerator.js +7 -7
- package/lib/asset/WebManifestParser.js +5 -5
- package/lib/async-modules/AsyncModuleHelpers.js +6 -5
- package/lib/async-modules/AwaitDependenciesInitFragment.js +4 -4
- package/lib/async-modules/InferAsyncModulesPlugin.js +4 -3
- package/lib/async-modules/isGeneratorLowered.js +3 -3
- package/lib/bun/BunTargetPlugin.js +1 -1
- package/lib/cache/AddBuildDependenciesPlugin.js +2 -19
- package/lib/{Cache.js → cache/Cache.js} +1 -1
- package/lib/{CacheFacade.js → cache/CacheFacade.js} +5 -5
- package/lib/cache/IdleFileCachePlugin.js +2 -2
- package/lib/cache/MemoryCachePlugin.js +2 -2
- package/lib/cache/MemoryWithGcCachePlugin.js +2 -2
- package/lib/cache/PackFileCacheStrategy.js +8 -10
- package/lib/cache/ResolverCachePlugin.js +8 -4
- package/lib/cache/mergeEtags.js +1 -1
- package/lib/{OptionsApply.js → config/OptionsApply.js} +3 -3
- package/lib/{PlatformPlugin.js → config/PlatformPlugin.js} +2 -2
- package/lib/{WebpackOptionsApply.js → config/WebpackOptionsApply.js} +217 -200
- package/lib/{WebpackOptionsDefaulter.js → config/WebpackOptionsDefaulter.js} +3 -3
- package/lib/config/browserslistTargetHandler.js +1 -1
- package/lib/{cli.js → config/cli.js} +5 -158
- package/lib/config/defaults.js +144 -48
- package/lib/config/getClaimedAssetTypes.js +21 -13
- package/lib/config/normalization.js +18 -7
- package/lib/config/target.js +10 -0
- package/lib/container/ContainerEntryDependency.js +1 -1
- package/lib/container/ContainerEntryModule.js +13 -11
- package/lib/container/ContainerEntryModuleFactory.js +2 -2
- package/lib/container/ContainerExposedDependency.js +1 -1
- package/lib/container/ContainerPlugin.js +178 -5
- package/lib/container/ContainerReferencePlugin.js +75 -14
- package/lib/container/FallbackDependency.js +1 -1
- package/lib/container/FallbackItemDependency.js +1 -1
- package/lib/container/FallbackModule.js +12 -10
- package/lib/container/FallbackModuleFactory.js +2 -2
- package/lib/container/HoistContainerReferencesPlugin.js +10 -11
- package/lib/container/ModuleFederationPlugin.js +306 -7
- package/lib/container/RemoteModule.js +14 -10
- package/lib/container/RemoteRuntimeModule.js +5 -5
- package/lib/container/RemoteToExternalDependency.js +1 -1
- package/lib/container/moduleFederationHooks.js +1 -1
- package/lib/context/ContextModule.js +36 -25
- package/lib/context/ContextModuleFactory.js +13 -10
- package/lib/context/ContextReplacementPlugin.js +3 -3
- package/lib/css/CssGenerator.js +38 -31
- package/lib/css/CssInjectStyleRuntimeModule.js +36 -30
- package/lib/css/CssLoadingRuntimeModule.js +77 -44
- package/lib/css/CssModule.js +27 -29
- package/lib/css/CssModulesPlugin.js +128 -44
- package/lib/css/CssParser.js +682 -291
- package/lib/css/CssServerStylesRuntimeModule.js +3 -3
- package/lib/css/cssMinify.js +110 -37
- package/lib/css/data.js +6985 -5125
- package/lib/css/syntax-parser.js +19873 -0
- package/lib/css/syntax-printer.js +6037 -0
- package/lib/css/syntax.js +37 -18686
- package/lib/debug/ProfilingPlugin.js +52 -19
- package/lib/{DefinePlugin.js → define/DefinePlugin.js} +407 -41
- package/lib/{DotenvPlugin.js → define/DotenvPlugin.js} +9 -9
- package/lib/{EnvironmentPlugin.js → define/EnvironmentPlugin.js} +2 -2
- package/lib/deno/DenoTargetPlugin.js +1 -1
- package/lib/dependencies/ConstDependency.js +3 -120
- package/lib/dependencies/ContextElementDependency.js +5 -172
- package/lib/dependencies/NullDependency.js +3 -37
- package/lib/dependencies/{AMDDefineDependency.js → amd/AMDDefineDependency.js} +12 -11
- package/lib/dependencies/{AMDDefineDependencyParserPlugin.js → amd/AMDDefineDependencyParserPlugin.js} +10 -10
- package/lib/dependencies/{AMDPlugin.js → amd/AMDPlugin.js} +11 -11
- package/lib/dependencies/{AMDRequireArrayDependency.js → amd/AMDRequireArrayDependency.js} +15 -13
- package/lib/dependencies/{AMDRequireContextDependency.js → amd/AMDRequireContextDependency.js} +11 -10
- package/lib/dependencies/{AMDRequireDependenciesBlock.js → amd/AMDRequireDependenciesBlock.js} +7 -6
- package/lib/dependencies/{AMDRequireDependenciesBlockParserPlugin.js → amd/AMDRequireDependenciesBlockParserPlugin.js} +10 -10
- package/lib/dependencies/{AMDRequireDependency.js → amd/AMDRequireDependency.js} +13 -12
- package/lib/dependencies/{AMDRequireItemDependency.js → amd/AMDRequireItemDependency.js} +8 -7
- package/lib/dependencies/{AMDRuntimeModules.js → amd/AMDRuntimeModules.js} +3 -3
- package/lib/dependencies/{LocalModule.js → amd/LocalModule.js} +8 -4
- package/lib/dependencies/{LocalModuleDependency.js → amd/LocalModuleDependency.js} +17 -10
- package/lib/dependencies/{LocalModulesHelpers.js → amd/LocalModulesHelpers.js} +1 -1
- package/lib/dependencies/{RequireJsStuffPlugin.js → amd/RequireJsStuffPlugin.js} +9 -9
- package/lib/dependencies/{UnsupportedDependency.js → amd/UnsupportedDependency.js} +11 -10
- package/lib/dependencies/{CommonJsDependencyHelpers.js → commonjs/CommonJsDependencyHelpers.js} +8 -9
- package/lib/dependencies/{CommonJsExportRequireDependency.js → commonjs/CommonJsExportRequireDependency.js} +166 -33
- package/lib/dependencies/{CommonJsExportsDependency.js → commonjs/CommonJsExportsDependency.js} +15 -14
- package/lib/dependencies/{CommonJsExportsParserPlugin.js → commonjs/CommonJsExportsParserPlugin.js} +138 -61
- package/lib/dependencies/{CommonJsFullRequireDependency.js → commonjs/CommonJsFullRequireDependency.js} +32 -24
- package/lib/dependencies/{CommonJsImportsParserPlugin.js → commonjs/CommonJsImportsParserPlugin.js} +35 -30
- package/lib/dependencies/{CommonJsObjectExportDependency.js → commonjs/CommonJsObjectExportDependency.js} +13 -12
- package/lib/dependencies/{CommonJsPlugin.js → commonjs/CommonJsPlugin.js} +47 -35
- package/lib/dependencies/{CommonJsRequireContextDependency.js → commonjs/CommonJsRequireContextDependency.js} +15 -14
- package/lib/dependencies/{CommonJsRequireDependency.js → commonjs/CommonJsRequireDependency.js} +33 -25
- package/lib/dependencies/{CommonJsSelfReferenceDependency.js → commonjs/CommonJsSelfReferenceDependency.js} +17 -16
- package/lib/dependencies/{ModuleDecoratorDependency.js → commonjs/ModuleDecoratorDependency.js} +16 -15
- package/lib/dependencies/{RequireEnsureDependenciesBlock.js → commonjs/RequireEnsureDependenciesBlock.js} +8 -7
- package/lib/dependencies/{RequireEnsureDependenciesBlockParserPlugin.js → commonjs/RequireEnsureDependenciesBlockParserPlugin.js} +5 -5
- package/lib/dependencies/{RequireEnsureDependency.js → commonjs/RequireEnsureDependency.js} +13 -12
- package/lib/dependencies/{RequireEnsureItemDependency.js → commonjs/RequireEnsureItemDependency.js} +7 -6
- package/lib/dependencies/{RequireEnsurePlugin.js → commonjs/RequireEnsurePlugin.js} +8 -8
- package/lib/dependencies/{RequireHeaderDependency.js → commonjs/RequireHeaderDependency.js} +14 -13
- package/lib/dependencies/{RequireIncludeDependency.js → commonjs/RequireIncludeDependency.js} +13 -12
- package/lib/dependencies/{RequireIncludeDependencyParserPlugin.js → commonjs/RequireIncludeDependencyParserPlugin.js} +3 -27
- package/lib/dependencies/{RequireIncludePlugin.js → commonjs/RequireIncludePlugin.js} +4 -4
- package/lib/dependencies/{RequireResolveContextDependency.js → commonjs/RequireResolveContextDependency.js} +11 -10
- package/lib/dependencies/{RequireResolveDependency.js → commonjs/RequireResolveDependency.js} +12 -11
- package/lib/dependencies/{RequireResolveHeaderDependency.js → commonjs/RequireResolveHeaderDependency.js} +13 -12
- package/lib/dependencies/commonjs/TopLevelThisParserPlugin.js +59 -0
- package/lib/dependencies/{ContextDependency.js → context/ContextDependency.js} +15 -14
- package/lib/dependencies/{ContextDependencyHelpers.js → context/ContextDependencyHelpers.js} +31 -9
- package/lib/dependencies/{ContextDependencyTemplateAsId.js → context/ContextDependencyTemplateAsId.js} +3 -3
- package/lib/dependencies/{ContextDependencyTemplateAsRequireCall.js → context/ContextDependencyTemplateAsRequireCall.js} +3 -3
- package/lib/dependencies/context/ContextElementDependency.js +198 -0
- package/lib/dependencies/{ImportMetaContextDependency.js → context/ImportMetaContextDependency.js} +7 -6
- package/lib/dependencies/{ImportMetaContextDependencyParserPlugin.js → context/ImportMetaContextDependencyParserPlugin.js} +9 -9
- package/lib/dependencies/{ImportMetaContextPlugin.js → context/ImportMetaContextPlugin.js} +5 -5
- package/lib/dependencies/{ImportMetaGlobDependency.js → context/ImportMetaGlobDependency.js} +7 -6
- package/lib/dependencies/{ImportMetaGlobDependencyParserPlugin.js → context/ImportMetaGlobDependencyParserPlugin.js} +4 -4
- package/lib/dependencies/{ImportMetaGlobHelpers.js → context/ImportMetaGlobHelpers.js} +9 -9
- package/lib/dependencies/{RequireContextDependency.js → context/RequireContextDependency.js} +7 -6
- package/lib/dependencies/{RequireContextDependencyParserPlugin.js → context/RequireContextDependencyParserPlugin.js} +2 -2
- package/lib/dependencies/{RequireContextPlugin.js → context/RequireContextPlugin.js} +5 -5
- package/lib/dependencies/{CachedConstDependency.js → core/CachedConstDependency.js} +12 -11
- package/lib/dependencies/core/ConstDependency.js +131 -0
- package/lib/dependencies/{ImportPhase.js → core/ImportPhase.js} +5 -4
- package/lib/dependencies/{ModuleDependency.js → core/ModuleDependency.js} +10 -7
- package/lib/dependencies/{ModuleDependencyTemplateAsId.js → core/ModuleDependencyTemplateAsId.js} +3 -3
- package/lib/dependencies/{ModuleDependencyTemplateAsRequireId.js → core/ModuleDependencyTemplateAsRequireId.js} +2 -2
- package/lib/dependencies/{ModuleInitFragmentDependency.js → core/ModuleInitFragmentDependency.js} +10 -9
- package/lib/dependencies/core/NullDependency.js +44 -0
- package/lib/dependencies/{RuntimeRequirementsDependency.js → core/RuntimeRequirementsDependency.js} +10 -9
- package/lib/dependencies/{StaticExportsDependency.js → core/StaticExportsDependency.js} +15 -8
- package/lib/dependencies/{CssIcssExportDependency.js → css/CssIcssExportDependency.js} +369 -92
- package/lib/dependencies/{CssIcssImportDependency.js → css/CssIcssImportDependency.js} +23 -16
- package/lib/dependencies/{CssIcssSymbolDependency.js → css/CssIcssSymbolDependency.js} +13 -12
- package/lib/dependencies/{CssImportDependency.js → css/CssImportDependency.js} +15 -11
- package/lib/dependencies/{CssUrlDependency.js → css/CssUrlDependency.js} +23 -16
- package/lib/dependencies/{CreateRequireParserPlugin.js → esm/CreateRequireParserPlugin.js} +9 -9
- package/lib/dependencies/{HarmonyAcceptDependency.js → esm/ESMAcceptDependency.js} +41 -38
- package/lib/dependencies/esm/ESMAcceptImportDependency.js +39 -0
- package/lib/dependencies/{HarmonyCompatibilityDependency.js → esm/ESMCompatibilityDependency.js} +29 -21
- package/lib/dependencies/{HarmonyDetectionParserPlugin.js → esm/ESMDetectionParserPlugin.js} +19 -17
- package/lib/dependencies/{HarmonyEvaluatedImportSpecifierDependency.js → esm/ESMEvaluatedImportSpecifierDependency.js} +33 -30
- package/lib/dependencies/{HarmonyExportDependencyParserPlugin.js → esm/ESMExportDependencyParserPlugin.js} +60 -89
- package/lib/dependencies/{HarmonyExportExpressionDependency.js → esm/ESMExportExpressionDependency.js} +80 -45
- package/lib/dependencies/{HarmonyExportHeaderDependency.js → esm/ESMExportHeaderDependency.js} +17 -15
- package/lib/dependencies/esm/ESMExportImportedSideEffectDependency.js +37 -0
- package/lib/dependencies/{HarmonyExportImportedSpecifierDependency.js → esm/ESMExportImportedSpecifierDependency.js} +133 -118
- package/lib/dependencies/{HarmonyExportInitFragment.js → esm/ESMExportInitFragment.js} +48 -30
- package/lib/dependencies/{HarmonyExportSpecifierDependency.js → esm/ESMExportSpecifierDependency.js} +60 -36
- package/lib/dependencies/{HarmonyExports.js → esm/ESMExports.js} +4 -4
- package/lib/dependencies/{HarmonyImportBareSideEffectDependency.js → esm/ESMImportBareSideEffectDependency.js} +21 -13
- package/lib/dependencies/{HarmonyImportDependency.js → esm/ESMImportDependency.js} +74 -71
- package/lib/dependencies/{HarmonyImportDependencyParserPlugin.js → esm/ESMImportDependencyParserPlugin.js} +99 -84
- package/lib/dependencies/{HarmonyImportGuard.js → esm/ESMImportGuard.js} +26 -29
- package/lib/dependencies/{HarmonyImportSideEffectDependency.js → esm/ESMImportSideEffectDependency.js} +83 -39
- package/lib/dependencies/{HarmonyImportSpecifierDependency.js → esm/ESMImportSpecifierDependency.js} +94 -59
- package/lib/dependencies/esm/ESMModulesPlugin.js +207 -0
- package/lib/dependencies/{HarmonyTopLevelThisParserPlugin.js → esm/ESMTopLevelThisParserPlugin.js} +7 -7
- package/lib/dependencies/{TopLevelAwaitDependency.js → esm/TopLevelAwaitDependency.js} +12 -11
- package/lib/dependencies/{DynamicExports.js → helpers/DynamicExports.js} +2 -2
- package/lib/{util → dependencies/helpers}/chainedImports.js +5 -5
- package/lib/dependencies/{processExportInfo.js → helpers/processExportInfo.js} +4 -4
- package/lib/{util → dependencies/helpers}/traverseDestructuringAssignmentProperties.js +1 -1
- package/lib/dependencies/{ImportMetaHotAcceptDependency.js → hmr/ImportMetaHotAcceptDependency.js} +8 -7
- package/lib/dependencies/{ImportMetaHotDeclineDependency.js → hmr/ImportMetaHotDeclineDependency.js} +8 -7
- package/lib/dependencies/{ModuleHotAcceptDependency.js → hmr/ModuleHotAcceptDependency.js} +8 -7
- package/lib/dependencies/{ModuleHotDeclineDependency.js → hmr/ModuleHotDeclineDependency.js} +8 -7
- package/lib/dependencies/{HtmlEntryDependency.js → html/HtmlEntryDependency.js} +51 -141
- package/lib/dependencies/{HtmlInlineHtmlDependency.js → html/HtmlInlineHtmlDependency.js} +13 -12
- package/lib/dependencies/{HtmlInlineScriptDependency.js → html/HtmlInlineScriptDependency.js} +69 -19
- package/lib/dependencies/{HtmlInlineStyleDependency.js → html/HtmlInlineStyleDependency.js} +50 -15
- package/lib/dependencies/{HtmlSourceDependency.js → html/HtmlSourceDependency.js} +23 -16
- package/lib/dependencies/{ImportContextDependency.js → import/ImportContextDependency.js} +24 -10
- package/lib/dependencies/{ImportDependency.js → import/ImportDependency.js} +26 -18
- package/lib/dependencies/{ImportEagerDependency.js → import/ImportEagerDependency.js} +18 -10
- package/lib/dependencies/{ImportParserPlugin.js → import/ImportParserPlugin.js} +20 -20
- package/lib/dependencies/{ImportPlugin.js → import/ImportPlugin.js} +4 -4
- package/lib/dependencies/{ImportWeakDependency.js → import/ImportWeakDependency.js} +18 -10
- package/lib/dependencies/{importOptionsCheck.js → import/importOptionsCheck.js} +2 -2
- package/lib/dependencies/{BuildTimeConstDependency.js → import-meta/BuildTimeConstDependency.js} +12 -11
- package/lib/dependencies/{ImportMetaMainDependency.js → import-meta/ImportMetaMainDependency.js} +12 -11
- package/lib/dependencies/{ImportMetaPlugin.js → import-meta/ImportMetaPlugin.js} +119 -98
- package/lib/dependencies/{SystemPlugin.js → system/SystemPlugin.js} +11 -38
- package/lib/dependencies/{SystemRuntimeModule.js → system/SystemRuntimeModule.js} +3 -3
- package/lib/dependencies/{ImportMetaResolveDependency.js → url/ImportMetaResolveDependency.js} +9 -8
- package/lib/dependencies/{URLContextDependency.js → url/URLContextDependency.js} +11 -10
- package/lib/dependencies/{URLDependency.js → url/URLDependency.js} +28 -20
- package/lib/{url → dependencies/url}/URLParserPlugin.js +16 -18
- package/lib/dependencies/{URLPlugin.js → url/URLPlugin.js} +6 -7
- package/lib/dependencies/{WebAssemblyExportImportedDependency.js → wasm/WebAssemblyExportImportedDependency.js} +18 -11
- package/lib/dependencies/{WebAssemblyImportDependency.js → wasm/WebAssemblyImportDependency.js} +19 -12
- package/lib/dependencies/{CreateScriptUrlDependency.js → worker/CreateScriptUrlDependency.js} +12 -11
- package/lib/dependencies/{WorkerAndWorkletPlugin.js → worker/WorkerAndWorkletPlugin.js} +31 -33
- package/lib/dependencies/{WorkerDependency.js → worker/WorkerDependency.js} +22 -15
- package/lib/dependencies/{WorkletDependency.js → worker/WorkletDependency.js} +19 -18
- package/lib/{EvalDevToolModulePlugin.js → devtool/EvalDevToolModulePlugin.js} +20 -6
- package/lib/{EvalSourceMapDevToolPlugin.js → devtool/EvalSourceMapDevToolPlugin.js} +32 -24
- package/lib/devtool/ModuleFilenameHelpers.js +413 -0
- package/lib/{SourceMapDevToolModuleOptionsPlugin.js → devtool/SourceMapDevToolModuleOptionsPlugin.js} +10 -3
- package/lib/{SourceMapDevToolPlugin.js → devtool/SourceMapDevToolPlugin.js} +154 -26
- package/lib/{util → devtool}/generateDebugId.js +1 -1
- package/lib/{IgnoreWarningsPlugin.js → diagnostics/IgnoreWarningsPlugin.js} +2 -2
- package/lib/{NoEmitOnErrorsPlugin.js → diagnostics/NoEmitOnErrorsPlugin.js} +1 -1
- package/lib/diagnostics/WarnCaseSensitiveModulesPlugin.js +64 -0
- package/lib/{WarnDeprecatedOptionPlugin.js → diagnostics/WarnDeprecatedOptionPlugin.js} +2 -22
- package/lib/diagnostics/WarnNoModeSetPlugin.js +27 -0
- package/lib/dll/DelegatedModule.js +20 -18
- package/lib/dll/DelegatedModuleFactoryPlugin.js +2 -2
- package/lib/dll/DelegatedPlugin.js +1 -1
- package/lib/{dependencies → dll}/DelegatedSourceDependency.js +5 -4
- package/lib/{dependencies → dll}/DllEntryDependency.js +6 -5
- package/lib/dll/DllEntryPlugin.js +3 -3
- package/lib/dll/DllModule.js +11 -9
- package/lib/dll/DllModuleFactory.js +3 -3
- package/lib/dll/DllPlugin.js +18 -6
- package/lib/dll/DllReferencePlugin.js +102 -26
- package/lib/dll/LibManifestPlugin.js +9 -7
- package/lib/electron/ElectronTargetPlugin.js +2 -2
- package/lib/{DynamicEntryPlugin.js → entry/DynamicEntryPlugin.js} +3 -3
- package/lib/{dependencies → entry}/EntryDependency.js +11 -2
- package/lib/{EntryOptionPlugin.js → entry/EntryOptionPlugin.js} +6 -6
- package/lib/entry/EntryPlugin.js +75 -0
- package/lib/{performance → errors}/AssetsOverSizeLimitWarning.js +2 -2
- package/lib/errors/AsyncDependencyToInitialChunkError.js +2 -2
- package/lib/errors/BuildCycleError.js +1 -1
- package/lib/{WarnCaseSensitiveModulesPlugin.js → errors/CaseSensitiveModulesWarning.js} +4 -56
- package/lib/errors/ChunkRenderError.js +1 -1
- package/lib/errors/CodeGenerationError.js +1 -1
- package/lib/errors/CommentCompilationWarning.js +1 -1
- package/lib/errors/ConflictingEntryExportsWarning.js +38 -0
- package/lib/{dependencies → errors}/CriticalDependencyWarning.js +4 -3
- package/lib/errors/DeprecatedOptionWarning.js +30 -0
- package/lib/errors/DllManifestError.js +26 -0
- package/lib/{performance → errors}/DuplicatePackagesWarning.js +6 -6
- package/lib/{dependencies/HarmonyLinkingError.js → errors/ESMLinkingError.js} +4 -4
- package/lib/{performance → errors}/EntrypointsOverSizeLimitWarning.js +2 -2
- package/lib/errors/EnvironmentNotSupportAsyncWarning.js +2 -2
- package/lib/{ErrorHelpers.js → errors/ErrorHelpers.js} +7 -5
- package/lib/errors/ExternalStarReexportError.js +2 -2
- package/lib/{library → errors}/FalseIIFEUmdWarning.js +1 -1
- package/lib/errors/HookWebpackError.js +4 -4
- package/lib/errors/IgnoreErrorModuleFactory.js +3 -3
- package/lib/errors/InvalidDependenciesModuleWarning.js +1 -1
- package/lib/{optimize → errors}/MinMaxSizeWarning.js +1 -1
- package/lib/errors/ModuleBuildError.js +1 -1
- package/lib/errors/ModuleDependencyError.js +2 -2
- package/lib/errors/ModuleDependencyWarning.js +2 -2
- package/lib/errors/ModuleError.js +1 -1
- package/lib/errors/ModuleHashingError.js +1 -1
- package/lib/errors/ModuleNotFoundError.js +3 -3
- package/lib/errors/ModuleParseError.js +1 -1
- package/lib/errors/ModuleRestoreError.js +1 -1
- package/lib/errors/ModuleStoreError.js +1 -1
- package/lib/errors/ModuleWarning.js +1 -1
- package/lib/{performance → errors}/NoAsyncChunksWarning.js +1 -1
- package/lib/{WarnNoModeSetPlugin.js → errors/NoModeWarning.js} +2 -19
- package/lib/errors/NodeStuffInWebError.js +7 -2
- package/lib/errors/PathVariableError.js +31 -0
- package/lib/errors/RequireIncludeDeprecationWarning.js +40 -0
- package/lib/{performance → errors}/RuntimeInLargeChunkWarning.js +1 -1
- package/lib/errors/RuntimeModuleGenerationError.js +51 -0
- package/lib/errors/SSRManifestAutoPublicPathWarning.js +24 -0
- package/lib/errors/SystemImportDeprecationWarning.js +43 -0
- package/lib/errors/UnmergeableEntryExportsError.js +34 -0
- package/lib/errors/UnsupportedFeatureWarning.js +1 -1
- package/lib/{wasm-sync → errors}/UnsupportedWebAssemblyFeatureError.js +1 -1
- package/lib/{wasm-sync → errors}/WebAssemblyInInitialChunkError.js +7 -5
- package/lib/errors/WebpackError.js +12 -3
- package/lib/esm/ExportWebpackRequireRuntimeModule.js +2 -2
- package/lib/esm/ModuleChunkFormatPlugin.js +19 -19
- package/lib/esm/ModuleChunkLoadingPlugin.js +3 -3
- package/lib/esm/ModuleChunkLoadingRuntimeModule.js +8 -8
- package/lib/{ExternalModule.js → externals/ExternalModule.js} +79 -55
- package/lib/{ExternalModuleFactoryPlugin.js → externals/ExternalModuleFactoryPlugin.js} +41 -39
- package/lib/externals/ExternalsPlugin.js +99 -0
- package/lib/fs/FileSystemInfo.js +4642 -0
- package/lib/{util → fs}/fs.js +22 -9
- package/lib/{AsyncDependenciesBlock.js → graph/AsyncDependenciesBlock.js} +27 -4
- package/lib/graph/Chunk.js +985 -0
- package/lib/{ChunkGraph.js → graph/ChunkGraph.js} +187 -80
- package/lib/{ChunkGroup.js → graph/ChunkGroup.js} +11 -3
- package/lib/{DependenciesBlock.js → graph/DependenciesBlock.js} +16 -4
- package/lib/graph/Dependency.js +628 -0
- package/lib/graph/Entrypoint.js +136 -0
- package/lib/{ExportsInfo.js → graph/ExportsInfo.js} +130 -82
- package/lib/{HotUpdateChunk.js → graph/HotUpdateChunk.js} +8 -0
- package/lib/{ModuleGraph.js → graph/ModuleGraph.js} +30 -30
- package/lib/{ModuleGraphConnection.js → graph/ModuleGraphConnection.js} +2 -2
- package/lib/{buildChunkGraph.js → graph/buildChunkGraph.js} +152 -57
- package/lib/{util → graph}/findGraphRoots.js +14 -8
- package/lib/graph/isDependencyKind.js +23 -0
- package/lib/hmr/HotModuleReplacement.runtime.js +2 -2
- package/lib/{HotModuleReplacementPlugin.js → hmr/HotModuleReplacementPlugin.js} +47 -47
- package/lib/hmr/HotModuleReplacementRuntimeModule.js +3 -3
- package/lib/hmr/JavascriptHotModuleReplacement.runtime.js +10 -8
- package/lib/hmr/JavascriptHotModuleReplacementHelper.js +2 -2
- package/lib/hmr/LazyCompilationPlugin.js +31 -21
- package/lib/html/HtmlGenerator.js +107 -43
- package/lib/html/HtmlModule.js +6 -2
- package/lib/html/HtmlModulesPlugin.js +172 -76
- package/lib/html/HtmlParser.js +503 -153
- package/lib/html/builtinEmbeddedRenderer.js +60 -13
- package/lib/html/data.js +2 -1
- package/lib/html/htmlMinify.js +111 -41
- package/lib/html/syntax-parser.js +15796 -0
- package/lib/html/syntax-printer.js +1034 -0
- package/lib/html/syntax.js +37 -13952
- package/lib/html/xmlMinify.js +67 -0
- package/lib/ids/ChunkModuleIdRangePlugin.js +2 -2
- package/lib/ids/DeterministicModuleIdsPlugin.js +1 -1
- package/lib/ids/HashedModuleIdsPlugin.js +31 -4
- package/lib/ids/IdHelpers.js +4 -4
- package/lib/ids/NaturalChunkIdsPlugin.js +1 -1
- package/lib/ids/OccurrenceChunkIdsPlugin.js +6 -5
- package/lib/ids/OccurrenceModuleIdsPlugin.js +6 -5
- package/lib/{RecordIdsPlugin.js → ids/RecordIdsPlugin.js} +5 -5
- package/lib/ids/SyncModuleIdsPlugin.js +3 -3
- package/lib/{util → ids}/numberHash.js +1 -1
- package/lib/index.js +303 -97
- package/lib/{APIPlugin.js → javascript/APIPlugin.js} +25 -25
- package/lib/javascript/ArrayPushCallbackChunkFormatPlugin.js +4 -5
- package/lib/javascript/BasicEvaluatedExpression.js +4 -4
- package/lib/javascript/ChunkHelpers.js +64 -4
- package/lib/javascript/CommonJsChunkFormatPlugin.js +4 -7
- package/lib/{CompatibilityPlugin.js → javascript/CompatibilityPlugin.js} +7 -7
- package/lib/{ConstPlugin.js → javascript/ConstPlugin.js} +74 -7
- package/lib/{ExportsInfoApiPlugin.js → javascript/ExportsInfoApiPlugin.js} +5 -5
- package/lib/{dependencies → javascript}/ExportsInfoDependency.js +10 -9
- package/lib/javascript/JavascriptGenerator.js +17 -17
- package/lib/{JavascriptMetaInfoPlugin.js → javascript/JavascriptMetaInfoPlugin.js} +7 -7
- package/lib/javascript/JavascriptModule.js +4 -3
- package/lib/javascript/JavascriptModulesPlugin.js +440 -211
- package/lib/javascript/JavascriptParser.js +220 -134
- package/lib/javascript/JavascriptParserHelpers.js +1 -1
- package/lib/javascript/MergedEntryExports.js +196 -0
- package/lib/javascript/ScopeAnalyzer.js +3840 -5
- package/lib/javascript/StartupHelpers.js +6 -6
- package/lib/{UseStrictPlugin.js → javascript/UseStrictPlugin.js} +12 -15
- package/lib/{dependencies → javascript}/WebpackIsIncludedDependency.js +10 -9
- package/lib/{WebpackIsIncludedPlugin.js → javascript/WebpackIsIncludedPlugin.js} +8 -8
- package/lib/javascript/data.js +533 -122
- package/lib/javascript/jsMinify.js +272 -0
- package/lib/javascript/regexp.js +67 -32
- package/lib/javascript/syntax-parser.js +18561 -0
- package/lib/javascript/syntax-printer-data.js +933 -0
- package/lib/javascript/syntax-printer.js +47106 -0
- package/lib/javascript/syntax.js +20 -11274
- package/lib/json/JsonData.js +1 -1
- package/lib/{dependencies → json}/JsonExportsDependency.js +8 -7
- package/lib/json/JsonGenerator.js +10 -10
- package/lib/json/JsonModule.js +2 -2
- package/lib/json/JsonModulesPlugin.js +1 -1
- package/lib/json/JsonParser.js +5 -5
- package/lib/json/jsonMinify.js +69 -0
- package/lib/library/AbstractLibraryPlugin.js +28 -15
- package/lib/library/AmdLibraryPlugin.js +4 -4
- package/lib/library/AssignLibraryPlugin.js +27 -11
- package/lib/library/EnableLibraryPlugin.js +1 -1
- package/lib/library/ExportPropertyLibraryPlugin.js +4 -4
- package/lib/library/JsonpLibraryPlugin.js +1 -1
- package/lib/library/LibraryTemplatePlugin.js +53 -0
- package/lib/library/ModuleLibraryPlugin.js +160 -166
- package/lib/library/SystemLibraryPlugin.js +6 -8
- package/lib/library/UmdLibraryPlugin.js +3 -4
- package/lib/{dependencies → loaders}/LoaderDependency.js +3 -3
- package/lib/{dependencies → loaders}/LoaderImportDependency.js +9 -3
- package/lib/{LoaderOptionsPlugin.js → loaders/LoaderOptionsPlugin.js} +30 -12
- package/lib/{dependencies → loaders}/LoaderPlugin.js +2 -2
- package/lib/loaders/LoaderRunner.js +31 -21
- package/lib/{LoaderTargetPlugin.js → loaders/LoaderTargetPlugin.js} +2 -2
- package/lib/logging/Logger.js +7 -9
- package/lib/logging/ProgressPlugin.js +957 -0
- package/lib/{CodeGenerationResults.js → module/CodeGenerationResults.js} +7 -7
- package/lib/{Generator.js → module/Generator.js} +16 -14
- package/lib/{Module.js → module/Module.js} +119 -51
- package/lib/{ModuleFactory.js → module/ModuleFactory.js} +3 -3
- package/lib/module/NormalModule.js +2348 -0
- package/lib/{NormalModuleFactory.js → module/NormalModuleFactory.js} +53 -54
- package/lib/module/NullFactory.js +29 -0
- package/lib/{Parser.js → module/Parser.js} +3 -3
- package/lib/module/RawModule.js +208 -0
- package/lib/{SelfModuleFactory.js → module/SelfModuleFactory.js} +1 -1
- package/lib/{util → module}/extractSourceMap.js +2 -2
- package/lib/{util → module}/findCaseMismatch.js +2 -2
- package/lib/node/CommonJsChunkLoadingPlugin.js +3 -3
- package/lib/{dependencies → node}/ExternalModuleDependency.js +8 -7
- package/lib/{dependencies → node}/ExternalModuleInitFragment.js +6 -5
- package/lib/{dependencies → node}/ExternalModuleInitFragmentDependency.js +14 -9
- package/lib/node/NodeEnvironmentPlugin.js +11 -1
- package/lib/{NodeStuffPlugin.js → node/NodeStuffPlugin.js} +17 -17
- package/lib/node/NodeTargetPlugin.js +1 -1
- package/lib/node/NodeWatchFileSystem.js +58 -6
- package/lib/node/ReadFileChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/ReadFileCompileAsyncWasmPlugin.js +9 -7
- package/lib/node/ReadFileCompileWasmPlugin.js +7 -5
- package/lib/node/RequireChunkLoadingRuntimeModule.js +7 -7
- package/lib/node/nodeConsole.js +2 -4
- package/lib/optimize/AggressiveMergingPlugin.js +2 -2
- package/lib/optimize/AggressiveSplittingPlugin.js +12 -8
- package/lib/{CircularModulesPlugin.js → optimize/CircularModulesPlugin.js} +13 -13
- package/lib/optimize/ConcatenatedModule.js +229 -214
- package/lib/{ConcatenationScope.js → optimize/ConcatenationScope.js} +39 -6
- package/lib/optimize/ConstExportsPlugin.js +7 -7
- package/lib/optimize/EnsureChunkConditionsPlugin.js +3 -3
- package/lib/{FlagAllModulesAsUsedPlugin.js → optimize/FlagAllModulesAsUsedPlugin.js} +3 -3
- package/lib/{FlagDependencyExportsPlugin.js → optimize/FlagDependencyExportsPlugin.js} +17 -17
- package/lib/{FlagDependencyUsagePlugin.js → optimize/FlagDependencyUsagePlugin.js} +17 -17
- package/lib/{FlagEntryExportAsUsedPlugin.js → optimize/FlagEntryExportAsUsedPlugin.js} +2 -2
- package/lib/optimize/FlagIncludedChunksPlugin.js +2 -2
- package/lib/optimize/InlineExports.js +11 -3
- package/lib/optimize/InnerGraph.js +5 -13
- package/lib/optimize/InnerGraphPlugin.js +10 -10
- package/lib/optimize/LazyBarrels.js +584 -0
- package/lib/{util → optimize}/LazyBucketSortedSet.js +2 -2
- package/lib/optimize/LimitChunkCountPlugin.js +16 -7
- package/lib/optimize/MangleExportsPlugin.js +5 -5
- package/lib/optimize/MergeDuplicateChunksPlugin.js +7 -6
- package/lib/optimize/MinChunkSizePlugin.js +9 -6
- package/lib/optimize/ModuleConcatenationPlugin.js +20 -12
- package/lib/{dependencies → optimize}/PureExpressionDependency.js +11 -10
- package/lib/optimize/RealContentHashPlugin.js +16 -7
- package/lib/optimize/RemoveEmptyChunksPlugin.js +2 -2
- package/lib/optimize/RemoveParentModulesPlugin.js +4 -4
- package/lib/optimize/SideEffectsFlagPlugin.js +18 -18
- package/lib/optimize/SplitChunksPlugin.js +713 -155
- package/lib/{util → optimize}/TupleQueue.js +9 -9
- package/lib/optimize/chunkSetIntersections.js +437 -0
- package/lib/{util → optimize}/deterministicGrouping.js +17 -17
- package/lib/{BannerPlugin.js → output/BannerPlugin.js} +82 -14
- package/lib/{CleanPlugin.js → output/CleanPlugin.js} +66 -24
- package/lib/{CopyPlugin.js → output/CopyPlugin.js} +142 -67
- package/lib/{ManifestPlugin.js → output/ManifestPlugin.js} +91 -17
- package/lib/output/SSRManifestPlugin.js +349 -0
- package/lib/performance/AnalyzableBailoutsPlugin.js +1 -1
- package/lib/performance/AsyncChunkWaterfallsPlugin.js +1 -1
- package/lib/performance/BroadContextsPlugin.js +4 -4
- package/lib/performance/CacheEffectivenessPlugin.js +2 -3
- package/lib/performance/ConflictingResourceHintsPlugin.js +1 -1
- package/lib/performance/DuplicateModulesPlugin.js +3 -4
- package/lib/performance/DuplicatePackagesPlugin.js +3 -3
- package/lib/performance/DynamicExportsPlugin.js +2 -2
- package/lib/performance/EvalUsagePlugin.js +3 -3
- package/lib/performance/HotspotsPlugin.js +11 -10
- package/lib/performance/LargeModulesPlugin.js +2 -3
- package/lib/performance/LegacyJavascriptPlugin.js +1 -2
- package/lib/performance/MissingSideEffectsPlugin.js +2 -3
- package/lib/performance/MissingSourceMapsPlugin.js +5 -6
- package/lib/performance/PureAnnotationsPlugin.js +3 -3
- package/lib/performance/RedundantDynamicImportsPlugin.js +6 -8
- package/lib/performance/ScopeHoistingBailoutsPlugin.js +2 -2
- package/lib/performance/SizeLimitsPlugin.js +11 -12
- package/lib/performance/TopLevelThisPlugin.js +8 -7
- package/lib/performance/UnsplitVendorsPlugin.js +1 -2
- package/lib/performance/UnusedAliasesPlugin.js +6 -7
- package/lib/performance/UnusedAssetsPlugin.js +5 -5
- package/lib/performance/UnusedDefinesPlugin.js +2 -2
- package/lib/performance/UnusedExternalsPlugin.js +3 -4
- package/lib/performance/UnusedFederationPlugin.js +2 -4
- package/lib/performance/UnusedModulesPlugin.js +5 -4
- package/lib/performance/getModuleSize.js +1 -1
- package/lib/performance/hasOnlyUnusedExports.js +4 -4
- package/lib/performance/isOnlyReexported.js +7 -6
- package/lib/{AutomaticPrefetchPlugin.js → prefetch/AutomaticPrefetchPlugin.js} +4 -5
- package/lib/prefetch/ChunkPrefetchFunctionRuntimeModule.js +2 -2
- package/lib/prefetch/ChunkPrefetchPreloadPlugin.js +1 -1
- package/lib/prefetch/ChunkPrefetchStartupRuntimeModule.js +4 -4
- package/lib/prefetch/ChunkPrefetchTriggerRuntimeModule.js +4 -4
- package/lib/prefetch/ChunkPreloadTriggerRuntimeModule.js +4 -4
- package/lib/{dependencies → prefetch}/PrefetchDependency.js +1 -1
- package/lib/{PrefetchPlugin.js → prefetch/PrefetchPlugin.js} +2 -2
- package/lib/prefetch/ResourceHintPlugin.js +65 -44
- package/lib/prefetch/ResourceHintRuntimeModule.js +3 -3
- package/lib/prefetch/StartupAssetHintRuntimeModule.js +3 -3
- package/lib/prefetch/parseResourceHintOptions.js +4 -3
- package/lib/{ProvidePlugin.js → provide/ProvidePlugin.js} +7 -7
- package/lib/{dependencies → provide}/ProvidedDependency.js +14 -13
- package/lib/{IgnorePlugin.js → resolve/IgnorePlugin.js} +30 -13
- package/lib/{NormalModuleReplacementPlugin.js → resolve/NormalModuleReplacementPlugin.js} +4 -4
- package/lib/{ResolverFactory.js → resolve/ResolverFactory.js} +18 -5
- package/lib/resolve/getResolveOptionsKey.js +59 -0
- package/lib/rules/RuleSetCompiler.js +27 -46
- package/lib/runtime/AsyncModuleGeneratorRuntimeModule.js +2 -2
- package/lib/runtime/AsyncModuleRuntimeModule.js +7 -4
- package/lib/runtime/AutoPublicPathRuntimeModule.js +5 -5
- package/lib/runtime/BaseUriRuntimeModule.js +3 -3
- package/lib/runtime/ChunkNameRuntimeModule.js +2 -2
- package/lib/runtime/CompatGetDefaultExportRuntimeModule.js +2 -2
- package/lib/runtime/CompatRuntimeModule.js +4 -4
- package/lib/runtime/ConcatenationWrapRuntimeModule.js +2 -2
- package/lib/runtime/ConstructRequireRuntimeModule.js +2 -2
- package/lib/runtime/CreateFakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/CreateScriptRuntimeModule.js +2 -2
- package/lib/runtime/CreateScriptUrlRuntimeModule.js +2 -2
- package/lib/runtime/DefinePropertyGettersRuntimeModule.js +6 -6
- package/lib/runtime/EnsureChunkRuntimeModule.js +4 -4
- package/lib/runtime/GetChunkFilenameRuntimeModule.js +6 -6
- package/lib/runtime/GetFullHashRuntimeModule.js +2 -2
- package/lib/runtime/GetMainFilenameRuntimeModule.js +4 -4
- package/lib/runtime/GetTrustedTypesPolicyRuntimeModule.js +3 -3
- package/lib/runtime/GetWorkletBootstrapRuntimeModule.js +3 -3
- package/lib/runtime/GlobalRuntimeModule.js +3 -3
- package/lib/runtime/HasOwnPropertyRuntimeModule.js +3 -3
- package/lib/runtime/HelperRuntimeModule.js +16 -1
- package/lib/runtime/LoadScriptRuntimeModule.js +3 -3
- package/lib/runtime/MakeDeferredNamespaceObjectRuntime.js +80 -17
- package/lib/runtime/MakeNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/NonceRuntimeModule.js +2 -2
- package/lib/runtime/OnChunksLoadedRuntimeModule.js +4 -4
- package/lib/runtime/PublicPathRuntimeModule.js +2 -2
- package/lib/runtime/RelativeUrlRuntimeModule.js +2 -2
- package/lib/{RuntimeGlobals.js → runtime/RuntimeGlobals.js} +18 -1
- package/lib/runtime/RuntimeIdRuntimeModule.js +4 -4
- package/lib/{RuntimeModule.js → runtime/RuntimeModule.js} +36 -21
- package/lib/{RuntimePlugin.js → runtime/RuntimePlugin.js} +48 -50
- package/lib/runtime/SetAnonymousDefaultNameRuntimeModule.js +2 -2
- package/lib/runtime/SpecNamespaceObjectRuntimeModule.js +2 -2
- package/lib/runtime/StartupChunkDependenciesPlugin.js +2 -2
- package/lib/runtime/StartupChunkDependenciesRuntimeModule.js +5 -5
- package/lib/runtime/StartupEntrypointRuntimeModule.js +3 -3
- package/lib/runtime/SystemContextRuntimeModule.js +2 -2
- package/lib/runtime/ToBinaryRuntimeModule.js +3 -3
- package/lib/runtime/WorkerRuntimeModule.js +1 -1
- package/lib/runtime/baseUri.js +1 -1
- package/lib/schemes/DataUriPlugin.js +1 -1
- package/lib/schemes/HttpUriPlugin.js +67 -11
- package/lib/schemes/VirtualUrlPlugin.js +50 -16
- package/lib/serialization/AggregateErrorSerializer.js +2 -2
- package/lib/serialization/FileMiddleware.js +3 -3
- package/lib/serialization/ObjectMiddleware.js +47 -16
- package/lib/serialization/SerializerMiddleware.js +2 -2
- package/lib/serialization/SingleItemMiddleware.js +4 -2
- package/lib/sharing/ConsumeSharedFallbackDependency.js +9 -1
- package/lib/sharing/ConsumeSharedModule.js +18 -14
- package/lib/sharing/ConsumeSharedPlugin.js +148 -42
- package/lib/sharing/ConsumeSharedRuntimeModule.js +8 -8
- package/lib/sharing/ProvideForSharedDependency.js +9 -1
- package/lib/sharing/ProvideSharedDependency.js +1 -1
- package/lib/sharing/ProvideSharedModule.js +11 -9
- package/lib/sharing/ProvideSharedModuleFactory.js +2 -2
- package/lib/sharing/ProvideSharedPlugin.js +111 -20
- package/lib/sharing/SharePlugin.js +102 -9
- package/lib/sharing/ShareRuntimeModule.js +6 -6
- package/lib/sharing/resolveMatchedConfigs.js +1 -1
- package/lib/{util → sharing}/semver.js +14 -16
- package/lib/sharing/utils.js +59 -2
- package/lib/stats/DefaultStatsFactoryPlugin.js +22 -19
- package/lib/stats/DefaultStatsPresetPlugin.js +1 -1
- package/lib/stats/DefaultStatsPrinterPlugin.js +3 -3
- package/lib/{MultiStats.js → stats/MultiStats.js} +4 -4
- package/lib/{Stats.js → stats/Stats.js} +4 -4
- package/lib/stats/StatsFactory.js +14 -13
- package/lib/{ChunkTemplate.js → template/ChunkTemplate.js} +7 -7
- package/lib/{ConditionalInitFragment.js → template/ConditionalInitFragment.js} +3 -3
- package/lib/template/DependencyTemplate.js +77 -0
- package/lib/{DependencyTemplates.js → template/DependencyTemplates.js} +9 -4
- package/lib/template/InitFragment.js +223 -0
- package/lib/{MainTemplate.js → template/MainTemplate.js} +11 -11
- package/lib/{ModuleInfoHeaderPlugin.js → template/ModuleInfoHeaderPlugin.js} +30 -8
- package/lib/{ModuleTemplate.js → template/ModuleTemplate.js} +6 -6
- package/lib/{RuntimeTemplate.js → template/RuntimeTemplate.js} +145 -63
- package/lib/{Template.js → template/Template.js} +13 -11
- package/lib/{TemplatedPathPlugin.js → template/TemplatedPathPlugin.js} +19 -23
- package/lib/typescript/TypeScriptPlugin.js +3 -3
- package/lib/util/RequestShortener.js +44 -0
- package/lib/util/SortableSet.js +87 -22
- package/lib/util/SourceProcessor.js +349 -44
- package/lib/util/TupleSet.js +27 -27
- package/lib/util/WeakTupleMap.js +10 -12
- package/lib/util/buildDiagnostics.js +2 -2
- package/lib/util/comparators.js +10 -10
- package/lib/util/concatenate.js +28 -147
- package/lib/util/createMappings.js +111 -0
- package/lib/util/dataURL.js +94 -15
- package/lib/util/deprecation.js +1 -1
- package/lib/util/extractComments.js +118 -0
- package/lib/util/formatLocation.js +1 -1
- package/lib/util/globUtils.js +197 -16
- package/lib/util/haltVisitors.js +51 -0
- package/lib/util/handlerKeys.js +2 -2
- package/lib/util/identifier.js +117 -1
- package/lib/util/implicitTypeLoaderFallback.js +6 -4
- package/lib/util/internalSerializables.js +294 -102
- package/lib/util/magicComment.js +12 -7
- package/lib/util/makeSerializable.js +23 -4
- package/lib/util/parseJson.js +1 -1
- package/lib/util/preloadModuleType.js +5 -2
- package/lib/util/registerExternalSerializer.js +2 -2
- package/lib/util/removeBOM.js +1 -1
- package/lib/util/runtime.js +1 -1
- package/lib/util/serialization.js +4 -1
- package/lib/util/source.js +2 -2
- package/lib/util/terminalColors.js +161 -0
- package/lib/{wasm-async → wasm}/AsyncWasmCompileRuntimeModule.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWasmLoadingRuntimeModule.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWasmModule.js +9 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyGenerator.js +5 -5
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyJavascriptGenerator.js +11 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyModulesPlugin.js +26 -10
- package/lib/{wasm-async → wasm}/AsyncWebAssemblyParser.js +8 -8
- package/lib/wasm/EnableWasmLoadingPlugin.js +1 -1
- package/lib/{wasm-async → wasm}/UniversalCompileAsyncWasmPlugin.js +9 -7
- package/lib/wasm/wasmModuleFilename.js +2 -2
- package/lib/wasm-sync/SyncWasmModule.js +3 -3
- package/lib/wasm-sync/WasmChunkLoadingRuntimeModule.js +8 -8
- package/lib/wasm-sync/WasmFinalizeExportsPlugin.js +3 -3
- package/lib/wasm-sync/WebAssemblyGenerator.js +9 -8
- package/lib/wasm-sync/WebAssemblyJavascriptGenerator.js +14 -15
- package/lib/wasm-sync/WebAssemblyModulesPlugin.js +9 -7
- package/lib/wasm-sync/WebAssemblyParser.js +6 -6
- package/lib/wasm-sync/WebAssemblyUtils.js +6 -5
- package/lib/{MultiWatching.js → watch/MultiWatching.js} +3 -3
- package/lib/{WatchIgnorePlugin.js → watch/WatchIgnorePlugin.js} +43 -9
- package/lib/{Watching.js → watch/Watching.js} +8 -8
- package/lib/web/FetchCompileAsyncWasmPlugin.js +8 -6
- package/lib/web/FetchCompileWasmPlugin.js +6 -4
- package/lib/web/JsonpChunkLoadingPlugin.js +3 -3
- package/lib/web/JsonpChunkLoadingRuntimeModule.js +6 -6
- package/lib/web/JsonpTemplatePlugin.js +1 -1
- package/lib/webpack.js +27 -17
- package/lib/webworker/ImportScriptsChunkLoadingPlugin.js +3 -3
- package/lib/webworker/ImportScriptsChunkLoadingRuntimeModule.js +6 -6
- package/package.json +49 -38
- package/schemas/WebpackOptions.check.js +2 -1
- package/schemas/WebpackOptions.d.json.ts +2 -0
- package/schemas/WebpackOptions.json +294 -74
- package/schemas/plugins/BannerPlugin.check.js +2 -1
- package/schemas/plugins/BannerPlugin.json +29 -2
- package/schemas/plugins/HtmlGeneratorOptions.check.js +1 -0
- package/schemas/plugins/HtmlParserOptions.check.js +2 -1
- package/schemas/plugins/IgnorePlugin.check.js +1 -0
- package/schemas/plugins/IgnorePlugin.d.json.ts +2 -0
- package/schemas/plugins/IgnorePlugin.json +1 -1
- package/schemas/plugins/LoaderOptionsPlugin.check.js +1 -0
- package/schemas/plugins/ManifestPlugin.check.js +1 -0
- package/schemas/plugins/ManifestPlugin.json +3 -3
- package/schemas/plugins/ProgressPlugin.check.js +2 -1
- package/schemas/plugins/ProgressPlugin.json +2 -7
- package/schemas/plugins/SSRManifestPlugin.check.js +7 -0
- package/schemas/plugins/SSRManifestPlugin.json +20 -0
- package/schemas/plugins/SourceMapDevToolPlugin.check.js +2 -1
- package/schemas/plugins/SourceMapDevToolPlugin.json +44 -12
- package/schemas/plugins/WatchIgnorePlugin.check.js +2 -1
- package/schemas/plugins/WatchIgnorePlugin.json +12 -3
- package/schemas/plugins/asset/AssetGeneratorOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetParserOptions.check.js +1 -0
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.js +1 -0
- package/schemas/plugins/container/ContainerPlugin.check.js +2 -1
- package/schemas/plugins/container/ContainerPlugin.json +8 -0
- package/schemas/plugins/container/ContainerReferencePlugin.check.js +1 -0
- package/schemas/plugins/container/ExternalsType.check.js +1 -0
- package/schemas/plugins/container/ModuleFederationPlugin.check.js +2 -1
- package/schemas/plugins/container/ModuleFederationPlugin.json +40 -0
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.js +1 -0
- package/schemas/plugins/css/CssGeneratorOptions.check.js +1 -0
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.js +1 -0
- package/schemas/plugins/css/CssModuleParserOptions.check.js +1 -0
- package/schemas/plugins/css/CssParserOptions.check.js +1 -0
- package/schemas/plugins/debug/ProfilingPlugin.check.js +1 -0
- package/schemas/plugins/dll/DllPlugin.check.js +1 -0
- package/schemas/plugins/dll/DllReferencePlugin.check.js +2 -1
- package/schemas/plugins/dll/DllReferencePlugin.json +3 -18
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.js +1 -0
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.js +1 -0
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.js +1 -0
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.js +1 -0
- package/schemas/plugins/json/JsonModulesPluginParser.check.js +1 -0
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.js +1 -0
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.js +1 -0
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.js +1 -0
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.js +1 -0
- package/schemas/plugins/schemes/HttpUriPlugin.check.js +1 -0
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.js +1 -0
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.js +2 -1
- package/schemas/plugins/sharing/ConsumeSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.js +2 -1
- package/schemas/plugins/sharing/ProvideSharedPlugin.json +32 -0
- package/schemas/plugins/sharing/SharePlugin.check.js +2 -1
- package/schemas/plugins/sharing/SharePlugin.json +32 -0
- package/types.d.ts +19355 -13873
- package/lib/LazyBarrel.js +0 -388
- package/lib/dependencies/HarmonyAcceptImportDependency.js +0 -39
- package/lib/dependencies/HarmonyModulesPlugin.js +0 -192
- package/lib/javascript/ChunkFormatHelpers.js +0 -72
- package/lib/javascript/grammar.js +0 -5546
- package/lib/javascript/parser.js +0 -1500
- package/lib/javascript/regexpData.js +0 -51
- package/lib/performance/getSourceModules.js +0 -22
- package/lib/util/Semaphore.js +0 -65
- package/lib/util/objectToMap.js +0 -15
- package/schemas/WebpackOptions.check.d.ts +0 -7
- package/schemas/_container.json +0 -155
- package/schemas/_sharing.json +0 -118
- package/schemas/plugins/BannerPlugin.check.d.ts +0 -7
- package/schemas/plugins/HtmlGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/HtmlParserOptions.check.d.ts +0 -7
- package/schemas/plugins/IgnorePlugin.check.d.ts +0 -7
- package/schemas/plugins/LoaderOptionsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ManifestPlugin.check.d.ts +0 -7
- package/schemas/plugins/ProgressPlugin.check.d.ts +0 -7
- package/schemas/plugins/SourceMapDevToolPlugin.check.d.ts +0 -7
- package/schemas/plugins/WatchIgnorePlugin.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetInlineGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetParserOptions.check.d.ts +0 -7
- package/schemas/plugins/asset/AssetResourceGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/container/ContainerPlugin.check.d.ts +0 -7
- package/schemas/plugins/container/ContainerReferencePlugin.check.d.ts +0 -7
- package/schemas/plugins/container/ExternalsType.check.d.ts +0 -7
- package/schemas/plugins/container/ModuleFederationPlugin.check.d.ts +0 -7
- package/schemas/plugins/css/CssAutoOrModuleParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssModuleGeneratorOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssModuleParserOptions.check.d.ts +0 -7
- package/schemas/plugins/css/CssParserOptions.check.d.ts +0 -7
- package/schemas/plugins/debug/ProfilingPlugin.check.d.ts +0 -7
- package/schemas/plugins/dll/DllPlugin.check.d.ts +0 -7
- package/schemas/plugins/dll/DllReferencePlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/HashedModuleIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/OccurrenceChunkIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/ids/OccurrenceModuleIdsPlugin.check.d.ts +0 -7
- package/schemas/plugins/json/JsonModulesPluginGenerator.check.d.ts +0 -7
- package/schemas/plugins/json/JsonModulesPluginParser.check.d.ts +0 -7
- package/schemas/plugins/optimize/AggressiveSplittingPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/LimitChunkCountPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/MergeDuplicateChunksPlugin.check.d.ts +0 -7
- package/schemas/plugins/optimize/MinChunkSizePlugin.check.d.ts +0 -7
- package/schemas/plugins/schemes/HttpUriPlugin.check.d.ts +0 -7
- package/schemas/plugins/schemes/VirtualUrlPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/ConsumeSharedPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/ProvideSharedPlugin.check.d.ts +0 -7
- package/schemas/plugins/sharing/SharePlugin.check.d.ts +0 -7
- /package/lib/{validateSchema.js → config/validateSchema.js} +0 -0
- /package/lib/{util → css}/conventions.js +0 -0
- /package/lib/{util → css}/topologicalSort.js +0 -0
- /package/lib/dependencies/{getFunctionExpression.js → helpers/getFunctionExpression.js} +0 -0
- /package/lib/{util → externals}/extractUrlAndGlobal.js +0 -0
- /package/lib/{util → fs}/StackedCacheMap.js +0 -0
- /package/lib/{util → javascript}/StackedMap.js +0 -0
- /package/lib/{ModuleProfile.js → module/ModuleProfile.js} +0 -0
- /package/lib/{ModuleSourceTypeConstants.js → module/ModuleSourceTypeConstants.js} +0 -0
- /package/lib/{ModuleTypeConstants.js → module/ModuleTypeConstants.js} +0 -0
- /package/lib/{OptimizationStages.js → optimize/OptimizationStages.js} +0 -0
- /package/lib/{util → optimize}/Queue.js +0 -0
- /package/lib/{util → stats}/smartGrouping.js +0 -0
|
@@ -38,6 +38,8 @@ const chooseDeferredInfix = (input) => {
|
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
const DEFERRED_ID_RE = /^\d+$/;
|
|
41
|
+
// A character a stylesheet's bytes cannot spell without naming an encoding.
|
|
42
|
+
const NON_ASCII_RE = /[^\0-\u007F]/;
|
|
41
43
|
|
|
42
44
|
/**
|
|
43
45
|
* Read the deferred write standing at `start`, if one does.
|
|
@@ -117,10 +119,10 @@ const declineDeferredWrites = (text, writes) =>
|
|
|
117
119
|
);
|
|
118
120
|
|
|
119
121
|
/**
|
|
120
|
-
*
|
|
122
|
+
* Visitor map keyed by a numeric node-type discriminator; a bucket
|
|
121
123
|
* is a function (enter-only) or `{ enter?, exit? }`.
|
|
122
124
|
*
|
|
123
|
-
* A visitor receives a single `path` argument
|
|
125
|
+
* A visitor receives a single `path` argument: the
|
|
124
126
|
* language's AST accessor with the current position on it — `path.node`,
|
|
125
127
|
* `path.parent` (null at a root) — plus `path.skipChildren()` (enter only)
|
|
126
128
|
* to stop the walk descending, and every field-read method (which defaults
|
|
@@ -130,6 +132,122 @@ const declineDeferredWrites = (text, writes) =>
|
|
|
130
132
|
* @template TPath
|
|
131
133
|
* @typedef {(path: TPath) => void} VisitorFn
|
|
132
134
|
*/
|
|
135
|
+
/**
|
|
136
|
+
* The members every language's `path` has under the same name and meaning, so
|
|
137
|
+
* a visitor written against it reads any grammar; see `docs/syntax.md`.
|
|
138
|
+
* @template TNode
|
|
139
|
+
* @template [TValue=unknown]
|
|
140
|
+
* @typedef {NodePathReads<TNode, TValue> & NodePathFields<TNode>} NodePath
|
|
141
|
+
*/
|
|
142
|
+
/**
|
|
143
|
+
* @template TNode
|
|
144
|
+
* @template [TValue=unknown]
|
|
145
|
+
* @typedef {object} NodePathReads
|
|
146
|
+
* @property {TNode} node the current node
|
|
147
|
+
* @property {TNode | null} parent the enclosing node (null at a root)
|
|
148
|
+
* @property {number} index the current node's index among its siblings
|
|
149
|
+
* @property {() => void} skipChildren stop the walk descending into the current node (enter only)
|
|
150
|
+
* @property {() => void} stop end the walk: no visitor fires after the current one returns, and a print still completes
|
|
151
|
+
* @property {unknown} state the run's state, as `process` was given it
|
|
152
|
+
* @property {(n?: TNode) => number} type the node's `NodeType`
|
|
153
|
+
* @property {(n?: TNode) => [number, number]} range start and end offsets in the input
|
|
154
|
+
* @property {(n?: TNode) => number} start where the node starts in the input
|
|
155
|
+
* @property {(n?: TNode) => number} end where the node ends in the input
|
|
156
|
+
* @property {(n?: TNode) => [number, number, number, number]} loc start line and column, end line and column (lines from 1, columns from 0)
|
|
157
|
+
* @property {(n?: TNode | number, end?: number) => string} source the node's source text, or the input between two offsets
|
|
158
|
+
* @property {(n?: TNode) => string} name the node's name as the language defines it, decoded ("" when it has none)
|
|
159
|
+
* @property {(n?: TNode) => TValue} value the node's value as the language defines it, decoded
|
|
160
|
+
* @property {(n?: TNode) => number} childCount number of children
|
|
161
|
+
* @property {(i: number, n?: TNode) => TNode} child the i-th child
|
|
162
|
+
* @property {(n?: TNode) => TNode[]} children every child as a new array
|
|
163
|
+
*/
|
|
164
|
+
/**
|
|
165
|
+
* Structure read through a language's `Field`, `Flag` and `Part`. Declared as
|
|
166
|
+
* methods so a language's path may accept only the parts each node type has.
|
|
167
|
+
* @template TNode
|
|
168
|
+
* @typedef {{
|
|
169
|
+
* field(i: number, field: number, n?: TNode): TNode,
|
|
170
|
+
* fieldCount(field: number, n?: TNode): number,
|
|
171
|
+
* fieldNamed(field: number, name: string, n?: TNode): TNode,
|
|
172
|
+
* flag(flag: number, n?: TNode): boolean,
|
|
173
|
+
* rangeOf(part: number, n?: TNode): [number, number] | null,
|
|
174
|
+
* startOf(part: number, n?: TNode): number,
|
|
175
|
+
* endOf(part: number, n?: TNode): number,
|
|
176
|
+
* textOf(part: number, n?: TNode): string | null,
|
|
177
|
+
* within(type: number): boolean,
|
|
178
|
+
* }} NodePathFields
|
|
179
|
+
*/
|
|
180
|
+
/**
|
|
181
|
+
* A node that also says which `NodeType` it is, so reading a part that type
|
|
182
|
+
* lacks fails to type-check; a plain `TNode` can be any node.
|
|
183
|
+
* @template TNode
|
|
184
|
+
* @template T
|
|
185
|
+
* @typedef {TNode & { readonly __nodeType: T }} TypedNode
|
|
186
|
+
*/
|
|
187
|
+
/**
|
|
188
|
+
* What part `M` gives the node type `R` says it is; every part `D` when `R`
|
|
189
|
+
* says none (a plain node reads `unknown` there).
|
|
190
|
+
* @template R
|
|
191
|
+
* @template {Record<number, number>} M
|
|
192
|
+
* @template D
|
|
193
|
+
* @typedef {number extends (R & { readonly __nodeType: unknown })["__nodeType"] ? D : M[(R & { readonly __nodeType: unknown })["__nodeType"] & number]} PartOf
|
|
194
|
+
*/
|
|
195
|
+
/**
|
|
196
|
+
* A language's parts, by node type: what its `Field`s and `Flag`s apply to.
|
|
197
|
+
* @typedef {object} NodeParts
|
|
198
|
+
* @property {number} types every `NodeType` member
|
|
199
|
+
* @property {number} field every `Field`
|
|
200
|
+
* @property {number} flag every `Flag`
|
|
201
|
+
* @property {number} part every `Part` with a position
|
|
202
|
+
* @property {number} text every `Part` with text beyond the name and value
|
|
203
|
+
* @property {Record<number, number>} fields the `Field`s of each node type
|
|
204
|
+
* @property {Record<number, number>} flags the `Flag`s of each node type
|
|
205
|
+
* @property {Record<number, number>} parts the `Part`s with a position, by node type
|
|
206
|
+
* @property {Record<number, number>} texts the `Part`s with text, by node type
|
|
207
|
+
* @property {Record<number, number>} items the node type of each `Field`'s items
|
|
208
|
+
*/
|
|
209
|
+
/**
|
|
210
|
+
* The path a visitor of node type `T` receives: its structure reads take only
|
|
211
|
+
* the parts that type has, and its `state` is the run's.
|
|
212
|
+
* @template TPath
|
|
213
|
+
* @template TNode
|
|
214
|
+
* @template {NodeParts} P
|
|
215
|
+
* @template T
|
|
216
|
+
* @template [S=unknown]
|
|
217
|
+
* @typedef {Omit<TPath, "node" | "state" | "within" | "field" | "fieldCount" | "fieldNamed" | "flag" | "rangeOf" | "startOf" | "endOf" | "textOf"> & {
|
|
218
|
+
* readonly node: TypedNode<TNode, T>,
|
|
219
|
+
* readonly state: S,
|
|
220
|
+
* within(type: P["types"]): boolean,
|
|
221
|
+
* field<R extends TNode = TypedNode<TNode, T>, F extends number = number>(i: number, field: F & PartOf<R, P["fields"], P["field"]>, n?: R): TypedNode<TNode, P["items"][F]>,
|
|
222
|
+
* fieldCount<R extends TNode = TypedNode<TNode, T>>(field: PartOf<R, P["fields"], P["field"]>, n?: R): number,
|
|
223
|
+
* fieldNamed<R extends TNode = TypedNode<TNode, T>, F extends number = number>(field: F & PartOf<R, P["fields"], P["field"]>, name: string, n?: R): TypedNode<TNode, P["items"][F]>,
|
|
224
|
+
* flag<R extends TNode = TypedNode<TNode, T>>(flag: PartOf<R, P["flags"], P["flag"]>, n?: R): boolean,
|
|
225
|
+
* rangeOf<R extends TNode = TypedNode<TNode, T>>(part: PartOf<R, P["parts"], P["part"]>, n?: R): [number, number] | null,
|
|
226
|
+
* startOf<R extends TNode = TypedNode<TNode, T>>(part: PartOf<R, P["parts"], P["part"]>, n?: R): number,
|
|
227
|
+
* endOf<R extends TNode = TypedNode<TNode, T>>(part: PartOf<R, P["parts"], P["part"]>, n?: R): number,
|
|
228
|
+
* textOf<R extends TNode = TypedNode<TNode, T>>(part: PartOf<R, P["texts"], P["text"]>, n?: R): string | null
|
|
229
|
+
* }} TypedNodePath
|
|
230
|
+
*/
|
|
231
|
+
/**
|
|
232
|
+
* The parts of a language that names none: every node type has every part.
|
|
233
|
+
* @typedef {{
|
|
234
|
+
* types: number,
|
|
235
|
+
* field: number,
|
|
236
|
+
* flag: number,
|
|
237
|
+
* part: number,
|
|
238
|
+
* text: number,
|
|
239
|
+
* fields: Record<number, number>,
|
|
240
|
+
* flags: Record<number, number>,
|
|
241
|
+
* parts: Record<number, number>,
|
|
242
|
+
* texts: Record<number, number>,
|
|
243
|
+
* items: Record<number, number>,
|
|
244
|
+
* }} AnyParts
|
|
245
|
+
*/
|
|
246
|
+
/**
|
|
247
|
+
* @template S
|
|
248
|
+
* @typedef {{ state?: S }} RunState what a run hands its visitors as `path.state`
|
|
249
|
+
*/
|
|
250
|
+
|
|
133
251
|
/**
|
|
134
252
|
* @template TPath
|
|
135
253
|
* @typedef {VisitorFn<TPath> | { enter?: VisitorFn<TPath>, exit?: VisitorFn<TPath> }} VisitorBucket
|
|
@@ -154,15 +272,32 @@ const declineDeferredWrites = (text, writes) =>
|
|
|
154
272
|
* typedef HTML also depends on.
|
|
155
273
|
* @typedef {{ mode: "minify" | "beautify" }} PrintOptions
|
|
156
274
|
*/
|
|
275
|
+
/**
|
|
276
|
+
* What names one offer whatever print made it: every field but the functions,
|
|
277
|
+
* so the second print of `processAsync` finds the first one's answer by it.
|
|
278
|
+
* @param {Omit<DeferredWrite, "build">} offer an offer, `build` and all or without it
|
|
279
|
+
* @returns {string} its key
|
|
280
|
+
*/
|
|
281
|
+
const deferredKey = (offer) => {
|
|
282
|
+
let key = "";
|
|
283
|
+
for (const name of Object.keys(offer).sort()) {
|
|
284
|
+
const value = /** @type {Record<string, unknown>} */ (offer)[name];
|
|
285
|
+
if (typeof value !== "function") key += `${name}\0${value}\0`;
|
|
286
|
+
}
|
|
287
|
+
return key;
|
|
288
|
+
};
|
|
289
|
+
|
|
157
290
|
/**
|
|
158
291
|
* One write the print left a marker for, collected into the `deferEmbeddedSource`
|
|
159
292
|
* print option by whichever grammar offered it — the other half of
|
|
160
|
-
* {@link deferredWrite}. `source` is the text offered
|
|
161
|
-
* printed around the answer
|
|
162
|
-
*
|
|
293
|
+
* {@link deferredWrite}. `source` is the text offered, `build` spells what is
|
|
294
|
+
* printed around the answer (an untapped run's spelling where there is none), and
|
|
295
|
+
* `decides` says whether the answer overturns a choice the print made without it.
|
|
296
|
+
* A grammar carries whatever else describes the offer (`type`, `hostType`, `as`,
|
|
163
297
|
* …) on the same object.
|
|
164
|
-
* @typedef {{ source: string, build: (answer: string | undefined) => string }} DeferredWrite
|
|
298
|
+
* @typedef {{ source: string, build: (answer: string | undefined) => string, decides?: (answer: string | undefined) => boolean }} DeferredWrite
|
|
165
299
|
*/
|
|
300
|
+
/** @import { DeferredEmbeddedSource } from "./dataURL" */
|
|
166
301
|
/**
|
|
167
302
|
* A version-3 source map. Written structurally (with the `3` literal) so it
|
|
168
303
|
* satisfies both `webpack-sources` and the minimizer plugin's map types without
|
|
@@ -195,6 +330,11 @@ const _makeMap = (options, mappings) => ({
|
|
|
195
330
|
// small enough that the un-flattened fragments behind it stay bounded.
|
|
196
331
|
const FLATTEN_BLOCK = 64 * 1024;
|
|
197
332
|
|
|
333
|
+
// Most prints do not ask for a source map. Sharing their permanently empty
|
|
334
|
+
// mapping column avoids allocating an array for every inline CSS/HTML body.
|
|
335
|
+
/** @type {[number, number, number, number][]} */
|
|
336
|
+
const EMPTY_MAPPINGS = [];
|
|
337
|
+
|
|
198
338
|
// Base64 VLQ, the source-map `mappings` encoding. Hand-rolled so producing a map
|
|
199
339
|
// pulls in no dependency (`source-map` is not a webpack dep).
|
|
200
340
|
const _B64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
|
@@ -283,15 +423,15 @@ class PrintContext {
|
|
|
283
423
|
this._tailLength = 0;
|
|
284
424
|
/** @type {number} scratch for the flattening read in {@link _cutTail} */
|
|
285
425
|
this._flattened = 0;
|
|
286
|
-
/** @type {[number, number, number, number][]} `[chunkIndex, offsetInChunk, srcLine, srcCol]`, output-ordered; a `srcLine` of -1 is one {@link retract} took back with its piece */
|
|
287
|
-
this._mappings = [];
|
|
288
|
-
/** @type {number[] | null} by retractable piece index, the mapping anchored to it, so taking the piece back takes its mapping too */
|
|
289
|
-
this._retractableMappings = null;
|
|
290
426
|
// A map is built only for a caller that named the input, and that is known
|
|
291
427
|
// before printing — so a print nobody asks a map of collects none.
|
|
292
428
|
/** @type {boolean} whether {@link sourceMap} can still be asked for one */
|
|
293
429
|
this.mapWanted =
|
|
294
430
|
/** @type {{ source?: string }} */ (options).source !== undefined;
|
|
431
|
+
/** @type {[number, number, number, number][]} `[chunkIndex, offsetInChunk, srcLine, srcCol]`, output-ordered; a `srcLine` of -1 is one {@link retract} took back with its piece */
|
|
432
|
+
this._mappings = this.mapWanted ? [] : EMPTY_MAPPINGS;
|
|
433
|
+
/** @type {number[] | null} by retractable piece index, the mapping anchored to it, so taking the piece back takes its mapping too */
|
|
434
|
+
this._retractableMappings = null;
|
|
295
435
|
/** @type {[number, string][]} source-anchored literals to keep (comments), source-ordered */
|
|
296
436
|
this._inserts = [];
|
|
297
437
|
/** @type {number} next `_inserts` entry not yet flushed */
|
|
@@ -473,6 +613,42 @@ class PrintContext {
|
|
|
473
613
|
}
|
|
474
614
|
}
|
|
475
615
|
|
|
616
|
+
/**
|
|
617
|
+
* Stand `text` in place of the output's end, where that is `printed` followed
|
|
618
|
+
* only by `closer`s — what the printer wrote after a value the input ran out in.
|
|
619
|
+
* @param {string} printed the text the output must end with, before the closers
|
|
620
|
+
* @param {string} text what to write in place of it and them
|
|
621
|
+
* @param {number} closer the character that may follow `printed`
|
|
622
|
+
* @returns {boolean} true when the output ended that way and was rewritten
|
|
623
|
+
*/
|
|
624
|
+
replaceEnd(printed, text, closer) {
|
|
625
|
+
this._cutTail();
|
|
626
|
+
const chunks = this._chunks;
|
|
627
|
+
// Joined once: this runs only where a value ran into the end of the input.
|
|
628
|
+
const output = chunks.join("");
|
|
629
|
+
let end = output.length;
|
|
630
|
+
while (end > 0 && output.charCodeAt(end - 1) === closer) end--;
|
|
631
|
+
// The closers the printed text wrote itself are its own, not the blocks'.
|
|
632
|
+
let own = printed.length;
|
|
633
|
+
while (own > 0 && printed.charCodeAt(own - 1) === closer) own--;
|
|
634
|
+
end += printed.length - own;
|
|
635
|
+
if (end > output.length || !output.slice(0, end).endsWith(printed)) {
|
|
636
|
+
return false;
|
|
637
|
+
}
|
|
638
|
+
let remove = output.length - end + printed.length;
|
|
639
|
+
for (let i = chunks.length - 1; remove > 0; i--) {
|
|
640
|
+
const kept = Math.max(0, chunks[i].length - remove);
|
|
641
|
+
remove -= chunks[i].length - kept;
|
|
642
|
+
chunks[i] = chunks[i].slice(0, kept);
|
|
643
|
+
// A mapping into what went would point past its piece.
|
|
644
|
+
this._mappings = this._mappings.filter(
|
|
645
|
+
([chunk, offset]) => chunk !== i || offset <= kept
|
|
646
|
+
);
|
|
647
|
+
}
|
|
648
|
+
this._emit(text);
|
|
649
|
+
return true;
|
|
650
|
+
}
|
|
651
|
+
|
|
476
652
|
/**
|
|
477
653
|
* Run the node printer for `node` and store what it returns (the grammar calls
|
|
478
654
|
* this once the node's visitors and children are done). `path` is on `node`.
|
|
@@ -481,7 +657,7 @@ class PrintContext {
|
|
|
481
657
|
*/
|
|
482
658
|
printNode(node, path) {
|
|
483
659
|
const text = this._printer(path, this);
|
|
484
|
-
const n = /** @type {
|
|
660
|
+
const n = /** @type {number} */ (node);
|
|
485
661
|
if (n >= this._storeText.length) this._growStore(n + 1);
|
|
486
662
|
this._storeText[n] = text;
|
|
487
663
|
this._storeGen[n] = this._gen;
|
|
@@ -505,7 +681,7 @@ class PrintContext {
|
|
|
505
681
|
* @returns {string} its printed text
|
|
506
682
|
*/
|
|
507
683
|
get(node) {
|
|
508
|
-
const n = /** @type {
|
|
684
|
+
const n = /** @type {number} */ (node);
|
|
509
685
|
return /** @type {string} */ (
|
|
510
686
|
this._storeGen[n] === this._gen ? this._storeText[n] : undefined
|
|
511
687
|
);
|
|
@@ -572,6 +748,24 @@ class PrintContext {
|
|
|
572
748
|
if (mapping !== undefined) this._mappings[mapping][2] = -1;
|
|
573
749
|
}
|
|
574
750
|
|
|
751
|
+
/**
|
|
752
|
+
* Whether the output after a piece holds a character outside ASCII, the
|
|
753
|
+
* comments still waiting to be placed included.
|
|
754
|
+
* @param {number} index the piece's index, from {@link emitRetractable}
|
|
755
|
+
* @returns {boolean} true when it does
|
|
756
|
+
*/
|
|
757
|
+
writesNonAscii(index) {
|
|
758
|
+
const chunks = this._chunks;
|
|
759
|
+
for (let i = index + 1; i < chunks.length; i++) {
|
|
760
|
+
if (NON_ASCII_RE.test(chunks[i])) return true;
|
|
761
|
+
}
|
|
762
|
+
const inserts = this._inserts;
|
|
763
|
+
for (let i = this._insertIdx; i < inserts.length; i++) {
|
|
764
|
+
if (NON_ASCII_RE.test(inserts[i][1])) return true;
|
|
765
|
+
}
|
|
766
|
+
return NON_ASCII_RE.test(this._tail);
|
|
767
|
+
}
|
|
768
|
+
|
|
575
769
|
/**
|
|
576
770
|
* Fold `text` into an already-emitted piece, in front of the character it ends
|
|
577
771
|
* with — a later sibling whose body belongs inside that piece, as a repeated
|
|
@@ -919,29 +1113,38 @@ class PrintContext {
|
|
|
919
1113
|
* Visitor coordinator: owns the visitor registry and drives a language
|
|
920
1114
|
* `grammar` over the source. Language-agnostic — each syntax (CSS, HTML, …)
|
|
921
1115
|
* binds its own grammar, node-type enum and (optionally) node printer.
|
|
922
|
-
*
|
|
1116
|
+
* Usage:
|
|
923
1117
|
*
|
|
924
1118
|
* ```
|
|
925
1119
|
* processor.use({ [NodeType.X]: (path) => {}, [NodeType.Y]: { enter, exit } });
|
|
926
1120
|
* processor.process(source);
|
|
927
1121
|
* ```
|
|
928
|
-
* @template TPath
|
|
1122
|
+
* @template {NodePath<TNode>} TPath
|
|
929
1123
|
* @template TNode
|
|
930
1124
|
* @template [TProcessOptions=object]
|
|
931
1125
|
* @template [TPrintOptions=object]
|
|
1126
|
+
* @template {NodeParts} [TParts=AnyParts] the language's parts, which type each visitor's path by node type
|
|
1127
|
+
* @template [TState=unknown] what `process` hands every visitor as `path.state`
|
|
1128
|
+
* @template [TVisitors=VisitorMap<TPath>] the language's visitor map, each path typed by its key and with `TState`
|
|
932
1129
|
*/
|
|
933
1130
|
class SourceProcessor {
|
|
934
1131
|
/**
|
|
935
1132
|
* @param {Grammar<TPath, TNode, TProcessOptions, TPrintOptions>} grammar the grammar to drive over the source
|
|
936
1133
|
* @param {NodePrinter<TPath, TNode, TPrintOptions>=} printer the node printer, fired per node once its visitors and children are done; the same `path` a visitor gets plus the print context as its writer. Required to print (e.g. `mode`); a future API can let a developer supply their own
|
|
1134
|
+
* @param {(() => NodePrinter<TPath, TNode, TPrintOptions>)=} loadPrinter asked for the printer the first time something prints, for a language that keeps its printer in a module of its own — so a walk that never prints never loads it
|
|
1135
|
+
* @param {TPath=} path the path the grammar hands its visitors, whose `state` a run sets
|
|
937
1136
|
*/
|
|
938
|
-
constructor(grammar, printer) {
|
|
1137
|
+
constructor(grammar, printer, loadPrinter, path) {
|
|
939
1138
|
/** @type {Grammar<TPath, TNode, TProcessOptions, TPrintOptions>} */
|
|
940
1139
|
this._grammar = grammar;
|
|
941
1140
|
/** @type {CompiledVisitorMap<TPath>} */
|
|
942
1141
|
this._visitors = [];
|
|
943
1142
|
/** @type {NodePrinter<TPath, TNode, TPrintOptions> | undefined} */
|
|
944
1143
|
this._printer = printer;
|
|
1144
|
+
/** @type {(() => NodePrinter<TPath, TNode, TPrintOptions>) | undefined} */
|
|
1145
|
+
this._loadPrinter = loadPrinter;
|
|
1146
|
+
/** @type {TPath | undefined} */
|
|
1147
|
+
this._path = path;
|
|
945
1148
|
// Set for the one print {@link processDeferred} holds open, so `process`
|
|
946
1149
|
// hands it the context instead of building the output straight away.
|
|
947
1150
|
/** @type {((ctx: PrintContext<TPath, TNode, TPrintOptions>, build: () => { code: string, map: SourceMap | undefined }) => void) | null} */
|
|
@@ -949,32 +1152,92 @@ class SourceProcessor {
|
|
|
949
1152
|
}
|
|
950
1153
|
|
|
951
1154
|
/**
|
|
952
|
-
* Register
|
|
1155
|
+
* Register one bucket for several node types, as a map naming each would;
|
|
1156
|
+
* its path takes only the parts those types have.
|
|
1157
|
+
* @template {number} T
|
|
1158
|
+
* @overload
|
|
1159
|
+
* @param {T[]} types the node types the bucket visits
|
|
1160
|
+
* @param {VisitorBucket<TypedNodePath<TPath, TNode, TParts, T, TState>>} bucket the visitor
|
|
1161
|
+
* @returns {SourceProcessor<TPath, TNode, TProcessOptions, TPrintOptions, TParts, TState, TVisitors>} `this`, for chaining
|
|
1162
|
+
*/
|
|
1163
|
+
/**
|
|
1164
|
+
* Register a visitor map; calls accumulate per node type, and each
|
|
1165
|
+
* visitor's path takes only its type's parts.
|
|
953
1166
|
* A bucket is a function (= `{ enter }`) or `{ enter?, exit? }`.
|
|
1167
|
+
* @overload
|
|
1168
|
+
* @param {TVisitors} map visitor map keyed by node type
|
|
1169
|
+
* @returns {SourceProcessor<TPath, TNode, TProcessOptions, TPrintOptions, TParts, TState, TVisitors>} `this`, for chaining
|
|
1170
|
+
*/
|
|
1171
|
+
/**
|
|
1172
|
+
* Register a visitor map built at runtime, keyed by any node type.
|
|
1173
|
+
* @overload
|
|
954
1174
|
* @param {VisitorMap<TPath>} map visitor map keyed by node type
|
|
955
|
-
* @returns {SourceProcessor<TPath, TNode, TProcessOptions, TPrintOptions>} `this`, for chaining
|
|
1175
|
+
* @returns {SourceProcessor<TPath, TNode, TProcessOptions, TPrintOptions, TParts, TState, TVisitors>} `this`, for chaining
|
|
956
1176
|
*/
|
|
957
|
-
|
|
1177
|
+
/**
|
|
1178
|
+
* @param {EXPECTED_ANY} map visitor map, or the node types `bucket` visits
|
|
1179
|
+
* @param {VisitorBucket<EXPECTED_ANY>=} bucket the visitor, with an array of types
|
|
1180
|
+
* @returns {SourceProcessor<TPath, TNode, TProcessOptions, TPrintOptions, TParts, TState, TVisitors>} `this`, for chaining
|
|
1181
|
+
*/
|
|
1182
|
+
use(map, bucket) {
|
|
1183
|
+
if (Array.isArray(map)) {
|
|
1184
|
+
if (bucket === undefined) {
|
|
1185
|
+
throw new TypeError(
|
|
1186
|
+
"SourceProcessor.use(types, bucket): a visitor is required"
|
|
1187
|
+
);
|
|
1188
|
+
}
|
|
1189
|
+
for (let i = 0; i < map.length; i++) this._add(map[i], bucket);
|
|
1190
|
+
return this;
|
|
1191
|
+
}
|
|
958
1192
|
// `map`'s keys are node-type enum members; `Object.keys` stringifies them,
|
|
959
1193
|
// so index the compiled array by the number to match the numeric `node.type`.
|
|
960
1194
|
for (const type of Object.keys(map)) {
|
|
961
1195
|
const key = Number(type);
|
|
962
|
-
|
|
963
|
-
let bucket = this._visitors[key];
|
|
964
|
-
if (!bucket) {
|
|
965
|
-
bucket = { enter: [], exit: [] };
|
|
966
|
-
this._visitors[key] = bucket;
|
|
967
|
-
}
|
|
968
|
-
if (typeof v === "function") {
|
|
969
|
-
bucket.enter.push(v);
|
|
970
|
-
} else {
|
|
971
|
-
if (v.enter) bucket.enter.push(v.enter);
|
|
972
|
-
if (v.exit) bucket.exit.push(v.exit);
|
|
973
|
-
}
|
|
1196
|
+
this._add(key, map[key]);
|
|
974
1197
|
}
|
|
975
1198
|
return this;
|
|
976
1199
|
}
|
|
977
1200
|
|
|
1201
|
+
/**
|
|
1202
|
+
* @param {number} type node type
|
|
1203
|
+
* @param {VisitorBucket<TPath>} visitor its visitor
|
|
1204
|
+
*/
|
|
1205
|
+
_add(type, visitor) {
|
|
1206
|
+
let compiled = this._visitors[type];
|
|
1207
|
+
if (!compiled) {
|
|
1208
|
+
compiled = { enter: [], exit: [] };
|
|
1209
|
+
this._visitors[type] = compiled;
|
|
1210
|
+
}
|
|
1211
|
+
if (typeof visitor === "function") {
|
|
1212
|
+
compiled.enter.push(visitor);
|
|
1213
|
+
} else {
|
|
1214
|
+
if (visitor.enter) compiled.enter.push(visitor.enter);
|
|
1215
|
+
if (visitor.exit) compiled.exit.push(visitor.exit);
|
|
1216
|
+
}
|
|
1217
|
+
}
|
|
1218
|
+
|
|
1219
|
+
/**
|
|
1220
|
+
* Run the grammar with the path's `state` set to the run's, put back after so
|
|
1221
|
+
* a run nested in a visitor leaves its caller's.
|
|
1222
|
+
* @param {string} input the source
|
|
1223
|
+
* @param {PrintContext<TPath, TNode, TPrintOptions> | undefined} ctx the print context, when printing
|
|
1224
|
+
* @param {TProcessOptions} opts process options
|
|
1225
|
+
*/
|
|
1226
|
+
_run(input, ctx, opts) {
|
|
1227
|
+
const path = this._path;
|
|
1228
|
+
if (path === undefined) {
|
|
1229
|
+
this._grammar(input, this._visitors, ctx, opts);
|
|
1230
|
+
return;
|
|
1231
|
+
}
|
|
1232
|
+
const outer = path.state;
|
|
1233
|
+
path.state = /** @type {RunState<TState>} */ (opts).state;
|
|
1234
|
+
try {
|
|
1235
|
+
this._grammar(input, this._visitors, ctx, opts);
|
|
1236
|
+
} finally {
|
|
1237
|
+
path.state = outer;
|
|
1238
|
+
}
|
|
1239
|
+
}
|
|
1240
|
+
|
|
978
1241
|
/**
|
|
979
1242
|
* Parse `input` once and fire the visitors in source order. Asking for output
|
|
980
1243
|
* — `mode`, the one thing that names it — makes the same walk print, given a
|
|
@@ -987,31 +1250,40 @@ class SourceProcessor {
|
|
|
987
1250
|
* never re-parses; all configuration is per-call.
|
|
988
1251
|
* @overload
|
|
989
1252
|
* @param {string} input the source
|
|
990
|
-
* @param {TProcessOptions & { mode: PrintOptions["mode"] } & { source: string, content?: string }} options process options, naming the input so a map is built
|
|
1253
|
+
* @param {TProcessOptions & RunState<TState> & { mode: PrintOptions["mode"] } & { source: string, content?: string }} options process options, naming the input so a map is built
|
|
991
1254
|
* @returns {{ code: string, map: SourceMap }} the output and its map
|
|
992
1255
|
*/
|
|
993
1256
|
/**
|
|
994
1257
|
* @overload
|
|
995
1258
|
* @param {string} input the source
|
|
996
|
-
* @param {TProcessOptions & { mode: PrintOptions["mode"] }} options process options, asking for output but no map
|
|
1259
|
+
* @param {TProcessOptions & RunState<TState> & { mode: PrintOptions["mode"] }} options process options, asking for output but no map
|
|
997
1260
|
* @returns {{ code: string, map: undefined }} the output alone
|
|
998
1261
|
*/
|
|
999
1262
|
/**
|
|
1000
1263
|
* @overload
|
|
1001
1264
|
* @param {string} input the source
|
|
1002
|
-
* @param {TProcessOptions=} options process options, asking for no output
|
|
1265
|
+
* @param {(TProcessOptions & RunState<TState>)=} options process options, asking for no output
|
|
1003
1266
|
* @returns {undefined} nothing — the walk alone
|
|
1004
1267
|
*/
|
|
1005
1268
|
/**
|
|
1006
1269
|
* @param {string} input source text
|
|
1007
|
-
* @param {TProcessOptions=} options grammar-specific options (`skip`, …) plus `mode
|
|
1008
|
-
* @returns {
|
|
1270
|
+
* @param {(TProcessOptions & RunState<TState>)=} options grammar-specific options (`skip`, …) plus `mode`, for the map `source` / `content`, and the visitors' `state`
|
|
1271
|
+
* @returns {{ code: string, map: SourceMap | undefined } | undefined} `{ code, map }` when printing, else `undefined` — see the overloads
|
|
1009
1272
|
*/
|
|
1010
1273
|
process(input, options) {
|
|
1011
1274
|
const opts = options || /** @type {TProcessOptions} */ ({});
|
|
1012
1275
|
const asked = /** @type {{ mode?: PrintOptions["mode"] }} */ (opts).mode;
|
|
1276
|
+
// Asked for once per `process` and never per node, which is what lets a
|
|
1277
|
+
// language hold its printer back until something actually prints.
|
|
1278
|
+
if (
|
|
1279
|
+
this._printer === undefined &&
|
|
1280
|
+
asked !== undefined &&
|
|
1281
|
+
this._loadPrinter
|
|
1282
|
+
) {
|
|
1283
|
+
this._printer = this._loadPrinter();
|
|
1284
|
+
}
|
|
1013
1285
|
if (this._printer === undefined || asked === undefined) {
|
|
1014
|
-
this.
|
|
1286
|
+
this._run(input, undefined, opts);
|
|
1015
1287
|
return undefined;
|
|
1016
1288
|
}
|
|
1017
1289
|
// Handed over whole rather than copied entry by entry: which entries are
|
|
@@ -1019,11 +1291,11 @@ class SourceProcessor {
|
|
|
1019
1291
|
// along is inert, since a printer reads only what its own type declares.
|
|
1020
1292
|
const ctx = new PrintContext(
|
|
1021
1293
|
/** @type {PrintOptions & TPrintOptions} */ (
|
|
1022
|
-
/** @type {unknown} */ (
|
|
1294
|
+
/** @type {unknown} */ (opts)
|
|
1023
1295
|
),
|
|
1024
1296
|
/** @type {NodePrinter<TPath, TNode, TPrintOptions>} */ (this._printer)
|
|
1025
1297
|
);
|
|
1026
|
-
this.
|
|
1298
|
+
this._run(input, ctx, opts);
|
|
1027
1299
|
const name = /** @type {{ source?: string, content?: string }} */ (opts);
|
|
1028
1300
|
const build = () => {
|
|
1029
1301
|
const code = ctx.result();
|
|
@@ -1061,7 +1333,7 @@ class SourceProcessor {
|
|
|
1061
1333
|
* This is the shape `process` itself takes once it is async: how the answers
|
|
1062
1334
|
* are waited for is this method's business, so nothing above it changes.
|
|
1063
1335
|
* @param {string} input the source
|
|
1064
|
-
* @param {Omit<TProcessOptions, "renderEmbeddedSource"> & { mode: PrintOptions["mode"] } & { source?: string, content?: string, renderEmbeddedSource?: (source: string, hole:
|
|
1336
|
+
* @param {Omit<TProcessOptions, "renderEmbeddedSource"> & RunState<TState> & { mode: PrintOptions["mode"] } & { source?: string, content?: string, renderEmbeddedSource?: (source: string, hole: DeferredEmbeddedSource) => Promise<string | undefined> | string | undefined }} options process options; a print, so `mode` names which one, and naming the input builds a map. `renderEmbeddedSource` is the grammar's own option with a wider answer — it may answer asynchronously, and is handed each {@link DeferredWrite} whole. Absent, this is `process` with a promise around it
|
|
1065
1337
|
* @returns {Promise<{ code: string, map: SourceMap | undefined }>} the output and its map
|
|
1066
1338
|
*/
|
|
1067
1339
|
async processAsync(input, options) {
|
|
@@ -1079,7 +1351,7 @@ class SourceProcessor {
|
|
|
1079
1351
|
);
|
|
1080
1352
|
}
|
|
1081
1353
|
|
|
1082
|
-
/** @type {
|
|
1354
|
+
/** @type {DeferredEmbeddedSource[]} */
|
|
1083
1355
|
const deferred = [];
|
|
1084
1356
|
const { finish } = this._processDeferred(input, {
|
|
1085
1357
|
...opts,
|
|
@@ -1094,10 +1366,43 @@ class SourceProcessor {
|
|
|
1094
1366
|
deferred.map((hole) => render(hole.source, hole))
|
|
1095
1367
|
);
|
|
1096
1368
|
|
|
1097
|
-
|
|
1098
|
-
|
|
1369
|
+
if (
|
|
1370
|
+
!deferred.some(
|
|
1371
|
+
(hole, id) => hole.decides !== undefined && hole.decides(answers[id])
|
|
1372
|
+
)
|
|
1373
|
+
) {
|
|
1374
|
+
return finish((id) => {
|
|
1375
|
+
const hole = deferred[id];
|
|
1376
|
+
|
|
1377
|
+
return hole === undefined ? undefined : hole.build(answers[id]);
|
|
1378
|
+
});
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
// An answer overturned a choice the print made on the source, so it runs
|
|
1382
|
+
// again with every answer in hand. Nothing is asked twice: this print offers
|
|
1383
|
+
// a subset of the first's, and an offer it alone made is left as written.
|
|
1384
|
+
/** @type {Map<string, string | undefined>} */
|
|
1385
|
+
const known = new Map();
|
|
1386
|
+
for (let id = 0; id < deferred.length; id++) {
|
|
1387
|
+
known.set(deferredKey(deferred[id]), answers[id]);
|
|
1388
|
+
}
|
|
1389
|
+
/**
|
|
1390
|
+
* @param {Omit<DeferredWrite, "build">} offer an offer, `build` and all or without it
|
|
1391
|
+
* @returns {string | undefined} what the first print was answered for it
|
|
1392
|
+
*/
|
|
1393
|
+
const embeddedAnswers = (offer) => known.get(deferredKey(offer));
|
|
1394
|
+
/** @type {DeferredWrite[]} */
|
|
1395
|
+
const again = [];
|
|
1396
|
+
const reprint = this._processDeferred(input, {
|
|
1397
|
+
...opts,
|
|
1398
|
+
renderEmbeddedSource: undefined,
|
|
1399
|
+
deferEmbeddedSource: again,
|
|
1400
|
+
embeddedAnswers
|
|
1401
|
+
});
|
|
1402
|
+
return reprint.finish((id) => {
|
|
1403
|
+
const hole = again[id];
|
|
1099
1404
|
|
|
1100
|
-
return hole === undefined ? undefined : hole.build(
|
|
1405
|
+
return hole === undefined ? undefined : hole.build(embeddedAnswers(hole));
|
|
1101
1406
|
});
|
|
1102
1407
|
}
|
|
1103
1408
|
|
|
@@ -1108,7 +1413,7 @@ class SourceProcessor {
|
|
|
1108
1413
|
* {@link processAsync} is built on, and private for that reason: a caller
|
|
1109
1414
|
* asks for an asynchronous print, not for the way one is arranged.
|
|
1110
1415
|
* @param {string} input the source
|
|
1111
|
-
* @param {TProcessOptions & { mode: PrintOptions["mode"] } & { source?: string, content?: string }} options process options; a print, so `mode` names which one, and naming the input builds a map
|
|
1416
|
+
* @param {TProcessOptions & RunState<TState> & { mode: PrintOptions["mode"] } & { source?: string, content?: string }} options process options; a print, so `mode` names which one, and naming the input builds a map
|
|
1112
1417
|
* @returns {{ finish: (resolve: (id: number) => string | undefined) => { code: string, map: SourceMap | undefined } }} the deferred print
|
|
1113
1418
|
*/
|
|
1114
1419
|
_processDeferred(input, options) {
|