@nocobase/app-cli-client 0.0.0-stage → 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (178) hide show
  1. package/README.md +24 -2
  2. package/dist/brand.d.ts +52 -0
  3. package/dist/brand.d.ts.map +1 -0
  4. package/dist/brand.js +61 -0
  5. package/dist/brand.js.map +1 -0
  6. package/dist/commands.d.ts +9 -0
  7. package/dist/commands.d.ts.map +1 -0
  8. package/dist/commands.js +30 -0
  9. package/dist/commands.js.map +1 -0
  10. package/dist/completion.d.ts +13 -0
  11. package/dist/completion.d.ts.map +1 -0
  12. package/dist/completion.js +157 -0
  13. package/dist/completion.js.map +1 -0
  14. package/dist/config.d.ts +100 -0
  15. package/dist/config.d.ts.map +1 -0
  16. package/dist/config.js +43 -0
  17. package/dist/config.js.map +1 -0
  18. package/dist/docs.d.ts +9 -0
  19. package/dist/docs.d.ts.map +1 -0
  20. package/dist/docs.js +146 -0
  21. package/dist/docs.js.map +1 -0
  22. package/dist/dynamic/execute.d.ts +24 -0
  23. package/dist/dynamic/execute.d.ts.map +1 -0
  24. package/dist/dynamic/execute.js +125 -0
  25. package/dist/dynamic/execute.js.map +1 -0
  26. package/dist/dynamic/files.d.ts +21 -0
  27. package/dist/dynamic/files.d.ts.map +1 -0
  28. package/dist/dynamic/files.js +79 -0
  29. package/dist/dynamic/files.js.map +1 -0
  30. package/dist/dynamic/help.d.ts +6 -0
  31. package/dist/dynamic/help.d.ts.map +1 -0
  32. package/dist/dynamic/help.js +42 -0
  33. package/dist/dynamic/help.js.map +1 -0
  34. package/dist/dynamic/index.d.ts +34 -0
  35. package/dist/dynamic/index.d.ts.map +1 -0
  36. package/dist/dynamic/index.js +197 -0
  37. package/dist/dynamic/index.js.map +1 -0
  38. package/dist/dynamic/manifest.d.ts +21 -0
  39. package/dist/dynamic/manifest.d.ts.map +1 -0
  40. package/dist/dynamic/manifest.js +175 -0
  41. package/dist/dynamic/manifest.js.map +1 -0
  42. package/dist/dynamic/output.d.ts +14 -0
  43. package/dist/dynamic/output.d.ts.map +1 -0
  44. package/dist/dynamic/output.js +103 -0
  45. package/dist/dynamic/output.js.map +1 -0
  46. package/dist/dynamic/parse.d.ts +3 -0
  47. package/dist/dynamic/parse.d.ts.map +1 -0
  48. package/dist/dynamic/parse.js +13 -0
  49. package/dist/dynamic/parse.js.map +1 -0
  50. package/dist/dynamic/rest.d.ts +29 -0
  51. package/dist/dynamic/rest.d.ts.map +1 -0
  52. package/dist/dynamic/rest.js +212 -0
  53. package/dist/dynamic/rest.js.map +1 -0
  54. package/dist/dynamic/session.d.ts +20 -0
  55. package/dist/dynamic/session.d.ts.map +1 -0
  56. package/dist/dynamic/session.js +70 -0
  57. package/dist/dynamic/session.js.map +1 -0
  58. package/dist/dynamic/ticket.d.ts +13 -0
  59. package/dist/dynamic/ticket.d.ts.map +1 -0
  60. package/dist/dynamic/ticket.js +40 -0
  61. package/dist/dynamic/ticket.js.map +1 -0
  62. package/dist/hooks/command-not-found.d.ts +4 -0
  63. package/dist/hooks/command-not-found.d.ts.map +1 -0
  64. package/dist/hooks/command-not-found.js +6 -0
  65. package/dist/hooks/command-not-found.js.map +1 -0
  66. package/dist/index.d.ts +8 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +14 -0
  69. package/dist/index.js.map +1 -0
  70. package/dist/install.d.ts +72 -0
  71. package/dist/install.d.ts.map +1 -0
  72. package/dist/install.js +148 -0
  73. package/dist/install.js.map +1 -0
  74. package/dist/lib/command.d.ts +35 -0
  75. package/dist/lib/command.d.ts.map +1 -0
  76. package/dist/lib/command.js +97 -0
  77. package/dist/lib/command.js.map +1 -0
  78. package/dist/lib/credentials.d.ts +110 -0
  79. package/dist/lib/credentials.d.ts.map +1 -0
  80. package/dist/lib/credentials.js +330 -0
  81. package/dist/lib/credentials.js.map +1 -0
  82. package/dist/lib/device.d.ts +48 -0
  83. package/dist/lib/device.d.ts.map +1 -0
  84. package/dist/lib/device.js +189 -0
  85. package/dist/lib/device.js.map +1 -0
  86. package/dist/lib/envelope.d.ts +21 -0
  87. package/dist/lib/envelope.d.ts.map +1 -0
  88. package/dist/lib/envelope.js +87 -0
  89. package/dist/lib/envelope.js.map +1 -0
  90. package/dist/lib/files.d.ts +4 -0
  91. package/dist/lib/files.d.ts.map +1 -0
  92. package/dist/lib/files.js +23 -0
  93. package/dist/lib/files.js.map +1 -0
  94. package/dist/lib/globals.d.ts +25 -0
  95. package/dist/lib/globals.d.ts.map +1 -0
  96. package/dist/lib/globals.js +77 -0
  97. package/dist/lib/globals.js.map +1 -0
  98. package/dist/lib/http.d.ts +45 -0
  99. package/dist/lib/http.d.ts.map +1 -0
  100. package/dist/lib/http.js +141 -0
  101. package/dist/lib/http.js.map +1 -0
  102. package/dist/lib/mime.d.ts +3 -0
  103. package/dist/lib/mime.d.ts.map +1 -0
  104. package/dist/lib/mime.js +38 -0
  105. package/dist/lib/mime.js.map +1 -0
  106. package/dist/lib/secrets/index.d.ts +18 -0
  107. package/dist/lib/secrets/index.d.ts.map +1 -0
  108. package/dist/lib/secrets/index.js +55 -0
  109. package/dist/lib/secrets/index.js.map +1 -0
  110. package/dist/lib/secrets/macos.d.ts +13 -0
  111. package/dist/lib/secrets/macos.d.ts.map +1 -0
  112. package/dist/lib/secrets/macos.js +61 -0
  113. package/dist/lib/secrets/macos.js.map +1 -0
  114. package/dist/lib/secrets/secret-service.d.ts +17 -0
  115. package/dist/lib/secrets/secret-service.d.ts.map +1 -0
  116. package/dist/lib/secrets/secret-service.js +81 -0
  117. package/dist/lib/secrets/secret-service.js.map +1 -0
  118. package/dist/lib/secrets/store.d.ts +28 -0
  119. package/dist/lib/secrets/store.d.ts.map +1 -0
  120. package/dist/lib/secrets/store.js +41 -0
  121. package/dist/lib/secrets/store.js.map +1 -0
  122. package/dist/lib/secrets/windows.d.ts +20 -0
  123. package/dist/lib/secrets/windows.d.ts.map +1 -0
  124. package/dist/lib/secrets/windows.js +155 -0
  125. package/dist/lib/secrets/windows.js.map +1 -0
  126. package/dist/lib/update-hint.d.ts +5 -0
  127. package/dist/lib/update-hint.d.ts.map +1 -0
  128. package/dist/lib/update-hint.js +26 -0
  129. package/dist/lib/update-hint.js.map +1 -0
  130. package/dist/login.d.ts +15 -0
  131. package/dist/login.d.ts.map +1 -0
  132. package/dist/login.js +232 -0
  133. package/dist/login.js.map +1 -0
  134. package/dist/logout.d.ts +13 -0
  135. package/dist/logout.d.ts.map +1 -0
  136. package/dist/logout.js +56 -0
  137. package/dist/logout.js.map +1 -0
  138. package/dist/parse/arguments.d.ts +84 -0
  139. package/dist/parse/arguments.d.ts.map +1 -0
  140. package/dist/parse/arguments.js +460 -0
  141. package/dist/parse/arguments.js.map +1 -0
  142. package/dist/parse/exit.d.ts +7 -0
  143. package/dist/parse/exit.d.ts.map +1 -0
  144. package/dist/parse/exit.js +24 -0
  145. package/dist/parse/exit.js.map +1 -0
  146. package/dist/parse/help.d.ts +22 -0
  147. package/dist/parse/help.d.ts.map +1 -0
  148. package/dist/parse/help.js +151 -0
  149. package/dist/parse/help.js.map +1 -0
  150. package/dist/parse/index.d.ts +5 -0
  151. package/dist/parse/index.d.ts.map +1 -0
  152. package/dist/parse/index.js +7 -0
  153. package/dist/parse/index.js.map +1 -0
  154. package/dist/parse/manifest.d.ts +97 -0
  155. package/dist/parse/manifest.d.ts.map +1 -0
  156. package/dist/parse/manifest.js +4 -0
  157. package/dist/parse/manifest.js.map +1 -0
  158. package/dist/profile.d.ts +4 -0
  159. package/dist/profile.d.ts.map +1 -0
  160. package/dist/profile.js +80 -0
  161. package/dist/profile.js.map +1 -0
  162. package/dist/request.d.ts +25 -0
  163. package/dist/request.d.ts.map +1 -0
  164. package/dist/request.js +35 -0
  165. package/dist/request.js.map +1 -0
  166. package/dist/run.d.ts +17 -0
  167. package/dist/run.d.ts.map +1 -0
  168. package/dist/run.js +88 -0
  169. package/dist/run.js.map +1 -0
  170. package/dist/update.d.ts +45 -0
  171. package/dist/update.d.ts.map +1 -0
  172. package/dist/update.js +177 -0
  173. package/dist/update.js.map +1 -0
  174. package/dist/whoami.d.ts +31 -0
  175. package/dist/whoami.d.ts.map +1 -0
  176. package/dist/whoami.js +118 -0
  177. package/dist/whoami.js.map +1 -0
  178. package/package.json +67 -3
