@outfitter/cli 0.3.0 → 0.4.1
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 +48 -4
- package/dist/actions.js +0 -2
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +1 -2
- package/dist/{render → colors}/colors.d.ts +1 -1
- package/dist/{render → colors}/colors.js +2 -6
- package/dist/colors/index.d.ts +1 -1
- package/dist/colors/index.js +3 -4
- package/dist/command.d.ts +2 -2
- package/dist/command.js +11 -2
- package/dist/completion.d.ts +36 -0
- package/dist/completion.js +91 -0
- package/dist/flags.d.ts +167 -0
- package/dist/flags.js +31 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +5 -4
- package/dist/input.d.ts +3 -26
- package/dist/input.js +1 -31
- package/dist/output.d.ts +2 -2
- package/dist/output.js +0 -1
- package/dist/pagination.d.ts +1 -1
- package/dist/pagination.js +0 -2
- package/dist/query.d.ts +50 -0
- package/dist/query.js +51 -0
- package/dist/shared/@outfitter/cli-b2zk8fb3.js +357 -0
- package/dist/shared/@outfitter/{cli-d9ad0rqj.js → cli-jbj78ac5.js} +1 -6
- package/dist/shared/@outfitter/{cli-e6yv2764.d.ts → cli-k0yvzn6d.d.ts} +1 -1
- package/dist/shared/@outfitter/{cli-ttt7r0j7.d.ts → cli-md9347gn.d.ts} +155 -13
- package/dist/shared/@outfitter/{cli-5g6rkv3d.js → cli-rk9zagkm.js} +24 -32
- package/dist/shared/@outfitter/{cli-4h4rpdra.js → cli-zahqsaby.js} +32 -10
- package/dist/terminal/detection.js +1 -5
- package/dist/terminal/index.js +1 -6
- package/dist/{shared/@outfitter/cli-4cb5g831.d.ts → text.d.ts} +1 -1
- package/dist/{shared/@outfitter/cli-mwxsh3sr.js → text.js} +15 -14
- package/dist/types.d.ts +2 -2
- package/dist/types.js +0 -2
- package/dist/verbs.d.ts +50 -0
- package/dist/verbs.js +61 -0
- package/package.json +50 -204
- package/dist/borders/index.d.ts +0 -3
- package/dist/borders/index.js +0 -13
- package/dist/box/index.d.ts +0 -4
- package/dist/box/index.js +0 -13
- package/dist/demo/index.d.ts +0 -78
- package/dist/demo/index.js +0 -148
- package/dist/demo/registry.d.ts +0 -7
- package/dist/demo/registry.js +0 -28
- package/dist/demo/renderers/borders.d.ts +0 -7
- package/dist/demo/renderers/borders.js +0 -17
- package/dist/demo/renderers/box.d.ts +0 -7
- package/dist/demo/renderers/box.js +0 -18
- package/dist/demo/renderers/colors.d.ts +0 -7
- package/dist/demo/renderers/colors.js +0 -18
- package/dist/demo/renderers/indicators.d.ts +0 -7
- package/dist/demo/renderers/indicators.js +0 -17
- package/dist/demo/renderers/list.d.ts +0 -7
- package/dist/demo/renderers/list.js +0 -19
- package/dist/demo/renderers/markdown.d.ts +0 -7
- package/dist/demo/renderers/markdown.js +0 -18
- package/dist/demo/renderers/progress.d.ts +0 -7
- package/dist/demo/renderers/progress.js +0 -17
- package/dist/demo/renderers/spinner.d.ts +0 -7
- package/dist/demo/renderers/spinner.js +0 -19
- package/dist/demo/renderers/table.d.ts +0 -7
- package/dist/demo/renderers/table.js +0 -19
- package/dist/demo/renderers/text.d.ts +0 -7
- package/dist/demo/renderers/text.js +0 -16
- package/dist/demo/renderers/tree.d.ts +0 -7
- package/dist/demo/renderers/tree.js +0 -18
- package/dist/demo/section.d.ts +0 -5
- package/dist/demo/section.js +0 -23
- package/dist/demo/templates.d.ts +0 -4
- package/dist/demo/templates.js +0 -10
- package/dist/demo/types.d.ts +0 -3
- package/dist/demo/types.js +0 -8
- package/dist/list/index.d.ts +0 -3
- package/dist/list/index.js +0 -9
- package/dist/preset/full.d.ts +0 -14
- package/dist/preset/full.js +0 -41
- package/dist/preset/standard.d.ts +0 -11
- package/dist/preset/standard.js +0 -30
- package/dist/prompt/confirm.d.ts +0 -4
- package/dist/prompt/confirm.js +0 -9
- package/dist/prompt/group.d.ts +0 -4
- package/dist/prompt/group.js +0 -9
- package/dist/prompt/index.d.ts +0 -7
- package/dist/prompt/index.js +0 -32
- package/dist/prompt/select.d.ts +0 -4
- package/dist/prompt/select.js +0 -11
- package/dist/prompt/text.d.ts +0 -4
- package/dist/prompt/text.js +0 -11
- package/dist/prompt/types.d.ts +0 -3
- package/dist/prompt/types.js +0 -8
- package/dist/prompt/validators.d.ts +0 -2
- package/dist/prompt/validators.js +0 -8
- package/dist/render/borders.d.ts +0 -2
- package/dist/render/borders.js +0 -15
- package/dist/render/box.d.ts +0 -3
- package/dist/render/box.js +0 -23
- package/dist/render/date.d.ts +0 -2
- package/dist/render/date.js +0 -12
- package/dist/render/format-relative.d.ts +0 -2
- package/dist/render/format-relative.js +0 -8
- package/dist/render/format.d.ts +0 -2
- package/dist/render/format.js +0 -10
- package/dist/render/heading.d.ts +0 -3
- package/dist/render/heading.js +0 -14
- package/dist/render/index.d.ts +0 -32
- package/dist/render/index.js +0 -235
- package/dist/render/indicators.d.ts +0 -2
- package/dist/render/indicators.js +0 -16
- package/dist/render/json.d.ts +0 -2
- package/dist/render/json.js +0 -10
- package/dist/render/layout.d.ts +0 -5
- package/dist/render/layout.js +0 -25
- package/dist/render/list.d.ts +0 -2
- package/dist/render/list.js +0 -8
- package/dist/render/markdown.d.ts +0 -2
- package/dist/render/markdown.js +0 -10
- package/dist/render/progress.d.ts +0 -2
- package/dist/render/progress.js +0 -8
- package/dist/render/separator.d.ts +0 -3
- package/dist/render/separator.js +0 -14
- package/dist/render/shapes.d.ts +0 -2
- package/dist/render/shapes.js +0 -35
- package/dist/render/spinner.d.ts +0 -2
- package/dist/render/spinner.js +0 -12
- package/dist/render/stack.d.ts +0 -3
- package/dist/render/stack.js +0 -38
- package/dist/render/table.d.ts +0 -3
- package/dist/render/table.js +0 -12
- package/dist/render/text.d.ts +0 -2
- package/dist/render/text.js +0 -27
- package/dist/render/tree.d.ts +0 -2
- package/dist/render/tree.js +0 -10
- package/dist/render/types.d.ts +0 -2
- package/dist/shared/@outfitter/cli-0djg8q91.js +0 -7
- package/dist/shared/@outfitter/cli-0w242qtv.d.ts +0 -48
- package/dist/shared/@outfitter/cli-1g8tt31a.d.ts +0 -119
- package/dist/shared/@outfitter/cli-1kwbnt86.d.ts +0 -45
- package/dist/shared/@outfitter/cli-1sb3xvnw.js +0 -95
- package/dist/shared/@outfitter/cli-1vy0vtga.js +0 -135
- package/dist/shared/@outfitter/cli-2g8bx1aq.d.ts +0 -50
- package/dist/shared/@outfitter/cli-33e97cjs.d.ts +0 -42
- package/dist/shared/@outfitter/cli-3b7ed3rm.d.ts +0 -97
- package/dist/shared/@outfitter/cli-3hk2xf3c.js +0 -82
- package/dist/shared/@outfitter/cli-3hp8qwx3.js +0 -11
- package/dist/shared/@outfitter/cli-47yw5h6a.js +0 -7
- package/dist/shared/@outfitter/cli-4b6tbp68.d.ts +0 -36
- package/dist/shared/@outfitter/cli-4fcz51qa.js +0 -70
- package/dist/shared/@outfitter/cli-4x6pqnez.js +0 -20
- package/dist/shared/@outfitter/cli-4zk2y4a2.d.ts +0 -61
- package/dist/shared/@outfitter/cli-60b5xh1r.js +0 -20
- package/dist/shared/@outfitter/cli-6bztk73z.d.ts +0 -51
- package/dist/shared/@outfitter/cli-6fxffp8k.js +0 -1
- package/dist/shared/@outfitter/cli-6hg0sg2d.d.ts +0 -93
- package/dist/shared/@outfitter/cli-6r3m2knf.js +0 -62
- package/dist/shared/@outfitter/cli-6ty1nvws.js +0 -179
- package/dist/shared/@outfitter/cli-7n610r63.js +0 -20
- package/dist/shared/@outfitter/cli-7na6p4fs.d.ts +0 -59
- package/dist/shared/@outfitter/cli-83jwvj1t.d.ts +0 -17
- package/dist/shared/@outfitter/cli-85fg2vr5.js +0 -123
- package/dist/shared/@outfitter/cli-8bwaw3pz.js +0 -7
- package/dist/shared/@outfitter/cli-8hngbjyr.d.ts +0 -164
- package/dist/shared/@outfitter/cli-8j5k6mr3.js +0 -71
- package/dist/shared/@outfitter/cli-8xsmsbbd.d.ts +0 -223
- package/dist/shared/@outfitter/cli-914d47mt.js +0 -20
- package/dist/shared/@outfitter/cli-9bcm4zhf.d.ts +0 -87
- package/dist/shared/@outfitter/cli-9khk3cbq.d.ts +0 -190
- package/dist/shared/@outfitter/cli-a4q87517.d.ts +0 -64
- package/dist/shared/@outfitter/cli-aem6v4c8.js +0 -146
- package/dist/shared/@outfitter/cli-b0tzqgnf.d.ts +0 -132
- package/dist/shared/@outfitter/cli-b5c2k0d7.js +0 -39
- package/dist/shared/@outfitter/cli-b5epywry.js +0 -1
- package/dist/shared/@outfitter/cli-bc17qeh2.js +0 -19
- package/dist/shared/@outfitter/cli-bcmcaz1b.js +0 -23
- package/dist/shared/@outfitter/cli-bv09nme3.d.ts +0 -56
- package/dist/shared/@outfitter/cli-c6pbxpw0.d.ts +0 -112
- package/dist/shared/@outfitter/cli-c8fqdaes.js +0 -117
- package/dist/shared/@outfitter/cli-c8q4f71g.js +0 -144
- package/dist/shared/@outfitter/cli-c9knfqn5.d.ts +0 -30
- package/dist/shared/@outfitter/cli-cf1xexgn.d.ts +0 -53
- package/dist/shared/@outfitter/cli-cf2s94s1.d.ts +0 -42
- package/dist/shared/@outfitter/cli-cwgj6mcs.js +0 -214
- package/dist/shared/@outfitter/cli-d8ahdd9d.js +0 -272
- package/dist/shared/@outfitter/cli-dbyteh27.d.ts +0 -24
- package/dist/shared/@outfitter/cli-e5ms1y0x.d.ts +0 -91
- package/dist/shared/@outfitter/cli-en6zn6sj.js +0 -1
- package/dist/shared/@outfitter/cli-evx7qcp1.d.ts +0 -300
- package/dist/shared/@outfitter/cli-f6fsaayd.js +0 -94
- package/dist/shared/@outfitter/cli-fakncnjp.d.ts +0 -106
- package/dist/shared/@outfitter/cli-ffa0jwb7.js +0 -122
- package/dist/shared/@outfitter/cli-h20jc0bs.d.ts +0 -66
- package/dist/shared/@outfitter/cli-h3jz0bxz.js +0 -48
- package/dist/shared/@outfitter/cli-h4wpzb3f.js +0 -67
- package/dist/shared/@outfitter/cli-hda6mc28.js +0 -126
- package/dist/shared/@outfitter/cli-hnpbqmc8.d.ts +0 -328
- package/dist/shared/@outfitter/cli-j19a91ck.js +0 -30
- package/dist/shared/@outfitter/cli-jejfypgf.js +0 -85
- package/dist/shared/@outfitter/cli-jp0k3qd9.js +0 -279
- package/dist/shared/@outfitter/cli-k76e7173.js +0 -128
- package/dist/shared/@outfitter/cli-kc3ffp1v.d.ts +0 -23
- package/dist/shared/@outfitter/cli-kk5hnndk.d.ts +0 -128
- package/dist/shared/@outfitter/cli-ktqme80d.js +0 -7
- package/dist/shared/@outfitter/cli-mq0jp15z.js +0 -1
- package/dist/shared/@outfitter/cli-n0c33vba.js +0 -25
- package/dist/shared/@outfitter/cli-n17gt1dz.js +0 -19
- package/dist/shared/@outfitter/cli-n9dbh0hp.js +0 -51
- package/dist/shared/@outfitter/cli-ndem6tz8.js +0 -63
- package/dist/shared/@outfitter/cli-nj4nqy1h.d.ts +0 -24
- package/dist/shared/@outfitter/cli-nkns8p4r.js +0 -61
- package/dist/shared/@outfitter/cli-p3dqm1vd.js +0 -22
- package/dist/shared/@outfitter/cli-pndwprz8.js +0 -118
- package/dist/shared/@outfitter/cli-pvrwv6rb.js +0 -352
- package/dist/shared/@outfitter/cli-py02m79x.d.ts +0 -20
- package/dist/shared/@outfitter/cli-qj83y5wj.d.ts +0 -71
- package/dist/shared/@outfitter/cli-regjbef6.d.ts +0 -26
- package/dist/shared/@outfitter/cli-s1tx5kha.d.ts +0 -59
- package/dist/shared/@outfitter/cli-sam2sq50.js +0 -37
- package/dist/shared/@outfitter/cli-snxj55n6.js +0 -43
- package/dist/shared/@outfitter/cli-symyxb0z.js +0 -20
- package/dist/shared/@outfitter/cli-tvw1xrdj.js +0 -20
- package/dist/shared/@outfitter/cli-v1tzwxkt.js +0 -32
- package/dist/shared/@outfitter/cli-vd60dj65.js +0 -1
- package/dist/shared/@outfitter/cli-vfcrskfj.d.ts +0 -41
- package/dist/shared/@outfitter/cli-vstbkzky.d.ts +0 -74
- package/dist/shared/@outfitter/cli-vtg0sqk2.d.ts +0 -54
- package/dist/shared/@outfitter/cli-x4cavvc0.js +0 -1
- package/dist/shared/@outfitter/cli-xep6v2c0.js +0 -52
- package/dist/shared/@outfitter/cli-xg5y5fhk.js +0 -86
- package/dist/shared/@outfitter/cli-y7k1t81k.js +0 -30
- package/dist/shared/@outfitter/cli-yfyzy95c.js +0 -67
- package/dist/shared/@outfitter/cli-z78mkrc7.js +0 -59
- package/dist/shared/@outfitter/cli-znc47004.js +0 -134
- package/dist/shared/@outfitter/cli-zx598p8q.d.ts +0 -26
- package/dist/streaming/ansi.d.ts +0 -2
- package/dist/streaming/ansi.js +0 -8
- package/dist/streaming/index.d.ts +0 -4
- package/dist/streaming/index.js +0 -17
- package/dist/streaming/spinner.d.ts +0 -3
- package/dist/streaming/spinner.js +0 -10
- package/dist/streaming/writer.d.ts +0 -2
- package/dist/streaming/writer.js +0 -9
- package/dist/table/index.d.ts +0 -4
- package/dist/table/index.js +0 -13
- package/dist/theme/context.d.ts +0 -9
- package/dist/theme/context.js +0 -14
- package/dist/theme/create.d.ts +0 -8
- package/dist/theme/create.js +0 -12
- package/dist/theme/index.d.ts +0 -17
- package/dist/theme/index.js +0 -42
- package/dist/theme/presets/bold.d.ts +0 -8
- package/dist/theme/presets/bold.js +0 -12
- package/dist/theme/presets/default.d.ts +0 -8
- package/dist/theme/presets/default.js +0 -11
- package/dist/theme/presets/index.d.ts +0 -12
- package/dist/theme/presets/index.js +0 -24
- package/dist/theme/presets/minimal.d.ts +0 -8
- package/dist/theme/presets/minimal.js +0 -12
- package/dist/theme/presets/rounded.d.ts +0 -8
- package/dist/theme/presets/rounded.js +0 -12
- package/dist/theme/resolve.d.ts +0 -8
- package/dist/theme/resolve.js +0 -11
- package/dist/theme/types.d.ts +0 -7
- package/dist/theme/types.js +0 -1
- package/dist/tree/index.d.ts +0 -3
- package/dist/tree/index.js +0 -11
- /package/dist/shared/@outfitter/{cli-ykxn7rb2.d.ts → cli-xppg982q.d.ts} +0 -0
- /package/dist/{render/types.js → shared/@outfitter/cli-zw75pdk8.js} +0 -0
package/dist/pagination.d.ts
CHANGED
package/dist/pagination.js
CHANGED
package/dist/query.d.ts
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { FlagPreset, OutputMode } from "./shared/@outfitter/cli-md9347gn";
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for the output mode preset.
|
|
4
|
+
*/
|
|
5
|
+
interface OutputModePresetConfig {
|
|
6
|
+
/** Allowed output modes (default: ["human", "json"]) */
|
|
7
|
+
readonly modes?: readonly OutputMode[];
|
|
8
|
+
/** Default mode when not specified (default: "human") */
|
|
9
|
+
readonly defaultMode?: OutputMode;
|
|
10
|
+
/** Whether to include "jsonl" in allowed modes (default: false) */
|
|
11
|
+
readonly includeJsonl?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolved output mode from CLI input.
|
|
15
|
+
*/
|
|
16
|
+
type OutputModeFlags = {
|
|
17
|
+
/** The resolved output mode */
|
|
18
|
+
readonly outputMode: OutputMode;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Output mode flag preset.
|
|
22
|
+
*
|
|
23
|
+
* Adds: `-o, --output <mode>`
|
|
24
|
+
* Resolves: `{ outputMode: string }`
|
|
25
|
+
*
|
|
26
|
+
* Replaces ad-hoc `--json`/`--jsonl` handling with a single
|
|
27
|
+
* `--output` flag that accepts a mode name. Invalid modes
|
|
28
|
+
* fall back to the configured default.
|
|
29
|
+
*
|
|
30
|
+
* @param config - Optional configuration for allowed modes and default
|
|
31
|
+
*/
|
|
32
|
+
declare function outputModePreset(config?: OutputModePresetConfig): FlagPreset<OutputModeFlags>;
|
|
33
|
+
/**
|
|
34
|
+
* Resolved jq expression from CLI input.
|
|
35
|
+
*/
|
|
36
|
+
type JqFlags = {
|
|
37
|
+
/** The jq expression, or undefined if not provided */
|
|
38
|
+
readonly jq: string | undefined;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* JQ expression flag preset.
|
|
42
|
+
*
|
|
43
|
+
* Adds: `--jq <expr>`
|
|
44
|
+
* Resolves: `{ jq: string | undefined }`
|
|
45
|
+
*
|
|
46
|
+
* The resolver returns the expression string or `undefined`.
|
|
47
|
+
* Actual jq execution is a consumer concern.
|
|
48
|
+
*/
|
|
49
|
+
declare function jqPreset(): FlagPreset<JqFlags>;
|
|
50
|
+
export { outputModePreset, jqPreset, OutputModePresetConfig, OutputModeFlags, JqFlags };
|
package/dist/query.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import {
|
|
3
|
+
createPreset
|
|
4
|
+
} from "./shared/@outfitter/cli-b2zk8fb3.js";
|
|
5
|
+
|
|
6
|
+
// packages/cli/src/query.ts
|
|
7
|
+
function outputModePreset(config) {
|
|
8
|
+
const defaultMode = config?.defaultMode ?? "human";
|
|
9
|
+
const baseModes = config?.modes ?? ["human", "json"];
|
|
10
|
+
const modes = new Set(config?.includeJsonl ? [...baseModes, "jsonl"] : baseModes);
|
|
11
|
+
modes.add(defaultMode);
|
|
12
|
+
return createPreset({
|
|
13
|
+
id: "outputMode",
|
|
14
|
+
options: [
|
|
15
|
+
{
|
|
16
|
+
flags: "-o, --output <mode>",
|
|
17
|
+
description: `Output mode (${[...modes].join(", ")})`,
|
|
18
|
+
defaultValue: defaultMode
|
|
19
|
+
}
|
|
20
|
+
],
|
|
21
|
+
resolve: (flags) => {
|
|
22
|
+
const raw = flags["output"];
|
|
23
|
+
if (typeof raw === "string" && modes.has(raw)) {
|
|
24
|
+
return { outputMode: raw };
|
|
25
|
+
}
|
|
26
|
+
return { outputMode: defaultMode };
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
function jqPreset() {
|
|
31
|
+
return createPreset({
|
|
32
|
+
id: "jq",
|
|
33
|
+
options: [
|
|
34
|
+
{
|
|
35
|
+
flags: "--jq <expr>",
|
|
36
|
+
description: "Filter JSON output with a jq expression"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
resolve: (flags) => {
|
|
40
|
+
const raw = flags["jq"];
|
|
41
|
+
if (typeof raw === "string" && raw.length > 0) {
|
|
42
|
+
return { jq: raw };
|
|
43
|
+
}
|
|
44
|
+
return { jq: undefined };
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export {
|
|
49
|
+
outputModePreset,
|
|
50
|
+
jqPreset
|
|
51
|
+
};
|
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
// packages/cli/src/flags.ts
|
|
3
|
+
function createPreset(config) {
|
|
4
|
+
const preset = {
|
|
5
|
+
id: config.id,
|
|
6
|
+
options: config.options,
|
|
7
|
+
resolve: config.resolve
|
|
8
|
+
};
|
|
9
|
+
preset[PRESET_IDS] = [config.id];
|
|
10
|
+
return preset;
|
|
11
|
+
}
|
|
12
|
+
var PRESET_IDS = Symbol("presetIds");
|
|
13
|
+
function getPresetIds(preset) {
|
|
14
|
+
const ids = preset[PRESET_IDS];
|
|
15
|
+
return ids && ids.length > 0 ? ids : [preset.id];
|
|
16
|
+
}
|
|
17
|
+
function composePresets(...presets) {
|
|
18
|
+
const seen = new Set;
|
|
19
|
+
const mergedIds = [];
|
|
20
|
+
const mergedOptions = [];
|
|
21
|
+
const resolvers = [];
|
|
22
|
+
for (const preset of presets) {
|
|
23
|
+
const presetIds = getPresetIds(preset);
|
|
24
|
+
if (presetIds.every((id) => seen.has(id)))
|
|
25
|
+
continue;
|
|
26
|
+
for (const id of presetIds) {
|
|
27
|
+
if (seen.has(id))
|
|
28
|
+
continue;
|
|
29
|
+
seen.add(id);
|
|
30
|
+
mergedIds.push(id);
|
|
31
|
+
}
|
|
32
|
+
mergedOptions.push(...preset.options);
|
|
33
|
+
resolvers.push(preset.resolve);
|
|
34
|
+
}
|
|
35
|
+
const composed = {
|
|
36
|
+
id: mergedIds.join("+"),
|
|
37
|
+
options: mergedOptions,
|
|
38
|
+
resolve: (flags) => {
|
|
39
|
+
let result = {};
|
|
40
|
+
for (const resolver of resolvers) {
|
|
41
|
+
result = { ...result, ...resolver(flags) };
|
|
42
|
+
}
|
|
43
|
+
return result;
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
composed[PRESET_IDS] = mergedIds;
|
|
47
|
+
return composed;
|
|
48
|
+
}
|
|
49
|
+
function verbosePreset() {
|
|
50
|
+
return createPreset({
|
|
51
|
+
id: "verbose",
|
|
52
|
+
options: [
|
|
53
|
+
{
|
|
54
|
+
flags: "-v, --verbose",
|
|
55
|
+
description: "Verbose output",
|
|
56
|
+
defaultValue: false
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
resolve: (flags) => ({
|
|
60
|
+
verbose: Boolean(flags["verbose"])
|
|
61
|
+
})
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
function cwdPreset() {
|
|
65
|
+
return createPreset({
|
|
66
|
+
id: "cwd",
|
|
67
|
+
options: [
|
|
68
|
+
{
|
|
69
|
+
flags: "--cwd <path>",
|
|
70
|
+
description: "Working directory"
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
resolve: (flags) => ({
|
|
74
|
+
cwd: typeof flags["cwd"] === "string" ? flags["cwd"] : process.cwd()
|
|
75
|
+
})
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
function dryRunPreset() {
|
|
79
|
+
return createPreset({
|
|
80
|
+
id: "dryRun",
|
|
81
|
+
options: [
|
|
82
|
+
{
|
|
83
|
+
flags: "--dry-run",
|
|
84
|
+
description: "Preview changes without applying",
|
|
85
|
+
defaultValue: false
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
resolve: (flags) => ({
|
|
89
|
+
dryRun: Boolean(flags["dryRun"] ?? flags["dry-run"])
|
|
90
|
+
})
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
function forcePreset() {
|
|
94
|
+
return createPreset({
|
|
95
|
+
id: "force",
|
|
96
|
+
options: [
|
|
97
|
+
{
|
|
98
|
+
flags: "-f, --force",
|
|
99
|
+
description: "Force operation (skip confirmations)",
|
|
100
|
+
defaultValue: false
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
resolve: (flags) => ({
|
|
104
|
+
force: Boolean(flags["force"])
|
|
105
|
+
})
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
function interactionPreset() {
|
|
109
|
+
return createPreset({
|
|
110
|
+
id: "interaction",
|
|
111
|
+
options: [
|
|
112
|
+
{
|
|
113
|
+
flags: "--non-interactive",
|
|
114
|
+
description: "Disable interactive prompts",
|
|
115
|
+
defaultValue: false
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
flags: "--no-input",
|
|
119
|
+
description: "Disable interactive prompts (alias)"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
flags: "-y, --yes",
|
|
123
|
+
description: "Auto-confirm prompts",
|
|
124
|
+
defaultValue: false
|
|
125
|
+
}
|
|
126
|
+
],
|
|
127
|
+
resolve: (flags) => {
|
|
128
|
+
const nonInteractive = flags["input"] === false || Boolean(flags["nonInteractive"]) || Boolean(flags["non-interactive"]) || Boolean(flags["noInput"]) || Boolean(flags["no-input"]);
|
|
129
|
+
return {
|
|
130
|
+
interactive: !nonInteractive,
|
|
131
|
+
yes: Boolean(flags["yes"])
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
function strictPreset() {
|
|
137
|
+
return createPreset({
|
|
138
|
+
id: "strict",
|
|
139
|
+
options: [
|
|
140
|
+
{
|
|
141
|
+
flags: "--strict",
|
|
142
|
+
description: "Enable strict mode (treat warnings as errors)",
|
|
143
|
+
defaultValue: false
|
|
144
|
+
}
|
|
145
|
+
],
|
|
146
|
+
resolve: (flags) => ({
|
|
147
|
+
strict: Boolean(flags["strict"])
|
|
148
|
+
})
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
var COLOR_MODES = new Set(["auto", "always", "never"]);
|
|
152
|
+
function colorPreset() {
|
|
153
|
+
return createPreset({
|
|
154
|
+
id: "color",
|
|
155
|
+
options: [
|
|
156
|
+
{
|
|
157
|
+
flags: "--color [mode]",
|
|
158
|
+
description: "Color output mode (auto, always, never)",
|
|
159
|
+
defaultValue: "auto"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
flags: "--no-color",
|
|
163
|
+
description: "Disable color output"
|
|
164
|
+
}
|
|
165
|
+
],
|
|
166
|
+
resolve: (flags) => {
|
|
167
|
+
const raw = flags["color"];
|
|
168
|
+
if (raw === false)
|
|
169
|
+
return { color: "never" };
|
|
170
|
+
if (raw === true)
|
|
171
|
+
return { color: "always" };
|
|
172
|
+
if (typeof raw === "string" && COLOR_MODES.has(raw)) {
|
|
173
|
+
return { color: raw };
|
|
174
|
+
}
|
|
175
|
+
return { color: "auto" };
|
|
176
|
+
}
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
function parseCommaSeparated(value) {
|
|
180
|
+
if (typeof value !== "string")
|
|
181
|
+
return;
|
|
182
|
+
const items = value.split(",").map((s) => s.trim()).filter(Boolean);
|
|
183
|
+
return items.length > 0 ? items : undefined;
|
|
184
|
+
}
|
|
185
|
+
function projectionPreset() {
|
|
186
|
+
return createPreset({
|
|
187
|
+
id: "projection",
|
|
188
|
+
options: [
|
|
189
|
+
{
|
|
190
|
+
flags: "--fields <fields>",
|
|
191
|
+
description: "Comma-separated list of fields to include"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
flags: "--exclude-fields <fields>",
|
|
195
|
+
description: "Comma-separated list of fields to exclude"
|
|
196
|
+
},
|
|
197
|
+
{
|
|
198
|
+
flags: "--count",
|
|
199
|
+
description: "Output only the count of results",
|
|
200
|
+
defaultValue: false
|
|
201
|
+
}
|
|
202
|
+
],
|
|
203
|
+
resolve: (flags) => ({
|
|
204
|
+
fields: parseCommaSeparated(flags["fields"]),
|
|
205
|
+
excludeFields: parseCommaSeparated(flags["excludeFields"] ?? flags["exclude-fields"]),
|
|
206
|
+
count: Boolean(flags["count"])
|
|
207
|
+
})
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
var DURATION_SUFFIXES = {
|
|
211
|
+
w: 7 * 24 * 60 * 60 * 1000,
|
|
212
|
+
d: 24 * 60 * 60 * 1000,
|
|
213
|
+
h: 60 * 60 * 1000,
|
|
214
|
+
m: 60 * 1000
|
|
215
|
+
};
|
|
216
|
+
function parseDate(value, nowMs = Date.now()) {
|
|
217
|
+
if (typeof value !== "string" || value === "")
|
|
218
|
+
return;
|
|
219
|
+
const durationMatch = value.match(/^(\d+(?:\.\d+)?)(w|d|h|m)$/);
|
|
220
|
+
if (durationMatch) {
|
|
221
|
+
const amount = Number(durationMatch[1]);
|
|
222
|
+
const suffix = durationMatch[2];
|
|
223
|
+
const multiplier = suffix ? DURATION_SUFFIXES[suffix] : undefined;
|
|
224
|
+
if (amount > 0 && multiplier !== undefined) {
|
|
225
|
+
return new Date(nowMs - amount * multiplier);
|
|
226
|
+
}
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
const date = new Date(value);
|
|
230
|
+
if (Number.isNaN(date.getTime()))
|
|
231
|
+
return;
|
|
232
|
+
return date;
|
|
233
|
+
}
|
|
234
|
+
function sanitizePositiveInteger(value, fallback) {
|
|
235
|
+
const parsed = Number(value);
|
|
236
|
+
if (!Number.isFinite(parsed) || parsed <= 0)
|
|
237
|
+
return fallback;
|
|
238
|
+
return Math.floor(parsed);
|
|
239
|
+
}
|
|
240
|
+
function timeWindowPreset(config) {
|
|
241
|
+
return createPreset({
|
|
242
|
+
id: "timeWindow",
|
|
243
|
+
options: [
|
|
244
|
+
{
|
|
245
|
+
flags: "--since <date>",
|
|
246
|
+
description: "Start of time window (ISO date or duration: 7d, 24h, 2w)"
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
flags: "--until <date>",
|
|
250
|
+
description: "End of time window (ISO date or duration: 7d, 24h, 2w)"
|
|
251
|
+
}
|
|
252
|
+
],
|
|
253
|
+
resolve: (flags) => {
|
|
254
|
+
const now = Date.now();
|
|
255
|
+
const since = parseDate(flags["since"], now);
|
|
256
|
+
const until = parseDate(flags["until"], now);
|
|
257
|
+
if (since && until && typeof config?.maxRange === "number" && Number.isFinite(config.maxRange) && config.maxRange > 0) {
|
|
258
|
+
const range = Math.abs(until.getTime() - since.getTime());
|
|
259
|
+
if (range > config.maxRange) {
|
|
260
|
+
return {
|
|
261
|
+
since: undefined,
|
|
262
|
+
until: undefined
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
return { since, until };
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
function executionPreset(config) {
|
|
271
|
+
const defaultTimeout = config?.defaultTimeout;
|
|
272
|
+
const defaultRetries = config?.defaultRetries ?? 0;
|
|
273
|
+
const maxRetries = config?.maxRetries ?? 10;
|
|
274
|
+
return createPreset({
|
|
275
|
+
id: "execution",
|
|
276
|
+
options: [
|
|
277
|
+
{
|
|
278
|
+
flags: "--timeout <ms>",
|
|
279
|
+
description: "Timeout in milliseconds"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
flags: "--retries <n>",
|
|
283
|
+
description: `Number of retries (default: ${defaultRetries}, max: ${maxRetries})`
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
flags: "--offline",
|
|
287
|
+
description: "Operate in offline mode",
|
|
288
|
+
defaultValue: false
|
|
289
|
+
}
|
|
290
|
+
],
|
|
291
|
+
resolve: (flags) => {
|
|
292
|
+
let timeout = defaultTimeout;
|
|
293
|
+
const rawTimeout = flags["timeout"];
|
|
294
|
+
if (rawTimeout !== undefined) {
|
|
295
|
+
const parsed = Number(rawTimeout);
|
|
296
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
297
|
+
timeout = Math.floor(parsed);
|
|
298
|
+
} else {
|
|
299
|
+
timeout = undefined;
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
let retries = defaultRetries;
|
|
303
|
+
const rawRetries = flags["retries"];
|
|
304
|
+
if (rawRetries !== undefined) {
|
|
305
|
+
const parsed = Number(rawRetries);
|
|
306
|
+
if (Number.isFinite(parsed) && parsed >= 0) {
|
|
307
|
+
retries = Math.min(Math.floor(parsed), maxRetries);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return {
|
|
311
|
+
timeout,
|
|
312
|
+
retries,
|
|
313
|
+
offline: Boolean(flags["offline"])
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
function paginationPreset(config) {
|
|
319
|
+
const maxLimit = sanitizePositiveInteger(config?.maxLimit, 100);
|
|
320
|
+
const defaultLimit = Math.min(sanitizePositiveInteger(config?.defaultLimit, 20), maxLimit);
|
|
321
|
+
return createPreset({
|
|
322
|
+
id: "pagination",
|
|
323
|
+
options: [
|
|
324
|
+
{
|
|
325
|
+
flags: "-l, --limit <n>",
|
|
326
|
+
description: `Maximum number of results (default: ${defaultLimit}, max: ${maxLimit})`
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
flags: "--next",
|
|
330
|
+
description: "Continue from last position",
|
|
331
|
+
defaultValue: false
|
|
332
|
+
},
|
|
333
|
+
{
|
|
334
|
+
flags: "--reset",
|
|
335
|
+
description: "Clear saved cursor and start fresh",
|
|
336
|
+
defaultValue: false
|
|
337
|
+
}
|
|
338
|
+
],
|
|
339
|
+
resolve: (flags) => {
|
|
340
|
+
let limit = defaultLimit;
|
|
341
|
+
const rawLimit = flags["limit"];
|
|
342
|
+
if (rawLimit !== undefined) {
|
|
343
|
+
const parsed = Number(rawLimit);
|
|
344
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
345
|
+
limit = Math.min(Math.floor(parsed), maxLimit);
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
return {
|
|
349
|
+
limit,
|
|
350
|
+
next: Boolean(flags["next"]),
|
|
351
|
+
reset: Boolean(flags["reset"])
|
|
352
|
+
};
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
export { createPreset, composePresets, verbosePreset, cwdPreset, dryRunPreset, forcePreset, interactionPreset, strictPreset, colorPreset, projectionPreset, timeWindowPreset, executionPreset, paginationPreset };
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import {
|
|
3
|
-
__esm
|
|
4
|
-
} from "./cli-v1tzwxkt.js";
|
|
5
|
-
|
|
6
2
|
// packages/cli/src/terminal/detection.ts
|
|
7
3
|
import { getEnvBoolean } from "@outfitter/config";
|
|
8
4
|
function getEnvValue(key) {
|
|
@@ -70,6 +66,5 @@ function isInteractive(options) {
|
|
|
70
66
|
const isTTY = options?.isTTY ?? process.stdout.isTTY ?? false;
|
|
71
67
|
return isTTY;
|
|
72
68
|
}
|
|
73
|
-
var init_detection = () => {};
|
|
74
69
|
|
|
75
|
-
export { getEnvValue, hasNoColorEnv, resolveForceColorEnv, resolveColorEnv, supportsColor, getTerminalWidth, isInteractive
|
|
70
|
+
export { getEnvValue, hasNoColorEnv, resolveForceColorEnv, resolveColorEnv, supportsColor, getTerminalWidth, isInteractive };
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ActionCliOption } from "@outfitter/contracts";
|
|
1
2
|
import { Command } from "commander";
|
|
2
3
|
import { CancelledError, ErrorCategory, ValidationError } from "@outfitter/contracts";
|
|
3
4
|
import { Result } from "better-result";
|
|
@@ -23,7 +24,7 @@ interface CLIConfig {
|
|
|
23
24
|
/** Custom error handler */
|
|
24
25
|
readonly onError?: (error: Error) => void;
|
|
25
26
|
/** Custom exit handler (defaults to process.exit) */
|
|
26
|
-
readonly onExit?: (code: number) =>
|
|
27
|
+
readonly onExit?: (code: number) => void | Promise<void>;
|
|
27
28
|
}
|
|
28
29
|
/**
|
|
29
30
|
* CLI instance returned by createCLI.
|
|
@@ -79,12 +80,164 @@ interface CommandBuilder {
|
|
|
79
80
|
requiredOption(flags: string, description: string, defaultValue?: unknown): this;
|
|
80
81
|
/** Add command aliases */
|
|
81
82
|
alias(alias: string): this;
|
|
83
|
+
/** Apply a flag preset (adds its options to the command) */
|
|
84
|
+
preset(preset: FlagPreset<Record<string, unknown>>): this;
|
|
82
85
|
/** Set the action handler */
|
|
83
86
|
action<TFlags extends CommandFlags = CommandFlags>(handler: CommandAction<TFlags>): this;
|
|
84
87
|
/** Build the underlying Commander command */
|
|
85
88
|
build(): Command;
|
|
86
89
|
}
|
|
87
90
|
/**
|
|
91
|
+
* A family of related command verbs with a primary name and aliases.
|
|
92
|
+
*/
|
|
93
|
+
interface VerbFamily {
|
|
94
|
+
/** Primary verb name */
|
|
95
|
+
readonly primary: string;
|
|
96
|
+
/** Alternative names for this verb */
|
|
97
|
+
readonly aliases: readonly string[];
|
|
98
|
+
/** Description of what this verb family does */
|
|
99
|
+
readonly description: string;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Configuration for resolving a verb family with project-level overrides.
|
|
103
|
+
*/
|
|
104
|
+
interface VerbConfig {
|
|
105
|
+
/** Override the primary verb (e.g., "edit" instead of "modify") */
|
|
106
|
+
readonly primary?: string;
|
|
107
|
+
/** Whether to include aliases (default: true) */
|
|
108
|
+
readonly aliases?: boolean;
|
|
109
|
+
/** Additional aliases beyond defaults */
|
|
110
|
+
readonly extraAliases?: readonly string[];
|
|
111
|
+
/** Aliases to exclude */
|
|
112
|
+
readonly excludeAliases?: readonly string[];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* A composable set of CLI flags with typed resolution.
|
|
116
|
+
*
|
|
117
|
+
* Presets bundle flag definitions with a resolver that coerces
|
|
118
|
+
* raw Commander output into typed values.
|
|
119
|
+
*/
|
|
120
|
+
interface FlagPreset<TResolved extends Record<string, unknown>> {
|
|
121
|
+
/** Unique identifier for deduplication in composePresets */
|
|
122
|
+
readonly id: string;
|
|
123
|
+
/** Commander option definitions */
|
|
124
|
+
readonly options: readonly ActionCliOption[];
|
|
125
|
+
/** Resolve raw Commander flags into typed values */
|
|
126
|
+
readonly resolve: (flags: Record<string, unknown>) => TResolved;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Configuration for creating a flag preset.
|
|
130
|
+
*/
|
|
131
|
+
interface FlagPresetConfig<TResolved extends Record<string, unknown>> {
|
|
132
|
+
/** Unique identifier for deduplication */
|
|
133
|
+
readonly id: string;
|
|
134
|
+
/** Commander option definitions */
|
|
135
|
+
readonly options: readonly ActionCliOption[];
|
|
136
|
+
/** Resolve raw Commander flags into typed values */
|
|
137
|
+
readonly resolve: (flags: Record<string, unknown>) => TResolved;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Result of composing multiple presets together.
|
|
141
|
+
* Options are deduplicated by preset id (first wins).
|
|
142
|
+
*/
|
|
143
|
+
type ComposedPreset<TResolved extends Record<string, unknown>> = FlagPreset<TResolved>;
|
|
144
|
+
/**
|
|
145
|
+
* Configuration for the pagination flag preset.
|
|
146
|
+
*/
|
|
147
|
+
interface PaginationPresetConfig {
|
|
148
|
+
/** Default limit when not specified (default: 20) */
|
|
149
|
+
readonly defaultLimit?: number;
|
|
150
|
+
/** Maximum allowed limit (default: 100) */
|
|
151
|
+
readonly maxLimit?: number;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Resolved interaction flags from CLI input.
|
|
155
|
+
*/
|
|
156
|
+
type InteractionFlags = {
|
|
157
|
+
/** Whether interactive prompts are allowed */
|
|
158
|
+
readonly interactive: boolean;
|
|
159
|
+
/** Whether to auto-confirm prompts */
|
|
160
|
+
readonly yes: boolean;
|
|
161
|
+
};
|
|
162
|
+
/**
|
|
163
|
+
* Resolved strict mode flags from CLI input.
|
|
164
|
+
*/
|
|
165
|
+
type StrictFlags = {
|
|
166
|
+
/** Whether strict mode is enabled */
|
|
167
|
+
readonly strict: boolean;
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* Resolved time-window flags from CLI input.
|
|
171
|
+
*/
|
|
172
|
+
type TimeWindowFlags = {
|
|
173
|
+
/** Start of time window */
|
|
174
|
+
readonly since: Date | undefined;
|
|
175
|
+
/** End of time window */
|
|
176
|
+
readonly until: Date | undefined;
|
|
177
|
+
};
|
|
178
|
+
/**
|
|
179
|
+
* Configuration for the time-window flag preset.
|
|
180
|
+
*/
|
|
181
|
+
interface TimeWindowPresetConfig {
|
|
182
|
+
/** Maximum range in milliseconds between since and until (optional guard) */
|
|
183
|
+
readonly maxRange?: number;
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Resolved execution flags from CLI input.
|
|
187
|
+
*/
|
|
188
|
+
type ExecutionFlags = {
|
|
189
|
+
/** Timeout in milliseconds (undefined = no timeout) */
|
|
190
|
+
readonly timeout: number | undefined;
|
|
191
|
+
/** Number of retries */
|
|
192
|
+
readonly retries: number;
|
|
193
|
+
/** Whether to operate in offline mode */
|
|
194
|
+
readonly offline: boolean;
|
|
195
|
+
};
|
|
196
|
+
/**
|
|
197
|
+
* Configuration for the execution flag preset.
|
|
198
|
+
*/
|
|
199
|
+
interface ExecutionPresetConfig {
|
|
200
|
+
/** Default timeout in milliseconds (default: undefined) */
|
|
201
|
+
readonly defaultTimeout?: number;
|
|
202
|
+
/** Default number of retries (default: 0) */
|
|
203
|
+
readonly defaultRetries?: number;
|
|
204
|
+
/** Maximum number of retries (default: 10) */
|
|
205
|
+
readonly maxRetries?: number;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Resolved projection flags from CLI input.
|
|
209
|
+
*/
|
|
210
|
+
type ProjectionFlags = {
|
|
211
|
+
/** Fields to include (undefined = all) */
|
|
212
|
+
readonly fields: string[] | undefined;
|
|
213
|
+
/** Fields to exclude (undefined = none) */
|
|
214
|
+
readonly excludeFields: string[] | undefined;
|
|
215
|
+
/** Whether to output only the count of results */
|
|
216
|
+
readonly count: boolean;
|
|
217
|
+
};
|
|
218
|
+
/**
|
|
219
|
+
* Color mode for CLI output.
|
|
220
|
+
*/
|
|
221
|
+
type ColorMode = "auto" | "always" | "never";
|
|
222
|
+
/**
|
|
223
|
+
* Resolved color flags from CLI input.
|
|
224
|
+
*/
|
|
225
|
+
type ColorFlags = {
|
|
226
|
+
/** Color output mode */
|
|
227
|
+
readonly color: ColorMode;
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Resolved pagination flags from CLI input.
|
|
231
|
+
*/
|
|
232
|
+
type PaginationFlags = {
|
|
233
|
+
/** Number of results to return */
|
|
234
|
+
readonly limit: number;
|
|
235
|
+
/** Continue from last position */
|
|
236
|
+
readonly next: boolean;
|
|
237
|
+
/** Clear saved cursor and start fresh */
|
|
238
|
+
readonly reset: boolean;
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
88
241
|
* Available output modes for CLI commands.
|
|
89
242
|
*/
|
|
90
243
|
type OutputMode = "human" | "json" | "jsonl" | "tree" | "table";
|
|
@@ -164,17 +317,6 @@ interface NormalizeIdOptions {
|
|
|
164
317
|
readonly pattern?: RegExp;
|
|
165
318
|
}
|
|
166
319
|
/**
|
|
167
|
-
* Options for confirmDestructive().
|
|
168
|
-
*/
|
|
169
|
-
interface ConfirmDestructiveOptions {
|
|
170
|
-
/** Message to display to the user */
|
|
171
|
-
readonly message: string;
|
|
172
|
-
/** Whether to bypass confirmation (e.g., --yes flag) */
|
|
173
|
-
readonly bypassFlag?: boolean;
|
|
174
|
-
/** Number of items affected (shown in confirmation) */
|
|
175
|
-
readonly itemCount?: number;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
320
|
* Numeric or date range parsed from CLI input.
|
|
179
321
|
*/
|
|
180
322
|
type Range = NumericRange | DateRange;
|
|
@@ -250,4 +392,4 @@ interface CursorOptions {
|
|
|
250
392
|
/** Total count of results (if known) */
|
|
251
393
|
readonly total?: number;
|
|
252
394
|
}
|
|
253
|
-
export { CLIConfig, CLI, CommandConfig, CommandAction, CommandFlags, CommandBuilder, OutputMode, OutputOptions, CollectIdsOptions, ExpandFileOptions, ParseGlobOptions, NormalizeIdOptions,
|
|
395
|
+
export { CLIConfig, CLI, CommandConfig, CommandAction, CommandFlags, CommandBuilder, VerbFamily, VerbConfig, FlagPreset, FlagPresetConfig, ComposedPreset, PaginationPresetConfig, InteractionFlags, StrictFlags, TimeWindowFlags, TimeWindowPresetConfig, ExecutionFlags, ExecutionPresetConfig, ProjectionFlags, ColorMode, ColorFlags, PaginationFlags, OutputMode, OutputOptions, CollectIdsOptions, ExpandFileOptions, ParseGlobOptions, NormalizeIdOptions, Range, NumericRange, DateRange, FilterExpression, SortCriteria, KeyValuePair, PaginationState, CursorOptions, CancelledError, ErrorCategory, ValidationError, Result };
|