padrone 1.9.0 → 2.0.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/CHANGELOG.md +13 -0
- package/README.md +2 -2
- package/dist/codegen/code-builder.d.mts +10 -0
- package/dist/codegen/code-builder.d.mts.map +1 -0
- package/dist/codegen/code-builder.mjs +185 -0
- package/dist/codegen/code-builder.mjs.map +1 -0
- package/dist/codegen/discovery.d.mts +44 -0
- package/dist/codegen/discovery.d.mts.map +1 -0
- package/dist/codegen/discovery.mjs +179 -0
- package/dist/codegen/discovery.mjs.map +1 -0
- package/dist/codegen/file-emitter.d.mts +10 -0
- package/dist/codegen/file-emitter.d.mts.map +1 -0
- package/dist/codegen/file-emitter.mjs +58 -0
- package/dist/codegen/file-emitter.mjs.map +1 -0
- package/dist/codegen/generators/barrel-file.d.mts +10 -0
- package/dist/codegen/generators/barrel-file.d.mts.map +1 -0
- package/dist/codegen/generators/barrel-file.mjs +16 -0
- package/dist/codegen/generators/barrel-file.mjs.map +1 -0
- package/dist/codegen/generators/command-file.d.mts +25 -0
- package/dist/codegen/generators/command-file.d.mts.map +1 -0
- package/dist/codegen/generators/command-file.mjs +130 -0
- package/dist/codegen/generators/command-file.mjs.map +1 -0
- package/dist/codegen/generators/command-tree.d.mts +17 -0
- package/dist/codegen/generators/command-tree.d.mts.map +1 -0
- package/dist/codegen/generators/command-tree.mjs +72 -0
- package/dist/codegen/generators/command-tree.mjs.map +1 -0
- package/dist/codegen/index.d.mts +15 -330
- package/dist/codegen/index.mjs +13 -1507
- package/dist/codegen/parsers/bash.d.mts +19 -0
- package/dist/codegen/parsers/bash.d.mts.map +1 -0
- package/dist/codegen/parsers/bash.mjs +112 -0
- package/dist/codegen/parsers/bash.mjs.map +1 -0
- package/dist/codegen/parsers/fish.d.mts +13 -0
- package/dist/codegen/parsers/fish.d.mts.map +1 -0
- package/dist/codegen/parsers/fish.mjs +108 -0
- package/dist/codegen/parsers/fish.mjs.map +1 -0
- package/dist/codegen/parsers/help.d.mts +15 -0
- package/dist/codegen/parsers/help.d.mts.map +1 -0
- package/dist/codegen/parsers/help.mjs +271 -0
- package/dist/codegen/parsers/help.mjs.map +1 -0
- package/dist/codegen/parsers/merge.d.mts +14 -0
- package/dist/codegen/parsers/merge.d.mts.map +1 -0
- package/dist/codegen/parsers/merge.mjs +76 -0
- package/dist/codegen/parsers/merge.mjs.map +1 -0
- package/dist/codegen/parsers/zsh.d.mts +16 -0
- package/dist/codegen/parsers/zsh.d.mts.map +1 -0
- package/dist/codegen/parsers/zsh.mjs +161 -0
- package/dist/codegen/parsers/zsh.mjs.map +1 -0
- package/dist/codegen/schema-to-code.d.mts +24 -0
- package/dist/codegen/schema-to-code.d.mts.map +1 -0
- package/dist/codegen/schema-to-code.mjs +147 -0
- package/dist/codegen/schema-to-code.mjs.map +1 -0
- package/dist/codegen/template.d.mts +18 -0
- package/dist/codegen/template.d.mts.map +1 -0
- package/dist/codegen/template.mjs +37 -0
- package/dist/codegen/template.mjs.map +1 -0
- package/dist/codegen/types.d.mts +144 -0
- package/dist/codegen/types.d.mts.map +1 -0
- package/dist/completion.d.mts +2 -0
- package/dist/completion.mjs +2 -0
- package/dist/core/args.d.mts +3 -0
- package/dist/{args-WmyGc59s.mjs → core/args.mjs} +5 -81
- package/dist/core/args.mjs.map +1 -0
- package/dist/core/commands.d.mts +13 -0
- package/dist/core/commands.d.mts.map +1 -0
- package/dist/{commands-ohEApqIw.mjs → core/commands.mjs} +4 -232
- package/dist/core/commands.mjs.map +1 -0
- package/dist/core/create.d.mts +63 -0
- package/dist/core/create.d.mts.map +1 -0
- package/dist/core/create.mjs +230 -0
- package/dist/core/create.mjs.map +1 -0
- package/dist/core/default-runtime.mjs +198 -0
- package/dist/core/default-runtime.mjs.map +1 -0
- package/dist/core/errors.d.mts +107 -0
- package/dist/core/errors.d.mts.map +1 -0
- package/dist/{errors-DA4KzK1M.mjs → core/errors.mjs} +2 -2
- package/dist/core/errors.mjs.map +1 -0
- package/dist/core/exec.mjs +191 -0
- package/dist/core/exec.mjs.map +1 -0
- package/dist/core/interceptors.d.mts +33 -0
- package/dist/core/interceptors.d.mts.map +1 -0
- package/dist/core/interceptors.mjs +253 -0
- package/dist/core/interceptors.mjs.map +1 -0
- package/dist/core/parse.mjs +181 -0
- package/dist/core/parse.mjs.map +1 -0
- package/dist/core/program-methods.mjs +256 -0
- package/dist/core/program-methods.mjs.map +1 -0
- package/dist/core/results.d.mts +13 -0
- package/dist/core/results.d.mts.map +1 -0
- package/dist/core/results.mjs +150 -0
- package/dist/core/results.mjs.map +1 -0
- package/dist/core/runtime.d.mts +213 -0
- package/dist/core/runtime.d.mts.map +1 -0
- package/dist/core/runtime.mjs +10 -0
- package/dist/core/runtime.mjs.map +1 -0
- package/dist/core/validate.mjs +220 -0
- package/dist/core/validate.mjs.map +1 -0
- package/dist/docs/index.d.mts +1 -1
- package/dist/docs/index.d.mts.map +1 -1
- package/dist/docs/index.mjs +2 -2
- package/dist/docs/index.mjs.map +1 -1
- package/dist/extension/auto-output.d.mts +53 -0
- package/dist/extension/auto-output.d.mts.map +1 -0
- package/dist/extension/auto-output.mjs +116 -0
- package/dist/extension/auto-output.mjs.map +1 -0
- package/dist/extension/color.d.mts +19 -0
- package/dist/extension/color.d.mts.map +1 -0
- package/dist/extension/color.mjs +37 -0
- package/dist/extension/color.mjs.map +1 -0
- package/dist/extension/completion.d.mts +25 -0
- package/dist/extension/completion.d.mts.map +1 -0
- package/dist/extension/completion.mjs +40 -0
- package/dist/extension/completion.mjs.map +1 -0
- package/dist/extension/config.d.mts +55 -0
- package/dist/extension/config.d.mts.map +1 -0
- package/dist/extension/config.mjs +162 -0
- package/dist/extension/config.mjs.map +1 -0
- package/dist/extension/env.d.mts +42 -0
- package/dist/extension/env.d.mts.map +1 -0
- package/dist/extension/env.mjs +44 -0
- package/dist/extension/env.mjs.map +1 -0
- package/dist/extension/help.d.mts +29 -0
- package/dist/extension/help.d.mts.map +1 -0
- package/dist/extension/help.mjs +161 -0
- package/dist/extension/help.mjs.map +1 -0
- package/dist/extension/index.d.mts +18 -0
- package/dist/extension/ink.d.mts +31 -0
- package/dist/extension/ink.d.mts.map +1 -0
- package/dist/extension/ink.mjs +69 -0
- package/dist/extension/ink.mjs.map +1 -0
- package/dist/extension/interactive.d.mts +16 -0
- package/dist/extension/interactive.d.mts.map +1 -0
- package/dist/extension/interactive.mjs +89 -0
- package/dist/extension/interactive.mjs.map +1 -0
- package/dist/extension/logger.d.mts +67 -0
- package/dist/extension/logger.d.mts.map +1 -0
- package/dist/extension/logger.mjs +188 -0
- package/dist/extension/logger.mjs.map +1 -0
- package/dist/extension/man.d.mts +25 -0
- package/dist/extension/man.d.mts.map +1 -0
- package/dist/extension/man.mjs +41 -0
- package/dist/extension/man.mjs.map +1 -0
- package/dist/extension/mcp.d.mts +28 -0
- package/dist/extension/mcp.d.mts.map +1 -0
- package/dist/extension/mcp.mjs +44 -0
- package/dist/extension/mcp.mjs.map +1 -0
- package/dist/extension/progress-renderer.d.mts +13 -0
- package/dist/extension/progress-renderer.d.mts.map +1 -0
- package/dist/extension/progress-renderer.mjs +351 -0
- package/dist/extension/progress-renderer.mjs.map +1 -0
- package/dist/extension/progress.d.mts +76 -0
- package/dist/extension/progress.d.mts.map +1 -0
- package/dist/extension/progress.mjs +225 -0
- package/dist/extension/progress.mjs.map +1 -0
- package/dist/extension/repl.d.mts +26 -0
- package/dist/extension/repl.d.mts.map +1 -0
- package/dist/extension/repl.mjs +67 -0
- package/dist/extension/repl.mjs.map +1 -0
- package/dist/extension/serve.d.mts +27 -0
- package/dist/extension/serve.d.mts.map +1 -0
- package/dist/extension/serve.mjs +41 -0
- package/dist/extension/serve.mjs.map +1 -0
- package/dist/extension/signal.d.mts +19 -0
- package/dist/extension/signal.d.mts.map +1 -0
- package/dist/extension/signal.mjs +81 -0
- package/dist/extension/signal.mjs.map +1 -0
- package/dist/extension/stdin.d.mts +19 -0
- package/dist/extension/stdin.d.mts.map +1 -0
- package/dist/extension/stdin.mjs +52 -0
- package/dist/extension/stdin.mjs.map +1 -0
- package/dist/extension/suggestions.d.mts +6 -0
- package/dist/extension/suggestions.d.mts.map +1 -0
- package/dist/extension/suggestions.mjs +113 -0
- package/dist/extension/suggestions.mjs.map +1 -0
- package/dist/extension/timing.d.mts +27 -0
- package/dist/extension/timing.d.mts.map +1 -0
- package/dist/extension/timing.mjs +71 -0
- package/dist/extension/timing.mjs.map +1 -0
- package/dist/extension/tracing.d.mts +85 -0
- package/dist/extension/tracing.d.mts.map +1 -0
- package/dist/extension/tracing.mjs +107 -0
- package/dist/extension/tracing.mjs.map +1 -0
- package/dist/extension/update-check.d.mts +20 -0
- package/dist/extension/update-check.d.mts.map +1 -0
- package/dist/extension/update-check.mjs +62 -0
- package/dist/extension/update-check.mjs.map +1 -0
- package/dist/extension/utils.mjs +43 -0
- package/dist/extension/utils.mjs.map +1 -0
- package/dist/extension/version.d.mts +20 -0
- package/dist/extension/version.d.mts.map +1 -0
- package/dist/extension/version.mjs +51 -0
- package/dist/extension/version.mjs.map +1 -0
- package/dist/{completion-D8qkAinX.mjs → feature/completion.mjs} +4 -3
- package/dist/feature/completion.mjs.map +1 -0
- package/dist/feature/interactive.mjs +145 -0
- package/dist/feature/interactive.mjs.map +1 -0
- package/dist/feature/mcp.d.mts +18 -0
- package/dist/feature/mcp.d.mts.map +1 -0
- package/dist/{mcp-wCoVFTXz.mjs → feature/mcp.mjs} +6 -6
- package/dist/feature/mcp.mjs.map +1 -0
- package/dist/feature/repl-loop.mjs +217 -0
- package/dist/feature/repl-loop.mjs.map +1 -0
- package/dist/feature/serve.d.mts +18 -0
- package/dist/feature/serve.d.mts.map +1 -0
- package/dist/{serve-ICZFl3xr.mjs → feature/serve.mjs} +7 -7
- package/dist/feature/serve.mjs.map +1 -0
- package/dist/feature/test.d.mts +109 -0
- package/dist/feature/test.d.mts.map +1 -0
- package/dist/feature/test.mjs +116 -0
- package/dist/feature/test.mjs.map +1 -0
- package/dist/feature/update-check.d.mts +35 -0
- package/dist/feature/update-check.d.mts.map +1 -0
- package/dist/{update-check-CZ2VqjnV.mjs → feature/update-check.mjs} +2 -2
- package/dist/feature/update-check.mjs.map +1 -0
- package/dist/feature/wrap.d.mts +58 -0
- package/dist/feature/wrap.d.mts.map +1 -0
- package/dist/feature/wrap.mjs +77 -0
- package/dist/feature/wrap.mjs.map +1 -0
- package/dist/index.d.mts +38 -902
- package/dist/index.mjs +25 -4377
- package/dist/ink.d.mts +2 -0
- package/dist/ink.mjs +2 -0
- package/dist/man.d.mts +2 -0
- package/dist/man.mjs +2 -0
- package/dist/mcp.d.mts +3 -0
- package/dist/mcp.mjs +2 -0
- package/dist/output/colorizer.d.mts +28 -0
- package/dist/output/colorizer.d.mts.map +1 -0
- package/dist/output/colorizer.mjs +94 -0
- package/dist/output/colorizer.mjs.map +1 -0
- package/dist/{formatter-CY3KrOEd.d.mts → output/formatter.d.mts} +2 -28
- package/dist/output/formatter.d.mts.map +1 -0
- package/dist/output/formatter.mjs +360 -0
- package/dist/output/formatter.mjs.map +1 -0
- package/dist/output/help.d.mts +18 -0
- package/dist/output/help.d.mts.map +1 -0
- package/dist/output/help.mjs +267 -0
- package/dist/output/help.mjs.map +1 -0
- package/dist/output/output-indicator.d.mts +27 -0
- package/dist/output/output-indicator.d.mts.map +1 -0
- package/dist/output/output-indicator.mjs +54 -0
- package/dist/output/output-indicator.mjs.map +1 -0
- package/dist/output/primitives.d.mts +33 -0
- package/dist/output/primitives.d.mts.map +1 -0
- package/dist/output/primitives.mjs +206 -0
- package/dist/output/primitives.mjs.map +1 -0
- package/dist/output/styling.d.mts +38 -0
- package/dist/output/styling.d.mts.map +1 -0
- package/dist/output/styling.mjs +146 -0
- package/dist/output/styling.mjs.map +1 -0
- package/dist/schema/zod.d.mts +6 -0
- package/dist/schema/zod.d.mts.map +1 -0
- package/dist/schema/zod.mjs +50 -0
- package/dist/schema/zod.mjs.map +1 -0
- package/dist/serve.d.mts +2 -0
- package/dist/serve.mjs +2 -0
- package/dist/test.d.mts +2 -109
- package/dist/test.mjs +1 -115
- package/dist/tracing.d.mts +2 -0
- package/dist/tracing.mjs +2 -0
- package/dist/types/args-meta.d.mts +129 -0
- package/dist/types/args-meta.d.mts.map +1 -0
- package/dist/types/builder.d.mts +212 -0
- package/dist/types/builder.d.mts.map +1 -0
- package/dist/types/command.d.mts +112 -0
- package/dist/types/command.d.mts.map +1 -0
- package/dist/types/index.d.mts +8 -0
- package/dist/types/interceptor.d.mts +232 -0
- package/dist/types/interceptor.d.mts.map +1 -0
- package/dist/types/preferences.d.mts +79 -0
- package/dist/types/preferences.d.mts.map +1 -0
- package/dist/types/result.d.mts +61 -0
- package/dist/types/result.d.mts.map +1 -0
- package/dist/types/schema.d.mts +24 -0
- package/dist/types/schema.d.mts.map +1 -0
- package/dist/util/dotenv.mjs +174 -0
- package/dist/util/dotenv.mjs.map +1 -0
- package/dist/util/shell-utils.mjs +80 -0
- package/dist/util/shell-utils.mjs.map +1 -0
- package/dist/util/stream.d.mts +33 -0
- package/dist/util/stream.d.mts.map +1 -0
- package/dist/{stream-DC4H8YTx.mjs → util/stream.mjs} +2 -2
- package/dist/util/stream.mjs.map +1 -0
- package/dist/util/type-helpers.d.mts +74 -0
- package/dist/util/type-helpers.d.mts.map +1 -0
- package/dist/util/type-utils.d.mts +186 -0
- package/dist/util/type-utils.d.mts.map +1 -0
- package/dist/util/utils.mjs +43 -0
- package/dist/util/utils.mjs.map +1 -0
- package/dist/zod.d.mts +1 -32
- package/dist/zod.mjs +1 -49
- package/package.json +65 -17
- package/src/completion.ts +2 -0
- package/src/extension/completion.ts +3 -0
- package/src/extension/index.ts +0 -12
- package/src/extension/ink.ts +2 -1
- package/src/extension/man.ts +3 -0
- package/src/extension/mcp.ts +3 -0
- package/src/extension/serve.ts +3 -0
- package/src/extension/tracing.ts +2 -0
- package/src/index.ts +0 -19
- package/src/ink.ts +2 -0
- package/src/man.ts +2 -0
- package/src/mcp.ts +3 -0
- package/src/serve.ts +2 -0
- package/src/tracing.ts +9 -0
- package/src/zod.ts +1 -1
- package/dist/args-WmyGc59s.mjs.map +0 -1
- package/dist/codegen/index.d.mts.map +0 -1
- package/dist/codegen/index.mjs.map +0 -1
- package/dist/commands-ohEApqIw.mjs.map +0 -1
- package/dist/completion-D8qkAinX.mjs.map +0 -1
- package/dist/errors-DA4KzK1M.mjs.map +0 -1
- package/dist/formatter-CY3KrOEd.d.mts.map +0 -1
- package/dist/help-CeI45CJx.mjs +0 -892
- package/dist/help-CeI45CJx.mjs.map +0 -1
- package/dist/index-C3Ed1LYN.d.mts +0 -1432
- package/dist/index-C3Ed1LYN.d.mts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/mcp-wCoVFTXz.mjs.map +0 -1
- package/dist/serve-ICZFl3xr.mjs.map +0 -1
- package/dist/stream-DC4H8YTx.mjs.map +0 -1
- package/dist/test.d.mts.map +0 -1
- package/dist/test.mjs.map +0 -1
- package/dist/update-check-CZ2VqjnV.mjs.map +0 -1
- package/dist/zod.d.mts.map +0 -1
- package/dist/zod.mjs.map +0 -1
package/dist/ink.d.mts
ADDED
package/dist/ink.mjs
ADDED
package/dist/man.d.mts
ADDED
package/dist/man.mjs
ADDED
package/dist/mcp.d.mts
ADDED
package/dist/mcp.mjs
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//#region src/output/colorizer.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Available ANSI styles that can be combined for each color role.
|
|
4
|
+
*/
|
|
5
|
+
type AnsiStyle = 'reset' | 'bold' | 'dim' | 'italic' | 'underline' | 'strikethrough' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray';
|
|
6
|
+
/**
|
|
7
|
+
* Maps each semantic color role to an array of ANSI styles.
|
|
8
|
+
* Partial configs are merged with the default theme.
|
|
9
|
+
*/
|
|
10
|
+
type ColorConfig = {
|
|
11
|
+
command?: AnsiStyle[];
|
|
12
|
+
arg?: AnsiStyle[];
|
|
13
|
+
type?: AnsiStyle[];
|
|
14
|
+
description?: AnsiStyle[];
|
|
15
|
+
label?: AnsiStyle[];
|
|
16
|
+
meta?: AnsiStyle[];
|
|
17
|
+
example?: AnsiStyle[];
|
|
18
|
+
exampleValue?: AnsiStyle[];
|
|
19
|
+
deprecated?: AnsiStyle[];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Available predefined color themes.
|
|
23
|
+
*/
|
|
24
|
+
type ColorTheme = 'default' | 'ocean' | 'warm' | 'monochrome';
|
|
25
|
+
declare const colorThemes: Record<ColorTheme, Required<ColorConfig>>;
|
|
26
|
+
//#endregion
|
|
27
|
+
export { AnsiStyle, ColorConfig, ColorTheme, colorThemes };
|
|
28
|
+
//# sourceMappingURL=colorizer.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorizer.d.mts","names":[],"sources":["../../src/output/colorizer.ts"],"mappings":";;AAqBA;;KAAY,SAAA;;AAAS;AAoBrB;;KAAY,WAAA;EACV,OAAA,GAAU,SAAA;EACV,GAAA,GAAM,SAAA;EACN,IAAA,GAAO,SAAA;EACP,WAAA,GAAc,SAAA;EACd,KAAA,GAAQ,SAAA;EACR,IAAA,GAAO,SAAA;EACP,OAAA,GAAU,SAAA;EACV,YAAA,GAAe,SAAA;EACf,UAAA,GAAa,SAAA;AAAA;;;;KAsEH,UAAA;AAAA,cAEC,WAAA,EAAa,MAAA,CAAO,UAAA,EAAY,QAAA,CAAS,WAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
//#region src/output/colorizer.ts
|
|
2
|
+
const ansiCodes = {
|
|
3
|
+
reset: "\x1B[0m",
|
|
4
|
+
bold: "\x1B[1m",
|
|
5
|
+
dim: "\x1B[2m",
|
|
6
|
+
italic: "\x1B[3m",
|
|
7
|
+
underline: "\x1B[4m",
|
|
8
|
+
strikethrough: "\x1B[9m",
|
|
9
|
+
red: "\x1B[31m",
|
|
10
|
+
green: "\x1B[32m",
|
|
11
|
+
yellow: "\x1B[33m",
|
|
12
|
+
blue: "\x1B[34m",
|
|
13
|
+
magenta: "\x1B[35m",
|
|
14
|
+
cyan: "\x1B[36m",
|
|
15
|
+
white: "\x1B[37m",
|
|
16
|
+
gray: "\x1B[90m"
|
|
17
|
+
};
|
|
18
|
+
const defaultTheme = {
|
|
19
|
+
command: ["cyan", "bold"],
|
|
20
|
+
arg: ["green"],
|
|
21
|
+
type: ["yellow"],
|
|
22
|
+
description: ["dim"],
|
|
23
|
+
label: ["bold"],
|
|
24
|
+
meta: ["gray"],
|
|
25
|
+
example: ["underline"],
|
|
26
|
+
exampleValue: ["italic"],
|
|
27
|
+
deprecated: ["strikethrough", "gray"]
|
|
28
|
+
};
|
|
29
|
+
const colorThemes = {
|
|
30
|
+
default: defaultTheme,
|
|
31
|
+
ocean: {
|
|
32
|
+
command: ["blue", "bold"],
|
|
33
|
+
arg: ["cyan"],
|
|
34
|
+
type: ["green"],
|
|
35
|
+
description: ["dim"],
|
|
36
|
+
label: ["bold"],
|
|
37
|
+
meta: ["gray"],
|
|
38
|
+
example: ["underline", "cyan"],
|
|
39
|
+
exampleValue: ["italic"],
|
|
40
|
+
deprecated: ["strikethrough", "gray"]
|
|
41
|
+
},
|
|
42
|
+
warm: {
|
|
43
|
+
command: ["yellow", "bold"],
|
|
44
|
+
arg: ["red"],
|
|
45
|
+
type: ["magenta"],
|
|
46
|
+
description: ["dim"],
|
|
47
|
+
label: ["bold"],
|
|
48
|
+
meta: ["gray"],
|
|
49
|
+
example: ["underline", "yellow"],
|
|
50
|
+
exampleValue: ["italic"],
|
|
51
|
+
deprecated: ["strikethrough", "gray"]
|
|
52
|
+
},
|
|
53
|
+
monochrome: {
|
|
54
|
+
command: ["bold"],
|
|
55
|
+
arg: ["underline"],
|
|
56
|
+
type: ["dim"],
|
|
57
|
+
description: ["dim"],
|
|
58
|
+
label: ["bold"],
|
|
59
|
+
meta: ["dim"],
|
|
60
|
+
example: ["underline"],
|
|
61
|
+
exampleValue: ["italic"],
|
|
62
|
+
deprecated: ["strikethrough", "dim"]
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
function makeStyleFn(styles) {
|
|
66
|
+
const prefix = styles.map((s) => ansiCodes[s]).join("");
|
|
67
|
+
return (text) => `${prefix}${text}${ansiCodes.reset}`;
|
|
68
|
+
}
|
|
69
|
+
function resolveConfig(config) {
|
|
70
|
+
if (!config) return defaultTheme;
|
|
71
|
+
if (typeof config === "string") return colorThemes[config] ?? defaultTheme;
|
|
72
|
+
return {
|
|
73
|
+
...defaultTheme,
|
|
74
|
+
...config
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
function createColorizer(config) {
|
|
78
|
+
const resolved = resolveConfig(config);
|
|
79
|
+
return {
|
|
80
|
+
command: makeStyleFn(resolved.command),
|
|
81
|
+
arg: makeStyleFn(resolved.arg),
|
|
82
|
+
type: makeStyleFn(resolved.type),
|
|
83
|
+
description: makeStyleFn(resolved.description),
|
|
84
|
+
label: makeStyleFn(resolved.label),
|
|
85
|
+
meta: makeStyleFn(resolved.meta),
|
|
86
|
+
example: makeStyleFn(resolved.example),
|
|
87
|
+
exampleValue: makeStyleFn(resolved.exampleValue),
|
|
88
|
+
deprecated: makeStyleFn(resolved.deprecated)
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
export { colorThemes, createColorizer };
|
|
93
|
+
|
|
94
|
+
//# sourceMappingURL=colorizer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"colorizer.mjs","names":[],"sources":["../../src/output/colorizer.ts"],"sourcesContent":["// ANSI color/style codes\nconst ansiCodes: Record<AnsiStyle, string> = {\n reset: '\\x1b[0m',\n bold: '\\x1b[1m',\n dim: '\\x1b[2m',\n italic: '\\x1b[3m',\n underline: '\\x1b[4m',\n strikethrough: '\\x1b[9m',\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n};\n\n/**\n * Available ANSI styles that can be combined for each color role.\n */\nexport type AnsiStyle =\n | 'reset'\n | 'bold'\n | 'dim'\n | 'italic'\n | 'underline'\n | 'strikethrough'\n | 'red'\n | 'green'\n | 'yellow'\n | 'blue'\n | 'magenta'\n | 'cyan'\n | 'white'\n | 'gray';\n\n/**\n * Maps each semantic color role to an array of ANSI styles.\n * Partial configs are merged with the default theme.\n */\nexport type ColorConfig = {\n command?: AnsiStyle[];\n arg?: AnsiStyle[];\n type?: AnsiStyle[];\n description?: AnsiStyle[];\n label?: AnsiStyle[];\n meta?: AnsiStyle[];\n example?: AnsiStyle[];\n exampleValue?: AnsiStyle[];\n deprecated?: AnsiStyle[];\n};\n\nexport type Colorizer = {\n command: (text: string) => string;\n arg: (text: string) => string;\n type: (text: string) => string;\n description: (text: string) => string;\n label: (text: string) => string;\n meta: (text: string) => string;\n example: (text: string) => string;\n exampleValue: (text: string) => string;\n deprecated: (text: string) => string;\n};\n\n// ============================================================================\n// Predefined Themes\n// ============================================================================\n\nconst defaultTheme: Required<ColorConfig> = {\n command: ['cyan', 'bold'],\n arg: ['green'],\n type: ['yellow'],\n description: ['dim'],\n label: ['bold'],\n meta: ['gray'],\n example: ['underline'],\n exampleValue: ['italic'],\n deprecated: ['strikethrough', 'gray'],\n};\n\nconst oceanTheme: Required<ColorConfig> = {\n command: ['blue', 'bold'],\n arg: ['cyan'],\n type: ['green'],\n description: ['dim'],\n label: ['bold'],\n meta: ['gray'],\n example: ['underline', 'cyan'],\n exampleValue: ['italic'],\n deprecated: ['strikethrough', 'gray'],\n};\n\nconst warmTheme: Required<ColorConfig> = {\n command: ['yellow', 'bold'],\n arg: ['red'],\n type: ['magenta'],\n description: ['dim'],\n label: ['bold'],\n meta: ['gray'],\n example: ['underline', 'yellow'],\n exampleValue: ['italic'],\n deprecated: ['strikethrough', 'gray'],\n};\n\nconst monochromeTheme: Required<ColorConfig> = {\n command: ['bold'],\n arg: ['underline'],\n type: ['dim'],\n description: ['dim'],\n label: ['bold'],\n meta: ['dim'],\n example: ['underline'],\n exampleValue: ['italic'],\n deprecated: ['strikethrough', 'dim'],\n};\n\n/**\n * Available predefined color themes.\n */\nexport type ColorTheme = 'default' | 'ocean' | 'warm' | 'monochrome';\n\nexport const colorThemes: Record<ColorTheme, Required<ColorConfig>> = {\n default: defaultTheme,\n ocean: oceanTheme,\n warm: warmTheme,\n monochrome: monochromeTheme,\n};\n\nfunction makeStyleFn(styles: AnsiStyle[]): (text: string) => string {\n const prefix = styles.map((s) => ansiCodes[s]).join('');\n return (text: string) => `${prefix}${text}${ansiCodes.reset}`;\n}\n\nfunction resolveConfig(config?: ColorTheme | ColorConfig): Required<ColorConfig> {\n if (!config) return defaultTheme;\n if (typeof config === 'string') return colorThemes[config] ?? defaultTheme;\n return { ...defaultTheme, ...config };\n}\n\nexport function createColorizer(config?: ColorTheme | ColorConfig): Colorizer {\n const resolved = resolveConfig(config);\n return {\n command: makeStyleFn(resolved.command),\n arg: makeStyleFn(resolved.arg),\n type: makeStyleFn(resolved.type),\n description: makeStyleFn(resolved.description),\n label: makeStyleFn(resolved.label),\n meta: makeStyleFn(resolved.meta),\n example: makeStyleFn(resolved.example),\n exampleValue: makeStyleFn(resolved.exampleValue),\n deprecated: makeStyleFn(resolved.deprecated),\n };\n}\n"],"mappings":";AACA,MAAM,YAAuC;CAC3C,OAAO;CACP,MAAM;CACN,KAAK;CACL,QAAQ;CACR,WAAW;CACX,eAAe;CACf,KAAK;CACL,OAAO;CACP,QAAQ;CACR,MAAM;CACN,SAAS;CACT,MAAM;CACN,OAAO;CACP,MAAM;AACR;AAqDA,MAAM,eAAsC;CAC1C,SAAS,CAAC,QAAQ,MAAM;CACxB,KAAK,CAAC,OAAO;CACb,MAAM,CAAC,QAAQ;CACf,aAAa,CAAC,KAAK;CACnB,OAAO,CAAC,MAAM;CACd,MAAM,CAAC,MAAM;CACb,SAAS,CAAC,WAAW;CACrB,cAAc,CAAC,QAAQ;CACvB,YAAY,CAAC,iBAAiB,MAAM;AACtC;AA2CA,MAAa,cAAyD;CACpE,SAAS;CACT,OAAO;EA1CP,SAAS,CAAC,QAAQ,MAAM;EACxB,KAAK,CAAC,MAAM;EACZ,MAAM,CAAC,OAAO;EACd,aAAa,CAAC,KAAK;EACnB,OAAO,CAAC,MAAM;EACd,MAAM,CAAC,MAAM;EACb,SAAS,CAAC,aAAa,MAAM;EAC7B,cAAc,CAAC,QAAQ;EACvB,YAAY,CAAC,iBAAiB,MAAM;CAkC7B;CACP,MAAM;EA/BN,SAAS,CAAC,UAAU,MAAM;EAC1B,KAAK,CAAC,KAAK;EACX,MAAM,CAAC,SAAS;EAChB,aAAa,CAAC,KAAK;EACnB,OAAO,CAAC,MAAM;EACd,MAAM,CAAC,MAAM;EACb,SAAS,CAAC,aAAa,QAAQ;EAC/B,cAAc,CAAC,QAAQ;EACvB,YAAY,CAAC,iBAAiB,MAAM;CAuB9B;CACN,YAAY;EApBZ,SAAS,CAAC,MAAM;EAChB,KAAK,CAAC,WAAW;EACjB,MAAM,CAAC,KAAK;EACZ,aAAa,CAAC,KAAK;EACnB,OAAO,CAAC,MAAM;EACd,MAAM,CAAC,KAAK;EACZ,SAAS,CAAC,WAAW;EACrB,cAAc,CAAC,QAAQ;EACvB,YAAY,CAAC,iBAAiB,KAAK;CAYvB;AACd;AAEA,SAAS,YAAY,QAA+C;CAClE,MAAM,SAAS,OAAO,KAAK,MAAM,UAAU,EAAE,CAAC,CAAC,KAAK,EAAE;CACtD,QAAQ,SAAiB,GAAG,SAAS,OAAO,UAAU;AACxD;AAEA,SAAS,cAAc,QAA0D;CAC/E,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI,OAAO,WAAW,UAAU,OAAO,YAAY,WAAW;CAC9D,OAAO;EAAE,GAAG;EAAc,GAAG;CAAO;AACtC;AAEA,SAAgB,gBAAgB,QAA8C;CAC5E,MAAM,WAAW,cAAc,MAAM;CACrC,OAAO;EACL,SAAS,YAAY,SAAS,OAAO;EACrC,KAAK,YAAY,SAAS,GAAG;EAC7B,MAAM,YAAY,SAAS,IAAI;EAC/B,aAAa,YAAY,SAAS,WAAW;EAC7C,OAAO,YAAY,SAAS,KAAK;EACjC,MAAM,YAAY,SAAS,IAAI;EAC/B,SAAS,YAAY,SAAS,OAAO;EACrC,cAAc,YAAY,SAAS,YAAY;EAC/C,YAAY,YAAY,SAAS,UAAU;CAC7C;AACF"}
|
|
@@ -1,29 +1,3 @@
|
|
|
1
|
-
//#region src/output/colorizer.d.ts
|
|
2
|
-
/**
|
|
3
|
-
* Available ANSI styles that can be combined for each color role.
|
|
4
|
-
*/
|
|
5
|
-
type AnsiStyle = 'reset' | 'bold' | 'dim' | 'italic' | 'underline' | 'strikethrough' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray';
|
|
6
|
-
/**
|
|
7
|
-
* Maps each semantic color role to an array of ANSI styles.
|
|
8
|
-
* Partial configs are merged with the default theme.
|
|
9
|
-
*/
|
|
10
|
-
type ColorConfig = {
|
|
11
|
-
command?: AnsiStyle[];
|
|
12
|
-
arg?: AnsiStyle[];
|
|
13
|
-
type?: AnsiStyle[];
|
|
14
|
-
description?: AnsiStyle[];
|
|
15
|
-
label?: AnsiStyle[];
|
|
16
|
-
meta?: AnsiStyle[];
|
|
17
|
-
example?: AnsiStyle[];
|
|
18
|
-
exampleValue?: AnsiStyle[];
|
|
19
|
-
deprecated?: AnsiStyle[];
|
|
20
|
-
};
|
|
21
|
-
/**
|
|
22
|
-
* Available predefined color themes.
|
|
23
|
-
*/
|
|
24
|
-
type ColorTheme = 'default' | 'ocean' | 'warm' | 'monochrome';
|
|
25
|
-
declare const colorThemes: Record<ColorTheme, Required<ColorConfig>>;
|
|
26
|
-
//#endregion
|
|
27
1
|
//#region src/output/formatter.d.ts
|
|
28
2
|
type HelpFormat = 'text' | 'ansi' | 'console' | 'markdown' | 'html' | 'json';
|
|
29
3
|
type HelpDetail = 'minimal' | 'standard' | 'full';
|
|
@@ -110,5 +84,5 @@ type HelpInfo = {
|
|
|
110
84
|
nestedCommands?: HelpInfo[];
|
|
111
85
|
};
|
|
112
86
|
//#endregion
|
|
113
|
-
export {
|
|
114
|
-
//# sourceMappingURL=formatter
|
|
87
|
+
export { HelpArgumentInfo, HelpBuiltinInfo, HelpDetail, HelpFormat, HelpInfo, HelpPositionalInfo, HelpSubcommandInfo };
|
|
88
|
+
//# sourceMappingURL=formatter.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.mts","names":[],"sources":["../../src/output/formatter.ts"],"mappings":";KAkBY,UAAA;AAAA,KACA,UAAA;;;AADU;KAUV,kBAAA;EACV,IAAA;EACA,WAAA;EACA,QAAA;EACA,OAAA;EACA,IAAA;EACA,IAAA;AAAA;;;;KAMU,gBAAA;EACV,IAAA;EACA,WAAA;EACA,QAAA;EACA,OAAA;EACA,IAAA;EACA,IAAA,aAN0B;EAQ1B,KAAA,aAR0B;EAU1B,OAAA;EACA,UAAA;EACA,MAAA;EACA,QAAA,cARA;EAUA,GAAA,sBAPA;EASA,QAAA,YANA;EAQA,SAAA,YANA;EAQA,QAAA,aAJA;EAMA,SAAA,WAFA;EAIA,KAAA;AAAA;;AAAK;AAMP;KAAY,kBAAA;EACV,IAAA;EACA,KAAA;EACA,WAAA;EACA,OAAA;EACA,UAAA;EACA,MAAA;EACA,cAAA,YADA;EAGA,KAAA;AAAA;;AAAK;AAMP;KAAY,eAAA;EACV,IAAA;EACA,WAAA;EACA,GAAA;IAAQ,IAAA;IAAc,WAAA;EAAA;AAAA;;AAAW;AAOnC;;KAAY,QAAA;EAuBI,4DArBd,IAAA,UAyBY;EAvBZ,KAAA,WA6BiB;EA3BjB,WAAA,WA2ByB;EAzBzB,OAAA,aAJA;EAMA,UAAA,qBAFA;EAIA,MAAA;EAEA,KAAA;IACE,OAAA;IACA,cAAA;IACA,cAAA;IACA,YAAA,WAEA;IAAA,UAAA;EAAA,GAKF;EAFA,WAAA,GAAc,kBAAA,IAId;EAFA,WAAA,GAAc,kBAAA,IAId;EAFA,SAAA,GAAY,gBAAA,IAIZ;EAFA,QAAA,GAAW,eAAA,IAIM;EAFjB,QAAA,aAEyB;EAAzB,cAAA,GAAiB,QAAA;AAAA"}
|
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import { camelToKebab } from "../util/shell-utils.mjs";
|
|
2
|
+
import { createAnsiStyler, createConsoleStyler, createHtmlLayout, createHtmlStyler, createMarkdownLayout, createMarkdownStyler, createTextLayout, createTextStyler, shouldUseAnsi, wrapText } from "./styling.mjs";
|
|
3
|
+
//#region src/output/formatter.ts
|
|
4
|
+
/**
|
|
5
|
+
* Creates a formatter that uses the given styler and layout configuration.
|
|
6
|
+
*/
|
|
7
|
+
function createGenericFormatter(styler, layout, showAllBuiltins, terminalWidth) {
|
|
8
|
+
const { newline, indent, join, wrapDocument } = layout;
|
|
9
|
+
function formatUsageSection(info) {
|
|
10
|
+
const usageParts = [styler.command(info.usage.command), info.usage.hasSubcommands ? styler.meta("[command]") : ""];
|
|
11
|
+
if (info.positionals && info.positionals.length > 0) for (const arg of info.positionals) {
|
|
12
|
+
const name = arg.name.startsWith("...") ? `${arg.name}` : arg.name;
|
|
13
|
+
usageParts.push(styler.meta(arg.optional ? `[${name}]` : `<${name}>`));
|
|
14
|
+
}
|
|
15
|
+
if (info.usage.hasArguments) usageParts.push(styler.meta("[options]"));
|
|
16
|
+
return [`${styler.label("Usage:")} ${join(usageParts)}`];
|
|
17
|
+
}
|
|
18
|
+
function formatSubcommandsSection(info) {
|
|
19
|
+
const lines = [];
|
|
20
|
+
const subcommands = info.subcommands;
|
|
21
|
+
const subcommandSuffix = (c) => c.hasSubcommands ? " <subcommand>" : "";
|
|
22
|
+
const formatAliasParts = (c) => {
|
|
23
|
+
if (!c.aliases?.length) return {
|
|
24
|
+
plain: "",
|
|
25
|
+
styled: ""
|
|
26
|
+
};
|
|
27
|
+
const realAliases = c.aliases.filter((a) => a !== "[default]");
|
|
28
|
+
const hasDefault = c.aliases.some((a) => a === "[default]");
|
|
29
|
+
const parts = [];
|
|
30
|
+
const styledParts = [];
|
|
31
|
+
if (realAliases.length) {
|
|
32
|
+
parts.push(`(${realAliases.join(", ")})`);
|
|
33
|
+
styledParts.push(`(${realAliases.join(", ")})`);
|
|
34
|
+
}
|
|
35
|
+
if (hasDefault) {
|
|
36
|
+
parts.push("[default]");
|
|
37
|
+
styledParts.push(styler.meta("[default]"));
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
plain: parts.length ? ` ${parts.join(" ")}` : "",
|
|
41
|
+
styled: styledParts.length ? ` ${styledParts.join(" ")}` : ""
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
const maxNameLength = Math.max(...subcommands.map((c) => {
|
|
45
|
+
return (c.name + subcommandSuffix(c) + formatAliasParts(c).plain).length;
|
|
46
|
+
}));
|
|
47
|
+
const grouped = Object.groupBy(subcommands, (c) => c.group ?? "");
|
|
48
|
+
const renderSubcommands = (cmds) => {
|
|
49
|
+
for (const subCmd of cmds) {
|
|
50
|
+
const aliasParts = formatAliasParts(subCmd);
|
|
51
|
+
const suffix = subcommandSuffix(subCmd);
|
|
52
|
+
const commandDisplay = subCmd.name + suffix + aliasParts.plain;
|
|
53
|
+
const padding = " ".repeat(Math.max(0, maxNameLength - commandDisplay.length + 2));
|
|
54
|
+
const isDeprecated = !!subCmd.deprecated;
|
|
55
|
+
const isDefaultEntry = subCmd.name === "[default]";
|
|
56
|
+
const lineParts = [isDeprecated ? styler.deprecated(commandDisplay) : (isDefaultEntry ? styler.meta(subCmd.name) : styler.command(subCmd.name)) + (suffix ? styler.meta(suffix) : "") + aliasParts.styled, padding];
|
|
57
|
+
const displayText = subCmd.title ?? subCmd.description;
|
|
58
|
+
if (displayText) lineParts.push(isDeprecated ? styler.deprecated(displayText) : styler.description(displayText));
|
|
59
|
+
if (isDeprecated) {
|
|
60
|
+
const deprecatedMeta = typeof subCmd.deprecated === "string" ? styler.meta(` (deprecated: ${subCmd.deprecated})`) : styler.meta(" (deprecated)");
|
|
61
|
+
lineParts.push(deprecatedMeta);
|
|
62
|
+
}
|
|
63
|
+
lines.push(indent(1) + lineParts.join(""));
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
for (const [key, items] of Object.entries(grouped)) {
|
|
67
|
+
if (lines.length > 0) lines.push("");
|
|
68
|
+
lines.push(styler.section(key ? `${key}:` : "Commands:"));
|
|
69
|
+
renderSubcommands(items);
|
|
70
|
+
}
|
|
71
|
+
if (!info.builtins?.length) {
|
|
72
|
+
lines.push("");
|
|
73
|
+
lines.push(styler.meta(`Run "${info.name} [command] --help" for more information on a command.`));
|
|
74
|
+
}
|
|
75
|
+
return lines;
|
|
76
|
+
}
|
|
77
|
+
function formatPositionalsSection(info) {
|
|
78
|
+
const lines = [];
|
|
79
|
+
const args = info.positionals;
|
|
80
|
+
lines.push(styler.section("Arguments:"));
|
|
81
|
+
const maxNameLength = Math.min(32, Math.max(...args.map((a) => a.name.length)));
|
|
82
|
+
const descCol = 2 + maxNameLength + 2;
|
|
83
|
+
const posAvailWidth = terminalWidth ? terminalWidth - descCol : void 0;
|
|
84
|
+
const descColPad = " ".repeat(descCol);
|
|
85
|
+
for (const arg of args) {
|
|
86
|
+
const padding = " ".repeat(Math.max(2, maxNameLength - arg.name.length + 2));
|
|
87
|
+
const prefix = indent(1) + styler.arg(arg.name) + padding;
|
|
88
|
+
const descPlain = arg.description ?? "";
|
|
89
|
+
const styledDesc = descPlain ? styler.description(descPlain) : "";
|
|
90
|
+
const metaParts = [];
|
|
91
|
+
const styledMetaParts = [];
|
|
92
|
+
if (info.usage.stdinField === arg.name) {
|
|
93
|
+
metaParts.push("(stdin)");
|
|
94
|
+
styledMetaParts.push(styler.meta("(stdin)"));
|
|
95
|
+
}
|
|
96
|
+
if (arg.enum) {
|
|
97
|
+
const text = `(choices: ${arg.enum.join(", ")})`;
|
|
98
|
+
metaParts.push(text);
|
|
99
|
+
styledMetaParts.push(styler.meta(text));
|
|
100
|
+
}
|
|
101
|
+
if (arg.default !== void 0) {
|
|
102
|
+
const text = `(default: ${String(arg.default)})`;
|
|
103
|
+
metaParts.push(text);
|
|
104
|
+
styledMetaParts.push(styler.meta(text));
|
|
105
|
+
}
|
|
106
|
+
const metaStyled = join(styledMetaParts);
|
|
107
|
+
if (posAvailWidth && posAvailWidth > 0) if ([descPlain, metaParts.join(" ")].filter(Boolean).join(" ").length <= posAvailWidth) lines.push(prefix + [styledDesc, metaStyled].filter(Boolean).join(" "));
|
|
108
|
+
else if (!descPlain || descPlain.length <= posAvailWidth) {
|
|
109
|
+
lines.push(prefix + styledDesc);
|
|
110
|
+
if (metaStyled) lines.push(descColPad + metaStyled);
|
|
111
|
+
} else {
|
|
112
|
+
const wrapped = wrapText(descPlain, posAvailWidth);
|
|
113
|
+
lines.push(prefix + styler.description(wrapped[0]));
|
|
114
|
+
for (const wline of wrapped.slice(1)) lines.push(descColPad + styler.description(wline));
|
|
115
|
+
if (metaStyled) lines.push(descColPad + metaStyled);
|
|
116
|
+
}
|
|
117
|
+
else lines.push(prefix + join([styledDesc, metaStyled]));
|
|
118
|
+
}
|
|
119
|
+
return lines;
|
|
120
|
+
}
|
|
121
|
+
function formatArgumentsSection(info) {
|
|
122
|
+
const lines = [];
|
|
123
|
+
const argList = info.arguments || [];
|
|
124
|
+
const hasDefault = (value) => {
|
|
125
|
+
if (value === void 0) return false;
|
|
126
|
+
if (value === "") return false;
|
|
127
|
+
if (Array.isArray(value) && value.length === 0) return false;
|
|
128
|
+
return true;
|
|
129
|
+
};
|
|
130
|
+
const argColumns = argList.map((arg) => {
|
|
131
|
+
const kebab = camelToKebab(arg.name);
|
|
132
|
+
const primaryName = kebab && arg.aliases?.includes(kebab) ? kebab : arg.name;
|
|
133
|
+
const remainingAliases = arg.aliases?.filter((a) => a !== primaryName);
|
|
134
|
+
const flagsPlain = arg.flags?.length ? arg.flags.map((f) => `-${f}`).join(", ") : "";
|
|
135
|
+
const negPlain = arg.negative?.length ? arg.negative.map((n) => `--${n}`).join(", ") : "";
|
|
136
|
+
return {
|
|
137
|
+
flagsPlain,
|
|
138
|
+
namesPlain: [
|
|
139
|
+
`--${primaryName}`,
|
|
140
|
+
...remainingAliases?.map((a) => `--${a}`) || [],
|
|
141
|
+
...negPlain ? [negPlain] : []
|
|
142
|
+
].join(", "),
|
|
143
|
+
typePlain: arg.type && arg.type !== "boolean" ? arg.optional ? `[${arg.type}]` : `<${arg.type}>` : "",
|
|
144
|
+
isDeprecated: !!arg.deprecated,
|
|
145
|
+
arg
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
const maxFlagsWidth = Math.min(12, Math.max(0, ...argColumns.map((c) => c.flagsPlain.length)));
|
|
149
|
+
const maxNamesWidth = Math.min(32, Math.max(0, ...argColumns.map((c) => c.namesPlain.length)));
|
|
150
|
+
const maxTypeWidth = Math.min(16, Math.max(0, ...argColumns.map((c) => c.typePlain.length)));
|
|
151
|
+
const hasAnyFlags = maxFlagsWidth > 0;
|
|
152
|
+
const descCol = 2 + (hasAnyFlags ? maxFlagsWidth + 2 : 0) + maxNamesWidth + 2 + (maxTypeWidth > 0 ? maxTypeWidth + 2 : 0);
|
|
153
|
+
const argAvailWidth = terminalWidth ? terminalWidth - descCol : void 0;
|
|
154
|
+
const descColPad = " ".repeat(descCol);
|
|
155
|
+
const grouped = Object.groupBy(argColumns, (c) => c.arg.group ?? "");
|
|
156
|
+
const renderArgColumns = (columns) => {
|
|
157
|
+
for (const { flagsPlain, namesPlain, typePlain, isDeprecated, arg } of columns) {
|
|
158
|
+
const parts = [];
|
|
159
|
+
if (hasAnyFlags) {
|
|
160
|
+
const styledFlags = isDeprecated ? flagsPlain ? styler.deprecated(flagsPlain) : "" : flagsPlain ? styler.arg(flagsPlain) : "";
|
|
161
|
+
const flagsPadding = " ".repeat(Math.max(0, maxFlagsWidth - flagsPlain.length));
|
|
162
|
+
const separator = flagsPlain ? ", " : " ";
|
|
163
|
+
parts.push(styledFlags + flagsPadding + separator);
|
|
164
|
+
}
|
|
165
|
+
const styledNames = isDeprecated ? styler.deprecated(namesPlain) : styler.arg(namesPlain);
|
|
166
|
+
const namesPadding = " ".repeat(Math.max(2, maxNamesWidth - namesPlain.length + 2));
|
|
167
|
+
parts.push(styledNames + namesPadding);
|
|
168
|
+
if (maxTypeWidth > 0) {
|
|
169
|
+
const styledType = typePlain ? styler.type(typePlain) : "";
|
|
170
|
+
const typePadding = " ".repeat(Math.max(2, maxTypeWidth - typePlain.length + 2));
|
|
171
|
+
parts.push(styledType + typePadding);
|
|
172
|
+
}
|
|
173
|
+
const prefix = indent(1) + parts.join("");
|
|
174
|
+
const contPad = argAvailWidth ? descColPad : indent(3);
|
|
175
|
+
const inlineMeta = [];
|
|
176
|
+
const styledInlineMeta = [];
|
|
177
|
+
if (isDeprecated && typeof arg.deprecated !== "string") {
|
|
178
|
+
inlineMeta.push("(deprecated)");
|
|
179
|
+
styledInlineMeta.push(styler.meta("(deprecated)"));
|
|
180
|
+
}
|
|
181
|
+
if (hasDefault(arg.default)) {
|
|
182
|
+
const text = `(default: ${String(arg.default)})`;
|
|
183
|
+
inlineMeta.push(text);
|
|
184
|
+
styledInlineMeta.push(styler.meta(text));
|
|
185
|
+
}
|
|
186
|
+
if (arg.enum) {
|
|
187
|
+
const text = `(choices: ${arg.enum.join(", ")})`;
|
|
188
|
+
inlineMeta.push(text);
|
|
189
|
+
styledInlineMeta.push(styler.meta(text));
|
|
190
|
+
}
|
|
191
|
+
const descPlain = arg.description ?? "";
|
|
192
|
+
const styledDesc = descPlain ? isDeprecated ? styler.deprecated(descPlain) : styler.description(descPlain) : "";
|
|
193
|
+
const metaStyled = join(styledInlineMeta);
|
|
194
|
+
if (argAvailWidth && argAvailWidth > 0) if ([descPlain, inlineMeta.join(" ")].filter(Boolean).join(" ").length <= argAvailWidth) lines.push(prefix + [styledDesc, metaStyled].filter(Boolean).join(" "));
|
|
195
|
+
else if (!descPlain || descPlain.length <= argAvailWidth) {
|
|
196
|
+
lines.push(prefix + styledDesc);
|
|
197
|
+
if (metaStyled) lines.push(descColPad + metaStyled);
|
|
198
|
+
} else {
|
|
199
|
+
const wrapped = wrapText(descPlain, argAvailWidth);
|
|
200
|
+
const styleFn = isDeprecated ? styler.deprecated : styler.description;
|
|
201
|
+
lines.push(prefix + styleFn(wrapped[0]));
|
|
202
|
+
for (const wline of wrapped.slice(1)) lines.push(descColPad + styleFn(wline));
|
|
203
|
+
if (metaStyled) lines.push(descColPad + metaStyled);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
const descParts = [];
|
|
207
|
+
if (styledDesc) descParts.push(styledDesc);
|
|
208
|
+
lines.push(prefix + join(descParts));
|
|
209
|
+
if (styledInlineMeta.length > 0) lines.push(indent(3) + metaStyled);
|
|
210
|
+
}
|
|
211
|
+
const line3Parts = [];
|
|
212
|
+
if (isDeprecated && typeof arg.deprecated === "string") line3Parts.push(styler.meta(`(deprecated: ${arg.deprecated})`));
|
|
213
|
+
if (arg.examples && arg.examples.length > 0) {
|
|
214
|
+
const exampleValues = arg.examples.map((example) => typeof example === "string" ? example : JSON.stringify(example)).join(", ");
|
|
215
|
+
line3Parts.push(styler.example("Example:"), styler.exampleValue(exampleValues));
|
|
216
|
+
}
|
|
217
|
+
if (line3Parts.length > 0) lines.push(contPad + join(line3Parts));
|
|
218
|
+
const line4Parts = [];
|
|
219
|
+
if (info.usage.stdinField === arg.name) line4Parts.push(styler.meta("(stdin)"));
|
|
220
|
+
if (arg.env) {
|
|
221
|
+
const envVars = typeof arg.env === "string" ? [arg.env] : arg.env;
|
|
222
|
+
line4Parts.push(styler.example("Env:"), styler.exampleValue(envVars.join(", ")));
|
|
223
|
+
}
|
|
224
|
+
if (arg.configKey) line4Parts.push(styler.example("Config:"), styler.exampleValue(arg.configKey));
|
|
225
|
+
if (line4Parts.length > 0) lines.push(contPad + join(line4Parts));
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
for (const [key, items] of Object.entries(grouped)) {
|
|
229
|
+
if (lines.length > 0) lines.push("");
|
|
230
|
+
lines.push(styler.section(key ? `${key}:` : "Options:"));
|
|
231
|
+
renderArgColumns(items);
|
|
232
|
+
}
|
|
233
|
+
return lines;
|
|
234
|
+
}
|
|
235
|
+
function formatBuiltinsSection(info) {
|
|
236
|
+
const lines = [];
|
|
237
|
+
const builtins = info.builtins;
|
|
238
|
+
if (!showAllBuiltins) {
|
|
239
|
+
lines.push(`${styler.label("Global:")} ${styler.meta([
|
|
240
|
+
"help [command]",
|
|
241
|
+
"version",
|
|
242
|
+
"[command] --repl"
|
|
243
|
+
].join(", "))}`);
|
|
244
|
+
const hint = info.usage.hasSubcommands ? `Run "${info.name} [command] --help" for more information. Use "--all" for all global commands.` : `Use "${info.name} help --all" for more information on global commands.`;
|
|
245
|
+
lines.push(styler.meta(hint));
|
|
246
|
+
return lines;
|
|
247
|
+
}
|
|
248
|
+
lines.push(styler.section("Global:"));
|
|
249
|
+
const allLengths = [];
|
|
250
|
+
for (const entry of builtins) {
|
|
251
|
+
allLengths.push(entry.name.length);
|
|
252
|
+
if (entry.sub) for (const sub of entry.sub) allLengths.push(sub.name.length + 2);
|
|
253
|
+
}
|
|
254
|
+
const maxLen = Math.max(...allLengths);
|
|
255
|
+
for (const entry of builtins) {
|
|
256
|
+
const padding = " ".repeat(Math.max(2, maxLen - entry.name.length + 2));
|
|
257
|
+
const parts = [styler.command(entry.name)];
|
|
258
|
+
if (entry.description) parts.push(padding + styler.description(entry.description));
|
|
259
|
+
lines.push(indent(1) + parts.join(""));
|
|
260
|
+
if (entry.sub) for (const sub of entry.sub) {
|
|
261
|
+
const subPadding = " ".repeat(Math.max(2, maxLen - sub.name.length));
|
|
262
|
+
const subParts = [styler.arg(sub.name)];
|
|
263
|
+
if (sub.description) subParts.push(subPadding + styler.description(sub.description));
|
|
264
|
+
lines.push(indent(2) + subParts.join(""));
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
return lines;
|
|
268
|
+
}
|
|
269
|
+
return { format(info) {
|
|
270
|
+
const lines = [];
|
|
271
|
+
if (info.deprecated) {
|
|
272
|
+
const deprecationMessage = typeof info.deprecated === "string" ? `⚠️ This command is deprecated: ${info.deprecated}` : "⚠️ This command is deprecated";
|
|
273
|
+
lines.push(styler.deprecated(deprecationMessage));
|
|
274
|
+
lines.push("");
|
|
275
|
+
}
|
|
276
|
+
lines.push(...formatUsageSection(info));
|
|
277
|
+
lines.push("");
|
|
278
|
+
if (info.title) {
|
|
279
|
+
lines.push(styler.label(info.title));
|
|
280
|
+
lines.push("");
|
|
281
|
+
}
|
|
282
|
+
if (info.aliases && info.aliases.length > 0) {
|
|
283
|
+
lines.push(styler.meta(`Aliases: ${info.aliases.join(", ")}`));
|
|
284
|
+
lines.push("");
|
|
285
|
+
}
|
|
286
|
+
if (info.description) {
|
|
287
|
+
lines.push(styler.description(info.description));
|
|
288
|
+
lines.push("");
|
|
289
|
+
}
|
|
290
|
+
if (info.examples && info.examples.length > 0) {
|
|
291
|
+
lines.push(styler.section("Examples:"));
|
|
292
|
+
for (const ex of info.examples) lines.push(indent(1) + styler.meta("$ ") + styler.exampleValue(ex));
|
|
293
|
+
lines.push("");
|
|
294
|
+
}
|
|
295
|
+
if (info.subcommands && info.subcommands.length > 0) {
|
|
296
|
+
lines.push(...formatSubcommandsSection(info));
|
|
297
|
+
lines.push("");
|
|
298
|
+
}
|
|
299
|
+
if (info.positionals && info.positionals.length > 0) {
|
|
300
|
+
lines.push(...formatPositionalsSection(info));
|
|
301
|
+
lines.push("");
|
|
302
|
+
}
|
|
303
|
+
if (info.arguments && info.arguments.length > 0) {
|
|
304
|
+
lines.push(...formatArgumentsSection(info));
|
|
305
|
+
lines.push("");
|
|
306
|
+
}
|
|
307
|
+
if (info.builtins && info.builtins.length > 0) {
|
|
308
|
+
lines.push(...formatBuiltinsSection(info));
|
|
309
|
+
lines.push("");
|
|
310
|
+
}
|
|
311
|
+
if (info.arguments?.some((arg) => arg.negatable && arg.default === true)) {
|
|
312
|
+
lines.push(styler.meta("Boolean options can be negated with --no-<option>."));
|
|
313
|
+
lines.push("");
|
|
314
|
+
}
|
|
315
|
+
if (info.nestedCommands?.length) {
|
|
316
|
+
lines.push(styler.section("Subcommand Details:"));
|
|
317
|
+
lines.push("");
|
|
318
|
+
for (const nestedCmd of info.nestedCommands) {
|
|
319
|
+
lines.push(styler.meta("─".repeat(60)));
|
|
320
|
+
lines.push(this.format(nestedCmd));
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
const result = lines.join(newline);
|
|
324
|
+
return wrapDocument ? wrapDocument(result) : result;
|
|
325
|
+
} };
|
|
326
|
+
}
|
|
327
|
+
function createJsonFormatter() {
|
|
328
|
+
return { format(info) {
|
|
329
|
+
return JSON.stringify(info, null, 2);
|
|
330
|
+
} };
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Creates a minimal formatter that outputs just a single-line usage string.
|
|
334
|
+
*/
|
|
335
|
+
function createMinimalFormatter() {
|
|
336
|
+
return { format(info) {
|
|
337
|
+
const parts = [info.usage.command];
|
|
338
|
+
if (info.usage.hasSubcommands) parts.push("[command]");
|
|
339
|
+
if (info.positionals && info.positionals.length > 0) for (const arg of info.positionals) {
|
|
340
|
+
const name = arg.name.startsWith("...") ? `${arg.name}` : arg.name;
|
|
341
|
+
parts.push(arg.optional ? `[${name}]` : `<${name}>`);
|
|
342
|
+
}
|
|
343
|
+
if (info.usage.hasArguments) parts.push("[options]");
|
|
344
|
+
return parts.join(" ");
|
|
345
|
+
} };
|
|
346
|
+
}
|
|
347
|
+
function createFormatter(format, detail = "standard", theme, all, width, terminal, env) {
|
|
348
|
+
if (detail === "minimal") return createMinimalFormatter();
|
|
349
|
+
if (format === "json") return createJsonFormatter();
|
|
350
|
+
const tw = format === "markdown" || format === "html" ? void 0 : width ?? terminal?.columns ?? 80;
|
|
351
|
+
if (format === "ansi" || format === "auto" && shouldUseAnsi(env, terminal?.isTTY)) return createGenericFormatter(createAnsiStyler(theme), createTextLayout(), all, tw);
|
|
352
|
+
if (format === "console") return createGenericFormatter(createConsoleStyler(theme), createTextLayout(), all, tw);
|
|
353
|
+
if (format === "markdown") return createGenericFormatter(createMarkdownStyler(), createMarkdownLayout(), all);
|
|
354
|
+
if (format === "html") return createGenericFormatter(createHtmlStyler(), createHtmlLayout(), all);
|
|
355
|
+
return createGenericFormatter(createTextStyler(), createTextLayout(), all, tw);
|
|
356
|
+
}
|
|
357
|
+
//#endregion
|
|
358
|
+
export { createFormatter };
|
|
359
|
+
|
|
360
|
+
//# sourceMappingURL=formatter.mjs.map
|