@wirecat/cli-core 0.19.1 → 0.19.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/README.md CHANGED
@@ -36,6 +36,9 @@ streams.stderr // []
36
36
  | `renderer` · `pretty` | `pretty` / `json` / `jsonl`; tables for lists, labelled lines for objects; `quiet` keeps only failures on stderr |
37
37
  | `errors` · `exit-codes` | 14 closed error codes, one exit number each, so a script can branch on `$?` |
38
38
  | `keyring` | `KeyringStore` with the system, memory and deliberately-broken implementations |
39
+ | `fieldsOf` · `projectFields` | validated field selection preserving list metadata and operation identifiers |
40
+ | `createOutputBuffer` | bounded UTF-8 output held until successful completion and resource cleanup |
41
+ | `createDeadline` | cooperative command cancellation with injected sleep and a parent abort signal |
39
42
  | `time` | monotonic and wall clocks, and the one sleep that both timeouts and backoff use |
40
43
  | `logger` | the four-method interface a host adapts Pino to — this package logs nothing itself |
41
44
  | `paths` | `env-paths` for config, state and cache, each overridable by environment variable |
@@ -60,6 +63,34 @@ does not call:
60
63
  import { providerWaitMs, statusToCode } from "@wirecat/cli-core/http"
61
64
  ```
62
65
 
66
+ **Portable command control stays independent of provider and store lifetimes.**
67
+ `fieldsOf("id,speaker.id")` parses up to 128 field paths; `projectFields(value, paths)` selects data
68
+ from objects or list items while preserving the list envelope and `operationId` / `sendId`.
69
+ `items.id` also works for bare objects and JSONL items. Unknown fields are omitted; parent selections
70
+ win over their children. Unsafe prototype paths are refused, including when paths are passed directly.
71
+
72
+ `createOutputBuffer({ maxOutputBytes })` retains raw output chunks until `flush(write)` or `discard()`.
73
+ Its default limit is 4 MiB; zero disables the limit. It counts actual UTF-8 bytes, including delimiters
74
+ the caller passes, and adds no newlines. Use a new buffer for each command and flush only after resource
75
+ cleanup succeeds; discard on failure. A flush consumes the buffer even when its writer throws.
76
+ The `bytes` property reports the cumulative accepted byte count. A writer failure can leave partial
77
+ output; buffering only guarantees no output before flushing.
78
+
79
+ Optional `{ fields, format: "json" | "jsonl" }` projects before counting bytes. With projection,
80
+ each `data(text)` must contain a complete JSON value or complete JSONL lines; fragments fail before
81
+ buffering. Without projection, arbitrary text chunks work. Hosts can instead project values before
82
+ rendering and buffer the renderer's raw text. For core renderers, pass the line delimiter explicitly
83
+ when adapting `Streams.data`: `data: (text) => buffer.data(text + "\n")`.
84
+
85
+ `createDeadline({ timeoutMs, signal, sleep })` supplies a command signal and `race(body)`. An omitted
86
+ timeout creates no timer; zero aborts synchronously without calling sleep, and the maximum is 2147483647 milliseconds.
87
+ Pass its signal to every cancellable operation and check it before writes. On timeout or parent
88
+ cancellation, `race` waits for the body to settle before rejecting, so a caller can safely close
89
+ resources afterwards. An operation ignoring its signal can delay completion; this helper never
90
+ abandons it in the background. A body's more precise `outcome_unknown` error survives interruption.
91
+ Call `dispose()` in `finally` to remove the timer and parent listener. There are no process signal
92
+ handlers, retries, automatic resource cleanup or HTTP behavior in these helpers.
93
+
63
94
  **The command registry is `@wirecat/cli-core/commands`** — the whole command tree as data, like
64
95
  `rails routes`, for an agent to read instead of `--help` and for generated documentation. It walks
65
96
  the live [Commander](https://github.com/tj/commander.js) tree, so a command built in a loop from a
@@ -0,0 +1,14 @@
1
+ import { type SleepLike } from "./time.js";
2
+ export interface DeadlineOptions {
3
+ timeoutMs?: number;
4
+ signal?: AbortSignal;
5
+ sleep?: SleepLike;
6
+ }
7
+ export interface Deadline {
8
+ readonly signal: AbortSignal;
9
+ /** On abort, waits for the body to settle before throwing; the body must cooperate to finish promptly. */
10
+ race<T>(body: (signal: AbortSignal) => Promise<T>): Promise<T>;
11
+ dispose(): void;
12
+ }
13
+ export declare const createDeadline: ({ timeoutMs, signal, sleep }?: DeadlineOptions) => Deadline;
14
+ //# sourceMappingURL=deadline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deadline.d.ts","sourceRoot":"","sources":["../src/deadline.ts"],"names":[],"mappings":"AACA,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,WAAW,CAAA;AAErD,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AACD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,0GAA0G;IAC1G,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAC9D,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,eAAO,MAAM,cAAc,kCAA8C,eAAe,KAAQ,QA+E/F,CAAA"}
@@ -0,0 +1,88 @@
1
+ import { CliError } from "./errors.js";
2
+ import { realSleep } from "./time.js";
3
+ export const createDeadline = ({ timeoutMs, signal, sleep = realSleep } = {}) => {
4
+ if (timeoutMs !== undefined && (!Number.isSafeInteger(timeoutMs) || timeoutMs < 0 || timeoutMs > 2147483647))
5
+ throw new CliError("validation_error", "timeoutMs must be an integer from zero through 2147483647");
6
+ const controller = new AbortController();
7
+ const timer = new AbortController();
8
+ let disposed = false;
9
+ const abort = (reason) => {
10
+ if (controller.signal.aborted)
11
+ return;
12
+ controller.abort(reason);
13
+ timer.abort();
14
+ signal?.removeEventListener("abort", onAbort);
15
+ };
16
+ const onAbort = () => abort(signal?.reason instanceof CliError ? signal.reason : new CliError("cancelled", "command cancelled"));
17
+ if (signal?.aborted)
18
+ onAbort();
19
+ else
20
+ signal?.addEventListener("abort", onAbort, { once: true });
21
+ const expire = () => abort(new CliError("timeout", "the command did not finish before its deadline", {
22
+ reason: "command_timeout",
23
+ timeoutMs,
24
+ retryable: false,
25
+ }));
26
+ if (timeoutMs === 0)
27
+ expire();
28
+ if (timeoutMs !== undefined && timeoutMs > 0 && !controller.signal.aborted) {
29
+ let waiting;
30
+ try {
31
+ waiting = sleep(timeoutMs, timer.signal, "timeout");
32
+ }
33
+ catch {
34
+ waiting = Promise.reject(new Error("deadline timer failed"));
35
+ }
36
+ void waiting.then(() => {
37
+ if (!disposed && !timer.signal.aborted)
38
+ expire();
39
+ }, () => {
40
+ if (!disposed && !timer.signal.aborted)
41
+ abort(new CliError("configuration_error", "command deadline timer failed"));
42
+ });
43
+ }
44
+ return {
45
+ signal: controller.signal,
46
+ async race(body) {
47
+ if (disposed)
48
+ throw new CliError("validation_error", "deadline is already disposed");
49
+ if (controller.signal.aborted)
50
+ throw controller.signal.reason;
51
+ let interrupt = () => { };
52
+ const interrupted = new Promise((_, reject) => {
53
+ interrupt = () => reject(controller.signal.reason);
54
+ controller.signal.addEventListener("abort", interrupt, { once: true });
55
+ });
56
+ const running = Promise.resolve().then(() => {
57
+ if (controller.signal.aborted)
58
+ throw controller.signal.reason;
59
+ return body(controller.signal);
60
+ });
61
+ try {
62
+ return await Promise.race([running, interrupted]);
63
+ }
64
+ catch (error) {
65
+ if (controller.signal.aborted) {
66
+ // A caller may close resources only after its operation can no longer use them.
67
+ let settled;
68
+ await running.catch((reason) => {
69
+ settled = reason;
70
+ });
71
+ if (settled instanceof CliError && settled.code === "outcome_unknown")
72
+ throw settled;
73
+ throw controller.signal.reason;
74
+ }
75
+ throw error;
76
+ }
77
+ finally {
78
+ controller.signal.removeEventListener("abort", interrupt);
79
+ }
80
+ },
81
+ dispose() {
82
+ disposed = true;
83
+ timer.abort();
84
+ signal?.removeEventListener("abort", onAbort);
85
+ },
86
+ };
87
+ };
88
+ //# sourceMappingURL=deadline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deadline.js","sourceRoot":"","sources":["../src/deadline.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,14 +1,17 @@
1
1
  export { loadConfigFile, saveConfigFile, writeSecurely } from "./config.js";
2
2
  export type { CredentialSource, CredentialStorage, CredentialsOptions, StoredCredential } from "./credentials.js";
3
3
  export { CREDENTIAL_STORAGE, Credentials, keyringService } from "./credentials.js";
4
+ export { createDeadline, type Deadline, type DeadlineOptions } from "./deadline.js";
4
5
  export { CliError, type CliErrorDetails, type ErrorCode, errorCodes, isCliError } from "./errors.js";
5
6
  export { EXIT_CODES, exitCodeFor, GENERIC_FAILURE } from "./exit-codes.js";
6
7
  export { brokenKeyring, type KeyringStore, memoryKeyring, systemKeyring } from "./keyring.js";
7
8
  export { type Logger, noopLogger } from "./logger.js";
8
9
  export { createFileLogger, type FileLogger, type FileLoggerOptions, REDACTED_FIELDS } from "./logging.js";
10
+ export { createOutputBuffer, type OutputBuffer, type OutputBufferOptions } from "./output-buffer.js";
9
11
  export { configFilePath, type Paths, type PathsOptions, pathsAreOverridden, resolvePaths } from "./paths.js";
10
12
  export { indent, type PrettyOptions, renderPretty } from "./pretty.js";
11
13
  export { createRenderer, RENDER_FORMATS, type Renderer, type RendererOptions, type RenderFormat, } from "./renderer.js";
14
+ export { fieldsOf, projectFields } from "./result-fields.js";
12
15
  export { backoffMs, DEFAULT_RETRY, isTransportFailure, type RetryConfig } from "./retry.js";
13
16
  export { singleLine, visibleControls } from "./sanitize.js";
14
17
  export { captureStreams, processStreams, type Streams } from "./streams.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3E,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACjH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACzG,OAAO,EAAE,cAAc,EAAE,KAAK,KAAK,EAAE,KAAK,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,EACL,cAAc,EACd,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,SAAS,EACT,SAAS,EACT,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,SAAS,GACV,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3E,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AACjH,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,cAAc,EAAE,KAAK,QAAQ,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAA;AACnF,OAAO,EAAE,QAAQ,EAAE,KAAK,eAAe,EAAE,KAAK,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,iBAAiB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACzG,OAAO,EAAE,kBAAkB,EAAE,KAAK,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AACpG,OAAO,EAAE,cAAc,EAAE,KAAK,KAAK,EAAE,KAAK,YAAY,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,EACL,cAAc,EACd,cAAc,EACd,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAA;AAC3E,OAAO,EACL,UAAU,EACV,KAAK,cAAc,EACnB,SAAS,EACT,SAAS,EACT,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,SAAS,GACV,MAAM,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -1,13 +1,16 @@
1
1
  export { loadConfigFile, saveConfigFile, writeSecurely } from "./config.js";
2
2
  export { CREDENTIAL_STORAGE, Credentials, keyringService } from "./credentials.js";
3
+ export { createDeadline } from "./deadline.js";
3
4
  export { CliError, errorCodes, isCliError } from "./errors.js";
4
5
  export { EXIT_CODES, exitCodeFor, GENERIC_FAILURE } from "./exit-codes.js";
5
6
  export { brokenKeyring, memoryKeyring, systemKeyring } from "./keyring.js";
6
7
  export { noopLogger } from "./logger.js";
7
8
  export { createFileLogger, REDACTED_FIELDS } from "./logging.js";
9
+ export { createOutputBuffer } from "./output-buffer.js";
8
10
  export { configFilePath, pathsAreOverridden, resolvePaths } from "./paths.js";
9
11
  export { indent, renderPretty } from "./pretty.js";
10
12
  export { createRenderer, RENDER_FORMATS, } from "./renderer.js";
13
+ export { fieldsOf, projectFields } from "./result-fields.js";
11
14
  export { backoffMs, DEFAULT_RETRY, isTransportFailure } from "./retry.js";
12
15
  export { singleLine, visibleControls } from "./sanitize.js";
13
16
  export { captureStreams, processStreams } from "./streams.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3E,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,QAAQ,EAAwC,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAqB,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAe,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAA2C,eAAe,EAAE,MAAM,cAAc,CAAA;AACzG,OAAO,EAAE,cAAc,EAAiC,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAE,MAAM,EAAsB,YAAY,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,EACL,cAAc,EACd,cAAc,GAIf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAoB,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAA;AAC3E,OAAO,EACL,UAAU,EAEV,SAAS,EACT,SAAS,EAIT,SAAS,GACV,MAAM,WAAW,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3E,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,cAAc,EAAuC,MAAM,eAAe,CAAA;AACnF,OAAO,EAAE,QAAQ,EAAwC,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACpG,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC1E,OAAO,EAAE,aAAa,EAAqB,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC7F,OAAO,EAAe,UAAU,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,gBAAgB,EAA2C,eAAe,EAAE,MAAM,cAAc,CAAA;AACzG,OAAO,EAAE,kBAAkB,EAA+C,MAAM,oBAAoB,CAAA;AACpG,OAAO,EAAE,cAAc,EAAiC,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5G,OAAO,EAAE,MAAM,EAAsB,YAAY,EAAE,MAAM,aAAa,CAAA;AACtE,OAAO,EACL,cAAc,EACd,cAAc,GAIf,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC5D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,kBAAkB,EAAoB,MAAM,YAAY,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAgB,MAAM,cAAc,CAAA;AAC3E,OAAO,EACL,UAAU,EAEV,SAAS,EACT,SAAS,EAIT,SAAS,GACV,MAAM,WAAW,CAAA"}
@@ -0,0 +1,16 @@
1
+ import type { RenderFormat } from "./renderer.js";
2
+ export interface OutputBufferOptions {
3
+ maxOutputBytes?: number;
4
+ fields?: string;
5
+ format?: RenderFormat;
6
+ }
7
+ export interface OutputBuffer {
8
+ readonly bytes: number;
9
+ /** Raw output chunks, including any delimiters. Projection requires complete JSON values/JSONL lines. */
10
+ data(text: string): void;
11
+ /** Consumes the buffer once; the writer receives the exact buffered text, without extra newlines. */
12
+ flush(write: (text: string) => void): void;
13
+ discard(): void;
14
+ }
15
+ export declare const createOutputBuffer: ({ maxOutputBytes, fields, format, }?: OutputBufferOptions) => OutputBuffer;
16
+ //# sourceMappingURL=output-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-buffer.d.ts","sourceRoot":"","sources":["../src/output-buffer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAGjD,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,YAAY,CAAA;CACtB;AACD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,yGAAyG;IACzG,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,qGAAqG;IACrG,KAAK,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAA;IAC1C,OAAO,IAAI,IAAI,CAAA;CAChB;AAED,eAAO,MAAM,kBAAkB,yCAI5B,mBAAmB,KAAQ,YA6D7B,CAAA"}
@@ -0,0 +1,69 @@
1
+ import { CliError } from "./errors.js";
2
+ import { fieldsOf, projectFields } from "./result-fields.js";
3
+ export const createOutputBuffer = ({ maxOutputBytes = 4 * 1024 * 1024, fields, format, } = {}) => {
4
+ if (!Number.isSafeInteger(maxOutputBytes) || maxOutputBytes < 0)
5
+ throw new CliError("validation_error", "maxOutputBytes must be a nonnegative whole byte count");
6
+ const paths = fields === undefined ? undefined : fieldsOf(fields);
7
+ if (paths && format !== "json" && format !== "jsonl")
8
+ throw new CliError("validation_error", "field projection requires an explicit JSON or JSONL format");
9
+ let chunks = [];
10
+ let bytes = 0;
11
+ let finished = false;
12
+ const requireActive = () => {
13
+ if (finished)
14
+ throw new CliError("validation_error", "output buffer is already finished");
15
+ };
16
+ return {
17
+ get bytes() {
18
+ return bytes;
19
+ },
20
+ data(text) {
21
+ requireActive();
22
+ let result = text;
23
+ if (paths) {
24
+ const project = (value) => JSON.stringify(projectFields(JSON.parse(value), paths));
25
+ try {
26
+ result =
27
+ format === "jsonl"
28
+ ? text
29
+ .split("\n")
30
+ .map((line) => (line.trim() ? project(line) : line))
31
+ .join("\n")
32
+ : project(text) + (text.endsWith("\n") ? "\n" : "");
33
+ }
34
+ catch (error) {
35
+ if (error instanceof CliError)
36
+ throw error;
37
+ throw new CliError("invalid_response", "field projection requires complete JSON values or JSONL lines", {
38
+ reason: "projection_unavailable",
39
+ retryable: false,
40
+ });
41
+ }
42
+ }
43
+ const size = Buffer.byteLength(result);
44
+ if (!Number.isSafeInteger(bytes + size) || (maxOutputBytes !== 0 && bytes + size > maxOutputBytes))
45
+ throw new CliError("invalid_response", "output exceeds the configured byte limit", {
46
+ reason: "output_limit",
47
+ maxBytes: maxOutputBytes,
48
+ bufferedBytes: bytes,
49
+ retryable: false,
50
+ partialOutput: false,
51
+ });
52
+ bytes += size;
53
+ chunks.push(result);
54
+ },
55
+ flush(write) {
56
+ requireActive();
57
+ finished = true;
58
+ const output = chunks;
59
+ chunks = [];
60
+ for (const text of output)
61
+ write(text);
62
+ },
63
+ discard() {
64
+ finished = true;
65
+ chunks = [];
66
+ },
67
+ };
68
+ };
69
+ //# sourceMappingURL=output-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-buffer.js","sourceRoot":"","sources":["../src/output-buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const fieldsOf: (value: string) => string[];
2
+ /** Projects item data while retaining the list envelope and operation identifiers. */
3
+ export declare const projectFields: (value: unknown, fields: readonly string[]) => unknown;
4
+ //# sourceMappingURL=result-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-fields.d.ts","sourceRoot":"","sources":["../src/result-fields.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,QAAQ,UAAW,MAAM,KAAG,MAAM,EAI9C,CAAA;AA6BD,sFAAsF;AACtF,eAAO,MAAM,aAAa,UAAW,OAAO,UAAU,SAAS,MAAM,EAAE,KAAG,OAMzE,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { CliError } from "./errors.js";
2
+ const forbidden = new Set(["__proto__", "prototype", "constructor"]);
3
+ const validate = (paths) => {
4
+ if (paths.length === 0 ||
5
+ paths.length > 128 ||
6
+ paths.some((path) => path.length > 256 ||
7
+ !/^[A-Za-z][A-Za-z0-9_]*(?:\.[A-Za-z][A-Za-z0-9_]*)*$/.test(path) ||
8
+ path.split(".").some((part) => forbidden.has(part))))
9
+ throw new CliError("validation_error", "--fields takes comma-separated field paths, for example id,locator,text");
10
+ };
11
+ export const fieldsOf = (value) => {
12
+ const paths = value.split(",").map((one) => one.trim());
13
+ validate(paths);
14
+ return [...new Set(paths)];
15
+ };
16
+ const object = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
17
+ const select = (value, paths, item = false) => {
18
+ if (!object(value))
19
+ return value;
20
+ const fields = item ? paths.map((path) => (path.startsWith("items.") ? path.slice(6) : path)) : paths;
21
+ const result = {};
22
+ for (const path of fields.filter((one) => !fields.some((parent) => parent !== one && one.startsWith(`${parent}.`)))) {
23
+ const parts = path.split(".");
24
+ let found = value;
25
+ for (const part of parts) {
26
+ if (!object(found) || !Object.hasOwn(found, part)) {
27
+ found = undefined;
28
+ break;
29
+ }
30
+ found = found[part];
31
+ }
32
+ if (found === undefined)
33
+ continue;
34
+ let target = result;
35
+ for (const part of parts.slice(0, -1)) {
36
+ if (!object(target[part]))
37
+ target[part] = {};
38
+ target = target[part];
39
+ }
40
+ target[parts.at(-1)] = found;
41
+ }
42
+ for (const name of ["operationId", "sendId"])
43
+ if (Object.hasOwn(value, name))
44
+ result[name] = value[name];
45
+ return result;
46
+ };
47
+ /** Projects item data while retaining the list envelope and operation identifiers. */
48
+ export const projectFields = (value, fields) => {
49
+ validate(fields);
50
+ if (Array.isArray(value))
51
+ return value.map((item) => select(item, fields, true));
52
+ if (object(value) && Array.isArray(value.items))
53
+ return { ...value, items: value.items.map((item) => select(item, fields, true)) };
54
+ return select(value, fields, object(value) && !Object.hasOwn(value, "items"));
55
+ };
56
+ //# sourceMappingURL=result-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-fields.js","sourceRoot":"","sources":["../src/result-fields.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wirecat/cli-core",
3
- "version": "0.19.1",
3
+ "version": "0.19.3",
4
4
  "description": "The parts every command line tool needs: output modes, terminal rendering, error model, exit codes, credentials, clocks",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Viacheslav Ptsarev",