@phpsandbox/sdk 0.0.37 → 0.0.39
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 +112 -64
- package/dist/browser/phpsandbox-sdk.esm.js.map +3 -3
- 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 +112 -64
- package/dist/browser/phpsandbox-sdk.iife.js.map +3 -3
- package/dist/browser/phpsandbox-sdk.iife.min.js +2 -2
- package/dist/browser/phpsandbox-sdk.iife.min.js.map +3 -3
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/socket/index.d.ts +1 -18
- package/dist/socket/index.d.ts.map +1 -1
- package/dist/socket/index.js +22 -40
- package/dist/socket/index.js.map +1 -1
- package/dist/terminal.d.ts +14 -1
- package/dist/terminal.d.ts.map +1 -1
- package/dist/terminal.js +79 -22
- package/dist/terminal.js.map +1 -1
- package/package.json +1 -1
package/dist/terminal.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { nanoid } from 'nanoid';
|
|
2
2
|
import { once } from './utils/promise.js';
|
|
3
|
+
const TERMINAL_INPUT_FLUSH_DELAY_MS = 8;
|
|
4
|
+
const terminalInputFlushPattern = /[\x00-\x1f\x7f]/;
|
|
3
5
|
export default class Terminal {
|
|
4
6
|
constructor(okra) {
|
|
5
7
|
this.okra = okra;
|
|
@@ -23,13 +25,43 @@ export default class Terminal {
|
|
|
23
25
|
this.okra.listen(`terminal.output.${id}`, handler);
|
|
24
26
|
}
|
|
25
27
|
input(id, input) {
|
|
26
|
-
return this.okra.
|
|
28
|
+
return Promise.resolve(this.okra.send('terminal.input', { id, input }));
|
|
27
29
|
}
|
|
28
30
|
listen(event, handler) {
|
|
29
31
|
return this.okra.listen(event, handler);
|
|
30
32
|
}
|
|
33
|
+
async attach(id, opts) {
|
|
34
|
+
const handle = this.processHandle(id, opts?.abortSignal);
|
|
35
|
+
const task = await this.okra.invoke('terminal.attach', {
|
|
36
|
+
id,
|
|
37
|
+
replayHistory: opts?.replayHistory,
|
|
38
|
+
}, { abortSignal: opts?.abortSignal });
|
|
39
|
+
if (!task) {
|
|
40
|
+
handle.dispose();
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
...handle.process,
|
|
45
|
+
...task,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
31
48
|
async spawn(command, args, opts) {
|
|
32
49
|
const id = opts?.id || nanoid();
|
|
50
|
+
const handle = this.processHandle(id, opts?.abortSignal);
|
|
51
|
+
const { abortSignal, ...otherOpts } = opts ?? {};
|
|
52
|
+
const result = await this.okra.invoke('terminal.spawn', {
|
|
53
|
+
command: [command, ...args],
|
|
54
|
+
opts: {
|
|
55
|
+
id,
|
|
56
|
+
...otherOpts,
|
|
57
|
+
},
|
|
58
|
+
}, { abortSignal });
|
|
59
|
+
return {
|
|
60
|
+
...handle.process,
|
|
61
|
+
...result,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
processHandle(id, abortSignal) {
|
|
33
65
|
const disposables = new Set();
|
|
34
66
|
const dispose = () => {
|
|
35
67
|
for (const disposable of disposables) {
|
|
@@ -37,11 +69,42 @@ export default class Terminal {
|
|
|
37
69
|
}
|
|
38
70
|
disposables.clear();
|
|
39
71
|
};
|
|
72
|
+
let pendingInput = '';
|
|
73
|
+
let inputFlushTimer;
|
|
74
|
+
const flushInput = () => {
|
|
75
|
+
if (inputFlushTimer) {
|
|
76
|
+
clearTimeout(inputFlushTimer);
|
|
77
|
+
inputFlushTimer = undefined;
|
|
78
|
+
}
|
|
79
|
+
if (pendingInput === '') {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
const input = pendingInput;
|
|
83
|
+
pendingInput = '';
|
|
84
|
+
void this.input(id, input);
|
|
85
|
+
};
|
|
86
|
+
const scheduleInputFlush = () => {
|
|
87
|
+
if (inputFlushTimer) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
inputFlushTimer = setTimeout(flushInput, TERMINAL_INPUT_FLUSH_DELAY_MS);
|
|
91
|
+
};
|
|
92
|
+
const queueInput = (chunk) => {
|
|
93
|
+
pendingInput += chunk;
|
|
94
|
+
if (terminalInputFlushPattern.test(chunk)) {
|
|
95
|
+
flushInput();
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
scheduleInputFlush();
|
|
99
|
+
};
|
|
100
|
+
const disposeInput = () => {
|
|
101
|
+
flushInput();
|
|
102
|
+
dispose();
|
|
103
|
+
};
|
|
40
104
|
const input = new WritableStream({
|
|
41
|
-
write:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
close: dispose,
|
|
105
|
+
write: queueInput,
|
|
106
|
+
close: disposeInput,
|
|
107
|
+
abort: disposeInput,
|
|
45
108
|
});
|
|
46
109
|
let controller = null;
|
|
47
110
|
const output = new ReadableStream({
|
|
@@ -53,7 +116,7 @@ export default class Terminal {
|
|
|
53
116
|
},
|
|
54
117
|
cancel: () => {
|
|
55
118
|
controller = null;
|
|
56
|
-
|
|
119
|
+
disposeInput();
|
|
57
120
|
},
|
|
58
121
|
});
|
|
59
122
|
const exit = new Promise((resolve) => {
|
|
@@ -66,35 +129,29 @@ export default class Terminal {
|
|
|
66
129
|
// Ignore close errors after cancellation.
|
|
67
130
|
}
|
|
68
131
|
}
|
|
69
|
-
|
|
132
|
+
disposeInput();
|
|
70
133
|
resolve(data.exitCode);
|
|
71
134
|
}));
|
|
72
135
|
});
|
|
73
136
|
const kill = once(() => {
|
|
74
|
-
|
|
137
|
+
disposeInput();
|
|
75
138
|
return this.okra.invoke('terminal.close', { id });
|
|
76
139
|
});
|
|
77
140
|
const resize = (dimensions) => {
|
|
78
141
|
this.okra.invoke('terminal.resize', { id, width: dimensions.cols, height: dimensions.rows });
|
|
79
142
|
};
|
|
80
|
-
const { abortSignal, ...otherOpts } = opts ?? {};
|
|
81
143
|
if (abortSignal) {
|
|
82
144
|
abortSignal.addEventListener('abort', kill);
|
|
83
145
|
}
|
|
84
|
-
const result = await this.okra.invoke('terminal.spawn', {
|
|
85
|
-
command: [command, ...args],
|
|
86
|
-
opts: {
|
|
87
|
-
id,
|
|
88
|
-
...otherOpts,
|
|
89
|
-
},
|
|
90
|
-
}, { abortSignal });
|
|
91
146
|
return {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
147
|
+
process: {
|
|
148
|
+
exit,
|
|
149
|
+
input,
|
|
150
|
+
output,
|
|
151
|
+
kill,
|
|
152
|
+
resize,
|
|
153
|
+
},
|
|
154
|
+
dispose: disposeInput,
|
|
98
155
|
};
|
|
99
156
|
}
|
|
100
157
|
}
|
package/dist/terminal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE1C,MAAM,6BAA6B,GAAG,CAAC,CAAC;AACxC,MAAM,yBAAyB,GAAG,iBAAiB,CAAC;AAuFpD,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC3B,YAAsB,IAAsB;QAAtB,SAAI,GAAJ,IAAI,CAAkB;IAAG,CAAC;IAEzC,IAAI;QACT,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAC3C,CAAC;IAEM,KAAK;QACV,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IAC5C,CAAC;IAEM,MAAM,CAAC,KAA0B;QACtC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;IAEM,SAAS,CAAC,OAA0B;QACzC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAEM,MAAM,CAAC,EAAU,EAAE,IAAsB;QAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtF,CAAC;IAEM,QAAQ,CAAC,EAAU,EAAE,OAA0D;QACpF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;IAEM,KAAK,CAAC,EAAU,EAAE,KAAa;QACpC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAEM,MAAM,CAAiC,KAAQ,EAAE,OAA0C;QAChG,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,IAA6D;QAC3F,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CACjC,iBAAiB,EACjB;YACE,EAAE;YACF,aAAa,EAAE,IAAI,EAAE,aAAa;SACnC,EACD,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,CACnC,CAAC;QAEF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO;YACL,GAAG,MAAM,CAAC,OAAO;YACjB,GAAG,IAAI;SACR,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAAe,EAAE,IAAc,EAAE,IAAmB;QACrE,MAAM,EAAE,GAAG,IAAI,EAAE,EAAE,IAAI,MAAM,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;QAEzD,MAAM,EAAE,WAAW,EAAE,GAAG,SAAS,EAAE,GAAG,IAAI,IAAI,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CACnC,gBAAgB,EAChB;YACE,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;YAC3B,IAAI,EAAE;gBACJ,EAAE;gBACF,GAAG,SAAS;aACb;SACF,EACD,EAAE,WAAW,EAAE,CAChB,CAAC;QAEF,OAAO;YACL,GAAG,MAAM,CAAC,OAAO;YACjB,GAAG,MAAM;SACV,CAAC;IACJ,CAAC;IAEO,aAAa,CAAC,EAAU,EAAE,WAAyB;QACzD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;QAC1C,MAAM,OAAO,GAAG,GAAG,EAAE;YACnB,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,UAAU,CAAC,OAAO,EAAE,CAAC;YACvB,CAAC;YACD,WAAW,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC,CAAC;QAEF,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,IAAI,eAA0D,CAAC;QAE/D,MAAM,UAAU,GAAG,GAAG,EAAE;YACtB,IAAI,eAAe,EAAE,CAAC;gBACpB,YAAY,CAAC,eAAe,CAAC,CAAC;gBAC9B,eAAe,GAAG,SAAS,CAAC;YAC9B,CAAC;YAED,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,MAAM,KAAK,GAAG,YAAY,CAAC;YAC3B,YAAY,GAAG,EAAE,CAAC;YAClB,KAAK,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7B,CAAC,CAAC;QAEF,MAAM,kBAAkB,GAAG,GAAG,EAAE;YAC9B,IAAI,eAAe,EAAE,CAAC;gBACpB,OAAO;YACT,CAAC;YAED,eAAe,GAAG,UAAU,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAAC;QAC1E,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE;YACnC,YAAY,IAAI,KAAK,CAAC;YAEtB,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1C,UAAU,EAAE,CAAC;gBACb,OAAO;YACT,CAAC;YAED,kBAAkB,EAAE,CAAC;QACvB,CAAC,CAAC;QAEF,MAAM,YAAY,GAAG,GAAG,EAAE;YACxB,UAAU,EAAE,CAAC;YACb,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC;QAEF,MAAM,KAAK,GAAG,IAAI,cAAc,CAAS;YACvC,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE,YAAY;YACnB,KAAK,EAAE,YAAY;SACpB,CAAC,CAAC;QAEH,IAAI,UAAU,GAAmD,IAAI,CAAC;QACtE,MAAM,MAAM,GAAG,IAAI,cAAc,CAAS;YACxC,KAAK,EAAE,CAAC,WAAW,EAAE,EAAE;gBACrB,UAAU,GAAG,WAAW,CAAC;gBACzB,WAAW,CAAC,GAAG,CACb,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;oBAC5C,UAAU,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACnC,CAAC,CAAC,CACH,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,GAAG,EAAE;gBACX,UAAU,GAAG,IAAI,CAAC;gBAClB,YAAY,EAAE,CAAC;YACjB,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YAC3C,WAAW,CAAC,GAAG,CACb,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;gBAC3C,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC;wBACH,UAAU,CAAC,KAAK,EAAE,CAAC;oBACrB,CAAC;oBAAC,MAAM,CAAC;wBACP,0CAA0C;oBAC5C,CAAC;gBACH,CAAC;gBAED,YAAY,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACzB,CAAC,CAAC,CACH,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE;YACrB,YAAY,EAAE,CAAC;YACf,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,CAAC,UAA0C,EAAE,EAAE;YAC5D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/F,CAAC,CAAC;QAEF,IAAI,WAAW,EAAE,CAAC;YAChB,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9C,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP,IAAI;gBACJ,KAAK;gBACL,MAAM;gBACN,IAAI;gBACJ,MAAM;aACP;YACD,OAAO,EAAE,YAAY;SACtB,CAAC;IACJ,CAAC;CACF"}
|
package/package.json
CHANGED