bob-core 3.0.0-beta.3 → 3.0.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/{src/Cli.d.ts → Cli.d.ts} +20 -0
  3. package/dist/cjs/Command.d.ts +91 -0
  4. package/dist/cjs/CommandParser.d.ts +122 -0
  5. package/dist/cjs/{src/CommandRegistry.d.ts → CommandRegistry.d.ts} +12 -0
  6. package/dist/cjs/ExceptionHandler.d.ts +14 -0
  7. package/dist/cjs/HelpFlag.d.ts +27 -0
  8. package/dist/cjs/StringSimilarity.d.ts +31 -0
  9. package/dist/cjs/args/index.d.ts +131 -0
  10. package/dist/{esm/src → cjs}/errors/BadCommandArgument.d.ts +4 -2
  11. package/dist/cjs/{src/errors → errors}/BadCommandFlag.d.ts +4 -2
  12. package/dist/cjs/errors/BobError.d.ts +13 -0
  13. package/dist/cjs/errors/CommandNotFoundError.d.ts +9 -0
  14. package/dist/{esm/src → cjs}/errors/InvalidFlag.d.ts +4 -2
  15. package/dist/cjs/errors/MissingRequiredArgumentValue.d.ts +9 -0
  16. package/dist/cjs/errors/MissingRequiredFlagValue.d.ts +9 -0
  17. package/dist/cjs/errors/TooManyArguments.d.ts +10 -0
  18. package/dist/cjs/errors/ValidationError.d.ts +10 -0
  19. package/dist/{esm/src → cjs}/errors/renderError.d.ts +2 -2
  20. package/dist/cjs/flags/boolean.d.ts +20 -0
  21. package/dist/cjs/flags/custom.d.ts +12 -0
  22. package/dist/cjs/flags/directory.d.ts +27 -0
  23. package/dist/cjs/flags/file.d.ts +27 -0
  24. package/dist/cjs/flags/helpers.d.ts +9 -0
  25. package/dist/cjs/flags/index.d.ts +160 -0
  26. package/dist/cjs/flags/number.d.ts +32 -0
  27. package/dist/cjs/flags/option.d.ts +8 -0
  28. package/dist/cjs/flags/string.d.ts +19 -0
  29. package/dist/cjs/flags/url.d.ts +19 -0
  30. package/dist/cjs/{src/index.d.ts → index.d.ts} +0 -1
  31. package/dist/cjs/{src/lib → lib}/helpers.d.ts +1 -1
  32. package/dist/cjs/lib/types.d.ts +99 -0
  33. package/dist/cjs/shared/ask-helpers.d.ts +7 -0
  34. package/dist/cjs/shared/flagsUtils.d.ts +5 -0
  35. package/dist/cjs/src/index.js +7 -7
  36. package/dist/cjs/ux/askForConfirmation.d.ts +10 -0
  37. package/dist/cjs/{src/ux → ux}/askForToggle.d.ts +5 -1
  38. package/dist/cjs/ux/helpers.d.ts +6 -0
  39. package/dist/{esm/src → cjs}/ux/index.d.ts +30 -2
  40. package/dist/esm/{src/Cli.d.ts → Cli.d.ts} +20 -0
  41. package/dist/esm/Command.d.ts +91 -0
  42. package/dist/esm/CommandParser.d.ts +122 -0
  43. package/dist/esm/{src/CommandRegistry.d.ts → CommandRegistry.d.ts} +12 -0
  44. package/dist/esm/ExceptionHandler.d.ts +14 -0
  45. package/dist/esm/HelpFlag.d.ts +27 -0
  46. package/dist/esm/StringSimilarity.d.ts +31 -0
  47. package/dist/esm/args/index.d.ts +131 -0
  48. package/dist/{cjs/src → esm}/errors/BadCommandArgument.d.ts +4 -2
  49. package/dist/esm/{src/errors → errors}/BadCommandFlag.d.ts +4 -2
  50. package/dist/esm/errors/BobError.d.ts +13 -0
  51. package/dist/esm/errors/CommandNotFoundError.d.ts +9 -0
  52. package/dist/{cjs/src → esm}/errors/InvalidFlag.d.ts +4 -2
  53. package/dist/esm/errors/MissingRequiredArgumentValue.d.ts +9 -0
  54. package/dist/esm/errors/MissingRequiredFlagValue.d.ts +9 -0
  55. package/dist/esm/errors/TooManyArguments.d.ts +10 -0
  56. package/dist/esm/errors/ValidationError.d.ts +10 -0
  57. package/dist/{cjs/src → esm}/errors/renderError.d.ts +2 -2
  58. package/dist/esm/flags/boolean.d.ts +20 -0
  59. package/dist/esm/flags/custom.d.ts +12 -0
  60. package/dist/esm/flags/directory.d.ts +27 -0
  61. package/dist/esm/flags/file.d.ts +27 -0
  62. package/dist/esm/flags/helpers.d.ts +9 -0
  63. package/dist/esm/flags/index.d.ts +160 -0
  64. package/dist/esm/flags/number.d.ts +32 -0
  65. package/dist/esm/flags/option.d.ts +8 -0
  66. package/dist/esm/flags/string.d.ts +19 -0
  67. package/dist/esm/flags/url.d.ts +19 -0
  68. package/dist/esm/{src/index.d.ts → index.d.ts} +0 -1
  69. package/dist/esm/{src/lib → lib}/helpers.d.ts +1 -1
  70. package/dist/esm/lib/types.d.ts +99 -0
  71. package/dist/esm/shared/ask-helpers.d.ts +7 -0
  72. package/dist/esm/shared/flagsUtils.d.ts +5 -0
  73. package/dist/esm/src/index.js +344 -264
  74. package/dist/esm/ux/askForConfirmation.d.ts +10 -0
  75. package/dist/esm/{src/ux → ux}/askForToggle.d.ts +5 -1
  76. package/dist/esm/ux/helpers.d.ts +6 -0
  77. package/dist/{cjs/src → esm}/ux/index.d.ts +30 -2
  78. package/package.json +1 -1
  79. package/dist/cjs/package-Chbq4tyH.cjs +0 -1
  80. package/dist/cjs/src/Command.d.ts +0 -48
  81. package/dist/cjs/src/CommandParser.d.ts +0 -110
  82. package/dist/cjs/src/ExceptionHandler.d.ts +0 -6
  83. package/dist/cjs/src/StringSimilarity.d.ts +0 -26
  84. package/dist/cjs/src/args/index.d.ts +0 -67
  85. package/dist/cjs/src/errors/BobError.d.ts +0 -5
  86. package/dist/cjs/src/errors/CommandNotFoundError.d.ts +0 -7
  87. package/dist/cjs/src/errors/MissingRequiredArgumentValue.d.ts +0 -7
  88. package/dist/cjs/src/errors/MissingRequiredFlagValue.d.ts +0 -7
  89. package/dist/cjs/src/errors/TooManyArguments.d.ts +0 -8
  90. package/dist/cjs/src/errors/ValidationError.d.ts +0 -3
  91. package/dist/cjs/src/flags/boolean.d.ts +0 -9
  92. package/dist/cjs/src/flags/custom.d.ts +0 -9
  93. package/dist/cjs/src/flags/directory.d.ts +0 -14
  94. package/dist/cjs/src/flags/file.d.ts +0 -14
  95. package/dist/cjs/src/flags/helpers.d.ts +0 -3
  96. package/dist/cjs/src/flags/index.d.ts +0 -76
  97. package/dist/cjs/src/flags/number.d.ts +0 -17
  98. package/dist/cjs/src/flags/option.d.ts +0 -6
  99. package/dist/cjs/src/flags/string.d.ts +0 -8
  100. package/dist/cjs/src/flags/url.d.ts +0 -8
  101. package/dist/cjs/src/lib/types.d.ts +0 -59
  102. package/dist/cjs/src/options/HelpOption.d.ts +0 -11
  103. package/dist/cjs/src/options/index.d.ts +0 -1
  104. package/dist/cjs/src/shared/ask-helpers.d.ts +0 -7
  105. package/dist/cjs/src/ux/askForConfirmation.d.ts +0 -5
  106. package/dist/cjs/src/ux/helpers.d.ts +0 -1
  107. package/dist/esm/package-DtqoIUbm.js +0 -60
  108. package/dist/esm/src/Command.d.ts +0 -48
  109. package/dist/esm/src/CommandParser.d.ts +0 -110
  110. package/dist/esm/src/ExceptionHandler.d.ts +0 -6
  111. package/dist/esm/src/StringSimilarity.d.ts +0 -26
  112. package/dist/esm/src/args/index.d.ts +0 -67
  113. package/dist/esm/src/errors/BobError.d.ts +0 -5
  114. package/dist/esm/src/errors/CommandNotFoundError.d.ts +0 -7
  115. package/dist/esm/src/errors/MissingRequiredArgumentValue.d.ts +0 -7
  116. package/dist/esm/src/errors/MissingRequiredFlagValue.d.ts +0 -7
  117. package/dist/esm/src/errors/TooManyArguments.d.ts +0 -8
  118. package/dist/esm/src/errors/ValidationError.d.ts +0 -3
  119. package/dist/esm/src/flags/boolean.d.ts +0 -9
  120. package/dist/esm/src/flags/custom.d.ts +0 -9
  121. package/dist/esm/src/flags/directory.d.ts +0 -14
  122. package/dist/esm/src/flags/file.d.ts +0 -14
  123. package/dist/esm/src/flags/helpers.d.ts +0 -3
  124. package/dist/esm/src/flags/index.d.ts +0 -76
  125. package/dist/esm/src/flags/number.d.ts +0 -17
  126. package/dist/esm/src/flags/option.d.ts +0 -6
  127. package/dist/esm/src/flags/string.d.ts +0 -8
  128. package/dist/esm/src/flags/url.d.ts +0 -8
  129. package/dist/esm/src/lib/types.d.ts +0 -59
  130. package/dist/esm/src/options/HelpOption.d.ts +0 -11
  131. package/dist/esm/src/options/index.d.ts +0 -1
  132. package/dist/esm/src/shared/ask-helpers.d.ts +0 -7
  133. package/dist/esm/src/ux/askForConfirmation.d.ts +0 -5
  134. package/dist/esm/src/ux/helpers.d.ts +0 -1
  135. /package/dist/cjs/{src/CommandSignatureParser.d.ts → CommandSignatureParser.d.ts} +0 -0
  136. /package/dist/cjs/{src/CommandWithSignature.d.ts → CommandWithSignature.d.ts} +0 -0
  137. /package/dist/cjs/{src/Logger.d.ts → Logger.d.ts} +0 -0
  138. /package/dist/cjs/{src/commands → commands}/HelpCommand.d.ts +0 -0
  139. /package/dist/cjs/{src/contracts → contracts}/LoggerContract.d.ts +0 -0
  140. /package/dist/cjs/{src/contracts → contracts}/index.d.ts +0 -0
  141. /package/dist/cjs/{src/errors → errors}/index.d.ts +0 -0
  142. /package/dist/cjs/{src/lib → lib}/string.d.ts +0 -0
  143. /package/dist/cjs/{src/shared → shared}/parsers.d.ts +0 -0
  144. /package/dist/cjs/{src/ux → ux}/askForCheckbox.d.ts +0 -0
  145. /package/dist/cjs/{src/ux → ux}/askForEditor.d.ts +0 -0
  146. /package/dist/cjs/{src/ux → ux}/askForExpand.d.ts +0 -0
  147. /package/dist/cjs/{src/ux → ux}/askForFileSelector.d.ts +0 -0
  148. /package/dist/cjs/{src/ux → ux}/askForInput.d.ts +0 -0
  149. /package/dist/cjs/{src/ux → ux}/askForList.d.ts +0 -0
  150. /package/dist/cjs/{src/ux → ux}/askForNumber.d.ts +0 -0
  151. /package/dist/cjs/{src/ux → ux}/askForPassword.d.ts +0 -0
  152. /package/dist/cjs/{src/ux → ux}/askForRawList.d.ts +0 -0
  153. /package/dist/cjs/{src/ux → ux}/askForSearch.d.ts +0 -0
  154. /package/dist/cjs/{src/ux → ux}/askForSelect.d.ts +0 -0
  155. /package/dist/cjs/{src/ux → ux}/keyValue.d.ts +0 -0
  156. /package/dist/cjs/{src/ux → ux}/loader.d.ts +0 -0
  157. /package/dist/cjs/{src/ux → ux}/progressBar.d.ts +0 -0
  158. /package/dist/cjs/{src/ux → ux}/table.d.ts +0 -0
  159. /package/dist/cjs/{src/ux → ux}/types.d.ts +0 -0
  160. /package/dist/esm/{src/CommandSignatureParser.d.ts → CommandSignatureParser.d.ts} +0 -0
  161. /package/dist/esm/{src/CommandWithSignature.d.ts → CommandWithSignature.d.ts} +0 -0
  162. /package/dist/esm/{src/Logger.d.ts → Logger.d.ts} +0 -0
  163. /package/dist/esm/{src/commands → commands}/HelpCommand.d.ts +0 -0
  164. /package/dist/esm/{src/contracts → contracts}/LoggerContract.d.ts +0 -0
  165. /package/dist/esm/{src/contracts → contracts}/index.d.ts +0 -0
  166. /package/dist/esm/{src/errors → errors}/index.d.ts +0 -0
  167. /package/dist/esm/{src/lib → lib}/string.d.ts +0 -0
  168. /package/dist/esm/{src/shared → shared}/parsers.d.ts +0 -0
  169. /package/dist/esm/{src/ux → ux}/askForCheckbox.d.ts +0 -0
  170. /package/dist/esm/{src/ux → ux}/askForEditor.d.ts +0 -0
  171. /package/dist/esm/{src/ux → ux}/askForExpand.d.ts +0 -0
  172. /package/dist/esm/{src/ux → ux}/askForFileSelector.d.ts +0 -0
  173. /package/dist/esm/{src/ux → ux}/askForInput.d.ts +0 -0
  174. /package/dist/esm/{src/ux → ux}/askForList.d.ts +0 -0
  175. /package/dist/esm/{src/ux → ux}/askForNumber.d.ts +0 -0
  176. /package/dist/esm/{src/ux → ux}/askForPassword.d.ts +0 -0
  177. /package/dist/esm/{src/ux → ux}/askForRawList.d.ts +0 -0
  178. /package/dist/esm/{src/ux → ux}/askForSearch.d.ts +0 -0
  179. /package/dist/esm/{src/ux → ux}/askForSelect.d.ts +0 -0
  180. /package/dist/esm/{src/ux → ux}/keyValue.d.ts +0 -0
  181. /package/dist/esm/{src/ux → ux}/loader.d.ts +0 -0
  182. /package/dist/esm/{src/ux → ux}/progressBar.d.ts +0 -0
  183. /package/dist/esm/{src/ux → ux}/table.d.ts +0 -0
  184. /package/dist/esm/{src/ux → ux}/types.d.ts +0 -0
