@flowscripter/dynamic-cli-framework 1.4.19 → 1.5.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 +3 -14
- package/cli-plugin.ts +16 -0
- package/dist/cli-plugin.d.ts +17 -0
- package/dist/cli-plugin.d.ts.map +1 -0
- package/dist/cli-plugin.js +69 -0
- package/dist/index.d.ts +115 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +105696 -0
- package/dist/src/api/BaseCLIFeatureOptions.d.ts +12 -0
- package/dist/src/api/BaseCLIFeatureOptions.d.ts.map +1 -0
- package/dist/src/api/CLI.d.ts +17 -0
- package/dist/src/api/CLI.d.ts.map +1 -0
- package/dist/src/api/CLIConfig.d.ts +22 -0
- package/dist/src/api/CLIConfig.d.ts.map +1 -0
- package/dist/src/api/Context.d.ts +23 -0
- package/dist/src/api/Context.d.ts.map +1 -0
- package/dist/src/api/RunResult.d.ts +128 -0
- package/dist/src/api/RunResult.d.ts.map +1 -0
- package/dist/src/api/argument/Argument.d.ts +62 -0
- package/dist/src/api/argument/Argument.d.ts.map +1 -0
- package/dist/src/api/argument/ArgumentValueTypes.d.ts +68 -0
- package/dist/src/api/argument/ArgumentValueTypes.d.ts.map +1 -0
- package/dist/src/api/argument/ComplexOption.d.ts +21 -0
- package/dist/src/api/argument/ComplexOption.d.ts.map +1 -0
- package/dist/src/api/argument/GlobalCommandArgument.d.ts +16 -0
- package/dist/src/api/argument/GlobalCommandArgument.d.ts.map +1 -0
- package/dist/src/api/argument/Option.d.ts +29 -0
- package/dist/src/api/argument/Option.d.ts.map +1 -0
- package/dist/src/api/argument/Positional.d.ts +26 -0
- package/dist/src/api/argument/Positional.d.ts.map +1 -0
- package/dist/src/api/argument/SubCommandArgument.d.ts +18 -0
- package/dist/src/api/argument/SubCommandArgument.d.ts.map +1 -0
- package/dist/src/api/command/Command.d.ts +21 -0
- package/dist/src/api/command/Command.d.ts.map +1 -0
- package/dist/src/api/command/GlobalCommand.d.ts +28 -0
- package/dist/src/api/command/GlobalCommand.d.ts.map +1 -0
- package/dist/src/api/command/GlobalModifierCommand.d.ts +12 -0
- package/dist/src/api/command/GlobalModifierCommand.d.ts.map +1 -0
- package/dist/src/api/command/GroupCommand.d.ts +19 -0
- package/dist/src/api/command/GroupCommand.d.ts.map +1 -0
- package/dist/src/api/command/SubCommand.d.ts +37 -0
- package/dist/src/api/command/SubCommand.d.ts.map +1 -0
- package/dist/src/api/command/UsageExample.d.ts +20 -0
- package/dist/src/api/command/UsageExample.d.ts.map +1 -0
- package/dist/src/api/plugin/CommandFactory.d.ts +23 -0
- package/dist/src/api/plugin/CommandFactory.d.ts.map +1 -0
- package/dist/src/api/plugin/ServiceProviderFactory.d.ts +25 -0
- package/dist/src/api/plugin/ServiceProviderFactory.d.ts.map +1 -0
- package/dist/src/api/service/ServiceProvider.d.ts +47 -0
- package/dist/src/api/service/ServiceProvider.d.ts.map +1 -0
- package/dist/src/api/service/core/ArgumentPrompterService.d.ts +6 -0
- package/dist/src/api/service/core/ArgumentPrompterService.d.ts.map +1 -0
- package/dist/src/api/service/core/AsciiBannerGeneratorService.d.ts +59 -0
- package/dist/src/api/service/core/AsciiBannerGeneratorService.d.ts.map +1 -0
- package/dist/src/api/service/core/CompletionService.d.ts +22 -0
- package/dist/src/api/service/core/CompletionService.d.ts.map +1 -0
- package/dist/src/api/service/core/DataDumpGeneratorService.d.ts +22 -0
- package/dist/src/api/service/core/DataDumpGeneratorService.d.ts.map +1 -0
- package/dist/src/api/service/core/ImagePrinterService.d.ts +21 -0
- package/dist/src/api/service/core/ImagePrinterService.d.ts.map +1 -0
- package/dist/src/api/service/core/KeyValueService.d.ts +40 -0
- package/dist/src/api/service/core/KeyValueService.d.ts.map +1 -0
- package/dist/src/api/service/core/PluginService.d.ts +55 -0
- package/dist/src/api/service/core/PluginService.d.ts.map +1 -0
- package/dist/src/api/service/core/PrettyPrinterService.d.ts +35 -0
- package/dist/src/api/service/core/PrettyPrinterService.d.ts.map +1 -0
- package/dist/src/api/service/core/PrinterService.d.ts +339 -0
- package/dist/src/api/service/core/PrinterService.d.ts.map +1 -0
- package/dist/src/api/service/core/PrompterService.d.ts +35 -0
- package/dist/src/api/service/core/PrompterService.d.ts.map +1 -0
- package/dist/src/api/service/core/SecretService.d.ts +25 -0
- package/dist/src/api/service/core/SecretService.d.ts.map +1 -0
- package/dist/src/api/service/core/ShutdownService.d.ts +24 -0
- package/dist/src/api/service/core/ShutdownService.d.ts.map +1 -0
- package/dist/src/api/service/core/SyntaxHighlighterService.d.ts +49 -0
- package/dist/src/api/service/core/SyntaxHighlighterService.d.ts.map +1 -0
- package/dist/src/api/service/core/Table.d.ts +18 -0
- package/dist/src/api/service/core/Table.d.ts.map +1 -0
- package/dist/src/api/service/core/TableGeneratorService.d.ts +31 -0
- package/dist/src/api/service/core/TableGeneratorService.d.ts.map +1 -0
- package/dist/src/api/service/core/TreePrinterService.d.ts +9 -0
- package/dist/src/api/service/core/TreePrinterService.d.ts.map +1 -0
- package/dist/src/cli/BaseCLI.d.ts +59 -0
- package/dist/src/cli/BaseCLI.d.ts.map +1 -0
- package/dist/src/cli/DefaultRuntimeCLI.d.ts +12 -0
- package/dist/src/cli/DefaultRuntimeCLI.d.ts.map +1 -0
- package/dist/src/cli/DynamicPluginRuntimeCLI.d.ts +20 -0
- package/dist/src/cli/DynamicPluginRuntimeCLI.d.ts.map +1 -0
- package/dist/src/command/CompletionCommand.d.ts +31 -0
- package/dist/src/command/CompletionCommand.d.ts.map +1 -0
- package/dist/src/command/MultiCommandCliHelpCommand.d.ts +40 -0
- package/dist/src/command/MultiCommandCliHelpCommand.d.ts.map +1 -0
- package/dist/src/command/PluginCommand.d.ts +67 -0
- package/dist/src/command/PluginCommand.d.ts.map +1 -0
- package/dist/src/command/SingleCommandCliHelpCommand.d.ts +31 -0
- package/dist/src/command/SingleCommandCliHelpCommand.d.ts.map +1 -0
- package/dist/src/command/UsageCommand.d.ts +14 -0
- package/dist/src/command/UsageCommand.d.ts.map +1 -0
- package/dist/src/command/VersionCommand.d.ts +12 -0
- package/dist/src/command/VersionCommand.d.ts.map +1 -0
- package/dist/src/launcher.d.ts +10 -0
- package/dist/src/launcher.d.ts.map +1 -0
- package/dist/src/runtime/DefaultContext.d.ts +14 -0
- package/dist/src/runtime/DefaultContext.d.ts.map +1 -0
- package/dist/src/runtime/argument/ArgumentTypeGuards.d.ts +4 -0
- package/dist/src/runtime/argument/ArgumentTypeGuards.d.ts.map +1 -0
- package/dist/src/runtime/command/CommandTypeGuards.d.ts +10 -0
- package/dist/src/runtime/command/CommandTypeGuards.d.ts.map +1 -0
- package/dist/src/runtime/command/CommandValidator.d.ts +15 -0
- package/dist/src/runtime/command/CommandValidator.d.ts.map +1 -0
- package/dist/src/runtime/parser.d.ts +48 -0
- package/dist/src/runtime/parser.d.ts.map +1 -0
- package/dist/src/runtime/registry/CommandRegistry.d.ts +89 -0
- package/dist/src/runtime/registry/CommandRegistry.d.ts.map +1 -0
- package/dist/src/runtime/registry/DefaultCommandRegistry.d.ts +51 -0
- package/dist/src/runtime/registry/DefaultCommandRegistry.d.ts.map +1 -0
- package/dist/src/runtime/registry/DefaultServiceProviderRegistry.d.ts +12 -0
- package/dist/src/runtime/registry/DefaultServiceProviderRegistry.d.ts.map +1 -0
- package/dist/src/runtime/registry/ServiceProviderRegistry.d.ts +11 -0
- package/dist/src/runtime/registry/ServiceProviderRegistry.d.ts.map +1 -0
- package/dist/src/runtime/runner.d.ts +76 -0
- package/dist/src/runtime/runner.d.ts.map +1 -0
- package/dist/src/runtime/scanner.d.ts +69 -0
- package/dist/src/runtime/scanner.d.ts.map +1 -0
- package/dist/src/runtime/values/ValuePopulationResult.d.ts +34 -0
- package/dist/src/runtime/values/ValuePopulationResult.d.ts.map +1 -0
- package/dist/src/runtime/values/argumentValueMerge.d.ts +13 -0
- package/dist/src/runtime/values/argumentValueMerge.d.ts.map +1 -0
- package/dist/src/runtime/values/argumentValueValidation.d.ts +33 -0
- package/dist/src/runtime/values/argumentValueValidation.d.ts.map +1 -0
- package/dist/src/runtime/values/globalCommandValuePopulation.d.ts +12 -0
- package/dist/src/runtime/values/globalCommandValuePopulation.d.ts.map +1 -0
- package/dist/src/runtime/values/subCommandValuePopulation.d.ts +12 -0
- package/dist/src/runtime/values/subCommandValuePopulation.d.ts.map +1 -0
- package/dist/src/service/argumentPrompter/ArgumentPrompterServiceProvider.d.ts +13 -0
- package/dist/src/service/argumentPrompter/ArgumentPrompterServiceProvider.d.ts.map +1 -0
- package/dist/src/service/argumentPrompter/DefaultArgumentPrompterService.d.ts +9 -0
- package/dist/src/service/argumentPrompter/DefaultArgumentPrompterService.d.ts.map +1 -0
- package/dist/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.d.ts +20 -0
- package/dist/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.d.ts.map +1 -0
- package/dist/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.d.ts +12 -0
- package/dist/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.d.ts.map +1 -0
- package/dist/src/service/banner/BannerServiceProvider.d.ts +29 -0
- package/dist/src/service/banner/BannerServiceProvider.d.ts.map +1 -0
- package/dist/src/service/banner/command/NoBannerCommand.d.ts +19 -0
- package/dist/src/service/banner/command/NoBannerCommand.d.ts.map +1 -0
- package/dist/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.d.ts +22 -0
- package/dist/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.d.ts.map +1 -0
- package/dist/src/service/completion/CompletionServiceProvider.d.ts +14 -0
- package/dist/src/service/completion/CompletionServiceProvider.d.ts.map +1 -0
- package/dist/src/service/completion/DefaultCompletionService.d.ts +17 -0
- package/dist/src/service/completion/DefaultCompletionService.d.ts.map +1 -0
- package/dist/src/service/completion/shell/ShellHandler.d.ts +13 -0
- package/dist/src/service/completion/shell/ShellHandler.d.ts.map +1 -0
- package/dist/src/service/completion/shell/bash.d.ts +11 -0
- package/dist/src/service/completion/shell/bash.d.ts.map +1 -0
- package/dist/src/service/completion/shell/fish.d.ts +11 -0
- package/dist/src/service/completion/shell/fish.d.ts.map +1 -0
- package/dist/src/service/completion/shell/powershell.d.ts +11 -0
- package/dist/src/service/completion/shell/powershell.d.ts.map +1 -0
- package/dist/src/service/completion/shell/zsh.d.ts +11 -0
- package/dist/src/service/completion/shell/zsh.d.ts.map +1 -0
- package/dist/src/service/configuration/ConfigurationServiceProvider.d.ts +196 -0
- package/dist/src/service/configuration/ConfigurationServiceProvider.d.ts.map +1 -0
- package/dist/src/service/configuration/DefaultKeyValueService.d.ts +14 -0
- package/dist/src/service/configuration/DefaultKeyValueService.d.ts.map +1 -0
- package/dist/src/service/configuration/DefaultSecretService.d.ts +27 -0
- package/dist/src/service/configuration/DefaultSecretService.d.ts.map +1 -0
- package/dist/src/service/configuration/command/ConfigCommand.d.ts +19 -0
- package/dist/src/service/configuration/command/ConfigCommand.d.ts.map +1 -0
- package/dist/src/service/configuration/command/DumpConfigCommand.d.ts +14 -0
- package/dist/src/service/configuration/command/DumpConfigCommand.d.ts.map +1 -0
- package/dist/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.d.ts +12 -0
- package/dist/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.d.ts.map +1 -0
- package/dist/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.d.ts +10 -0
- package/dist/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.d.ts.map +1 -0
- package/dist/src/service/imagePrinter/DefaultImagePrinterService.d.ts +8 -0
- package/dist/src/service/imagePrinter/DefaultImagePrinterService.d.ts.map +1 -0
- package/dist/src/service/imagePrinter/ImagePrinterServiceProvider.d.ts +13 -0
- package/dist/src/service/imagePrinter/ImagePrinterServiceProvider.d.ts.map +1 -0
- package/dist/src/service/plugin/DefaultPluginService.d.ts +15 -0
- package/dist/src/service/plugin/DefaultPluginService.d.ts.map +1 -0
- package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts +13 -0
- package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts.map +1 -0
- package/dist/src/service/prettyPrinter/DefaultPrettyPrinterService.d.ts +13 -0
- package/dist/src/service/prettyPrinter/DefaultPrettyPrinterService.d.ts.map +1 -0
- package/dist/src/service/prettyPrinter/PrettyPrinterServiceProvider.d.ts +20 -0
- package/dist/src/service/prettyPrinter/PrettyPrinterServiceProvider.d.ts.map +1 -0
- package/dist/src/service/printer/DefaultPrinterService.d.ts +61 -0
- package/dist/src/service/printer/DefaultPrinterService.d.ts.map +1 -0
- package/dist/src/service/printer/PrinterServiceProvider.d.ts +22 -0
- package/dist/src/service/printer/PrinterServiceProvider.d.ts.map +1 -0
- package/dist/src/service/printer/command/DarkModeCommand.d.ts +19 -0
- package/dist/src/service/printer/command/DarkModeCommand.d.ts.map +1 -0
- package/dist/src/service/printer/command/LogLevelCommand.d.ts +19 -0
- package/dist/src/service/printer/command/LogLevelCommand.d.ts.map +1 -0
- package/dist/src/service/printer/command/NoColorCommand.d.ts +19 -0
- package/dist/src/service/printer/command/NoColorCommand.d.ts.map +1 -0
- package/dist/src/service/printer/command/NoHyperlinksCommand.d.ts +16 -0
- package/dist/src/service/printer/command/NoHyperlinksCommand.d.ts.map +1 -0
- package/dist/src/service/printer/terminal/Color.d.ts +15 -0
- package/dist/src/service/printer/terminal/Color.d.ts.map +1 -0
- package/dist/src/service/printer/terminal/Progress.d.ts +20 -0
- package/dist/src/service/printer/terminal/Progress.d.ts.map +1 -0
- package/dist/src/service/printer/terminal/Spinner.d.ts +16 -0
- package/dist/src/service/printer/terminal/Spinner.d.ts.map +1 -0
- package/dist/src/service/printer/terminal/Theme.d.ts +3 -0
- package/dist/src/service/printer/terminal/Theme.d.ts.map +1 -0
- package/dist/src/service/prompter/DefaultPrompterService.d.ts +21 -0
- package/dist/src/service/prompter/DefaultPrompterService.d.ts.map +1 -0
- package/dist/src/service/prompter/PrompterServiceProvider.d.ts +13 -0
- package/dist/src/service/prompter/PrompterServiceProvider.d.ts.map +1 -0
- package/dist/src/service/prompter/command/NoPromptCommand.d.ts +16 -0
- package/dist/src/service/prompter/command/NoPromptCommand.d.ts.map +1 -0
- package/dist/src/service/prompter/prompt/PromptContext.d.ts +15 -0
- package/dist/src/service/prompter/prompt/PromptContext.d.ts.map +1 -0
- package/dist/src/service/prompter/prompt/promptAcknowledge.d.ts +4 -0
- package/dist/src/service/prompter/prompt/promptAcknowledge.d.ts.map +1 -0
- package/dist/src/service/prompter/prompt/promptMultiSelect.d.ts +4 -0
- package/dist/src/service/prompter/prompt/promptMultiSelect.d.ts.map +1 -0
- package/dist/src/service/prompter/prompt/promptOpenUrl.d.ts +4 -0
- package/dist/src/service/prompter/prompt/promptOpenUrl.d.ts.map +1 -0
- package/dist/src/service/prompter/prompt/promptSingleSelect.d.ts +4 -0
- package/dist/src/service/prompter/prompt/promptSingleSelect.d.ts.map +1 -0
- package/dist/src/service/prompter/prompt/promptText.d.ts +4 -0
- package/dist/src/service/prompter/prompt/promptText.d.ts.map +1 -0
- package/dist/src/service/prompter/prompt/promptToggle.d.ts +4 -0
- package/dist/src/service/prompter/prompt/promptToggle.d.ts.map +1 -0
- package/dist/src/service/shutdown/DefaultShutdownService.d.ts +9 -0
- package/dist/src/service/shutdown/DefaultShutdownService.d.ts.map +1 -0
- package/dist/src/service/shutdown/ShutdownServiceProvider.d.ts +15 -0
- package/dist/src/service/shutdown/ShutdownServiceProvider.d.ts.map +1 -0
- package/dist/src/service/shutdown/ShutdownState.d.ts +6 -0
- package/dist/src/service/shutdown/ShutdownState.d.ts.map +1 -0
- package/dist/src/service/syntaxHighlighter/DefaultSyntaxHighlighterService.d.ts +17 -0
- package/dist/src/service/syntaxHighlighter/DefaultSyntaxHighlighterService.d.ts.map +1 -0
- package/dist/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.d.ts +20 -0
- package/dist/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.d.ts.map +1 -0
- package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts +10 -0
- package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts.map +1 -0
- package/dist/src/service/tableGenerator/TableGeneratorServiceProvider.d.ts +12 -0
- package/dist/src/service/tableGenerator/TableGeneratorServiceProvider.d.ts.map +1 -0
- package/dist/src/service/treePrinter/DefaultTreePrinterService.d.ts +10 -0
- package/dist/src/service/treePrinter/DefaultTreePrinterService.d.ts.map +1 -0
- package/dist/src/service/treePrinter/TreePrinterServiceProvider.d.ts +12 -0
- package/dist/src/service/treePrinter/TreePrinterServiceProvider.d.ts.map +1 -0
- package/dist/src/terminal/Ansi.d.ts +14 -0
- package/dist/src/terminal/Ansi.d.ts.map +1 -0
- package/dist/src/terminal/ImageRenderer.d.ts +7 -0
- package/dist/src/terminal/ImageRenderer.d.ts.map +1 -0
- package/dist/src/terminal/KeyReader.d.ts +22 -0
- package/dist/src/terminal/KeyReader.d.ts.map +1 -0
- package/dist/src/terminal/PngDecoder.d.ts +6 -0
- package/dist/src/terminal/PngDecoder.d.ts.map +1 -0
- package/dist/src/terminal/Styler.d.ts +9 -0
- package/dist/src/terminal/Styler.d.ts.map +1 -0
- package/dist/src/terminal/Terminal.d.ts +10 -0
- package/dist/src/terminal/Terminal.d.ts.map +1 -0
- package/dist/src/terminal/TtyKeyReader.d.ts +11 -0
- package/dist/src/terminal/TtyKeyReader.d.ts.map +1 -0
- package/dist/src/terminal/TtyStyler.d.ts +19 -0
- package/dist/src/terminal/TtyStyler.d.ts.map +1 -0
- package/dist/src/terminal/TtyTerminal.d.ts +14 -0
- package/dist/src/terminal/TtyTerminal.d.ts.map +1 -0
- package/dist/src/terminal/supportsHyperlinks.d.ts +3 -0
- package/dist/src/terminal/supportsHyperlinks.d.ts.map +1 -0
- package/dist/src/util/configHelper.d.ts +22 -0
- package/dist/src/util/configHelper.d.ts.map +1 -0
- package/dist/src/util/envVarHelper.d.ts +21 -0
- package/dist/src/util/envVarHelper.d.ts.map +1 -0
- package/dist/src/util/helpHelper.d.ts +26 -0
- package/dist/src/util/helpHelper.d.ts.map +1 -0
- package/dist/src/util/logger.d.ts +18 -0
- package/dist/src/util/logger.d.ts.map +1 -0
- package/dist/src/util/runnerHelper.d.ts +9 -0
- package/dist/src/util/runnerHelper.d.ts.map +1 -0
- package/dist/tests/cli/BaseCLI.test.d.ts +2 -0
- package/dist/tests/cli/BaseCLI.test.d.ts.map +1 -0
- package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts +2 -0
- package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts.map +1 -0
- package/dist/tests/command/CompletionCommand.test.d.ts +2 -0
- package/dist/tests/command/CompletionCommand.test.d.ts.map +1 -0
- package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts +2 -0
- package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts.map +1 -0
- package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts +2 -0
- package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts.map +1 -0
- package/dist/tests/command/UsageCommand.test.d.ts +2 -0
- package/dist/tests/command/UsageCommand.test.d.ts.map +1 -0
- package/dist/tests/command/VersionCommand.test.d.ts +2 -0
- package/dist/tests/command/VersionCommand.test.d.ts.map +1 -0
- package/dist/tests/fixtures/CLIConfig.d.ts +3 -0
- package/dist/tests/fixtures/CLIConfig.d.ts.map +1 -0
- package/dist/tests/fixtures/Command.d.ts +20 -0
- package/dist/tests/fixtures/Command.d.ts.map +1 -0
- package/{tests/fixtures/CommandRegistry.ts → dist/tests/fixtures/CommandRegistry.d.ts} +2 -4
- package/dist/tests/fixtures/CommandRegistry.d.ts.map +1 -0
- package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts +10 -0
- package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts.map +1 -0
- package/dist/tests/fixtures/Context.d.ts +4 -0
- package/dist/tests/fixtures/Context.d.ts.map +1 -0
- package/dist/tests/fixtures/ServiceProviderRegistry.d.ts +4 -0
- package/dist/tests/fixtures/ServiceProviderRegistry.d.ts.map +1 -0
- package/dist/tests/fixtures/StreamString.d.ts +10 -0
- package/dist/tests/fixtures/StreamString.d.ts.map +1 -0
- package/dist/tests/fixtures/prettierPluginFoo.d.ts +4 -0
- package/dist/tests/fixtures/prettierPluginFoo.d.ts.map +1 -0
- package/dist/tests/fixtures/util.d.ts +8 -0
- package/dist/tests/fixtures/util.d.ts.map +1 -0
- package/dist/tests/runtime/DefaultContext.test.d.ts +2 -0
- package/dist/tests/runtime/DefaultContext.test.d.ts.map +1 -0
- package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts +2 -0
- package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts.map +1 -0
- package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts +2 -0
- package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts.map +1 -0
- package/dist/tests/runtime/command/CommandValidator.test.d.ts +2 -0
- package/dist/tests/runtime/command/CommandValidator.test.d.ts.map +1 -0
- package/dist/tests/runtime/parser.test.d.ts +2 -0
- package/dist/tests/runtime/parser.test.d.ts.map +1 -0
- package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts +2 -0
- package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts.map +1 -0
- package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts +2 -0
- package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts.map +1 -0
- package/dist/tests/runtime/runner.test.d.ts +2 -0
- package/dist/tests/runtime/runner.test.d.ts.map +1 -0
- package/dist/tests/runtime/scanner.test.d.ts +2 -0
- package/dist/tests/runtime/scanner.test.d.ts.map +1 -0
- package/dist/tests/runtime/values/argumentValueMerge.test.d.ts +2 -0
- package/dist/tests/runtime/values/argumentValueMerge.test.d.ts.map +1 -0
- package/dist/tests/runtime/values/argumentValueValidation.test.d.ts +2 -0
- package/dist/tests/runtime/values/argumentValueValidation.test.d.ts.map +1 -0
- package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts +2 -0
- package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts.map +1 -0
- package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts +2 -0
- package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts.map +1 -0
- package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts +2 -0
- package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts.map +1 -0
- package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts +2 -0
- package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts.map +1 -0
- package/dist/tests/service/banner/BannerServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/banner/BannerServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts +2 -0
- package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts.map +1 -0
- package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts +2 -0
- package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts.map +1 -0
- package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/completion/DefaultCompletionService.test.d.ts +2 -0
- package/dist/tests/service/completion/DefaultCompletionService.test.d.ts.map +1 -0
- package/dist/tests/service/completion/shell/bash.test.d.ts +2 -0
- package/dist/tests/service/completion/shell/bash.test.d.ts.map +1 -0
- package/dist/tests/service/completion/shell/fish.test.d.ts +2 -0
- package/dist/tests/service/completion/shell/fish.test.d.ts.map +1 -0
- package/dist/tests/service/completion/shell/powershell.test.d.ts +2 -0
- package/dist/tests/service/completion/shell/powershell.test.d.ts.map +1 -0
- package/dist/tests/service/completion/shell/zsh.test.d.ts +2 -0
- package/dist/tests/service/completion/shell/zsh.test.d.ts.map +1 -0
- package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts +2 -0
- package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts.map +1 -0
- package/dist/tests/service/configuration/DefaultSecretService.test.d.ts +2 -0
- package/dist/tests/service/configuration/DefaultSecretService.test.d.ts.map +1 -0
- package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts +2 -0
- package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts.map +1 -0
- package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts +2 -0
- package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts.map +1 -0
- package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts +2 -0
- package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts.map +1 -0
- package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts +2 -0
- package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts.map +1 -0
- package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts +2 -0
- package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts.map +1 -0
- package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/printer/DefaultPrinterService.test.d.ts +2 -0
- package/dist/tests/service/printer/DefaultPrinterService.test.d.ts.map +1 -0
- package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts +2 -0
- package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts.map +1 -0
- package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts +2 -0
- package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts.map +1 -0
- package/dist/tests/service/printer/command/NoColorCommand.test.d.ts +2 -0
- package/dist/tests/service/printer/command/NoColorCommand.test.d.ts.map +1 -0
- package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts +2 -0
- package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts.map +1 -0
- package/dist/tests/service/printer/terminal/Progress.test.d.ts +2 -0
- package/dist/tests/service/printer/terminal/Progress.test.d.ts.map +1 -0
- package/dist/tests/service/printer/terminal/Spinner.test.d.ts +2 -0
- package/dist/tests/service/printer/terminal/Spinner.test.d.ts.map +1 -0
- package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts +2 -0
- package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts.map +1 -0
- package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts +2 -0
- package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts.map +1 -0
- package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts +2 -0
- package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts.map +1 -0
- package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts +2 -0
- package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts.map +1 -0
- package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts +2 -0
- package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts.map +1 -0
- package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts +2 -0
- package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts.map +1 -0
- package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts +2 -0
- package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts.map +1 -0
- package/dist/tests/terminal/ImageRenderer.test.d.ts +2 -0
- package/dist/tests/terminal/ImageRenderer.test.d.ts.map +1 -0
- package/dist/tests/terminal/PngDecoder.test.d.ts +2 -0
- package/dist/tests/terminal/PngDecoder.test.d.ts.map +1 -0
- package/dist/tests/terminal/supportsHyperlinks.test.d.ts +2 -0
- package/dist/tests/terminal/supportsHyperlinks.test.d.ts.map +1 -0
- package/dist/tests/util/configHelper.test.d.ts +2 -0
- package/dist/tests/util/configHelper.test.d.ts.map +1 -0
- package/dist/tests/util/envVarHelper.test.d.ts +2 -0
- package/dist/tests/util/envVarHelper.test.d.ts.map +1 -0
- package/dist/tests/util/logger.test.d.ts +2 -0
- package/dist/tests/util/logger.test.d.ts.map +1 -0
- package/index.ts +15 -1
- package/package.json +28 -2
- package/src/api/plugin/CommandFactory.ts +25 -0
- package/src/api/plugin/ServiceProviderFactory.ts +27 -0
- package/src/api/service/core/PluginService.ts +63 -0
- package/src/cli/DynamicPluginRuntimeCLI.ts +77 -0
- package/src/command/PluginCommand.ts +184 -0
- package/src/launcher.ts +35 -0
- package/src/service/plugin/DefaultPluginService.ts +37 -0
- package/src/service/plugin/DefaultPluginServiceProvider.ts +29 -0
- package/.github/workflows/check-bun-dependencies.yml +0 -12
- package/.github/workflows/lint-pr-message.yml +0 -13
- package/.github/workflows/release-bun-library.yml +0 -15
- package/.github/workflows/validate-bun-library-pr.yml +0 -10
- package/README/core-commands.md +0 -40
- package/README/core-service-providers.md +0 -198
- package/README/development.md +0 -57
- package/README/implementation-details.md +0 -474
- package/README/key-concepts.md +0 -751
- package/bun.lock +0 -156
- package/tests/cli/BaseCLI.test.ts +0 -283
- package/tests/command/CompletionCommand.test.ts +0 -63
- package/tests/command/MultiCommandCliHelpCommand.test.ts +0 -496
- package/tests/command/SingleCommandCliHelpCommand.test.ts +0 -302
- package/tests/command/UsageCommand.test.ts +0 -48
- package/tests/command/VersionCommand.test.ts +0 -37
- package/tests/fixtures/CLIConfig.ts +0 -9
- package/tests/fixtures/Command.ts +0 -248
- package/tests/fixtures/ConfigurationServiceProvider.ts +0 -28
- package/tests/fixtures/Context.ts +0 -32
- package/tests/fixtures/ServiceProviderRegistry.ts +0 -16
- package/tests/fixtures/StreamString.ts +0 -37
- package/tests/fixtures/prettierPluginFoo.ts +0 -31
- package/tests/fixtures/util.ts +0 -35
- package/tests/runtime/DefaultContext.test.ts +0 -20
- package/tests/runtime/argument/ArgumentTypeGuards.test.ts +0 -47
- package/tests/runtime/command/CommandTypeGuards.test.ts +0 -43
- package/tests/runtime/command/CommandValidator.test.ts +0 -1196
- package/tests/runtime/parser.test.ts +0 -744
- package/tests/runtime/registry/DefaultCommandRegistry.test.ts +0 -144
- package/tests/runtime/registry/DefaultServiceProviderRegistry.test.ts +0 -36
- package/tests/runtime/runner.test.ts +0 -1284
- package/tests/runtime/scanner.test.ts +0 -915
- package/tests/runtime/values/argumentValueMerge.test.ts +0 -366
- package/tests/runtime/values/argumentValueValidation.test.ts +0 -1090
- package/tests/runtime/values/globalCommandValuePopulation.test.ts +0 -480
- package/tests/runtime/values/subCommandValuePopulation.test.ts +0 -2430
- package/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.ts +0 -38
- package/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.ts +0 -745
- package/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.ts +0 -17
- package/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.ts +0 -208
- package/tests/service/asciiBannerGenerator/__snapshots__/DefaultAsciiBannerGeneratorService.test.ts.snap +0 -20
- package/tests/service/asciiBannerGenerator/small.flf.json +0 -3
- package/tests/service/banner/BannerServiceProvider.test.ts +0 -87
- package/tests/service/banner/__snapshots__/BannerServiceProvider.test.ts.snap +0 -16
- package/tests/service/banner/command/NoBannerCommand.test.ts +0 -18
- package/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.ts +0 -52
- package/tests/service/completion/CompletionServiceProvider.test.ts +0 -335
- package/tests/service/completion/DefaultCompletionService.test.ts +0 -216
- package/tests/service/completion/shell/bash.test.ts +0 -73
- package/tests/service/completion/shell/fish.test.ts +0 -60
- package/tests/service/completion/shell/powershell.test.ts +0 -59
- package/tests/service/completion/shell/zsh.test.ts +0 -60
- package/tests/service/configuration/ConfigurationServiceProvider.test.ts +0 -212
- package/tests/service/configuration/DefaultKeyValueService.test.ts +0 -155
- package/tests/service/configuration/DefaultSecretService.test.ts +0 -140
- package/tests/service/configuration/command/ConfigCommand.test.ts +0 -29
- package/tests/service/configuration/command/DumpConfigCommand.test.ts +0 -51
- package/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.ts +0 -51
- package/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.ts +0 -208
- package/tests/service/imagePrinter/DefaultImagePrinterService.test.ts +0 -31
- package/tests/service/imagePrinter/ImagePrinterServiceProvider.test.ts +0 -17
- package/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.ts +0 -46
- package/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.ts +0 -37
- package/tests/service/printer/DefaultPrinterService.test.ts +0 -530
- package/tests/service/printer/PrinterServiceProvider.test.ts +0 -34
- package/tests/service/printer/command/DarkModeCommand.test.ts +0 -75
- package/tests/service/printer/command/LogLevelCommand.test.ts +0 -47
- package/tests/service/printer/command/NoColorCommand.test.ts +0 -75
- package/tests/service/printer/command/NoHyperlinksCommand.test.ts +0 -75
- package/tests/service/printer/terminal/Progress.test.ts +0 -98
- package/tests/service/printer/terminal/Spinner.test.ts +0 -92
- package/tests/service/prompter/DefaultPrompterService.test.ts +0 -598
- package/tests/service/prompter/PrompterServiceProvider.test.ts +0 -41
- package/tests/service/prompter/command/NoPromptCommand.test.ts +0 -58
- package/tests/service/prompter/prompt/PromptContext.test.ts +0 -61
- package/tests/service/shutdown/ShutdownServiceProvider.test.ts +0 -13
- package/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.ts +0 -101
- package/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.ts +0 -37
- package/tests/service/tableGenerator/DefaultTableGeneratorService.test.ts +0 -342
- package/tests/service/tableGenerator/TableGeneratorServiceProvider.test.ts +0 -47
- package/tests/service/treePrinter/DefaultTreePrinterService.test.ts +0 -142
- package/tests/service/treePrinter/TreePrinterServiceProvider.test.ts +0 -51
- package/tests/terminal/ImageRenderer.test.ts +0 -152
- package/tests/terminal/PngDecoder.test.ts +0 -219
- package/tests/terminal/supportsHyperlinks.test.ts +0 -149
- package/tests/util/configHelper.test.ts +0 -193
- package/tests/util/envVarHelper.test.ts +0 -254
- package/tests/util/logger.test.ts +0 -56
- package/tsconfig.json +0 -32
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import process from "node:process";
|
|
2
|
-
import { describe, expect, test } from "bun:test";
|
|
3
|
-
import PowerShellShellHandler from "../../../../src/service/completion/shell/powershell.ts";
|
|
4
|
-
|
|
5
|
-
describe("PowerShellShellHandler", () => {
|
|
6
|
-
const handler = new PowerShellShellHandler();
|
|
7
|
-
|
|
8
|
-
test("getDefaultConfigPath returns PowerShell profile path", () => {
|
|
9
|
-
const path = handler.getDefaultConfigPath();
|
|
10
|
-
expect(path).toContain("Microsoft.PowerShell_profile.ps1");
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
test("getBootstrapScript generates Register-ArgumentCompleter", () => {
|
|
14
|
-
const script = handler.getBootstrapScript("mycli");
|
|
15
|
-
expect(script).toContain("Register-ArgumentCompleter");
|
|
16
|
-
expect(script).toContain("-Native");
|
|
17
|
-
expect(script).toContain("-CommandName mycli");
|
|
18
|
-
expect(script).toContain("mycli completions:complete powershell");
|
|
19
|
-
expect(script).toContain("CompletionResult");
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
test("formatCompletions outputs one value per line", () => {
|
|
23
|
-
const result = handler.formatCompletions([
|
|
24
|
-
{ value: "help", description: "Display help" },
|
|
25
|
-
{ value: "version" },
|
|
26
|
-
]);
|
|
27
|
-
expect(result).toEqual("help\nversion");
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
test("parseCompletionContext extracts line and cursor position", () => {
|
|
31
|
-
const ctx = handler.parseCompletionContext(["mycli he", "8"]);
|
|
32
|
-
expect(ctx.line).toEqual("mycli he");
|
|
33
|
-
expect(ctx.cursorPosition).toEqual(8);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
describe("validateEnvironment", () => {
|
|
37
|
-
test("returns a boolean", async () => {
|
|
38
|
-
// validateEnvironment tries pwsh first, then powershell fallback
|
|
39
|
-
// Result depends on whether either is installed
|
|
40
|
-
const result = await handler.validateEnvironment();
|
|
41
|
-
expect(typeof result).toBe("boolean");
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
describe("getDefaultConfigPath platform handling", () => {
|
|
46
|
-
test("path contains Microsoft.PowerShell_profile.ps1", () => {
|
|
47
|
-
const configPath = handler.getDefaultConfigPath();
|
|
48
|
-
expect(configPath).toContain("Microsoft.PowerShell_profile.ps1");
|
|
49
|
-
// On non-win32 platforms, path should contain .config/powershell
|
|
50
|
-
if (process.platform !== "win32") {
|
|
51
|
-
expect(configPath).toContain(".config");
|
|
52
|
-
expect(configPath).toContain("powershell");
|
|
53
|
-
} else {
|
|
54
|
-
expect(configPath).toContain("Documents");
|
|
55
|
-
expect(configPath).toContain("PowerShell");
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
});
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import process from "node:process";
|
|
2
|
-
import path from "node:path";
|
|
3
|
-
import { describe, expect, test } from "bun:test";
|
|
4
|
-
import ZshShellHandler from "../../../../src/service/completion/shell/zsh.ts";
|
|
5
|
-
|
|
6
|
-
describe("ZshShellHandler", () => {
|
|
7
|
-
const handler = new ZshShellHandler();
|
|
8
|
-
|
|
9
|
-
test("getDefaultConfigPath returns ~/.zshrc", () => {
|
|
10
|
-
const configPath = handler.getDefaultConfigPath();
|
|
11
|
-
expect(configPath).toEndWith(path.sep + ".zshrc");
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
test("getBootstrapScript generates correct function", () => {
|
|
15
|
-
const script = handler.getBootstrapScript("mycli");
|
|
16
|
-
expect(script).toContain("_mycli_completions()");
|
|
17
|
-
expect(script).toContain("mycli completions:complete zsh");
|
|
18
|
-
expect(script).toContain("compdef _mycli_completions mycli");
|
|
19
|
-
expect(script).toContain("_describe");
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
test("formatCompletions includes descriptions with colon separator", () => {
|
|
23
|
-
const result = handler.formatCompletions([
|
|
24
|
-
{ value: "help", description: "Display help" },
|
|
25
|
-
{ value: "version" },
|
|
26
|
-
]);
|
|
27
|
-
expect(result).toEqual("help:Display help\nversion");
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
test("parseCompletionContext extracts line and cursor position", () => {
|
|
31
|
-
const ctx = handler.parseCompletionContext(["mycli he", "8"]);
|
|
32
|
-
expect(ctx.line).toEqual("mycli he");
|
|
33
|
-
expect(ctx.cursorPosition).toEqual(8);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
describe("validateEnvironment", () => {
|
|
37
|
-
const originalShell = process.env.SHELL;
|
|
38
|
-
|
|
39
|
-
test("returns true when SHELL ends with /zsh", async () => {
|
|
40
|
-
process.env.SHELL = "/bin/zsh";
|
|
41
|
-
const result = await handler.validateEnvironment();
|
|
42
|
-
expect(result).toBe(true);
|
|
43
|
-
process.env.SHELL = originalShell;
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
test("falls back to spawning zsh --version when SHELL is not zsh", async () => {
|
|
47
|
-
process.env.SHELL = "/bin/bash";
|
|
48
|
-
const result = await handler.validateEnvironment();
|
|
49
|
-
expect(typeof result).toBe("boolean");
|
|
50
|
-
process.env.SHELL = originalShell;
|
|
51
|
-
});
|
|
52
|
-
|
|
53
|
-
test("falls back to spawning zsh --version when SHELL is empty", async () => {
|
|
54
|
-
process.env.SHELL = "";
|
|
55
|
-
const result = await handler.validateEnvironment();
|
|
56
|
-
expect(typeof result).toBe("boolean");
|
|
57
|
-
process.env.SHELL = originalShell;
|
|
58
|
-
});
|
|
59
|
-
});
|
|
60
|
-
});
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
import process from "node:process";
|
|
2
|
-
import fs from "node:fs/promises";
|
|
3
|
-
import { tmpdir } from "node:os";
|
|
4
|
-
import path from "node:path";
|
|
5
|
-
import { describe, expect, test } from "bun:test";
|
|
6
|
-
import ConfigurationServiceProvider from "../../../src/service/configuration/ConfigurationServiceProvider.ts";
|
|
7
|
-
import DefaultContext from "../../../src/runtime/DefaultContext.ts";
|
|
8
|
-
import { getCLIConfig } from "../../fixtures/CLIConfig.ts";
|
|
9
|
-
import { ArgumentValueTypeName } from "../../../src/api/argument/ArgumentValueTypes.ts";
|
|
10
|
-
import type KeyValueService from "../../../src/api/service/core/KeyValueService.ts";
|
|
11
|
-
import type SubCommand from "../../../src/api/command/SubCommand.ts";
|
|
12
|
-
|
|
13
|
-
function getConfig() {
|
|
14
|
-
return {
|
|
15
|
-
defaults: {
|
|
16
|
-
command1: {
|
|
17
|
-
arg1: [1, 2],
|
|
18
|
-
arg2: {
|
|
19
|
-
arg3: "foo",
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
command2: {
|
|
23
|
-
arg4: true,
|
|
24
|
-
},
|
|
25
|
-
},
|
|
26
|
-
"key-values": {
|
|
27
|
-
commands: {
|
|
28
|
-
command1: {
|
|
29
|
-
foo1: "bar1",
|
|
30
|
-
foo2: "bar2",
|
|
31
|
-
},
|
|
32
|
-
command2: {
|
|
33
|
-
foo1: "bar3",
|
|
34
|
-
},
|
|
35
|
-
},
|
|
36
|
-
services: {
|
|
37
|
-
"service-id-1": {
|
|
38
|
-
foo1: "bar",
|
|
39
|
-
},
|
|
40
|
-
"service-id-2": {
|
|
41
|
-
foo2: "bar2",
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
function getSubCommand(): SubCommand {
|
|
49
|
-
return {
|
|
50
|
-
name: "command2",
|
|
51
|
-
enableConfiguration: true,
|
|
52
|
-
options: [
|
|
53
|
-
{
|
|
54
|
-
name: "arg4",
|
|
55
|
-
type: ArgumentValueTypeName.BOOLEAN,
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
positionals: [],
|
|
59
|
-
execute: async (): Promise<void> => {},
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
describe("ConfigurationServiceProvider tests", () => {
|
|
63
|
-
test("ConfigurationServiceProvider getServiceInfo works", async () => {
|
|
64
|
-
const configurationServiceProvider = new ConfigurationServiceProvider(100, false, true);
|
|
65
|
-
const serviceInfo = await configurationServiceProvider.getServiceInfo(getCLIConfig());
|
|
66
|
-
expect(serviceInfo.commands.length).toEqual(2);
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
test("ConfigurationServiceProvider initService with no config works", async () => {
|
|
70
|
-
const configurationServiceProvider = new ConfigurationServiceProvider(100);
|
|
71
|
-
|
|
72
|
-
const context = new DefaultContext(getCLIConfig());
|
|
73
|
-
|
|
74
|
-
await configurationServiceProvider.initService(context);
|
|
75
|
-
|
|
76
|
-
expect(configurationServiceProvider.getConfigString()).toEqual("{}");
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
test("ConfigurationServiceProvider initService with config works", async () => {
|
|
80
|
-
const configurationServiceProvider = new ConfigurationServiceProvider(100, false, true);
|
|
81
|
-
|
|
82
|
-
const context = new DefaultContext(getCLIConfig());
|
|
83
|
-
|
|
84
|
-
const configFolder = await fs.mkdtemp(path.join(tmpdir(), "config-"));
|
|
85
|
-
const configLocation = path.join(configFolder, "config.json");
|
|
86
|
-
configurationServiceProvider.setConfigLocation(configLocation);
|
|
87
|
-
|
|
88
|
-
const config = getConfig();
|
|
89
|
-
|
|
90
|
-
await fs.writeFile(configLocation, JSON.stringify(config));
|
|
91
|
-
|
|
92
|
-
await configurationServiceProvider.initService(context);
|
|
93
|
-
|
|
94
|
-
expect(configurationServiceProvider.getConfigString()).toEqual(JSON.stringify(config, null, 2));
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
test("getDefaultArgumentValues works with config", async () => {
|
|
98
|
-
const configurationServiceProvider = new ConfigurationServiceProvider(100, false, true);
|
|
99
|
-
|
|
100
|
-
const context = new DefaultContext(getCLIConfig());
|
|
101
|
-
|
|
102
|
-
const configFolder = await fs.mkdtemp(path.join(tmpdir(), "config-"));
|
|
103
|
-
const configLocation = path.join(configFolder, "config.json");
|
|
104
|
-
configurationServiceProvider.setConfigLocation(configLocation);
|
|
105
|
-
|
|
106
|
-
const config = getConfig();
|
|
107
|
-
|
|
108
|
-
await fs.writeFile(configLocation, JSON.stringify(config));
|
|
109
|
-
|
|
110
|
-
const subCommand = getSubCommand();
|
|
111
|
-
|
|
112
|
-
await configurationServiceProvider.initService(context);
|
|
113
|
-
await configurationServiceProvider.getServiceInfo(getCLIConfig());
|
|
114
|
-
|
|
115
|
-
expect(
|
|
116
|
-
await configurationServiceProvider.getDefaultArgumentValues(getCLIConfig(), subCommand),
|
|
117
|
-
).toEqual(config.defaults.command2);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
test("getDefaultArgumentValues works with env vars", async () => {
|
|
121
|
-
try {
|
|
122
|
-
const configurationServiceProvider = new ConfigurationServiceProvider(100, true, true);
|
|
123
|
-
|
|
124
|
-
const context = new DefaultContext(getCLIConfig());
|
|
125
|
-
|
|
126
|
-
process.env["FOO_COMMAND2_ARG4"] = "true";
|
|
127
|
-
|
|
128
|
-
const subCommand = getSubCommand();
|
|
129
|
-
|
|
130
|
-
await configurationServiceProvider.initService(context);
|
|
131
|
-
await configurationServiceProvider.getServiceInfo(getCLIConfig());
|
|
132
|
-
|
|
133
|
-
expect(
|
|
134
|
-
await configurationServiceProvider.getDefaultArgumentValues(getCLIConfig(), subCommand),
|
|
135
|
-
).toEqual({ arg4: "true" });
|
|
136
|
-
} finally {
|
|
137
|
-
delete process.env["FOO_COMMAND2_ARG4"];
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
test("setCommandKeyValueScope works", async () => {
|
|
142
|
-
const configurationServiceProvider = new ConfigurationServiceProvider(100, false, true, true);
|
|
143
|
-
const cliConfig = getCLIConfig();
|
|
144
|
-
const context = new DefaultContext(cliConfig);
|
|
145
|
-
|
|
146
|
-
const configFolder = await fs.mkdtemp(path.join(tmpdir(), "config-"));
|
|
147
|
-
const configLocation = path.join(configFolder, "config.json");
|
|
148
|
-
configurationServiceProvider.setConfigLocation(configLocation);
|
|
149
|
-
|
|
150
|
-
const config = getConfig();
|
|
151
|
-
|
|
152
|
-
await fs.writeFile(configLocation, JSON.stringify(config));
|
|
153
|
-
|
|
154
|
-
const serviceInfo = await configurationServiceProvider.getServiceInfo(cliConfig);
|
|
155
|
-
|
|
156
|
-
await configurationServiceProvider.initService(context);
|
|
157
|
-
|
|
158
|
-
const keyValueService = serviceInfo.service! as KeyValueService;
|
|
159
|
-
|
|
160
|
-
configurationServiceProvider.setCommandKeyValueScope("command2");
|
|
161
|
-
|
|
162
|
-
expect(await keyValueService.hasKey("foo2")).toBeFalse();
|
|
163
|
-
|
|
164
|
-
await configurationServiceProvider.clearKeyValueScope();
|
|
165
|
-
configurationServiceProvider.setCommandKeyValueScope("command1");
|
|
166
|
-
|
|
167
|
-
expect(await keyValueService.getKey("foo2")).toEqual("bar2");
|
|
168
|
-
|
|
169
|
-
await configurationServiceProvider.clearKeyValueScope();
|
|
170
|
-
|
|
171
|
-
expect(keyValueService.hasKey("foo2")).rejects.toThrow();
|
|
172
|
-
});
|
|
173
|
-
|
|
174
|
-
test("setServiceKeyValueScope works", async () => {
|
|
175
|
-
const configurationServiceProvider = new ConfigurationServiceProvider(100, false, true, true);
|
|
176
|
-
const cliConfig = getCLIConfig();
|
|
177
|
-
const context = new DefaultContext(cliConfig);
|
|
178
|
-
|
|
179
|
-
const configFolder = await fs.mkdtemp(path.join(tmpdir(), "config-"));
|
|
180
|
-
const configLocation = path.join(configFolder, "config.json");
|
|
181
|
-
configurationServiceProvider.setConfigLocation(configLocation);
|
|
182
|
-
|
|
183
|
-
const config = getConfig();
|
|
184
|
-
|
|
185
|
-
await fs.writeFile(configLocation, JSON.stringify(config));
|
|
186
|
-
|
|
187
|
-
const serviceInfo = await configurationServiceProvider.getServiceInfo(cliConfig);
|
|
188
|
-
|
|
189
|
-
await configurationServiceProvider.initService(context);
|
|
190
|
-
|
|
191
|
-
const keyValueService = serviceInfo.service! as KeyValueService;
|
|
192
|
-
|
|
193
|
-
configurationServiceProvider.setServiceKeyValueScope("service-id-2");
|
|
194
|
-
|
|
195
|
-
expect(await keyValueService.hasKey("foo1")).toBeFalse();
|
|
196
|
-
|
|
197
|
-
await configurationServiceProvider.clearKeyValueScope();
|
|
198
|
-
configurationServiceProvider.setServiceKeyValueScope("service-id-1");
|
|
199
|
-
|
|
200
|
-
expect(await keyValueService.getKey("foo1")).toEqual("bar");
|
|
201
|
-
|
|
202
|
-
await configurationServiceProvider.clearKeyValueScope();
|
|
203
|
-
|
|
204
|
-
expect(keyValueService.hasKey("foo1")).rejects.toThrow();
|
|
205
|
-
});
|
|
206
|
-
|
|
207
|
-
test("secretServiceEnabled requires configEnabled", () => {
|
|
208
|
-
expect(() => new ConfigurationServiceProvider(100, false, false, false, true)).toThrow(
|
|
209
|
-
"configEnabled must be true",
|
|
210
|
-
);
|
|
211
|
-
});
|
|
212
|
-
});
|
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { describe, expect, mock, test } from "bun:test";
|
|
2
|
-
import DefaultKeyValueService from "../../../src/service/configuration/DefaultKeyValueService.ts";
|
|
3
|
-
import DefaultSecretService from "../../../src/service/configuration/DefaultSecretService.ts";
|
|
4
|
-
|
|
5
|
-
function createMockSecretsApi() {
|
|
6
|
-
return {
|
|
7
|
-
get: mock(() => Promise.resolve(null as string | null)),
|
|
8
|
-
set: mock(() => Promise.resolve()),
|
|
9
|
-
delete: mock(() => Promise.resolve(true)),
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
describe("DefaultKeyValueService tests", () => {
|
|
14
|
-
test("Setting data works", async () => {
|
|
15
|
-
const keyValueService = new DefaultKeyValueService();
|
|
16
|
-
|
|
17
|
-
keyValueService.setKeyValueData(new Map([["foo", "bar"]]));
|
|
18
|
-
|
|
19
|
-
expect(await keyValueService.hasKey("foo")).toBeTrue();
|
|
20
|
-
expect(await keyValueService.getKey("foo")).toEqual("bar");
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
test("Cannot set data without clearing", () => {
|
|
24
|
-
const keyValueService = new DefaultKeyValueService();
|
|
25
|
-
|
|
26
|
-
keyValueService.setKeyValueData(new Map());
|
|
27
|
-
expect(() => keyValueService.setKeyValueData(new Map())).toThrow();
|
|
28
|
-
|
|
29
|
-
keyValueService.clearKeyValueData();
|
|
30
|
-
keyValueService.setKeyValueData(new Map());
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
test("Cannot modify data before setting it", async () => {
|
|
34
|
-
const keyValueService = new DefaultKeyValueService();
|
|
35
|
-
|
|
36
|
-
expect(keyValueService.setKey("foo", "bar")).rejects.toThrow();
|
|
37
|
-
expect(keyValueService.hasKey("foo")).rejects.toThrow();
|
|
38
|
-
expect(keyValueService.getKey("foo")).rejects.toThrow();
|
|
39
|
-
expect(keyValueService.deleteKey("foo")).rejects.toThrow();
|
|
40
|
-
|
|
41
|
-
keyValueService.setKeyValueData(new Map());
|
|
42
|
-
|
|
43
|
-
await keyValueService.setKey("foo", "bar");
|
|
44
|
-
expect(await keyValueService.hasKey("foo")).toBeTrue();
|
|
45
|
-
expect(await keyValueService.getKey("foo")).toEqual("bar");
|
|
46
|
-
await keyValueService.deleteKey("foo");
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
test("Dirty state is managed correctly", async () => {
|
|
50
|
-
const keyValueService = new DefaultKeyValueService();
|
|
51
|
-
|
|
52
|
-
expect(keyValueService.isDirty()).toBeFalse();
|
|
53
|
-
|
|
54
|
-
keyValueService.setKeyValueData(new Map());
|
|
55
|
-
|
|
56
|
-
expect(keyValueService.isDirty()).toBeFalse();
|
|
57
|
-
|
|
58
|
-
await keyValueService.setKey("foo", "bar");
|
|
59
|
-
|
|
60
|
-
expect(keyValueService.isDirty()).toBeTrue();
|
|
61
|
-
|
|
62
|
-
keyValueService.clearKeyValueData();
|
|
63
|
-
|
|
64
|
-
expect(keyValueService.isDirty()).toBeFalse();
|
|
65
|
-
|
|
66
|
-
keyValueService.setKeyValueData(new Map([["foo", "bar"]]));
|
|
67
|
-
|
|
68
|
-
expect(keyValueService.isDirty()).toBeFalse();
|
|
69
|
-
|
|
70
|
-
await keyValueService.deleteKey("foo");
|
|
71
|
-
|
|
72
|
-
expect(keyValueService.isDirty()).toBeTrue();
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
test("setKey with isSecret=true throws without secret service", async () => {
|
|
76
|
-
const keyValueService = new DefaultKeyValueService();
|
|
77
|
-
keyValueService.setKeyValueData(new Map());
|
|
78
|
-
|
|
79
|
-
await expect(keyValueService.setKey("token", "secret", true)).rejects.toThrow(
|
|
80
|
-
"no secret service",
|
|
81
|
-
);
|
|
82
|
-
});
|
|
83
|
-
|
|
84
|
-
test("setKey with isSecret=true stores sentinel", async () => {
|
|
85
|
-
const mockApi = createMockSecretsApi();
|
|
86
|
-
const secretService = new DefaultSecretService("test-cli", mockApi);
|
|
87
|
-
secretService.setScope("command_test");
|
|
88
|
-
const keyValueService = new DefaultKeyValueService(secretService);
|
|
89
|
-
keyValueService.setKeyValueData(new Map());
|
|
90
|
-
|
|
91
|
-
await keyValueService.setKey("token", "my-secret", true);
|
|
92
|
-
|
|
93
|
-
expect(await keyValueService.hasKey("token")).toBeTrue();
|
|
94
|
-
expect(keyValueService.isDirty()).toBeTrue();
|
|
95
|
-
expect(mockApi.set).toHaveBeenCalledTimes(1);
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
test("getKey resolves secret sentinel", async () => {
|
|
99
|
-
const mockApi = createMockSecretsApi();
|
|
100
|
-
const secretService = new DefaultSecretService("test-cli", mockApi);
|
|
101
|
-
secretService.setScope("command_test");
|
|
102
|
-
const keyValueService = new DefaultKeyValueService(secretService);
|
|
103
|
-
keyValueService.setKeyValueData(new Map([["token", "__SECRET__:command_test_token"]]));
|
|
104
|
-
|
|
105
|
-
mockApi.get.mockResolvedValueOnce("resolved-secret");
|
|
106
|
-
const value = await keyValueService.getKey("token");
|
|
107
|
-
expect(value).toEqual("resolved-secret");
|
|
108
|
-
expect(mockApi.get).toHaveBeenCalledWith({
|
|
109
|
-
service: "test_cli",
|
|
110
|
-
name: "command_test_token",
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
test("getKey throws when secret not found in OS store", async () => {
|
|
115
|
-
const mockApi = createMockSecretsApi();
|
|
116
|
-
const secretService = new DefaultSecretService("test-cli", mockApi);
|
|
117
|
-
secretService.setScope("command_test");
|
|
118
|
-
const keyValueService = new DefaultKeyValueService(secretService);
|
|
119
|
-
keyValueService.setKeyValueData(new Map([["token", "__SECRET__:command_test_token"]]));
|
|
120
|
-
|
|
121
|
-
mockApi.get.mockResolvedValueOnce(null);
|
|
122
|
-
await expect(keyValueService.getKey("token")).rejects.toThrow("Secret not found");
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
test("getKey with sentinel throws without secret service", async () => {
|
|
126
|
-
const keyValueService = new DefaultKeyValueService();
|
|
127
|
-
keyValueService.setKeyValueData(new Map([["token", "__SECRET__:command_test_token"]]));
|
|
128
|
-
|
|
129
|
-
await expect(keyValueService.getKey("token")).rejects.toThrow("no secret service");
|
|
130
|
-
});
|
|
131
|
-
|
|
132
|
-
test("deleteKey removes secret from OS store", async () => {
|
|
133
|
-
const mockApi = createMockSecretsApi();
|
|
134
|
-
const secretService = new DefaultSecretService("test-cli", mockApi);
|
|
135
|
-
secretService.setScope("command_test");
|
|
136
|
-
const keyValueService = new DefaultKeyValueService(secretService);
|
|
137
|
-
keyValueService.setKeyValueData(new Map([["token", "__SECRET__:command_test_token"]]));
|
|
138
|
-
|
|
139
|
-
await keyValueService.deleteKey("token");
|
|
140
|
-
expect(mockApi.delete).toHaveBeenCalledWith({
|
|
141
|
-
service: "test_cli",
|
|
142
|
-
name: "command_test_token",
|
|
143
|
-
});
|
|
144
|
-
expect(await keyValueService.hasKey("token")).toBeFalse();
|
|
145
|
-
expect(keyValueService.isDirty()).toBeTrue();
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
test("deleteKey works for non-secret values", async () => {
|
|
149
|
-
const keyValueService = new DefaultKeyValueService();
|
|
150
|
-
keyValueService.setKeyValueData(new Map([["foo", "bar"]]));
|
|
151
|
-
|
|
152
|
-
await keyValueService.deleteKey("foo");
|
|
153
|
-
expect(await keyValueService.hasKey("foo")).toBeFalse();
|
|
154
|
-
});
|
|
155
|
-
});
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { afterEach, beforeEach, describe, expect, mock, test } from "bun:test";
|
|
2
|
-
import DefaultSecretService from "../../../src/service/configuration/DefaultSecretService.ts";
|
|
3
|
-
|
|
4
|
-
function createMockSecretsApi() {
|
|
5
|
-
return {
|
|
6
|
-
get: mock(() => Promise.resolve(null as string | null)),
|
|
7
|
-
set: mock(() => Promise.resolve()),
|
|
8
|
-
delete: mock(() => Promise.resolve(true)),
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
describe("DefaultSecretService tests", () => {
|
|
13
|
-
let service: DefaultSecretService;
|
|
14
|
-
let mockApi: ReturnType<typeof createMockSecretsApi>;
|
|
15
|
-
|
|
16
|
-
beforeEach(() => {
|
|
17
|
-
mockApi = createMockSecretsApi();
|
|
18
|
-
service = new DefaultSecretService("my-test-cli", mockApi);
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
afterEach(() => {
|
|
22
|
-
service.clearScope();
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
test("Constructor sanitizes service name", async () => {
|
|
26
|
-
const api = createMockSecretsApi();
|
|
27
|
-
const s = new DefaultSecretService("my-cool-cli!", api);
|
|
28
|
-
s.setScope("command_test");
|
|
29
|
-
await s.setSecret("key", "value");
|
|
30
|
-
expect(api.set).toHaveBeenCalledWith({
|
|
31
|
-
service: "my_cool_cli_",
|
|
32
|
-
name: "command_test_key",
|
|
33
|
-
value: "value",
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
|
|
37
|
-
test("Constructor throws if sanitized service name exceeds 255 chars", () => {
|
|
38
|
-
const api = createMockSecretsApi();
|
|
39
|
-
expect(() => new DefaultSecretService("a".repeat(256), api)).toThrow("exceeds 255 characters");
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
test("setSecret throws without scope", async () => {
|
|
43
|
-
await expect(service.setSecret("key", "value")).rejects.toThrow("without a scope");
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
test("setSecret constructs correct name and returns it", async () => {
|
|
47
|
-
service.setScope("command_mycommand");
|
|
48
|
-
const name = await service.setSecret("token", "secret123");
|
|
49
|
-
expect(name).toEqual("command_mycommand_token");
|
|
50
|
-
expect(mockApi.set).toHaveBeenCalledWith({
|
|
51
|
-
service: "my_test_cli",
|
|
52
|
-
name: "command_mycommand_token",
|
|
53
|
-
value: "secret123",
|
|
54
|
-
});
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
test("setSecret sanitizes scope and key", async () => {
|
|
58
|
-
service.setScope("command_my-cmd");
|
|
59
|
-
const name = await service.setSecret("my-key!", "value");
|
|
60
|
-
expect(name).toEqual("command_my_cmd_my_key_");
|
|
61
|
-
expect(mockApi.set).toHaveBeenCalledWith({
|
|
62
|
-
service: "my_test_cli",
|
|
63
|
-
name: "command_my_cmd_my_key_",
|
|
64
|
-
value: "value",
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
test("setSecret throws if name exceeds 255 chars", async () => {
|
|
69
|
-
service.setScope("command_test");
|
|
70
|
-
await expect(service.setSecret("a".repeat(250), "value")).rejects.toThrow(
|
|
71
|
-
"exceeds 255 characters",
|
|
72
|
-
);
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
test("setSecret throws if value exceeds 2047 bytes", async () => {
|
|
76
|
-
service.setScope("command_test");
|
|
77
|
-
await expect(service.setSecret("key", "a".repeat(2048))).rejects.toThrow("exceeds 2047 bytes");
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
test("getSecret delegates to secrets API", async () => {
|
|
81
|
-
mockApi.get.mockResolvedValueOnce("secret_value");
|
|
82
|
-
const result = await service.getSecret("command_test_key");
|
|
83
|
-
expect(result).toEqual("secret_value");
|
|
84
|
-
expect(mockApi.get).toHaveBeenCalledWith({
|
|
85
|
-
service: "my_test_cli",
|
|
86
|
-
name: "command_test_key",
|
|
87
|
-
});
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
test("getSecret returns null when not found", async () => {
|
|
91
|
-
mockApi.get.mockResolvedValueOnce(null);
|
|
92
|
-
const result = await service.getSecret("nonexistent");
|
|
93
|
-
expect(result).toBeNull();
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
test("deleteSecret delegates to secrets API", async () => {
|
|
97
|
-
mockApi.delete.mockResolvedValueOnce(true);
|
|
98
|
-
const result = await service.deleteSecret("command_test_key");
|
|
99
|
-
expect(result).toBeTrue();
|
|
100
|
-
expect(mockApi.delete).toHaveBeenCalledWith({
|
|
101
|
-
service: "my_test_cli",
|
|
102
|
-
name: "command_test_key",
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
test("deleteSecret returns false when not found", async () => {
|
|
107
|
-
mockApi.delete.mockResolvedValueOnce(false);
|
|
108
|
-
const result = await service.deleteSecret("nonexistent");
|
|
109
|
-
expect(result).toBeFalse();
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
test("hasSecret returns true when secret exists", async () => {
|
|
113
|
-
mockApi.get.mockResolvedValueOnce("some_value");
|
|
114
|
-
const result = await service.hasSecret("command_test_key");
|
|
115
|
-
expect(result).toBeTrue();
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
test("hasSecret returns false when secret does not exist", async () => {
|
|
119
|
-
mockApi.get.mockResolvedValueOnce(null);
|
|
120
|
-
const result = await service.hasSecret("nonexistent");
|
|
121
|
-
expect(result).toBeFalse();
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
test("clearScope resets scope", async () => {
|
|
125
|
-
service.setScope("command_test");
|
|
126
|
-
service.clearScope();
|
|
127
|
-
await expect(service.setSecret("key", "value")).rejects.toThrow("without a scope");
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
test("setScope updates scope for subsequent calls", async () => {
|
|
131
|
-
service.setScope("command_cmd1");
|
|
132
|
-
let name = await service.setSecret("key", "value1");
|
|
133
|
-
expect(name).toEqual("command_cmd1_key");
|
|
134
|
-
|
|
135
|
-
service.clearScope();
|
|
136
|
-
service.setScope("service_svc1");
|
|
137
|
-
name = await service.setSecret("key", "value2");
|
|
138
|
-
expect(name).toEqual("service_svc1_key");
|
|
139
|
-
});
|
|
140
|
-
});
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from "bun:test";
|
|
2
|
-
import DefaultContext from "../../../../src/runtime/DefaultContext.ts";
|
|
3
|
-
import ConfigCommand from "../../../../src/service/configuration/command/ConfigCommand.ts";
|
|
4
|
-
import ConfigurationServiceProvider from "../../../../src/service/configuration/ConfigurationServiceProvider.ts";
|
|
5
|
-
import { getCLIConfig } from "../../../fixtures/CLIConfig.ts";
|
|
6
|
-
|
|
7
|
-
describe("ConfigCommand tests", () => {
|
|
8
|
-
test("has correct name and description", () => {
|
|
9
|
-
const configProvider = new ConfigurationServiceProvider(90, false, true);
|
|
10
|
-
const command = new ConfigCommand(configProvider, 90);
|
|
11
|
-
|
|
12
|
-
expect(command.name).toEqual("config");
|
|
13
|
-
expect(command.description).toEqual("Set the configuration file location");
|
|
14
|
-
expect(command.enableConfiguration).toEqual(true);
|
|
15
|
-
expect(command.executePriority).toEqual(90);
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
test("execute sets config location on the provider", async () => {
|
|
19
|
-
const configProvider = new ConfigurationServiceProvider(90, false, true);
|
|
20
|
-
const cliConfig = getCLIConfig();
|
|
21
|
-
const context = new DefaultContext(cliConfig);
|
|
22
|
-
|
|
23
|
-
const command = new ConfigCommand(configProvider, 90);
|
|
24
|
-
|
|
25
|
-
await command.execute(context, "/tmp/my-config.json");
|
|
26
|
-
|
|
27
|
-
expect(configProvider.configLocation).toEqual("/tmp/my-config.json");
|
|
28
|
-
});
|
|
29
|
-
});
|