@intentic/base 1.326.0 → 1.328.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 (98) hide show
  1. package/README.md +43 -7
  2. package/dist/acme/acme.d.ts.map +1 -0
  3. package/dist/{acme.js → acme/acme.js} +1 -1
  4. package/dist/acme/acme.js.map +1 -0
  5. package/dist/acme/authoritative-dns.d.ts.map +1 -0
  6. package/dist/acme/authoritative-dns.js.map +1 -0
  7. package/dist/acme/csr.d.ts.map +1 -0
  8. package/dist/acme/csr.js.map +1 -0
  9. package/dist/async.d.ts +55 -1
  10. package/dist/async.d.ts.map +1 -1
  11. package/dist/async.js +202 -19
  12. package/dist/async.js.map +1 -1
  13. package/dist/cloudflare.d.ts +21 -0
  14. package/dist/cloudflare.d.ts.map +1 -0
  15. package/dist/cloudflare.js +82 -0
  16. package/dist/cloudflare.js.map +1 -0
  17. package/dist/dag.d.ts +2 -0
  18. package/dist/dag.d.ts.map +1 -0
  19. package/dist/dag.js +21 -0
  20. package/dist/dag.js.map +1 -0
  21. package/dist/format.d.ts +3 -0
  22. package/dist/format.d.ts.map +1 -1
  23. package/dist/format.js +4 -1
  24. package/dist/format.js.map +1 -1
  25. package/dist/git/commands.d.ts +41 -0
  26. package/dist/git/commands.d.ts.map +1 -0
  27. package/dist/git/commands.js +84 -0
  28. package/dist/git/commands.js.map +1 -0
  29. package/dist/git/forker.d.ts +20 -0
  30. package/dist/git/forker.d.ts.map +1 -0
  31. package/dist/git/forker.js +32 -0
  32. package/dist/git/forker.js.map +1 -0
  33. package/dist/git/index.d.ts +5 -0
  34. package/dist/git/index.d.ts.map +1 -0
  35. package/dist/git/index.js +5 -0
  36. package/dist/git/index.js.map +1 -0
  37. package/dist/git/locks.d.ts +14 -0
  38. package/dist/git/locks.d.ts.map +1 -0
  39. package/dist/git/locks.js +71 -0
  40. package/dist/git/locks.js.map +1 -0
  41. package/dist/git/remote-http.d.ts +4 -0
  42. package/dist/git/remote-http.d.ts.map +1 -0
  43. package/dist/git/remote-http.js +8 -0
  44. package/dist/git/remote-http.js.map +1 -0
  45. package/dist/git/runner.d.ts +44 -0
  46. package/dist/git/runner.d.ts.map +1 -0
  47. package/dist/git/runner.js +294 -0
  48. package/dist/git/runner.js.map +1 -0
  49. package/dist/lifecycle.d.ts +7 -2
  50. package/dist/lifecycle.d.ts.map +1 -1
  51. package/dist/lifecycle.js +38 -0
  52. package/dist/lifecycle.js.map +1 -1
  53. package/dist/node/fs.d.ts +1 -0
  54. package/dist/node/fs.d.ts.map +1 -1
  55. package/dist/node/fs.js +16 -2
  56. package/dist/node/fs.js.map +1 -1
  57. package/dist/node/ws-tcp-pump.d.ts +33 -0
  58. package/dist/node/ws-tcp-pump.d.ts.map +1 -0
  59. package/dist/node/ws-tcp-pump.js +78 -0
  60. package/dist/node/ws-tcp-pump.js.map +1 -0
  61. package/dist/ssh-config.d.ts +5 -0
  62. package/dist/ssh-config.d.ts.map +1 -0
  63. package/dist/ssh-config.js +19 -0
  64. package/dist/ssh-config.js.map +1 -0
  65. package/dist/text/outside-text.d.ts.map +1 -0
  66. package/dist/text/outside-text.js.map +1 -0
  67. package/dist/text/plain-text.d.ts.map +1 -0
  68. package/dist/text/plain-text.js.map +1 -0
  69. package/dist/text/utf16-text.d.ts.map +1 -0
  70. package/dist/text/utf16-text.js.map +1 -0
  71. package/dist/text/utf8-text.d.ts +7 -0
  72. package/dist/text/utf8-text.d.ts.map +1 -0
  73. package/dist/text/utf8-text.js +39 -0
  74. package/dist/text/utf8-text.js.map +1 -0
  75. package/package.json +89 -22
  76. package/dist/acme.d.ts.map +0 -1
  77. package/dist/acme.js.map +0 -1
  78. package/dist/authoritative-dns.d.ts.map +0 -1
  79. package/dist/authoritative-dns.js.map +0 -1
  80. package/dist/csr.d.ts.map +0 -1
  81. package/dist/csr.js.map +0 -1
  82. package/dist/outside-text.d.ts.map +0 -1
  83. package/dist/outside-text.js.map +0 -1
  84. package/dist/plain-text.d.ts.map +0 -1
  85. package/dist/plain-text.js.map +0 -1
  86. package/dist/utf16-text.d.ts.map +0 -1
  87. package/dist/utf16-text.js.map +0 -1
  88. /package/dist/{acme.d.ts → acme/acme.d.ts} +0 -0
  89. /package/dist/{authoritative-dns.d.ts → acme/authoritative-dns.d.ts} +0 -0
  90. /package/dist/{authoritative-dns.js → acme/authoritative-dns.js} +0 -0
  91. /package/dist/{csr.d.ts → acme/csr.d.ts} +0 -0
  92. /package/dist/{csr.js → acme/csr.js} +0 -0
  93. /package/dist/{outside-text.d.ts → text/outside-text.d.ts} +0 -0
  94. /package/dist/{outside-text.js → text/outside-text.js} +0 -0
  95. /package/dist/{plain-text.d.ts → text/plain-text.d.ts} +0 -0
  96. /package/dist/{plain-text.js → text/plain-text.js} +0 -0
  97. /package/dist/{utf16-text.d.ts → text/utf16-text.d.ts} +0 -0
  98. /package/dist/{utf16-text.js → text/utf16-text.js} +0 -0