@@ -0,0 +1,20 @@
1
+ import { FlagOpts } from '../lib/types.js';
2
+ /** Boolean flag (`--debug` / `--no-debug`). Defaults to `false` when omitted. */
3
+ export declare const booleanFlag: <const O extends Partial<import('../lib/types.js').FlagDefinition<boolean, import('../lib/types.js').CustomOptions>>>(overrides?: O | undefined) => {
4
+ [x: string]: unknown;
5
+ } & {
6
+ parse: (input: any, opts: FlagOpts<any, import('../lib/types.js').CustomOptions>) => boolean;
7
+ type?: import('../lib/types.js').FlagKind;
8
+ ask?: (opts: FlagOpts) => Promise<any>;
9
+ description?: string;
10
+ required?: boolean;
11
+ default?: boolean | boolean[] | (() => boolean | boolean[] | null) | (() => Promise<boolean | boolean[] | null>) | null | undefined;
12
+ multiple?: boolean;
13
+ help?: string;
14
+ alias?: string | readonly string[];
15
+ handler?: ((value: boolean, opts: FlagOpts) => {
16
+ shouldStop: boolean;
17
+ } | void) | undefined;
18
+ } & Omit<import('../lib/types.js').FlagDefinition<boolean, import('../lib/types.js').CustomOptions>, "parse"> & {
19
+ parse?: ((input: any, opts: FlagOpts<any, import('../lib/types.js').CustomOptions>) => boolean) | undefined;
20
+ } & O;
@@ -0,0 +1,12 @@
1
+ import { CustomOptions, FlagDefinition, InitFlagDefinition } from '../lib/types.js';
2
+ /**
3
+ * Escape hatch for declaring arbitrary parameter types. Returns a builder
4
+ * function — call it with overrides to produce a `FlagDefinition`.
5
+ *
6
+ * `parse` is required when there's no built-in for the target type. `multiple`
7
+ * defaults the value to `[]`; non-multiple flags default to `null`.
8
+ *
9
+ * The `type` literal supplied in `defaults` is preserved in the returned shape
10
+ * so downstream consumers can rely on it (e.g. for help rendering).
11
+ */
12
+ export declare function custom<T, C extends CustomOptions = CustomOptions, const D extends InitFlagDefinition<T, C> = InitFlagDefinition<T, C>>(defaults?: D): <const O extends Partial<FlagDefinition<T, C>>>(overrides?: O) => FlagDefinition<T, C> & D & O;
@@ -0,0 +1,27 @@
1
+ /** Filesystem directory flag. Pass `exists: true` to require the directory to exist at parse time. */
2
+ export declare const directoryFlag: <const O extends Partial<import('../index.js').FlagDefinition<string, {
3
+ exists?: boolean;
4
+ }>>>(overrides?: O | undefined) => {
5
+ exists?: boolean | undefined;
6
+ } & {
7
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, {
8
+ exists?: boolean;
9
+ }>) => string;
10
+ type?: import('../index.js').FlagKind;
11
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
12
+ description?: string;
13
+ required?: boolean;
14
+ default?: string | string[] | (() => string | string[] | null) | (() => Promise<string | string[] | null>) | null | undefined;
15
+ multiple?: boolean;
16
+ help?: string;
17
+ alias?: string | readonly string[];
18
+ handler?: ((value: string, opts: import('../index.js').FlagOpts) => {
19
+ shouldStop: boolean;
20
+ } | void) | undefined;
21
+ } & Omit<import('../index.js').FlagDefinition<string, {
22
+ exists?: boolean;
23
+ }>, "parse"> & {
24
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, {
25
+ exists?: boolean;
26
+ }>) => string) | undefined;
27
+ } & O;
@@ -0,0 +1,27 @@
1
+ /** Filesystem file flag. Pass `exists: true` to require the path to exist at parse time. */
2
+ export declare const fileFlag: <const O extends Partial<import('../index.js').FlagDefinition<string, {
3
+ exists?: boolean;
4
+ }>>>(overrides?: O | undefined) => {
5
+ exists?: boolean | undefined;
6
+ } & {
7
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, {
8
+ exists?: boolean;
9
+ }>) => string;
10
+ type?: import('../index.js').FlagKind;
11
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
12
+ description?: string;
13
+ required?: boolean;
14
+ default?: string | string[] | (() => string | string[] | null) | (() => Promise<string | string[] | null>) | null | undefined;
15
+ multiple?: boolean;
16
+ help?: string;
17
+ alias?: string | readonly string[];
18
+ handler?: ((value: string, opts: import('../index.js').FlagOpts) => {
19
+ shouldStop: boolean;
20
+ } | void) | undefined;
21
+ } & Omit<import('../index.js').FlagDefinition<string, {
22
+ exists?: boolean;
23
+ }>, "parse"> & {
24
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, {
25
+ exists?: boolean;
26
+ }>) => string) | undefined;
27
+ } & O;
@@ -0,0 +1,9 @@
1
+ import { FlagDefinition } from '../lib/types.js';
2
+ export declare function formatPromptMessage(name: string, definition: FlagDefinition): string;
3
+ export declare function normalizeAliases(alias: string | readonly string[] | undefined): readonly string[];
4
+ /**
5
+ * Formats an alias with the correct dash prefix for help/error output:
6
+ * single-character aliases get one dash (`-v`), multi-character aliases get
7
+ * two (`--verbose`). This matches POSIX/minimist parsing conventions.
8
+ */
9
+ export declare function formatAlias(alias: string): string;
@@ -0,0 +1,160 @@
1
+ import { custom } from './custom.js';
2
+ import { optionFlag } from './option.js';
3
+ /**
4
+ * Flag builders used in `static flags = { ... }` schemas.
5
+ *
6
+ * - `Flags.string({ secret? })` — text input; `secret` masks the prompt.
7
+ * - `Flags.number({ min?, max? })` — numeric input with range validation.
8
+ * - `Flags.boolean()` — toggle flag (`--debug` / `--no-debug`).
9
+ * - `Flags.option({ options: [...] as const })` — fixed enum.
10
+ * - `Flags.file({ exists? })` / `Flags.directory({ exists? })` — filesystem
11
+ * paths; `exists` validates presence at parse time.
12
+ * - `Flags.url()` — `URL`-typed input.
13
+ * - `Flags.custom<T>({ parse, ... })` — escape hatch for arbitrary types;
14
+ * `parse` is required.
15
+ *
16
+ * Every builder accepts the common `FlagProps` (description, alias, required,
17
+ * default, multiple, ask, handler, help) plus its builder-specific extras.
18
+ */
19
+ export declare const Flags: {
20
+ string: <const O extends Partial<import('../index.js').FlagDefinition<string, import('../index.js').CustomOptions>>>(overrides?: O | undefined) => {
21
+ [x: string]: unknown;
22
+ } & {
23
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, import('../index.js').CustomOptions>) => string;
24
+ type?: import('../index.js').FlagKind;
25
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
26
+ description?: string;
27
+ required?: boolean;
28
+ default?: string | string[] | (() => string | string[] | null) | (() => Promise<string | string[] | null>) | null | undefined;
29
+ multiple?: boolean;
30
+ help?: string;
31
+ alias?: string | readonly string[];
32
+ handler?: ((value: string, opts: import('../index.js').FlagOpts) => {
33
+ shouldStop: boolean;
34
+ } | void) | undefined;
35
+ } & Omit<import('../index.js').FlagDefinition<string, import('../index.js').CustomOptions>, "parse"> & {
36
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, import('../index.js').CustomOptions>) => string) | undefined;
37
+ } & O;
38
+ number: <const O extends Partial<import('../index.js').FlagDefinition<number, {
39
+ min?: number;
40
+ max?: number;
41
+ }>>>(overrides?: O | undefined) => {
42
+ min?: number | undefined;
43
+ max?: number | undefined;
44
+ } & {
45
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, {
46
+ min?: number;
47
+ max?: number;
48
+ }>) => number;
49
+ type?: import('../index.js').FlagKind;
50
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
51
+ description?: string;
52
+ required?: boolean;
53
+ default?: number | number[] | (() => number | number[] | null) | (() => Promise<number | number[] | null>) | null | undefined;
54
+ multiple?: boolean;
55
+ help?: string;
56
+ alias?: string | readonly string[];
57
+ handler?: ((value: number, opts: import('../index.js').FlagOpts) => {
58
+ shouldStop: boolean;
59
+ } | void) | undefined;
60
+ } & Omit<import('../index.js').FlagDefinition<number, {
61
+ min?: number;
62
+ max?: number;
63
+ }>, "parse"> & {
64
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, {
65
+ min?: number;
66
+ max?: number;
67
+ }>) => number) | undefined;
68
+ } & O;
69
+ boolean: <const O extends Partial<import('../index.js').FlagDefinition<boolean, import('../index.js').CustomOptions>>>(overrides?: O | undefined) => {
70
+ [x: string]: unknown;
71
+ } & {
72
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, import('../index.js').CustomOptions>) => boolean;
73
+ type?: import('../index.js').FlagKind;
74
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
75
+ description?: string;
76
+ required?: boolean;
77
+ default?: boolean | boolean[] | (() => boolean | boolean[] | null) | (() => Promise<boolean | boolean[] | null>) | null | undefined;
78
+ multiple?: boolean;
79
+ help?: string;
80
+ alias?: string | readonly string[];
81
+ handler?: ((value: boolean, opts: import('../index.js').FlagOpts) => {
82
+ shouldStop: boolean;
83
+ } | void) | undefined;
84
+ } & Omit<import('../index.js').FlagDefinition<boolean, import('../index.js').CustomOptions>, "parse"> & {
85
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, import('../index.js').CustomOptions>) => boolean) | undefined;
86
+ } & O;
87
+ option: typeof optionFlag;
88
+ file: <const O extends Partial<import('../index.js').FlagDefinition<string, {
89
+ exists?: boolean;
90
+ }>>>(overrides?: O | undefined) => {
91
+ exists?: boolean | undefined;
92
+ } & {
93
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, {
94
+ exists?: boolean;
95
+ }>) => string;
96
+ type?: import('../index.js').FlagKind;
97
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
98
+ description?: string;
99
+ required?: boolean;
100
+ default?: string | string[] | (() => string | string[] | null) | (() => Promise<string | string[] | null>) | null | undefined;
101
+ multiple?: boolean;
102
+ help?: string;
103
+ alias?: string | readonly string[];
104
+ handler?: ((value: string, opts: import('../index.js').FlagOpts) => {
105
+ shouldStop: boolean;
106
+ } | void) | undefined;
107
+ } & Omit<import('../index.js').FlagDefinition<string, {
108
+ exists?: boolean;
109
+ }>, "parse"> & {
110
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, {
111
+ exists?: boolean;
112
+ }>) => string) | undefined;
113
+ } & O;
114
+ directory: <const O extends Partial<import('../index.js').FlagDefinition<string, {
115
+ exists?: boolean;
116
+ }>>>(overrides?: O | undefined) => {
117
+ exists?: boolean | undefined;
118
+ } & {
119
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, {
120
+ exists?: boolean;
121
+ }>) => string;
122
+ type?: import('../index.js').FlagKind;
123
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
124
+ description?: string;
125
+ required?: boolean;
126
+ default?: string | string[] | (() => string | string[] | null) | (() => Promise<string | string[] | null>) | null | undefined;
127
+ multiple?: boolean;
128
+ help?: string;
129
+ alias?: string | readonly string[];
130
+ handler?: ((value: string, opts: import('../index.js').FlagOpts) => {
131
+ shouldStop: boolean;
132
+ } | void) | undefined;
133
+ } & Omit<import('../index.js').FlagDefinition<string, {
134
+ exists?: boolean;
135
+ }>, "parse"> & {
136
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, {
137
+ exists?: boolean;
138
+ }>) => string) | undefined;
139
+ } & O;
140
+ url: <const O extends Partial<import('../index.js').FlagDefinition<URL, import('../index.js').CustomOptions>>>(overrides?: O | undefined) => {
141
+ [x: string]: unknown;
142
+ } & {
143
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, import('../index.js').CustomOptions>) => URL;
144
+ type?: import('../index.js').FlagKind;
145
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
146
+ description?: string;
147
+ required?: boolean;
148
+ default?: URL | URL[] | (() => URL | URL[] | null) | (() => Promise<URL | URL[] | null>) | null | undefined;
149
+ multiple?: boolean;
150
+ help?: string;
151
+ alias?: string | readonly string[];
152
+ handler?: ((value: URL, opts: import('../index.js').FlagOpts) => {
153
+ shouldStop: boolean;
154
+ } | void) | undefined;
155
+ } & Omit<import('../index.js').FlagDefinition<URL, import('../index.js').CustomOptions>, "parse"> & {
156
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, import('../index.js').CustomOptions>) => URL) | undefined;
157
+ } & O;
158
+ custom: typeof custom;
159
+ };
160
+ export { Args } from '../args/index.js';
@@ -0,0 +1,32 @@
1
+ /** Numeric flag. Optional `min`/`max` clamp the accepted range and surface as `BadCommandFlag`. */
2
+ export declare const numberFlag: <const O extends Partial<import('../index.js').FlagDefinition<number, {
3
+ min?: number;
4
+ max?: number;
5
+ }>>>(overrides?: O | undefined) => {
6
+ min?: number | undefined;
7
+ max?: number | undefined;
8
+ } & {
9
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, {
10
+ min?: number;
11
+ max?: number;
12
+ }>) => number;
13
+ type?: import('../index.js').FlagKind;
14
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
15
+ description?: string;
16
+ required?: boolean;
17
+ default?: number | number[] | (() => number | number[] | null) | (() => Promise<number | number[] | null>) | null | undefined;
18
+ multiple?: boolean;
19
+ help?: string;
20
+ alias?: string | readonly string[];
21
+ handler?: ((value: number, opts: import('../index.js').FlagOpts) => {
22
+ shouldStop: boolean;
23
+ } | void) | undefined;
24
+ } & Omit<import('../index.js').FlagDefinition<number, {
25
+ min?: number;
26
+ max?: number;
27
+ }>, "parse"> & {
28
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, {
29
+ min?: number;
30
+ max?: number;
31
+ }>) => number) | undefined;
32
+ } & O;
@@ -0,0 +1,8 @@
1
+ import { FlagDefinition, InitFlagDefinition } from '../lib/types.js';
2
+ export declare function optionFlag<const T extends readonly string[], const O extends Partial<InitFlagDefinition<T[number], {
3
+ options: T;
4
+ }>>>(opts: {
5
+ options: T;
6
+ } & O): FlagDefinition<T[number], {
7
+ options: T;
8
+ }> & O;
@@ -0,0 +1,19 @@
1
+ /** Text input flag. Pass `secret: true` to mask the prompt as a password. */
2
+ export declare const stringFlag: <const O extends Partial<import('../index.js').FlagDefinition<string, import('../index.js').CustomOptions>>>(overrides?: O | undefined) => {
3
+ [x: string]: unknown;
4
+ } & {
5
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, import('../index.js').CustomOptions>) => string;
6
+ type?: import('../index.js').FlagKind;
7
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
8
+ description?: string;
9
+ required?: boolean;
10
+ default?: string | string[] | (() => string | string[] | null) | (() => Promise<string | string[] | null>) | null | undefined;
11
+ multiple?: boolean;
12
+ help?: string;
13
+ alias?: string | readonly string[];
14
+ handler?: ((value: string, opts: import('../index.js').FlagOpts) => {
15
+ shouldStop: boolean;
16
+ } | void) | undefined;
17
+ } & Omit<import('../index.js').FlagDefinition<string, import('../index.js').CustomOptions>, "parse"> & {
18
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, import('../index.js').CustomOptions>) => string) | undefined;
19
+ } & O;
@@ -0,0 +1,19 @@
1
+ /** URL flag — parses the input with `new URL()` and returns the resulting `URL` object. */
2
+ export declare const urlFlag: <const O extends Partial<import('../index.js').FlagDefinition<URL, import('../index.js').CustomOptions>>>(overrides?: O | undefined) => {
3
+ [x: string]: unknown;
4
+ } & {
5
+ parse: (input: any, opts: import('../index.js').FlagOpts<any, import('../index.js').CustomOptions>) => URL;
6
+ type?: import('../index.js').FlagKind;
7
+ ask?: (opts: import('../index.js').FlagOpts) => Promise<any>;
8
+ description?: string;
9
+ required?: boolean;
10
+ default?: URL | URL[] | (() => URL | URL[] | null) | (() => Promise<URL | URL[] | null>) | null | undefined;
11
+ multiple?: boolean;
12
+ help?: string;
13
+ alias?: string | readonly string[];
14
+ handler?: ((value: URL, opts: import('../index.js').FlagOpts) => {
15
+ shouldStop: boolean;
16
+ } | void) | undefined;
17
+ } & Omit<import('../index.js').FlagDefinition<URL, import('../index.js').CustomOptions>, "parse"> & {
18
+ parse?: ((input: any, opts: import('../index.js').FlagOpts<any, import('../index.js').CustomOptions>) => URL) | undefined;
19
+ } & O;
@@ -12,5 +12,4 @@ export * from './errors/index.js';
12
12
  export * from './args/index.js';
