@flowscripter/dynamic-cli-framework 1.7.3 → 1.7.5
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/cli-plugin.ts +1 -1
- package/dist/cli-plugin.d.ts +1 -1
- package/dist/cli-plugin.d.ts.map +1 -1
- package/dist/cli-plugin.js +25 -247
- package/dist/index.js +70 -105754
- package/dist/src/api/BaseCLIFeatureOptions.js +0 -0
- package/dist/src/api/CLI.js +0 -0
- package/dist/src/api/CLIConfig.js +0 -0
- package/dist/src/api/Context.js +0 -0
- package/dist/src/api/RunResult.js +73 -0
- package/dist/src/api/argument/Argument.js +0 -0
- package/dist/src/api/argument/ArgumentValueTypes.js +18 -0
- package/dist/src/api/argument/ComplexOption.js +1 -0
- package/dist/src/api/argument/GlobalCommandArgument.js +0 -0
- package/dist/src/api/argument/Option.js +0 -0
- package/dist/src/api/argument/Positional.js +0 -0
- package/dist/src/api/argument/SubCommandArgument.js +1 -0
- package/dist/src/api/command/Command.js +0 -0
- package/dist/src/api/command/GlobalCommand.js +0 -0
- package/dist/src/api/command/GlobalModifierCommand.js +0 -0
- package/dist/src/api/command/GroupCommand.js +0 -0
- package/dist/src/api/command/SubCommand.js +0 -0
- package/dist/src/api/command/UsageExample.js +0 -0
- package/dist/src/api/plugin/CLIPlugin.js +2 -0
- package/dist/src/api/plugin/CommandFactory.js +7 -0
- package/dist/src/api/plugin/ServiceProviderFactory.js +7 -0
- package/dist/src/api/plugin/createCLIPlugin.js +30 -0
- package/dist/src/api/service/ServiceProvider.js +0 -0
- package/dist/src/api/service/core/ArgumentPrompterService.js +1 -0
- package/dist/src/api/service/core/AsciiBannerGeneratorService.js +1 -0
- package/dist/src/api/service/core/CompletionService.js +8 -0
- package/dist/src/api/service/core/DataDumpGeneratorService.js +7 -0
- package/dist/src/api/service/core/ImagePrinterService.js +1 -0
- package/dist/src/api/service/core/KeyValueService.js +7 -0
- package/dist/src/api/service/core/PluginService.js +6 -0
- package/dist/src/api/service/core/PrettyPrinterService.js +1 -0
- package/dist/src/api/service/core/PrinterService.js +42 -0
- package/dist/src/api/service/core/PrompterService.js +10 -0
- package/dist/src/api/service/core/SecretService.js +0 -0
- package/dist/src/api/service/core/ShutdownService.js +1 -0
- package/dist/src/api/service/core/SyntaxHighlighterService.js +1 -0
- package/dist/src/api/service/core/Table.js +49 -0
- package/dist/src/api/service/core/TableGeneratorService.d.ts +1 -0
- package/dist/src/api/service/core/TableGeneratorService.d.ts.map +1 -1
- package/dist/src/api/service/core/TableGeneratorService.js +7 -0
- package/dist/src/api/service/core/TreePrinterService.js +1 -0
- package/dist/src/cli/BaseCLI.d.ts.map +1 -1
- package/dist/src/cli/BaseCLI.js +232 -0
- package/dist/src/cli/DefaultRuntimeCLI.js +20 -0
- package/dist/src/cli/DynamicPluginRuntimeCLI.js +50 -0
- package/dist/src/command/MultiCommandCliHelpCommand.js +238 -0
- package/dist/src/command/SingleCommandCliHelpCommand.js +104 -0
- package/dist/src/command/UsageCommand.js +16 -0
- package/dist/src/command/VersionCommand.js +13 -0
- package/dist/src/launcher.js +61 -0
- package/dist/src/runtime/DefaultContext.js +25 -0
- package/dist/src/runtime/argument/ArgumentTypeGuards.js +3 -0
- package/dist/src/runtime/command/CommandTypeGuards.js +12 -0
- package/dist/src/runtime/command/CommandValidator.js +371 -0
- package/dist/src/runtime/parser.js +105 -0
- package/dist/src/runtime/registry/CommandRegistry.js +0 -0
- package/dist/src/runtime/registry/DefaultCommandRegistry.js +190 -0
- package/dist/src/runtime/registry/DefaultServiceProviderRegistry.js +20 -0
- package/dist/src/runtime/registry/ServiceProviderRegistry.js +0 -0
- package/dist/src/runtime/runner.js +507 -0
- package/dist/src/runtime/scanner.js +244 -0
- package/dist/src/runtime/values/ValuePopulationResult.js +0 -0
- package/dist/src/runtime/values/argumentValueMerge.js +122 -0
- package/dist/src/runtime/values/argumentValueValidation.js +505 -0
- package/dist/src/runtime/values/globalCommandValuePopulation.js +67 -0
- package/dist/src/runtime/values/subCommandValuePopulation.js +549 -0
- package/dist/src/service/argumentPrompter/ArgumentPrompterServiceProvider.js +19 -0
- package/dist/src/service/argumentPrompter/DefaultArgumentPrompterService.js +197 -0
- package/dist/src/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.js +28 -0
- package/dist/src/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.js +233 -0
- package/dist/src/service/asciiBannerGenerator/standard.flf.json +3 -0
- package/dist/src/service/banner/BannerServiceProvider.js +60 -0
- package/dist/src/service/banner/command/NoBannerCommand.js +24 -0
- package/dist/src/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.js +51 -0
- package/dist/src/service/chiselAsciiBannerGenerator/chisel.flf.json +3 -0
- package/dist/src/service/completion/CompletionServiceProvider.d.ts +2 -1
- package/dist/src/service/completion/CompletionServiceProvider.d.ts.map +1 -1
- package/dist/src/service/completion/CompletionServiceProvider.js +159 -0
- package/dist/src/service/completion/DefaultCompletionService.js +279 -0
- package/dist/src/service/completion/command/CompletionCompleteSubCommand.d.ts +15 -0
- package/dist/src/service/completion/command/CompletionCompleteSubCommand.d.ts.map +1 -0
- package/dist/src/service/completion/command/CompletionCompleteSubCommand.js +37 -0
- package/dist/src/service/completion/command/CompletionGroupCommand.d.ts +14 -0
- package/dist/src/service/completion/command/CompletionGroupCommand.d.ts.map +1 -0
- package/dist/src/service/completion/command/CompletionGroupCommand.js +10 -0
- package/dist/src/service/completion/command/CompletionIntegrationSubCommand.d.ts +14 -0
- package/dist/src/service/completion/command/CompletionIntegrationSubCommand.d.ts.map +1 -0
- package/dist/src/service/completion/command/CompletionIntegrationSubCommand.js +67 -0
- package/dist/src/service/completion/shell/ShellHandler.js +0 -0
- package/dist/src/service/completion/shell/bash.js +39 -0
- package/dist/src/service/completion/shell/fish.js +35 -0
- package/dist/src/service/completion/shell/powershell.js +51 -0
- package/dist/src/service/completion/shell/zsh.js +42 -0
- package/dist/src/service/configuration/ConfigurationServiceProvider.js +482 -0
- package/dist/src/service/configuration/DefaultKeyValueService.js +80 -0
- package/dist/src/service/configuration/DefaultSecretService.js +60 -0
- package/dist/src/service/configuration/command/ConfigCommand.js +24 -0
- package/dist/src/service/configuration/command/DumpConfigCommand.js +18 -0
- package/dist/src/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.js +24 -0
- package/dist/src/service/dataDumpGenerator/DefaultDataDumpGeneratorService.js +59 -0
- package/dist/src/service/imagePrinter/DefaultImagePrinterService.js +10 -0
- package/dist/src/service/imagePrinter/ImagePrinterServiceProvider.js +20 -0
- package/dist/src/service/plugin/DefaultPluginService.js +21 -0
- package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts +1 -1
- package/dist/src/service/plugin/DefaultPluginServiceProvider.d.ts.map +1 -1
- package/dist/src/service/plugin/DefaultPluginServiceProvider.js +21 -0
- package/dist/src/service/plugin/command/PluginAddSubCommand.d.ts +17 -0
- package/dist/src/service/plugin/command/PluginAddSubCommand.d.ts.map +1 -0
- package/dist/src/service/plugin/command/PluginAddSubCommand.js +49 -0
- package/dist/src/service/plugin/command/PluginGroupCommand.d.ts +12 -0
- package/dist/src/service/plugin/command/PluginGroupCommand.d.ts.map +1 -0
- package/dist/src/service/plugin/command/PluginGroupCommand.js +21 -0
- package/dist/src/service/plugin/command/PluginListSubCommand.d.ts +12 -0
- package/dist/src/service/plugin/command/PluginListSubCommand.d.ts.map +1 -0
- package/dist/src/service/plugin/command/PluginListSubCommand.js +25 -0
- package/dist/src/service/plugin/command/PluginRemoveSubCommand.d.ts +17 -0
- package/dist/src/service/plugin/command/PluginRemoveSubCommand.d.ts.map +1 -0
- package/dist/src/service/plugin/command/PluginRemoveSubCommand.js +24 -0
- package/dist/src/service/plugin/command/PluginSearchSubCommand.d.ts +18 -0
- package/dist/src/service/plugin/command/PluginSearchSubCommand.d.ts.map +1 -0
- package/dist/src/service/plugin/command/PluginSearchSubCommand.js +34 -0
- package/dist/src/service/plugin/command/PluginUpgradeSubCommand.d.ts +12 -0
- package/dist/src/service/plugin/command/PluginUpgradeSubCommand.d.ts.map +1 -0
- package/dist/src/service/plugin/command/PluginUpgradeSubCommand.js +25 -0
- package/dist/src/service/plugin/command/getPluginId.d.ts +3 -0
- package/dist/src/service/plugin/command/getPluginId.d.ts.map +1 -0
- package/dist/src/service/plugin/command/getPluginId.js +3 -0
- package/dist/src/service/prettyPrinter/DefaultPrettyPrinterService.js +45 -0
- package/dist/src/service/prettyPrinter/PrettyPrinterServiceProvider.js +28 -0
- package/dist/src/service/printer/DefaultPrinterService.js +250 -0
- package/dist/src/service/printer/PrinterServiceProvider.js +43 -0
- package/dist/src/service/printer/command/DarkModeCommand.js +24 -0
- package/dist/src/service/printer/command/LogLevelCommand.js +41 -0
- package/dist/src/service/printer/command/NoColorCommand.js +24 -0
- package/dist/src/service/printer/command/NoHyperlinksCommand.js +21 -0
- package/dist/src/service/printer/terminal/Color.js +15 -0
- package/dist/src/service/printer/terminal/Progress.js +271 -0
- package/dist/src/service/printer/terminal/Spinner.js +83 -0
- package/dist/src/service/printer/terminal/Theme.js +26 -0
- package/dist/src/service/prompter/DefaultPrompterService.js +52 -0
- package/dist/src/service/prompter/PrompterServiceProvider.js +20 -0
- package/dist/src/service/prompter/command/NoPromptCommand.js +21 -0
- package/dist/src/service/prompter/prompt/PromptContext.js +22 -0
- package/dist/src/service/prompter/prompt/promptAcknowledge.js +19 -0
- package/dist/src/service/prompter/prompt/promptMultiSelect.js +74 -0
- package/dist/src/service/prompter/prompt/promptOpenUrl.js +70 -0
- package/dist/src/service/prompter/prompt/promptSingleSelect.js +73 -0
- package/dist/src/service/prompter/prompt/promptText.js +75 -0
- package/dist/src/service/prompter/prompt/promptToggle.js +21 -0
- package/dist/src/service/shutdown/DefaultShutdownService.js +16 -0
- package/dist/src/service/shutdown/ShutdownServiceProvider.js +60 -0
- package/dist/src/service/shutdown/ShutdownState.js +5 -0
- package/dist/src/service/syntaxHighlighter/DefaultSyntaxHighlighterService.js +54 -0
- package/dist/src/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.js +32 -0
- package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts +3 -1
- package/dist/src/service/tableGenerator/DefaultTableGeneratorService.d.ts.map +1 -1
- package/dist/src/service/tableGenerator/DefaultTableGeneratorService.js +344 -0
- package/dist/src/service/tableGenerator/TableGeneratorServiceProvider.js +26 -0
- package/dist/src/service/treePrinter/DefaultTreePrinterService.js +35 -0
- package/dist/src/service/treePrinter/TreePrinterServiceProvider.js +24 -0
- package/dist/src/terminal/Ansi.js +23 -0
- package/dist/src/terminal/ImageRenderer.d.ts.map +1 -1
- package/dist/src/terminal/ImageRenderer.js +166 -0
- package/dist/src/terminal/KeyReader.js +13 -0
- package/dist/src/terminal/PngDecoder.js +115 -0
- package/dist/src/terminal/Styler.js +0 -0
- package/dist/src/terminal/Terminal.js +0 -0
- package/dist/src/terminal/TtyKeyReader.js +87 -0
- package/dist/src/terminal/TtyStyler.js +55 -0
- package/dist/src/terminal/TtyTerminal.js +52 -0
- package/dist/src/terminal/supportsHyperlinks.js +95 -0
- package/dist/src/util/configHelper.js +61 -0
- package/dist/src/util/envVarHelper.js +216 -0
- package/dist/src/util/helpHelper.d.ts.map +1 -1
- package/dist/src/util/helpHelper.js +497 -0
- package/dist/src/util/logger.js +81 -0
- package/dist/src/util/runnerHelper.js +80 -0
- package/package.json +2 -2
- package/src/api/service/core/TableGeneratorService.ts +1 -0
- package/src/cli/BaseCLI.ts +4 -19
- package/src/service/completion/CompletionServiceProvider.ts +16 -3
- package/src/service/completion/command/CompletionCompleteSubCommand.ts +59 -0
- package/src/service/completion/command/CompletionGroupCommand.ts +21 -0
- package/src/{command/CompletionCommand.ts → service/completion/command/CompletionIntegrationSubCommand.ts} +12 -73
- package/src/service/completion/shell/bash.ts +1 -1
- package/src/service/completion/shell/fish.ts +1 -1
- package/src/service/completion/shell/powershell.ts +1 -1
- package/src/service/completion/shell/zsh.ts +1 -1
- package/src/service/plugin/DefaultPluginServiceProvider.ts +2 -2
- package/src/service/plugin/command/PluginAddSubCommand.ts +64 -0
- package/src/service/plugin/command/PluginGroupCommand.ts +27 -0
- package/src/service/plugin/command/PluginListSubCommand.ts +33 -0
- package/src/service/plugin/command/PluginRemoveSubCommand.ts +32 -0
- package/src/service/plugin/command/PluginSearchSubCommand.ts +42 -0
- package/src/service/plugin/command/PluginUpgradeSubCommand.ts +36 -0
- package/src/service/plugin/command/getPluginId.ts +5 -0
- package/src/service/tableGenerator/DefaultTableGeneratorService.ts +6 -1
- package/src/terminal/ImageRenderer.ts +7 -5
- package/src/util/helpHelper.ts +1 -2
- package/dist/src/command/CompletionCommand.d.ts +0 -32
- package/dist/src/command/CompletionCommand.d.ts.map +0 -1
- package/dist/src/command/PluginCommand.d.ts +0 -67
- package/dist/src/command/PluginCommand.d.ts.map +0 -1
- package/dist/tests/cli/BaseCLI.test.d.ts +0 -2
- package/dist/tests/cli/BaseCLI.test.d.ts.map +0 -1
- package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts +0 -2
- package/dist/tests/cli/DynamicPluginRuntimeCLI.test.d.ts.map +0 -1
- package/dist/tests/command/CompletionCommand.test.d.ts +0 -2
- package/dist/tests/command/CompletionCommand.test.d.ts.map +0 -1
- package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts +0 -2
- package/dist/tests/command/MultiCommandCliHelpCommand.test.d.ts.map +0 -1
- package/dist/tests/command/PluginCommand.test.d.ts +0 -2
- package/dist/tests/command/PluginCommand.test.d.ts.map +0 -1
- package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts +0 -2
- package/dist/tests/command/SingleCommandCliHelpCommand.test.d.ts.map +0 -1
- package/dist/tests/command/UsageCommand.test.d.ts +0 -2
- package/dist/tests/command/UsageCommand.test.d.ts.map +0 -1
- package/dist/tests/command/VersionCommand.test.d.ts +0 -2
- package/dist/tests/command/VersionCommand.test.d.ts.map +0 -1
- package/dist/tests/fixtures/CLIConfig.d.ts +0 -3
- package/dist/tests/fixtures/CLIConfig.d.ts.map +0 -1
- package/dist/tests/fixtures/Command.d.ts +0 -20
- package/dist/tests/fixtures/Command.d.ts.map +0 -1
- package/dist/tests/fixtures/CommandRegistry.d.ts +0 -4
- package/dist/tests/fixtures/CommandRegistry.d.ts.map +0 -1
- package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts +0 -10
- package/dist/tests/fixtures/ConfigurationServiceProvider.d.ts.map +0 -1
- package/dist/tests/fixtures/Context.d.ts +0 -4
- package/dist/tests/fixtures/Context.d.ts.map +0 -1
- package/dist/tests/fixtures/ServiceProviderRegistry.d.ts +0 -4
- package/dist/tests/fixtures/ServiceProviderRegistry.d.ts.map +0 -1
- package/dist/tests/fixtures/StreamString.d.ts +0 -10
- package/dist/tests/fixtures/StreamString.d.ts.map +0 -1
- package/dist/tests/fixtures/prettierPluginFoo.d.ts +0 -4
- package/dist/tests/fixtures/prettierPluginFoo.d.ts.map +0 -1
- package/dist/tests/fixtures/util.d.ts +0 -8
- package/dist/tests/fixtures/util.d.ts.map +0 -1
- package/dist/tests/runtime/DefaultContext.test.d.ts +0 -2
- package/dist/tests/runtime/DefaultContext.test.d.ts.map +0 -1
- package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts +0 -2
- package/dist/tests/runtime/argument/ArgumentTypeGuards.test.d.ts.map +0 -1
- package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts +0 -2
- package/dist/tests/runtime/command/CommandTypeGuards.test.d.ts.map +0 -1
- package/dist/tests/runtime/command/CommandValidator.test.d.ts +0 -2
- package/dist/tests/runtime/command/CommandValidator.test.d.ts.map +0 -1
- package/dist/tests/runtime/parser.test.d.ts +0 -2
- package/dist/tests/runtime/parser.test.d.ts.map +0 -1
- package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts +0 -2
- package/dist/tests/runtime/registry/DefaultCommandRegistry.test.d.ts.map +0 -1
- package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts +0 -2
- package/dist/tests/runtime/registry/DefaultServiceProviderRegistry.test.d.ts.map +0 -1
- package/dist/tests/runtime/runner.test.d.ts +0 -2
- package/dist/tests/runtime/runner.test.d.ts.map +0 -1
- package/dist/tests/runtime/scanner.test.d.ts +0 -2
- package/dist/tests/runtime/scanner.test.d.ts.map +0 -1
- package/dist/tests/runtime/values/argumentValueMerge.test.d.ts +0 -2
- package/dist/tests/runtime/values/argumentValueMerge.test.d.ts.map +0 -1
- package/dist/tests/runtime/values/argumentValueValidation.test.d.ts +0 -2
- package/dist/tests/runtime/values/argumentValueValidation.test.d.ts.map +0 -1
- package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts +0 -2
- package/dist/tests/runtime/values/globalCommandValuePopulation.test.d.ts.map +0 -1
- package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts +0 -2
- package/dist/tests/runtime/values/subCommandValuePopulation.test.d.ts.map +0 -1
- package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/argumentPrompter/ArgumentPrompterServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts +0 -2
- package/dist/tests/service/argumentPrompter/DefaultArgumentPrompterService.test.d.ts.map +0 -1
- package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/asciiBannerGenerator/AsciiBannerGeneratorServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts +0 -2
- package/dist/tests/service/asciiBannerGenerator/DefaultAsciiBannerGeneratorService.test.d.ts.map +0 -1
- package/dist/tests/service/banner/BannerServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/banner/BannerServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts +0 -2
- package/dist/tests/service/banner/command/NoBannerCommand.test.d.ts.map +0 -1
- package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts +0 -2
- package/dist/tests/service/chiselAsciiBannerGenerator/ChiselFontAsciiBannerGeneratorService.test.d.ts.map +0 -1
- package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/completion/CompletionServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/completion/DefaultCompletionService.test.d.ts +0 -2
- package/dist/tests/service/completion/DefaultCompletionService.test.d.ts.map +0 -1
- package/dist/tests/service/completion/shell/bash.test.d.ts +0 -2
- package/dist/tests/service/completion/shell/bash.test.d.ts.map +0 -1
- package/dist/tests/service/completion/shell/fish.test.d.ts +0 -2
- package/dist/tests/service/completion/shell/fish.test.d.ts.map +0 -1
- package/dist/tests/service/completion/shell/powershell.test.d.ts +0 -2
- package/dist/tests/service/completion/shell/powershell.test.d.ts.map +0 -1
- package/dist/tests/service/completion/shell/zsh.test.d.ts +0 -2
- package/dist/tests/service/completion/shell/zsh.test.d.ts.map +0 -1
- package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/configuration/ConfigurationServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts +0 -2
- package/dist/tests/service/configuration/DefaultKeyValueService.test.d.ts.map +0 -1
- package/dist/tests/service/configuration/DefaultSecretService.test.d.ts +0 -2
- package/dist/tests/service/configuration/DefaultSecretService.test.d.ts.map +0 -1
- package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts +0 -2
- package/dist/tests/service/configuration/command/ConfigCommand.test.d.ts.map +0 -1
- package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts +0 -2
- package/dist/tests/service/configuration/command/DumpConfigCommand.test.d.ts.map +0 -1
- package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/dataDumpGenerator/DataDumpGeneratorServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts +0 -2
- package/dist/tests/service/dataDumpGenerator/DefaultDataDumpGeneratorService.test.d.ts.map +0 -1
- package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts +0 -2
- package/dist/tests/service/imagePrinter/DefaultImagePrinterService.test.d.ts.map +0 -1
- package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/imagePrinter/ImagePrinterServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/plugin/DefaultPluginServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts +0 -2
- package/dist/tests/service/prettyPrinter/DefaultPrettyPrinterService.test.d.ts.map +0 -1
- package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/prettyPrinter/PrettyPrinterServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/printer/DefaultPrinterService.test.d.ts +0 -2
- package/dist/tests/service/printer/DefaultPrinterService.test.d.ts.map +0 -1
- package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/printer/PrinterServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts +0 -2
- package/dist/tests/service/printer/command/DarkModeCommand.test.d.ts.map +0 -1
- package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts +0 -2
- package/dist/tests/service/printer/command/LogLevelCommand.test.d.ts.map +0 -1
- package/dist/tests/service/printer/command/NoColorCommand.test.d.ts +0 -2
- package/dist/tests/service/printer/command/NoColorCommand.test.d.ts.map +0 -1
- package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts +0 -2
- package/dist/tests/service/printer/command/NoHyperlinksCommand.test.d.ts.map +0 -1
- package/dist/tests/service/printer/terminal/Progress.test.d.ts +0 -2
- package/dist/tests/service/printer/terminal/Progress.test.d.ts.map +0 -1
- package/dist/tests/service/printer/terminal/Spinner.test.d.ts +0 -2
- package/dist/tests/service/printer/terminal/Spinner.test.d.ts.map +0 -1
- package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts +0 -2
- package/dist/tests/service/prompter/DefaultPrompterService.test.d.ts.map +0 -1
- package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/prompter/PrompterServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts +0 -2
- package/dist/tests/service/prompter/command/NoPromptCommand.test.d.ts.map +0 -1
- package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts +0 -2
- package/dist/tests/service/prompter/prompt/PromptContext.test.d.ts.map +0 -1
- package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/shutdown/ShutdownServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts +0 -2
- package/dist/tests/service/syntaxHighlighter/DefaultSyntaxHighlighterService.test.d.ts.map +0 -1
- package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/syntaxHighlighter/SyntaxHighlighterServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts +0 -2
- package/dist/tests/service/tableGenerator/DefaultTableGeneratorService.test.d.ts.map +0 -1
- package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/tableGenerator/TableGeneratorServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts +0 -2
- package/dist/tests/service/treePrinter/DefaultTreePrinterService.test.d.ts.map +0 -1
- package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts +0 -2
- package/dist/tests/service/treePrinter/TreePrinterServiceProvider.test.d.ts.map +0 -1
- package/dist/tests/terminal/ImageRenderer.test.d.ts +0 -2
- package/dist/tests/terminal/ImageRenderer.test.d.ts.map +0 -1
- package/dist/tests/terminal/PngDecoder.test.d.ts +0 -2
- package/dist/tests/terminal/PngDecoder.test.d.ts.map +0 -1
- package/dist/tests/terminal/supportsHyperlinks.test.d.ts +0 -2
- package/dist/tests/terminal/supportsHyperlinks.test.d.ts.map +0 -1
- package/dist/tests/util/configHelper.test.d.ts +0 -2
- package/dist/tests/util/configHelper.test.d.ts.map +0 -1
- package/dist/tests/util/envVarHelper.test.d.ts +0 -2
- package/dist/tests/util/envVarHelper.test.d.ts.map +0 -1
- package/dist/tests/util/logger.test.d.ts +0 -2
- package/dist/tests/util/logger.test.d.ts.map +0 -1
- package/src/command/PluginCommand.ts +0 -197
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpHelper.d.ts","sourceRoot":"","sources":["../../../src/util/helpHelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,aAAa,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAC3D,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAI7C,OAAO,KAAK,qBAAqB,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,YAAY,MAAM,gCAAgC,CAAC;AAM/D,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,cAAc,MAAM,uCAAuC,CAAC;AAGxE,OAAO,KAAK,qBAAqB,MAAM,8CAA8C,CAAC;
|
|
1
|
+
{"version":3,"file":"helpHelper.d.ts","sourceRoot":"","sources":["../../../src/util/helpHelper.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,aAAa,MAAM,iCAAiC,CAAC;AAGjE,OAAO,KAAK,UAAU,MAAM,8BAA8B,CAAC;AAC3D,OAAO,KAAK,OAAO,MAAM,mBAAmB,CAAC;AAI7C,OAAO,KAAK,qBAAqB,MAAM,yCAAyC,CAAC;AACjF,OAAO,KAAK,YAAY,MAAM,gCAAgC,CAAC;AAM/D,OAAO,KAAK,SAAS,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,cAAc,MAAM,uCAAuC,CAAC;AAGxE,OAAO,KAAK,qBAAqB,MAAM,8CAA8C,CAAC;AAMtF,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;CACxC;AAsDD,wBAAsB,iBAAiB,CACrC,cAAc,EAAE,cAAc,EAC9B,qBAAqB,EAAE,qBAAqB,EAC5C,QAAQ,EAAE,KAAK,CAAC,WAAW,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CA2Cf;AA8BD,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,OAAO,EACvB,aAAa,EAAE,aAAa,GAC3B,SAAS,CA6DX;AAED,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CA+C3E;AAkLD,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,OAAO,EACvB,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,OAAO,GAC1B,KAAK,CAAC,WAAW,CAAC,CAoBpB;AACD,wBAAgB,8BAA8B,CAC5C,cAAc,EAAE,cAAc,EAC9B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,UAAU,GACrB,KAAK,CAAC,WAAW,CAAC,CAgCpB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,OAAO,EAChB,sBAAsB,EAAE,aAAa,CAAC,qBAAqB,CAAC,EAC5D,cAAc,EAAE,aAAa,CAAC,aAAa,CAAC,EAC5C,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,EAC1C,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,GACrC,MAAM,CAgJR;AAED,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,aAAa,CAAC,YAAY,CAAC,EAC1C,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,GACrC,MAAM,EAAE,CAkBV"}
|
|
@@ -0,0 +1,497 @@
|
|
|
1
|
+
import { distance } from "fastest-levenshtein";
|
|
2
|
+
import { ArgumentValueTypeName, ComplexValueTypeName } from "../api/argument/ArgumentValueTypes.js";
|
|
3
|
+
import { getGlobalCommandArgumentConfigurationKey, getSubCommandArgumentConfigurationKey, } from "./configHelper.js";
|
|
4
|
+
const SYNTAX_INDENT_WIDTH = 2;
|
|
5
|
+
const MINIMUM_SYNTAX_COLUMN_WIDTH = 15;
|
|
6
|
+
const HELP_SYNTAX_INDENT = " ".repeat(SYNTAX_INDENT_WIDTH);
|
|
7
|
+
function flattenHelpEntry(printerService, helpEntry, indentText, isRoot, isLastSibling, rows) {
|
|
8
|
+
let syntax = "";
|
|
9
|
+
if (helpEntry.syntax) {
|
|
10
|
+
if (isRoot) {
|
|
11
|
+
syntax = HELP_SYNTAX_INDENT + printerService.primary(helpEntry.syntax);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
let syntaxTreeChars = "";
|
|
15
|
+
if (indentText.length > 0) {
|
|
16
|
+
syntaxTreeChars = isLastSibling ? "└╴" : "├╴";
|
|
17
|
+
}
|
|
18
|
+
syntax =
|
|
19
|
+
HELP_SYNTAX_INDENT +
|
|
20
|
+
printerService.secondary(indentText + syntaxTreeChars) +
|
|
21
|
+
printerService.primary(helpEntry.syntax);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const description = helpEntry.description
|
|
25
|
+
? printerService.secondary(helpEntry.description)
|
|
26
|
+
: undefined;
|
|
27
|
+
rows.push({ syntax, description });
|
|
28
|
+
if (helpEntry.helpSubEntries !== undefined) {
|
|
29
|
+
const nextIndent = indentText + (isLastSibling ? " " : "│ ") + " ".repeat(helpEntry.subEntryIndent || 0);
|
|
30
|
+
for (let i = 0; i < helpEntry.helpSubEntries.length; i++) {
|
|
31
|
+
const sub = helpEntry.helpSubEntries[i];
|
|
32
|
+
flattenHelpEntry(printerService, sub, nextIndent, false, i === helpEntry.helpSubEntries.length - 1, rows);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
export async function printHelpSections(printerService, tableGeneratorService, sections) {
|
|
37
|
+
const terminalWidth = printerService.stdoutColumns();
|
|
38
|
+
for (let i = 0; i < sections.length; i++) {
|
|
39
|
+
const section = sections[i];
|
|
40
|
+
if (section.title.length > 0) {
|
|
41
|
+
await printerService.print(`${printerService.emphasised(section.title)}\n\n`);
|
|
42
|
+
}
|
|
43
|
+
if (section.helpEntries.length === 0)
|
|
44
|
+
continue;
|
|
45
|
+
const rows = [];
|
|
46
|
+
for (const helpEntry of section.helpEntries) {
|
|
47
|
+
flattenHelpEntry(printerService, helpEntry, "", true, true, rows);
|
|
48
|
+
}
|
|
49
|
+
const hasDescriptions = rows.some((r) => r.description !== undefined);
|
|
50
|
+
if (hasDescriptions) {
|
|
51
|
+
const table = tableGeneratorService.createTable(rows.length, 2, {
|
|
52
|
+
border: false,
|
|
53
|
+
padding: 1,
|
|
54
|
+
maxWidth: terminalWidth,
|
|
55
|
+
});
|
|
56
|
+
table.column(0, { minWidth: MINIMUM_SYNTAX_COLUMN_WIDTH });
|
|
57
|
+
table.column(1, { flexWeight: 1 });
|
|
58
|
+
for (let r = 0; r < rows.length; r++) {
|
|
59
|
+
const row = rows[r];
|
|
60
|
+
table.cell(r, 0, row.syntax);
|
|
61
|
+
table.cell(r, 1, row.description ?? "");
|
|
62
|
+
}
|
|
63
|
+
const rendered = tableGeneratorService.render(table);
|
|
64
|
+
await printerService.print(rendered + "\n");
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
for (const row of rows) {
|
|
68
|
+
await printerService.print(row.syntax + "\n");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
await printerService.print("\n");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function getGlobalCommandArgumentForm(globalCommandArgument) {
|
|
75
|
+
let argumentSyntax = "";
|
|
76
|
+
switch (globalCommandArgument.type) {
|
|
77
|
+
case ArgumentValueTypeName.BOOLEAN:
|
|
78
|
+
argumentSyntax = "true|false";
|
|
79
|
+
break;
|
|
80
|
+
case ArgumentValueTypeName.INTEGER:
|
|
81
|
+
argumentSyntax = "<integer_value>";
|
|
82
|
+
break;
|
|
83
|
+
case ArgumentValueTypeName.NUMBER:
|
|
84
|
+
argumentSyntax = "<number_value>";
|
|
85
|
+
break;
|
|
86
|
+
case ArgumentValueTypeName.STRING:
|
|
87
|
+
argumentSyntax = "<string_value>";
|
|
88
|
+
break;
|
|
89
|
+
}
|
|
90
|
+
if (globalCommandArgument.isOptional ||
|
|
91
|
+
globalCommandArgument.type === ArgumentValueTypeName.BOOLEAN) {
|
|
92
|
+
argumentSyntax = `[${argumentSyntax}]`;
|
|
93
|
+
}
|
|
94
|
+
return argumentSyntax;
|
|
95
|
+
}
|
|
96
|
+
export function getGlobalArgumentHelpEntry(cliConfig, includeEnvVars, globalCommand) {
|
|
97
|
+
const { argument } = globalCommand;
|
|
98
|
+
let description = globalCommand.description || "";
|
|
99
|
+
if (argument === undefined) {
|
|
100
|
+
return { syntax: "", description };
|
|
101
|
+
}
|
|
102
|
+
const syntax = getGlobalCommandArgumentForm(argument);
|
|
103
|
+
const notesItems = [];
|
|
104
|
+
if (argument.allowableValues !== undefined && argument.allowableValues.length > 0) {
|
|
105
|
+
notesItems.push(`valid values: ${argument.allowableValues.join("|")}`);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
switch (argument.type) {
|
|
109
|
+
case ArgumentValueTypeName.STRING:
|
|
110
|
+
notesItems.push("string value");
|
|
111
|
+
break;
|
|
112
|
+
case ArgumentValueTypeName.INTEGER:
|
|
113
|
+
notesItems.push("integer value");
|
|
114
|
+
break;
|
|
115
|
+
case ArgumentValueTypeName.NUMBER:
|
|
116
|
+
notesItems.push("number value");
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
if (argument.minValueInclusive !== undefined || argument.maxValueInclusive !== undefined) {
|
|
120
|
+
let range = "..";
|
|
121
|
+
if (argument.minValueInclusive !== undefined) {
|
|
122
|
+
range = argument.minValueInclusive + range;
|
|
123
|
+
}
|
|
124
|
+
if (argument.maxValueInclusive !== undefined) {
|
|
125
|
+
range += argument.maxValueInclusive;
|
|
126
|
+
}
|
|
127
|
+
notesItems.push(range);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (argument.defaultValue !== undefined) {
|
|
131
|
+
notesItems.push(`default: ${argument.defaultValue}`);
|
|
132
|
+
}
|
|
133
|
+
if (includeEnvVars) {
|
|
134
|
+
const configurationKey = getGlobalCommandArgumentConfigurationKey(cliConfig, globalCommand, argument);
|
|
135
|
+
if (configurationKey !== undefined) {
|
|
136
|
+
notesItems.push(`env var: ${configurationKey}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
if (notesItems.length > 0) {
|
|
140
|
+
if (description.length === 0) {
|
|
141
|
+
description = `(${notesItems.join(", ")})`;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
description = `${description} (${notesItems.join(", ")})`;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return { syntax, description };
|
|
148
|
+
}
|
|
149
|
+
export function getSubCommandArgumentsSyntax(subCommand) {
|
|
150
|
+
let syntax = "";
|
|
151
|
+
subCommand.options.forEach((option) => {
|
|
152
|
+
let optionSyntax = `--${option.name}`;
|
|
153
|
+
switch (option.type) {
|
|
154
|
+
case ArgumentValueTypeName.BOOLEAN:
|
|
155
|
+
optionSyntax = `${optionSyntax} [true|false]`;
|
|
156
|
+
break;
|
|
157
|
+
case ArgumentValueTypeName.INTEGER:
|
|
158
|
+
optionSyntax = `${optionSyntax} <integer_value>`;
|
|
159
|
+
break;
|
|
160
|
+
case ArgumentValueTypeName.NUMBER:
|
|
161
|
+
optionSyntax = `${optionSyntax} <number_value>`;
|
|
162
|
+
break;
|
|
163
|
+
case ArgumentValueTypeName.STRING:
|
|
164
|
+
optionSyntax = `${optionSyntax} <string_value>`;
|
|
165
|
+
break;
|
|
166
|
+
case ComplexValueTypeName.COMPLEX:
|
|
167
|
+
optionSyntax = `${optionSyntax} <complex_value>`;
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
if (option.isOptional || option.defaultValue !== undefined) {
|
|
171
|
+
optionSyntax = ` [${optionSyntax}]`;
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
optionSyntax = ` ${optionSyntax}`;
|
|
175
|
+
}
|
|
176
|
+
if (option.isArray) {
|
|
177
|
+
optionSyntax = `${optionSyntax}...`;
|
|
178
|
+
}
|
|
179
|
+
syntax = `${syntax}${optionSyntax}`;
|
|
180
|
+
});
|
|
181
|
+
subCommand.positionals.forEach((positional) => {
|
|
182
|
+
let positionalSyntax = `<${positional.name}>`;
|
|
183
|
+
if (positional.isVarargOptional) {
|
|
184
|
+
positionalSyntax = ` [${positionalSyntax}]`;
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
positionalSyntax = ` ${positionalSyntax}`;
|
|
188
|
+
}
|
|
189
|
+
if (positional.isVarargMultiple) {
|
|
190
|
+
positionalSyntax = `${positionalSyntax}...`;
|
|
191
|
+
}
|
|
192
|
+
syntax = `${syntax}${positionalSyntax}`;
|
|
193
|
+
});
|
|
194
|
+
return syntax;
|
|
195
|
+
}
|
|
196
|
+
function getOptionHelpEntry(cliConfig, includeEnvVars, command, option, subEntryIndent = 0, optionAncestry = []) {
|
|
197
|
+
let subEntries;
|
|
198
|
+
let optionCharacters = "--";
|
|
199
|
+
let aliasCharacter = "-";
|
|
200
|
+
let newSubEntryIndent = option.name.length;
|
|
201
|
+
if (subEntryIndent > 0) {
|
|
202
|
+
optionCharacters = ".";
|
|
203
|
+
aliasCharacter = ".";
|
|
204
|
+
newSubEntryIndent += 1;
|
|
205
|
+
}
|
|
206
|
+
const notesItems = [];
|
|
207
|
+
if (option.type === ComplexValueTypeName.COMPLEX) {
|
|
208
|
+
subEntries = [];
|
|
209
|
+
option.properties.forEach((property) => {
|
|
210
|
+
subEntries.push(getOptionHelpEntry(cliConfig, includeEnvVars, command, property, newSubEntryIndent, [
|
|
211
|
+
...optionAncestry,
|
|
212
|
+
option,
|
|
213
|
+
]));
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
if (option.allowableValues !== undefined && option.allowableValues.length > 0) {
|
|
218
|
+
notesItems.push(`valid values: ${option.allowableValues.join("|")}`);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
switch (option.type) {
|
|
222
|
+
case ArgumentValueTypeName.STRING:
|
|
223
|
+
notesItems.push(`string value`);
|
|
224
|
+
break;
|
|
225
|
+
case ArgumentValueTypeName.INTEGER:
|
|
226
|
+
notesItems.push(`integer value`);
|
|
227
|
+
break;
|
|
228
|
+
case ArgumentValueTypeName.NUMBER:
|
|
229
|
+
notesItems.push(`number value`);
|
|
230
|
+
break;
|
|
231
|
+
case ArgumentValueTypeName.BOOLEAN:
|
|
232
|
+
notesItems.push(`boolean value`);
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
if (option.minValueInclusive !== undefined || option.maxValueInclusive !== undefined) {
|
|
238
|
+
let range = "..";
|
|
239
|
+
if (option.minValueInclusive !== undefined) {
|
|
240
|
+
range = option.minValueInclusive + range;
|
|
241
|
+
}
|
|
242
|
+
if (option.maxValueInclusive !== undefined) {
|
|
243
|
+
range += option.maxValueInclusive;
|
|
244
|
+
}
|
|
245
|
+
notesItems.push(range);
|
|
246
|
+
}
|
|
247
|
+
if (option.defaultValue !== undefined) {
|
|
248
|
+
notesItems.push(`default: ${Array.isArray(option.defaultValue)
|
|
249
|
+
? `${option.defaultValue.join(", ")}`
|
|
250
|
+
: `${option.defaultValue}`}`);
|
|
251
|
+
}
|
|
252
|
+
if (option.isOptional) {
|
|
253
|
+
notesItems.push("optional");
|
|
254
|
+
}
|
|
255
|
+
if (option.isArray) {
|
|
256
|
+
notesItems.push("array");
|
|
257
|
+
}
|
|
258
|
+
if (includeEnvVars && option.type !== ComplexValueTypeName.COMPLEX) {
|
|
259
|
+
const configurationKey = getSubCommandArgumentConfigurationKey(cliConfig, command, [
|
|
260
|
+
...optionAncestry,
|
|
261
|
+
option,
|
|
262
|
+
]);
|
|
263
|
+
if (configurationKey !== undefined) {
|
|
264
|
+
notesItems.push(`env var: ${configurationKey}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
let description = option.description || "";
|
|
268
|
+
if (description.length > 0) {
|
|
269
|
+
if (notesItems.length > 0) {
|
|
270
|
+
description = `${description} (${notesItems.join(", ")})`;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
else if (notesItems.length > 0) {
|
|
274
|
+
description = "(" + notesItems.join(", ") + ")";
|
|
275
|
+
}
|
|
276
|
+
return {
|
|
277
|
+
syntax: `${optionCharacters}${option.name}${option.shortAlias !== undefined ? `, ${aliasCharacter}${option.shortAlias}` : ""}`,
|
|
278
|
+
description,
|
|
279
|
+
subEntryIndent: newSubEntryIndent,
|
|
280
|
+
helpSubEntries: subEntries,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
function getPositionalHelpEntry(cliConfig, includeEnvVars, command, positional) {
|
|
284
|
+
const notesItems = [];
|
|
285
|
+
if (positional.allowableValues !== undefined && positional.allowableValues.length > 0) {
|
|
286
|
+
notesItems.push(`valid values: ${positional.allowableValues.join("|")}`);
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
switch (positional.type) {
|
|
290
|
+
case ArgumentValueTypeName.STRING:
|
|
291
|
+
notesItems.push(`string value`);
|
|
292
|
+
break;
|
|
293
|
+
case ArgumentValueTypeName.INTEGER:
|
|
294
|
+
notesItems.push(`integer value`);
|
|
295
|
+
break;
|
|
296
|
+
case ArgumentValueTypeName.NUMBER:
|
|
297
|
+
notesItems.push(`number value`);
|
|
298
|
+
break;
|
|
299
|
+
case ArgumentValueTypeName.BOOLEAN:
|
|
300
|
+
notesItems.push(`boolean value`);
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
if (positional.minValueInclusive !== undefined || positional.maxValueInclusive !== undefined) {
|
|
305
|
+
let range = "..";
|
|
306
|
+
if (positional.minValueInclusive !== undefined) {
|
|
307
|
+
range = positional.minValueInclusive + range;
|
|
308
|
+
}
|
|
309
|
+
if (positional.maxValueInclusive !== undefined) {
|
|
310
|
+
range += positional.maxValueInclusive;
|
|
311
|
+
}
|
|
312
|
+
notesItems.push(range);
|
|
313
|
+
}
|
|
314
|
+
if (positional.isVarargOptional) {
|
|
315
|
+
notesItems.push("optional");
|
|
316
|
+
}
|
|
317
|
+
if (positional.isVarargMultiple) {
|
|
318
|
+
notesItems.push("array");
|
|
319
|
+
}
|
|
320
|
+
if (includeEnvVars) {
|
|
321
|
+
const configurationKey = getSubCommandArgumentConfigurationKey(cliConfig, command, [
|
|
322
|
+
positional,
|
|
323
|
+
]);
|
|
324
|
+
if (configurationKey !== undefined) {
|
|
325
|
+
notesItems.push(`env var: ${configurationKey}`);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
let description = positional.description || "";
|
|
329
|
+
if (description.length > 0) {
|
|
330
|
+
if (notesItems.length > 0) {
|
|
331
|
+
description = `${description} (${notesItems.join(", ")})`;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
else if (notesItems.length > 0) {
|
|
335
|
+
description = "(" + notesItems.join(", ") + ")";
|
|
336
|
+
}
|
|
337
|
+
return {
|
|
338
|
+
syntax: `<${positional.name}>`,
|
|
339
|
+
description,
|
|
340
|
+
};
|
|
341
|
+
}
|
|
342
|
+
export function getCommandArgsHelpSections(cliConfig, includeEnvVars, subCommand, isSingleCommandApp) {
|
|
343
|
+
const helpSections = [];
|
|
344
|
+
if (subCommand.options.length > 0 || subCommand.positionals.length > 0) {
|
|
345
|
+
const argumentsSection = {
|
|
346
|
+
title: `${isSingleCommandApp ? "Command " : ""}Arguments`,
|
|
347
|
+
helpEntries: [],
|
|
348
|
+
};
|
|
349
|
+
subCommand.options.forEach((option) => {
|
|
350
|
+
argumentsSection.helpEntries.push(getOptionHelpEntry(cliConfig, includeEnvVars, subCommand, option));
|
|
351
|
+
});
|
|
352
|
+
subCommand.positionals.forEach((positional) => {
|
|
353
|
+
argumentsSection.helpEntries.push(getPositionalHelpEntry(cliConfig, includeEnvVars, subCommand, positional));
|
|
354
|
+
});
|
|
355
|
+
helpSections.push(argumentsSection);
|
|
356
|
+
}
|
|
357
|
+
return helpSections;
|
|
358
|
+
}
|
|
359
|
+
export function getCommandExamplesHelpSections(printerService, context, subCommand) {
|
|
360
|
+
const helpSections = [];
|
|
361
|
+
if (subCommand.usageExamples !== undefined && subCommand.usageExamples.length > 0) {
|
|
362
|
+
const usageSection = {
|
|
363
|
+
title: subCommand.usageExamples.length > 1 ? "Examples" : "Example",
|
|
364
|
+
helpEntries: [],
|
|
365
|
+
};
|
|
366
|
+
helpSections.push(usageSection);
|
|
367
|
+
subCommand.usageExamples.forEach((usageExample, index) => {
|
|
368
|
+
if (usageExample.description != null && usageExample.description.length > 0) {
|
|
369
|
+
usageSection.helpEntries.push({
|
|
370
|
+
syntax: `${printerService.italic(usageExample.description)}:\n`,
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
usageSection.helpEntries.push({
|
|
374
|
+
syntax: `$ ${context.cliConfig.name} ${subCommand.name} ${usageExample.exampleArguments}`,
|
|
375
|
+
});
|
|
376
|
+
if (usageExample.output !== undefined) {
|
|
377
|
+
usageExample.output.forEach((output) => {
|
|
378
|
+
usageSection.helpEntries.push({
|
|
379
|
+
syntax: printerService.secondary(output),
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
if (index < subCommand.usageExamples.length - 1) {
|
|
384
|
+
usageSection.helpEntries.push({
|
|
385
|
+
syntax: "",
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
return helpSections;
|
|
391
|
+
}
|
|
392
|
+
export function getMultiCommandAppSyntax(context, globalModifierCommands, globalCommands, groupCommands, subCommands) {
|
|
393
|
+
const globalPrefix = groupCommands.length > 0 || subCommands.length > 0 ? "global_" : "";
|
|
394
|
+
let syntax = context.cliConfig.name || "";
|
|
395
|
+
if (globalModifierCommands.length > 0) {
|
|
396
|
+
syntax += ` [<${globalPrefix}option>`;
|
|
397
|
+
// dont render global_option arg if none defined
|
|
398
|
+
const noArg = globalModifierCommands.every((modifier) => modifier.argument === undefined);
|
|
399
|
+
if (!noArg) {
|
|
400
|
+
// render global_option arg in [] if all modifiers have non-optional, non-boolean arg with no default
|
|
401
|
+
const optionArgMandatory = globalModifierCommands.every((modifier) => modifier.argument !== undefined &&
|
|
402
|
+
!modifier.argument.isOptional &&
|
|
403
|
+
modifier.argument.defaultValue === undefined &&
|
|
404
|
+
modifier.argument.type !== ArgumentValueTypeName.BOOLEAN);
|
|
405
|
+
syntax += optionArgMandatory ? " <value>" : " [<value>]";
|
|
406
|
+
}
|
|
407
|
+
syntax += "]";
|
|
408
|
+
}
|
|
409
|
+
if (globalModifierCommands.length > 1) {
|
|
410
|
+
syntax += "...";
|
|
411
|
+
}
|
|
412
|
+
let arg = false;
|
|
413
|
+
let argOptional = false;
|
|
414
|
+
let argValueOptional = false;
|
|
415
|
+
let multipleArg = false;
|
|
416
|
+
const commandClauses = [];
|
|
417
|
+
if (globalCommands.length > 0) {
|
|
418
|
+
commandClauses.push(`<${globalPrefix}command>`);
|
|
419
|
+
arg = globalCommands.some((globalCommand) => globalCommand.argument !== undefined);
|
|
420
|
+
if (arg) {
|
|
421
|
+
argOptional = globalCommands.some((globalCommand) => globalCommand.argument !== undefined &&
|
|
422
|
+
((globalCommand.argument.isOptional !== undefined && globalCommand.argument.isOptional) ||
|
|
423
|
+
globalCommand.argument.defaultValue !== undefined));
|
|
424
|
+
argValueOptional = globalCommands.some((globalCommand) => globalCommand.argument !== undefined &&
|
|
425
|
+
globalCommand.argument.type === ArgumentValueTypeName.BOOLEAN);
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
if (groupCommands.length > 0 || subCommands.length > 0) {
|
|
429
|
+
commandClauses.push("<command>");
|
|
430
|
+
arg =
|
|
431
|
+
arg ||
|
|
432
|
+
groupCommands.some((groupCommand) => groupCommand.memberSubCommands.some((memberCommand) => memberCommand.options.length > 0 || memberCommand.positionals.length > 0)) ||
|
|
433
|
+
subCommands.some((subCommand) => subCommand.options.length > 0 || subCommand.positionals.length > 0);
|
|
434
|
+
if (arg) {
|
|
435
|
+
argOptional =
|
|
436
|
+
argOptional ||
|
|
437
|
+
groupCommands.some((groupCommand) => groupCommand.memberSubCommands.some((memberCommand) => memberCommand.options.some((option) => (option.isOptional !== undefined && option.isOptional) ||
|
|
438
|
+
option.defaultValue !== undefined) ||
|
|
439
|
+
memberCommand.positionals.some((positional) => positional.isVarargOptional !== undefined && positional.isVarargOptional))) ||
|
|
440
|
+
subCommands.some((subCommand) => subCommand.options.some((option) => (option.isOptional !== undefined && option.isOptional) ||
|
|
441
|
+
option.defaultValue !== undefined) ||
|
|
442
|
+
subCommand.positionals.some((positional) => positional.isVarargOptional !== undefined && positional.isVarargOptional));
|
|
443
|
+
argValueOptional =
|
|
444
|
+
argValueOptional ||
|
|
445
|
+
groupCommands.some((groupCommand) => groupCommand.memberSubCommands.some((memberCommand) => memberCommand.options.some((option) => option.type === ArgumentValueTypeName.BOOLEAN ||
|
|
446
|
+
memberCommand.positionals.some((positional) => positional.type === ArgumentValueTypeName.BOOLEAN)))) ||
|
|
447
|
+
subCommands.some((subCommand) => subCommand.options.some((option) => option.type === ArgumentValueTypeName.BOOLEAN) ||
|
|
448
|
+
subCommand.positionals.some((positional) => positional.type === ArgumentValueTypeName.BOOLEAN));
|
|
449
|
+
multipleArg =
|
|
450
|
+
multipleArg ||
|
|
451
|
+
groupCommands.some((groupCommand) => groupCommand.memberSubCommands.some((memberCommand) => memberCommand.options.some((option) => option.isArray) ||
|
|
452
|
+
memberCommand.positionals.some((positional) => positional.isVarargMultiple))) ||
|
|
453
|
+
subCommands.some((subCommand) => subCommand.options.some((option) => option.isArray) ||
|
|
454
|
+
subCommand.positionals.some((positional) => positional.isVarargMultiple));
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
if (commandClauses.length > 0) {
|
|
458
|
+
let subSyntax = `${commandClauses.join("|")}`;
|
|
459
|
+
// dont render arg if none defined (no global arg or no option/positional)
|
|
460
|
+
if (arg) {
|
|
461
|
+
let argSyntax = "<arg>";
|
|
462
|
+
// render arg value in [] if some are optional
|
|
463
|
+
argSyntax += argValueOptional ? " [<value>]" : " <value>";
|
|
464
|
+
// dont render arg in [] if none are optional and have no default
|
|
465
|
+
subSyntax += argOptional
|
|
466
|
+
? ` [${argSyntax}]`
|
|
467
|
+
: multipleArg
|
|
468
|
+
? ` <${argSyntax}>`
|
|
469
|
+
: ` ${argSyntax}`;
|
|
470
|
+
// check to render multiple arg
|
|
471
|
+
if (multipleArg) {
|
|
472
|
+
subSyntax += "...";
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
syntax += ` ${subSyntax}`;
|
|
476
|
+
}
|
|
477
|
+
return syntax;
|
|
478
|
+
}
|
|
479
|
+
export function findPossibleCommandNames(commandName, groupCommands, subCommands) {
|
|
480
|
+
const levenCommandArray = new Array();
|
|
481
|
+
subCommands.forEach((subCommand) => {
|
|
482
|
+
levenCommandArray.push([distance(subCommand.name, commandName), subCommand.name]);
|
|
483
|
+
});
|
|
484
|
+
groupCommands.forEach((groupCommand) => {
|
|
485
|
+
groupCommand.memberSubCommands
|
|
486
|
+
.filter((memberCommand) => !memberCommand.disableGenericHelpDisplay)
|
|
487
|
+
.forEach((memberCommand) => {
|
|
488
|
+
const memberName = `${groupCommand.name}:${memberCommand.name}`;
|
|
489
|
+
levenCommandArray.push([distance(memberName, commandName), memberName]);
|
|
490
|
+
});
|
|
491
|
+
});
|
|
492
|
+
return levenCommandArray
|
|
493
|
+
.sort((a, b) => a[0] - b[0])
|
|
494
|
+
.slice(0, 2)
|
|
495
|
+
.filter((value) => value[0] < 3)
|
|
496
|
+
.map((value) => value[1]);
|
|
497
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
const LEVEL_PADDINGS = {
|
|
3
|
+
TRACE: " ",
|
|
4
|
+
DEBUG: " ",
|
|
5
|
+
INFO: " ",
|
|
6
|
+
WARN: " ",
|
|
7
|
+
ERROR: " ",
|
|
8
|
+
};
|
|
9
|
+
const debugEnabled = process.env["DYNAMIC_CLI_FRAMEWORK_DEBUG"] !== undefined;
|
|
10
|
+
let maxLoggerNameLength = 0;
|
|
11
|
+
const LOGGER_NAME_PADDINGS = {};
|
|
12
|
+
function getDefaultLogger() {
|
|
13
|
+
return {
|
|
14
|
+
trace: () => { },
|
|
15
|
+
debug: (message, ...optionalParams) => {
|
|
16
|
+
console.debug(message, ...optionalParams);
|
|
17
|
+
},
|
|
18
|
+
info: (message, ...optionalParams) => {
|
|
19
|
+
console.info(message, ...optionalParams);
|
|
20
|
+
},
|
|
21
|
+
warn: (message, ...optionalParams) => {
|
|
22
|
+
console.warn(message, ...optionalParams);
|
|
23
|
+
},
|
|
24
|
+
error: (message, ...optionalParams) => {
|
|
25
|
+
console.error(message, ...optionalParams);
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function wrapDefaultLogger(loggerName, levelPadding, loggerFunction) {
|
|
30
|
+
return (message, ...optionalParams) => {
|
|
31
|
+
if (message instanceof Function) {
|
|
32
|
+
loggerFunction(`${levelPadding} [${loggerName}]${LOGGER_NAME_PADDINGS[loggerName]} ${message()}`, ...optionalParams);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (message instanceof Object) {
|
|
36
|
+
loggerFunction(`${levelPadding} [${loggerName}]${LOGGER_NAME_PADDINGS[loggerName]} ${JSON.stringify(message)}`, ...optionalParams);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
loggerFunction(`${levelPadding} [${loggerName}]${LOGGER_NAME_PADDINGS[loggerName]} ${message}`, ...optionalParams);
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Retrieves a logger instance with the specified name. If the name length exceeds the current maximum logger name length,
|
|
44
|
+
* it updates the padding for all existing logger names to ensure consistent formatting.
|
|
45
|
+
*
|
|
46
|
+
* @param loggerName The name of the logger to retrieve.
|
|
47
|
+
* @returns A logger instance with the specified name.
|
|
48
|
+
*/
|
|
49
|
+
export default function getLogger(loggerName) {
|
|
50
|
+
const g = globalThis;
|
|
51
|
+
if (g.defaultLogger === undefined) {
|
|
52
|
+
g.defaultLogger = getDefaultLogger();
|
|
53
|
+
}
|
|
54
|
+
const defaultLogger = g.defaultLogger;
|
|
55
|
+
if (loggerName.length > maxLoggerNameLength) {
|
|
56
|
+
maxLoggerNameLength = loggerName.length;
|
|
57
|
+
for (const key of Object.keys(LOGGER_NAME_PADDINGS)) {
|
|
58
|
+
LOGGER_NAME_PADDINGS[key] = " ".repeat(maxLoggerNameLength - key.length);
|
|
59
|
+
}
|
|
60
|
+
LOGGER_NAME_PADDINGS[loggerName] = "";
|
|
61
|
+
}
|
|
62
|
+
else if (LOGGER_NAME_PADDINGS[loggerName] === undefined) {
|
|
63
|
+
LOGGER_NAME_PADDINGS[loggerName] = " ".repeat(maxLoggerNameLength - loggerName.length);
|
|
64
|
+
}
|
|
65
|
+
if (debugEnabled) {
|
|
66
|
+
return {
|
|
67
|
+
trace: wrapDefaultLogger(loggerName, LEVEL_PADDINGS.TRACE, defaultLogger.trace),
|
|
68
|
+
debug: wrapDefaultLogger(loggerName, LEVEL_PADDINGS.DEBUG, defaultLogger.debug),
|
|
69
|
+
info: wrapDefaultLogger(loggerName, LEVEL_PADDINGS.INFO, defaultLogger.info),
|
|
70
|
+
warn: wrapDefaultLogger(loggerName, LEVEL_PADDINGS.WARN, defaultLogger.warn),
|
|
71
|
+
error: wrapDefaultLogger(loggerName, LEVEL_PADDINGS.ERROR, defaultLogger.error),
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return {
|
|
75
|
+
trace: () => { },
|
|
76
|
+
debug: () => { },
|
|
77
|
+
info: () => { },
|
|
78
|
+
warn: () => { },
|
|
79
|
+
error: wrapDefaultLogger(loggerName, LEVEL_PADDINGS.ERROR, defaultLogger.error),
|
|
80
|
+
};
|
|
81
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { Icon, PRINTER_SERVICE_ID } from "../api/service/core/PrinterService.js";
|
|
2
|
+
import { isGlobalCommand, isGlobalModifierCommand } from "../runtime/command/CommandTypeGuards.js";
|
|
3
|
+
import { getInvalidArgumentString } from "../runtime/values/argumentValueValidation.js";
|
|
4
|
+
import { findPossibleCommandNames } from "./helpHelper.js";
|
|
5
|
+
function getCommandString(printerService, parseResult) {
|
|
6
|
+
const { command, groupCommand } = parseResult;
|
|
7
|
+
if (groupCommand) {
|
|
8
|
+
return printerService.yellow(`'${groupCommand.name}:${command.name}'`);
|
|
9
|
+
}
|
|
10
|
+
return printerService.yellow(`'${command.name}'`);
|
|
11
|
+
}
|
|
12
|
+
export async function printParseResultError(context, parseResult, isDefaultCommand = false) {
|
|
13
|
+
const printerService = context.getServiceById(PRINTER_SERVICE_ID);
|
|
14
|
+
const commandErrorString = isDefaultCommand
|
|
15
|
+
? "Parse error: "
|
|
16
|
+
: `Parse error for command: ${getCommandString(printerService, parseResult)}`;
|
|
17
|
+
const { command, invalidArguments } = parseResult;
|
|
18
|
+
let errorString = "=> ";
|
|
19
|
+
const skipArgName = isGlobalModifierCommand(command) || isGlobalCommand(command);
|
|
20
|
+
const argsString = invalidArguments
|
|
21
|
+
.map((arg) => getInvalidArgumentString(arg, skipArgName))
|
|
22
|
+
.join(", ");
|
|
23
|
+
errorString = `${errorString}${printerService.yellow(argsString)}`;
|
|
24
|
+
await printerService.error(`${commandErrorString}\n ${errorString}\n\n`, Icon.FAILURE);
|
|
25
|
+
}
|
|
26
|
+
export async function printCommandExecutionError(context, parseResult, err, isDefaultCommand = false) {
|
|
27
|
+
const printerService = context.getServiceById(PRINTER_SERVICE_ID);
|
|
28
|
+
const commandErrorString = isDefaultCommand
|
|
29
|
+
? "Execution error: "
|
|
30
|
+
: `Execution error for command: ${getCommandString(printerService, parseResult)}`;
|
|
31
|
+
if (err !== undefined) {
|
|
32
|
+
await printerService.error(`${commandErrorString}\n => ${printerService.yellow(err.message)}\n\n`, Icon.FAILURE);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
await printerService.error(`${commandErrorString}\n => ${printerService.yellow("error is undefined")}\n\n`, Icon.FAILURE);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export async function printRuntimeError(context, err) {
|
|
39
|
+
const printerService = context.getServiceById(PRINTER_SERVICE_ID);
|
|
40
|
+
await printerService.error(`Execution error: \n => ${printerService.yellow(err.message)}\n\n`, Icon.FAILURE);
|
|
41
|
+
}
|
|
42
|
+
export async function printNoCommandSpecifiedError(context) {
|
|
43
|
+
const printerService = context.getServiceById(PRINTER_SERVICE_ID);
|
|
44
|
+
await printerService.error("No command specified\n\n");
|
|
45
|
+
}
|
|
46
|
+
export async function printNoCommandRecognisedError(context, commandRegistry, availableArgs) {
|
|
47
|
+
const printerService = context.getServiceById(PRINTER_SERVICE_ID);
|
|
48
|
+
await printerService.error("No command recognised\n\n");
|
|
49
|
+
if (availableArgs.length > 0) {
|
|
50
|
+
const groupCommands = commandRegistry
|
|
51
|
+
.getGroupCommands()
|
|
52
|
+
.filter((command) => !command.disableGenericHelpDisplay);
|
|
53
|
+
const subCommands = commandRegistry
|
|
54
|
+
.getSubCommands()
|
|
55
|
+
.filter((command) => !command.disableGenericHelpDisplay);
|
|
56
|
+
const allPossibleCommandNames = [];
|
|
57
|
+
for (const arg of availableArgs) {
|
|
58
|
+
// look for other possible matches
|
|
59
|
+
const possibleCommandNames = findPossibleCommandNames(arg, groupCommands, subCommands);
|
|
60
|
+
// add the possible command names to the list if not already present
|
|
61
|
+
for (const possibleCommandName of possibleCommandNames) {
|
|
62
|
+
if (!allPossibleCommandNames.includes(possibleCommandName)) {
|
|
63
|
+
allPossibleCommandNames.push(possibleCommandName);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (allPossibleCommandNames.length > 0) {
|
|
68
|
+
await printerService.print(`Possible matches: ${allPossibleCommandNames.join(", ")}\n\n`, Icon.INFORMATION);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
export async function printUnusedArgsWarning(context, overallUnusedArgs) {
|
|
73
|
+
const printerService = context.getServiceById(PRINTER_SERVICE_ID);
|
|
74
|
+
if (overallUnusedArgs.length === 1) {
|
|
75
|
+
await printerService.warn(`Unused arg: ${overallUnusedArgs[0]}\n\n`, Icon.ALERT);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
await printerService.warn(`Unused args: ${overallUnusedArgs.join(" ")}\n\n`, Icon.ALERT);
|
|
79
|
+
}
|
|
80
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flowscripter/dynamic-cli-framework",
|
|
3
|
-
"version": "1.7.
|
|
3
|
+
"version": "1.7.5",
|
|
4
4
|
"description": "A framework for developing CLI applications which supports dynamic discovery and installation of new commands",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"bun",
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"access": "public"
|
|
46
46
|
},
|
|
47
47
|
"scripts": {
|
|
48
|
-
"build": "
|
|
48
|
+
"build": "tsc -p tsconfig.build.json"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
51
|
"@flowscripter/dynamic-plugin-framework": "1.10.1",
|