dshb-exec-ssh 0.0.1
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/LICENSE +21 -0
- package/cordis.patch.yml +3 -0
- package/lib/connection-pool.d.ts +25 -0
- package/lib/connection-pool.js +54 -0
- package/lib/connection-pool.js.map +1 -0
- package/lib/connection-w4OewdmD.d.ts +46 -0
- package/lib/connection.d.ts +2 -0
- package/lib/connection.js +120 -0
- package/lib/connection.js.map +1 -0
- package/lib/env-scrub.d.ts +7 -0
- package/lib/env-scrub.js +40 -0
- package/lib/env-scrub.js.map +1 -0
- package/lib/executor.d.ts +46 -0
- package/lib/executor.js +212 -0
- package/lib/executor.js.map +1 -0
- package/lib/fs-provider.d.ts +50 -0
- package/lib/fs-provider.js +92 -0
- package/lib/fs-provider.js.map +1 -0
- package/lib/index-CDfaZYyK.d.ts +1125 -0
- package/lib/index.d.ts +16 -0
- package/lib/index.js +30 -0
- package/lib/index.js.map +1 -0
- package/lib/process-provider-CUgC5gyu.d.ts +3328 -0
- package/lib/process-provider.d.ts +2 -0
- package/lib/process-provider.js +75 -0
- package/lib/process-provider.js.map +1 -0
- package/lib/runner.d.ts +13 -0
- package/lib/runner.js +62 -0
- package/lib/runner.js.map +1 -0
- package/lib/world.d.ts +79 -0
- package/lib/world.js +95 -0
- package/lib/world.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { SshExecutor } from "./executor.js";
|
|
2
|
+
//#region src/fs-provider.d.ts
|
|
3
|
+
declare class SshFileSystem {
|
|
4
|
+
private readonly executor;
|
|
5
|
+
constructor(executor: SshExecutor);
|
|
6
|
+
resolve(path: string): Promise<string>;
|
|
7
|
+
processPath(target: string): string;
|
|
8
|
+
fileUrl(target: string): string;
|
|
9
|
+
contains(parent: string, child: string): boolean;
|
|
10
|
+
stat(target: string, _signal?: AbortSignal): Promise<{
|
|
11
|
+
size: number;
|
|
12
|
+
mtime: number;
|
|
13
|
+
isDirectory: boolean;
|
|
14
|
+
isFile: boolean;
|
|
15
|
+
} | undefined>;
|
|
16
|
+
lstat(path: string, _opts?: {
|
|
17
|
+
cwd?: string;
|
|
18
|
+
}, _signal?: AbortSignal): Promise<{
|
|
19
|
+
size: number;
|
|
20
|
+
mtime: number;
|
|
21
|
+
isDirectory: boolean;
|
|
22
|
+
isFile: boolean;
|
|
23
|
+
} | undefined>;
|
|
24
|
+
readText(target: string, _signal?: AbortSignal): Promise<string>;
|
|
25
|
+
streamText(target: string, _signal?: AbortSignal): Promise<AsyncIterable<string>>;
|
|
26
|
+
readBytes(target: string, _signal: AbortSignal | undefined, maxBytes: number): Promise<Uint8Array>;
|
|
27
|
+
listDir(target: string, _signal?: AbortSignal): Promise<Array<{
|
|
28
|
+
name: string;
|
|
29
|
+
path: string;
|
|
30
|
+
isDirectory: boolean;
|
|
31
|
+
isFile: boolean;
|
|
32
|
+
isSymlink: boolean;
|
|
33
|
+
size: number;
|
|
34
|
+
mtime: number;
|
|
35
|
+
}>>;
|
|
36
|
+
writeText(target: string, content: string, _expected?: unknown, _signal?: AbortSignal, _policy?: unknown): Promise<{
|
|
37
|
+
operation: 'create' | 'update';
|
|
38
|
+
version: string;
|
|
39
|
+
before: string | null;
|
|
40
|
+
after: string;
|
|
41
|
+
}>;
|
|
42
|
+
editText(target: string, edit: unknown, _expected?: unknown, _signal?: AbortSignal, _policy?: unknown): Promise<{
|
|
43
|
+
version: string;
|
|
44
|
+
before: string;
|
|
45
|
+
after: string;
|
|
46
|
+
}>;
|
|
47
|
+
}
|
|
48
|
+
//#endregion
|
|
49
|
+
export { SshFileSystem };
|
|
50
|
+
//# sourceMappingURL=fs-provider.d.ts.map
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
//#region src/fs-provider.ts
|
|
2
|
+
var SshFileSystem = class {
|
|
3
|
+
executor;
|
|
4
|
+
constructor(executor) {
|
|
5
|
+
this.executor = executor;
|
|
6
|
+
}
|
|
7
|
+
async resolve(path) {
|
|
8
|
+
return path;
|
|
9
|
+
}
|
|
10
|
+
processPath(target) {
|
|
11
|
+
return target;
|
|
12
|
+
}
|
|
13
|
+
fileUrl(target) {
|
|
14
|
+
return `file://${target}`;
|
|
15
|
+
}
|
|
16
|
+
contains(parent, child) {
|
|
17
|
+
return child === parent || child.startsWith(`${parent}/`);
|
|
18
|
+
}
|
|
19
|
+
async stat(target, _signal) {
|
|
20
|
+
return this.executor.stat(target);
|
|
21
|
+
}
|
|
22
|
+
async lstat(path, _opts, _signal) {
|
|
23
|
+
return this.executor.stat(path);
|
|
24
|
+
}
|
|
25
|
+
async readText(target, _signal) {
|
|
26
|
+
return (await this.executor.readFile(target)).toString("utf8");
|
|
27
|
+
}
|
|
28
|
+
async streamText(target, _signal) {
|
|
29
|
+
const text = (await this.executor.readFile(target)).toString("utf8");
|
|
30
|
+
return (async function* () {
|
|
31
|
+
yield text;
|
|
32
|
+
})();
|
|
33
|
+
}
|
|
34
|
+
async readBytes(target, _signal, maxBytes) {
|
|
35
|
+
const slice = (await this.executor.readFile(target)).subarray(0, maxBytes);
|
|
36
|
+
return new Uint8Array(slice.buffer, slice.byteOffset, slice.byteLength);
|
|
37
|
+
}
|
|
38
|
+
async listDir(target, _signal) {
|
|
39
|
+
return (await this.executor.listDir(target)).map((e) => ({
|
|
40
|
+
name: e.name,
|
|
41
|
+
path: `${target}/${e.name}`,
|
|
42
|
+
isDirectory: e.isDir,
|
|
43
|
+
isFile: e.isFile,
|
|
44
|
+
isSymlink: e.isSymlink,
|
|
45
|
+
size: e.size,
|
|
46
|
+
mtime: e.mtime
|
|
47
|
+
}));
|
|
48
|
+
}
|
|
49
|
+
async writeText(target, content, _expected, _signal, _policy) {
|
|
50
|
+
const normalizeLf = (s) => s.replace(/\r\n/g, "\n");
|
|
51
|
+
const beforeInfo = await this.executor.stat(target);
|
|
52
|
+
let before = null;
|
|
53
|
+
if (beforeInfo?.isFile) try {
|
|
54
|
+
before = normalizeLf((await this.executor.readFile(target)).toString("utf8"));
|
|
55
|
+
} catch {
|
|
56
|
+
before = null;
|
|
57
|
+
}
|
|
58
|
+
const after = normalizeLf(content);
|
|
59
|
+
await this.executor.writeFile(target, content);
|
|
60
|
+
const afterInfo = await this.executor.stat(target);
|
|
61
|
+
const version = `${afterInfo?.size ?? content.length}:${afterInfo?.mtime ?? Date.now()}`;
|
|
62
|
+
return {
|
|
63
|
+
operation: before === null ? "create" : "update",
|
|
64
|
+
version,
|
|
65
|
+
before,
|
|
66
|
+
after
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async editText(target, edit, _expected, _signal, _policy) {
|
|
70
|
+
const normalizeLf = (s) => s.replace(/\r\n/g, "\n");
|
|
71
|
+
const before = normalizeLf((await this.executor.readFile(target)).toString("utf8"));
|
|
72
|
+
const req = edit;
|
|
73
|
+
const oldString = normalizeLf(String(req.oldString ?? ""));
|
|
74
|
+
if (oldString.length === 0) throw new Error("edit oldString must be non-empty");
|
|
75
|
+
const newString = normalizeLf(String(req.newString ?? ""));
|
|
76
|
+
const matches = before.split(oldString).length - 1;
|
|
77
|
+
if (matches === 0) throw new Error("edit oldString not found in file");
|
|
78
|
+
if (!req.replaceAll && matches !== 1) throw new Error(`edit oldString matched ${matches} times; expected exactly one`);
|
|
79
|
+
const after = req.replaceAll ? before.split(oldString).join(newString) : before.replace(oldString, newString);
|
|
80
|
+
await this.executor.writeFile(target, after);
|
|
81
|
+
const afterInfo = await this.executor.stat(target);
|
|
82
|
+
return {
|
|
83
|
+
version: `${afterInfo?.size ?? after.length}:${afterInfo?.mtime ?? Date.now()}`,
|
|
84
|
+
before,
|
|
85
|
+
after
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
//#endregion
|
|
90
|
+
export { SshFileSystem };
|
|
91
|
+
|
|
92
|
+
//# sourceMappingURL=fs-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-provider.js","names":[],"sources":["../src/fs-provider.ts"],"sourcesContent":["import type { SshExecutor } from './executor.js'\n\nexport class SshFileSystem {\n constructor(private readonly executor: SshExecutor) {}\n\n async resolve(path: string): Promise<string> {\n return path\n }\n\n processPath(target: string): string {\n return target\n }\n\n fileUrl(target: string): string {\n return `file://${target}`\n }\n\n contains(parent: string, child: string): boolean {\n return child === parent || child.startsWith(`${parent}/`)\n }\n\n async stat(target: string, _signal?: AbortSignal): Promise<{ size: number; mtime: number; isDirectory: boolean; isFile: boolean } | undefined> {\n return this.executor.stat(target)\n }\n\n async lstat(path: string, _opts?: { cwd?: string }, _signal?: AbortSignal): Promise<{ size: number; mtime: number; isDirectory: boolean; isFile: boolean } | undefined> {\n return this.executor.stat(path)\n }\n\n async readText(target: string, _signal?: AbortSignal): Promise<string> {\n const data = await this.executor.readFile(target)\n return data.toString('utf8')\n }\n\n async streamText(target: string, _signal?: AbortSignal): Promise<AsyncIterable<string>> {\n const data = await this.executor.readFile(target)\n const text = data.toString('utf8')\n return (async function* () {\n yield text\n })()\n }\n\n async readBytes(target: string, _signal: AbortSignal | undefined, maxBytes: number): Promise<Uint8Array> {\n const data = await this.executor.readFile(target)\n const slice = data.subarray(0, maxBytes)\n return new Uint8Array(slice.buffer, slice.byteOffset, slice.byteLength)\n }\n\n async listDir(target: string, _signal?: AbortSignal): Promise<Array<{ name: string; path: string; isDirectory: boolean; isFile: boolean; isSymlink: boolean; size: number; mtime: number }>> {\n const entries = await this.executor.listDir(target)\n return entries.map((e) => ({\n name: e.name,\n path: `${target}/${e.name}`,\n isDirectory: e.isDir,\n isFile: e.isFile,\n isSymlink: e.isSymlink,\n size: e.size,\n mtime: e.mtime,\n }))\n }\n\n async writeText(target: string, content: string, _expected?: unknown, _signal?: AbortSignal, _policy?: unknown): Promise<{ operation: 'create' | 'update'; version: string; before: string | null; after: string }> {\n const normalizeLf = (s: string) => s.replace(/\\r\\n/g, '\\n')\n const beforeInfo = await this.executor.stat(target)\n let before: string | null = null\n if (beforeInfo?.isFile) {\n try {\n before = normalizeLf((await this.executor.readFile(target)).toString('utf8'))\n } catch {\n before = null\n }\n }\n const after = normalizeLf(content)\n await this.executor.writeFile(target, content)\n const afterInfo = await this.executor.stat(target)\n const version = `${afterInfo?.size ?? content.length}:${afterInfo?.mtime ?? Date.now()}`\n return { operation: before === null ? 'create' : 'update', version, before, after }\n }\n\n async editText(target: string, edit: unknown, _expected?: unknown, _signal?: AbortSignal, _policy?: unknown): Promise<{ version: string; before: string; after: string }> {\n const normalizeLf = (s: string) => s.replace(/\\r\\n/g, '\\n')\n const before = normalizeLf((await this.executor.readFile(target)).toString('utf8'))\n const req = edit as { oldString: string; newString: string; replaceAll: boolean }\n const oldString = normalizeLf(String(req.oldString ?? ''))\n if (oldString.length === 0) throw new Error('edit oldString must be non-empty')\n const newString = normalizeLf(String(req.newString ?? ''))\n const matches = before.split(oldString).length - 1\n if (matches === 0) throw new Error('edit oldString not found in file')\n if (!req.replaceAll && matches !== 1) throw new Error(`edit oldString matched ${matches} times; expected exactly one`)\n const after = req.replaceAll ? before.split(oldString).join(newString) : before.replace(oldString, newString)\n await this.executor.writeFile(target, after)\n const afterInfo = await this.executor.stat(target)\n const version = `${afterInfo?.size ?? after.length}:${afterInfo?.mtime ?? Date.now()}`\n return { version, before, after }\n }\n}\n"],"mappings":"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"}
|