@@ -0,0 +1,294 @@
1
+ import { execFile, fork } from "node:child_process";
2
+ import { existsSync } from "node:fs";
3
+ import { availableParallelism } from "node:os";
4
+ import { promisify } from "node:util";
5
+ import { clearStaleLock } from "./locks.js";
6
+ export const exec = promisify(execFile);
7
+ const GIT_CONFIG_ARGS = ["-c", "core.fileMode=false"];
8
+ export const GIT_GLOBAL_ARGS = ["--no-optional-locks", ...GIT_CONFIG_ARGS];
9
+ const PLUMBING_PATHS = new Set(["update-index", "hash-object", "check-ignore", "check-attr"]);
10
+ export const literalPathspecs = (args) => {
11
+ const separator = args.lastIndexOf("--");
12
+ if (separator === -1 || separator === args.length - 1 || PLUMBING_PATHS.has(subcommandOf(args) ?? "")) {
13
+ return args;
14
+ }
15
+ return [...args.slice(0, separator + 1), ...args.slice(separator + 1).map((path) => `:(literal)${path}`)];
16
+ };
17
+ const MAX_GIT_OUTPUT = 16 * 1024 * 1024;
18
+ const LOCK_CONTENTION = /index\.lock.*File exists|Unable to create.*\.lock/i;
19
+ const RETRY_ATTEMPTS = 6;
20
+ const isLockContention = (error) => {
21
+ const stderr = error.stderr;
22
+ return typeof stderr === "string" && LOCK_CONTENTION.test(stderr);
23
+ };
24
+ const clearedStaleLock = async (dir, error) => {
25
+ const stderr = String(error.stderr);
26
+ return (await clearStaleLock(dir, stderr).catch(() => undefined)) !== undefined;
27
+ };
28
+ export const gitBytes = async (dir, args, maxBytes) => {
29
+ const { stdout } = await exec("git", [...GIT_GLOBAL_ARGS, "-C", dir, ...literalPathspecs(args)], { maxBuffer: maxBytes, encoding: "buffer" });
30
+ return stdout;
31
+ };
32
+ const inFlight = new Map();
33
+ let forker;
34
+ let forkerUnavailable = false;
35
+ let nextRequestId = 0;
36
+ const settle = (id) => {
37
+ inFlight.delete(id);
38
+ if (inFlight.size === 0) {
39
+ forker?.channel?.unref?.();
40
+ }
41
+ };
42
+ const forkerFailure = (response, failure) => Object.assign(new Error(failure.message), {
43
+ ...(failure.code !== undefined ? { code: failure.code } : {}),
44
+ stdout: response.stdout,
45
+ stderr: response.stderr,
46
+ execMs: response.execMs,
47
+ });
48
+ const failedExecMs = (error) => {
49
+ const reported = error.execMs;
50
+ return typeof reported === "number" ? reported : 0;
51
+ };
52
+ const forkerModule = new URL("./forker.js", import.meta.url);
53
+ const residentForker = () => {
54
+ if (forker !== undefined || forkerUnavailable) {
55
+ return forker;
56
+ }
57
+ if (!existsSync(forkerModule)) {
58
+ forkerUnavailable = true;
59
+ return undefined;
60
+ }
61
+ const started = fork(forkerModule, { execArgv: [], stdio: ["ignore", "ignore", "inherit", "ipc"] });
62
+ started.on("message", (message) => {
63
+ const response = message;
64
+ const waiting = inFlight.get(response.id);
65
+ if (waiting === undefined) {
66
+ return;
67
+ }
68
+ settle(response.id);
69
+ if (response.failure !== undefined) {
70
+ waiting.reject(forkerFailure(response, response.failure));
71
+ return;
72
+ }
73
+ waiting.resolve({ stdout: response.stdout, stderr: response.stderr, execMs: response.execMs });
74
+ });
75
+ started.on("exit", () => {
76
+ forker = undefined;
77
+ const orphaned = [...inFlight.values()];
78
+ inFlight.clear();
79
+ for (const waiting of orphaned) {
80
+ waiting.reject(new Error("the forker exited"));
81
+ }
82
+ });
83
+ started.on("error", () => {
84
+ forkerUnavailable = true;
85
+ });
86
+ started.unref();
87
+ started.channel?.unref?.();
88
+ forker = started;
89
+ return forker;
90
+ };
91
+ export const forkedExec = async (command, args, options = {}) => {
92
+ const { stdout, stderr } = await runForked(command, args, { ...options, maxBuffer: options.maxBuffer ?? MAX_GIT_OUTPUT });
93
+ return { stdout, stderr };
94
+ };
95
+ const BULK_SLOTS = Math.max(2, Math.floor(availableParallelism() / 4));
96
+ const UNBOUNDED = new Set(["push", "fetch", "pull", "clone", "ls-remote", "submodule"]);
97
+ const subcommandOf = (args) => {
98
+ for (let index = 0; index < args.length; index += 1) {
99
+ const arg = args[index];
100
+ if (arg === "-c" || arg === "-C") {
101
+ index += 1;
102
+ continue;
103
+ }
104
+ if (!arg.startsWith("-")) {
105
+ return arg;
106
+ }
107
+ }
108
+ return undefined;
109
+ };
110
+ let activeBulk = 0;
111
+ const waitingBulk = [];
112
+ const acquireBulk = () => {
113
+ if (activeBulk < BULK_SLOTS) {
114
+ activeBulk += 1;
115
+ return undefined;
116
+ }
117
+ return new Promise((resolve) => waitingBulk.push(resolve));
118
+ };
119
+ const releaseBulk = () => {
120
+ activeBulk -= 1;
121
+ const next = waitingBulk.shift();
122
+ if (next === undefined) {
123
+ return;
124
+ }
125
+ activeBulk += 1;
126
+ next();
127
+ };
128
+ export const gitSpawnStats = () => ({
129
+ activeBulk,
130
+ queuedBulk: waitingBulk.length,
131
+ bulkSlots: BULK_SLOTS,
132
+ });
133
+ let ownEnv = {};
134
+ export const setRunnerEnv = (env) => {
135
+ ownEnv = env;
136
+ };
137
+ const runForked = async (command, args, options) => {
138
+ const resolved = { ...process.env, ...ownEnv, ...options.env };
139
+ const limits = {
140
+ maxBuffer: options.maxBuffer,
141
+ ...(options.timeout !== undefined ? { timeout: options.timeout } : {}),
142
+ ...(options.cwd !== undefined ? { cwd: options.cwd } : {}),
143
+ };
144
+ const channel = residentForker();
145
+ if (channel === undefined) {
146
+ const from = process.hrtime.bigint();
147
+ try {
148
+ const output = await exec(command, [...args], { ...limits, env: resolved });
149
+ return { ...output, execMs: Number(process.hrtime.bigint() - from) / 1e6 };
150
+ }
151
+ catch (error) {
152
+ if (typeof error === "object" && error !== null) {
153
+ Object.assign(error, { execMs: Number(process.hrtime.bigint() - from) / 1e6 });
154
+ }
155
+ throw error;
156
+ }
157
+ }
158
+ const id = nextRequestId;
159
+ nextRequestId += 1;
160
+ const request = { id, command, args, ...limits, env: resolved };
161
+ return await new Promise((resolve, reject) => {
162
+ inFlight.set(id, { resolve, reject });
163
+ channel.channel?.ref?.();
164
+ channel.send(request, (error) => {
165
+ if (error !== null) {
166
+ settle(id);
167
+ reject(error);
168
+ }
169
+ });
170
+ });
171
+ };
172
+ const runGitSlotted = async (command, args, env, bulk, unbounded) => {
173
+ const options = { maxBuffer: MAX_GIT_OUTPUT, ...(env !== undefined ? { env } : {}) };
174
+ if (!bulk || unbounded) {
175
+ return await runForked(command, args, options);
176
+ }
177
+ await acquireBulk();
178
+ try {
179
+ return await runForked(command, args, options);
180
+ }
181
+ finally {
182
+ releaseBulk();
183
+ }
184
+ };
185
+ export const gitCommandLabel = (args) => {
186
+ const words = [];
187
+ for (let index = 0; index < args.length && words.length < 3; index += 1) {
188
+ const arg = args[index];
189
+ if (arg === "-c") {
190
+ index += 1;
191
+ continue;
192
+ }
193
+ words.push(arg.replace(/^([a-z][a-z0-9+.-]*:\/\/)[^/@]*@/i, "$1"));
194
+ }
195
+ return words.join(" ");
196
+ };
197
+ let gitObserver;
198
+ export const observeGitCommands = (observer) => {
199
+ gitObserver = observer;
200
+ };
201
+ const settling = new Map();
202
+ const runningIn = new Map();
203
+ const runsBySubcommand = new Map();
204
+ export const gitRunCounts = () => Object.fromEntries(runsBySubcommand);
205
+ const gitRunnerVia = (argv, { bulk, globals, gated }) => async (dir, args, env) => {
206
+ const pending = gated ? settling.get(dir) : undefined;
207
+ if (pending !== undefined) {
208
+ await pending;
209
+ }
210
+ runningIn.set(dir, (runningIn.get(dir) ?? 0) + 1);
211
+ const subcommand = subcommandOf(args) ?? "?";
212
+ runsBySubcommand.set(subcommand, (runsBySubcommand.get(subcommand) ?? 0) + 1);
213
+ try {
214
+ return await runGit(argv, bulk, globals, dir, args, env);
215
+ }
216
+ finally {
217
+ const left = (runningIn.get(dir) ?? 1) - 1;
218
+ if (left === 0) {
219
+ runningIn.delete(dir);
220
+ }
221
+ else {
222
+ runningIn.set(dir, left);
223
+ }
224
+ }
225
+ };
226
+ const runGit = async (argv, bulk, globals, dir, args, env) => {
227
+ const [command, ...rest] = argv;
228
+ const unbounded = UNBOUNDED.has(subcommandOf(args) ?? "");
229
+ const from = process.hrtime.bigint();
230
+ let execMs = 0;
231
+ const observe = (attempts, failed) => {
232
+ gitObserver?.({
233
+ dir,
234
+ args,
235
+ ms: Number(process.hrtime.bigint() - from) / 1e6,
236
+ execMs,
237
+ attempts,
238
+ failed,
239
+ forked: forker !== undefined,
240
+ queueDepth: waitingBulk.length,
241
+ });
242
+ };
243
+ for (let attempt = 1;; attempt += 1) {
244
+ try {
245
+ const output = await runGitSlotted(command, [...rest, ...globals, "-C", dir, ...literalPathspecs(args)], env, bulk, unbounded);
246
+ execMs += output.execMs;
247
+ observe(attempt, false);
248
+ return { stdout: output.stdout, stderr: output.stderr };
249
+ }
250
+ catch (error) {
251
+ execMs += failedExecMs(error);
252
+ if (attempt === RETRY_ATTEMPTS && isLockContention(error) && (await clearedStaleLock(dir, error))) {
253
+ continue;
254
+ }
255
+ if (attempt >= RETRY_ATTEMPTS || !isLockContention(error)) {
256
+ observe(attempt, true);
257
+ throw error;
258
+ }
259
+ await new Promise((resolve) => setTimeout(resolve, attempt * attempt * 50));
260
+ }
261
+ }
262
+ };
263
+ export const defaultGit = gitRunnerVia(["git"], { bulk: false, globals: GIT_GLOBAL_ARGS, gated: true });
264
+ const nicedGit = gitRunnerVia(["nice", "-n", "10", "ionice", "-c", "2", "-n", "7", "git"], {
265
+ bulk: true,
266
+ globals: GIT_GLOBAL_ARGS,
267
+ gated: true,
268
+ });
269
+ const plainBulkGit = gitRunnerVia(["git"], { bulk: true, globals: GIT_GLOBAL_ARGS, gated: true });
270
+ const settlingGit = gitRunnerVia(["git"], { bulk: false, globals: GIT_CONFIG_ARGS, gated: false });
271
+ const SETTLE_MARGIN_MS = 50;
272
+ export const settleIndex = async (dir) => {
273
+ await new Promise((resolve) => setTimeout(resolve, 1000 - (Date.now() % 1000) + SETTLE_MARGIN_MS));
274
+ if (runningIn.has(dir) || settling.has(dir)) {
275
+ return false;
276
+ }
277
+ const run = settlingGit(dir, ["status", "--porcelain", "-uno"]);
278
+ const done = run.then(() => settling.delete(dir), () => settling.delete(dir));
279
+ settling.set(dir, done);
280
+ await run;
281
+ return true;
282
+ };
283
+ export const politeGit = async (dir, args, env) => {
284
+ try {
285
+ return await nicedGit(dir, args, env);
286
+ }
287
+ catch (error) {
288
+ if (error.code === "ENOENT") {
289
+ return await plainBulkGit(dir, args, env);
290
+ }
291
+ throw error;
292
+ }
293
+ };
294
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/git/runner.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,20 @@
1
1
  export interface IDisposable {
2
2
  dispose(): void;
3
3
  }
