@flowscripter/dynamic-cli-framework 1.1.6 → 1.2.1
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/.github/workflows/release-bun-library.yml +1 -0
- package/README/core-commands.md +40 -0
- package/README/core-service-providers.md +198 -0
- package/README/development.md +60 -0
- package/README/implementation-details.md +474 -0
- package/README/key-concepts.md +751 -0
- package/README.md +12 -1413
- package/bun.lock +22 -18
- package/index.ts +97 -1
- package/package.json +8 -7
- package/src/api/BaseCLIFeatureOptions.ts +10 -0
- package/src/api/CLIConfig.ts +5 -0
- package/src/api/RunResult.ts +16 -0
- package/src/api/argument/Argument.ts +24 -0
- package/src/api/service/ServiceProvider.ts +3 -3
- package/src/api/service/core/ArgumentPrompterService.ts +10 -0
- package/src/api/service/core/AsciiBannerGeneratorService.ts +44 -7
- package/src/api/service/core/CompletionService.ts +36 -0
- package/src/api/service/core/DataDumpGeneratorService.ts +27 -0
- package/src/api/service/core/ImagePrinterService.ts +26 -0
- package/src/api/service/core/KeyValueService.ts +22 -5
- package/src/api/service/core/PrinterService.ts +127 -1
- package/src/api/service/core/PrompterService.ts +49 -0
- package/src/api/service/core/SecretService.ts +27 -0
- package/src/api/service/core/ShutdownService.ts +17 -1
- package/src/api/service/core/Table.ts +85 -0
- package/src/api/service/core/TableGeneratorService.ts +38 -0
- package/src/api/service/core/TreePrinterService.ts +11 -0
- package/src/cli/BaseCLI.ts +116 -44
- package/src/cli/DefaultRuntimeCLI.ts +10 -18
- package/src/command/CompletionCommand.ts +179 -0
- package/src/command/MultiCommandCliHelpCommand.ts +18 -2
- package/src/command/SingleCommandCliHelpCommand.ts +10 -1
- package/src/launcher.ts +16 -58
- package/src/runtime/command/CommandValidator.ts +3 -3
- package/src/runtime/runner.ts +102 -30
- package/src/runtime/scanner.ts +18 -15
- package/src/runtime/values/argumentValueValidation.ts +49 -5
- package/src/runtime/values/globalCommandValuePopulation.ts +1 -1
- package/src/runtime/values/subCommandValuePopulation.ts +9 -8
- package/src/service/argumentPrompter/ArgumentPrompterServiceProvider.ts +34 -0
- package/src/service/argumentPrompter/DefaultArgumentPrompterService.ts +330 -0
- package/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.ts +1 -1
- package/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.ts +254 -17
- package/src/service/banner/BannerServiceProvider.ts +2 -2
- package/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.ts +85 -0
- package/src/service/chiselAsciiBannerGenerator/chisel.flf.json +3 -0
- package/src/service/completion/CompletionServiceProvider.ts +212 -0
- package/src/service/completion/DefaultCompletionService.ts +364 -0
- package/src/service/completion/shell/ShellHandler.ts +16 -0
- package/src/service/completion/shell/bash.ts +47 -0
- package/src/service/completion/shell/fish.ts +43 -0
- package/src/service/completion/shell/powershell.ts +66 -0
- package/src/service/completion/shell/zsh.ts +50 -0
- package/src/service/configuration/ConfigurationServiceProvider.ts +138 -42
- package/src/service/configuration/DefaultKeyValueService.ts +53 -7
- package/src/service/configuration/DefaultSecretService.ts +85 -0
- package/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.ts +41 -0
- package/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.ts +80 -0
- package/src/service/imagePrinter/DefaultImagePrinterService.ts +23 -0
- package/src/service/imagePrinter/ImagePrinterServiceProvider.ts +32 -0
- package/src/service/prettyPrinter/PrettyPrinterServiceProvider.ts +1 -1
- package/src/service/printer/DefaultPrinterService.ts +147 -27
- package/src/service/printer/PrinterServiceProvider.ts +7 -7
- package/src/service/printer/command/NoHyperlinksCommand.ts +40 -0
- package/src/service/printer/terminal/Progress.ts +21 -4
- package/src/service/printer/terminal/Spinner.ts +32 -8
- package/src/service/printer/terminal/Theme.ts +1 -1
- package/src/service/prompter/DefaultPrompterService.ts +87 -0
- package/src/service/prompter/PrompterServiceProvider.ts +36 -0
- package/src/service/prompter/command/NoPromptCommand.ts +40 -0
- package/src/service/prompter/prompt/PromptContext.ts +47 -0
- package/src/service/prompter/prompt/promptAcknowledge.ts +28 -0
- package/src/service/prompter/prompt/promptMultiSelect.ts +99 -0
- package/src/service/prompter/prompt/promptOpenUrl.ts +97 -0
- package/src/service/prompter/prompt/promptSingleSelect.ts +102 -0
- package/src/service/prompter/prompt/promptText.ts +107 -0
- package/src/service/prompter/prompt/promptToggle.ts +28 -0
- package/src/service/shutdown/DefaultShutdownService.ts +13 -0
- package/src/service/shutdown/ShutdownServiceProvider.ts +28 -9
- package/src/service/shutdown/ShutdownState.ts +5 -0
- package/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.ts +1 -1
- package/src/service/tableGenerator/DefaultTableGeneratorService.ts +415 -0
- package/src/service/tableGenerator/TableGeneratorServiceProvider.ts +43 -0
- package/src/service/treePrinter/DefaultTreePrinterService.ts +49 -0
- package/src/service/treePrinter/TreePrinterServiceProvider.ts +40 -0
- package/src/terminal/Ansi.ts +27 -0
- package/src/terminal/ImageRenderer.ts +199 -0
- package/src/terminal/KeyReader.ts +23 -0
- package/src/terminal/PngDecoder.ts +143 -0
- package/src/{service/printer/terminal → terminal}/Styler.ts +3 -0
- package/src/{service/printer/terminal → terminal}/Terminal.ts +1 -0
- package/src/terminal/TtyKeyReader.ts +83 -0
- package/src/terminal/TtyStyler.ts +78 -0
- package/src/{service/printer/terminal → terminal}/TtyTerminal.ts +9 -1
- package/src/terminal/supportsHyperlinks.ts +110 -0
- package/src/util/configHelper.ts +2 -2
- package/src/util/envVarHelper.ts +2 -2
- package/src/util/helpHelper.ts +66 -122
- package/src/util/logger.ts +16 -14
- package/src/util/runnerHelper.ts +1 -1
- package/tests/cli/BaseCLI.test.ts +50 -54
- package/tests/command/CompletionCommand.test.ts +68 -0
- package/tests/command/UsageCommand.test.ts +3 -2
- package/tests/command/VersionCommand.test.ts +3 -2
- package/tests/fixtures/Context.ts +9 -2
- package/tests/fixtures/util.ts +1 -1
- package/tests/runtime/parser.test.ts +9 -7
- package/tests/runtime/registry/DefaultServiceProviderRegistry.test.ts +3 -3
- package/tests/runtime/values/argumentValueValidation.test.ts +193 -0
- package/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.ts +47 -0
- package/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.ts +754 -0
- package/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.ts +5 -4
- package/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.ts +163 -3
- package/tests/service/asciiBannerGenerator/__snapshots__/DefaultAsciiBannerGeneratorService.test.ts.snap +1 -1
- package/tests/service/banner/BannerServiceProvider.test.ts +8 -4
- package/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.ts +52 -0
- package/tests/service/completion/CompletionServiceProvider.test.ts +404 -0
- package/tests/service/completion/DefaultCompletionService.test.ts +278 -0
- package/tests/service/completion/shell/bash.test.ts +73 -0
- package/tests/service/completion/shell/fish.test.ts +62 -0
- package/tests/service/completion/shell/powershell.test.ts +59 -0
- package/tests/service/completion/shell/zsh.test.ts +60 -0
- package/tests/service/configuration/ConfigurationServiceProvider.test.ts +24 -12
- package/tests/service/configuration/DefaultKeyValueService.test.ts +118 -16
- package/tests/service/configuration/DefaultSecretService.test.ts +148 -0
- package/tests/service/configuration/command/ConfigCommand.test.ts +29 -0
- package/tests/service/configuration/command/DumpConfigCommand.test.ts +60 -0
- package/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.ts +57 -0
- package/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.ts +217 -0
- package/tests/service/imagePrinter/DefaultImagePrinterService.test.ts +96 -0
- package/tests/service/imagePrinter/ImagePrinterServiceProvider.test.ts +17 -0
- package/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.ts +2 -2
- package/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.ts +5 -4
- package/tests/service/printer/DefaultPrinterService.test.ts +233 -2
- package/tests/service/printer/PrinterServiceProvider.test.ts +6 -5
- package/tests/service/printer/command/DarkModeCommand.test.ts +83 -0
- package/tests/service/printer/command/LogLevelCommand.test.ts +7 -5
- package/tests/service/printer/command/NoColorCommand.test.ts +83 -0
- package/tests/service/printer/command/NoHyperlinksCommand.test.ts +89 -0
- package/tests/service/printer/terminal/Progress.test.ts +64 -4
- package/tests/service/printer/terminal/Spinner.test.ts +44 -3
- package/tests/service/prompter/DefaultPrompterService.test.ts +615 -0
- package/tests/service/prompter/PrompterServiceProvider.test.ts +47 -0
- package/tests/service/prompter/command/NoPromptCommand.test.ts +58 -0
- package/tests/service/shutdown/ShutdownServiceProvider.test.ts +4 -2
- package/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.ts +3 -2
- package/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.ts +5 -4
- package/tests/service/tableGenerator/DefaultTableGeneratorService.test.ts +363 -0
- package/tests/service/tableGenerator/TableGeneratorServiceProvider.test.ts +47 -0
- package/tests/service/treePrinter/DefaultTreePrinterService.test.ts +144 -0
- package/tests/service/treePrinter/TreePrinterServiceProvider.test.ts +55 -0
- package/tests/terminal/ImageRenderer.test.ts +161 -0
- package/tests/terminal/PngDecoder.test.ts +223 -0
- package/tests/terminal/supportsHyperlinks.test.ts +149 -0
- package/tests/util/configHelper.test.ts +4 -4
- package/tests/util/logger.test.ts +23 -1
- package/tsconfig.json +31 -0
- package/src/service/printer/terminal/Ansi.ts +0 -10
- package/src/service/printer/terminal/TtyStyler.ts +0 -39
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { describe, test } from "bun:test";
|
|
2
|
-
import Progress
|
|
1
|
+
import { describe, expect, test } from "bun:test";
|
|
2
|
+
import Progress, {
|
|
3
|
+
ProgressStyle,
|
|
4
|
+
} from "../../../../src/service/printer/terminal/Progress.ts";
|
|
3
5
|
import { sleep } from "../../../fixtures/util.ts";
|
|
4
|
-
import TtyTerminal from "../../../../src/
|
|
6
|
+
import TtyTerminal from "../../../../src/terminal/TtyTerminal.ts";
|
|
5
7
|
import StreamString from "../../../fixtures/StreamString.ts";
|
|
6
|
-
import TtyStyler from "../../../../src/
|
|
8
|
+
import TtyStyler from "../../../../src/terminal/TtyStyler.ts";
|
|
7
9
|
|
|
8
10
|
describe("Progress tests", () => {
|
|
9
11
|
test("Progress works", async () => {
|
|
@@ -37,4 +39,62 @@ describe("Progress tests", () => {
|
|
|
37
39
|
await sleep(150);
|
|
38
40
|
await progress.hideAll();
|
|
39
41
|
});
|
|
42
|
+
|
|
43
|
+
test("Default style is STROKE and uses = and - characters", async () => {
|
|
44
|
+
const streamString = new StreamString();
|
|
45
|
+
(streamString.writeStream as unknown as { columns: number }).columns = 120;
|
|
46
|
+
const terminal = new TtyTerminal(streamString.writeStream);
|
|
47
|
+
const progress = new Progress(terminal, new TtyStyler(3));
|
|
48
|
+
|
|
49
|
+
const handle = progress.add("bytes", "downloading", 100, 50);
|
|
50
|
+
await sleep(150);
|
|
51
|
+
const output = streamString.getString();
|
|
52
|
+
expect(output).toContain("=");
|
|
53
|
+
expect(output).toContain("-");
|
|
54
|
+
expect(output).not.toContain("▰");
|
|
55
|
+
expect(output).not.toContain("▱");
|
|
56
|
+
await progress.hide(handle);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
test("FILL style uses block characters", async () => {
|
|
60
|
+
const streamString = new StreamString();
|
|
61
|
+
(streamString.writeStream as unknown as { columns: number }).columns = 120;
|
|
62
|
+
const terminal = new TtyTerminal(streamString.writeStream);
|
|
63
|
+
const progress = new Progress(terminal, new TtyStyler(3));
|
|
64
|
+
|
|
65
|
+
progress.progressStyle = ProgressStyle.FILL;
|
|
66
|
+
const handle = progress.add("bytes", "downloading", 100, 50);
|
|
67
|
+
await sleep(150);
|
|
68
|
+
const output = streamString.getString();
|
|
69
|
+
expect(output).toContain("▰");
|
|
70
|
+
expect(output).toContain("▱");
|
|
71
|
+
expect(output).not.toContain("=");
|
|
72
|
+
await progress.hide(handle);
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
test("progressStyle can be changed between renders", async () => {
|
|
76
|
+
const streamString = new StreamString();
|
|
77
|
+
(streamString.writeStream as unknown as { columns: number }).columns = 120;
|
|
78
|
+
const terminal = new TtyTerminal(streamString.writeStream);
|
|
79
|
+
const progress = new Progress(terminal, new TtyStyler(3));
|
|
80
|
+
|
|
81
|
+
const handle = progress.add("bytes", "downloading", 100, 50);
|
|
82
|
+
await sleep(150);
|
|
83
|
+
let output = streamString.getString();
|
|
84
|
+
expect(output).toContain("=");
|
|
85
|
+
|
|
86
|
+
progress.progressStyle = ProgressStyle.FILL;
|
|
87
|
+
progress.update(handle, 75);
|
|
88
|
+
await sleep(150);
|
|
89
|
+
output = streamString.getString();
|
|
90
|
+
expect(output).toContain("▰");
|
|
91
|
+
await progress.hide(handle);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test("ProgressStyle enum has expected values", () => {
|
|
95
|
+
expect(ProgressStyle.STROKE).toBe(ProgressStyle.STROKE);
|
|
96
|
+
expect(ProgressStyle.FILL).toBe(ProgressStyle.FILL);
|
|
97
|
+
expect(Object.keys(ProgressStyle)).toContain("STROKE");
|
|
98
|
+
expect(Object.keys(ProgressStyle)).toContain("FILL");
|
|
99
|
+
});
|
|
40
100
|
});
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import { describe, test } from "bun:test";
|
|
2
|
-
import Spinner
|
|
2
|
+
import Spinner, {
|
|
3
|
+
SpinnerStyle,
|
|
4
|
+
} from "../../../../src/service/printer/terminal/Spinner.ts";
|
|
3
5
|
import {
|
|
4
6
|
expectStringEquals,
|
|
5
7
|
expectStringIncludes,
|
|
6
8
|
sleep,
|
|
7
9
|
} from "../../../fixtures/util.ts";
|
|
8
|
-
import TtyTerminal from "../../../../src/
|
|
10
|
+
import TtyTerminal from "../../../../src/terminal/TtyTerminal.ts";
|
|
9
11
|
import StreamString from "../../../fixtures/StreamString.ts";
|
|
10
|
-
import TtyStyler from "../../../../src/
|
|
12
|
+
import TtyStyler from "../../../../src/terminal/TtyStyler.ts";
|
|
11
13
|
|
|
12
14
|
describe("Spinner tests", () => {
|
|
13
15
|
test("Spinner works", async () => {
|
|
@@ -54,4 +56,43 @@ describe("Spinner tests", () => {
|
|
|
54
56
|
expectStringIncludes(streamString.getString(), "foo");
|
|
55
57
|
expectStringIncludes(streamString.getString(), "bar");
|
|
56
58
|
});
|
|
59
|
+
|
|
60
|
+
test("Star spinner style works", async () => {
|
|
61
|
+
const streamString = new StreamString();
|
|
62
|
+
const terminal = new TtyTerminal(streamString.writeStream);
|
|
63
|
+
const spinner = new Spinner(terminal, new TtyStyler(3));
|
|
64
|
+
|
|
65
|
+
spinner.spinnerStyle = SpinnerStyle.STAR;
|
|
66
|
+
await spinner.show();
|
|
67
|
+
await sleep(250);
|
|
68
|
+
await spinner.hide();
|
|
69
|
+
|
|
70
|
+
expectStringEquals(streamString.getString(), "★✶");
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test("Changing spinner style resets to new frames", async () => {
|
|
74
|
+
const streamString = new StreamString();
|
|
75
|
+
const terminal = new TtyTerminal(streamString.writeStream);
|
|
76
|
+
const spinner = new Spinner(terminal, new TtyStyler(3));
|
|
77
|
+
|
|
78
|
+
spinner.spinnerStyle = SpinnerStyle.STAR;
|
|
79
|
+
await spinner.show();
|
|
80
|
+
await sleep(150);
|
|
81
|
+
await spinner.hide();
|
|
82
|
+
|
|
83
|
+
const starOutput = streamString.getString();
|
|
84
|
+
expectStringIncludes(starOutput, "★");
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
test("Default spinner style is BOX", async () => {
|
|
88
|
+
const streamString = new StreamString();
|
|
89
|
+
const terminal = new TtyTerminal(streamString.writeStream);
|
|
90
|
+
const spinner = new Spinner(terminal, new TtyStyler(3));
|
|
91
|
+
|
|
92
|
+
await spinner.show();
|
|
93
|
+
await sleep(250);
|
|
94
|
+
await spinner.hide();
|
|
95
|
+
|
|
96
|
+
expectStringEquals(streamString.getString(), "⠋⠙");
|
|
97
|
+
});
|
|
57
98
|
});
|