spawn-term 2.1.0 → 3.0.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.
Files changed (63) hide show
  1. package/dist/cjs/components/App.js +57 -44
  2. package/dist/cjs/components/App.js.map +1 -1
  3. package/dist/cjs/components/CompactProcessLine.js +3 -2
  4. package/dist/cjs/components/CompactProcessLine.js.map +1 -1
  5. package/dist/cjs/index-cjs.js +3 -3
  6. package/dist/cjs/index-cjs.js.map +1 -1
  7. package/dist/cjs/index-esm.js +4 -4
  8. package/dist/cjs/index-esm.js.map +1 -1
  9. package/dist/cjs/session.js +311 -0
  10. package/dist/cjs/session.js.map +1 -0
  11. package/dist/cjs/src/components/App.d.ts +6 -1
  12. package/dist/cjs/src/index-cjs.d.ts +3 -3
  13. package/dist/cjs/src/index-esm.d.ts +3 -3
  14. package/dist/cjs/src/session.d.ts +7 -0
  15. package/dist/cjs/src/state/StoreContext.d.ts +3 -0
  16. package/dist/cjs/src/state/processStore.d.ts +6 -4
  17. package/dist/cjs/src/types.d.ts +5 -6
  18. package/dist/cjs/state/StoreContext.js +28 -0
  19. package/dist/cjs/state/StoreContext.js.map +1 -0
  20. package/dist/cjs/state/processStore.js +15 -17
  21. package/dist/cjs/state/processStore.js.map +1 -1
  22. package/dist/cjs/types.js.map +1 -1
  23. package/dist/esm/components/App.js +54 -43
  24. package/dist/esm/components/App.js.map +1 -1
  25. package/dist/esm/components/CompactProcessLine.js +3 -2
  26. package/dist/esm/components/CompactProcessLine.js.map +1 -1
  27. package/dist/esm/index-cjs.js +1 -1
  28. package/dist/esm/index-cjs.js.map +1 -1
  29. package/dist/esm/index-esm.js +2 -2
  30. package/dist/esm/index-esm.js.map +1 -1
  31. package/dist/esm/session.js +218 -0
  32. package/dist/esm/session.js.map +1 -0
  33. package/dist/esm/src/components/App.d.ts +6 -1
  34. package/dist/esm/src/index-cjs.d.ts +3 -3
  35. package/dist/esm/src/index-esm.d.ts +3 -3
  36. package/dist/esm/src/session.d.ts +7 -0
  37. package/dist/esm/src/state/StoreContext.d.ts +3 -0
  38. package/dist/esm/src/state/processStore.d.ts +6 -4
  39. package/dist/esm/src/types.d.ts +5 -6
  40. package/dist/esm/state/StoreContext.js +9 -0
  41. package/dist/esm/state/StoreContext.js.map +1 -0
  42. package/dist/esm/state/processStore.js +13 -13
  43. package/dist/esm/state/processStore.js.map +1 -1
  44. package/dist/esm/types.js.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/cjs/createApp.js +0 -59
  47. package/dist/cjs/createApp.js.map +0 -1
  48. package/dist/cjs/spawnTerminal.js +0 -75
  49. package/dist/cjs/spawnTerminal.js.map +0 -1
  50. package/dist/cjs/src/createApp.d.ts +0 -6
  51. package/dist/cjs/src/spawnTerminal.d.ts +0 -2
  52. package/dist/cjs/src/worker.d.ts +0 -2
  53. package/dist/cjs/worker.js +0 -236
  54. package/dist/cjs/worker.js.map +0 -1
  55. package/dist/esm/createApp.js +0 -43
  56. package/dist/esm/createApp.js.map +0 -1
  57. package/dist/esm/spawnTerminal.js +0 -19
  58. package/dist/esm/spawnTerminal.js.map +0 -1
  59. package/dist/esm/src/createApp.d.ts +0 -6
  60. package/dist/esm/src/spawnTerminal.d.ts +0 -2
  61. package/dist/esm/src/worker.d.ts +0 -2
  62. package/dist/esm/worker.js +0 -175
  63. package/dist/esm/worker.js.map +0 -1
