@procedures/cli-kit 0.0.0-stage → 0.35.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/CHANGELOG.md +20 -0
- package/LICENSE +21 -0
- package/README.md +62 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/args.d.ts +109 -0
- package/dist/args.d.ts.map +1 -0
- package/dist/args.js +399 -0
- package/dist/args.js.map +1 -0
- package/dist/ask.d.ts +49 -0
- package/dist/ask.d.ts.map +1 -0
- package/dist/ask.js +94 -0
- package/dist/ask.js.map +1 -0
- package/dist/cli.d.ts +117 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +253 -0
- package/dist/cli.js.map +1 -0
- package/dist/failure.d.ts +16 -0
- package/dist/failure.d.ts.map +1 -0
- package/dist/failure.js +47 -0
- package/dist/failure.js.map +1 -0
- package/dist/fields.d.ts +125 -0
- package/dist/fields.d.ts.map +1 -0
- package/dist/fields.js +339 -0
- package/dist/fields.js.map +1 -0
- package/dist/format.d.ts +35 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +145 -0
- package/dist/format.js.map +1 -0
- package/dist/help.d.ts +42 -0
- package/dist/help.d.ts.map +1 -0
- package/dist/help.js +188 -0
- package/dist/help.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/package.json +65 -3
- package/src/args.ts +511 -0
- package/src/ask.ts +119 -0
- package/src/cli.ts +360 -0
- package/src/failure.ts +47 -0
- package/src/fields.ts +454 -0
- package/src/format.ts +196 -0
- package/src/help.ts +241 -0
- package/src/index.ts +71 -0
package/dist/fields.js
ADDED
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fields of a procedure input, as a command line sees them.
|
|
3
|
+
*
|
|
4
|
+
* This module reads the field types of an input schema from its JSON Schema, converts the text of
|
|
5
|
+
* the command line to those types, and merges repeated values. The schema validates the result.
|
|
6
|
+
*/
|
|
7
|
+
import { jsonSchemaOf } from "@procedures/client";
|
|
8
|
+
/** True for the JSON Schema of `null` (a nullable field is `anyOf: [T, null]`). */
|
|
9
|
+
function isNull(node) {
|
|
10
|
+
return node.type === "null" || (node.const === null && node.type === undefined);
|
|
11
|
+
}
|
|
12
|
+
/** The members of a union, without `null` (a nullable value is the type itself on the CLI). */
|
|
13
|
+
function unionMembers(node) {
|
|
14
|
+
const members = node.anyOf ?? node.oneOf;
|
|
15
|
+
return members?.filter((member) => !isNull(member));
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The CLI type of a JSON Schema node.
|
|
19
|
+
*/
|
|
20
|
+
function fieldTypeOfJson(node) {
|
|
21
|
+
if (!node || typeof node !== "object") {
|
|
22
|
+
return { kind: "any" };
|
|
23
|
+
}
|
|
24
|
+
const members = unionMembers(node);
|
|
25
|
+
if (members) {
|
|
26
|
+
if (members.length === 1)
|
|
27
|
+
return fieldTypeOfJson(members[0]);
|
|
28
|
+
// A union of string constants is an enum on the CLI
|
|
29
|
+
if (members.length > 1 && members.every((member) => typeof member.const === "string")) {
|
|
30
|
+
return { kind: "enum", values: members.map((member) => member.const) };
|
|
31
|
+
}
|
|
32
|
+
return { kind: "union", options: members.map((member) => fieldTypeOfJson(member)) };
|
|
33
|
+
}
|
|
34
|
+
if (node.allOf?.length === 1) {
|
|
35
|
+
return fieldTypeOfJson(node.allOf[0]);
|
|
36
|
+
}
|
|
37
|
+
if (Array.isArray(node.enum)) {
|
|
38
|
+
return node.enum.every((value) => typeof value === "string")
|
|
39
|
+
? { kind: "enum", values: node.enum }
|
|
40
|
+
: { kind: "any" };
|
|
41
|
+
}
|
|
42
|
+
if ("const" in node && node.const !== undefined) {
|
|
43
|
+
return { kind: "literal", literal: node.const };
|
|
44
|
+
}
|
|
45
|
+
const types = Array.isArray(node.type) ? node.type.filter((type) => type !== "null") : node.type ? [node.type] : [];
|
|
46
|
+
if (types.length > 1) {
|
|
47
|
+
return { kind: "union", options: types.map((type) => fieldTypeOfJson({ ...node, type })) };
|
|
48
|
+
}
|
|
49
|
+
switch (types[0]) {
|
|
50
|
+
case "string":
|
|
51
|
+
return node.format === "date-time" || node.format === "date" ? { kind: "date" } : { kind: "string" };
|
|
52
|
+
case "number":
|
|
53
|
+
case "integer":
|
|
54
|
+
return { kind: "number" };
|
|
55
|
+
case "boolean":
|
|
56
|
+
return { kind: "boolean" };
|
|
57
|
+
case "array":
|
|
58
|
+
return { kind: "array", item: fieldTypeOfJson(Array.isArray(node.items) ? undefined : node.items) };
|
|
59
|
+
case "object": {
|
|
60
|
+
const extra = node.additionalProperties;
|
|
61
|
+
const hasFields = node.properties && Object.keys(node.properties).length > 0;
|
|
62
|
+
if (!hasFields && extra && typeof extra === "object") {
|
|
63
|
+
return { kind: "record", value: fieldTypeOfJson(extra) };
|
|
64
|
+
}
|
|
65
|
+
return { kind: "object" };
|
|
66
|
+
}
|
|
67
|
+
default:
|
|
68
|
+
return { kind: "any" };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* The JSON Schema of a procedure schema (or a JSON Schema itself, as the manifest stores it).
|
|
73
|
+
*/
|
|
74
|
+
function asJsonSchema(schema) {
|
|
75
|
+
if (!schema || typeof schema !== "object") {
|
|
76
|
+
return undefined;
|
|
77
|
+
}
|
|
78
|
+
// A JSON Schema already (from the manifest): it has no validator
|
|
79
|
+
const props = schema;
|
|
80
|
+
if (!("~standard" in props) && typeof props["safeParse"] !== "function" && typeof props["parse"] !== "function") {
|
|
81
|
+
return schema;
|
|
82
|
+
}
|
|
83
|
+
return jsonSchemaOf(schema);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The CLI type of a schema: a procedure schema (a Standard Schema such as zod 4) or its JSON
|
|
87
|
+
* Schema. The type comes from the JSON Schema, so every schema library works. (Before, the
|
|
88
|
+
* parser read the private fields of zod 3.)
|
|
89
|
+
*/
|
|
90
|
+
export function fieldTypeOf(schema) {
|
|
91
|
+
return fieldTypeOfJson(asJsonSchema(schema));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The display name of a type, for the help text
|
|
95
|
+
*/
|
|
96
|
+
export function typeName(type) {
|
|
97
|
+
switch (type.kind) {
|
|
98
|
+
case "array":
|
|
99
|
+
return `${typeName(type.item ?? { kind: "any" })}[]`;
|
|
100
|
+
case "record":
|
|
101
|
+
return "key=value";
|
|
102
|
+
case "object":
|
|
103
|
+
case "any":
|
|
104
|
+
return "json";
|
|
105
|
+
case "union":
|
|
106
|
+
return (type.options ?? []).map(typeName).join("|");
|
|
107
|
+
case "literal":
|
|
108
|
+
return JSON.stringify(type.literal);
|
|
109
|
+
default:
|
|
110
|
+
return type.kind;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Extract field information from a schema: a procedure schema or its JSON Schema. A schema that
|
|
115
|
+
* is not an object (or that has no JSON Schema) gives no fields: the CLI then passes its flags
|
|
116
|
+
* through.
|
|
117
|
+
*/
|
|
118
|
+
export function extractSchemaFields(schema) {
|
|
119
|
+
const json = asJsonSchema(schema);
|
|
120
|
+
const object = json && !json.properties ? unionMembers(json)?.find((member) => member.properties) : json;
|
|
121
|
+
if (!object?.properties) {
|
|
122
|
+
return [];
|
|
123
|
+
}
|
|
124
|
+
const required = new Set(object.required ?? []);
|
|
125
|
+
const fields = [];
|
|
126
|
+
for (const [name, field] of Object.entries(object.properties)) {
|
|
127
|
+
if (!field || typeof field !== "object") {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const fieldType = fieldTypeOfJson(field);
|
|
131
|
+
const description = field.description ?? unionMembers(field)?.find((member) => member.description)?.description;
|
|
132
|
+
fields.push({
|
|
133
|
+
name,
|
|
134
|
+
type: fieldType.kind === "enum" ? "enum" : typeName(fieldType),
|
|
135
|
+
fieldType,
|
|
136
|
+
required: required.has(name) && field.default === undefined,
|
|
137
|
+
description,
|
|
138
|
+
defaultValue: field.default,
|
|
139
|
+
enumValues: fieldType.kind === "enum" ? fieldType.values : undefined,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return fields;
|
|
143
|
+
}
|
|
144
|
+
// The digits before the point and the digits after it are two groups, so each text has one match
|
|
145
|
+
const NUMBER_TEXT = /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?$|^0[xX][0-9a-fA-F]+$/;
|
|
146
|
+
const SAFE_INTEGER_LIMIT = BigInt(Number.MAX_SAFE_INTEGER);
|
|
147
|
+
/**
|
|
148
|
+
* Text as a JSON value, when it is JSON. A whole number that a JavaScript number cannot hold
|
|
149
|
+
* exactly stays text. Anything that is not JSON stays text.
|
|
150
|
+
*/
|
|
151
|
+
function jsonOrText(text) {
|
|
152
|
+
const trimmed = text.trim();
|
|
153
|
+
if (/^-?\d+$/.test(trimmed)) {
|
|
154
|
+
const big = BigInt(trimmed);
|
|
155
|
+
if (big > SAFE_INTEGER_LIMIT || big < -SAFE_INTEGER_LIMIT) {
|
|
156
|
+
return text;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
return JSON.parse(trimmed);
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
return text;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Convert the CLI text of one value to a field type
|
|
168
|
+
*/
|
|
169
|
+
export function convertValue(text, type, label) {
|
|
170
|
+
switch (type.kind) {
|
|
171
|
+
case "string":
|
|
172
|
+
case "date":
|
|
173
|
+
return { ok: true, value: text };
|
|
174
|
+
case "enum":
|
|
175
|
+
return { ok: true, value: text };
|
|
176
|
+
case "number": {
|
|
177
|
+
if (!NUMBER_TEXT.test(text.trim())) {
|
|
178
|
+
return { ok: false, error: `${label} needs a number, not "${text}"` };
|
|
179
|
+
}
|
|
180
|
+
return { ok: true, value: Number(text) };
|
|
181
|
+
}
|
|
182
|
+
case "bigint":
|
|
183
|
+
try {
|
|
184
|
+
return { ok: true, value: BigInt(text) };
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return { ok: false, error: `${label} needs a whole number, not "${text}"` };
|
|
188
|
+
}
|
|
189
|
+
case "boolean":
|
|
190
|
+
if (text === "true")
|
|
191
|
+
return { ok: true, value: true };
|
|
192
|
+
if (text === "false")
|
|
193
|
+
return { ok: true, value: false };
|
|
194
|
+
return { ok: false, error: `${label} needs true or false, not "${text}"` };
|
|
195
|
+
case "literal": {
|
|
196
|
+
const literal = type.literal;
|
|
197
|
+
if (typeof literal === "number")
|
|
198
|
+
return convertValue(text, { kind: "number" }, label);
|
|
199
|
+
if (typeof literal === "boolean")
|
|
200
|
+
return convertValue(text, { kind: "boolean" }, label);
|
|
201
|
+
return { ok: true, value: text };
|
|
202
|
+
}
|
|
203
|
+
case "array": {
|
|
204
|
+
const item = type.item ?? { kind: "any" };
|
|
205
|
+
if (text.trimStart().startsWith("[")) {
|
|
206
|
+
const parsed = jsonOrText(text);
|
|
207
|
+
if (Array.isArray(parsed)) {
|
|
208
|
+
return { ok: true, value: parsed };
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
const converted = convertValue(text, item, label);
|
|
212
|
+
return converted.ok ? { ok: true, value: [converted.value] } : converted;
|
|
213
|
+
}
|
|
214
|
+
case "record": {
|
|
215
|
+
if (text.trimStart().startsWith("{")) {
|
|
216
|
+
const parsed = jsonOrText(text);
|
|
217
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
218
|
+
return { ok: true, value: parsed };
|
|
219
|
+
}
|
|
220
|
+
return { ok: false, error: `${label} needs key=value or a JSON object` };
|
|
221
|
+
}
|
|
222
|
+
const eq = text.indexOf("=");
|
|
223
|
+
if (eq <= 0) {
|
|
224
|
+
return { ok: false, error: `${label} needs key=value, not "${text}"` };
|
|
225
|
+
}
|
|
226
|
+
const converted = convertValue(text.slice(eq + 1), type.value ?? { kind: "any" }, label);
|
|
227
|
+
return converted.ok ? { ok: true, value: { [text.slice(0, eq)]: converted.value } } : converted;
|
|
228
|
+
}
|
|
229
|
+
case "object": {
|
|
230
|
+
const parsed = jsonOrText(text);
|
|
231
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
232
|
+
return { ok: true, value: parsed };
|
|
233
|
+
}
|
|
234
|
+
return { ok: false, error: `${label} needs a JSON object, not "${text}"` };
|
|
235
|
+
}
|
|
236
|
+
case "union": {
|
|
237
|
+
const options = type.options ?? [];
|
|
238
|
+
// Zod tries the members in order: a member that takes text takes the text as it is
|
|
239
|
+
for (const option of options) {
|
|
240
|
+
if (option.kind === "string" || option.kind === "date")
|
|
241
|
+
return { ok: true, value: text };
|
|
242
|
+
if (option.kind === "enum" && option.values?.includes(text))
|
|
243
|
+
return { ok: true, value: text };
|
|
244
|
+
if (option.kind === "literal" && String(option.literal) === text) {
|
|
245
|
+
return { ok: true, value: option.literal };
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
for (const option of options) {
|
|
249
|
+
if (option.kind === "enum" || option.kind === "literal")
|
|
250
|
+
continue;
|
|
251
|
+
const converted = convertValue(text, option, label);
|
|
252
|
+
if (converted.ok)
|
|
253
|
+
return converted;
|
|
254
|
+
}
|
|
255
|
+
return { ok: true, value: jsonOrText(text) };
|
|
256
|
+
}
|
|
257
|
+
case "any":
|
|
258
|
+
default:
|
|
259
|
+
return { ok: true, value: jsonOrText(text) };
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Add a converted value to a field that already has one. Arrays collect and records merge,
|
|
264
|
+
* so a repeated flag adds to the field. Other fields take the last value.
|
|
265
|
+
*/
|
|
266
|
+
export function mergeValue(previous, next, type) {
|
|
267
|
+
if (previous === undefined) {
|
|
268
|
+
return next;
|
|
269
|
+
}
|
|
270
|
+
if (type.kind === "array" && Array.isArray(previous) && Array.isArray(next)) {
|
|
271
|
+
return [...previous, ...next];
|
|
272
|
+
}
|
|
273
|
+
if (type.kind === "record" &&
|
|
274
|
+
previous && typeof previous === "object" && !Array.isArray(previous) &&
|
|
275
|
+
next && typeof next === "object" && !Array.isArray(next)) {
|
|
276
|
+
return { ...previous, ...next };
|
|
277
|
+
}
|
|
278
|
+
return next;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Convert camelCase to kebab-case
|
|
282
|
+
*/
|
|
283
|
+
export function toKebab(str) {
|
|
284
|
+
return str.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Convert kebab-case to camelCase
|
|
288
|
+
*/
|
|
289
|
+
export function toCamel(str) {
|
|
290
|
+
return str.replace(/-([a-zA-Z0-9])/g, (_, c) => c.toUpperCase());
|
|
291
|
+
}
|
|
292
|
+
/** This function gives the fields of the input of a command: from its description, or read from its schema. */
|
|
293
|
+
export function fieldsOf(command) {
|
|
294
|
+
return command.fields ? [...command.fields] : extractSchemaFields(command.input);
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* The fields of the result of a procedure, from its output schema: only for a result that is an
|
|
298
|
+
* object (a union, a stream item or a pass-through schema gives none).
|
|
299
|
+
*/
|
|
300
|
+
export function resultFieldsOfSchema(output) {
|
|
301
|
+
const json = output ? jsonSchemaOf(output, { io: "output" }) : undefined;
|
|
302
|
+
if (!json)
|
|
303
|
+
return [];
|
|
304
|
+
if (json.type === "object")
|
|
305
|
+
return extractSchemaFields(json);
|
|
306
|
+
// A number, a string, a boolean or an array: the help shows the one value
|
|
307
|
+
if (typeof json.type === "string" && ["number", "integer", "string", "boolean", "array"].includes(json.type)) {
|
|
308
|
+
const fieldType = fieldTypeOfJson(json);
|
|
309
|
+
return [
|
|
310
|
+
{
|
|
311
|
+
name: "value",
|
|
312
|
+
type: typeName(fieldType),
|
|
313
|
+
fieldType,
|
|
314
|
+
required: true,
|
|
315
|
+
description: json.description,
|
|
316
|
+
defaultValue: undefined,
|
|
317
|
+
enumValues: undefined,
|
|
318
|
+
},
|
|
319
|
+
];
|
|
320
|
+
}
|
|
321
|
+
return [];
|
|
322
|
+
}
|
|
323
|
+
/** This function gives the fields of the result of a command: from its description, or read from its output schema. */
|
|
324
|
+
export function resultFieldsOf(command) {
|
|
325
|
+
return command.resultFields ? [...command.resultFields] : resultFieldsOfSchema(command.output);
|
|
326
|
+
}
|
|
327
|
+
/** A field that only the metadata names (the schema has no readable shape) */
|
|
328
|
+
export function fieldWithoutSchema(name) {
|
|
329
|
+
return {
|
|
330
|
+
name,
|
|
331
|
+
type: "json",
|
|
332
|
+
fieldType: { kind: "any" },
|
|
333
|
+
required: false,
|
|
334
|
+
description: undefined,
|
|
335
|
+
defaultValue: undefined,
|
|
336
|
+
enumValues: undefined,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"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"}
|
package/dist/format.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output Formatting
|
|
3
|
+
*
|
|
4
|
+
* Formats procedure results for CLI output based on metadata hints.
|
|
5
|
+
*/
|
|
6
|
+
export type OutputFormat = "text" | "json" | "table" | "streaming";
|
|
7
|
+
/**
|
|
8
|
+
* Print interface (used by formatOutput)
|
|
9
|
+
*/
|
|
10
|
+
export interface Print {
|
|
11
|
+
info: (message: string) => void;
|
|
12
|
+
error: (message: string) => void;
|
|
13
|
+
success: (message: string) => void;
|
|
14
|
+
warning: (message: string) => void;
|
|
15
|
+
table: (data: string[][], options?: {
|
|
16
|
+
format?: string;
|
|
17
|
+
}) => void;
|
|
18
|
+
spin: (message: string) => Spinner;
|
|
19
|
+
}
|
|
20
|
+
export interface Spinner {
|
|
21
|
+
stop: () => void;
|
|
22
|
+
succeed: (message?: string) => void;
|
|
23
|
+
fail: (message?: string) => void;
|
|
24
|
+
text: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Format and print the result based on output format hint
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatOutput(print: Print, result: unknown, format?: OutputFormat): void;
|
|
30
|
+
/**
|
|
31
|
+
* This function gives a `Print` that writes plain text to the console: messages to stdout,
|
|
32
|
+
* errors to stderr, a table as columns. Its spinner shows nothing.
|
|
33
|
+
*/
|
|
34
|
+
export declare function plainPrint(): Print;
|
|
35
|
+
//# sourceMappingURL=format.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACjE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC;CACpC;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,OAAO,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,OAAO,EACf,MAAM,GAAE,YAAqB,GAC5B,IAAI,CAoBN;AA4HD;;;GAGG;AACH,wBAAgB,UAAU,IAAI,KAAK,CAalC"}
|
package/dist/format.js
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Output Formatting
|
|
3
|
+
*
|
|
4
|
+
* Formats procedure results for CLI output based on metadata hints.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Format and print the result based on output format hint
|
|
8
|
+
*/
|
|
9
|
+
export function formatOutput(print, result, format = "text") {
|
|
10
|
+
if (result === undefined || result === null) {
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
switch (format) {
|
|
14
|
+
case "json":
|
|
15
|
+
print.info(JSON.stringify(result, null, 2));
|
|
16
|
+
break;
|
|
17
|
+
case "table":
|
|
18
|
+
formatTable(print, result);
|
|
19
|
+
break;
|
|
20
|
+
case "text":
|
|
21
|
+
case "streaming":
|
|
22
|
+
default:
|
|
23
|
+
formatText(print, result);
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Format as text - handles common result shapes
|
|
29
|
+
*/
|
|
30
|
+
function formatText(print, result) {
|
|
31
|
+
// String output
|
|
32
|
+
if (typeof result === "string") {
|
|
33
|
+
print.info(result);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
// Result with output field (common pattern)
|
|
37
|
+
if (isObjectWithOutput(result)) {
|
|
38
|
+
print.info(result.output);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// Result with message field
|
|
42
|
+
if (isObjectWithMessage(result)) {
|
|
43
|
+
if (result.success === false) {
|
|
44
|
+
print.error(result.message);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
print.success(result.message);
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Result with error field
|
|
52
|
+
if (isObjectWithError(result)) {
|
|
53
|
+
print.error(result.error);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// Array of items
|
|
57
|
+
if (Array.isArray(result)) {
|
|
58
|
+
for (const item of result) {
|
|
59
|
+
formatText(print, item);
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
// Fallback to JSON
|
|
64
|
+
print.info(JSON.stringify(result, null, 2));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Format as table - handles arrays of objects
|
|
68
|
+
*/
|
|
69
|
+
function formatTable(print, result) {
|
|
70
|
+
// Result with rows/headers
|
|
71
|
+
if (isTableResult(result)) {
|
|
72
|
+
const headers = result.headers ?? Object.keys(result.rows[0] ?? {});
|
|
73
|
+
const data = [headers];
|
|
74
|
+
for (const row of result.rows) {
|
|
75
|
+
if (Array.isArray(row)) {
|
|
76
|
+
data.push(row.map(String));
|
|
77
|
+
}
|
|
78
|
+
else if (typeof row === "object" && row !== null) {
|
|
79
|
+
data.push(headers.map((h) => String(row[h] ?? "")));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
print.table(data);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
// Plain array of objects
|
|
86
|
+
if (Array.isArray(result) && result.length > 0 && typeof result[0] === "object") {
|
|
87
|
+
const headers = Object.keys(result[0]);
|
|
88
|
+
const data = [headers];
|
|
89
|
+
for (const row of result) {
|
|
90
|
+
if (typeof row === "object" && row !== null) {
|
|
91
|
+
data.push(headers.map((h) => String(row[h] ?? "")));
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
print.table(data);
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
// Fallback to text
|
|
98
|
+
formatText(print, result);
|
|
99
|
+
}
|
|
100
|
+
// Type guards
|
|
101
|
+
function isObjectWithOutput(val) {
|
|
102
|
+
return (typeof val === "object" &&
|
|
103
|
+
val !== null &&
|
|
104
|
+
"output" in val &&
|
|
105
|
+
typeof val.output === "string");
|
|
106
|
+
}
|
|
107
|
+
function isObjectWithMessage(val) {
|
|
108
|
+
return (typeof val === "object" &&
|
|
109
|
+
val !== null &&
|
|
110
|
+
"message" in val &&
|
|
111
|
+
typeof val.message === "string");
|
|
112
|
+
}
|
|
113
|
+
function isObjectWithError(val) {
|
|
114
|
+
return (typeof val === "object" &&
|
|
115
|
+
val !== null &&
|
|
116
|
+
"error" in val &&
|
|
117
|
+
typeof val.error === "string");
|
|
118
|
+
}
|
|
119
|
+
function isTableResult(val) {
|
|
120
|
+
return (typeof val === "object" &&
|
|
121
|
+
val !== null &&
|
|
122
|
+
"rows" in val &&
|
|
123
|
+
Array.isArray(val.rows));
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* This function gives a `Print` that writes plain text to the console: messages to stdout,
|
|
127
|
+
* errors to stderr, a table as columns. Its spinner shows nothing.
|
|
128
|
+
*/
|
|
129
|
+
export function plainPrint() {
|
|
130
|
+
return {
|
|
131
|
+
info: (message) => console.log(message),
|
|
132
|
+
error: (message) => console.error(message),
|
|
133
|
+
success: (message) => console.log(message),
|
|
134
|
+
warning: (message) => console.error(message),
|
|
135
|
+
table: (data) => {
|
|
136
|
+
const widths = [];
|
|
137
|
+
for (const row of data)
|
|
138
|
+
row.forEach((cell, i) => (widths[i] = Math.max(widths[i] ?? 0, cell.length)));
|
|
139
|
+
for (const row of data)
|
|
140
|
+
console.log(row.map((cell, i) => cell.padEnd(widths[i] ?? 0)).join(" ").trimEnd());
|
|
141
|
+
},
|
|
142
|
+
spin: (message) => ({ stop: () => { }, succeed: () => { }, fail: () => { }, text: message }),
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=format.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
package/dist/help.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The help text of a command line: the help of one command, of a group of commands and of the
|
|
3
|
+
* whole program.
|
|
4
|
+
*
|
|
5
|
+
* Each function gives the text and prints nothing. The caller prints it.
|
|
6
|
+
*/
|
|
7
|
+
import type { GlobalFlag } from "./args.js";
|
|
8
|
+
import { type CLIMeta, type CommandLike, type SchemaFieldInfo } from "./fields.js";
|
|
9
|
+
/** The options of the help text. */
|
|
10
|
+
export interface HelpOptions {
|
|
11
|
+
/** The name of the program, as a person types it, for example `mark`. */
|
|
12
|
+
name: string;
|
|
13
|
+
/** The global flags that the help lists. The help lists each flag that is not `hidden`. */
|
|
14
|
+
globals?: readonly GlobalFlag[] | undefined;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* This function gives the help text of one command. `schema` is the input schema, or the fields
|
|
18
|
+
* of the input. `result` gives the fields of the result. The help lists them after the options.
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateHelp(path: readonly string[], meta: CLIMeta, schema: unknown, result: readonly SchemaFieldInfo[], options: HelpOptions): string;
|
|
21
|
+
/**
|
|
22
|
+
* This function gives the help of a group of commands: one message for each line. It gives
|
|
23
|
+
* undefined when no command is in the group. A message can contain a line break.
|
|
24
|
+
*/
|
|
25
|
+
export declare function groupHelp(name: string, commands: readonly CommandLike[], path: readonly string[]): string[] | undefined;
|
|
26
|
+
/** The options of the help of the whole program. */
|
|
27
|
+
export interface RootHelpOptions {
|
|
28
|
+
/** The name of the program. */
|
|
29
|
+
name: string;
|
|
30
|
+
/** The first line of the help. The default is the name. */
|
|
31
|
+
title?: string | undefined;
|
|
32
|
+
/** The lines after the list of the commands. */
|
|
33
|
+
footer?: readonly string[] | undefined;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* This function gives the help of the whole program: the commands by their first word. It gives
|
|
37
|
+
* one message for each line. A message can contain a line break.
|
|
38
|
+
*/
|
|
39
|
+
export declare function rootHelp(commands: readonly CommandLike[], options: RootHelpOptions): string[];
|
|
40
|
+
/** This function gives the message of a validation error: one line for each issue of a Zod error. */
|
|
41
|
+
export declare function validationMessage(error: unknown): string;
|
|
42
|
+
//# sourceMappingURL=help.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAKL,KAAK,OAAO,EACZ,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,oCAAoC;AACpC,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,2FAA2F;IAC3F,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,CAAC;CAC7C;AAsBD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,OAAO,EAAE,WAAW,GACnB,MAAM,CAiGR;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,CA6BvH;AAED,oDAAoD;AACpD,MAAM,WAAW,eAAe;IAC9B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,gDAAgD;IAChD,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACxC;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,MAAM,EAAE,CAwB7F;AAED,qGAAqG;AACrG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQxD"}
|