@osdlc/command-seam 0.0.0-stage → 0.0.1-stage
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 +328 -0
- package/CONTRIBUTING.md +58 -0
- package/LICENSE +21 -0
- package/README.md +741 -2
- package/SECURITY.md +23 -0
- package/async.ts +466 -0
- package/defaults.ts +83 -0
- package/dist/async.d.ts +146 -0
- package/dist/async.d.ts.map +1 -0
- package/dist/async.js +368 -0
- package/dist/defaults.d.ts +52 -0
- package/dist/defaults.d.ts.map +1 -0
- package/dist/defaults.js +51 -0
- package/dist/groups.d.ts +155 -0
- package/dist/groups.d.ts.map +1 -0
- package/dist/groups.js +331 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/process.d.ts +146 -0
- package/dist/process.d.ts.map +1 -0
- package/dist/process.js +175 -0
- package/dist/process.test.d.ts +1 -0
- package/dist/process.test.d.ts.map +1 -0
- package/dist/process.test.js +1 -0
- package/dist/quote.d.ts +18 -0
- package/dist/quote.d.ts.map +1 -0
- package/dist/quote.js +28 -0
- package/dist/result.d.ts +211 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +219 -0
- package/dist/shell.d.ts +84 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +83 -0
- package/dist/stream.d.ts +90 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +73 -0
- package/dist/sync.d.ts +311 -0
- package/dist/sync.d.ts.map +1 -0
- package/dist/sync.js +406 -0
- package/dist/testing.d.ts +158 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +173 -0
- package/groups.ts +360 -0
- package/index.ts +98 -0
- package/package.json +94 -3
- package/process.ts +270 -0
- package/quote.ts +31 -0
- package/result.ts +403 -0
- package/shell.ts +131 -0
- package/smoke.mjs +61 -0
- package/stream.ts +134 -0
- package/sync.ts +604 -0
- package/testing.ts +263 -0
package/dist/sync.d.ts
ADDED
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The synchronous capture runner: the {@link CommandRunner} interface and its
|
|
3
|
+
* `spawnSync`-backed default, {@link spawnRunner}. Code that runs commands
|
|
4
|
+
* takes a `CommandRunner`; tests pass a fake. Live output and long-lived
|
|
5
|
+
* processes have their own runners (`stream.ts`, `process.ts`).
|
|
6
|
+
*
|
|
7
|
+
* Two ways to call it, like zod's `safeParse` and `parse`:
|
|
8
|
+
* - `runner.run(...)` never throws for a failed command; the caller reads
|
|
9
|
+
* `exitCode`.
|
|
10
|
+
* - `runChecked(runner, ...)` throws {@link CommandFailed} on a non-zero
|
|
11
|
+
* exit, for callers whose only sensible response to failure is to stop.
|
|
12
|
+
*/
|
|
13
|
+
/** Result of running an external command through a `CommandRunner`. */
|
|
14
|
+
export interface CommandResult {
|
|
15
|
+
/** The child's exit code, or `1` when it never reported one (see `neverExited`). */
|
|
16
|
+
exitCode: number;
|
|
17
|
+
/** Everything the child wrote to stdout, decoded as UTF-8. */
|
|
18
|
+
stdout: string;
|
|
19
|
+
/**
|
|
20
|
+
* Everything the child wrote to stderr, decoded as UTF-8. Only the child's
|
|
21
|
+
* output: the runner's own message, such as a failed spawn or a timeout, is
|
|
22
|
+
* in `error`. `failureText` reads both.
|
|
23
|
+
*/
|
|
24
|
+
stderr: string;
|
|
25
|
+
/**
|
|
26
|
+
* `true` when the child never reported an exit status: the spawn failed, a
|
|
27
|
+
* timeout or an abort killed it, a signal took it down, or the sync runner
|
|
28
|
+
* killed it at the output cap. `exitCode` is
|
|
29
|
+
* then a stand-in `1`, not the command's answer. Absent otherwise.
|
|
30
|
+
*
|
|
31
|
+
* Check this before reading an exit code as an answer. `grep` exits 1 for
|
|
32
|
+
* "no matches" and `git config --get` exits 1 for an unset key; without
|
|
33
|
+
* this check, a binary missing from `PATH` reads as a confident "no".
|
|
34
|
+
* `reason` says which of those causes it was.
|
|
35
|
+
*/
|
|
36
|
+
neverExited?: boolean | undefined;
|
|
37
|
+
/**
|
|
38
|
+
* Why the child never reported an exit status. Set whenever `neverExited`
|
|
39
|
+
* is, absent otherwise. See {@link NeverExitedReason}.
|
|
40
|
+
*/
|
|
41
|
+
reason?: NeverExitedReason | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* The signal that ended the child, when the runner knows it: always for
|
|
44
|
+
* `reason: 'signal'`, and for a sync `'timeout'` or `'output'` (`SIGKILL`).
|
|
45
|
+
* The async runner settles a timeout or abort before the child is gone, so
|
|
46
|
+
* it leaves this unset there.
|
|
47
|
+
*/
|
|
48
|
+
signal?: NodeJS.Signals | undefined;
|
|
49
|
+
/**
|
|
50
|
+
* The runner's own message, when it has one: a failed spawn, a timeout, an
|
|
51
|
+
* abort, an `onSpawn` that threw, a refused `processGroup` run, the output
|
|
52
|
+
* cap, or a failed write to the child's stdin. It is never copied into
|
|
53
|
+
* `stderr`. Absent otherwise.
|
|
54
|
+
*
|
|
55
|
+
* It can also be set when the child did exit: a failed stdin write (Bun's
|
|
56
|
+
* `spawnSync` does not report one), or, under Bun, a child that exits right
|
|
57
|
+
* at the output cap. `exitCode` is then the child's own and `reason` is
|
|
58
|
+
* absent.
|
|
59
|
+
*/
|
|
60
|
+
error?: string | undefined;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Why a child never reported an exit status (`neverExited: true`):
|
|
64
|
+
*
|
|
65
|
+
* - `spawn`: it never started: a missing binary, no permission, a bad `cwd`.
|
|
66
|
+
* Retrying will not help.
|
|
67
|
+
* - `timeout`: `timeoutMs` ran out and the runner killed it.
|
|
68
|
+
* - `abort`: the caller stopped it: an `AbortSignal` (async runner), an
|
|
69
|
+
* `onSpawn` that threw, or `kill()` on a managed process. Or a
|
|
70
|
+
* `processGroup` run was refused because signal forwarding is stopping the
|
|
71
|
+
* host; it never started, and `error` carries the refusal message.
|
|
72
|
+
* - `signal`: a signal from elsewhere ended it.
|
|
73
|
+
* - `output`: the sync runner killed it for passing its 256 MB output cap
|
|
74
|
+
* (`spawnSync`'s `ENOBUFS`). The same run will fail the same way. The async
|
|
75
|
+
* runner has no cap, and the `bun test` capture path writes to files, so
|
|
76
|
+
* neither reports this.
|
|
77
|
+
*/
|
|
78
|
+
export type NeverExitedReason = 'spawn' | 'timeout' | 'abort' | 'signal' | 'output';
|
|
79
|
+
/** Per-call options for a {@link CommandRunner}. */
|
|
80
|
+
export interface CommandRunOptions {
|
|
81
|
+
/** Working directory for the child. Required: the runner has no default. */
|
|
82
|
+
cwd: string;
|
|
83
|
+
/**
|
|
84
|
+
* Kill the child with `SIGKILL` after this many milliseconds. The result
|
|
85
|
+
* then has a non-zero `exitCode`, `neverExited: true` and
|
|
86
|
+
* `reason: 'timeout'`.
|
|
87
|
+
*
|
|
88
|
+
* The same rule on every runner: `undefined` and `Infinity` mean no cap,
|
|
89
|
+
* and a fraction rounds up (`1.2` is `2`). A value above 2^31 - 1 (about
|
|
90
|
+
* 24.8 days), the largest timer delay, is clamped to it. `0`, a negative
|
|
91
|
+
* value and `NaN` are a caller error: `RangeError`, thrown by the sync
|
|
92
|
+
* runners and rejected by the async ones. A value that is not a number is
|
|
93
|
+
* a `TypeError`, the same way.
|
|
94
|
+
*
|
|
95
|
+
* The sync runners (`spawnRunner`, `runShell`, `shellRunner`) and
|
|
96
|
+
* `streamRunner` kill the direct child only. Processes it started keep
|
|
97
|
+
* running. Only the async runners (`spawnRunnerAsync`, `runShellAsync`,
|
|
98
|
+
* `shellRunnerAsync`) can kill the whole process group, with
|
|
99
|
+
* `processGroup`.
|
|
100
|
+
*/
|
|
101
|
+
timeoutMs?: number | undefined;
|
|
102
|
+
/** Text written to the child's stdin. Stdin is closed after it, or at once when omitted. */
|
|
103
|
+
input?: string | undefined;
|
|
104
|
+
/**
|
|
105
|
+
* Variables merged over the parent's environment. An `undefined` value
|
|
106
|
+
* removes that variable from the child's environment.
|
|
107
|
+
*/
|
|
108
|
+
env?: EnvOverrides | undefined;
|
|
109
|
+
}
|
|
110
|
+
/** Env vars to set on a child, merged over the parent's; an `undefined` value unsets that var. */
|
|
111
|
+
export type EnvOverrides = Record<string, string | undefined>;
|
|
112
|
+
/**
|
|
113
|
+
* Runs one external binary (`git`, `gh`, …) and captures its output. Code that
|
|
114
|
+
* shells out takes one of these; tests pass a fake.
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```ts
|
|
118
|
+
* const fake: CommandRunner = {
|
|
119
|
+
* run: (argv) => ({ exitCode: 0, stdout: `ran ${argv.join(' ')}`, stderr: '' }),
|
|
120
|
+
* }
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export interface CommandRunner {
|
|
124
|
+
/**
|
|
125
|
+
* Run the binary with `argv` (the arguments, without the binary name) and
|
|
126
|
+
* wait for it to exit. Never throws for a failed command: a non-zero exit,
|
|
127
|
+
* a missing binary or a timeout all come back as a {@link CommandResult}.
|
|
128
|
+
* Programmer errors throw: an invalid `timeoutMs` (see its doc) or a NUL
|
|
129
|
+
* byte in argv or env.
|
|
130
|
+
*/
|
|
131
|
+
run(argv: string[], opts: CommandRunOptions): CommandResult;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* `{ env }`: `process.env` merged with `opts.env`, minus any key whose
|
|
135
|
+
* override is `undefined`. Always an explicit object built from the current
|
|
136
|
+
* `process.env` at call time — never `undefined`, never an omitted key, and
|
|
137
|
+
* never `process.env` handed through verbatim either.
|
|
138
|
+
*
|
|
139
|
+
* Node's `child_process.spawnSync` inherits live `process.env` whether
|
|
140
|
+
* `env` is omitted, `undefined`, or `process.env` itself. Bun's does not:
|
|
141
|
+
* all three instead take a snapshot — of exactly when is unclear, but
|
|
142
|
+
* empirically it misses anything set on `process.env` after the process
|
|
143
|
+
* started, even as the very first spawn — so a test that points an env var
|
|
144
|
+
* at a fresh temp dir right before spawning would silently see the real,
|
|
145
|
+
* unwritten default instead. Only spreading `process.env`'s current
|
|
146
|
+
* key/values into a brand-new plain object at the call site sidesteps
|
|
147
|
+
* whatever Bun is snapshotting.
|
|
148
|
+
*/
|
|
149
|
+
export declare function mergedEnv(opts: Pick<CommandRunOptions, 'env'>): {
|
|
150
|
+
env: NodeJS.ProcessEnv;
|
|
151
|
+
};
|
|
152
|
+
/**
|
|
153
|
+
* `timeoutMs` as every runner applies it: `undefined` for no cap, else a whole
|
|
154
|
+
* number of milliseconds, at most {@link MAX_TIMER_MS}. See
|
|
155
|
+
* {@link CommandRunOptions.timeoutMs}.
|
|
156
|
+
*
|
|
157
|
+
* @throws `TypeError` for a value that is not a number.
|
|
158
|
+
* @throws `RangeError` for `0`, a negative value or `NaN`.
|
|
159
|
+
*/
|
|
160
|
+
export declare function normalizeTimeout(timeoutMs: number | undefined): number | undefined;
|
|
161
|
+
/**
|
|
162
|
+
* A delay option as a timer takes it: `undefined` for `Infinity`, else a whole
|
|
163
|
+
* number of milliseconds, at most {@link MAX_TIMER_MS}. `min` says whether `0`
|
|
164
|
+
* is allowed. `name` is the option's name, for the error message.
|
|
165
|
+
*
|
|
166
|
+
* @throws `TypeError` for a value that is not a number.
|
|
167
|
+
* @throws `RangeError` for a value below `min`, or `NaN`.
|
|
168
|
+
*/
|
|
169
|
+
export declare function timerMs(name: string, ms: number, min: 'positive' | 'zero'): number | undefined;
|
|
170
|
+
/**
|
|
171
|
+
* A spawn error message when `cwd` is missing or not a directory, else
|
|
172
|
+
* `undefined`. Checked before spawning: a spawn reports a missing `cwd` as
|
|
173
|
+
* `spawn <binary> ENOENT`, which reads as a missing binary, and Node's async
|
|
174
|
+
* `spawn` throws for a `cwd` that is a file.
|
|
175
|
+
*
|
|
176
|
+
* @param spawnName - The message prefix: `spawn` or `spawnSync`, then the binary.
|
|
177
|
+
* @throws `TypeError` for a NUL byte in `binary`, `argv` or `opts.env`, as the
|
|
178
|
+
* spawn would, so a bad `cwd` does not hide it.
|
|
179
|
+
*/
|
|
180
|
+
export declare function cwdError(spawnName: string, binary: string, argv: readonly string[], opts: {
|
|
181
|
+
cwd: string;
|
|
182
|
+
env?: EnvOverrides | undefined;
|
|
183
|
+
}): string | undefined;
|
|
184
|
+
/** The stand-in result for a child that never started. */
|
|
185
|
+
export declare function spawnFailure(message: string): CommandResult;
|
|
186
|
+
/**
|
|
187
|
+
* How a `spawnSync` that reported no exit status ended. Shared by the sync
|
|
188
|
+
* capture and streaming runners.
|
|
189
|
+
*/
|
|
190
|
+
export declare function syncStop(proc: {
|
|
191
|
+
error?: Error | undefined;
|
|
192
|
+
signal: NodeJS.Signals | null;
|
|
193
|
+
}): {
|
|
194
|
+
reason: Exclude<NeverExitedReason, 'abort'>;
|
|
195
|
+
signal?: NodeJS.Signals;
|
|
196
|
+
};
|
|
197
|
+
/**
|
|
198
|
+
* Thrown by {@link runChecked} and `runCheckedAsync` on a non-zero exit.
|
|
199
|
+
* Carries the argv and the full {@link CommandResult}, so a caller can report
|
|
200
|
+
* the output without running the command again.
|
|
201
|
+
*
|
|
202
|
+
* `message` is `command failed (exit N): <argv>`, with argv quoted by
|
|
203
|
+
* `shellJoin`, followed on a new line by the trimmed stderr, or the trimmed
|
|
204
|
+
* `error` when stderr is empty. Nothing follows when both are empty. The argv
|
|
205
|
+
* appears in full, so error logs and reports carry it: pass secrets through
|
|
206
|
+
* `env` or `input`, not argv. Use `detail` to show a person
|
|
207
|
+
* why it failed.
|
|
208
|
+
*/
|
|
209
|
+
export declare class CommandFailed extends Error {
|
|
210
|
+
/** The arguments the command ran with, without the binary name. */
|
|
211
|
+
readonly argv: string[];
|
|
212
|
+
/** The full result of the failed run. */
|
|
213
|
+
readonly result: CommandResult;
|
|
214
|
+
/**
|
|
215
|
+
* The failure text to show a human: both streams, trimmed, newline-joined,
|
|
216
|
+
* empty ones dropped, with the runner's `error` standing in for an empty
|
|
217
|
+
* stderr. Empty when there is no text at all. The same as
|
|
218
|
+
* `failureText(e.result, { both: true })`.
|
|
219
|
+
*
|
|
220
|
+
* `message` interpolates stderr only, and several commands write the
|
|
221
|
+
* sentence that explains the failure to stdout instead — a rejecting git
|
|
222
|
+
* hook, `git commit` on a clean tree, `git apply --check`. Read this rather
|
|
223
|
+
* than picking a stream at the call site.
|
|
224
|
+
*
|
|
225
|
+
* Both are joined rather than one preferred, because a rejecting hook is
|
|
226
|
+
* the case where both carry a distinct half: git's own "commit failed" on
|
|
227
|
+
* stderr, the hook's reason on stdout. Preferring either drops the half
|
|
228
|
+
* the reader needs.
|
|
229
|
+
*/
|
|
230
|
+
get detail(): string;
|
|
231
|
+
/**
|
|
232
|
+
* @param argv - The arguments the command ran with.
|
|
233
|
+
* @param result - The result of the failed run.
|
|
234
|
+
*/
|
|
235
|
+
constructor(argv: string[], result: CommandResult);
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Run a command and throw if it fails. Use it where the only sensible
|
|
239
|
+
* response to failure is to stop, instead of writing
|
|
240
|
+
* `if (r.exitCode !== 0) throw` after each `run`.
|
|
241
|
+
*
|
|
242
|
+
* Takes any runner whose `run` returns a {@link CommandResult}, with that
|
|
243
|
+
* runner's own options: a `withDefaults` runner needs only the options it
|
|
244
|
+
* did not bind.
|
|
245
|
+
*
|
|
246
|
+
* @param runner - Runs the command; pass a fake in tests.
|
|
247
|
+
* @param argv - Arguments, without the binary name.
|
|
248
|
+
* @param opts - Per-call options, as `runner.run` takes them.
|
|
249
|
+
* @returns The result, when `exitCode` is 0.
|
|
250
|
+
* @throws {@link CommandFailed} when `exitCode` is not 0, including a missing
|
|
251
|
+
* binary or a timeout.
|
|
252
|
+
*
|
|
253
|
+
* @example
|
|
254
|
+
* ```ts
|
|
255
|
+
* const git = spawnRunner('git')
|
|
256
|
+
* const head = runChecked(git, ['rev-parse', 'HEAD'], { cwd: '.' }).stdout.trim()
|
|
257
|
+
* ```
|
|
258
|
+
*/
|
|
259
|
+
export declare function runChecked(runner: CommandRunner, argv: string[], opts: CommandRunOptions): CommandResult;
|
|
260
|
+
export declare function runChecked<P extends unknown[]>(runner: {
|
|
261
|
+
run(argv: string[], ...opts: P): CommandResult;
|
|
262
|
+
}, argv: string[], ...opts: NoInfer<P>): CommandResult;
|
|
263
|
+
/**
|
|
264
|
+
* Run `fn`; if it throws {@link CommandFailed}, throw `mapper(e)` instead.
|
|
265
|
+
* Any other error propagates untouched, as does `fn`'s return value. Replaces
|
|
266
|
+
* `catch (e) { if (e instanceof CommandFailed) throw new X(...); throw e }`.
|
|
267
|
+
*
|
|
268
|
+
* `mapper` may have side effects (print the output, say) before returning the
|
|
269
|
+
* error to throw. Async version: `mapFailedAsync`.
|
|
270
|
+
*
|
|
271
|
+
* @param fn - The code to run, usually a `runChecked` call.
|
|
272
|
+
* @param mapper - Turns the failure into the error to throw.
|
|
273
|
+
* @returns What `fn` returns.
|
|
274
|
+
* @throws The error `mapper` returns, when `fn` throws `CommandFailed`.
|
|
275
|
+
*/
|
|
276
|
+
export declare function mapFailed<T>(fn: () => T, mapper: (failed: CommandFailed) => Error): T;
|
|
277
|
+
/**
|
|
278
|
+
* Run `fn`; if it throws {@link CommandFailed}, return `onFailed(e)` instead.
|
|
279
|
+
* Any other error propagates untouched. Async version: `catchFailedAsync`.
|
|
280
|
+
*
|
|
281
|
+
* @param fn - The code to run, usually a `runChecked` call.
|
|
282
|
+
* @param onFailed - Turns the failure into a value.
|
|
283
|
+
* @returns What `fn` returns, or what `onFailed` returns.
|
|
284
|
+
*/
|
|
285
|
+
export declare function catchFailed<T, R>(fn: () => T, onFailed: (failed: CommandFailed) => R): T | R;
|
|
286
|
+
/**
|
|
287
|
+
* The injected runner when there is one, else `spawnRunner(binary)`.
|
|
288
|
+
*
|
|
289
|
+
* @param binary - The binary for the default runner.
|
|
290
|
+
* @param injected - A runner to use instead, such as a test fake.
|
|
291
|
+
*/
|
|
292
|
+
export declare function resolveRunner(binary: string, injected?: CommandRunner | undefined): CommandRunner;
|
|
293
|
+
/**
|
|
294
|
+
* The default {@link CommandRunner}: runs `binary` with `spawnSync`, so each
|
|
295
|
+
* call blocks until the child exits. On timeout the child gets `SIGKILL`.
|
|
296
|
+
* Captured output is capped at 256 MB per stream. Under `bun test` (the Bun
|
|
297
|
+
* runtime with `NODE_ENV=test`) it captures through `/bin/sh` and temp files
|
|
298
|
+
* instead of pipes (see `runViaChildRedirect`).
|
|
299
|
+
*
|
|
300
|
+
* @param binary - A name looked up on `PATH`, or a path.
|
|
301
|
+
* @returns A runner for that binary.
|
|
302
|
+
*
|
|
303
|
+
* @example
|
|
304
|
+
* ```ts
|
|
305
|
+
* const git = spawnRunner('git')
|
|
306
|
+
* const r = git.run(['status', '--porcelain'], { cwd: '.', timeoutMs: 10_000 })
|
|
307
|
+
* if (r.exitCode === 0) console.log(r.stdout)
|
|
308
|
+
* ```
|
|
309
|
+
*/
|
|
310
|
+
export declare function spawnRunner(binary: string): CommandRunner;
|
|
311
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../sync.ts"],"names":[],"mappings":"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"}
|