@uapkg/cli 1.1.8 → 1.1.10
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/dist/app/CompositionRoot.d.ts +47 -0
- package/dist/app/CompositionRoot.d.ts.map +1 -0
- package/dist/app/CompositionRoot.js +95 -0
- package/dist/app/CompositionRoot.js.map +1 -0
- package/dist/app/UAPKGApplication.d.ts +14 -0
- package/dist/app/UAPKGApplication.d.ts.map +1 -0
- package/dist/app/UAPKGApplication.js +111 -0
- package/dist/app/UAPKGApplication.js.map +1 -0
- package/dist/cli/UAPKGCommandLine.d.ts +166 -0
- package/dist/cli/UAPKGCommandLine.d.ts.map +1 -0
- package/dist/cli/UAPKGCommandLine.js +172 -0
- package/dist/cli/UAPKGCommandLine.js.map +1 -0
- package/dist/cli/parseCommandLine.d.ts +2 -0
- package/dist/cli/parseCommandLine.d.ts.map +1 -0
- package/dist/cli/parseCommandLine.js +6 -0
- package/dist/cli/parseCommandLine.js.map +1 -0
- package/dist/cli/parsing/UAPKGCommandLineParser.d.ts +8 -0
- package/dist/cli/parsing/UAPKGCommandLineParser.d.ts.map +1 -0
- package/dist/cli/parsing/UAPKGCommandLineParser.js +25 -0
- package/dist/cli/parsing/UAPKGCommandLineParser.js.map +1 -0
- package/dist/cli/parsing/UAPKGParserRegistry.d.ts +11 -0
- package/dist/cli/parsing/UAPKGParserRegistry.d.ts.map +1 -0
- package/dist/cli/parsing/UAPKGParserRegistry.js +39 -0
- package/dist/cli/parsing/UAPKGParserRegistry.js.map +1 -0
- package/dist/cli/parsing/contracts/UAPKGCommandModule.d.ts +9 -0
- package/dist/cli/parsing/contracts/UAPKGCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/contracts/UAPKGCommandModule.js +2 -0
- package/dist/cli/parsing/contracts/UAPKGCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/AddCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/AddCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/AddCommandModule.js +37 -0
- package/dist/cli/parsing/modules/AddCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/ConfigCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/ConfigCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/ConfigCommandModule.js +84 -0
- package/dist/cli/parsing/modules/ConfigCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/InitCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/InitCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/InitCommandModule.js +23 -0
- package/dist/cli/parsing/modules/InitCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/InstallCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/InstallCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/InstallCommandModule.js +29 -0
- package/dist/cli/parsing/modules/InstallCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/ListCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/ListCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/ListCommandModule.js +16 -0
- package/dist/cli/parsing/modules/ListCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/OutdatedCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/OutdatedCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/OutdatedCommandModule.js +17 -0
- package/dist/cli/parsing/modules/OutdatedCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/PackCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/PackCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/PackCommandModule.js +29 -0
- package/dist/cli/parsing/modules/PackCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/ProjectGetNameCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/ProjectGetNameCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/ProjectGetNameCommandModule.js +12 -0
- package/dist/cli/parsing/modules/ProjectGetNameCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/RegistryCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/RegistryCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/RegistryCommandModule.js +92 -0
- package/dist/cli/parsing/modules/RegistryCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/RemoveCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/RemoveCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/RemoveCommandModule.js +15 -0
- package/dist/cli/parsing/modules/RemoveCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/UpdateCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/UpdateCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/UpdateCommandModule.js +26 -0
- package/dist/cli/parsing/modules/UpdateCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/WhyCommandModule.d.ts +7 -0
- package/dist/cli/parsing/modules/WhyCommandModule.d.ts.map +1 -0
- package/dist/cli/parsing/modules/WhyCommandModule.js +15 -0
- package/dist/cli/parsing/modules/WhyCommandModule.js.map +1 -0
- package/dist/cli/parsing/modules/sharedOptions.d.ts +8 -0
- package/dist/cli/parsing/modules/sharedOptions.d.ts.map +1 -0
- package/dist/cli/parsing/modules/sharedOptions.js +26 -0
- package/dist/cli/parsing/modules/sharedOptions.js.map +1 -0
- package/dist/cli/runUAPKGCLI.d.ts +2 -0
- package/dist/cli/runUAPKGCLI.d.ts.map +1 -0
- package/dist/cli/runUAPKGCLI.js +7 -0
- package/dist/cli/runUAPKGCLI.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +18 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/AddCommand.d.ts +26 -0
- package/dist/commands/AddCommand.d.ts.map +1 -0
- package/dist/commands/AddCommand.js +55 -0
- package/dist/commands/AddCommand.js.map +1 -0
- package/dist/commands/Command.d.ts +4 -0
- package/dist/commands/Command.d.ts.map +1 -0
- package/dist/commands/Command.js +2 -0
- package/dist/commands/Command.js.map +1 -0
- package/dist/commands/ConfigCommand.d.ts +28 -0
- package/dist/commands/ConfigCommand.d.ts.map +1 -0
- package/dist/commands/ConfigCommand.js +187 -0
- package/dist/commands/ConfigCommand.js.map +1 -0
- package/dist/commands/InitCommand.d.ts +19 -0
- package/dist/commands/InitCommand.d.ts.map +1 -0
- package/dist/commands/InitCommand.js +61 -0
- package/dist/commands/InitCommand.js.map +1 -0
- package/dist/commands/InstallCommand.d.ts +30 -0
- package/dist/commands/InstallCommand.d.ts.map +1 -0
- package/dist/commands/InstallCommand.js +97 -0
- package/dist/commands/InstallCommand.js.map +1 -0
- package/dist/commands/ListCommand.d.ts +20 -0
- package/dist/commands/ListCommand.d.ts.map +1 -0
- package/dist/commands/ListCommand.js +83 -0
- package/dist/commands/ListCommand.js.map +1 -0
- package/dist/commands/OutdatedCommand.d.ts +20 -0
- package/dist/commands/OutdatedCommand.d.ts.map +1 -0
- package/dist/commands/OutdatedCommand.js +42 -0
- package/dist/commands/OutdatedCommand.js.map +1 -0
- package/dist/commands/PackCommand.d.ts +13 -0
- package/dist/commands/PackCommand.d.ts.map +1 -0
- package/dist/commands/PackCommand.js +22 -0
- package/dist/commands/PackCommand.js.map +1 -0
- package/dist/commands/PostinstallCandidateBuilder.d.ts +25 -0
- package/dist/commands/PostinstallCandidateBuilder.d.ts.map +1 -0
- package/dist/commands/PostinstallCandidateBuilder.js +41 -0
- package/dist/commands/PostinstallCandidateBuilder.js.map +1 -0
- package/dist/commands/ProjectGetNameCommand.d.ts +14 -0
- package/dist/commands/ProjectGetNameCommand.d.ts.map +1 -0
- package/dist/commands/ProjectGetNameCommand.js +26 -0
- package/dist/commands/ProjectGetNameCommand.js.map +1 -0
- package/dist/commands/RegistryCommand.d.ts +29 -0
- package/dist/commands/RegistryCommand.d.ts.map +1 -0
- package/dist/commands/RegistryCommand.js +121 -0
- package/dist/commands/RegistryCommand.js.map +1 -0
- package/dist/commands/RemoveCommand.d.ts +14 -0
- package/dist/commands/RemoveCommand.d.ts.map +1 -0
- package/dist/commands/RemoveCommand.js +55 -0
- package/dist/commands/RemoveCommand.js.map +1 -0
- package/dist/commands/UpdateCommand.d.ts +45 -0
- package/dist/commands/UpdateCommand.d.ts.map +1 -0
- package/dist/commands/UpdateCommand.js +113 -0
- package/dist/commands/UpdateCommand.js.map +1 -0
- package/dist/commands/WhyCommand.d.ts +21 -0
- package/dist/commands/WhyCommand.d.ts.map +1 -0
- package/dist/commands/WhyCommand.js +46 -0
- package/dist/commands/WhyCommand.js.map +1 -0
- package/dist/commands/add/DependencyAddResolver.d.ts +18 -0
- package/dist/commands/add/DependencyAddResolver.d.ts.map +1 -0
- package/dist/commands/add/DependencyAddResolver.js +36 -0
- package/dist/commands/add/DependencyAddResolver.js.map +1 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/postinstall/api/PostinstallDsl.d.ts +44 -0
- package/dist/postinstall/api/PostinstallDsl.d.ts.map +1 -0
- package/dist/postinstall/api/PostinstallDsl.js +39 -0
- package/dist/postinstall/api/PostinstallDsl.js.map +1 -0
- package/dist/postinstall/api/definePostinstall.d.ts +18 -0
- package/dist/postinstall/api/definePostinstall.d.ts.map +1 -0
- package/dist/postinstall/api/definePostinstall.js +19 -0
- package/dist/postinstall/api/definePostinstall.js.map +1 -0
- package/dist/postinstall/index.d.ts +26 -0
- package/dist/postinstall/index.d.ts.map +1 -0
- package/dist/postinstall/index.js +37 -0
- package/dist/postinstall/index.js.map +1 -0
- package/dist/postinstall/loader/EntryResolver.d.ts +20 -0
- package/dist/postinstall/loader/EntryResolver.d.ts.map +1 -0
- package/dist/postinstall/loader/EntryResolver.js +35 -0
- package/dist/postinstall/loader/EntryResolver.js.map +1 -0
- package/dist/postinstall/loader/EsbuildTranspiler.d.ts +18 -0
- package/dist/postinstall/loader/EsbuildTranspiler.d.ts.map +1 -0
- package/dist/postinstall/loader/EsbuildTranspiler.js +58 -0
- package/dist/postinstall/loader/EsbuildTranspiler.js.map +1 -0
- package/dist/postinstall/loader/ExportValidator.d.ts +15 -0
- package/dist/postinstall/loader/ExportValidator.d.ts.map +1 -0
- package/dist/postinstall/loader/ExportValidator.js +34 -0
- package/dist/postinstall/loader/ExportValidator.js.map +1 -0
- package/dist/postinstall/loader/ModuleImporter.d.ts +29 -0
- package/dist/postinstall/loader/ModuleImporter.d.ts.map +1 -0
- package/dist/postinstall/loader/ModuleImporter.js +60 -0
- package/dist/postinstall/loader/ModuleImporter.js.map +1 -0
- package/dist/postinstall/loader/PostinstallLoader.d.ts +32 -0
- package/dist/postinstall/loader/PostinstallLoader.d.ts.map +1 -0
- package/dist/postinstall/loader/PostinstallLoader.js +60 -0
- package/dist/postinstall/loader/PostinstallLoader.js.map +1 -0
- package/dist/postinstall/markers/MarkerBlockEditor.d.ts +30 -0
- package/dist/postinstall/markers/MarkerBlockEditor.d.ts.map +1 -0
- package/dist/postinstall/markers/MarkerBlockEditor.js +46 -0
- package/dist/postinstall/markers/MarkerBlockEditor.js.map +1 -0
- package/dist/postinstall/markers/MarkerBlockService.d.ts +24 -0
- package/dist/postinstall/markers/MarkerBlockService.d.ts.map +1 -0
- package/dist/postinstall/markers/MarkerBlockService.js +46 -0
- package/dist/postinstall/markers/MarkerBlockService.js.map +1 -0
- package/dist/postinstall/markers/MarkerIntegrityValidator.d.ts +29 -0
- package/dist/postinstall/markers/MarkerIntegrityValidator.d.ts.map +1 -0
- package/dist/postinstall/markers/MarkerIntegrityValidator.js +53 -0
- package/dist/postinstall/markers/MarkerIntegrityValidator.js.map +1 -0
- package/dist/postinstall/policy/PostinstallPolicyGate.d.ts +36 -0
- package/dist/postinstall/policy/PostinstallPolicyGate.d.ts.map +1 -0
- package/dist/postinstall/policy/PostinstallPolicyGate.js +57 -0
- package/dist/postinstall/policy/PostinstallPolicyGate.js.map +1 -0
- package/dist/postinstall/runner/PostinstallOrchestrator.d.ts +71 -0
- package/dist/postinstall/runner/PostinstallOrchestrator.d.ts.map +1 -0
- package/dist/postinstall/runner/PostinstallOrchestrator.js +172 -0
- package/dist/postinstall/runner/PostinstallOrchestrator.js.map +1 -0
- package/dist/postinstall/unreal/BuildCsInjector.d.ts +23 -0
- package/dist/postinstall/unreal/BuildCsInjector.d.ts.map +1 -0
- package/dist/postinstall/unreal/BuildCsInjector.js +55 -0
- package/dist/postinstall/unreal/BuildCsInjector.js.map +1 -0
- package/dist/postinstall/unreal/CSharpInjectionEngine.d.ts +22 -0
- package/dist/postinstall/unreal/CSharpInjectionEngine.d.ts.map +1 -0
- package/dist/postinstall/unreal/CSharpInjectionEngine.js +61 -0
- package/dist/postinstall/unreal/CSharpInjectionEngine.js.map +1 -0
- package/dist/postinstall/unreal/CSharpStructureAnalyzer.d.ts +22 -0
- package/dist/postinstall/unreal/CSharpStructureAnalyzer.d.ts.map +1 -0
- package/dist/postinstall/unreal/CSharpStructureAnalyzer.js +130 -0
- package/dist/postinstall/unreal/CSharpStructureAnalyzer.js.map +1 -0
- package/dist/postinstall/unreal/CSharpStructures.d.ts +19 -0
- package/dist/postinstall/unreal/CSharpStructures.d.ts.map +1 -0
- package/dist/postinstall/unreal/CSharpStructures.js +2 -0
- package/dist/postinstall/unreal/CSharpStructures.js.map +1 -0
- package/dist/postinstall/unreal/CSharpWrapperFactory.d.ts +26 -0
- package/dist/postinstall/unreal/CSharpWrapperFactory.d.ts.map +1 -0
- package/dist/postinstall/unreal/CSharpWrapperFactory.js +60 -0
- package/dist/postinstall/unreal/CSharpWrapperFactory.js.map +1 -0
- package/dist/postinstall/unreal/PluginHash.d.ts +8 -0
- package/dist/postinstall/unreal/PluginHash.d.ts.map +1 -0
- package/dist/postinstall/unreal/PluginHash.js +13 -0
- package/dist/postinstall/unreal/PluginHash.js.map +1 -0
- package/dist/postinstall/unreal/PrettyParseError.d.ts +15 -0
- package/dist/postinstall/unreal/PrettyParseError.d.ts.map +1 -0
- package/dist/postinstall/unreal/PrettyParseError.js +43 -0
- package/dist/postinstall/unreal/PrettyParseError.js.map +1 -0
- package/dist/postinstall/unreal/ProjectFileLocator.d.ts +20 -0
- package/dist/postinstall/unreal/ProjectFileLocator.d.ts.map +1 -0
- package/dist/postinstall/unreal/ProjectFileLocator.js +53 -0
- package/dist/postinstall/unreal/ProjectFileLocator.js.map +1 -0
- package/dist/postinstall/unreal/TargetCsInjector.d.ts +23 -0
- package/dist/postinstall/unreal/TargetCsInjector.d.ts.map +1 -0
- package/dist/postinstall/unreal/TargetCsInjector.js +55 -0
- package/dist/postinstall/unreal/TargetCsInjector.js.map +1 -0
- package/dist/postinstall/unreal/UProjectInjector.d.ts +12 -0
- package/dist/postinstall/unreal/UProjectInjector.d.ts.map +1 -0
- package/dist/postinstall/unreal/UProjectInjector.js +54 -0
- package/dist/postinstall/unreal/UProjectInjector.js.map +1 -0
- package/dist/postinstall/unreal/UProjectMetadataReader.d.ts +9 -0
- package/dist/postinstall/unreal/UProjectMetadataReader.d.ts.map +1 -0
- package/dist/postinstall/unreal/UProjectMetadataReader.js +20 -0
- package/dist/postinstall/unreal/UProjectMetadataReader.js.map +1 -0
- package/dist/postinstall/unreal/UnrealSourceCatalog.d.ts +23 -0
- package/dist/postinstall/unreal/UnrealSourceCatalog.d.ts.map +1 -0
- package/dist/postinstall/unreal/UnrealSourceCatalog.js +52 -0
- package/dist/postinstall/unreal/UnrealSourceCatalog.js.map +1 -0
- package/dist/prompts/InkPromptService.d.ts +8 -0
- package/dist/prompts/InkPromptService.d.ts.map +1 -0
- package/dist/prompts/InkPromptService.js +56 -0
- package/dist/prompts/InkPromptService.js.map +1 -0
- package/dist/prompts/ProjectContextDetector.d.ts +10 -0
- package/dist/prompts/ProjectContextDetector.d.ts.map +1 -0
- package/dist/prompts/ProjectContextDetector.js +27 -0
- package/dist/prompts/ProjectContextDetector.js.map +1 -0
- package/dist/prompts/PromptService.d.ts +9 -0
- package/dist/prompts/PromptService.d.ts.map +1 -0
- package/dist/prompts/PromptService.js +8 -0
- package/dist/prompts/PromptService.js.map +1 -0
- package/dist/reporting/DiagnosticDeduplicator.d.ts +11 -0
- package/dist/reporting/DiagnosticDeduplicator.d.ts.map +1 -0
- package/dist/reporting/DiagnosticDeduplicator.js +37 -0
- package/dist/reporting/DiagnosticDeduplicator.js.map +1 -0
- package/dist/reporting/DiagnosticRenderer.d.ts +18 -0
- package/dist/reporting/DiagnosticRenderer.d.ts.map +1 -0
- package/dist/reporting/DiagnosticRenderer.js +2 -0
- package/dist/reporting/DiagnosticRenderer.js.map +1 -0
- package/dist/reporting/DiagnosticReporter.d.ts +23 -0
- package/dist/reporting/DiagnosticReporter.d.ts.map +1 -0
- package/dist/reporting/DiagnosticReporter.js +41 -0
- package/dist/reporting/DiagnosticReporter.js.map +1 -0
- package/dist/reporting/InkDiagnosticRenderer.d.ts +21 -0
- package/dist/reporting/InkDiagnosticRenderer.d.ts.map +1 -0
- package/dist/reporting/InkDiagnosticRenderer.js +44 -0
- package/dist/reporting/InkDiagnosticRenderer.js.map +1 -0
- package/dist/reporting/InstallProgressReporter.d.ts +34 -0
- package/dist/reporting/InstallProgressReporter.d.ts.map +1 -0
- package/dist/reporting/InstallProgressReporter.js +49 -0
- package/dist/reporting/InstallProgressReporter.js.map +1 -0
- package/dist/reporting/JsonReporter.d.ts +26 -0
- package/dist/reporting/JsonReporter.d.ts.map +1 -0
- package/dist/reporting/JsonReporter.js +16 -0
- package/dist/reporting/JsonReporter.js.map +1 -0
- package/dist/reporting/TextDiagnosticRenderer.d.ts +20 -0
- package/dist/reporting/TextDiagnosticRenderer.d.ts.map +1 -0
- package/dist/reporting/TextDiagnosticRenderer.js +30 -0
- package/dist/reporting/TextDiagnosticRenderer.js.map +1 -0
- package/dist/reporting/TextSink.d.ts +21 -0
- package/dist/reporting/TextSink.d.ts.map +1 -0
- package/dist/reporting/TextSink.js +25 -0
- package/dist/reporting/TextSink.js.map +1 -0
- package/package.json +12 -12
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ManifestKind } from '@uapkg/package-manifest-schema';
|
|
2
|
+
export interface ProjectContextDetection {
|
|
3
|
+
suggestedKind: ManifestKind;
|
|
4
|
+
suggestedName: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class ProjectContextDetector {
|
|
7
|
+
detect(cwd: string): ProjectContextDetection;
|
|
8
|
+
private findFirstFileWithExtension;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=ProjectContextDetector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectContextDetector.d.ts","sourceRoot":"","sources":["../../src/prompts/ProjectContextDetector.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAUnE,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,YAAY,CAAC;IAC5B,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,sBAAsB;IAC1B,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,uBAAuB;IAcnD,OAAO,CAAC,0BAA0B;CAUnC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import * as path from 'node:path';
|
|
3
|
+
export class ProjectContextDetector {
|
|
4
|
+
detect(cwd) {
|
|
5
|
+
const uplugin = this.findFirstFileWithExtension(cwd, '.uplugin');
|
|
6
|
+
if (uplugin) {
|
|
7
|
+
return { suggestedKind: 'plugin', suggestedName: path.parse(uplugin).name };
|
|
8
|
+
}
|
|
9
|
+
const uproject = this.findFirstFileWithExtension(cwd, '.uproject');
|
|
10
|
+
if (uproject) {
|
|
11
|
+
return { suggestedKind: 'project', suggestedName: path.parse(uproject).name };
|
|
12
|
+
}
|
|
13
|
+
return { suggestedKind: 'project', suggestedName: path.basename(cwd) };
|
|
14
|
+
}
|
|
15
|
+
findFirstFileWithExtension(directory, extension) {
|
|
16
|
+
try {
|
|
17
|
+
return fs
|
|
18
|
+
.readdirSync(directory)
|
|
19
|
+
.find((entry) => entry.toLowerCase().endsWith(extension))
|
|
20
|
+
?.toString();
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=ProjectContextDetector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectContextDetector.js","sourceRoot":"","sources":["../../src/prompts/ProjectContextDetector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAgBlC,MAAM,OAAO,sBAAsB;IAC1B,MAAM,CAAC,GAAW;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACjE,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9E,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,0BAA0B,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACnE,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QAChF,CAAC;QAED,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;IACzE,CAAC;IAEO,0BAA0B,CAAC,SAAiB,EAAE,SAAmC;QACvF,IAAI,CAAC;YACH,OAAO,EAAE;iBACN,WAAW,CAAC,SAAS,CAAC;iBACtB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;gBACzD,EAAE,QAAQ,EAAE,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface SelectOption {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string;
|
|
4
|
+
}
|
|
5
|
+
export interface PromptService {
|
|
6
|
+
select(message: string, options: SelectOption[], fallbackValue: string): Promise<string>;
|
|
7
|
+
text(message: string, initialValue: string): Promise<string>;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=PromptService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptService.d.ts","sourceRoot":"","sources":["../../src/prompts/PromptService.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzF,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CAC9D"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// PromptService — abstraction used by interactive commands (e.g. `init`).
|
|
3
|
+
//
|
|
4
|
+
// Split from the Ink implementation so that test environments can substitute
|
|
5
|
+
// a non-interactive stub without pulling React/Ink into the test harness.
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=PromptService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PromptService.js","sourceRoot":"","sources":["../../src/prompts/PromptService.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,0EAA0E;AAC1E,EAAE;AACF,6EAA6E;AAC7E,0EAA0E;AAC1E,8EAA8E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Diagnostic } from '@uapkg/diagnostics';
|
|
2
|
+
/**
|
|
3
|
+
* Suppresses diagnostics marked as `emitPolicy: "once"` across the current
|
|
4
|
+
* CLI process lifetime.
|
|
5
|
+
*/
|
|
6
|
+
export declare class DiagnosticDeduplicator {
|
|
7
|
+
private static readonly seen;
|
|
8
|
+
filter(diagnostics: readonly Diagnostic[]): Diagnostic[];
|
|
9
|
+
private fingerprintOf;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=DiagnosticDeduplicator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiagnosticDeduplicator.d.ts","sourceRoot":"","sources":["../../src/reporting/DiagnosticDeduplicator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,KAAK,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAElF;;;GAGG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAE1C,MAAM,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE;IAmB/D,OAAO,CAAC,aAAa;CAatB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createDiagnosticFingerprint } from '@uapkg/diagnostics';
|
|
2
|
+
/**
|
|
3
|
+
* Suppresses diagnostics marked as `emitPolicy: "once"` across the current
|
|
4
|
+
* CLI process lifetime.
|
|
5
|
+
*/
|
|
6
|
+
export class DiagnosticDeduplicator {
|
|
7
|
+
static seen = new Set();
|
|
8
|
+
filter(diagnostics) {
|
|
9
|
+
const out = [];
|
|
10
|
+
for (const diagnostic of diagnostics) {
|
|
11
|
+
if (diagnostic.emitPolicy !== 'once') {
|
|
12
|
+
out.push(diagnostic);
|
|
13
|
+
continue;
|
|
14
|
+
}
|
|
15
|
+
const fingerprint = this.fingerprintOf(diagnostic);
|
|
16
|
+
if (DiagnosticDeduplicator.seen.has(fingerprint)) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
DiagnosticDeduplicator.seen.add(fingerprint);
|
|
20
|
+
out.push(diagnostic);
|
|
21
|
+
}
|
|
22
|
+
return out;
|
|
23
|
+
}
|
|
24
|
+
fingerprintOf(diagnostic) {
|
|
25
|
+
if (diagnostic.emitFingerprint && diagnostic.emitFingerprint.trim().length > 0) {
|
|
26
|
+
return diagnostic.emitFingerprint;
|
|
27
|
+
}
|
|
28
|
+
return createDiagnosticFingerprint({
|
|
29
|
+
level: diagnostic.level,
|
|
30
|
+
code: diagnostic.code,
|
|
31
|
+
message: diagnostic.message,
|
|
32
|
+
hint: diagnostic.hint,
|
|
33
|
+
data: diagnostic.data,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=DiagnosticDeduplicator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiagnosticDeduplicator.js","sourceRoot":"","sources":["../../src/reporting/DiagnosticDeduplicator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAmB,MAAM,oBAAoB,CAAC;AAElF;;;GAGG;AACH,MAAM,OAAO,sBAAsB;IACzB,MAAM,CAAU,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE1C,MAAM,CAAC,WAAkC;QAC9C,MAAM,GAAG,GAAiB,EAAE,CAAC;QAC7B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,UAAU,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;gBACrC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACrB,SAAS;YACX,CAAC;YAED,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YACnD,IAAI,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjD,SAAS;YACX,CAAC;YAED,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC7C,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,aAAa,CAAC,UAAsB;QAC1C,IAAI,UAAU,CAAC,eAAe,IAAI,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/E,OAAO,UAAU,CAAC,eAAe,CAAC;QACpC,CAAC;QAED,OAAO,2BAA2B,CAAC;YACjC,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,OAAO,EAAE,UAAU,CAAC,OAAO;YAC3B,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,IAAI,EAAE,UAAU,CAAC,IAAI;SACtB,CAAC,CAAC;IACL,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { Diagnostic } from '@uapkg/diagnostics';
|
|
2
|
+
/**
|
|
3
|
+
* Strategy for turning a batch of diagnostics at a single severity stream
|
|
4
|
+
* into user-facing output. Implementations decide how (Ink, plain text) and
|
|
5
|
+
* where (process stream, test sink) the output lands.
|
|
6
|
+
*
|
|
7
|
+
* Kept as a tiny interface so `DiagnosticReporter` stays ignorant of Ink
|
|
8
|
+
* and so tests can inject a capturing fake without bringing up React.
|
|
9
|
+
*/
|
|
10
|
+
export interface DiagnosticRenderer {
|
|
11
|
+
/**
|
|
12
|
+
* Render a list of diagnostics targeted at the given logical stream.
|
|
13
|
+
* Implementations must never throw — swallow any internal rendering
|
|
14
|
+
* failure and fall back to a safe text path.
|
|
15
|
+
*/
|
|
16
|
+
render(diagnostics: readonly Diagnostic[], stream: 'stdout' | 'stderr'): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=DiagnosticRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiagnosticRenderer.d.ts","sourceRoot":"","sources":["../../src/reporting/DiagnosticRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,MAAM,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC;CAC/E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiagnosticRenderer.js","sourceRoot":"","sources":["../../src/reporting/DiagnosticRenderer.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Diagnostic } from '@uapkg/diagnostics';
|
|
2
|
+
import { DiagnosticDeduplicator } from './DiagnosticDeduplicator.js';
|
|
3
|
+
import type { DiagnosticRenderer } from './DiagnosticRenderer.js';
|
|
4
|
+
/**
|
|
5
|
+
* Human-readable diagnostic reporter.
|
|
6
|
+
*
|
|
7
|
+
* Routing policy: `error` → stderr, `warning` / `info` → stdout. Output
|
|
8
|
+
* rendering is delegated to an injected {@link DiagnosticRenderer} so this
|
|
9
|
+
* class is UI-agnostic.
|
|
10
|
+
*
|
|
11
|
+
* Defaults to the Ink renderer (styled, colored output); tests typically
|
|
12
|
+
* inject {@link TextDiagnosticRenderer}.
|
|
13
|
+
*
|
|
14
|
+
* One instance is safe to reuse across commands in a single CLI run.
|
|
15
|
+
*/
|
|
16
|
+
export declare class DiagnosticReporter {
|
|
17
|
+
private readonly renderer;
|
|
18
|
+
private readonly deduplicator;
|
|
19
|
+
constructor(renderer?: DiagnosticRenderer, deduplicator?: DiagnosticDeduplicator);
|
|
20
|
+
reportAll(diagnostics: readonly Diagnostic[]): void;
|
|
21
|
+
reportOne(diagnostic: Diagnostic): void;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=DiagnosticReporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiagnosticReporter.d.ts","sourceRoot":"","sources":["../../src/reporting/DiagnosticReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAIlE;;;;;;;;;;;GAWG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,QAAQ,GAAE,kBAAgD,EAC1D,YAAY,GAAE,sBAAqD;IAG/E,SAAS,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI;IAWnD,SAAS,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;CAG/C"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { DiagnosticDeduplicator } from './DiagnosticDeduplicator.js';
|
|
2
|
+
import { InkDiagnosticRenderer } from './InkDiagnosticRenderer.js';
|
|
3
|
+
import { sortDiagnostics } from './TextSink.js';
|
|
4
|
+
/**
|
|
5
|
+
* Human-readable diagnostic reporter.
|
|
6
|
+
*
|
|
7
|
+
* Routing policy: `error` → stderr, `warning` / `info` → stdout. Output
|
|
8
|
+
* rendering is delegated to an injected {@link DiagnosticRenderer} so this
|
|
9
|
+
* class is UI-agnostic.
|
|
10
|
+
*
|
|
11
|
+
* Defaults to the Ink renderer (styled, colored output); tests typically
|
|
12
|
+
* inject {@link TextDiagnosticRenderer}.
|
|
13
|
+
*
|
|
14
|
+
* One instance is safe to reuse across commands in a single CLI run.
|
|
15
|
+
*/
|
|
16
|
+
export class DiagnosticReporter {
|
|
17
|
+
renderer;
|
|
18
|
+
deduplicator;
|
|
19
|
+
constructor(renderer = new InkDiagnosticRenderer(), deduplicator = new DiagnosticDeduplicator()) {
|
|
20
|
+
this.renderer = renderer;
|
|
21
|
+
this.deduplicator = deduplicator;
|
|
22
|
+
}
|
|
23
|
+
reportAll(diagnostics) {
|
|
24
|
+
if (diagnostics.length === 0)
|
|
25
|
+
return;
|
|
26
|
+
const deduped = this.deduplicator.filter(diagnostics);
|
|
27
|
+
if (deduped.length === 0)
|
|
28
|
+
return;
|
|
29
|
+
const sorted = sortDiagnostics(deduped);
|
|
30
|
+
const errors = sorted.filter((d) => d.level === 'error');
|
|
31
|
+
const others = sorted.filter((d) => d.level !== 'error');
|
|
32
|
+
if (errors.length > 0)
|
|
33
|
+
this.renderer.render(errors, 'stderr');
|
|
34
|
+
if (others.length > 0)
|
|
35
|
+
this.renderer.render(others, 'stdout');
|
|
36
|
+
}
|
|
37
|
+
reportOne(diagnostic) {
|
|
38
|
+
this.reportAll([diagnostic]);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=DiagnosticReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DiagnosticReporter.js","sourceRoot":"","sources":["../../src/reporting/DiagnosticReporter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAErE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,kBAAkB;IAEV;IACA;IAFnB,YACmB,WAA+B,IAAI,qBAAqB,EAAE,EAC1D,eAAuC,IAAI,sBAAsB,EAAE;QADnE,aAAQ,GAAR,QAAQ,CAAkD;QAC1D,iBAAY,GAAZ,YAAY,CAAuD;IACnF,CAAC;IAEG,SAAS,CAAC,WAAkC;QACjD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACtD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjC,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC;QACzD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChE,CAAC;IAEM,SAAS,CAAC,UAAsB;QACrC,IAAI,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Diagnostic } from '@uapkg/diagnostics';
|
|
2
|
+
import { type DiagnosticInkRegistry } from '@uapkg/diagnostics-format/ink';
|
|
3
|
+
import type { DiagnosticRenderer } from './DiagnosticRenderer.js';
|
|
4
|
+
import type { TextSink } from './TextSink.js';
|
|
5
|
+
/**
|
|
6
|
+
* Ink-backed diagnostic renderer.
|
|
7
|
+
*
|
|
8
|
+
* Renders each batch as a static Ink tree to the target process stream. No
|
|
9
|
+
* mount loop, no animations — one-shot render → unmount, so the process can
|
|
10
|
+
* exit immediately after the CLI command finishes.
|
|
11
|
+
*
|
|
12
|
+
* On any Ink failure (missing terminfo, exotic stream, etc.) the renderer
|
|
13
|
+
* delegates to a fallback text sink so diagnostics are never lost.
|
|
14
|
+
*/
|
|
15
|
+
export declare class InkDiagnosticRenderer implements DiagnosticRenderer {
|
|
16
|
+
private readonly registry;
|
|
17
|
+
private readonly fallback?;
|
|
18
|
+
constructor(registry?: DiagnosticInkRegistry, fallback?: TextSink | undefined);
|
|
19
|
+
render(diagnostics: readonly Diagnostic[], stream: 'stdout' | 'stderr'): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=InkDiagnosticRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InkDiagnosticRenderer.d.ts","sourceRoot":"","sources":["../../src/reporting/InkDiagnosticRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAEL,KAAK,qBAAqB,EAG3B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,YAAW,kBAAkB;IAE5D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBADT,QAAQ,GAAE,qBAA+D,EACzE,QAAQ,CAAC,EAAE,QAAQ,YAAA;IAG/B,MAAM,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;CAkBrF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { createInkRegistry, DiagnosticsListView, defaultInkComponents, } from '@uapkg/diagnostics-format/ink';
|
|
2
|
+
import { render } from 'ink';
|
|
3
|
+
import { createElement } from 'react';
|
|
4
|
+
/**
|
|
5
|
+
* Ink-backed diagnostic renderer.
|
|
6
|
+
*
|
|
7
|
+
* Renders each batch as a static Ink tree to the target process stream. No
|
|
8
|
+
* mount loop, no animations — one-shot render → unmount, so the process can
|
|
9
|
+
* exit immediately after the CLI command finishes.
|
|
10
|
+
*
|
|
11
|
+
* On any Ink failure (missing terminfo, exotic stream, etc.) the renderer
|
|
12
|
+
* delegates to a fallback text sink so diagnostics are never lost.
|
|
13
|
+
*/
|
|
14
|
+
export class InkDiagnosticRenderer {
|
|
15
|
+
registry;
|
|
16
|
+
fallback;
|
|
17
|
+
constructor(registry = createInkRegistry(defaultInkComponents), fallback) {
|
|
18
|
+
this.registry = registry;
|
|
19
|
+
this.fallback = fallback;
|
|
20
|
+
}
|
|
21
|
+
render(diagnostics, stream) {
|
|
22
|
+
if (diagnostics.length === 0)
|
|
23
|
+
return;
|
|
24
|
+
const target = stream === 'stderr' ? process.stderr : process.stdout;
|
|
25
|
+
try {
|
|
26
|
+
const element = createElement(DiagnosticsListView, {
|
|
27
|
+
diagnostics,
|
|
28
|
+
registry: this.registry,
|
|
29
|
+
});
|
|
30
|
+
const instance = render(element, { stdout: target, patchConsole: false });
|
|
31
|
+
instance.unmount();
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
if (!this.fallback)
|
|
35
|
+
return;
|
|
36
|
+
for (const d of diagnostics) {
|
|
37
|
+
this.fallback.writeLine(`[${d.level}] ${d.code}: ${d.message}`);
|
|
38
|
+
if (d.hint)
|
|
39
|
+
this.fallback.writeLine(` → ${d.hint}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=InkDiagnosticRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InkDiagnosticRenderer.js","sourceRoot":"","sources":["../../src/reporting/InkDiagnosticRenderer.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAEjB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAItC;;;;;;;;;GASG;AACH,MAAM,OAAO,qBAAqB;IAEb;IACA;IAFnB,YACmB,WAAkC,iBAAiB,CAAC,oBAAoB,CAAC,EACzE,QAAmB;QADnB,aAAQ,GAAR,QAAQ,CAAiE;QACzE,aAAQ,GAAR,QAAQ,CAAW;IACnC,CAAC;IAEG,MAAM,CAAC,WAAkC,EAAE,MAA2B;QAC3E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACrC,MAAM,MAAM,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACrE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,aAAa,CAAC,mBAAmB,EAAE;gBACjD,WAAW;gBACX,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1E,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,IAAI,CAAC,QAAQ;gBAAE,OAAO;YAC3B,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;gBAC5B,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;gBAChE,IAAI,CAAC,CAAC,IAAI;oBAAE,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { DownloadStatusSnapshot } from '@uapkg/installer';
|
|
2
|
+
import { type TextSink } from './TextSink.js';
|
|
3
|
+
/**
|
|
4
|
+
* Text-mode progress reporter for `uapkg install / add / update`.
|
|
5
|
+
*
|
|
6
|
+
* Subscribes to the installer's `AsyncIterable<DownloadStatusSnapshot>` and
|
|
7
|
+
* writes a one-line summary whenever the *aggregate totals* change. This keeps
|
|
8
|
+
* output readable even when stdout is piped or captured (no ANSI cursor
|
|
9
|
+
* tricks). Per-slot rows are intentionally omitted in the MVP — the full Ink
|
|
10
|
+
* `InstallProgress` grid is a planned follow-up.
|
|
11
|
+
*
|
|
12
|
+
* At completion, emits a final summary line:
|
|
13
|
+
* `N added, M updated, X removed, Y unchanged (B bytes)`
|
|
14
|
+
*/
|
|
15
|
+
export declare class InstallProgressReporter {
|
|
16
|
+
private readonly sink;
|
|
17
|
+
private lastBytesDone;
|
|
18
|
+
private lastState;
|
|
19
|
+
constructor(sink?: TextSink);
|
|
20
|
+
consume(stream: AsyncIterable<DownloadStatusSnapshot>): Promise<void>;
|
|
21
|
+
private renderTick;
|
|
22
|
+
/**
|
|
23
|
+
* Emit the post-install one-liner. The caller passes the installer's plan
|
|
24
|
+
* summary directly; this class does not retain it.
|
|
25
|
+
*/
|
|
26
|
+
renderSummary(summary: {
|
|
27
|
+
added: number;
|
|
28
|
+
updated: number;
|
|
29
|
+
removed: number;
|
|
30
|
+
unchanged: number;
|
|
31
|
+
totalBytes: number;
|
|
32
|
+
}): void;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=InstallProgressReporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstallProgressReporter.d.ts","sourceRoot":"","sources":["../../src/reporting/InstallProgressReporter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAuB;IAIf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHxC,OAAO,CAAC,aAAa,CAAM;IAC3B,OAAO,CAAC,SAAS,CAAM;gBAEa,IAAI,GAAE,QAA8C;IAE3E,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,sBAAsB,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlF,OAAO,CAAC,UAAU;IAoBlB;;;OAGG;IACI,aAAa,CAAC,OAAO,EAAE;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,GAAG,IAAI;CAKT"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { prettyBytes } from '@uapkg/common';
|
|
2
|
+
import { ProcessTextSink } from './TextSink.js';
|
|
3
|
+
/**
|
|
4
|
+
* Text-mode progress reporter for `uapkg install / add / update`.
|
|
5
|
+
*
|
|
6
|
+
* Subscribes to the installer's `AsyncIterable<DownloadStatusSnapshot>` and
|
|
7
|
+
* writes a one-line summary whenever the *aggregate totals* change. This keeps
|
|
8
|
+
* output readable even when stdout is piped or captured (no ANSI cursor
|
|
9
|
+
* tricks). Per-slot rows are intentionally omitted in the MVP — the full Ink
|
|
10
|
+
* `InstallProgress` grid is a planned follow-up.
|
|
11
|
+
*
|
|
12
|
+
* At completion, emits a final summary line:
|
|
13
|
+
* `N added, M updated, X removed, Y unchanged (B bytes)`
|
|
14
|
+
*/
|
|
15
|
+
export class InstallProgressReporter {
|
|
16
|
+
sink;
|
|
17
|
+
lastBytesDone = -1;
|
|
18
|
+
lastState = '';
|
|
19
|
+
constructor(sink = new ProcessTextSink(process.stdout)) {
|
|
20
|
+
this.sink = sink;
|
|
21
|
+
}
|
|
22
|
+
async consume(stream) {
|
|
23
|
+
for await (const snapshot of stream) {
|
|
24
|
+
this.renderTick(snapshot);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
renderTick(snapshot) {
|
|
28
|
+
const { totals, slots } = snapshot;
|
|
29
|
+
const active = slots.filter((s) => s.state === 'downloading' || s.state === 'verifying' || s.state === 'extracting' || s.state === 'removing').length;
|
|
30
|
+
const stateKey = `${active}|${totals.bytesDone}|${totals.bytesTotal}`;
|
|
31
|
+
if (stateKey === this.lastState)
|
|
32
|
+
return;
|
|
33
|
+
this.lastState = stateKey;
|
|
34
|
+
// Only emit a byte-progress line when bytesTotal is known and has advanced.
|
|
35
|
+
if (totals.bytesTotal > 0 && totals.bytesDone !== this.lastBytesDone) {
|
|
36
|
+
this.lastBytesDone = totals.bytesDone;
|
|
37
|
+
const pct = Math.min(100, Math.floor((totals.bytesDone / totals.bytesTotal) * 100));
|
|
38
|
+
this.sink.writeLine(` installing: ${pct}% (${prettyBytes(totals.bytesDone)} / ${prettyBytes(totals.bytesTotal)}) — ${active} active`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Emit the post-install one-liner. The caller passes the installer's plan
|
|
43
|
+
* summary directly; this class does not retain it.
|
|
44
|
+
*/
|
|
45
|
+
renderSummary(summary) {
|
|
46
|
+
this.sink.writeLine(`${summary.added} added, ${summary.updated} updated, ${summary.removed} removed, ${summary.unchanged} unchanged (${prettyBytes(summary.totalBytes)})`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=InstallProgressReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InstallProgressReporter.js","sourceRoot":"","sources":["../../src/reporting/InstallProgressReporter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,eAAe,EAAiB,MAAM,eAAe,CAAC;AAE/D;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,uBAAuB;IAIE;IAH5B,aAAa,GAAG,CAAC,CAAC,CAAC;IACnB,SAAS,GAAG,EAAE,CAAC;IAEvB,YAAoC,OAAiB,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;QAApD,SAAI,GAAJ,IAAI,CAAgD;IAAG,CAAC;IAErF,KAAK,CAAC,OAAO,CAAC,MAA6C;QAChE,IAAI,KAAK,EAAE,MAAM,QAAQ,IAAI,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,UAAU,CAAC,QAAgC;QACjD,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QACnC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,aAAa,IAAI,CAAC,CAAC,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU,CAClH,CAAC,MAAM,CAAC;QAET,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtE,IAAI,QAAQ,KAAK,IAAI,CAAC,SAAS;YAAE,OAAO;QACxC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAE1B,4EAA4E;QAC5E,IAAI,MAAM,CAAC,UAAU,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,KAAK,IAAI,CAAC,aAAa,EAAE,CAAC;YACrE,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,SAAS,CAAC;YACtC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACpF,IAAI,CAAC,IAAI,CAAC,SAAS,CACjB,iBAAiB,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,MAAM,SAAS,CAClH,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,aAAa,CAAC,OAMpB;QACC,IAAI,CAAC,IAAI,CAAC,SAAS,CACjB,GAAG,OAAO,CAAC,KAAK,WAAW,OAAO,CAAC,OAAO,aAAa,OAAO,CAAC,OAAO,aAAa,OAAO,CAAC,SAAS,eAAe,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CACtJ,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Diagnostic } from '@uapkg/diagnostics';
|
|
2
|
+
import { type TextSink } from './TextSink.js';
|
|
3
|
+
/**
|
|
4
|
+
* Stable JSON envelope used when any command is invoked with `--json`.
|
|
5
|
+
*
|
|
6
|
+
* `status` is `ok` / `error` so scripts can branch on exit-independent
|
|
7
|
+
* outcomes. `diagnostics` always appears (empty array when none), so
|
|
8
|
+
* consumers never need to handle undefined.
|
|
9
|
+
*/
|
|
10
|
+
export interface JsonEnvelope<TData = unknown> {
|
|
11
|
+
readonly status: 'ok' | 'error';
|
|
12
|
+
readonly command: string;
|
|
13
|
+
readonly data?: TData;
|
|
14
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Writes a single JSON document to stdout per invocation. Never writes
|
|
18
|
+
* progress or partial output — callers accumulate everything into a payload
|
|
19
|
+
* and call `emit()` once at the end of a command.
|
|
20
|
+
*/
|
|
21
|
+
export declare class JsonReporter {
|
|
22
|
+
private readonly sink;
|
|
23
|
+
constructor(sink?: TextSink);
|
|
24
|
+
emit<TData>(envelope: JsonEnvelope<TData>): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=JsonReporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonReporter.d.ts","sourceRoot":"","sources":["../../src/reporting/JsonReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE/D;;;;;;GAMG;AACH,MAAM,WAAW,YAAY,CAAC,KAAK,GAAG,OAAO;IAC3C,QAAQ,CAAC,MAAM,EAAE,IAAI,GAAG,OAAO,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C;AAED;;;;GAIG;AACH,qBAAa,YAAY;IACJ,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,GAAE,QAA8C;IAEjF,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,KAAK,CAAC,GAAG,IAAI;CAGxD"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ProcessTextSink } from './TextSink.js';
|
|
2
|
+
/**
|
|
3
|
+
* Writes a single JSON document to stdout per invocation. Never writes
|
|
4
|
+
* progress or partial output — callers accumulate everything into a payload
|
|
5
|
+
* and call `emit()` once at the end of a command.
|
|
6
|
+
*/
|
|
7
|
+
export class JsonReporter {
|
|
8
|
+
sink;
|
|
9
|
+
constructor(sink = new ProcessTextSink(process.stdout)) {
|
|
10
|
+
this.sink = sink;
|
|
11
|
+
}
|
|
12
|
+
emit(envelope) {
|
|
13
|
+
this.sink.writeLine(JSON.stringify(envelope, null, 2));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=JsonReporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonReporter.js","sourceRoot":"","sources":["../../src/reporting/JsonReporter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAiB,MAAM,eAAe,CAAC;AAgB/D;;;;GAIG;AACH,MAAM,OAAO,YAAY;IACa;IAApC,YAAoC,OAAiB,IAAI,eAAe,CAAC,OAAO,CAAC,MAAM,CAAC;QAApD,SAAI,GAAJ,IAAI,CAAgD;IAAG,CAAC;IAErF,IAAI,CAAQ,QAA6B;QAC9C,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Diagnostic } from '@uapkg/diagnostics';
|
|
2
|
+
import type { DiagnosticRenderer } from './DiagnosticRenderer.js';
|
|
3
|
+
import type { TextSink } from './TextSink.js';
|
|
4
|
+
/**
|
|
5
|
+
* Plain-text diagnostic renderer — used by tests and by any non-TTY path
|
|
6
|
+
* that prefers a deterministic string output over Ink. Stable format:
|
|
7
|
+
*
|
|
8
|
+
* [<icon>] <message>
|
|
9
|
+
* → <hint>
|
|
10
|
+
*
|
|
11
|
+
* Icons mirror the legacy reporter so existing log-parsers still match:
|
|
12
|
+
* `x` (error), `!` (warning), `i` (info).
|
|
13
|
+
*/
|
|
14
|
+
export declare class TextDiagnosticRenderer implements DiagnosticRenderer {
|
|
15
|
+
private readonly stdout;
|
|
16
|
+
private readonly stderr;
|
|
17
|
+
constructor(stdout: TextSink, stderr: TextSink);
|
|
18
|
+
render(diagnostics: readonly Diagnostic[], stream: 'stdout' | 'stderr'): void;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=TextDiagnosticRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextDiagnosticRenderer.d.ts","sourceRoot":"","sources":["../../src/reporting/TextDiagnosticRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAE9C;;;;;;;;;GASG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IAE7D,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,QAAQ;IAG5B,MAAM,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,EAAE,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI;CASrF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plain-text diagnostic renderer — used by tests and by any non-TTY path
|
|
3
|
+
* that prefers a deterministic string output over Ink. Stable format:
|
|
4
|
+
*
|
|
5
|
+
* [<icon>] <message>
|
|
6
|
+
* → <hint>
|
|
7
|
+
*
|
|
8
|
+
* Icons mirror the legacy reporter so existing log-parsers still match:
|
|
9
|
+
* `x` (error), `!` (warning), `i` (info).
|
|
10
|
+
*/
|
|
11
|
+
export class TextDiagnosticRenderer {
|
|
12
|
+
stdout;
|
|
13
|
+
stderr;
|
|
14
|
+
constructor(stdout, stderr) {
|
|
15
|
+
this.stdout = stdout;
|
|
16
|
+
this.stderr = stderr;
|
|
17
|
+
}
|
|
18
|
+
render(diagnostics, stream) {
|
|
19
|
+
if (diagnostics.length === 0)
|
|
20
|
+
return;
|
|
21
|
+
const sink = stream === 'stderr' ? this.stderr : this.stdout;
|
|
22
|
+
for (const d of diagnostics) {
|
|
23
|
+
const icon = d.level === 'error' ? 'x' : d.level === 'warning' ? '!' : 'i';
|
|
24
|
+
sink.writeLine(`[${icon}] ${d.message}`);
|
|
25
|
+
if (d.hint)
|
|
26
|
+
sink.writeLine(` → ${d.hint}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=TextDiagnosticRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextDiagnosticRenderer.js","sourceRoot":"","sources":["../../src/reporting/TextDiagnosticRenderer.ts"],"names":[],"mappings":"AAIA;;;;;;;;;GASG;AACH,MAAM,OAAO,sBAAsB;IAEd;IACA;IAFnB,YACmB,MAAgB,EAChB,MAAgB;QADhB,WAAM,GAAN,MAAM,CAAU;QAChB,WAAM,GAAN,MAAM,CAAU;IAChC,CAAC;IAEG,MAAM,CAAC,WAAkC,EAAE,MAA2B;QAC3E,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACrC,MAAM,IAAI,GAAG,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC3E,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACzC,IAAI,CAAC,CAAC,IAAI;gBAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Diagnostic } from '@uapkg/diagnostics';
|
|
2
|
+
/**
|
|
3
|
+
* Minimal stdout writer abstraction so reporters can be driven by tests.
|
|
4
|
+
*/
|
|
5
|
+
export interface TextSink {
|
|
6
|
+
writeLine(line: string): void;
|
|
7
|
+
write(text: string): void;
|
|
8
|
+
}
|
|
9
|
+
/** Default sink → `process.stdout` / `process.stderr`. */
|
|
10
|
+
export declare class ProcessTextSink implements TextSink {
|
|
11
|
+
private readonly stream;
|
|
12
|
+
constructor(stream?: NodeJS.WritableStream);
|
|
13
|
+
writeLine(line: string): void;
|
|
14
|
+
write(text: string): void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Sorts diagnostics by severity so humans see errors first.
|
|
18
|
+
*/
|
|
19
|
+
export declare const DIAGNOSTIC_LEVEL_ORDER: Readonly<Record<Diagnostic['level'], number>>;
|
|
20
|
+
export declare function sortDiagnostics(diagnostics: readonly Diagnostic[]): Diagnostic[];
|
|
21
|
+
//# sourceMappingURL=TextSink.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextSink.d.ts","sourceRoot":"","sources":["../../src/reporting/TextSink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,0DAA0D;AAC1D,qBAAa,eAAgB,YAAW,QAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,MAAM,CAAC,cAA+B;IAE3E,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAGjC;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAIhF,CAAC;AAEF,wBAAgB,eAAe,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,GAAG,UAAU,EAAE,CAEhF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** Default sink → `process.stdout` / `process.stderr`. */
|
|
2
|
+
export class ProcessTextSink {
|
|
3
|
+
stream;
|
|
4
|
+
constructor(stream = process.stdout) {
|
|
5
|
+
this.stream = stream;
|
|
6
|
+
}
|
|
7
|
+
writeLine(line) {
|
|
8
|
+
this.stream.write(`${line}\n`);
|
|
9
|
+
}
|
|
10
|
+
write(text) {
|
|
11
|
+
this.stream.write(text);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Sorts diagnostics by severity so humans see errors first.
|
|
16
|
+
*/
|
|
17
|
+
export const DIAGNOSTIC_LEVEL_ORDER = {
|
|
18
|
+
error: 0,
|
|
19
|
+
warning: 1,
|
|
20
|
+
info: 2,
|
|
21
|
+
};
|
|
22
|
+
export function sortDiagnostics(diagnostics) {
|
|
23
|
+
return [...diagnostics].sort((a, b) => DIAGNOSTIC_LEVEL_ORDER[a.level] - DIAGNOSTIC_LEVEL_ORDER[b.level]);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=TextSink.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextSink.js","sourceRoot":"","sources":["../../src/reporting/TextSink.ts"],"names":[],"mappings":"AAUA,0DAA0D;AAC1D,MAAM,OAAO,eAAe;IACU;IAApC,YAAoC,SAAgC,OAAO,CAAC,MAAM;QAA9C,WAAM,GAAN,MAAM,CAAwC;IAAG,CAAC;IAE/E,SAAS,CAAC,IAAY;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,IAAY;QACvB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAkD;IACnF,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,WAAkC;IAChE,OAAO,CAAC,GAAG,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,sBAAsB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5G,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uapkg/cli",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.10",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"bin": {
|
|
@@ -28,17 +28,17 @@
|
|
|
28
28
|
"react": "19.2.4",
|
|
29
29
|
"yargs": "18.0.0",
|
|
30
30
|
"zod": "4.3.6",
|
|
31
|
-
"@uapkg/common": "^1.1.
|
|
32
|
-
"@uapkg/common-schema": "^1.1.
|
|
33
|
-
"@uapkg/config": "^1.1.
|
|
34
|
-
"@uapkg/diagnostics": "^1.1.
|
|
35
|
-
"@uapkg/diagnostics-format": "^1.1.
|
|
36
|
-
"@uapkg/
|
|
37
|
-
"@uapkg/
|
|
38
|
-
"@uapkg/
|
|
39
|
-
"@uapkg/package-manifest": "^1.1.
|
|
40
|
-
"@uapkg/
|
|
41
|
-
"@uapkg/
|
|
31
|
+
"@uapkg/common": "^1.1.10",
|
|
32
|
+
"@uapkg/common-schema": "^1.1.10",
|
|
33
|
+
"@uapkg/config": "^1.1.10",
|
|
34
|
+
"@uapkg/diagnostics": "^1.1.10",
|
|
35
|
+
"@uapkg/diagnostics-format": "^1.1.10",
|
|
36
|
+
"@uapkg/log": "^1.1.10",
|
|
37
|
+
"@uapkg/installer": "^1.1.10",
|
|
38
|
+
"@uapkg/package-manifest-schema": "^1.1.10",
|
|
39
|
+
"@uapkg/package-manifest": "^1.1.10",
|
|
40
|
+
"@uapkg/registry-core": "^1.1.10",
|
|
41
|
+
"@uapkg/pack": "^1.1.10"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/react": "19.2.14"
|