@phpsandbox/sdk 0.0.27 → 0.0.28
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/dist/browser/phpsandbox-sdk.esm.js +83 -2
- package/dist/browser/phpsandbox-sdk.esm.js.map +2 -2
- package/dist/browser/phpsandbox-sdk.esm.min.js +2 -2
- package/dist/browser/phpsandbox-sdk.esm.min.js.map +3 -3
- package/dist/browser/phpsandbox-sdk.iife.js +83 -2
- package/dist/browser/phpsandbox-sdk.iife.js.map +2 -2
- package/dist/browser/phpsandbox-sdk.iife.min.js +2 -2
- package/dist/browser/phpsandbox-sdk.iife.min.js.map +3 -3
- package/dist/shell.d.ts +27 -6
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +82 -2
- package/dist/shell.js.map +1 -1
- package/package.json +1 -1
package/dist/shell.d.ts
CHANGED
|
@@ -1,14 +1,30 @@
|
|
|
1
|
-
import { Action, NotebookInstance } from './index.js';
|
|
2
|
-
|
|
1
|
+
import { Action, Disposable, NotebookInstance } from './index.js';
|
|
2
|
+
import type { SpawnOptions } from './terminal.js';
|
|
3
|
+
export interface ShellEventData {
|
|
4
|
+
'shell.output': {
|
|
5
|
+
output: string;
|
|
6
|
+
id: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
type PrefixKey<K extends keyof ShellEventData> = `${K}.${string}`;
|
|
10
|
+
type ShellEventPattern = PrefixKey<keyof ShellEventData>;
|
|
11
|
+
export type ShellEvents = ShellEventData & {
|
|
12
|
+
[K in ShellEventPattern]: ShellEventData['shell.output'];
|
|
13
|
+
};
|
|
14
|
+
export interface ShellExecInput {
|
|
15
|
+
command: string | string[];
|
|
16
|
+
opts?: Omit<SpawnOptions, 'abortSignal'>;
|
|
3
17
|
}
|
|
4
18
|
export interface ShellActions {
|
|
5
|
-
'shell.exec': Action<{
|
|
6
|
-
command: string | string;
|
|
7
|
-
}, {
|
|
19
|
+
'shell.exec': Action<ShellExecInput, {
|
|
8
20
|
output: string;
|
|
9
21
|
exitCode: number;
|
|
10
22
|
}>;
|
|
11
23
|
}
|
|
24
|
+
export interface ShellExecution {
|
|
25
|
+
output: ReadableStream<string>;
|
|
26
|
+
result: Promise<Result>;
|
|
27
|
+
}
|
|
12
28
|
export declare class CommandError extends Error {
|
|
13
29
|
output: string;
|
|
14
30
|
exitCode: number;
|
|
@@ -23,7 +39,12 @@ declare class Result {
|
|
|
23
39
|
export default class Shell {
|
|
24
40
|
protected okra: NotebookInstance;
|
|
25
41
|
constructor(okra: NotebookInstance);
|
|
26
|
-
|
|
42
|
+
onOutput(id: string, handler: (data: ShellEvents['shell.output']) => void): void;
|
|
43
|
+
listen<T extends keyof ShellEvents>(event: T, handler: (data: ShellEvents[T]) => void): Disposable;
|
|
44
|
+
exec(command: string | string[], opts?: SpawnOptions): Promise<Result>;
|
|
45
|
+
exec(command: string, args: string[], opts?: SpawnOptions): Promise<Result>;
|
|
46
|
+
execStream(command: string | string[], opts?: SpawnOptions): ShellExecution;
|
|
47
|
+
execStream(command: string, args: string[], opts?: SpawnOptions): ShellExecution;
|
|
27
48
|
}
|
|
28
49
|
export {};
|
|
29
50
|
//# sourceMappingURL=shell.d.ts.map
|
package/dist/shell.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE;QACd,MAAM,EAAE,MAAM,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;CACH;AAED,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,cAAc,IAAI,GAAG,CAAC,IAAI,MAAM,EAAE,CAAC;AAClE,KAAK,iBAAiB,GAAG,SAAS,CAAC,MAAM,cAAc,CAAC,CAAC;AACzD,MAAM,MAAM,WAAW,GAAG,cAAc,GAAG;KACxC,CAAC,IAAI,iBAAiB,GAAG,cAAc,CAAC,cAAc,CAAC;CACzD,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,IAAI,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC/B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;CACzB;AAYD,qBAAa,YAAa,SAAQ,KAAK;IAE5B,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,MAAM;gBADhB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM;CAI1B;AAED,cAAM,MAAM;IAED,MAAM,EAAE,MAAM;IACd,QAAQ,EAAE,MAAM;gBADhB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM;IAGlB,KAAK;CAOb;AAED,MAAM,CAAC,OAAO,OAAO,KAAK;IACZ,SAAS,CAAC,IAAI,EAAE,gBAAgB;gBAAtB,IAAI,EAAE,gBAAgB;IAErC,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,cAAc,CAAC,KAAK,IAAI,GAAG,IAAI;IAIhF,MAAM,CAAC,CAAC,SAAS,MAAM,WAAW,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,UAAU;IAI5F,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IACtE,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBjF,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,cAAc;IAC3E,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,cAAc;CA0ExF"}
|
package/dist/shell.js
CHANGED
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
import { nanoid } from 'nanoid';
|
|
2
|
+
function resolveExecInput(command, argsOrOpts = [], opts) {
|
|
3
|
+
const args = Array.isArray(argsOrOpts) ? argsOrOpts : [];
|
|
4
|
+
const resolvedOpts = Array.isArray(argsOrOpts) ? opts : argsOrOpts;
|
|
5
|
+
return {
|
|
6
|
+
command: Array.isArray(command) ? command : args.length > 0 ? [command, ...args] : command,
|
|
7
|
+
opts: resolvedOpts,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
1
10
|
export class CommandError extends Error {
|
|
2
11
|
constructor(output, exitCode) {
|
|
3
12
|
super(output);
|
|
@@ -21,9 +30,80 @@ export default class Shell {
|
|
|
21
30
|
constructor(okra) {
|
|
22
31
|
this.okra = okra;
|
|
23
32
|
}
|
|
24
|
-
|
|
25
|
-
|
|
33
|
+
onOutput(id, handler) {
|
|
34
|
+
this.okra.listen(`shell.output.${id}`, handler);
|
|
35
|
+
}
|
|
36
|
+
listen(event, handler) {
|
|
37
|
+
return this.okra.listen(event, handler);
|
|
38
|
+
}
|
|
39
|
+
async exec(command, argsOrOpts = [], opts) {
|
|
40
|
+
const input = resolveExecInput(command, argsOrOpts, opts);
|
|
41
|
+
const { abortSignal, ...payloadOpts } = input.opts ?? {};
|
|
42
|
+
const result = await this.okra.invoke('shell.exec', {
|
|
43
|
+
command: input.command,
|
|
44
|
+
opts: Object.keys(payloadOpts).length > 0 ? payloadOpts : undefined,
|
|
45
|
+
}, { abortSignal });
|
|
26
46
|
return new Result(result.output, result.exitCode);
|
|
27
47
|
}
|
|
48
|
+
execStream(command, argsOrOpts = [], opts) {
|
|
49
|
+
const input = resolveExecInput(command, argsOrOpts, opts);
|
|
50
|
+
const id = input.opts?.id || nanoid();
|
|
51
|
+
const disposables = new Set();
|
|
52
|
+
let controller = null;
|
|
53
|
+
let closed = false;
|
|
54
|
+
const dispose = () => {
|
|
55
|
+
for (const disposable of disposables) {
|
|
56
|
+
disposable.dispose();
|
|
57
|
+
}
|
|
58
|
+
disposables.clear();
|
|
59
|
+
};
|
|
60
|
+
const close = () => {
|
|
61
|
+
if (closed) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
closed = true;
|
|
65
|
+
dispose();
|
|
66
|
+
if (controller) {
|
|
67
|
+
try {
|
|
68
|
+
controller.close();
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Ignore close errors after cancellation.
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
const fail = (error) => {
|
|
76
|
+
if (closed) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
closed = true;
|
|
80
|
+
dispose();
|
|
81
|
+
if (controller) {
|
|
82
|
+
controller.error(error);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
const output = new ReadableStream({
|
|
86
|
+
start: (_controller) => {
|
|
87
|
+
controller = _controller;
|
|
88
|
+
disposables.add(this.listen(`shell.output.${id}`, (data) => {
|
|
89
|
+
controller?.enqueue(data.output);
|
|
90
|
+
}));
|
|
91
|
+
},
|
|
92
|
+
cancel: () => {
|
|
93
|
+
closed = true;
|
|
94
|
+
dispose();
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
const result = this.exec(input.command, { ...input.opts, id })
|
|
98
|
+
.then((response) => {
|
|
99
|
+
close();
|
|
100
|
+
return response;
|
|
101
|
+
})
|
|
102
|
+
.catch((error) => {
|
|
103
|
+
fail(error);
|
|
104
|
+
throw error;
|
|
105
|
+
});
|
|
106
|
+
return { output, result };
|
|
107
|
+
}
|
|
28
108
|
}
|
|
29
109
|
//# sourceMappingURL=shell.js.map
|
package/dist/shell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../src/shell.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED