@intentic/base 1.331.0 → 1.333.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 (61) hide show
  1. package/README.md +50 -7
  2. package/dist/async.d.ts +32 -2
  3. package/dist/async.d.ts.map +1 -1
  4. package/dist/async.js +146 -27
  5. package/dist/async.js.map +1 -1
  6. package/dist/format.d.ts +1 -1
  7. package/dist/format.d.ts.map +1 -1
  8. package/dist/format.js +1 -2
  9. package/dist/format.js.map +1 -1
  10. package/dist/fuzzy.js +1 -1
  11. package/dist/fuzzy.js.map +1 -1
  12. package/dist/git/commands.d.ts.map +1 -1
  13. package/dist/git/commands.js +2 -2
  14. package/dist/git/commands.js.map +1 -1
  15. package/dist/git/runner.d.ts.map +1 -1
  16. package/dist/git/runner.js +3 -2
  17. package/dist/git/runner.js.map +1 -1
  18. package/dist/held.d.ts +22 -0
  19. package/dist/held.d.ts.map +1 -1
  20. package/dist/held.js +83 -0
  21. package/dist/held.js.map +1 -1
  22. package/dist/lifecycle.d.ts.map +1 -1
  23. package/dist/lifecycle.js +2 -6
  24. package/dist/lifecycle.js.map +1 -1
  25. package/dist/node/contained.d.ts +10 -0
  26. package/dist/node/contained.d.ts.map +1 -0
  27. package/dist/node/contained.js +37 -0
  28. package/dist/node/contained.js.map +1 -0
  29. package/dist/node/fs.d.ts +14 -1
  30. package/dist/node/fs.d.ts.map +1 -1
  31. package/dist/node/fs.js +63 -38
  32. package/dist/node/fs.js.map +1 -1
  33. package/dist/node/json-lines.d.ts +5 -0
  34. package/dist/node/json-lines.d.ts.map +1 -0
  35. package/dist/node/json-lines.js +39 -0
  36. package/dist/node/json-lines.js.map +1 -0
  37. package/dist/node/process.d.ts +71 -0
  38. package/dist/node/process.d.ts.map +1 -0
  39. package/dist/node/process.js +338 -0
  40. package/dist/node/process.js.map +1 -0
  41. package/dist/node/web-stream.d.ts +2 -0
  42. package/dist/node/web-stream.d.ts.map +1 -1
  43. package/dist/node/web-stream.js +18 -0
  44. package/dist/node/web-stream.js.map +1 -1
  45. package/dist/text/escape.d.ts +4 -0
  46. package/dist/text/escape.d.ts.map +1 -0
  47. package/dist/text/escape.js +11 -0
  48. package/dist/text/escape.js.map +1 -0
  49. package/dist/text/one-line.d.ts +5 -0
  50. package/dist/text/one-line.d.ts.map +1 -0
  51. package/dist/text/one-line.js +18 -0
  52. package/dist/text/one-line.js.map +1 -0
  53. package/dist/web/capped-read.d.ts +14 -0
  54. package/dist/web/capped-read.d.ts.map +1 -0
  55. package/dist/web/capped-read.js +42 -0
  56. package/dist/web/capped-read.js.map +1 -0
  57. package/dist/web/fetch-json.d.ts +34 -0
  58. package/dist/web/fetch-json.d.ts.map +1 -0
  59. package/dist/web/fetch-json.js +87 -0
  60. package/dist/web/fetch-json.js.map +1 -0
  61. package/package.json +80 -3