4
- export declare const toDisposable: (fn: () => void) => IDisposable;
4
+ export declare const toDisposable: (fn: () => unknown) => IDisposable;
5
+ export interface DisposeOutcome {
6
+ readonly failed: readonly unknown[];
7
+ readonly unfinished: number;
8
+ }
5
9
  export declare class DisposableStore implements IDisposable {
6
10
  private readonly members;
7
11
  private disposed;
8
12
  add<T extends IDisposable>(disposable: T): T;
9
- push(fn: () => void): void;
13
+ push(fn: () => unknown): void;
10
14
  deleteAndDispose(disposable: IDisposable): void;
11
15
  get size(): number;
12
16
  dispose(): void;
17
+ disposeWithin(deadlineMs: number): Promise<DisposeOutcome>;
13
18
  }
14
19
  export declare abstract class Disposable implements IDisposable {
15
20
  protected readonly store: DisposableStore;
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IACxB,OAAO,IAAI,IAAI,CAAC;CACnB;AAID,eAAO,MAAM,YAAY,OAAQ,MAAM,IAAI,KAAG,WAAgC,CAAC;AAmB/E,qBAAa,eAAgB,YAAW,WAAW;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAS;IAIzB,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAO3C;IAID,IAAI,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAEzB;IAID,gBAAgB,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI,CAI9C;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAID,OAAO,IAAI,IAAI,CAQd;CACJ;AAID,8BAAsB,UAAW,YAAW,WAAW;IACnD,SAAS,CAAC,QAAQ,CAAC,KAAK,kBAAyB;IAEjD,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAE1D;IAED,OAAO,IAAI,IAAI,CAEd;CACJ;AAID,qBAAa,iBAAiB,CAAC,CAAC,SAAS,WAAW,CAAE,YAAW,WAAW;IACxE,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAEzB;IAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,EAS5B;IAED,OAAO,IAAI,IAAI,CAId;CACJ"}
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IACxB,OAAO,IAAI,IAAI,CAAC;CACnB;AAID,eAAO,MAAM,YAAY,OAAQ,MAAM,OAAO,KAAG,WAAgC,CAAC;AAIlF,MAAM,WAAW,cAAc;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC/B;AAsBD,qBAAa,eAAgB,YAAW,WAAW;IAC/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAS;IAIzB,GAAG,CAAC,CAAC,SAAS,WAAW,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAO3C;IAID,IAAI,CAAC,EAAE,EAAE,MAAM,OAAO,GAAG,IAAI,CAE5B;IAID,gBAAgB,CAAC,UAAU,EAAE,WAAW,GAAG,IAAI,CAI9C;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAID,OAAO,IAAI,IAAI,CAQd;IAOK,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAwC/D;CACJ;AAID,8BAAsB,UAAW,YAAW,WAAW;IACnD,SAAS,CAAC,QAAQ,CAAC,KAAK,kBAAyB;IAEjD,SAAS,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,CAE1D;IAED,OAAO,IAAI,IAAI,CAEd;CACJ;AAID,qBAAa,iBAAiB,CAAC,CAAC,SAAS,WAAW,CAAE,YAAW,WAAW;IACxE,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,QAAQ,CAAS;IAEzB,IAAI,KAAK,IAAI,CAAC,GAAG,SAAS,CAEzB;IAED,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,EAS5B;IAED,OAAO,IAAI,IAAI,CAId;CACJ"}
package/dist/lifecycle.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export const toDisposable = (fn) => ({ dispose: fn });
2
+ const isThenable = (value) => typeof value === "object" && value !== null && typeof value.then === "function";
2
3
  const disposeAll = (disposables) => {
3
4
  const errors = [];
4
5
  for (const disposable of disposables) {
@@ -47,6 +48,43 @@ export class DisposableStore {
47
48
  this.members.clear();
48
49
  disposeAll(members);
49
50
  }
51
+ async disposeWithin(deadlineMs) {
52
+ if (this.disposed) {
53
+ return { failed: [], unfinished: 0 };
54
+ }
55
+ this.disposed = true;
56
+ const members = [...this.members].toReversed();
57
+ this.members.clear();
58
+ const failed = [];
59
+ const pending = [];
60
+ let unfinished = 0;
61
+ for (const member of members) {
62
+ try {
63
+ const stopped = member.dispose();
64
+ if (isThenable(stopped)) {
65
+ unfinished += 1;
66
+ pending.push(Promise.resolve(stopped).then(() => {
67
+ unfinished -= 1;
68
+ }, (error) => {
69
+ unfinished -= 1;
70
+ failed.push(error);
71
+ }));
72
+ }
73
+ }
74
+ catch (error) {
75
+ failed.push(error);
76
+ }
77
+ }
78
+ if (pending.length > 0) {
79
+ let timer;
80
+ const deadline = new Promise((resolve) => {
81
+ timer = setTimeout(resolve, deadlineMs);
82
+ });
83
+ await Promise.race([Promise.all(pending), deadline]);
84
+ clearTimeout(timer);
85
+ }
86
+ return { failed: [...failed], unfinished };
87
+ }
50
88
  }
51
89
  export class Disposable {
52
90
  store = new DisposableStore();
@@ -1 +1 @@
1
- {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"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"}
package/dist/node/fs.d.ts CHANGED
@@ -5,5 +5,6 @@ export interface WriteOptions {
5
5
  readonly durable?: boolean;
6
6
  }
7
7
  export declare const writeFileAtomic: (path: string, content: string | Uint8Array, mode?: number, options?: WriteOptions) => Promise<void>;
8
+ export declare const writeFileAtomicSync: (path: string, content: string | Uint8Array) => void;
8
9
  export declare const freePort: (host?: string) => Promise<number>;
9
10
  //# sourceMappingURL=fs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/node/fs.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,UAAU,SAAgB,MAAM,KAAG,OAAO,CAAC,OAAO,CAI1D,CAAC;AAKN,eAAO,MAAM,YAAY,SAAgB,MAAM,KAAG,OAAO,CAAC,SAAS,GAAG,QAAQ,GAAG,SAAS,CAOzF,CAAC;AAMF,eAAO,MAAM,WAAW,GAAI,CAAC,QAAQ,MAAM,QAAQ,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAe9E,CAAC;AAuDF,MAAM,WAAW,YAAY;IAGzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC9B;AAGD,eAAO,MAAM,eAAe,SAAgB,MAAM,WAAW,MAAM,GAAG,UAAU,SAAS,MAAM,YAAW,YAAY,KAAQ,OAAO,CAAC,IAAI,CAsBzI,CAAC;AAGF,eAAO,MAAM,QAAQ,qBAAyB,OAAO,CAAC,MAAM,CAStD,CAAC"}
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/node/fs.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,UAAU,SAAgB,MAAM,KAAG,OAAO,CAAC,OAAO,CAI1D,CAAC;AAKN,eAAO,MAAM,YAAY,SAAgB,MAAM,KAAG,OAAO,CAAC,SAAS,GAAG,QAAQ,GAAG,SAAS,CAOzF,CAAC;AAMF,eAAO,MAAM,WAAW,GAAI,CAAC,QAAQ,MAAM,QAAQ,MAAM,OAAO,CAAC,CAAC,CAAC,KAAG,OAAO,CAAC,CAAC,CAe9E,CAAC;AA8DF,MAAM,WAAW,YAAY;IAGzB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC9B;AAGD,eAAO,MAAM,eAAe,SAAgB,MAAM,WAAW,MAAM,GAAG,UAAU,SAAS,MAAM,YAAW,YAAY,KAAQ,OAAO,CAAC,IAAI,CAoBzI,CAAC;AAMF,eAAO,MAAM,mBAAmB,SAAU,MAAM,WAAW,MAAM,GAAG,UAAU,KAAG,IAQhF,CAAC;AAGF,eAAO,MAAM,QAAQ,qBAAyB,OAAO,CAAC,MAAM,CAStD,CAAC"}
package/dist/node/fs.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { renameSync, rmSync, writeFileSync } from "node:fs";
1
2
  import { access, chmod, mkdir, open, rename, rm, writeFile } from "node:fs/promises";
2
3
  import { createServer } from "node:net";
3
4
  import { basename, dirname, join, resolve } from "node:path";
@@ -45,6 +46,10 @@ const renameOver = async (from, to) => {
45
46
  }
46
47
  };
47
48
  let writes = 0;
49
+ const stagingOf = (path) => {
50
+ writes += 1;
51
+ return join(dirname(path), `.${basename(path)}.${process.pid}.${writes}.tmp`);
52
+ };
48
53
  const writeDurably = async (staging, content, mode) => {
49
54
  const handle = await open(staging, "w", mode);
50
55
  try {
@@ -71,8 +76,7 @@ const syncDirectory = async (dir) => {
71
76
  }
72
77
  };
73
78
  export const writeFileAtomic = async (path, content, mode, options = {}) => {
74
- writes += 1;
75
- const staging = join(dirname(path), `.${basename(path)}.${process.pid}.${writes}.tmp`);
79
+ const staging = stagingOf(path);
76
80
  await mkdir(dirname(path), { recursive: true });
77
81
  try {
78
82
  if (options.durable === true) {
@@ -93,6 +97,16 @@ export const writeFileAtomic = async (path, content, mode, options = {}) => {
93
97
  await rm(staging, { force: true });
94
98
  }
95
99
  };
100
+ export const writeFileAtomicSync = (path, content) => {
101
+ const staging = stagingOf(path);
102
+ try {
103
+ writeFileSync(staging, content);
104
+ renameSync(staging, path);
105
+ }
106
+ finally {
107
+ rmSync(staging, { force: true });
108
+ }
109
+ };
96
110
  export const freePort = (host = "127.0.0.1") => new Promise((resolvePort, rejectPort) => {
97
111
  const server = createServer();
98
112
  server.on("error", rejectPort);
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/node/fs.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/node/fs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export declare const BUFFER_HIGH = 1048576;
2
+ export declare const BUFFER_LOW = 262144;
3
+ export declare const DRAIN_POLL_MS = 50;
4
+ export declare const UNPAUSABLE_CEILING: number;
5
+ export interface PumpTcp {
6
+ write(chunk: Uint8Array): boolean;
7
+ pause(): unknown;
8
+ resume(): unknown;
9
+ on(event: "data", listener: (chunk: Buffer) => void): unknown;
10
+ on(event: "drain", listener: () => void): unknown;
11
+ off(event: "data", listener: (chunk: Buffer) => void): unknown;
12
+ off(event: "drain", listener: () => void): unknown;
13
+ readonly writableLength: number;
14
+ readonly destroyed: boolean;
15
+ }
16
+ export interface PumpWebSocket {
17
+ readonly send: (frame: Uint8Array<ArrayBuffer>) => void;
18
+ readonly bufferedAmount: () => number;
19
+ readonly pause?: () => void;
20
+ readonly resume?: () => void;
21
+ }
22
+ export declare const binaryFrame: (data: unknown) => Buffer | undefined;
23
+ export interface PumpOptions {
24
+ readonly queued?: readonly Buffer[];
25
+ readonly onOverflow: () => void;
26
+ readonly ceiling?: number;
27
+ }
28
+ export interface Pump {
29
+ readonly inbound: (data: unknown) => boolean;
30
+ readonly stop: () => void;
31
+ }
32
+ export declare const pumpTcpWebSocket: (tcp: PumpTcp, ws: PumpWebSocket, options: PumpOptions) => Pump;
33
+ //# sourceMappingURL=ws-tcp-pump.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-tcp-pump.d.ts","sourceRoot":"","sources":["../../src/node/ws-tcp-pump.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,WAAW,UAAY,CAAC;AACrC,eAAO,MAAM,UAAU,SAAU,CAAC;AAClC,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,kBAAkB,QAAiB,CAAC;AAGjD,MAAM,WAAW,OAAO;IACpB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC;IAClC,KAAK,IAAI,OAAO,CAAC;IACjB,MAAM,IAAI,OAAO,CAAC;IAClB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;IAC9D,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IAClD,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC;IAC/D,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC/B;AAGD,MAAM,WAAW,aAAa;IAC1B,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,MAAM,MAAM,CAAC;IAEtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CAChC;AAID,eAAO,MAAM,WAAW,SAAU,OAAO,KAAG,MAAM,GAAG,SAWpD,CAAC;AAUF,MAAM,WAAW,WAAW;IAExB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAEpC,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAEhC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,IAAI;IAEjB,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;IAE7C,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC;CAC7B;AAID,eAAO,MAAM,gBAAgB,QAAS,OAAO,MAAM,aAAa,WAAW,WAAW,KAAG,IA0DxF,CAAC"}
@@ -0,0 +1,78 @@
1
+ export const BUFFER_HIGH = 1_048_576;
2
+ export const BUFFER_LOW = 262_144;
3
+ export const DRAIN_POLL_MS = 50;
4
+ export const UNPAUSABLE_CEILING = 64 * 1_048_576;
5
+ export const binaryFrame = (data) => {
6
+ if (Buffer.isBuffer(data)) {
7
+ return data;
8
+ }
9
+ if (data instanceof ArrayBuffer) {
10
+ return Buffer.from(data);
11
+ }
12
+ if (ArrayBuffer.isView(data)) {
13
+ return Buffer.from(data.buffer, data.byteOffset, data.byteLength);
14
+ }
15
+ return undefined;
16
+ };
17
+ const frameOf = (chunk) => {
18
+ const frame = new Uint8Array(chunk.byteLength);
19
+ frame.set(chunk);
20
+ return frame;
21
+ };
22
+ export const pumpTcpWebSocket = (tcp, ws, options) => {
23
+ let drain;
24
+ let wsPaused = false;
25
+ const outbound = (chunk) => {
26
+ ws.send(frameOf(chunk));
27
+ if (drain === undefined && ws.bufferedAmount() > BUFFER_HIGH) {
28
+ tcp.pause();
29
+ drain = setInterval(() => {
30
+ if (ws.bufferedAmount() < BUFFER_LOW) {
31
+ clearInterval(drain);
32
+ drain = undefined;
33
+ tcp.resume();
34
+ }
35
+ }, DRAIN_POLL_MS);
36
+ }
37
+ };
38
+ const resumeWs = () => {
39
+ if (wsPaused) {
40
+ wsPaused = false;
41
+ ws.resume?.();
42
+ }
43
+ };
44
+ for (const chunk of options.queued ?? []) {
45
+ outbound(chunk);
46
+ }
47
+ tcp.on("data", outbound);
48
+ tcp.on("drain", resumeWs);
49
+ tcp.resume();
50
+ return {
51
+ inbound: (data) => {
52
+ const bytes = binaryFrame(data);
53
+ if (bytes === undefined || tcp.destroyed) {
54
+ return false;
55
+ }
56
+ if (tcp.write(bytes)) {
57
+ return true;
58
+ }
59
+ if (ws.pause !== undefined && ws.resume !== undefined) {
60
+ if (!wsPaused) {
61
+ wsPaused = true;
62
+ ws.pause();
63
+ }
64
+ }
65
+ else if (tcp.writableLength > (options.ceiling ?? UNPAUSABLE_CEILING)) {
66
+ options.onOverflow();
67
+ }
68
+ return true;
69
+ },
70
+ stop: () => {
71
+ clearInterval(drain);
72
+ drain = undefined;
73
+ tcp.off("data", outbound);
74
+ tcp.off("drain", resumeWs);
75
+ },
76
+ };
77
+ };
78
+ //# sourceMappingURL=ws-tcp-pump.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ws-tcp-pump.js","sourceRoot":"","sources":["../../src/node/ws-tcp-pump.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const includedPaths: (line: string) => string[] | undefined;
2
+ export declare const hasManagedInclude: (config: string, ours: (path: string) => boolean) => boolean;
3
+ export declare const withoutManagedIncludes: (config: string, ours: (path: string) => boolean) => string;
4
+ export declare const withManagedInclude: (config: string, line: string, ours: (path: string) => boolean) => string;
5
+ //# sourceMappingURL=ssh-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssh-config.d.ts","sourceRoot":"","sources":["../src/ssh-config.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,aAAa,SAAU,MAAM,KAAG,MAAM,EAAE,GAAG,SAMvD,CAAC;AAUF,eAAO,MAAM,iBAAiB,WAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAG,OACpB,CAAC;AAGjE,eAAO,MAAM,sBAAsB,WAAY,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAG,MAItE,CAAC;AAKpB,eAAO,MAAM,kBAAkB,WAAY,MAAM,QAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,KAAG,MAC7C,CAAC"}
@@ -0,0 +1,19 @@
1
+ const INCLUDE_LINE = /^[ \t]*include(?:[ \t]*=[ \t]*|[ \t]+)(.*?)[ \t\r]*$/i;
2
+ export const includedPaths = (line) => {
3
+ const match = INCLUDE_LINE.exec(line);
4
+ if (match === null) {
5
+ return undefined;
6
+ }
7
+ return [...(match[1] ?? "").matchAll(/"([^"]*)"|(\S+)/g)].map((part) => part[1] ?? part[2] ?? "");
8
+ };
9
+ const isManagedLine = (line, ours) => {
10
+ const paths = includedPaths(line);
11
+ return paths?.length === 1 && ours(paths[0] ?? "");
12
+ };
13
+ export const hasManagedInclude = (config, ours) => config.split("\n").some((line) => isManagedLine(line, ours));
14
+ export const withoutManagedIncludes = (config, ours) => config
15
+ .split("\n")
16
+ .filter((line) => !isManagedLine(line, ours))
17
+ .join("\n");
18
+ export const withManagedInclude = (config, line, ours) => `${line}\n${withoutManagedIncludes(config, ours)}`;
19
+ //# sourceMappingURL=ssh-config.js.map