@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.
- package/README.md +43 -7
- package/dist/acme/acme.d.ts.map +1 -0
- package/dist/{acme.js → acme/acme.js} +1 -1
- package/dist/acme/acme.js.map +1 -0
- package/dist/acme/authoritative-dns.d.ts.map +1 -0
- package/dist/acme/authoritative-dns.js.map +1 -0
- package/dist/acme/csr.d.ts.map +1 -0
- package/dist/acme/csr.js.map +1 -0
- package/dist/async.d.ts +55 -1
- package/dist/async.d.ts.map +1 -1
- package/dist/async.js +202 -19
- package/dist/async.js.map +1 -1
- package/dist/cloudflare.d.ts +21 -0
- package/dist/cloudflare.d.ts.map +1 -0
- package/dist/cloudflare.js +82 -0
- package/dist/cloudflare.js.map +1 -0
- package/dist/dag.d.ts +2 -0
- package/dist/dag.d.ts.map +1 -0
- package/dist/dag.js +21 -0
- package/dist/dag.js.map +1 -0
- package/dist/format.d.ts +3 -0
- package/dist/format.d.ts.map +1 -1
- package/dist/format.js +4 -1
- package/dist/format.js.map +1 -1
- package/dist/git/commands.d.ts +41 -0
- package/dist/git/commands.d.ts.map +1 -0
- package/dist/git/commands.js +84 -0
- package/dist/git/commands.js.map +1 -0
- package/dist/git/forker.d.ts +20 -0
- package/dist/git/forker.d.ts.map +1 -0
- package/dist/git/forker.js +32 -0
- package/dist/git/forker.js.map +1 -0
- package/dist/git/index.d.ts +5 -0
- package/dist/git/index.d.ts.map +1 -0
- package/dist/git/index.js +5 -0
- package/dist/git/index.js.map +1 -0
- package/dist/git/locks.d.ts +14 -0
- package/dist/git/locks.d.ts.map +1 -0
- package/dist/git/locks.js +71 -0
- package/dist/git/locks.js.map +1 -0
- package/dist/git/remote-http.d.ts +4 -0
- package/dist/git/remote-http.d.ts.map +1 -0
- package/dist/git/remote-http.js +8 -0
- package/dist/git/remote-http.js.map +1 -0
- package/dist/git/runner.d.ts +44 -0
- package/dist/git/runner.d.ts.map +1 -0
- package/dist/git/runner.js +294 -0
- package/dist/git/runner.js.map +1 -0
- package/dist/lifecycle.d.ts +7 -2
- package/dist/lifecycle.d.ts.map +1 -1
- package/dist/lifecycle.js +38 -0
- package/dist/lifecycle.js.map +1 -1
- package/dist/node/fs.d.ts +1 -0
- package/dist/node/fs.d.ts.map +1 -1
- package/dist/node/fs.js +16 -2
- package/dist/node/fs.js.map +1 -1
- package/dist/node/ws-tcp-pump.d.ts +33 -0
- package/dist/node/ws-tcp-pump.d.ts.map +1 -0
- package/dist/node/ws-tcp-pump.js +78 -0
- package/dist/node/ws-tcp-pump.js.map +1 -0
- package/dist/ssh-config.d.ts +5 -0
- package/dist/ssh-config.d.ts.map +1 -0
- package/dist/ssh-config.js +19 -0
- package/dist/ssh-config.js.map +1 -0
- package/dist/text/outside-text.d.ts.map +1 -0
- package/dist/text/outside-text.js.map +1 -0
- package/dist/text/plain-text.d.ts.map +1 -0
- package/dist/text/plain-text.js.map +1 -0
- package/dist/text/utf16-text.d.ts.map +1 -0
- package/dist/text/utf16-text.js.map +1 -0
- package/dist/text/utf8-text.d.ts +7 -0
- package/dist/text/utf8-text.d.ts.map +1 -0
- package/dist/text/utf8-text.js +39 -0
- package/dist/text/utf8-text.js.map +1 -0
- package/package.json +89 -22
- package/dist/acme.d.ts.map +0 -1
- package/dist/acme.js.map +0 -1
- package/dist/authoritative-dns.d.ts.map +0 -1
- package/dist/authoritative-dns.js.map +0 -1
- package/dist/csr.d.ts.map +0 -1
- package/dist/csr.js.map +0 -1
- package/dist/outside-text.d.ts.map +0 -1
- package/dist/outside-text.js.map +0 -1
- package/dist/plain-text.d.ts.map +0 -1
- package/dist/plain-text.js.map +0 -1
- package/dist/utf16-text.d.ts.map +0 -1
- package/dist/utf16-text.js.map +0 -1
- /package/dist/{acme.d.ts → acme/acme.d.ts} +0 -0
- /package/dist/{authoritative-dns.d.ts → acme/authoritative-dns.d.ts} +0 -0
- /package/dist/{authoritative-dns.js → acme/authoritative-dns.js} +0 -0
- /package/dist/{csr.d.ts → acme/csr.d.ts} +0 -0
- /package/dist/{csr.js → acme/csr.js} +0 -0
- /package/dist/{outside-text.d.ts → text/outside-text.d.ts} +0 -0
- /package/dist/{outside-text.js → text/outside-text.js} +0 -0
- /package/dist/{plain-text.d.ts → text/plain-text.d.ts} +0 -0
- /package/dist/{plain-text.js → text/plain-text.js} +0 -0
- /package/dist/{utf16-text.d.ts → text/utf16-text.d.ts} +0 -0
- /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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"}
|
package/dist/lifecycle.d.ts
CHANGED
|
@@ -1,15 +1,20 @@
|
|
|
1
1
|
export interface IDisposable {
|
|
2
2
|
dispose(): void;
|
|
3
3
|
}
|
|
4
|
-
export declare const toDisposable: (fn: () =>
|
|
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: () =>
|
|
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;
|
package/dist/lifecycle.d.ts.map
CHANGED
|
@@ -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,
|
|
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();
|
package/dist/lifecycle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../src/lifecycle.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAiB,EAAe,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;AASlF,MAAM,UAAU,GAAG,CAAC,KAAc,EAAiC,EAAE,CACjE,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,UAAU,CAAC;AAE5G,MAAM,UAAU,GAAG,CAAC,WAAkC,EAAQ,EAAE;IAC5D,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC;YACD,UAAU,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,cAAc,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,gCAAgC,CAAC,CAAC;IACvF,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,OAAO,eAAe;IACP,OAAO,GAAG,IAAI,GAAG,EAAe,CAAC;IAC1C,QAAQ,GAAG,KAAK,CAAC;IAIzB,GAAG,CAAwB,UAAa;QACpC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,UAAU,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,UAAU,CAAC;QACtB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7B,OAAO,UAAU,CAAC;IACtB,CAAC;IAID,IAAI,CAAC,EAAiB;QAClB,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;IAID,gBAAgB,CAAC,UAAuB;QACpC,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,UAAU,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;IACL,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAID,OAAO;QACH,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;QAClC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,UAAU,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;IAOD,KAAK,CAAC,aAAa,CAAC,UAAkB;QAClC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACzC,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAoB,EAAE,CAAC;QACpC,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACD,MAAM,OAAO,GAAY,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC1C,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtB,UAAU,IAAI,CAAC,CAAC;oBAChB,OAAO,CAAC,IAAI,CACR,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CACzB,GAAG,EAAE;wBACD,UAAU,IAAI,CAAC,CAAC;oBACpB,CAAC,EACD,CAAC,KAAc,EAAE,EAAE;wBACf,UAAU,IAAI,CAAC,CAAC;wBAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACvB,CAAC,CACJ,CACJ,CAAC;gBACN,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;QACL,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,IAAI,KAAgD,CAAC;YACrD,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;gBAC3C,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YACrD,YAAY,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IAC/C,CAAC;CACJ;AAID,MAAM,OAAgB,UAAU;IACT,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IAEvC,QAAQ,CAAwB,UAAa;QACnD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,OAAO;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;CACJ;AAID,MAAM,OAAO,iBAAiB;IAClB,OAAO,CAAgB;IACvB,QAAQ,GAAG,KAAK,CAAC;IAEzB,IAAI,KAAK;QACL,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED,IAAI,KAAK,CAAC,IAAmB;QACzB,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,OAAO;QACX,CAAC;QACD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAChD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,IAAI,EAAE,OAAO,EAAE,CAAC;QACpB,CAAC;IACL,CAAC;IAED,OAAO;QACH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;IAC7B,CAAC;CACJ"}
|
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
|
package/dist/node/fs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/node/fs.ts"],"names":[],"mappings":"
|
|
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
|
-
|
|
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);
|
package/dist/node/fs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/node/fs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,UAAU,IAAI,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,IAAY,EAAoB,EAAE,CAC/D,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CACb,GAAG,EAAE,CAAC,IAAI,EACV,GAAG,EAAE,CAAC,KAAK,CACd,CAAC;AAKN,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAAE,IAAY,EAA6C,EAAE;IAC1F,IAAI,CAAC;QACD,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,SAAS,CAAC;IACrB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,CAAC;AACL,CAAC,CAAC;AAGF,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;AAGhD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAI,IAAY,EAAE,IAAsB,EAAc,EAAE;IAC/E,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,OAAO,GAAkB,IAAI;SAC9B,IAAI,CACD,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAClB;SACA,IAAI,CAAC,GAAG,EAAE;QACP,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACL,CAAC,CAAC,CAAC;IACP,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAGF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC/D,MAAM,eAAe,GAAG,EAAE,CAAC;AAC3B,MAAM,eAAe,GAAG,EAAE,CAAC;AAG3B,MAAM,UAAU,GAAG,KAAK,EAAE,IAAY,EAAE,EAAU,EAAiB,EAAE;IACjE,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC;YACD,MAAM,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACvB,OAAO;QACX,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,IAAI,eAAe,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAE,KAA+B,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,CAAC;gBACnI,MAAM,KAAK,CAAC;YAChB,CAAC;YAED,MAAM,KAAK,CAAC,eAAe,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;AACL,CAAC,CAAC;AAGF,IAAI,MAAM,GAAG,CAAC,CAAC;
|
|
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
|