@@ -0,0 +1,5 @@
1
+ import type { Readable } from "node:stream";
2
+ export declare function jsonLinesOf(chunks: AsyncIterable<Uint8Array | string>): AsyncGenerator<string>;
3
+ export declare const jsonLines: (stream: Readable) => AsyncGenerator<string>;
4
+ export declare function parsedJsonLines(chunks: AsyncIterable<Uint8Array | string>, onBadLine?: (line: string) => void): AsyncGenerator<unknown>;
5
+ //# sourceMappingURL=json-lines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-lines.d.ts","sourceRoot":"","sources":["../../src/node/json-lines.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmB5C,wBAAuB,WAAW,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAsBrG;AAGD,eAAO,MAAM,SAAS,WAAY,QAAQ,KAAG,cAAc,CAAC,MAAM,CAEL,CAAC;AAI9D,wBAAuB,eAAe,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,GAAG,MAAM,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,CAW9I"}
@@ -0,0 +1,39 @@
1
+ const record = (line) => {
2
+ const text = line.endsWith("\r") ? line.slice(0, -1) : line;
3
+ return text.trim() === "" ? undefined : text;
4
+ };
5
+ export async function* jsonLinesOf(chunks) {
6
+ const decoder = new TextDecoder();
7
+ let buffer = "";
8
+ for await (const chunk of chunks) {
9
+ buffer += chunk instanceof Uint8Array ? decoder.decode(chunk, { stream: true }) : chunk;
10
+ let start = 0;
11
+ for (let newline = buffer.indexOf("\n"); newline !== -1; newline = buffer.indexOf("\n", start)) {
12
+ const line = record(buffer.slice(start, newline));
13
+ start = newline + 1;
14
+ if (line !== undefined) {
15
+ yield line;
16
+ }
17
+ }
18
+ buffer = buffer.slice(start);
19
+ }
20
+ const last = record(buffer + decoder.decode());
21
+ if (last !== undefined) {
22
+ yield last;
23
+ }
24
+ }
25
+ export const jsonLines = (stream) => jsonLinesOf(stream);
26
+ export async function* parsedJsonLines(chunks, onBadLine) {
27
+ for await (const line of jsonLinesOf(chunks)) {
28
+ let value;
29
+ try {
30
+ value = JSON.parse(line);
31
+ }
32
+ catch {
33
+ onBadLine?.(line);
34
+ continue;
35
+ }
36
+ yield value;
37
+ }
38
+ }
39
+ //# sourceMappingURL=json-lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-lines.js","sourceRoot":"","sources":["../../src/node/json-lines.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,GAAG,CAAC,IAAY,EAAsB,EAAE;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,OAAO,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACjD,CAAC,CAAC;AAGF,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,WAAW,CAAC,MAA0C;IAGzE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;IAClC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,YAAY,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QACxF,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,KAAK,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;YAClD,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC;YACpB,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACrB,MAAM,IAAI,CAAC;YACf,CAAC;QACL,CAAC;QAED,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC/C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC;IACf,CAAC;AACL,CAAC;AAGD,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,MAAgB,EAA0B,EAAE,CAElE,WAAW,CAAC,MAA4C,CAAC,CAAC;AAI9D,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,eAAe,CAAC,MAA0C,EAAE,SAAkC;IACjH,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3C,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACL,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC;YAClB,SAAS;QACb,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { type ChildProcess } from "node:child_process";
2
+ export declare const DEFAULT_MAX_OUTPUT: number;
3
+ export interface CollectedOutput {
4
+ readonly text: string;
5
+ readonly dropped: number;
6
+ }
7
+ export interface RunOptions {
8
+ readonly cwd?: string | undefined;
9
+ readonly env?: NodeJS.ProcessEnv | undefined;
10
+ readonly timeoutMs?: number | undefined;
11
+ readonly signal?: AbortSignal | undefined;
12
+ readonly input?: string | Buffer | undefined;
13
+ readonly maxOutput?: number | undefined;
14
+ readonly killGraceMs?: number | undefined;
15
+ readonly onSpawn?: ((child: ChildProcess) => void) | undefined;
16
+ }
17
+ export interface ProcessResult<Out = CollectedOutput> {
18
+ readonly exitCode: number | null;
19
+ readonly exitSignal: NodeJS.Signals | null;
20
+ readonly stdout: Out;
21
+ readonly stderr: CollectedOutput;
22
+ readonly timedOut: boolean;
23
+ readonly aborted: boolean;
24
+ readonly lingering: boolean;
25
+ readonly spawnError?: Error;
26
+ }
27
+ export interface OutputSink<Out> {
28
+ readonly write: (chunk: Buffer) => void;
29
+ readonly end: () => Out;
30
+ }
31
+ export interface CollectedBytes {
32
+ readonly bytes: Buffer;
33
+ readonly dropped: number;
34
+ }
35
+ export declare const textCollector: (maxOutput: number) => OutputSink<CollectedOutput>;
36
+ export declare const clipText: (text: string, maxOutput: number) => CollectedOutput;
37
+ export declare const stopProcessTree: (child: ChildProcess, killGraceMs?: number) => Promise<void>;
38
+ export declare const runBounded: (command: string, args: readonly string[], options?: RunOptions) => Promise<ProcessResult>;
39
+ export declare const runBoundedBytes: (command: string, args: readonly string[], options: RunOptions & {
40
+ readonly maxStdoutBytes: number;
41
+ }) => Promise<ProcessResult<CollectedBytes>>;
42
+ export declare class ProcessError extends Error {
43
+ readonly code: number | string | undefined;
44
+ readonly killed: boolean;
45
+ readonly signal: NodeJS.Signals | null;
46
+ readonly stdout: string;
47
+ readonly stderr: string;
48
+ readonly timedOut: boolean;
49
+ constructor(command: string, args: readonly string[], result: ProcessResult);
50
+ }
51
+ export declare const execBounded: (command: string, args: readonly string[], options?: RunOptions) => Promise<{
52
+ readonly stdout: string;
53
+ readonly stderr: string;
54
+ }>;
55
+ export interface SyncRunOptions {
56
+ readonly cwd?: string | undefined;
57
+ readonly env?: NodeJS.ProcessEnv | undefined;
58
+ readonly timeoutMs: number;
59
+ readonly input?: string | Buffer | undefined;
60
+ readonly maxOutput?: number | undefined;
61
+ readonly killGraceMs?: number | undefined;
62
+ readonly output?: "pipe" | "ignore" | undefined;
63
+ }
64
+ export interface SyncProcessResult<Out = CollectedOutput> extends ProcessResult<Out> {
65
+ readonly overflowed: boolean;
66
+ }
67
+ export declare const runBoundedSync: (command: string, args: readonly string[], options: SyncRunOptions) => SyncProcessResult;
68
+ export declare const runBoundedSyncBytes: (command: string, args: readonly string[], options: SyncRunOptions & {
69
+ readonly maxStdoutBytes: number;
70
+ }) => SyncProcessResult<CollectedBytes>;
71
+ //# sourceMappingURL=process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.d.ts","sourceRoot":"","sources":["../../src/node/process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,338 @@
1
+ import { spawn, spawnSync } from "node:child_process";
2
+ import { StringDecoder } from "node:string_decoder";
3
+ import { sleep } from "../async.js";
4
+ import { errnoCode } from "../errors.js";
5
+ export const DEFAULT_MAX_OUTPUT = 8 * 1024 * 1024;
6
+ const PIPE_QUIET_MS = 1_000;
7
+ const PIPE_LINGER_MS = 5_000;
8
+ const PIPE_POLL_MS = 50;
9
+ const KILL_GRACE_MS = 2_000;
10
+ export const textCollector = (maxOutput) => {
11
+ const decoder = new StringDecoder("utf8");
12
+ const half = Math.floor(maxOutput / 2);
13
+ let head = "";
14
+ let tail = "";
15
+ let dropped = 0;
16
+ const take = (text) => {
17
+ const room = Math.max(half - head.length, 0);
18
+ head += text.slice(0, room);
19
+ tail += text.slice(room);
20
+ if (tail.length > half) {
21
+ dropped += tail.length - half;
22
+ tail = tail.slice(-half);
23
+ }
24
+ };
25
+ return {
26
+ write: (chunk) => take(decoder.write(chunk)),
27
+ end: () => {
28
+ take(decoder.end());
29
+ return { text: dropped === 0 ? `${head}${tail}` : `${head}\n… [${dropped} characters cut] …\n${tail}`, dropped };
30
+ },
31
+ };
32
+ };
33
+ export const clipText = (text, maxOutput) => {
34
+ if (text.length <= maxOutput) {
35
+ return { text, dropped: 0 };
36
+ }
37
+ const half = Math.floor(maxOutput / 2);
38
+ const dropped = text.length - half * 2;
39
+ return { text: `${text.slice(0, half)}\n… [${dropped} characters cut] …\n${text.slice(-half)}`, dropped };
40
+ };
41
+ const byteCollector = (limit) => {
42
+ const chunks = [];
43
+ let kept = 0;
44
+ let dropped = 0;
45
+ return {
46
+ write: (chunk) => {
47
+ const room = Math.max(limit - kept, 0);
48
+ if (room > 0) {
49
+ const part = chunk.length <= room ? chunk : chunk.subarray(0, room);
50
+ chunks.push(part);
51
+ kept += part.length;
52
+ }
53
+ dropped += chunk.length - Math.min(chunk.length, room);
54
+ },
55
+ end: () => ({ bytes: Buffer.concat(chunks), dropped }),
56
+ };
57
+ };
58
+ const delay = (ms) => sleep(ms, { unref: true });
59
+ const signalGroup = (pid, signal) => {
60
+ try {
61
+ process.kill(-pid, signal);
62
+ }
63
+ catch (error) {
64
+ if (errnoCode(error) !== "ESRCH") {
65
+ throw error;
66
+ }
67
+ }
68
+ };
69
+ const GROUP_POLL_MS = 25;
70
+ const groupAlive = (pid) => {
71
+ try {
72
+ process.kill(-pid, 0);
73
+ return true;
74
+ }
75
+ catch (error) {
76
+ return errnoCode(error) !== "ESRCH";
77
+ }
78
+ };
79
+ export const stopProcessTree = async (child, killGraceMs = KILL_GRACE_MS) => {
80
+ const pid = child.pid;
81
+ if (pid === undefined) {
82
+ return;
83
+ }
84
+ if (process.platform === "win32") {
85
+ await new Promise((resolve) => {
86
+ spawn("taskkill", ["/pid", String(pid), "/T", "/F"], { stdio: "ignore", windowsHide: true })
87
+ .once("exit", () => resolve())
88
+ .once("error", () => resolve());
89
+ });
90
+ child.kill();
91
+ return;
92
+ }
93
+ signalGroup(pid, "SIGTERM");
94
+ const until = Date.now() + killGraceMs;
95
+ while (groupAlive(pid) && Date.now() < until) {
96
+ await delay(GROUP_POLL_MS);
97
+ }
98
+ signalGroup(pid, "SIGKILL");
99
+ };
100
+ const spawnOptions = (options) => {
101
+ const spawned = {
102
+ stdio: [options.input === undefined ? "ignore" : "pipe", "pipe", "pipe"],
103
+ detached: process.platform !== "win32",
104
+ windowsHide: true,
105
+ };
106
+ if (options.cwd !== undefined) {
107
+ spawned.cwd = options.cwd;
108
+ }
109
+ if (options.env !== undefined) {
110
+ spawned.env = options.env;
111
+ }
112
+ return spawned;
113
+ };
114
+ const start = (command, args, options) => {
115
+ try {
116
+ return spawn(command, [...args], spawnOptions(options));
117
+ }
118
+ catch (error) {
119
+ return error instanceof Error ? error : new Error(String(error));
120
+ }
121
+ };
122
+ const stopperFor = (child, options) => {
123
+ let stopping;
124
+ let timedOut = false;
125
+ let aborted = false;
126
+ const stop = () => {
127
+ stopping ??= stopProcessTree(child, options.killGraceMs);
128
+ };
129
+ const deadline = options.timeoutMs === undefined
130
+ ? undefined
131
+ : setTimeout(() => {
132
+ timedOut = true;
133
+ stop();
134
+ }, options.timeoutMs);
135
+ const onAbort = () => {
136
+ aborted = true;
137
+ stop();
138
+ };
139
+ options.signal?.addEventListener("abort", onAbort, { once: true });
140
+ return {
141
+ timedOut: () => timedOut,
142
+ aborted: () => aborted,
143
+ stopped: async () => {
144
+ await stopping;
145
+ },
146
+ dispose: () => {
147
+ clearTimeout(deadline);
148
+ options.signal?.removeEventListener("abort", onAbort);
149
+ },
150
+ };
151
+ };
152
+ const drain = async (child, closed, lastData) => {
153
+ const exitedAt = Date.now();
154
+ for (;;) {
155
+ if (await Promise.race([closed, delay(PIPE_POLL_MS).then(() => false)])) {
156
+ return true;
157
+ }
158
+ const now = Date.now();
159
+ if (now - lastData() >= PIPE_QUIET_MS || now - exitedAt >= PIPE_LINGER_MS) {
160
+ child.stdout?.destroy();
161
+ child.stderr?.destroy();
162
+ return false;
163
+ }
164
+ }
165
+ };
166
+ const run = async (command, args, options, stdout) => {
167
+ const stderr = textCollector(options.maxOutput ?? DEFAULT_MAX_OUTPUT);
168
+ const failed = (spawnError, aborted) => ({
169
+ exitCode: null,
170
+ exitSignal: null,
171
+ stdout: stdout.end(),
172
+ stderr: stderr.end(),
173
+ timedOut: false,
174
+ aborted,
175
+ lingering: false,
176
+ spawnError,
177
+ });
178
+ if (options.signal?.aborted === true) {
179
+ return failed(new Error(`${command} was not started: the call was aborted`), true);
180
+ }
181
+ const child = start(command, args, options);
182
+ if (child instanceof Error) {
183
+ return failed(child, false);
184
+ }
185
+ options.onSpawn?.(child);
186
+ let lastData = Date.now();
187
+ const heard = (sink) => (chunk) => {
188
+ lastData = Date.now();
189
+ sink.write(chunk);
190
+ };
191
+ child.stdout?.on("data", heard(stdout));
192
+ child.stderr?.on("data", heard(stderr));
193
+ if (options.input !== undefined && child.stdin !== null) {
194
+ child.stdin.on("error", () => undefined);
195
+ child.stdin.end(options.input);
196
+ }
197
+ const closed = new Promise((resolve) => child.once("close", () => resolve(true)));
198
+ const stopper = stopperFor(child, options);
199
+ const ended = await new Promise((resolve) => {
200
+ child.once("exit", (code, signal) => resolve({ code, signal }));
201
+ child.once("error", (error) => resolve(error));
202
+ });
203
+ stopper.dispose();
204
+ if (ended instanceof Error) {
205
+ return failed(ended, stopper.aborted());
206
+ }
207
+ await stopper.stopped();
208
+ const drained = await drain(child, closed, () => lastData);
209
+ return {
210
+ exitCode: ended.code,
211
+ exitSignal: ended.signal,
212
+ stdout: stdout.end(),
213
+ stderr: stderr.end(),
214
+ timedOut: stopper.timedOut(),
215
+ aborted: stopper.aborted(),
216
+ lingering: !drained,
217
+ };
218
+ };
219
+ export const runBounded = async (command, args, options = {}) => await run(command, args, options, textCollector(options.maxOutput ?? DEFAULT_MAX_OUTPUT));
220
+ export const runBoundedBytes = async (command, args, options) => await run(command, args, options, byteCollector(options.maxStdoutBytes));
221
+ export class ProcessError extends Error {
222
+ code;
223
+ killed;
224
+ signal;
225
+ stdout;
226
+ stderr;
227
+ timedOut;
228
+ constructor(command, args, result) {
229
+ const line = [command, ...args].join(" ");
230
+ const reason = result.spawnError !== undefined
231
+ ? result.spawnError.message
232
+ : result.timedOut
233
+ ? "it ran past its deadline and was stopped"
234
+ : result.aborted
235
+ ? "it was aborted"
236
+ : `exit ${result.exitCode ?? result.exitSignal ?? "unknown"}`;
237
+ super(`Command failed: ${line} (${reason})${result.stderr.text.trim() === "" ? "" : `\n${result.stderr.text.trimEnd()}`}`, (result.spawnError === undefined ? {} : { cause: result.spawnError }));
238
+ this.name = "ProcessError";
239
+ this.code = result.spawnError !== undefined ? errnoCode(result.spawnError) : (result.exitCode ?? undefined);
240
+ this.killed = result.timedOut || result.aborted;
241
+ this.signal = result.exitSignal;
242
+ this.stdout = result.stdout.text;
243
+ this.stderr = result.stderr.text;
244
+ this.timedOut = result.timedOut;
245
+ }
246
+ }
247
+ export const execBounded = async (command, args, options = {}) => {
248
+ const result = await runBounded(command, args, options);
249
+ if (result.exitCode !== 0) {
250
+ throw new ProcessError(command, args, result);
251
+ }
252
+ return { stdout: result.stdout.text, stderr: result.stderr.text };
253
+ };
254
+ const WINDOWS_SWEEP_TIMEOUT_MS = 15_000;
255
+ const sleepSync = (ms) => {
256
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
257
+ };
258
+ const windowsDescendantSweep = (pid, since) => [
259
+ "$ErrorActionPreference='SilentlyContinue'",
260
+ `$since=[DateTime]::Parse('${new Date(since - 1_000).toISOString()}').ToUniversalTime()`,
261
+ "$all=@(Get-CimInstance Win32_Process | Where-Object { $_.CreationDate.ToUniversalTime() -ge $since })",
262
+ `$queue=[System.Collections.Generic.Queue[uint32]]::new(); $queue.Enqueue(${pid})`,
263
+ "while($queue.Count -gt 0){ $parent=$queue.Dequeue(); foreach($p in $all){ if($p.ParentProcessId -eq $parent){ $queue.Enqueue($p.ProcessId); Stop-Process -Id $p.ProcessId -Force } } }",
264
+ ].join("; ");
265
+ const stopGroupSync = (pid, since, killGraceMs) => {
266
+ if (process.platform === "win32") {
267
+ const powershell = `${process.env["SystemRoot"] ?? "C:\\Windows"}\\System32\\WindowsPowerShell\\v1.0\\powershell.exe`;
268
+ spawnSync(powershell, ["-NoProfile", "-NonInteractive", "-Command", windowsDescendantSweep(pid, since)], {
269
+ stdio: "ignore",
270
+ windowsHide: true,
271
+ timeout: WINDOWS_SWEEP_TIMEOUT_MS,
272
+ });
273
+ return;
274
+ }
275
+ signalGroup(pid, "SIGTERM");
276
+ const until = Date.now() + killGraceMs;
277
+ while (groupAlive(pid) && Date.now() < until) {
278
+ sleepSync(GROUP_POLL_MS);
279
+ }
280
+ signalGroup(pid, "SIGKILL");
281
+ };
282
+ const syncSpawnOptions = (options, maxOutput) => {
283
+ const output = options.output === "ignore" ? "ignore" : "pipe";
284
+ const spawned = {
285
+ stdio: [options.input === undefined ? "ignore" : "pipe", output, output],
286
+ detached: process.platform !== "win32",
287
+ windowsHide: true,
288
+ timeout: options.timeoutMs,
289
+ maxBuffer: Math.max(maxOutput * 4, 1024 * 1024),
290
+ };
291
+ if (options.input !== undefined) {
292
+ spawned.input = options.input;
293
+ }
294
+ if (options.cwd !== undefined) {
295
+ spawned.cwd = options.cwd;
296
+ }
297
+ if (options.env !== undefined) {
298
+ spawned.env = options.env;
299
+ }
300
+ return spawned;
301
+ };
302
+ const startSync = (command, args, spawned) => {
303
+ try {
304
+ return spawnSync(command, [...args], spawned);
305
+ }
306
+ catch (error) {
307
+ return { pid: 0, stdout: null, stderr: null, status: null, signal: null, error: error instanceof Error ? error : new Error(String(error)) };
308
+ }
309
+ };
310
+ const bytesOf = (stream) => (Buffer.isBuffer(stream) ? stream : undefined);
311
+ const runSync = (command, args, options, collect) => {
312
+ const maxOutput = options.maxOutput ?? DEFAULT_MAX_OUTPUT;
313
+ const since = Date.now();
314
+ const result = startSync(command, args, syncSpawnOptions(options, maxOutput));
315
+ const code = result.error === undefined ? undefined : errnoCode(result.error);
316
+ const timedOut = code === "ETIMEDOUT";
317
+ const overflowed = code === "ENOBUFS";
318
+ if ((timedOut || overflowed) && result.pid > 0) {
319
+ stopGroupSync(result.pid, since, options.killGraceMs ?? KILL_GRACE_MS);
320
+ }
321
+ const ran = {
322
+ exitCode: result.status,
323
+ exitSignal: result.signal,
324
+ stdout: collect(bytesOf(result.stdout)),
325
+ stderr: clipText(bytesOf(result.stderr)?.toString("utf8") ?? "", maxOutput),
326
+ timedOut,
327
+ aborted: false,
328
+ lingering: timedOut && result.status !== null,
329
+ overflowed,
330
+ };
331
+ return result.error === undefined || timedOut || overflowed ? ran : { ...ran, spawnError: result.error };
332
+ };
333
+ export const runBoundedSync = (command, args, options) => runSync(command, args, options, (bytes) => clipText(bytes?.toString("utf8") ?? "", options.maxOutput ?? DEFAULT_MAX_OUTPUT));
334
+ export const runBoundedSyncBytes = (command, args, options) => runSync(command, args, options, (bytes) => {
335
+ const whole = bytes ?? Buffer.alloc(0);
336
+ return { bytes: whole.subarray(0, options.maxStdoutBytes), dropped: Math.max(whole.length - options.maxStdoutBytes, 0) };
337
+ });
338
+ //# sourceMappingURL=process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process.js","sourceRoot":"","sources":["../../src/node/process.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,6 @@
1
1
  import type { ReadableStream as NodeReadableStream } from "node:stream/web";