@@ -0,0 +1,460 @@
1
+ // Reading a command line against a manifest command (`kind: 'rest'`): the words after the command are its positional
2
+ // parameters, in order, and its flags, each a path, query or body parameter, or a file to send.
3
+ //
4
+ // Flags: `--name value` or `--name=value`; a boolean is `--name` or `--no-name`; an array repeats; a `json` value is
5
+ // JSON text, or `key=value` repeated for an object. A parameter with `contentFile` also takes `--<name>-file <path>`,
6
+ // parsed as JSON for a `json` parameter. A command whose body may come from a file takes `--<body.file> <path.json>`,
7
+ // whose fields the flags then override. An upload parameter (`in: 'file'`) is `--<name> <path>`, repeated when it takes
8
+ // several files; a ticket parameter is `--<name> <path>`, one file; a changed-files parameter is the boolean `--<name>`;
9
+ // a binary body field takes a path. A `download` command takes `--out <path>`. A command with a `fromEnv` parameter
10
+ // takes `--from-env`, which fills it from the environment variable named by another parameter's value. A parameter with
11
+ // `env` defaults, left off the line, takes the first of them the environment has (`envDefaultOf`). `--json`, `--help`
12
+ // (`-h`) and `--yes` (`-y`) are read wherever they appear.
13
+ //
14
+ // It touches no file, environment or terminal itself: `CliParseIo` does, so the CLI on a machine and an online run's
15
+ // shell read a line the same way.
16
+ import { DOWNLOAD_OUT_FLAG, EXIT_CODES, } from '@nocobase/agent-protocol';
17
+ /** A line the command cannot take, with what the cli-envelope says of it. */
18
+ export class CliParseError extends Error {
19
+ code;
20
+ exit;
21
+ suggestions;
22
+ details;
23
+ constructor(code, message, options = {}) {
24
+ super(message);
25
+ this.name = 'CliParseError';
26
+ this.code = code;
27
+ this.exit = options.exit ?? EXIT_CODES.validation;
28
+ this.suggestions = options.suggestions ?? [];
29
+ this.details = options.details;
30
+ }
31
+ }
32
+ const invalid = (message) => new CliParseError('INVALID_USAGE', message);
33
+ /** A command's words, such as `issue comment add`. */
34
+ export function commandWords(command) {
35
+ return command.id.split(':').join(' ');
36
+ }
37
+ /** The parameters a person types without a flag, in order. */
38
+ export function positionalOf(command) {
39
+ return command.parameters
40
+ .filter((parameter) => parameter.position !== undefined)
41
+ .sort((a, b) => (a.position ?? 0) - (b.position ?? 0));
42
+ }
43
+ /** How a parameter is named on the line: `<issue>` or `--title`. */
44
+ export function parameterLabel(parameter) {
45
+ return parameter.position === undefined
46
+ ? `--${parameter.name}`
47
+ : `<${parameter.name}>`;
48
+ }
49
+ /** Whether running the command sends a file of the caller's, or saves one. */
50
+ export function needsLocalFiles(command) {
51
+ return (command.output.kind === 'download' ||
52
+ command.parameters.some((parameter) => (parameter.in === 'file' || parameter.binary === true) &&
53
+ parameter.required));
54
+ }
55
+ /** Whether a file name fits `accept` (extensions such as `.log`; media types are left to the server). */
56
+ export function accepts(accept, file) {
57
+ const extensions = accept.filter((entry) => entry.startsWith('.'));
58
+ if (extensions.length === 0 || extensions.length < accept.length)
59
+ return true;
60
+ return extensions.some((extension) => file.toLowerCase().endsWith(extension.toLowerCase()));
61
+ }
62
+ /** A dot-separated path into parsed JSON, as text when it ends at a string or a number. */
63
+ function fieldAt(value, path) {
64
+ let at = value;
65
+ for (const key of path.split('.')) {
66
+ if (!at || typeof at !== 'object' || Array.isArray(at))
67
+ return undefined;
68
+ at = at[key];
69
+ }
70
+ if (typeof at === 'number' && Number.isFinite(at))
71
+ return String(at);
72
+ return typeof at === 'string' ? at : undefined;
73
+ }
74
+ /**
75
+ * The first of `sources` the environment has: a variable that is set and not empty, or the field of the JSON file a
76
+ * variable names. Undefined when none is; an unreadable file or a missing field falls through to the next source.
77
+ */
78
+ export async function envDefaultOf(sources, io) {
79
+ for (const source of sources) {
80
+ if (typeof source === 'string') {
81
+ const value = io.env(source);
82
+ if (value)
83
+ return value;
84
+ continue;
85
+ }
86
+ const file = io.env(source.file);
87
+ if (!file)
88
+ continue;
89
+ const text = await io.readText(file);
90
+ if (text === undefined)
91
+ continue;
92
+ let parsed;
93
+ try {
94
+ parsed = JSON.parse(text);
95
+ }
96
+ catch {
97
+ continue;
98
+ }
99
+ const value = fieldAt(parsed, source.path);
100
+ if (value)
101
+ return value;
102
+ }
103
+ return undefined;
104
+ }
105
+ function scalar(parameter, raw) {
106
+ const label = parameterLabel(parameter);
107
+ switch (parameter.type) {
108
+ case 'number':
109
+ case 'integer':
110
+ case 'number[]': {
111
+ const value = Number(raw);
112
+ if (raw.trim() === '' || !Number.isFinite(value))
113
+ throw invalid(`${label} must be a number.`);
114
+ if (parameter.type === 'integer' && !Number.isInteger(value))
115
+ throw invalid(`${label} must be a whole number.`);
116
+ return value;
117
+ }
118
+ case 'boolean':
119
+ if (raw === 'true' || raw === 'false')
120
+ return raw === 'true';
121
+ throw invalid(`${label} must be true or false.`);
122
+ case 'json':
123
+ try {
124
+ return JSON.parse(raw);
125
+ }
126
+ catch {
127
+ return raw;
128
+ }
129
+ default:
130
+ if (parameter.enum && !parameter.enum.includes(raw))
131
+ throw invalid(`${label} must be one of ${parameter.enum.join(', ')}.`);
132
+ return raw;
133
+ }
134
+ }
135
+ /** Adds a typed value to what the parameter holds: arrays collect, a `json` object collects `key=value` pairs. */
136
+ function collect(parameter, previous, raw) {
137
+ if (parameter.type === 'string[]' || parameter.type === 'number[]')
138
+ return [
139
+ ...(previous ?? []),
140
+ scalar(parameter, raw),
141
+ ];
142
+ if (parameter.type === 'json') {
143
+ const at = raw.indexOf('=');
144
+ const parsed = scalar(parameter, raw);
145
+ if (typeof parsed === 'string' && at > 0)
146
+ return {
147
+ ...(previous && typeof previous === 'object' && !Array.isArray(previous)
148
+ ? previous
149
+ : {}),
150
+ [raw.slice(0, at)]: raw.slice(at + 1),
151
+ };
152
+ return parsed;
153
+ }
154
+ return scalar(parameter, raw);
155
+ }
156
+ /** A value a person can type at a prompt: not a file. */
157
+ const askable = (parameter) => parameter.in !== 'file' && !parameter.binary;
158
+ /** What a line without its required arguments is told, and how to see them all. */
159
+ export function missingArguments(bin, command, missing) {
160
+ const hint = (parameter) => {
161
+ if (parameter.ticket)
162
+ return `--${parameter.name} <file>`;
163
+ if (parameter.position !== undefined)
164
+ return `<${parameter.name}>`;
165
+ return parameter.contentFile
166
+ ? `--${parameter.name} (or --${parameter.name}-file <path>)`
167
+ : `--${parameter.name}`;
168
+ };
169
+ return new CliParseError('MISSING_ARGUMENT', `${bin} ${commandWords(command)} needs ${missing.map(hint).join(', ')}.`, {
170
+ suggestions: [
171
+ ...missing.map((parameter) => ({
172
+ message: `Pass ${hint(parameter)}${parameter.description ? `: ${parameter.description}` : '.'}`,
173
+ })),
174
+ {
175
+ message: 'See its arguments and flags.',
176
+ run: { command: bin, args: [...command.id.split(':'), '--help'] },
177
+ },
178
+ ],
179
+ details: { missing: missing.map((parameter) => parameter.name) },
180
+ });
181
+ }
182
+ /** Reads the rest of the line, after the command's words, against the command's parameters. */
183
+ export async function parseCommandLine(command, rest, options) {
184
+ const { bin, io } = options;
185
+ const values = new Map();
186
+ const uploads = new Map();
187
+ const contentFiles = new Map();
188
+ const positional = positionalOf(command);
189
+ const flags = new Map();
190
+ for (const parameter of command.parameters)
191
+ if (parameter.position === undefined) {
192
+ flags.set(parameter.name, parameter);
193
+ if (parameter.alias)
194
+ flags.set(parameter.alias, parameter);
195
+ }
196
+ const args = [];
197
+ let bodyPath;
198
+ let out;
199
+ let yes = options.yes ?? false;
200
+ let json = false;
201
+ let help = false;
202
+ const fileUploads = [];
203
+ const binaries = [];
204
+ let ticketPath;
205
+ let changedFlag;
206
+ const fromEnvTarget = command.parameters.find((parameter) => parameter.fromEnv !== undefined);
207
+ let fromEnv = false;
208
+ const unavailable = (name) => new CliParseError('FILES_UNAVAILABLE', `--${name} sends a file from this machine; there are no files to send here.`);
209
+ for (let index = 0; index < rest.length; index += 1) {
210
+ const word = rest[index];
211
+ if (word === '--') {
212
+ args.push(...rest.slice(index + 1));
213
+ break;
214
+ }
215
+ if (word === '--help' || word === '-h') {
216
+ help = true;
217
+ continue;
218
+ }
219
+ if (word === '--json') {
220
+ json = true;
221
+ continue;
222
+ }
223
+ if (word === '--yes' || word === '-y') {
224
+ yes = true;
225
+ continue;
226
+ }
227
+ if (word === '--from-env' && fromEnvTarget) {
228
+ fromEnv = true;
229
+ continue;
230
+ }
231
+ if (!word.startsWith('-') || word === '-') {
232
+ args.push(word);
233
+ continue;
234
+ }
235
+ const long = word.startsWith('--');
236
+ const equals = word.indexOf('=');
237
+ const name = word.slice(long ? 2 : 1, equals === -1 ? undefined : equals);
238
+ const inline = equals === -1 ? undefined : word.slice(equals + 1);
239
+ const value = () => {
240
+ if (inline !== undefined)
241
+ return inline;
242
+ const next = rest[index + 1];
243
+ if (next === undefined)
244
+ throw invalid(`--${name} needs a value.`);
245
+ index += 1;
246
+ return next;
247
+ };
248
+ const parameter = flags.get(name);
249
+ if (parameter) {
250
+ if ((parameter.in === 'file' || parameter.binary) && !io.file)
251
+ throw unavailable(name);
252
+ if (parameter.changed) {
253
+ if (inline === undefined || inline === 'true')
254
+ changedFlag = parameter;
255
+ else if (inline === 'false')
256
+ changedFlag = undefined;
257
+ else
258
+ throw invalid(`--${name} must be true or false.`);
259
+ }
260
+ else if (parameter.ticket) {
261
+ if (ticketPath)
262
+ throw invalid(`--${name} takes one file.`);
263
+ ticketPath = [parameter, value()];
264
+ }
265
+ else if (parameter.in === 'file')
266
+ fileUploads.push([parameter, value()]);
267
+ else if (parameter.binary)
268
+ binaries.push([parameter, value()]);
269
+ else if (parameter.type === 'boolean' && inline === undefined)
270
+ values.set(parameter, true);
271
+ else
272
+ values.set(parameter, collect(parameter, values.get(parameter), value()));
273
+ continue;
274
+ }
275
+ const negated = name.startsWith('no-')
276
+ ? flags.get(name.slice(3))
277
+ : undefined;
278
+ if (negated?.changed) {
279
+ changedFlag = undefined;
280
+ continue;
281
+ }
282
+ if (negated?.type === 'boolean') {
283
+ values.set(negated, false);
284
+ continue;
285
+ }
286
+ const content = name.endsWith('-file')
287
+ ? command.parameters.find((candidate) => candidate.contentFile && `${candidate.name}-file` === name)
288
+ : undefined;
289
+ if (content) {
290
+ contentFiles.set(content, value());
291
+ continue;
292
+ }
293
+ if (command.body?.file !== undefined && name === command.body.file) {
294
+ bodyPath = value();
295
+ continue;
296
+ }
297
+ if (command.output.kind === 'download' && name === DOWNLOAD_OUT_FLAG) {
298
+ out = value();
299
+ continue;
300
+ }
301
+ throw invalid(`Unknown flag ${word.split('=')[0]}. Run \`${bin} ${commandWords(command)} --help\`.`);
302
+ }
303
+ if (help)
304
+ return {
305
+ values,
306
+ uploads,
307
+ yes,
308
+ json,
309
+ help,
310
+ ...(out === undefined ? {} : { out }),
311
+ };
312
+ if (args.length > positional.length)
313
+ throw invalid(`Too many arguments: ${bin} ${commandWords(command)} takes ${positional.length}.`);
314
+ positional.forEach((parameter, index) => {
315
+ const raw = args[index];
316
+ if (raw !== undefined)
317
+ values.set(parameter, scalar(parameter, raw));
318
+ });
319
+ for (const [parameter, file] of contentFiles) {
320
+ if (values.has(parameter))
321
+ throw invalid(`Give --${parameter.name} or --${parameter.name}-file, not both.`);
322
+ const text = await io.readText(file);
323
+ if (text === undefined)
324
+ throw invalid(`--${parameter.name}-file: cannot read ${file}.`);
325
+ if (parameter.type !== 'json') {
326
+ values.set(parameter, text);
327
+ continue;
328
+ }
329
+ try {
330
+ values.set(parameter, JSON.parse(text));
331
+ }
332
+ catch {
333
+ throw invalid(`--${parameter.name}-file: ${file} is not valid JSON.`);
334
+ }
335
+ }
336
+ if (fromEnv && fromEnvTarget) {
337
+ // The value is read here and goes only into the request: no message below repeats it.
338
+ if (values.has(fromEnvTarget))
339
+ throw invalid(`Give ${parameterLabel(fromEnvTarget)} or --from-env, not both.`);
340
+ const source = command.parameters.find((parameter) => parameter.field === fromEnvTarget.fromEnv);
341
+ const variable = source ? values.get(source) : undefined;
342
+ if (typeof variable !== 'string' || variable === '')
343
+ throw invalid(`--from-env reads the environment variable named by ${source ? parameterLabel(source) : fromEnvTarget.fromEnv}; give it.`);
344
+ const value = io.env(variable);
345
+ if (value === undefined)
346
+ throw invalid(`--from-env: ${variable} is not set in this environment.`);
347
+ values.set(fromEnvTarget, value);
348
+ }
349
+ const localFile = async (file, maxBytes, accept) => {
350
+ const found = await io.file?.(file);
351
+ if (!found)
352
+ throw invalid(`${file} is not a file.`);
353
+ if (maxBytes !== undefined && found.size > maxBytes)
354
+ throw invalid(`${file} is larger than ${maxBytes} bytes.`);
355
+ if (accept?.length && !accepts(accept, file))
356
+ throw invalid(`${file} is not one of ${accept.join(', ')}.`);
357
+ return found;
358
+ };
359
+ for (const [parameter, file] of fileUploads) {
360
+ const list = uploads.get(parameter) ?? [];
361
+ if (list.length > 0 && !parameter.upload?.multiple)
362
+ throw invalid(`--${parameter.name} takes one file.`);
363
+ list.push(await localFile(file, parameter.upload?.maxBytes));
364
+ uploads.set(parameter, list);
365
+ }
366
+ for (const [parameter, file] of binaries) {
367
+ const previous = values.get(parameter) ?? [];
368
+ values.set(parameter, [...previous, await localFile(file)]);
369
+ }
370
+ const ticket = ticketPath
371
+ ? await localFile(ticketPath[1], ticketPath[0].ticket?.maxBytes, ticketPath[0].ticket?.accept)
372
+ : undefined;
373
+ let changed;
374
+ if (changedFlag?.changed !== undefined) {
375
+ if (!io.changed)
376
+ throw unavailable(changedFlag.name);
377
+ changed = {
378
+ field: changedFlag.field,
379
+ files: await io.changed(changedFlag.changed, changedFlag.name),
380
+ };
381
+ }
382
+ let bodyFile;
383
+ if (bodyPath !== undefined) {
384
+ const text = await io.readText(bodyPath);
385
+ if (text === undefined)
386
+ throw invalid(`--${command.body?.file ?? 'file'}: cannot read ${bodyPath}.`);
387
+ let parsed;
388
+ try {
389
+ parsed = JSON.parse(text);
390
+ }
391
+ catch {
392
+ throw invalid(`${bodyPath} is not valid JSON.`);
393
+ }
394
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
395
+ throw invalid(`${bodyPath} must hold a JSON object.`);
396
+ bodyFile = parsed;
397
+ }
398
+ // What CI already knows, such as the repository and the commit, for what neither the line nor the body file gives.
399
+ for (const parameter of command.parameters) {
400
+ if (!parameter.env?.length || values.has(parameter))
401
+ continue;
402
+ if (parameter.in === 'body' && bodyFile?.[parameter.field] !== undefined)
403
+ continue;
404
+ const value = await envDefaultOf(parameter.env, io);
405
+ if (value !== undefined)
406
+ values.set(parameter, collect(parameter, undefined, value));
407
+ }
408
+ if (options.dryRun) {
409
+ const flag = command.parameters.find((parameter) => parameter.name === 'dry-run' && parameter.type === 'boolean');
410
+ if (!flag)
411
+ throw new CliParseError('DRY_RUN_UNSUPPORTED', `The server offers no dry run of \`${bin} ${commandWords(command)}\`; nothing was sent.`, {
412
+ suggestions: [
413
+ {
414
+ message: 'Read what it does before running it without --dry-run.',
415
+ run: { command: bin, args: [...command.id.split(':'), '--help'] },
416
+ },
417
+ ],
418
+ });
419
+ values.set(flag, true);
420
+ }
421
+ const missing = [];
422
+ for (const parameter of command.parameters) {
423
+ if (!parameter.required || values.has(parameter))
424
+ continue;
425
+ if (parameter.ticket) {
426
+ if (ticket)
427
+ continue;
428
+ missing.push(parameter);
429
+ continue;
430
+ }
431
+ if (parameter.in === 'body' && bodyFile?.[parameter.field] !== undefined)
432
+ continue;
433
+ if (parameter.default !== undefined)
434
+ continue;
435
+ if (askable(parameter) && io.ask) {
436
+ values.set(parameter, collect(parameter, undefined, await io.ask(parameter)));
437
+ continue;
438
+ }
439
+ missing.push(parameter);
440
+ }
441
+ if (missing.length > 0)
442
+ throw missingArguments(bin, command, missing);
443
+ if (command.body?.file !== undefined &&
444
+ command.body.required &&
445
+ bodyFile === undefined &&
446
+ !command.parameters.some((parameter) => parameter.in === 'body' && values.has(parameter)))
447
+ throw invalid(`--${command.body.file} <file.json> is required.`);
448
+ return {
449
+ values,
450
+ ...(bodyFile ? { bodyFile } : {}),
451
+ uploads,
452
+ ...(ticket ? { ticket } : {}),
453
+ ...(changed ? { changed } : {}),
454
+ ...(out === undefined ? {} : { out }),
455
+ yes,
456
+ json,
457
+ help,
458
+ };
459
+ }
460
+ //# sourceMappingURL=arguments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../src/parse/arguments.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type ExitCode } from '@nocobase/agent-protocol';
2
+ /**
3
+ * A reason of the standard error body (one with its canonical `apiStatus`, or one the agent protocol defines) decides;
4
+ * otherwise the HTTP status does, 0 meaning no response arrived.
5
+ */
6
+ export declare function apiExitCode(httpStatus: number, reason: string, apiStatus?: string): ExitCode;
7
+ //# sourceMappingURL=exit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit.d.ts","sourceRoot":"","sources":["../../src/parse/exit.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAElC;;;GAGG;AACH,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,CAAC,EAAE,MAAM,GACjB,QAAQ,CAUV"}
@@ -0,0 +1,24 @@
1
+ // The exit code of a failed request: what the CLI on a machine and an online run's shell both exit with.
2
+ import { ERROR_API_STATUS, EXIT_CODES, exitCodeFor, } from '@nocobase/agent-protocol';
3
+ /**
4
+ * A reason of the standard error body (one with its canonical `apiStatus`, or one the agent protocol defines) decides;
5
+ * otherwise the HTTP status does, 0 meaning no response arrived.
6
+ */
7
+ export function apiExitCode(httpStatus, reason, apiStatus) {
8
+ if (apiStatus !== undefined || reason in ERROR_API_STATUS)
9
+ return exitCodeFor(reason, apiStatus);
10
+ if (httpStatus === 0)
11
+ return EXIT_CODES.network;
12
+ if (httpStatus === 401 || httpStatus === 403)
13
+ return EXIT_CODES.auth;
14
+ if (httpStatus === 404)
15
+ return EXIT_CODES.notFound;
16
+ if (httpStatus === 400)
17
+ return EXIT_CODES.validation;
18
+ if (httpStatus === 409)
19
+ return EXIT_CODES.conflict;
20
+ if (httpStatus >= 500)
21
+ return EXIT_CODES.network;
22
+ return EXIT_CODES.general;
23
+ }
24
+ //# sourceMappingURL=exit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit.js","sourceRoot":"","sources":["../../src/parse/exit.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,WAAW,GAEZ,MAAM,0BAA0B,CAAC;AAElC;;;GAGG;AACH,MAAM,UAAU,WAAW,CACzB,UAAkB,EAClB,MAAc,EACd,SAAkB;IAElB,IAAI,SAAS,KAAK,SAAS,IAAI,MAAM,IAAI,gBAAgB;QACvD,OAAO,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACxC,IAAI,UAAU,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC,OAAO,CAAC;IAChD,IAAI,UAAU,KAAK,GAAG,IAAI,UAAU,KAAK,GAAG;QAAE,OAAO,UAAU,CAAC,IAAI,CAAC;IACrE,IAAI,UAAU,KAAK,GAAG;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC;IACnD,IAAI,UAAU,KAAK,GAAG;QAAE,OAAO,UAAU,CAAC,UAAU,CAAC;IACrD,IAAI,UAAU,KAAK,GAAG;QAAE,OAAO,UAAU,CAAC,QAAQ,CAAC;IACnD,IAAI,UAAU,IAAI,GAAG;QAAE,OAAO,UAAU,CAAC,OAAO,CAAC;IACjD,OAAO,UAAU,CAAC,OAAO,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { CliCommand } from './manifest.ts';
2
+ /** A help row: the flag as typed, and what it does. */
3
+ export type HelpRow = readonly [string, string];
4
+ export interface CommandHelpOptions {
5
+ /** The CLI's command name. */
6
+ readonly bin: string;
7
+ /** Listed under GLOBAL FLAGS; the section is left out when empty. */
8
+ readonly globalFlags?: readonly HelpRow[];
9
+ /** Whether the flags that send or save a file of the caller's are offered; true by default. */
10
+ readonly localFiles?: boolean;
11
+ }
12
+ /** Rows as two aligned columns, indented. */
13
+ export declare function helpColumns(rows: readonly HelpRow[]): string[];
14
+ /** The FLAGS rows of a command. */
15
+ export declare function flagRows(command: CliCommand, localFiles?: boolean): HelpRow[];
16
+ /** A command's help: usage, arguments, flags, description and examples. */
17
+ export declare function renderCommandHelp(command: CliCommand, options: CommandHelpOptions): string;
18
+ /** The commands under `prefix` (all with an empty prefix), one line each; undefined when there are none. */
19
+ export declare function renderCommandList(commands: readonly CliCommand[], prefix?: readonly string[]): string | undefined;
20
+ /** The help of the commands under `prefix`; undefined when there are none. */
21
+ export declare function renderTopicHelp(bin: string, commands: readonly CliCommand[], prefix: readonly string[]): string | undefined;
22
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/parse/help.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAA+B,MAAM,eAAe,CAAC;AAE7E,uDAAuD;AACvD,MAAM,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC1C,+FAA+F;IAC/F,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,6CAA6C;AAC7C,wBAAgB,WAAW,CAAC,IAAI,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,EAAE,CAK9D;AAuBD,mCAAmC;AACnC,wBAAgB,QAAQ,CACtB,OAAO,EAAE,UAAU,EACnB,UAAU,GAAE,OAAc,GACzB,OAAO,EAAE,CAwDX;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,kBAAkB,GAC1B,MAAM,CA6CR;AAED,4GAA4G;AAC5G,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,SAAS,UAAU,EAAE,EAC/B,MAAM,GAAE,SAAS,MAAM,EAAO,GAC7B,MAAM,GAAG,SAAS,CAUpB;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,SAAS,UAAU,EAAE,EAC/B,MAAM,EAAE,SAAS,MAAM,EAAE,GACxB,MAAM,GAAG,SAAS,CAUpB"}