@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,142 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from "bun:test";
|
|
2
|
-
import DefaultTreePrinterService from "../../../src/service/treePrinter/DefaultTreePrinterService.ts";
|
|
3
|
-
|
|
4
|
-
describe("DefaultTreePrinterService tests", () => {
|
|
5
|
-
test("Single root, no children", () => {
|
|
6
|
-
const service = new DefaultTreePrinterService();
|
|
7
|
-
service.colorEnabled = false;
|
|
8
|
-
|
|
9
|
-
expect(service.print({ label: "Root" })).toEqual("Root");
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
test("Root with string children uses correct connectors", () => {
|
|
13
|
-
const service = new DefaultTreePrinterService();
|
|
14
|
-
service.colorEnabled = false;
|
|
15
|
-
|
|
16
|
-
const result = service.print({
|
|
17
|
-
label: "Root",
|
|
18
|
-
children: ["Alpha", "Beta", "Gamma"],
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
const lines = result.split("\n");
|
|
22
|
-
expect(lines[0]).toEqual("Root");
|
|
23
|
-
expect(lines[1]).toEqual("├── Alpha");
|
|
24
|
-
expect(lines[2]).toEqual("├── Beta");
|
|
25
|
-
expect(lines[3]).toEqual("└── Gamma");
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
test("Root with TreeNode children uses correct connectors", () => {
|
|
29
|
-
const service = new DefaultTreePrinterService();
|
|
30
|
-
service.colorEnabled = false;
|
|
31
|
-
|
|
32
|
-
const result = service.print({
|
|
33
|
-
label: "Root",
|
|
34
|
-
children: [
|
|
35
|
-
{ label: "Child1", children: ["Leaf1", "Leaf2"] },
|
|
36
|
-
{
|
|
37
|
-
label: "Child2",
|
|
38
|
-
},
|
|
39
|
-
],
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
const lines = result.split("\n");
|
|
43
|
-
expect(lines[0]).toEqual("Root");
|
|
44
|
-
expect(lines[1]).toEqual("├── Child1");
|
|
45
|
-
expect(lines[2]).toEqual("│ ├── Leaf1");
|
|
46
|
-
expect(lines[3]).toEqual("│ └── Leaf2");
|
|
47
|
-
expect(lines[4]).toEqual("└── Child2");
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
test("Mixed children (strings and nodes at same level)", () => {
|
|
51
|
-
const service = new DefaultTreePrinterService();
|
|
52
|
-
service.colorEnabled = false;
|
|
53
|
-
|
|
54
|
-
const result = service.print({
|
|
55
|
-
label: "Root",
|
|
56
|
-
children: ["StringChild", { label: "NodeChild", children: ["Nested"] }, "Last"],
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
const lines = result.split("\n");
|
|
60
|
-
expect(lines[0]).toEqual("Root");
|
|
61
|
-
expect(lines[1]).toEqual("├── StringChild");
|
|
62
|
-
expect(lines[2]).toEqual("├── NodeChild");
|
|
63
|
-
expect(lines[3]).toEqual("│ └── Nested");
|
|
64
|
-
expect(lines[4]).toEqual("└── Last");
|
|
65
|
-
});
|
|
66
|
-
|
|
67
|
-
test("Deep nesting propagates continuation chars correctly", () => {
|
|
68
|
-
const service = new DefaultTreePrinterService();
|
|
69
|
-
service.colorEnabled = false;
|
|
70
|
-
|
|
71
|
-
const result = service.print({
|
|
72
|
-
label: "Root",
|
|
73
|
-
children: [
|
|
74
|
-
{
|
|
75
|
-
label: "L1",
|
|
76
|
-
children: [
|
|
77
|
-
{
|
|
78
|
-
label: "L2",
|
|
79
|
-
children: ["L3a", "L3b"],
|
|
80
|
-
},
|
|
81
|
-
"L2sibling",
|
|
82
|
-
],
|
|
83
|
-
},
|
|
84
|
-
"RootSibling",
|
|
85
|
-
],
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
const lines = result.split("\n");
|
|
89
|
-
expect(lines[0]).toEqual("Root");
|
|
90
|
-
expect(lines[1]).toEqual("├── L1");
|
|
91
|
-
expect(lines[2]).toEqual("│ ├── L2");
|
|
92
|
-
expect(lines[3]).toEqual("│ │ ├── L3a");
|
|
93
|
-
expect(lines[4]).toEqual("│ │ └── L3b");
|
|
94
|
-
expect(lines[5]).toEqual("│ └── L2sibling");
|
|
95
|
-
expect(lines[6]).toEqual("└── RootSibling");
|
|
96
|
-
});
|
|
97
|
-
|
|
98
|
-
test("Last child uses └── and others use ├──", () => {
|
|
99
|
-
const service = new DefaultTreePrinterService();
|
|
100
|
-
service.colorEnabled = false;
|
|
101
|
-
|
|
102
|
-
const result = service.print({
|
|
103
|
-
label: "Root",
|
|
104
|
-
children: ["A", "B", "C"],
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
const lines = result.split("\n");
|
|
108
|
-
expect(lines[1]!.startsWith("├── ")).toBe(true);
|
|
109
|
-
expect(lines[2]!.startsWith("├── ")).toBe(true);
|
|
110
|
-
expect(lines[3]!.startsWith("└── ")).toBe(true);
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
test("colorEnabled=true wraps labels via colorFunction", () => {
|
|
114
|
-
const service = new DefaultTreePrinterService();
|
|
115
|
-
service.colorEnabled = true;
|
|
116
|
-
service.colorFunction = (text, _color) => `[${text}]`;
|
|
117
|
-
|
|
118
|
-
const result = service.print({
|
|
119
|
-
label: "Root",
|
|
120
|
-
children: ["Child"],
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
const lines = result.split("\n");
|
|
124
|
-
expect(lines[0]).toEqual("[Root]");
|
|
125
|
-
expect(lines[1]).toEqual("└── [Child]");
|
|
126
|
-
});
|
|
127
|
-
|
|
128
|
-
test("colorEnabled=false returns plain text", () => {
|
|
129
|
-
const service = new DefaultTreePrinterService();
|
|
130
|
-
service.colorEnabled = false;
|
|
131
|
-
service.colorFunction = (text, _color) => `[${text}]`;
|
|
132
|
-
|
|
133
|
-
const result = service.print({
|
|
134
|
-
label: "Root",
|
|
135
|
-
children: ["Child"],
|
|
136
|
-
});
|
|
137
|
-
|
|
138
|
-
const lines = result.split("\n");
|
|
139
|
-
expect(lines[0]).toEqual("Root");
|
|
140
|
-
expect(lines[1]).toEqual("└── Child");
|
|
141
|
-
});
|
|
142
|
-
});
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { describe, expect, test } from "bun:test";
|
|
2
|
-
import DefaultContext from "../../../src/runtime/DefaultContext.ts";
|
|
3
|
-
import { getCLIConfig } from "../../fixtures/CLIConfig.ts";
|
|
4
|
-
import TreePrinterServiceProvider from "../../../src/service/treePrinter/TreePrinterServiceProvider.ts";
|
|
5
|
-
import { PRINTER_SERVICE_ID } from "../../../src/api/service/core/PrinterService.ts";
|
|
6
|
-
import DefaultPrinterService from "../../../src/service/printer/DefaultPrinterService.ts";
|
|
7
|
-
import StreamString from "../../fixtures/StreamString.ts";
|
|
8
|
-
import TtyTerminal from "../../../src/terminal/TtyTerminal.ts";
|
|
9
|
-
import TtyStyler from "../../../src/terminal/TtyStyler.ts";
|
|
10
|
-
|
|
11
|
-
describe("TreePrinterServiceProvider tests", () => {
|
|
12
|
-
test("getServiceInfo returns service and empty commands", async () => {
|
|
13
|
-
const treePrinterServiceProvider = new TreePrinterServiceProvider(100);
|
|
14
|
-
const cliConfig = getCLIConfig();
|
|
15
|
-
|
|
16
|
-
const serviceInfo = await treePrinterServiceProvider.getServiceInfo(cliConfig);
|
|
17
|
-
expect(serviceInfo.commands.length).toEqual(0);
|
|
18
|
-
expect(serviceInfo.service).toBeDefined();
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
test("initService sets colorEnabled and colorFunction from PrinterService", async () => {
|
|
22
|
-
const dummyStdout = new StreamString();
|
|
23
|
-
const dummyStderr = new StreamString();
|
|
24
|
-
const treePrinterServiceProvider = new TreePrinterServiceProvider(100);
|
|
25
|
-
const cliConfig = getCLIConfig();
|
|
26
|
-
const context = new DefaultContext(cliConfig);
|
|
27
|
-
|
|
28
|
-
context.addServiceInstance(
|
|
29
|
-
PRINTER_SERVICE_ID,
|
|
30
|
-
new DefaultPrinterService(
|
|
31
|
-
dummyStdout.writableStream,
|
|
32
|
-
dummyStderr.writableStream,
|
|
33
|
-
true,
|
|
34
|
-
true,
|
|
35
|
-
new TtyTerminal(dummyStdout.writeStream),
|
|
36
|
-
new TtyTerminal(dummyStderr.writeStream),
|
|
37
|
-
new TtyStyler(3),
|
|
38
|
-
),
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
const serviceInfo = await treePrinterServiceProvider.getServiceInfo(cliConfig);
|
|
42
|
-
expect(serviceInfo.commands.length).toEqual(0);
|
|
43
|
-
|
|
44
|
-
await treePrinterServiceProvider.initService(context);
|
|
45
|
-
|
|
46
|
-
const service =
|
|
47
|
-
serviceInfo.service as import("../../../src/service/treePrinter/DefaultTreePrinterService.ts").default;
|
|
48
|
-
expect(service.colorEnabled).toBe(true);
|
|
49
|
-
expect(typeof service.colorFunction).toBe("function");
|
|
50
|
-
});
|
|
51
|
-
});
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import { deflateSync } from "node:zlib";
|
|
2
|
-
import { describe, expect, test } from "bun:test";
|
|
3
|
-
import supportsTerminalGraphics from "supports-terminal-graphics";
|
|
4
|
-
import ImageRenderer from "../../src/terminal/ImageRenderer.ts";
|
|
5
|
-
import type Terminal from "../../src/terminal/Terminal.ts";
|
|
6
|
-
|
|
7
|
-
// Build a proper PNG with valid CRC values
|
|
8
|
-
function crc32Table(): Uint32Array {
|
|
9
|
-
const table = new Uint32Array(256);
|
|
10
|
-
for (let n = 0; n < 256; n++) {
|
|
11
|
-
let c = n;
|
|
12
|
-
for (let k = 0; k < 8; k++) {
|
|
13
|
-
if (c & 1) {
|
|
14
|
-
c = 0xedb88320 ^ (c >>> 1);
|
|
15
|
-
} else {
|
|
16
|
-
c = c >>> 1;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
table[n] = c;
|
|
20
|
-
}
|
|
21
|
-
return table;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const CRC_TABLE = crc32Table();
|
|
25
|
-
|
|
26
|
-
function crc32(data: Uint8Array): number {
|
|
27
|
-
let crc = 0xffffffff;
|
|
28
|
-
for (let i = 0; i < data.length; i++) {
|
|
29
|
-
crc = CRC_TABLE[(crc ^ data[i]!) & 0xff]! ^ (crc >>> 8);
|
|
30
|
-
}
|
|
31
|
-
return (crc ^ 0xffffffff) >>> 0;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
function buildValidPng(width: number, height: number, colorType: number = 6): Uint8Array {
|
|
35
|
-
const parts: number[] = [];
|
|
36
|
-
|
|
37
|
-
// PNG signature
|
|
38
|
-
parts.push(137, 80, 78, 71, 13, 10, 26, 10);
|
|
39
|
-
|
|
40
|
-
function addChunk(type: string, data: Uint8Array) {
|
|
41
|
-
// Length (4 bytes big-endian)
|
|
42
|
-
const len = data.length;
|
|
43
|
-
parts.push((len >>> 24) & 0xff, (len >>> 16) & 0xff, (len >>> 8) & 0xff, len & 0xff);
|
|
44
|
-
|
|
45
|
-
// Type (4 bytes)
|
|
46
|
-
const typeBytes = new TextEncoder().encode(type);
|
|
47
|
-
for (const b of typeBytes) parts.push(b);
|
|
48
|
-
|
|
49
|
-
// Data
|
|
50
|
-
for (const b of data) parts.push(b);
|
|
51
|
-
|
|
52
|
-
// CRC over type + data
|
|
53
|
-
const crcInput = new Uint8Array(4 + data.length);
|
|
54
|
-
crcInput.set(typeBytes, 0);
|
|
55
|
-
crcInput.set(data, 4);
|
|
56
|
-
const crcVal = crc32(crcInput);
|
|
57
|
-
parts.push(
|
|
58
|
-
(crcVal >>> 24) & 0xff,
|
|
59
|
-
(crcVal >>> 16) & 0xff,
|
|
60
|
-
(crcVal >>> 8) & 0xff,
|
|
61
|
-
crcVal & 0xff,
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// IHDR
|
|
66
|
-
const ihdr = new Uint8Array(13);
|
|
67
|
-
const ihdrView = new DataView(ihdr.buffer);
|
|
68
|
-
ihdrView.setUint32(0, width);
|
|
69
|
-
ihdrView.setUint32(4, height);
|
|
70
|
-
ihdr[8] = 8; // bit depth
|
|
71
|
-
ihdr[9] = colorType;
|
|
72
|
-
ihdr[10] = 0; // compression
|
|
73
|
-
ihdr[11] = 0; // filter
|
|
74
|
-
ihdr[12] = 0; // interlace
|
|
75
|
-
addChunk("IHDR", ihdr);
|
|
76
|
-
|
|
77
|
-
// IDAT
|
|
78
|
-
const bpp = colorType === 6 ? 4 : 3;
|
|
79
|
-
const stride = width * bpp;
|
|
80
|
-
const raw = new Uint8Array(height * (1 + stride));
|
|
81
|
-
let offset = 0;
|
|
82
|
-
for (let y = 0; y < height; y++) {
|
|
83
|
-
raw[offset++] = 0; // filter: none
|
|
84
|
-
for (let x = 0; x < width; x++) {
|
|
85
|
-
raw[offset++] = (x * 80 + y * 40) & 0xff; // R
|
|
86
|
-
raw[offset++] = (x * 60 + y * 30) & 0xff; // G
|
|
87
|
-
raw[offset++] = (x * 40 + y * 20) & 0xff; // B
|
|
88
|
-
if (bpp === 4) {
|
|
89
|
-
raw[offset++] = 255; // A
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
const compressed = deflateSync(raw);
|
|
94
|
-
addChunk("IDAT", new Uint8Array(compressed));
|
|
95
|
-
|
|
96
|
-
// IEND
|
|
97
|
-
addChunk("IEND", new Uint8Array(0));
|
|
98
|
-
|
|
99
|
-
return new Uint8Array(parts);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
function createMockTerminal(columns: number = 80, rows: number = 24): Terminal {
|
|
103
|
-
return {
|
|
104
|
-
clearLine: () => Promise.resolve(),
|
|
105
|
-
clearUpLines: () => Promise.resolve(),
|
|
106
|
-
hideCursor: () => Promise.resolve(),
|
|
107
|
-
showCursor: () => Promise.resolve(),
|
|
108
|
-
write: () => Promise.resolve(),
|
|
109
|
-
columns: () => columns,
|
|
110
|
-
rows: () => rows,
|
|
111
|
-
};
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
describe("ImageRenderer", () => {
|
|
115
|
-
test("renderImage returns a string with correct protocol markers", async () => {
|
|
116
|
-
const terminal = createMockTerminal(40, 20);
|
|
117
|
-
const renderer = new ImageRenderer(terminal);
|
|
118
|
-
const png = buildValidPng(4, 4, 6);
|
|
119
|
-
|
|
120
|
-
const result = await renderer.renderImage(png, 50);
|
|
121
|
-
expect(typeof result).toBe("string");
|
|
122
|
-
expect(result.length).toBeGreaterThan(0);
|
|
123
|
-
|
|
124
|
-
if (supportsTerminalGraphics.stdout.kitty) {
|
|
125
|
-
expect(result).toContain("\x1b_Gf=100");
|
|
126
|
-
} else if (supportsTerminalGraphics.stdout.iterm2) {
|
|
127
|
-
expect(result).toContain("\x1b]1337;File=inline=1;width=50%:");
|
|
128
|
-
} else {
|
|
129
|
-
expect(result).toContain("\n");
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
test("renderImage with default widthPercentage", async () => {
|
|
134
|
-
const terminal = createMockTerminal(80, 24);
|
|
135
|
-
const renderer = new ImageRenderer(terminal);
|
|
136
|
-
const png = buildValidPng(2, 2, 6);
|
|
137
|
-
|
|
138
|
-
const result = await renderer.renderImage(png);
|
|
139
|
-
expect(typeof result).toBe("string");
|
|
140
|
-
expect(result.length).toBeGreaterThan(0);
|
|
141
|
-
});
|
|
142
|
-
|
|
143
|
-
test("renderImage with RGB image (colorType=2)", async () => {
|
|
144
|
-
const terminal = createMockTerminal(40, 20);
|
|
145
|
-
const renderer = new ImageRenderer(terminal);
|
|
146
|
-
const png = buildValidPng(4, 4, 2);
|
|
147
|
-
|
|
148
|
-
const result = await renderer.renderImage(png, 50);
|
|
149
|
-
expect(typeof result).toBe("string");
|
|
150
|
-
expect(result.length).toBeGreaterThan(0);
|
|
151
|
-
});
|
|
152
|
-
});
|
|
@@ -1,219 +0,0 @@
|
|
|
1
|
-
import { deflateSync } from "node:zlib";
|
|
2
|
-
import { describe, expect, test } from "bun:test";
|
|
3
|
-
import { decodePngToRGBA } from "../../src/terminal/PngDecoder.ts";
|
|
4
|
-
|
|
5
|
-
// Helper to build a minimal PNG from raw components
|
|
6
|
-
function buildPng(chunks: Array<{ type: string; data: Uint8Array }>): Uint8Array {
|
|
7
|
-
const parts: Uint8Array[] = [];
|
|
8
|
-
// PNG signature
|
|
9
|
-
parts.push(new Uint8Array([137, 80, 78, 71, 13, 10, 26, 10]));
|
|
10
|
-
|
|
11
|
-
for (const chunk of chunks) {
|
|
12
|
-
const typeBytes = new TextEncoder().encode(chunk.type);
|
|
13
|
-
const lengthBuf = new ArrayBuffer(4);
|
|
14
|
-
new DataView(lengthBuf).setUint32(0, chunk.data.length);
|
|
15
|
-
|
|
16
|
-
// CRC placeholder (4 bytes of zeros - decoder doesn't validate CRC)
|
|
17
|
-
const crc = new Uint8Array(4);
|
|
18
|
-
|
|
19
|
-
parts.push(new Uint8Array(lengthBuf));
|
|
20
|
-
parts.push(typeBytes);
|
|
21
|
-
parts.push(chunk.data);
|
|
22
|
-
parts.push(crc);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const totalLength = parts.reduce((sum, p) => sum + p.length, 0);
|
|
26
|
-
const result = new Uint8Array(totalLength);
|
|
27
|
-
let offset = 0;
|
|
28
|
-
for (const p of parts) {
|
|
29
|
-
result.set(p, offset);
|
|
30
|
-
offset += p.length;
|
|
31
|
-
}
|
|
32
|
-
return result;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function makeIHDR(
|
|
36
|
-
width: number,
|
|
37
|
-
height: number,
|
|
38
|
-
bitDepth: number,
|
|
39
|
-
colorType: number,
|
|
40
|
-
interlace: number = 0,
|
|
41
|
-
): Uint8Array {
|
|
42
|
-
const buf = new ArrayBuffer(13);
|
|
43
|
-
const view = new DataView(buf);
|
|
44
|
-
view.setUint32(0, width);
|
|
45
|
-
view.setUint32(4, height);
|
|
46
|
-
const bytes = new Uint8Array(buf);
|
|
47
|
-
bytes[8] = bitDepth;
|
|
48
|
-
bytes[9] = colorType;
|
|
49
|
-
bytes[10] = 0; // compression
|
|
50
|
-
bytes[11] = 0; // filter method
|
|
51
|
-
bytes[12] = interlace;
|
|
52
|
-
return bytes;
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// Build raw scanline data for a simple image with a given filter type
|
|
56
|
-
function makeRawScanlines(
|
|
57
|
-
width: number,
|
|
58
|
-
height: number,
|
|
59
|
-
bpp: number,
|
|
60
|
-
filterType: number,
|
|
61
|
-
): Uint8Array {
|
|
62
|
-
const stride = width * bpp;
|
|
63
|
-
const raw = new Uint8Array(height * (1 + stride));
|
|
64
|
-
let offset = 0;
|
|
65
|
-
for (let y = 0; y < height; y++) {
|
|
66
|
-
raw[offset++] = filterType;
|
|
67
|
-
for (let x = 0; x < stride; x++) {
|
|
68
|
-
// Simple pixel values
|
|
69
|
-
raw[offset++] = ((y * stride + x) * 37 + 100) & 0xff;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
return raw;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
function buildSimplePng(
|
|
76
|
-
width: number,
|
|
77
|
-
height: number,
|
|
78
|
-
colorType: number,
|
|
79
|
-
filterType: number = 0,
|
|
80
|
-
): Uint8Array {
|
|
81
|
-
const bpp = colorType === 6 ? 4 : 3;
|
|
82
|
-
const rawData = makeRawScanlines(width, height, bpp, filterType);
|
|
83
|
-
const compressed = deflateSync(rawData);
|
|
84
|
-
|
|
85
|
-
return buildPng([
|
|
86
|
-
{ type: "IHDR", data: makeIHDR(width, height, 8, colorType) },
|
|
87
|
-
{ type: "IDAT", data: new Uint8Array(compressed) },
|
|
88
|
-
{ type: "IEND", data: new Uint8Array(0) },
|
|
89
|
-
]);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
describe("decodePngToRGBA", () => {
|
|
93
|
-
test("decodes a simple RGBA (colorType=6) PNG", () => {
|
|
94
|
-
const png = buildSimplePng(2, 2, 6, 0);
|
|
95
|
-
const result = decodePngToRGBA(png);
|
|
96
|
-
expect(result.width).toBe(2);
|
|
97
|
-
expect(result.height).toBe(2);
|
|
98
|
-
expect(result.pixels.length).toBe(2 * 2 * 4);
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
test("decodes a simple RGB (colorType=2) PNG and sets alpha to 255", () => {
|
|
102
|
-
const png = buildSimplePng(2, 2, 2, 0);
|
|
103
|
-
const result = decodePngToRGBA(png);
|
|
104
|
-
expect(result.width).toBe(2);
|
|
105
|
-
expect(result.height).toBe(2);
|
|
106
|
-
expect(result.pixels.length).toBe(2 * 2 * 4);
|
|
107
|
-
// Every 4th byte (alpha) should be 255
|
|
108
|
-
for (let i = 3; i < result.pixels.length; i += 4) {
|
|
109
|
-
expect(result.pixels[i]).toBe(255);
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
test("handles filter type 1 (Sub)", () => {
|
|
114
|
-
const png = buildSimplePng(3, 2, 6, 1);
|
|
115
|
-
const result = decodePngToRGBA(png);
|
|
116
|
-
expect(result.width).toBe(3);
|
|
117
|
-
expect(result.height).toBe(2);
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
test("handles filter type 2 (Up)", () => {
|
|
121
|
-
const png = buildSimplePng(3, 2, 6, 2);
|
|
122
|
-
const result = decodePngToRGBA(png);
|
|
123
|
-
expect(result.width).toBe(3);
|
|
124
|
-
expect(result.height).toBe(2);
|
|
125
|
-
});
|
|
126
|
-
|
|
127
|
-
test("handles filter type 3 (Average)", () => {
|
|
128
|
-
const png = buildSimplePng(3, 2, 6, 3);
|
|
129
|
-
const result = decodePngToRGBA(png);
|
|
130
|
-
expect(result.width).toBe(3);
|
|
131
|
-
expect(result.height).toBe(2);
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
test("handles filter type 4 (Paeth)", () => {
|
|
135
|
-
const png = buildSimplePng(3, 2, 6, 4);
|
|
136
|
-
const result = decodePngToRGBA(png);
|
|
137
|
-
expect(result.width).toBe(3);
|
|
138
|
-
expect(result.height).toBe(2);
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
test("handles filter type 4 (Paeth) with RGB colorType", () => {
|
|
142
|
-
const png = buildSimplePng(3, 3, 2, 4);
|
|
143
|
-
const result = decodePngToRGBA(png);
|
|
144
|
-
expect(result.width).toBe(3);
|
|
145
|
-
expect(result.height).toBe(3);
|
|
146
|
-
// Alpha should be 255 for RGB
|
|
147
|
-
for (let i = 3; i < result.pixels.length; i += 4) {
|
|
148
|
-
expect(result.pixels[i]).toBe(255);
|
|
149
|
-
}
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
test("throws on invalid PNG signature", () => {
|
|
153
|
-
const data = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]);
|
|
154
|
-
expect(() => decodePngToRGBA(data)).toThrow("Invalid PNG signature");
|
|
155
|
-
});
|
|
156
|
-
|
|
157
|
-
test("throws on unsupported bit depth", () => {
|
|
158
|
-
const png = buildPng([
|
|
159
|
-
{ type: "IHDR", data: makeIHDR(1, 1, 16, 2) },
|
|
160
|
-
{ type: "IEND", data: new Uint8Array(0) },
|
|
161
|
-
]);
|
|
162
|
-
expect(() => decodePngToRGBA(png)).toThrow("Unsupported bit depth: 16");
|
|
163
|
-
});
|
|
164
|
-
|
|
165
|
-
test("throws on unsupported color type", () => {
|
|
166
|
-
const png = buildPng([
|
|
167
|
-
{ type: "IHDR", data: makeIHDR(1, 1, 8, 0) },
|
|
168
|
-
{ type: "IEND", data: new Uint8Array(0) },
|
|
169
|
-
]);
|
|
170
|
-
expect(() => decodePngToRGBA(png)).toThrow("Unsupported color type: 0");
|
|
171
|
-
});
|
|
172
|
-
|
|
173
|
-
test("throws on interlaced PNG", () => {
|
|
174
|
-
const png = buildPng([
|
|
175
|
-
{ type: "IHDR", data: makeIHDR(1, 1, 8, 6, 1) },
|
|
176
|
-
{ type: "IEND", data: new Uint8Array(0) },
|
|
177
|
-
]);
|
|
178
|
-
expect(() => decodePngToRGBA(png)).toThrow("Interlaced PNGs are not supported");
|
|
179
|
-
});
|
|
180
|
-
|
|
181
|
-
test("throws on unknown filter type", () => {
|
|
182
|
-
// Build raw scanlines with invalid filter type 5
|
|
183
|
-
const width = 1;
|
|
184
|
-
const height = 1;
|
|
185
|
-
const bpp = 4;
|
|
186
|
-
const stride = width * bpp;
|
|
187
|
-
const raw = new Uint8Array(height * (1 + stride));
|
|
188
|
-
raw[0] = 5; // invalid filter
|
|
189
|
-
for (let i = 1; i <= stride; i++) raw[i] = 128;
|
|
190
|
-
const compressed = deflateSync(raw);
|
|
191
|
-
|
|
192
|
-
const png = buildPng([
|
|
193
|
-
{ type: "IHDR", data: makeIHDR(width, height, 8, 6) },
|
|
194
|
-
{ type: "IDAT", data: new Uint8Array(compressed) },
|
|
195
|
-
{ type: "IEND", data: new Uint8Array(0) },
|
|
196
|
-
]);
|
|
197
|
-
expect(() => decodePngToRGBA(png)).toThrow("Unknown filter type: 5");
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
test("handles multiple IDAT chunks", () => {
|
|
201
|
-
const bpp = 4;
|
|
202
|
-
const rawData = makeRawScanlines(2, 2, bpp, 0);
|
|
203
|
-
const compressed = new Uint8Array(deflateSync(rawData));
|
|
204
|
-
// Split compressed data into two chunks
|
|
205
|
-
const mid = Math.floor(compressed.length / 2);
|
|
206
|
-
const chunk1 = compressed.subarray(0, mid);
|
|
207
|
-
const chunk2 = compressed.subarray(mid);
|
|
208
|
-
|
|
209
|
-
const png = buildPng([
|
|
210
|
-
{ type: "IHDR", data: makeIHDR(2, 2, 8, 6) },
|
|
211
|
-
{ type: "IDAT", data: chunk1 },
|
|
212
|
-
{ type: "IDAT", data: chunk2 },
|
|
213
|
-
{ type: "IEND", data: new Uint8Array(0) },
|
|
214
|
-
]);
|
|
215
|
-
const result = decodePngToRGBA(png);
|
|
216
|
-
expect(result.width).toBe(2);
|
|
217
|
-
expect(result.height).toBe(2);
|
|
218
|
-
});
|
|
219
|
-
});
|