2
2
  export declare const nodeStream: <T>(stream: ReadableStream<T>) => NodeReadableStream<T>;
3
3
  export declare const webStream: <T>(stream: NodeReadableStream<T>) => ReadableStream<T>;
4
+ export declare function chunksOf<T>(stream: ReadableStream<T>): AsyncGenerator<T>;
5
+ export declare const webJsonLines: (stream: ReadableStream<Uint8Array | string>) => AsyncGenerator<string>;
4
6
  //# sourceMappingURL=web-stream.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-stream.d.ts","sourceRoot":"","sources":["../../src/node/web-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAI5E,eAAO,MAAM,UAAU,GAAI,CAAC,UAAU,cAAc,CAAC,CAAC,CAAC,KAAG,kBAAkB,CAAC,CAAC,CAA+C,CAAC;AAE9H,eAAO,MAAM,SAAS,GAAI,CAAC,UAAU,kBAAkB,CAAC,CAAC,CAAC,KAAG,cAAc,CAAC,CAAC,CAA2C,CAAC"}
1
+ {"version":3,"file":"web-stream.d.ts","sourceRoot":"","sources":["../../src/node/web-stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,IAAI,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAK5E,eAAO,MAAM,UAAU,GAAI,CAAC,UAAU,cAAc,CAAC,CAAC,CAAC,KAAG,kBAAkB,CAAC,CAAC,CAA+C,CAAC;AAE9H,eAAO,MAAM,SAAS,GAAI,CAAC,UAAU,kBAAkB,CAAC,CAAC,CAAC,KAAG,cAAc,CAAC,CAAC,CAA2C,CAAC;AAIzH,wBAAuB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAgB/E;AAID,eAAO,MAAM,YAAY,WAAY,cAAc,CAAC,UAAU,GAAG,MAAM,CAAC,KAAG,cAAc,CAAC,MAAM,CAAkC,CAAC"}
@@ -1,3 +1,21 @@
1
+ import { jsonLinesOf } from "./json-lines.js";
1
2
  export const nodeStream = (stream) => stream;
2
3
  export const webStream = (stream) => stream;
4
+ export async function* chunksOf(stream) {
5
+ const reader = stream.getReader();
6
+ try {
7
+ for (;;) {
8
+ const { done, value } = await reader.read();
9
+ if (done) {
10
+ return;
11
+ }
12
+ yield value;
13
+ }
14
+ }
15
+ finally {
16
+ await reader.cancel().catch(() => undefined);
17
+ reader.releaseLock();
18
+ }
19
+ }
20
+ export const webJsonLines = (stream) => jsonLinesOf(chunksOf(stream));
3
21
  //# sourceMappingURL=web-stream.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-stream.js","sourceRoot":"","sources":["../../src/node/web-stream.ts"],"names":[],"mappings":"AAIA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,MAAyB,EAAyB,EAAE,CAAC,MAA0C,CAAC;AAE9H,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,MAA6B,EAAqB,EAAE,CAAC,MAAsC,CAAC"}
1
+ {"version":3,"file":"web-stream.js","sourceRoot":"","sources":["../../src/node/web-stream.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAI9C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAI,MAAyB,EAAyB,EAAE,CAAC,MAA0C,CAAC;AAE9H,MAAM,CAAC,MAAM,SAAS,GAAG,CAAI,MAA6B,EAAqB,EAAE,CAAC,MAAsC,CAAC;AAIzH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAAI,MAAyB;IACxD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;IAClC,IAAI,CAAC;QACD,SAAS,CAAC;YAEN,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACP,OAAO;YACX,CAAC;YACD,MAAM,KAAK,CAAC;QAChB,CAAC;IACL,CAAC;YAAS,CAAC;QAEP,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,CAAC,WAAW,EAAE,CAAC;IACzB,CAAC;AACL,CAAC;AAID,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAA2C,EAA0B,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const escapeHtml: (text: string) => string;
2
+ export declare const escapeRegExp: (text: string) => string;
3
+ export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
4
+ //# sourceMappingURL=escape.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escape.d.ts","sourceRoot":"","sources":["../../src/text/escape.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,MAAuE,CAAC;AAGlH,eAAO,MAAM,YAAY,SAAU,MAAM,KAAG,MAAiE,CAAC;AAG9G,eAAO,MAAM,QAAQ,UAAW,OAAO,KAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAyE,CAAC"}
@@ -0,0 +1,11 @@
1
+ const HTML_ENTITIES = new Map([
2
+ ["&", "&amp;"],
3
+ ["<", "&lt;"],
4
+ [">", "&gt;"],
5
+ ['"', "&quot;"],
6
+ ["'", "&#39;"],
7
+ ]);
8
+ export const escapeHtml = (text) => text.replace(/[&<>"']/g, (ch) => HTML_ENTITIES.get(ch) ?? ch);
9
+ export const escapeRegExp = (text) => text.replaceAll(/[.*+?^${}()|[\]\\]/g, String.raw `\$&`);
10
+ export const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
11
+ //# sourceMappingURL=escape.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escape.js","sourceRoot":"","sources":["../../src/text/escape.ts"],"names":[],"mappings":"AAIA,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC1B,CAAC,GAAG,EAAE,OAAO,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,MAAM,CAAC;IACb,CAAC,GAAG,EAAE,QAAQ,CAAC;IACf,CAAC,GAAG,EAAE,OAAO,CAAC;CACjB,CAAC,CAAC;AAIH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAGlH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG,CAAA,KAAK,CAAC,CAAC;AAG9G,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export interface OneLineOptions {
2
+ readonly ellipsis?: string | false;
3
+ }
4
+ export declare const oneLine: (text: string, max?: number, options?: OneLineOptions) => string;
5
+ //# sourceMappingURL=one-line.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"one-line.d.ts","sourceRoot":"","sources":["../../src/text/one-line.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,cAAc;IAE3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;CACtC;AAiBD,eAAO,MAAM,OAAO,SAAU,MAAM,0BAA2C,cAAc,KAAQ,MAUpG,CAAC"}
@@ -0,0 +1,18 @@
1
+ const SPACE = /\s+/gu;
2
+ const INVISIBLE = /[\p{Cc}\p{Cf}]/gu;
3
+ const cutAt = (text, units) => {
4
+ const high = text.charCodeAt(units - 1);
5
+ return text.slice(0, high >= 0xd800 && high <= 0xdbff ? units - 1 : units);
6
+ };
7
+ export const oneLine = (text, max = Number.POSITIVE_INFINITY, options = {}) => {
8
+ const flat = text.replaceAll(SPACE, " ").replaceAll(INVISIBLE, "").replaceAll(SPACE, " ").trim();
9
+ if (flat.length <= max) {
10
+ return flat;
11
+ }
12
+ const ellipsis = options.ellipsis === false ? "" : (options.ellipsis ?? "…");
13
+ if (ellipsis.length >= max) {
14
+ return cutAt(flat, Math.max(0, max));
15
+ }
16
+ return `${cutAt(flat, max - ellipsis.length).trimEnd()}${ellipsis}`;
17
+ };
18
+ //# sourceMappingURL=one-line.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"one-line.js","sourceRoot":"","sources":["../../src/text/one-line.ts"],"names":[],"mappings":"AAWA,MAAM,KAAK,GAAG,OAAO,CAAC;AAGtB,MAAM,SAAS,GAAG,kBAAkB,CAAC;AAGrC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE;IAClD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/E,CAAC,CAAC;AAKF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,GAAG,GAAG,MAAM,CAAC,iBAAiB,EAAE,OAAO,GAAmB,EAAE,EAAU,EAAE;IAC1G,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACjG,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC;IAC7E,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;AACxE,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface CappedBody {
2
+ readonly bytes: Uint8Array;
3
+ readonly truncated: boolean;
4
+ }
5
+ export interface CappedText {
6
+ readonly text: string;
7
+ readonly truncated: boolean;
8
+ }
9
+ export interface CappedReadOptions {
10
+ readonly timeoutMs?: number;
11
+ }
12
+ export declare const readCappedBytes: (response: Response, maxBytes: number, options?: CappedReadOptions) => Promise<CappedBody>;
13
+ export declare const readCappedText: (response: Response, maxBytes: number, options?: CappedReadOptions) => Promise<CappedText>;
14
+ //# sourceMappingURL=capped-read.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capped-read.d.ts","sourceRoot":"","sources":["../../src/web/capped-read.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IAEvB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAE3B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,UAAU;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAG9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC/B;AAaD,eAAO,MAAM,eAAe,aAAoB,QAAQ,YAAY,MAAM,YAAW,iBAAiB,KAAQ,OAAO,CAAC,UAAU,CA6B/H,CAAC;AAGF,eAAO,MAAM,cAAc,aAAoB,QAAQ,YAAY,MAAM,YAAW,iBAAiB,KAAQ,OAAO,CAAC,UAAU,CAG9H,CAAC"}