@runa-cmd/core 0.2.0-beta.2 → 0.2.0-beta.3
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 +338 -0
- package/README.md +130 -3
- package/dist/cli.d.ts +20 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +254 -69
- package/dist/cli.js.map +1 -1
- package/dist/command.d.ts +5 -2
- package/dist/command.d.ts.map +1 -1
- package/dist/command.js +26 -0
- package/dist/command.js.map +1 -1
- package/dist/config/merge.d.ts +8 -10
- package/dist/config/merge.d.ts.map +1 -1
- package/dist/config/merge.js +26 -10
- package/dist/config/merge.js.map +1 -1
- package/dist/config/scope.d.ts +41 -0
- package/dist/config/scope.d.ts.map +1 -0
- package/dist/config/scope.js +102 -0
- package/dist/config/scope.js.map +1 -0
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +24 -0
- package/dist/errors.js.map +1 -1
- package/dist/help.d.ts.map +1 -1
- package/dist/help.js +12 -3
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/introspect.d.ts.map +1 -1
- package/dist/introspect.js +10 -0
- package/dist/introspect.js.map +1 -1
- package/dist/parse/resolve.d.ts +7 -0
- package/dist/parse/resolve.d.ts.map +1 -1
- package/dist/parse/resolve.js +39 -9
- package/dist/parse/resolve.js.map +1 -1
- package/dist/plugin.d.ts +6 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +33 -3
- package/dist/plugin.js.map +1 -1
- package/dist/stop.d.ts +2 -1
- package/dist/stop.d.ts.map +1 -1
- package/dist/stop.js +6 -3
- package/dist/stop.js.map +1 -1
- package/dist/testing.d.ts +28 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +151 -0
- package/dist/testing.js.map +1 -0
- package/dist/trace.d.ts +36 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +24 -0
- package/dist/trace.js.map +1 -0
- package/dist/types.d.ts +29 -9
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAa,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,WAChB,SAAQ,IAAI,CAAC,aAAa,EAAE,SAAS,GAAG,YAAY,GAAG,eAAe,GAAG,YAAY,CAAC;IACtF,sEAAsE;IACtE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,UAAU;IAC1B,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,0BAA0B;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,yCAAyC;IACzC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,+EAA+E;IAC/E,KAAK,EAAE,UAAU,EAAE,CAAC;CACpB;AAiHD;;;;GAIG;AACH,wBAAsB,OAAO,CAC5B,MAAM,EAAE,GAAG,GAAG,OAAO,EACrB,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,WAAgB,GACvB,OAAO,CAAC,UAAU,CAAC,CA4CrB"}
|
package/dist/testing.js
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @runa-cmd/core/testing — Test a CLI without a child process (ADR-0041)
|
|
3
|
+
*
|
|
4
|
+
* The output of a process is one for everyone, so swapping it per run mixes up
|
|
5
|
+
* runs at the same time, and loses what the test runner reports through it.
|
|
6
|
+
* Output is routed by async context instead: each write finds the run it came
|
|
7
|
+
* from, and anything else goes where it always went.
|
|
8
|
+
*/
|
|
9
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
10
|
+
import { format } from 'node:util';
|
|
11
|
+
import { rootConfig, runWithHarness } from './cli.js';
|
|
12
|
+
import { ProcessExit } from './errors.js';
|
|
13
|
+
const capture = new AsyncLocalStorage();
|
|
14
|
+
function record(run, stream, text) {
|
|
15
|
+
run[stream] += text;
|
|
16
|
+
run.trace.push({ step: 'output', stream, text });
|
|
17
|
+
}
|
|
18
|
+
function routedWrite(stream, real) {
|
|
19
|
+
return function write(chunk, encoding, callback) {
|
|
20
|
+
const run = capture.getStore();
|
|
21
|
+
if (!run)
|
|
22
|
+
return real.call(process[stream], chunk, encoding, callback);
|
|
23
|
+
record(run, stream, typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString());
|
|
24
|
+
const done = typeof encoding === 'function' ? encoding : callback;
|
|
25
|
+
done?.();
|
|
26
|
+
return true;
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const CONSOLE_STREAMS = {
|
|
30
|
+
log: 'stdout',
|
|
31
|
+
info: 'stdout',
|
|
32
|
+
debug: 'stdout',
|
|
33
|
+
warn: 'stderr',
|
|
34
|
+
error: 'stderr',
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* A runner can replace console, and then console.log never reaches
|
|
38
|
+
* process.stdout: both have to be routed.
|
|
39
|
+
*/
|
|
40
|
+
function routeOutput() {
|
|
41
|
+
const { stdout, stderr, exit } = process;
|
|
42
|
+
const realOut = stdout.write;
|
|
43
|
+
const realErr = stderr.write;
|
|
44
|
+
const realConsole = Object.fromEntries(Object.keys(CONSOLE_STREAMS).map((method) => [method, console[method]]));
|
|
45
|
+
const out = routedWrite('stdout', realOut);
|
|
46
|
+
const err = routedWrite('stderr', realErr);
|
|
47
|
+
const leave = ((code) => {
|
|
48
|
+
if (!capture.getStore())
|
|
49
|
+
return exit(code);
|
|
50
|
+
throw new ProcessExit(code ?? 0);
|
|
51
|
+
});
|
|
52
|
+
stdout.write = out;
|
|
53
|
+
stderr.write = err;
|
|
54
|
+
process.exit = leave;
|
|
55
|
+
const routed = {};
|
|
56
|
+
for (const method of Object.keys(CONSOLE_STREAMS)) {
|
|
57
|
+
routed[method] = (...args) => {
|
|
58
|
+
const run = capture.getStore();
|
|
59
|
+
if (!run)
|
|
60
|
+
return realConsole[method].apply(console, args);
|
|
61
|
+
record(run, CONSOLE_STREAMS[method], `${format(...args)}\n`);
|
|
62
|
+
};
|
|
63
|
+
console[method] = routed[method];
|
|
64
|
+
}
|
|
65
|
+
return () => {
|
|
66
|
+
// Whoever replaced them after us keeps them
|
|
67
|
+
if (stdout.write === out)
|
|
68
|
+
stdout.write = realOut;
|
|
69
|
+
if (stderr.write === err)
|
|
70
|
+
stderr.write = realErr;
|
|
71
|
+
if (process.exit === leave)
|
|
72
|
+
process.exit = exit;
|
|
73
|
+
for (const method of Object.keys(CONSOLE_STREAMS)) {
|
|
74
|
+
if (console[method] === routed[method])
|
|
75
|
+
console[method] = realConsole[method];
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
let active = 0;
|
|
80
|
+
let restoreOutput;
|
|
81
|
+
function enter() {
|
|
82
|
+
active += 1;
|
|
83
|
+
restoreOutput ??= routeOutput();
|
|
84
|
+
}
|
|
85
|
+
function leave() {
|
|
86
|
+
active -= 1;
|
|
87
|
+
if (active > 0)
|
|
88
|
+
return;
|
|
89
|
+
restoreOutput?.();
|
|
90
|
+
restoreOutput = undefined;
|
|
91
|
+
}
|
|
92
|
+
function isCLI(target) {
|
|
93
|
+
return target._type === 'runa:cli';
|
|
94
|
+
}
|
|
95
|
+
/** What runCLI() builds from a command, or the CLI as it was defined. */
|
|
96
|
+
function configOf(target, options) {
|
|
97
|
+
if (isCLI(target))
|
|
98
|
+
return [target.config, undefined];
|
|
99
|
+
const { plugins, middleware, globalOptions, globalMeta } = options;
|
|
100
|
+
const name = target.meta.name ?? 'command';
|
|
101
|
+
return [rootConfig(target, name, { plugins, middleware, globalOptions, globalMeta }), name];
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Run a CLI or a command through its real lifecycle, without ending the process.
|
|
105
|
+
*
|
|
106
|
+
* @param argv - What would follow the name of the program at the terminal
|
|
107
|
+
*/
|
|
108
|
+
export async function testCLI(target, argv = [], options = {}) {
|
|
109
|
+
const run = { stdout: '', stderr: '', trace: [] };
|
|
110
|
+
const outcome = {};
|
|
111
|
+
const harness = {
|
|
112
|
+
env: options.env ?? {},
|
|
113
|
+
configValues: options.config,
|
|
114
|
+
trace: (event) => run.trace.push(event),
|
|
115
|
+
onResult: (value) => {
|
|
116
|
+
outcome.result = value;
|
|
117
|
+
},
|
|
118
|
+
onError: (error) => {
|
|
119
|
+
outcome.error = error;
|
|
120
|
+
},
|
|
121
|
+
onExit: (code) => {
|
|
122
|
+
outcome.code = code;
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
const [config, rootName] = configOf(target, options);
|
|
126
|
+
const exitCodeBefore = process.exitCode;
|
|
127
|
+
enter();
|
|
128
|
+
try {
|
|
129
|
+
await capture.run(run, () => runWithHarness(config, argv, rootName, harness));
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
if (!(err instanceof ProcessExit))
|
|
133
|
+
throw err;
|
|
134
|
+
outcome.code = err.exitCode;
|
|
135
|
+
}
|
|
136
|
+
finally {
|
|
137
|
+
leave();
|
|
138
|
+
}
|
|
139
|
+
// A command can set it instead of exiting, and it must not outlive the run
|
|
140
|
+
const setByCommand = process.exitCode === exitCodeBefore ? undefined : process.exitCode;
|
|
141
|
+
process.exitCode = exitCodeBefore;
|
|
142
|
+
return {
|
|
143
|
+
code: outcome.code ?? Number(setByCommand ?? 0),
|
|
144
|
+
stdout: run.stdout,
|
|
145
|
+
stderr: run.stderr,
|
|
146
|
+
result: outcome.result,
|
|
147
|
+
error: outcome.error,
|
|
148
|
+
trace: run.trace,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|
package/dist/trace.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @runa-cmd/core — What a run did, as data (ADR-0045)
|
|
3
|
+
*
|
|
4
|
+
* The lifecycle knows this before it becomes text. testCLI() returns it, and
|
|
5
|
+
* RUNA_DEBUG=1 prints it while it happens.
|
|
6
|
+
*/
|
|
7
|
+
import type { HookName } from './types.js';
|
|
8
|
+
export type ValueSource = 'cli' | 'env' | 'config' | 'default' | 'input';
|
|
9
|
+
export type TraceEvent = {
|
|
10
|
+
step: 'config';
|
|
11
|
+
file?: string;
|
|
12
|
+
} | {
|
|
13
|
+
step: 'option';
|
|
14
|
+
name: string;
|
|
15
|
+
scope: 'global' | 'command';
|
|
16
|
+
source: ValueSource;
|
|
17
|
+
/** Left out when it comes from env: it can be a secret */
|
|
18
|
+
value?: unknown;
|
|
19
|
+
} | {
|
|
20
|
+
step: 'hook';
|
|
21
|
+
name: HookName;
|
|
22
|
+
ms: number;
|
|
23
|
+
} | {
|
|
24
|
+
step: 'run';
|
|
25
|
+
command: string[];
|
|
26
|
+
ms: number;
|
|
27
|
+
} | {
|
|
28
|
+
step: 'output';
|
|
29
|
+
stream: 'stdout' | 'stderr';
|
|
30
|
+
text: string;
|
|
31
|
+
};
|
|
32
|
+
/** One line per event. Never a value: this output ends up in CI logs. */
|
|
33
|
+
export declare function debugLine(event: TraceEvent): string | undefined;
|
|
34
|
+
/** The events of a set of options. A value from env stays out of them. */
|
|
35
|
+
export declare function optionEvents(scope: 'global' | 'command', names: string[], values: Record<string, unknown>, sources: Record<string, ValueSource>): TraceEvent[];
|
|
36
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC;AAEzE,MAAM,MAAM,UAAU,GACnB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACjC;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,OAAO,CAAC;CACf,GACD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,yEAAyE;AACzE,wBAAgB,SAAS,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAa/D;AAED,0EAA0E;AAC1E,wBAAgB,YAAY,CAC3B,KAAK,EAAE,QAAQ,GAAG,SAAS,EAC3B,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAClC,UAAU,EAAE,CAMd"}
|
package/dist/trace.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/** One line per event. Never a value: this output ends up in CI logs. */
|
|
2
|
+
export function debugLine(event) {
|
|
3
|
+
switch (event.step) {
|
|
4
|
+
case 'config':
|
|
5
|
+
return `runa: config ${event.file ?? '(no file)'}`;
|
|
6
|
+
case 'option':
|
|
7
|
+
return `runa: option ${event.name} (${event.source})`;
|
|
8
|
+
case 'hook':
|
|
9
|
+
return `runa: hook ${event.name} ${event.ms}ms`;
|
|
10
|
+
case 'run':
|
|
11
|
+
return `runa: run ${event.command.join(' ')} ${event.ms}ms`;
|
|
12
|
+
default:
|
|
13
|
+
return undefined;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** The events of a set of options. A value from env stays out of them. */
|
|
17
|
+
export function optionEvents(scope, names, values, sources) {
|
|
18
|
+
return names.map((name) => {
|
|
19
|
+
const source = sources[name] ?? 'default';
|
|
20
|
+
const event = { step: 'option', name, scope, source };
|
|
21
|
+
return source === 'env' ? event : { ...event, value: values[name] };
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../src/trace.ts"],"names":[],"mappings":"AAwBA,yEAAyE;AACzE,MAAM,UAAU,SAAS,CAAC,KAAiB;IAC1C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACZ,OAAO,gBAAgB,KAAK,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;QACpD,KAAK,QAAQ;YACZ,OAAO,gBAAgB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;QACvD,KAAK,MAAM;YACV,OAAO,cAAc,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC;QACjD,KAAK,KAAK;YACT,OAAO,aAAa,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC;QAC7D;YACC,OAAO,SAAS,CAAC;IACnB,CAAC;AACF,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAC3B,KAA2B,EAC3B,KAAe,EACf,MAA+B,EAC/B,OAAoC;IAEpC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QAC1C,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,QAAiB,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;QAC/D,OAAO,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACrE,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -16,9 +16,19 @@ export interface OptionMeta {
|
|
|
16
16
|
deprecated?: string;
|
|
17
17
|
/** What help calls the value, e.g. 'hex' for `--color <hex>`. Default: its type */
|
|
18
18
|
valueName?: string;
|
|
19
|
+
/** False if a config file can't set it, as with a guardrail. Default: true */
|
|
20
|
+
configurable?: boolean;
|
|
19
21
|
}
|
|
20
|
-
|
|
22
|
+
/** A command as it reaches run() and hooks: by then, it always has its name. */
|
|
23
|
+
export type NamedCommandMeta<TOptions extends Record<string, ZodType> = Record<string, ZodType>> = CommandMeta<TOptions> & {
|
|
21
24
|
name: string;
|
|
25
|
+
};
|
|
26
|
+
export interface CommandMeta<TOptions extends Record<string, ZodType> = Record<string, ZodType>> {
|
|
27
|
+
/**
|
|
28
|
+
* The name of a CLI of one command, which runCLI requires. In defineCLI, the
|
|
29
|
+
* key names the command: this is optional there, and has to match it.
|
|
30
|
+
*/
|
|
31
|
+
name?: string;
|
|
22
32
|
description: string;
|
|
23
33
|
version?: string;
|
|
24
34
|
/** Option metadata — keys MUST be a subset of TOptions keys */
|
|
@@ -44,7 +54,7 @@ export interface RunContext<TArgs extends Record<string, ZodType> = Record<strin
|
|
|
44
54
|
args: InferArgs<TArgs>;
|
|
45
55
|
options: InferOptions<TOptions>;
|
|
46
56
|
globalOptions: Record<string, unknown>;
|
|
47
|
-
command:
|
|
57
|
+
command: NamedCommandMeta<TOptions>;
|
|
48
58
|
rawArgs: string[];
|
|
49
59
|
/** What's left after `--`, verbatim and unvalidated, if the command declares `rest: true`. Else `[]` */
|
|
50
60
|
rest: string[];
|
|
@@ -53,17 +63,24 @@ export interface RunContext<TArgs extends Record<string, ZodType> = Record<strin
|
|
|
53
63
|
}
|
|
54
64
|
/**
|
|
55
65
|
* If TOutput extends ZodType, run() must return data matching the schema.
|
|
56
|
-
* If
|
|
66
|
+
* If not, run() returns whatever it wants, or nothing.
|
|
57
67
|
*/
|
|
58
|
-
export type RunReturn<TOutput> = TOutput extends ZodType ? z.infer<TOutput> | Promise<z.infer<TOutput>> :
|
|
59
|
-
|
|
68
|
+
export type RunReturn<TOutput, TResult = void> = TOutput extends ZodType ? z.infer<TOutput> | Promise<z.infer<TOutput>> : TResult | Promise<TResult>;
|
|
69
|
+
/** What format() receives: the data, once it's no longer a promise. */
|
|
70
|
+
export type RunResult<TOutput, TResult> = TOutput extends ZodType ? z.infer<TOutput> : TResult;
|
|
71
|
+
export interface CommandConfig<TArgs extends Record<string, ZodType> = Record<string, ZodType>, TOptions extends Record<string, ZodType> = Record<string, ZodType>, TOutput extends ZodType | undefined = undefined, TResult = void> {
|
|
60
72
|
meta: CommandMeta<TOptions>;
|
|
61
73
|
args?: TArgs;
|
|
62
74
|
options?: TOptions;
|
|
63
75
|
output?: TOutput;
|
|
64
76
|
/** Take what's left after `--` in `ctx.rest`. Without it, that's a usage error */
|
|
65
77
|
rest?: boolean;
|
|
66
|
-
run: (ctx: RunContext<TArgs, TOptions>) => RunReturn<TOutput>;
|
|
78
|
+
run: (ctx: RunContext<TArgs, TOptions>) => RunReturn<TOutput, TResult>;
|
|
79
|
+
/**
|
|
80
|
+
* What a person reads at the terminal, from what run() returned. A tool gets
|
|
81
|
+
* the data instead, and the command gains `--json`.
|
|
82
|
+
*/
|
|
83
|
+
format?: (result: RunResult<TOutput, TResult>) => string;
|
|
67
84
|
}
|
|
68
85
|
export interface Command {
|
|
69
86
|
readonly _type: 'runa:command';
|
|
@@ -73,6 +90,7 @@ export interface Command {
|
|
|
73
90
|
readonly output?: ZodType;
|
|
74
91
|
readonly rest?: boolean;
|
|
75
92
|
readonly run: (ctx: RunContext) => unknown;
|
|
93
|
+
readonly format?: (result: unknown) => string;
|
|
76
94
|
}
|
|
77
95
|
export interface CommandTree {
|
|
78
96
|
[key: string]: Command | CommandTree;
|
|
@@ -141,8 +159,8 @@ export interface PluginAPI {
|
|
|
141
159
|
hook(name: HookName, handler: HookHandler): void;
|
|
142
160
|
getSchema(): CLISchema;
|
|
143
161
|
getCommands(): CommandTree;
|
|
144
|
-
/**
|
|
145
|
-
getConfigValues(): Promise<Record<string, unknown> | undefined>;
|
|
162
|
+
/** The config file of the CLI, if it has one. With a path, only that command's values */
|
|
163
|
+
getConfigValues(commandPath?: string[]): Promise<Record<string, unknown> | undefined>;
|
|
146
164
|
/** Show help your way, instead of the built-in plain text. Only one plugin can */
|
|
147
165
|
replaceHelp(show: HelpHandler): void;
|
|
148
166
|
}
|
|
@@ -177,7 +195,7 @@ export interface HookContext {
|
|
|
177
195
|
/** Aborted when the run must stop */
|
|
178
196
|
signal: AbortSignal;
|
|
179
197
|
globalOptions?: Record<string, unknown>;
|
|
180
|
-
command?:
|
|
198
|
+
command?: NamedCommandMeta;
|
|
181
199
|
args?: Record<string, unknown>;
|
|
182
200
|
options?: Record<string, unknown>;
|
|
183
201
|
error?: Error;
|
|
@@ -214,6 +232,8 @@ export interface CommandSchema {
|
|
|
214
232
|
description: string;
|
|
215
233
|
/** Full command path, e.g. ['config', 'set'] for nested commands */
|
|
216
234
|
fullPath: string[];
|
|
235
|
+
/** What a person types to run it, with the CLI, e.g. ['tool', 'config', 'set']. Set for help */
|
|
236
|
+
commandLine?: string[];
|
|
217
237
|
args: ArgSchema[];
|
|
218
238
|
options: OptionSchema[];
|
|
219
239
|
hasOutput: boolean;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAItC,MAAM,WAAW,UAAU;IAC1B,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,mDAAmD;IACnD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mGAAmG;IACnG,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAkOA,+DAA+D;AAE/D,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,YAAY,EAAE,aAAa;IAC3B,eAAe,EAAE,eAAe;IAChC,WAAW,EAAE,YAAY;IACzB,UAAU,EAAE,WAAW;IACvB,SAAS,EAAE,UAAU;IACrB,QAAQ,EAAE,SAAS;IACnB,OAAO,EAAE,SAAS;CACT,CAAC;AAsGX,+DAA+D;AAE/D,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,OAAO;CACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@runa-cmd/core",
|
|
3
|
-
"version": "0.2.0-beta.
|
|
3
|
+
"version": "0.2.0-beta.3",
|
|
4
4
|
"description": "Schema-driven, TypeScript-first CLI engine — commands, parsing, plugins, middleware. Zero runtime deps.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -25,6 +25,10 @@
|
|
|
25
25
|
"types": "./dist/zod.d.ts",
|
|
26
26
|
"import": "./dist/zod.js"
|
|
27
27
|
},
|
|
28
|
+
"./testing": {
|
|
29
|
+
"types": "./dist/testing.d.ts",
|
|
30
|
+
"import": "./dist/testing.js"
|
|
31
|
+
},
|
|
28
32
|
"./internal": {
|
|
29
33
|
"types": "./dist/internal.d.ts",
|
|
30
34
|
"import": "./dist/internal.js"
|
|
@@ -50,7 +54,8 @@
|
|
|
50
54
|
},
|
|
51
55
|
"files": [
|
|
52
56
|
"dist",
|
|
53
|
-
"README.md"
|
|
57
|
+
"README.md",
|
|
58
|
+
"CHANGELOG.md"
|
|
54
59
|
],
|
|
55
60
|
"devDependencies": {
|
|
56
61
|
"@types/node": "^25.6.0",
|