13
13
  export * from './flags/index.js';
14
14
  export * from './lib/types.js';
15
- export * from './options/index.js';
16
15
  export * from './ux/index.js';
@@ -1,4 +1,4 @@
1
1
  import { Command } from '../Command.js';
2
2
  import { BobError } from '../errors/index.js';
3
- export declare function isBobError(err: Error): err is BobError;
3
+ export declare function isBobError(err: unknown): err is BobError;
4
4
  export declare function isBobCommandClass(cls: unknown): cls is typeof Command;
@@ -0,0 +1,99 @@
1
+ import { Command } from '../Command.js';
2
+ import { UX } from '../ux/index.js';
3
+ export type ContextDefinition = any;
4
+ export type CustomOptions = Record<string, unknown>;
5
+ export type FlagKind = 'string' | 'number' | 'boolean' | 'option' | 'file' | 'directory' | 'url' | 'custom';
6
+ /**
7
+ * Options handed to a flag's `parse`, `ask`, and `handler` callbacks.
8
+ *
9
+ * `definition` is typed as the canonical {@link FlagDefinition}. Builder-specific
10
+ * extras (`options`, `min`, `max`, `exists`, `secret`) live directly on
11
+ * {@link FlagDefinition}, so handlers can read them without `any` casts while still
12
+ * being honest that they are optional at the type level.
13
+ */
14
+ export type FlagOpts<C extends ContextDefinition = ContextDefinition, P extends CustomOptions = CustomOptions> = {
15
+ name: string;
16
+ ux: UX;
17
+ ctx: C;
18
+ definition: FlagDefinition<C, P>;
19
+ cmd: typeof Command;
20
+ };
21
+ export type FlagDefinition<T = any, C extends CustomOptions = CustomOptions> = {
22
+ [key in keyof C]: C[keyof C];
23
+ } & {
24
+ parse: (input: any, opts: FlagOpts<any, C>) => T;
25
+ type?: FlagKind;
26
+ ask?: (opts: FlagOpts) => Promise<any>;
27
+ description?: string;
28
+ required?: boolean;
29
+ default?: T | T[] | null | (() => T | T[] | null) | (() => Promise<T | T[] | null>);
30
+ multiple?: boolean;
31
+ help?: string;
32
+ alias?: string | readonly string[];
33
+ handler?: (value: T, opts: FlagOpts) => {
34
+ shouldStop: boolean;
35
+ } | void;
36
+ };
37
+ export type InitFlagDefinition<T = any, C extends CustomOptions = CustomOptions> = Omit<FlagDefinition<T, C>, 'parse'> & {
38
+ parse?: (input: any, opts: FlagOpts<any, C>) => T;
39
+ };
40
+ /** Infers the runtime return type of a flag definition, accounting for `multiple`. */
41
+ export type InferFlagReturn<O> = O extends {
42
+ parse: (...args: any[]) => infer R;
43
+ } ? O extends {
44
+ multiple: true;
45
+ } ? [R] extends [Array<unknown>] ? R : R[] : R : never;
46
+ /**
47
+ * `true` when the parsed value cannot be `null`:
48
+ * - `required: true`
49
+ * - `multiple: true` (always an array)
50
+ * - `default` resolves to a value where neither `null` nor `undefined` is in the union
51
+ * (covers `T`, `T[]`, `() => T`, `() => Promise<T>`)
52
+ */
53
+ type IsGuaranteed<O> = O extends {
54
+ required: true;
55
+ } ? true : O extends {
56
+ multiple: true;
57
+ } ? true : O extends {
58
+ default: infer D;
59
+ } ? null extends D ? false : undefined extends D ? false : true : false;
60
+ /**
61
+ * Final value type seen by the handler — `T` if guaranteed (required, multiple,
62
+ * or non-null default), otherwise `T | null`.
63
+ */
64
+ export type FlagReturnType<O> = IsGuaranteed<O> extends true ? InferFlagReturn<O> : InferFlagReturn<O> | null;
65
+ /** Historic alias — kept so `FlagType<O>` keeps working as a value-inference helper. */
66
+ export type FlagType<O> = InferFlagReturn<O>;
67
+ /** Schema mapping flag names to their {@link FlagDefinition}. */
68
+ export type FlagsSchema = {
69
+ [key: string]: FlagDefinition<any, any>;
70
+ };
71
+ /** Inferred runtime shape of all flags in a schema. */
72
+ export type FlagsObject<Options extends FlagsSchema> = {
73
+ [Key in keyof Options]: FlagReturnType<Options[Key]>;
74
+ };
75
+ /**
76
+ * Schema for positional arguments.
77
+ *
78
+ * Note on booleans: positional booleans don't really make sense, so the
79
+ * canonical {@link Args} builder set deliberately omits `Args.boolean`. The
80
+ * type itself is a structural alias of {@link FlagsSchema} (rather than a
81
+ * branded subtype) to keep literal-type inference flowing through the builder
82
+ * generics without surprising errors. If you put `Flags.boolean()` in
83
+ * `static args`, the runtime parser will accept it but you're outside the
84
+ * supported design.
85
+ */
86
+ export type ArgDefinition = FlagDefinition;
87
+ export type ArgsSchema = FlagsSchema;
88
+ export type InferFlags<T> = T extends {
89
+ flags: infer O extends FlagsSchema;
90
+ } ? O : FlagsSchema;
91
+ export type InferArgs<T> = T extends {
92
+ args: infer A extends ArgsSchema;
93
+ } ? A : ArgsSchema;
94
+ /** `{ flags, args }` pair for a given Command class — the second handler argument. */
95
+ export type Parsed<T> = {
96
+ flags: FlagsObject<InferFlags<T>>;
97
+ args: FlagsObject<InferArgs<T>>;
98
+ };
99
+ export {};
@@ -0,0 +1,7 @@
1
+ import { FlagOpts } from '../lib/types.js';
2
+ export declare function buildStringAsk(builderOpts: FlagOpts): Promise<any>;
3
+ export declare function buildNumberAsk(builderOpts: FlagOpts): Promise<any>;
4
+ export declare function buildOptionAsk(builderOpts: FlagOpts): Promise<any>;
5
+ export declare function buildFileAsk(builderOpts: FlagOpts): Promise<any>;
6
+ export declare function buildDirectoryAsk(builderOpts: FlagOpts): Promise<any>;
7
+ export declare function buildUrlAsk(builderOpts: FlagOpts): Promise<any>;
@@ -0,0 +1,5 @@
1
+ import { numberFlag } from '../flags/number.js';
2
+ import { optionFlag } from '../flags/option.js';
3
+ import { FlagDefinition } from '../lib/types.js';
4
+ export declare function isNumberFlag(flag: FlagDefinition): flag is ReturnType<typeof numberFlag>;
5
+ export declare function isOptionFlag(flag: FlagDefinition<any, any>): flag is ReturnType<typeof optionFlag>;