@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/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.invoke('terminal.input', { id, input });
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: (chunk) => {
42
- this.input(id, chunk);
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
- dispose();
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
- dispose();
132
+ disposeInput();
70
133
  resolve(data.exitCode);
71
134
  }));
72
135
  });
73
136
  const kill = once(() => {
74
- dispose();
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
- exit,
93
- input,
94
- output,
95
- kill,
96
- resize,
97
- ...result,
147
+ process: {
148
+ exit,
149
+ input,
150
+ output,
151
+ kill,
152
+ resize,
153
+ },
154
+ dispose: disposeInput,
98
155
  };
99
156
  }
100
157
  }
@@ -1 +1 @@
1
- {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@phpsandbox/sdk",
3
- "version": "0.0.37",
3
+ "version": "0.0.39",
4
4
  "description": "A comprehensive TypeScript SDK for interacting with cloud-based PHP development environments",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",