@@ -1,43 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { render } from 'ink';
3
- import App from './components/App.js';
4
- import { DEFAULT_MAX_FPS } from './constants.js';
5
- import { processStore } from './state/processStore.js';
6
- export default function createApp() {
7
- let refCount = 0;
8
- let inkApp = null;
9
- return {
10
- retain () {
11
- if (++refCount > 1) return processStore;
12
- // Render once - React handles all subsequent updates via useSyncExternalStore
13
- // Enable incremental rendering to only rewrite changed lines (reduces flicker)
14
- inkApp = render(/*#__PURE__*/ _jsx(App, {}), {
15
- incrementalRendering: true,
16
- maxFps: DEFAULT_MAX_FPS
17
- });
18
- return processStore;
19
- },
20
- release (callback) {
21
- if (--refCount > 0) {
22
- callback();
23
- return;
24
- }
25
- if (!inkApp) throw new Error('Expecting inkApp');
26
- // Signal exit to React component
27
- processStore.signalExit(()=>{
28
- processStore.reset();
29
- process.stdout.write('\x1b[?25h'); // show cursor
30
- callback();
31
- });
32
- // Wait for Ink to finish, then call the callback
33
- inkApp.waitUntilExit().then(()=>{
34
- const cb = processStore.getExitCallback();
35
- cb === null || cb === void 0 ? void 0 : cb();
36
- }).catch(()=>{
37
- const cb = processStore.getExitCallback();
38
- cb === null || cb === void 0 ? void 0 : cb();
39
- });
40
- inkApp = null;
41
- }
42
- };
43
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/createApp.tsx"],"sourcesContent":["import { render } from 'ink';\nimport App from './components/App.ts';\nimport { DEFAULT_MAX_FPS } from './constants.ts';\nimport { type ProcessStore, processStore } from './state/processStore.ts';\n\nexport type ReleaseCallback = () => void;\n\nexport default function createApp() {\n let refCount = 0;\n let inkApp: ReturnType<typeof render> | null = null;\n\n return {\n retain(): ProcessStore {\n if (++refCount > 1) return processStore;\n\n // Render once - React handles all subsequent updates via useSyncExternalStore\n // Enable incremental rendering to only rewrite changed lines (reduces flicker)\n inkApp = render(<App />, {\n incrementalRendering: true,\n maxFps: DEFAULT_MAX_FPS,\n });\n return processStore;\n },\n\n release(callback: ReleaseCallback): void {\n if (--refCount > 0) {\n callback();\n return;\n }\n if (!inkApp) throw new Error('Expecting inkApp');\n\n // Signal exit to React component\n processStore.signalExit(() => {\n processStore.reset();\n process.stdout.write('\\x1b[?25h'); // show cursor\n callback();\n });\n\n // Wait for Ink to finish, then call the callback\n inkApp\n .waitUntilExit()\n .then(() => {\n const cb = processStore.getExitCallback();\n cb?.();\n })\n .catch(() => {\n const cb = processStore.getExitCallback();\n cb?.();\n });\n\n inkApp = null;\n },\n };\n}\n"],"names":["render","App","DEFAULT_MAX_FPS","processStore","createApp","refCount","inkApp","retain","incrementalRendering","maxFps","release","callback","Error","signalExit","reset","process","stdout","write","waitUntilExit","then","cb","getExitCallback","catch"],"mappings":";AAAA,SAASA,MAAM,QAAQ,MAAM;AAC7B,OAAOC,SAAS,sBAAsB;AACtC,SAASC,eAAe,QAAQ,iBAAiB;AACjD,SAA4BC,YAAY,QAAQ,0BAA0B;AAI1E,eAAe,SAASC;IACtB,IAAIC,WAAW;IACf,IAAIC,SAA2C;IAE/C,OAAO;QACLC;YACE,IAAI,EAAEF,WAAW,GAAG,OAAOF;YAE3B,8EAA8E;YAC9E,+EAA+E;YAC/EG,SAASN,qBAAO,KAACC,UAAQ;gBACvBO,sBAAsB;gBACtBC,QAAQP;YACV;YACA,OAAOC;QACT;QAEAO,SAAQC,QAAyB;YAC/B,IAAI,EAAEN,WAAW,GAAG;gBAClBM;gBACA;YACF;YACA,IAAI,CAACL,QAAQ,MAAM,IAAIM,MAAM;YAE7B,iCAAiC;YACjCT,aAAaU,UAAU,CAAC;gBACtBV,aAAaW,KAAK;gBAClBC,QAAQC,MAAM,CAACC,KAAK,CAAC,cAAc,cAAc;gBACjDN;YACF;YAEA,iDAAiD;YACjDL,OACGY,aAAa,GACbC,IAAI,CAAC;gBACJ,MAAMC,KAAKjB,aAAakB,eAAe;gBACvCD,eAAAA,yBAAAA;YACF,GACCE,KAAK,CAAC;gBACL,MAAMF,KAAKjB,aAAakB,eAAe;gBACvCD,eAAAA,yBAAAA;YACF;YAEFd,SAAS;QACX;IACF;AACF"}
@@ -1,19 +0,0 @@
1
- function worker(command, args, spawnOptions, options, callback) {
2
- import('./worker.js').then((fn)=>{
3
- fn.default(command, args, spawnOptions, options, callback);
4
- }).catch(callback);
5
- }
6
- export default function spawnTerminal(command, args, spawnOptions, options, callback) {
7
- if (spawnOptions.stdio === 'inherit' && spawnOptions.encoding) {
8
- throw new Error("Options 'stdio: inherit' and 'encoding' are mutually exclusive. Use 'stdio: inherit' to display output, or 'encoding' to collect output.");
9
- }
10
- if (typeof options === 'function') {
11
- callback = options;
12
- options = {};
13
- }
14
- options = options || {};
15
- if (typeof callback === 'function') return worker(command, args, spawnOptions, options, callback);
16
- return new Promise((resolve, reject)=>worker(command, args, spawnOptions, options, (err, result)=>{
17
- err ? reject(err) : resolve(result);
18
- }));
19
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/spawnTerminal.ts"],"sourcesContent":["import type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.ts';\n\nfunction worker(command: string, args: string[], spawnOptions: SpawnOptions, options: TerminalOptions, callback: TerminalCallback): undefined {\n import('./worker.js')\n .then((fn) => {\n fn.default(command, args, spawnOptions, options, callback);\n })\n .catch(callback);\n}\n\nexport default function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult> {\n if (spawnOptions.stdio === 'inherit' && spawnOptions.encoding) {\n throw new Error(\"Options 'stdio: inherit' and 'encoding' are mutually exclusive. Use 'stdio: inherit' to display output, or 'encoding' to collect output.\");\n }\n\n if (typeof options === 'function') {\n callback = options as TerminalCallback;\n options = {};\n }\n options = options || {};\n\n if (typeof callback === 'function') return worker(command, args, spawnOptions, options, callback as TerminalCallback);\n return new Promise((resolve, reject) =>\n worker(command, args, spawnOptions, options, (err, result) => {\n err ? reject(err) : resolve(result);\n })\n );\n}\n"],"names":["worker","command","args","spawnOptions","options","callback","then","fn","default","catch","spawnTerminal","stdio","encoding","Error","Promise","resolve","reject","err","result"],"mappings":"AAEA,SAASA,OAAOC,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAAwB,EAAEC,QAA0B;IAC/H,MAAM,CAAC,eACJC,IAAI,CAAC,CAACC;QACLA,GAAGC,OAAO,CAACP,SAASC,MAAMC,cAAcC,SAASC;IACnD,GACCI,KAAK,CAACJ;AACX;AAEA,eAAe,SAASK,cAAcT,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAA4C,EAAEC,QAA2B;IAC1K,IAAIF,aAAaQ,KAAK,KAAK,aAAaR,aAAaS,QAAQ,EAAE;QAC7D,MAAM,IAAIC,MAAM;IAClB;IAEA,IAAI,OAAOT,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,IAAI,OAAOC,aAAa,YAAY,OAAOL,OAAOC,SAASC,MAAMC,cAAcC,SAASC;IACxF,OAAO,IAAIS,QAAQ,CAACC,SAASC,SAC3BhB,OAAOC,SAASC,MAAMC,cAAcC,SAAS,CAACa,KAAKC;YACjDD,MAAMD,OAAOC,OAAOF,QAAQG;QAC9B;AAEJ"}
@@ -1,6 +0,0 @@
1
- import { type ProcessStore } from './state/processStore.js';
2
- export type ReleaseCallback = () => void;
3
- export default function createApp(): {
4
- retain(): ProcessStore;
5
- release(callback: ReleaseCallback): void;
6
- };
@@ -1,2 +0,0 @@
1
- import type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';
2
- export default function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult>;
@@ -1,2 +0,0 @@
1
- import type { SpawnOptions, TerminalCallback, TerminalOptions } from './types.js';
2
- export default function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options: TerminalOptions, callback: TerminalCallback): undefined;
@@ -1,175 +0,0 @@
1
- function _define_property(obj, key, value) {
2
- if (key in obj) {
3
- Object.defineProperty(obj, key, {
4
- value: value,
5
- enumerable: true,
6
- configurable: true,
7
- writable: true
8
- });
9
- } else {
10
- obj[key] = value;
11
- }
12
- return obj;
13
- }
14
- function _object_spread(target) {
15
- for(var i = 1; i < arguments.length; i++){
16
- var source = arguments[i] != null ? arguments[i] : {};
17
- var ownKeys = Object.keys(source);
18
- if (typeof Object.getOwnPropertySymbols === "function") {
19
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
20
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
21
- }));
22
- }
23
- ownKeys.forEach(function(key) {
24
- _define_property(target, key, source[key]);
25
- });
26
- }
27
- return target;
28
- }
29
- function _object_without_properties(source, excluded) {
30
- if (source == null) return {};
31
- var target = _object_without_properties_loose(source, excluded);
32
- var key, i;
33
- if (Object.getOwnPropertySymbols) {
34
- var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
35
- for(i = 0; i < sourceSymbolKeys.length; i++){
36
- key = sourceSymbolKeys[i];
37
- if (excluded.indexOf(key) >= 0) continue;
38
- if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
39
- target[key] = source[key];
40
- }
41
- }
42
- return target;
43
- }
44
- function _object_without_properties_loose(source, excluded) {
45
- if (source == null) return {};
46
- var target = {};
47
- var sourceKeys = Object.keys(source);
48
- var key, i;
49
- for(i = 0; i < sourceKeys.length; i++){
50
- key = sourceKeys[i];
51
- if (excluded.indexOf(key) >= 0) continue;
52
- target[key] = source[key];
53
- }
54
- return target;
55
- }
56
- import spawn, { crossSpawn } from 'cross-spawn-cb';
57
- import crypto from 'crypto';
58
- import oo from 'on-one';
59
- import Queue from 'queue-cb';
60
- import createApp from './createApp.js';
61
- import addLines from './lib/addLines.js';
62
- import concatWritable from './lib/concatWritable.js';
63
- import formatArguments from './lib/formatArguments.js';
64
- import { LineType } from './types.js';
65
- const terminal = createApp();
66
- export default function spawnTerminal(command, args, spawnOptions, options, callback) {
67
- const { encoding, stdio } = spawnOptions, csOptions = _object_without_properties(spawnOptions, [
68
- "encoding",
69
- "stdio"
70
- ]);
71
- if (stdio === 'inherit') {
72
- const store = terminal.retain();
73
- const id = crypto.randomUUID();
74
- store.addProcess(_object_spread({
75
- id,
76
- title: [
77
- command
78
- ].concat(formatArguments(args)).join(' '),
79
- state: 'running',
80
- lines: []
81
- }, options));
82
- const cp = crossSpawn(command, args, csOptions);
83
- const outputs = {
84
- stdout: null,
85
- stderr: null
86
- };
87
- const queue = new Queue();
88
- if (cp.stdout) {
89
- outputs.stdout = addLines((lines)=>{
90
- store.appendLines(id, lines.map((text)=>({
91
- type: LineType.stdout,
92
- text
93
- })));
94
- });
95
- queue.defer(oo.bind(null, cp.stdout.pipe(outputs.stdout), [
96
- 'error',
97
- 'end',
98
- 'close',
99
- 'finish'
100
- ]));
101
- }
102
- if (cp.stderr) {
103
- outputs.stderr = addLines((lines)=>{
104
- store.appendLines(id, lines.map((text)=>({
105
- type: LineType.stderr,
106
- text
107
- })));
108
- });
109
- queue.defer(oo.bind(null, cp.stderr.pipe(outputs.stderr), [
110
- 'error',
111
- 'end',
112
- 'close',
113
- 'finish'
114
- ]));
115
- }
116
- queue.defer(spawn.worker.bind(null, cp, csOptions));
117
- queue.await((err)=>{
118
- const res = err ? err : {};
119
- res.stdout = outputs.stdout ? outputs.stdout.output : null;
120
- res.stderr = outputs.stderr ? outputs.stderr.output : null;
121
- res.output = [
122
- res.stdout,
123
- res.stderr,
124
- null
125
- ];
126
- store.updateProcess(id, {
127
- state: err ? 'error' : 'success'
128
- });
129
- terminal.release(()=>{
130
- err ? callback(err) : callback(null, res);
131
- });
132
- });
133
- } else {
134
- const cp = crossSpawn(command, args, csOptions);
135
- const outputs = {
136
- stdout: null,
137
- stderr: null
138
- };
139
- const queue = new Queue();
140
- if (cp.stdout) {
141
- outputs.stdout = concatWritable((output)=>{
142
- outputs.stdout.output = output.toString(encoding || 'utf8');
143
- });
144
- queue.defer(oo.bind(null, cp.stdout.pipe(outputs.stdout), [
145
- 'error',
146
- 'end',
147
- 'close',
148
- 'finish'
149
- ]));
150
- }
151
- if (cp.stderr) {
152
- outputs.stderr = concatWritable((output)=>{
153
- outputs.stderr.output = output.toString(encoding || 'utf8');
154
- });
155
- queue.defer(oo.bind(null, cp.stderr.pipe(outputs.stderr), [
156
- 'error',
157
- 'end',
158
- 'close',
159
- 'finish'
160
- ]));
161
- }
162
- queue.defer(spawn.worker.bind(null, cp, csOptions));
163
- queue.await((err)=>{
164
- const res = err ? err : {};
165
- res.stdout = outputs.stdout ? outputs.stdout.output : null;
166
- res.stderr = outputs.stderr ? outputs.stderr.output : null;
167
- res.output = [
168
- res.stdout,
169
- res.stderr,
170
- null
171
- ];
172
- err ? callback(err) : callback(null, res);
173
- });
174
- }
175
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/worker.ts"],"sourcesContent":["import spawn, { crossSpawn, type SpawnResult } from 'cross-spawn-cb';\nimport crypto from 'crypto';\nimport oo from 'on-one';\nimport Queue from 'queue-cb';\n\nimport createApp from './createApp.ts';\nimport addLines from './lib/addLines.ts';\nimport concatWritable from './lib/concatWritable.ts';\nimport formatArguments from './lib/formatArguments.ts';\n\nimport type { SpawnError, SpawnOptions, TerminalCallback, TerminalOptions } from './types.ts';\nimport { LineType } from './types.ts';\n\nconst terminal = createApp();\n\nexport default function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options: TerminalOptions, callback: TerminalCallback): undefined {\n const { encoding, stdio, ...csOptions } = spawnOptions;\n\n if (stdio === 'inherit') {\n const store = terminal.retain();\n const id = crypto.randomUUID();\n store.addProcess({ id, title: [command].concat(formatArguments(args)).join(' '), state: 'running', lines: [], ...options });\n\n const cp = crossSpawn(command, args, csOptions);\n const outputs = { stdout: null, stderr: null };\n\n const queue = new Queue();\n if (cp.stdout) {\n outputs.stdout = addLines((lines) => {\n store.appendLines(\n id,\n lines.map((text) => ({ type: LineType.stdout, text }))\n );\n });\n queue.defer(oo.bind(null, cp.stdout.pipe(outputs.stdout), ['error', 'end', 'close', 'finish']));\n }\n if (cp.stderr) {\n outputs.stderr = addLines((lines) => {\n store.appendLines(\n id,\n lines.map((text) => ({ type: LineType.stderr, text }))\n );\n });\n queue.defer(oo.bind(null, cp.stderr.pipe(outputs.stderr), ['error', 'end', 'close', 'finish']));\n }\n queue.defer(spawn.worker.bind(null, cp, csOptions));\n queue.await((err?: SpawnError) => {\n const res = (err ? err : {}) as SpawnResult;\n res.stdout = outputs.stdout ? outputs.stdout.output : null;\n res.stderr = outputs.stderr ? outputs.stderr.output : null;\n res.output = [res.stdout, res.stderr, null];\n store.updateProcess(id, { state: err ? 'error' : 'success' });\n\n terminal.release(() => {\n err ? callback(err) : callback(null, res);\n });\n });\n } else {\n const cp = crossSpawn(command, args, csOptions);\n const outputs = { stdout: null, stderr: null };\n\n const queue = new Queue();\n if (cp.stdout) {\n outputs.stdout = concatWritable((output) => {\n outputs.stdout.output = output.toString(encoding || 'utf8');\n });\n queue.defer(oo.bind(null, cp.stdout.pipe(outputs.stdout), ['error', 'end', 'close', 'finish']));\n }\n if (cp.stderr) {\n outputs.stderr = concatWritable((output) => {\n outputs.stderr.output = output.toString(encoding || 'utf8');\n });\n queue.defer(oo.bind(null, cp.stderr.pipe(outputs.stderr), ['error', 'end', 'close', 'finish']));\n }\n queue.defer(spawn.worker.bind(null, cp, csOptions));\n queue.await((err?: SpawnError) => {\n const res = (err ? err : {}) as SpawnResult;\n res.stdout = outputs.stdout ? outputs.stdout.output : null;\n res.stderr = outputs.stderr ? outputs.stderr.output : null;\n res.output = [res.stdout, res.stderr, null];\n err ? callback(err) : callback(null, res);\n });\n }\n}\n"],"names":["spawn","crossSpawn","crypto","oo","Queue","createApp","addLines","concatWritable","formatArguments","LineType","terminal","spawnTerminal","command","args","spawnOptions","options","callback","encoding","stdio","csOptions","store","retain","id","randomUUID","addProcess","title","concat","join","state","lines","cp","outputs","stdout","stderr","queue","appendLines","map","text","type","defer","bind","pipe","worker","await","err","res","output","updateProcess","release","toString"],"mappings":"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"}