spawn-term 0.2.4 → 0.2.6

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 (60) hide show
  1. package/dist/cjs/components/App.js +12 -6
  2. package/dist/cjs/components/App.js.map +1 -1
  3. package/dist/cjs/contexts/Store.d.cts +2 -1
  4. package/dist/cjs/contexts/Store.d.ts +2 -1
  5. package/dist/cjs/contexts/Store.js.map +1 -1
  6. package/dist/cjs/createApp.d.cts +3 -2
  7. package/dist/cjs/createApp.d.ts +3 -2
  8. package/dist/cjs/createApp.js +26 -8
  9. package/dist/cjs/createApp.js.map +1 -1
  10. package/dist/cjs/index-cjs.d.cts +2 -2
  11. package/dist/cjs/index-cjs.d.ts +2 -2
  12. package/dist/cjs/index-cjs.js.map +1 -1
  13. package/dist/cjs/index-esm.d.cts +2 -2
  14. package/dist/cjs/index-esm.d.ts +2 -2
  15. package/dist/cjs/index-esm.js +1 -1
  16. package/dist/cjs/index-esm.js.map +1 -1
  17. package/dist/cjs/ink.js.map +1 -1
  18. package/dist/cjs/lib/addLines.d.cts +3 -1
  19. package/dist/cjs/lib/addLines.d.ts +3 -1
  20. package/dist/cjs/lib/addLines.js.map +1 -1
  21. package/dist/cjs/lib/concatWritable.d.cts +3 -1
  22. package/dist/cjs/lib/concatWritable.d.ts +3 -1
  23. package/dist/cjs/lib/concatWritable.js.map +1 -1
  24. package/dist/cjs/lib/formatArguments.d.cts +1 -1
  25. package/dist/cjs/lib/formatArguments.d.ts +1 -1
  26. package/dist/cjs/lib/formatArguments.js.map +1 -1
  27. package/dist/cjs/types.d.cts +11 -3
  28. package/dist/cjs/types.d.ts +11 -3
  29. package/dist/cjs/types.js +0 -1
  30. package/dist/cjs/types.js.map +1 -1
  31. package/dist/cjs/worker.d.cts +2 -2
  32. package/dist/cjs/worker.d.ts +2 -2
  33. package/dist/cjs/worker.js +2 -3
  34. package/dist/cjs/worker.js.map +1 -1
  35. package/dist/esm/components/App.js +12 -6
  36. package/dist/esm/components/App.js.map +1 -1
  37. package/dist/esm/contexts/Store.d.ts +2 -1
  38. package/dist/esm/contexts/Store.js.map +1 -1
  39. package/dist/esm/createApp.d.ts +3 -2
  40. package/dist/esm/createApp.js +32 -10
  41. package/dist/esm/createApp.js.map +1 -1
  42. package/dist/esm/index-cjs.d.ts +2 -2
  43. package/dist/esm/index-cjs.js.map +1 -1
  44. package/dist/esm/index-esm.d.ts +2 -2
  45. package/dist/esm/index-esm.js +3 -1
  46. package/dist/esm/index-esm.js.map +1 -1
  47. package/dist/esm/ink.js.map +1 -1
  48. package/dist/esm/lib/addLines.d.ts +3 -1
  49. package/dist/esm/lib/addLines.js.map +1 -1
  50. package/dist/esm/lib/concatWritable.d.ts +3 -1
  51. package/dist/esm/lib/concatWritable.js.map +1 -1
  52. package/dist/esm/lib/formatArguments.d.ts +1 -1
  53. package/dist/esm/lib/formatArguments.js.map +1 -1
  54. package/dist/esm/types.d.ts +11 -3
  55. package/dist/esm/types.js +0 -1
  56. package/dist/esm/types.js.map +1 -1
  57. package/dist/esm/worker.d.ts +2 -2
  58. package/dist/esm/worker.js +2 -3
  59. package/dist/esm/worker.js.map +1 -1
  60. package/package.json +1 -1
@@ -22,12 +22,18 @@ function _interop_require_default(obj) {
22
22
  function App() {
23
23
  var store = (0, _react.useContext)(_Store.default);
24
24
  var appState = (0, _zustand.useStore)(store);
25
- return /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Box, {
26
- flexDirection: "column",
27
- children: appState.processes.map(function(item) {
28
- return /*#__PURE__*/ (0, _jsxruntime.jsx)(_ChildProcess.default, {
29
- item: item
30
- }, item.id);
25
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_react.Profiler, {
26
+ id: "App",
27
+ onRender: function(_id, phase) {
28
+ if (phase === 'update') store === null || store === void 0 ? void 0 : store.onRender();
29
+ },
30
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Box, {
31
+ flexDirection: "column",
32
+ children: appState.processes.map(function(item) {
33
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_ChildProcess.default, {
34
+ item: item
35
+ }, item.id);
36
+ })
31
37
  })
32
38
  });
33
39
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/App.tsx"],"sourcesContent":["import { useContext } from 'react';\nimport { useStore } from 'zustand';\nimport StoreContext from '../contexts/Store.js';\nimport { Box } from '../ink.js';\nimport type { AppState, ChildProcess as ChildProcessT } from '../types.js';\nimport ChildProcess from './ChildProcess.js';\n\nexport default function App() {\n const store = useContext(StoreContext);\n const appState = useStore(store) as AppState;\n\n return (\n <Box flexDirection=\"column\">\n {appState.processes.map((item: ChildProcessT) => (\n <ChildProcess key={item.id} item={item} />\n ))}\n </Box>\n );\n}\n"],"names":["App","store","useContext","StoreContext","appState","useStore","Box","flexDirection","processes","map","item","ChildProcess","id"],"mappings":";;;;+BAOA;;;eAAwBA;;;;qBAPG;uBACF;4DACA;mBACL;mEAEK;;;;;;AAEV,SAASA;IACtB,IAAMC,QAAQC,IAAAA,iBAAU,EAACC,cAAY;IACrC,IAAMC,WAAWC,IAAAA,iBAAQ,EAACJ;IAE1B,qBACE,qBAACK,QAAG;QAACC,eAAc;kBAChBH,SAASI,SAAS,CAACC,GAAG,CAAC,SAACC;iCACvB,qBAACC,qBAAY;gBAAeD,MAAMA;eAAfA,KAAKE,EAAE;;;AAIlC"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/App.tsx"],"sourcesContent":["import { Profiler, useContext } from 'react';\nimport { useStore } from 'zustand';\nimport StoreContext from '../contexts/Store.js';\nimport { Box } from '../ink.js';\nimport type { AppState, ChildProcess as ChildProcessT, Store } from '../types.js';\nimport ChildProcess from './ChildProcess.js';\n\nexport default function App() {\n const store = useContext<Store>(StoreContext);\n const appState = useStore(store) as AppState;\n\n return (\n <Profiler\n id=\"App\"\n onRender={(_id, phase) => {\n if (phase === 'update') store?.onRender();\n }}\n >\n <Box flexDirection=\"column\">\n {appState.processes.map((item: ChildProcessT) => (\n <ChildProcess key={item.id} item={item} />\n ))}\n </Box>\n </Profiler>\n );\n}\n"],"names":["App","store","useContext","StoreContext","appState","useStore","Profiler","id","onRender","_id","phase","Box","flexDirection","processes","map","item","ChildProcess"],"mappings":";;;;+BAOA;;;eAAwBA;;;;qBAPa;uBACZ;4DACA;mBACL;mEAEK;;;;;;AAEV,SAASA;IACtB,IAAMC,QAAQC,IAAAA,iBAAU,EAAQC,cAAY;IAC5C,IAAMC,WAAWC,IAAAA,iBAAQ,EAACJ;IAE1B,qBACE,qBAACK,eAAQ;QACPC,IAAG;QACHC,UAAU,SAACC,KAAKC;YACd,IAAIA,UAAU,UAAUT,kBAAAA,4BAAAA,MAAOO,QAAQ;QACzC;kBAEA,cAAA,qBAACG,QAAG;YAACC,eAAc;sBAChBR,SAASS,SAAS,CAACC,GAAG,CAAC,SAACC;qCACvB,qBAACC,qBAAY;oBAAeD,MAAMA;mBAAfA,KAAKR,EAAE;;;;AAKpC"}
@@ -1,2 +1,3 @@
1
- declare const _default: import("react").Context<any>;
1
+ import type { Store } from '../types.js';
2
+ declare const _default: import("react").Context<Store>;
2
3
  export default _default;
@@ -1,2 +1,3 @@
1
- declare const _default: import("react").Context<any>;
1
+ import type { Store } from '../types.js';
2
+ declare const _default: import("react").Context<Store>;
2
3
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/contexts/Store.tsx"],"sourcesContent":["import { createContext } from 'react';\nexport default createContext(undefined);\n"],"names":["createContext","undefined"],"mappings":";;;;+BACA;;;eAAA;;;qBAD8B;IAC9B,yBAAeA,IAAAA,oBAAa,EAACC"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/contexts/Store.tsx"],"sourcesContent":["import { createContext } from 'react';\nimport type { Store } from '../types.js';\n\nexport default createContext<Store>(undefined);\n"],"names":["createContext","undefined"],"mappings":";;;;+BAGA;;;eAAA;;;qBAH8B;IAG9B,yBAAeA,IAAAA,oBAAa,EAAQC"}
@@ -1,4 +1,5 @@
1
+ import type { ReleaseCallback, RetainCallback } from './types.js';
1
2
  export default function createApp(): {
2
- retain(fn: any): void;
3
- release(): void;
3
+ retain(fn: RetainCallback): undefined;
4
+ release(cb: ReleaseCallback): undefined;
4
5
  };
@@ -1,4 +1,5 @@
1
+ import type { ReleaseCallback, RetainCallback } from './types.js';
1
2
  export default function createApp(): {
2
- retain(fn: any): void;
3
- release(): void;
3
+ retain(fn: RetainCallback): undefined;
4
+ release(cb: ReleaseCallback): undefined;
4
5
  };
@@ -56,7 +56,8 @@ function createApp() {
56
56
  return {
57
57
  processes: [],
58
58
  addProcess: function(process1) {
59
- return set(function(state) {
59
+ store.nextRenders = store.renders + 1;
60
+ set(function(state) {
60
61
  return {
61
62
  processes: _to_consumable_array(state.processes).concat([
62
63
  process1
@@ -65,7 +66,8 @@ function createApp() {
65
66
  });
66
67
  },
67
68
  updateProcess: function(process1) {
68
- return set(function(state) {
69
+ store.nextRenders = store.renders + 1;
70
+ set(function(state) {
69
71
  return {
70
72
  processes: state.processes.map(function(x) {
71
73
  return x.id === process1.id ? process1 : x;
@@ -75,6 +77,13 @@ function createApp() {
75
77
  }
76
78
  };
77
79
  });
80
+ store.nextRenders = 0;
81
+ store.renders = 0;
82
+ store.waiting = [];
83
+ store.onRender = function() {
84
+ store.renders = store.nextRenders;
85
+ while(store === null || store === void 0 ? void 0 : store.waiting.length)store.waiting.pop()();
86
+ };
78
87
  inkApp = (0, _ink.render)(/*#__PURE__*/ (0, _jsxruntime.jsx)(_Store.default.Provider, {
79
88
  value: store,
80
89
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_App.default, {})
@@ -84,13 +93,22 @@ function createApp() {
84
93
  return fn(store);
85
94
  });
86
95
  },
87
- release: function release() {
88
- if (--refCount > 0) return;
96
+ release: function release(cb) {
97
+ if (--refCount > 0) {
98
+ if (store.renders === store.nextRenders) cb();
99
+ else store.waiting.push(cb);
100
+ return;
101
+ }
89
102
  if (!store) throw new Error('Expecting store');
90
- store = null;
91
- inkApp.unmount();
92
- inkApp = null;
93
- process.stdout.write('\x1b[?25h'); // show cursor
103
+ function done() {
104
+ inkApp.unmount();
105
+ inkApp = null;
106
+ store = null;
107
+ process.stdout.write('\x1b[?25h'); // show cursor
108
+ cb();
109
+ }
110
+ if (store.renders === store.nextRenders) done();
111
+ else store.waiting.push(done);
94
112
  }
95
113
  };
96
114
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/createApp.tsx"],"sourcesContent":["import { createStore } from 'zustand';\nimport App from './components/App.js';\nimport StoreContext from './contexts/Store.js';\n\n// @ts-ignore\nimport { type Instance, initialize, render } from './ink.js';\nimport type { AppState } from './types.js';\n\nexport default function createApp() {\n let refCount = 0;\n let store = null;\n let inkApp: Instance | null = null;\n\n return {\n retain(fn) {\n initialize(() => {\n if (++refCount > 1) return fn(store);\n if (store) throw new Error('Not expecting store');\n store = createStore<AppState>()((set) => ({\n processes: [],\n addProcess: (process) => set((state) => ({ processes: [...state.processes, process] })),\n updateProcess: (process) => set((state) => ({ processes: state.processes.map((x) => (x.id === process.id ? process : x)) })),\n }));\n inkApp = render(\n <StoreContext.Provider value={store}>\n <App />\n </StoreContext.Provider>,\n { patchConsole: false }\n );\n return fn(store);\n });\n },\n release() {\n if (--refCount > 0) return;\n if (!store) throw new Error('Expecting store');\n store = null;\n inkApp.unmount();\n inkApp = null;\n process.stdout.write('\\x1b[?25h'); // show cursor\n },\n };\n}\n"],"names":["createApp","refCount","store","inkApp","retain","fn","initialize","Error","createStore","set","processes","addProcess","process","state","updateProcess","map","x","id","render","StoreContext","Provider","value","App","patchConsole","release","unmount","stdout","write"],"mappings":";;;;+BAQA;;;eAAwBA;;;;uBARI;0DACZ;4DACS;mBAGyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGnC,SAASA;IACtB,IAAIC,WAAW;IACf,IAAIC,QAAQ;IACZ,IAAIC,SAA0B;IAE9B,OAAO;QACLC,QAAAA,SAAAA,OAAOC,EAAE;YACPC,IAAAA,eAAU,EAAC;gBACT,IAAI,EAAEL,WAAW,GAAG,OAAOI,GAAGH;gBAC9B,IAAIA,OAAO,MAAM,IAAIK,MAAM;gBAC3BL,QAAQM,IAAAA,oBAAW,IAAa,SAACC;2BAAS;wBACxCC,WAAW,EAAE;wBACbC,YAAY,SAACC;mCAAYH,IAAI,SAACI;uCAAW;oCAAEH,WAAW,AAAC,qBAAGG,MAAMH,SAAS,SAAnB;wCAAqBE;qCAAQ;gCAAC;;;wBACpFE,eAAe,SAACF;mCAAYH,IAAI,SAACI;uCAAW;oCAAEH,WAAWG,MAAMH,SAAS,CAACK,GAAG,CAAC,SAACC;+CAAOA,EAAEC,EAAE,KAAKL,SAAQK,EAAE,GAAGL,WAAUI;;gCAAI;;;oBAC3H;;gBACAb,SAASe,IAAAA,WAAM,gBACb,qBAACC,cAAY,CAACC,QAAQ;oBAACC,OAAOnB;8BAC5B,cAAA,qBAACoB,YAAG;oBAEN;oBAAEC,cAAc;gBAAM;gBAExB,OAAOlB,GAAGH;YACZ;QACF;QACAsB,SAAAA,SAAAA;YACE,IAAI,EAAEvB,WAAW,GAAG;YACpB,IAAI,CAACC,OAAO,MAAM,IAAIK,MAAM;YAC5BL,QAAQ;YACRC,OAAOsB,OAAO;YACdtB,SAAS;YACTS,QAAQc,MAAM,CAACC,KAAK,CAAC,cAAc,cAAc;QACnD;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/createApp.tsx"],"sourcesContent":["import { createStore } from 'zustand';\nimport App from './components/App.js';\nimport StoreContext from './contexts/Store.js';\n\n// @ts-ignore\nimport { type Instance, initialize, render } from './ink.js';\nimport type { AppState, ReleaseCallback, RetainCallback } from './types.js';\n\nexport default function createApp() {\n let refCount = 0;\n let store = null;\n let inkApp: Instance | null = null;\n\n return {\n retain(fn: RetainCallback): undefined {\n initialize(() => {\n if (++refCount > 1) return fn(store);\n if (store) throw new Error('Not expecting store');\n store = createStore<AppState>()((set) => ({\n processes: [],\n addProcess: (process) => {\n store.nextRenders = store.renders + 1;\n set((state) => ({ processes: [...state.processes, process] }));\n },\n updateProcess: (process) => {\n store.nextRenders = store.renders + 1;\n set((state) => ({ processes: state.processes.map((x) => (x.id === process.id ? process : x)) }));\n },\n }));\n store.nextRenders = 0;\n store.renders = 0;\n store.waiting = [];\n store.onRender = () => {\n store.renders = store.nextRenders;\n while (store?.waiting.length) store.waiting.pop()();\n };\n inkApp = render(\n <StoreContext.Provider value={store}>\n <App />\n </StoreContext.Provider>,\n { patchConsole: false }\n );\n return fn(store);\n });\n },\n release(cb: ReleaseCallback): undefined {\n if (--refCount > 0) {\n if (store.renders === store.nextRenders) cb();\n else store.waiting.push(cb);\n return;\n }\n if (!store) throw new Error('Expecting store');\n\n function done() {\n inkApp.unmount();\n inkApp = null;\n store = null;\n process.stdout.write('\\x1b[?25h'); // show cursor\n cb();\n }\n if (store.renders === store.nextRenders) done();\n else store.waiting.push(done);\n },\n };\n}\n"],"names":["createApp","refCount","store","inkApp","retain","fn","initialize","Error","createStore","set","processes","addProcess","process","nextRenders","renders","state","updateProcess","map","x","id","waiting","onRender","length","pop","render","StoreContext","Provider","value","App","patchConsole","release","cb","push","done","unmount","stdout","write"],"mappings":";;;;+BAQA;;;eAAwBA;;;;uBARI;0DACZ;4DACS;mBAGyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGnC,SAASA;IACtB,IAAIC,WAAW;IACf,IAAIC,QAAQ;IACZ,IAAIC,SAA0B;IAE9B,OAAO;QACLC,QAAAA,SAAAA,OAAOC,EAAkB;YACvBC,IAAAA,eAAU,EAAC;gBACT,IAAI,EAAEL,WAAW,GAAG,OAAOI,GAAGH;gBAC9B,IAAIA,OAAO,MAAM,IAAIK,MAAM;gBAC3BL,QAAQM,IAAAA,oBAAW,IAAa,SAACC;2BAAS;wBACxCC,WAAW,EAAE;wBACbC,YAAY,SAACC;4BACXV,MAAMW,WAAW,GAAGX,MAAMY,OAAO,GAAG;4BACpCL,IAAI,SAACM;uCAAW;oCAAEL,WAAW,AAAC,qBAAGK,MAAML,SAAS,SAAnB;wCAAqBE;qCAAQ;gCAAC;;wBAC7D;wBACAI,eAAe,SAACJ;4BACdV,MAAMW,WAAW,GAAGX,MAAMY,OAAO,GAAG;4BACpCL,IAAI,SAACM;uCAAW;oCAAEL,WAAWK,MAAML,SAAS,CAACO,GAAG,CAAC,SAACC;+CAAOA,EAAEC,EAAE,KAAKP,SAAQO,EAAE,GAAGP,WAAUM;;gCAAI;;wBAC/F;oBACF;;gBACAhB,MAAMW,WAAW,GAAG;gBACpBX,MAAMY,OAAO,GAAG;gBAChBZ,MAAMkB,OAAO,GAAG,EAAE;gBAClBlB,MAAMmB,QAAQ,GAAG;oBACfnB,MAAMY,OAAO,GAAGZ,MAAMW,WAAW;oBACjC,MAAOX,kBAAAA,4BAAAA,MAAOkB,OAAO,CAACE,MAAM,CAAEpB,MAAMkB,OAAO,CAACG,GAAG;gBACjD;gBACApB,SAASqB,IAAAA,WAAM,gBACb,qBAACC,cAAY,CAACC,QAAQ;oBAACC,OAAOzB;8BAC5B,cAAA,qBAAC0B,YAAG;oBAEN;oBAAEC,cAAc;gBAAM;gBAExB,OAAOxB,GAAGH;YACZ;QACF;QACA4B,SAAAA,SAAAA,QAAQC,EAAmB;YACzB,IAAI,EAAE9B,WAAW,GAAG;gBAClB,IAAIC,MAAMY,OAAO,KAAKZ,MAAMW,WAAW,EAAEkB;qBACpC7B,MAAMkB,OAAO,CAACY,IAAI,CAACD;gBACxB;YACF;YACA,IAAI,CAAC7B,OAAO,MAAM,IAAIK,MAAM;YAE5B,SAAS0B;gBACP9B,OAAO+B,OAAO;gBACd/B,SAAS;gBACTD,QAAQ;gBACRU,QAAQuB,MAAM,CAACC,KAAK,CAAC,cAAc,cAAc;gBACjDL;YACF;YACA,IAAI7B,MAAMY,OAAO,KAAKZ,MAAMW,WAAW,EAAEoB;iBACpC/B,MAAMkB,OAAO,CAACY,IAAI,CAACC;QAC1B;IACF;AACF"}
@@ -1,5 +1,5 @@
1
- import type { SpawnCallback, SpawnOptions, TerminalOptions } from './types.js';
2
- declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | SpawnCallback, callback?: SpawnCallback): any;
1
+ import type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';
2
+ declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult>;
3
3
  export * from './types';
4
4
  export { default as figures } from './lib/figures';
5
5
  export { default as formatArguments } from './lib/formatArguments';
@@ -1,5 +1,5 @@
1
- import type { SpawnCallback, SpawnOptions, TerminalOptions } from './types.js';
2
- declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | SpawnCallback, callback?: SpawnCallback): any;
1
+ import type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';
2
+ declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult>;
3
3
  export * from './types';
4
4
  export { default as figures } from './lib/figures';
5
5
  export { default as formatArguments } from './lib/formatArguments';
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/index-cjs.ts"],"sourcesContent":["import type { SpawnCallback, SpawnOptions, TerminalOptions } from './types.js';\n\nfunction spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | SpawnCallback, callback?: SpawnCallback) {\n const worker = require('./worker.js');\n\n if (typeof options === 'function') {\n callback = options as SpawnCallback;\n options = {};\n }\n options = options || {};\n\n if (typeof callback === 'function') return worker(command, args, spawnOptions, options, callback);\n return new Promise((resolve, reject) => worker(command, args, spawnOptions, options, (err, result) => (err ? reject(err) : resolve(result))));\n}\n\nconst major = +process.versions.node.split('.')[0];\n\nexport * from './types';\nexport { default as figures } from './lib/figures';\nexport { default as formatArguments } from './lib/formatArguments';\nexport default major > 10 ? spawnTerminal : undefined;\n"],"names":["figures","formatArguments","spawnTerminal","command","args","spawnOptions","options","callback","worker","require","Promise","resolve","reject","err","result","major","process","versions","node","split","undefined"],"mappings":";;;;;;;;;;;QAoBA;eAAA;;QAFoBA;eAAAA,gBAAO;;QACPC;eAAAA,wBAAe;;;qBAFrB;8DACqB;sEACQ;;;;;;;;;;;;;;;;;;;AAjB3C,SAASC,cAAcC,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAAyC,EAAEC,QAAwB;IACrJ,IAAMC,SAASC,QAAQ;IAEvB,IAAI,OAAOH,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,IAAI,OAAOC,aAAa,YAAY,OAAOC,OAAOL,SAASC,MAAMC,cAAcC,SAASC;IACxF,OAAO,IAAIG,QAAQ,SAACC,SAASC;eAAWJ,OAAOL,SAASC,MAAMC,cAAcC,SAAS,SAACO,KAAKC;mBAAYD,MAAMD,OAAOC,OAAOF,QAAQG;;;AACrI;AAEA,IAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;IAKlD,WAAeJ,QAAQ,KAAKb,gBAAgBkB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/index-cjs.ts"],"sourcesContent":["import type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';\n\nfunction spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult> {\n const worker = require('./worker.js');\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);\n return new Promise((resolve, reject) => worker(command, args, spawnOptions, options, (err, result) => (err ? reject(err) : resolve(result))));\n}\n\nconst major = +process.versions.node.split('.')[0];\n\nexport * from './types';\nexport { default as figures } from './lib/figures';\nexport { default as formatArguments } from './lib/formatArguments';\nexport default major > 10 ? spawnTerminal : undefined;\n"],"names":["figures","formatArguments","spawnTerminal","command","args","spawnOptions","options","callback","worker","require","Promise","resolve","reject","err","result","major","process","versions","node","split","undefined"],"mappings":";;;;;;;;;;;QAoBA;eAAA;;QAFoBA;eAAAA,gBAAO;;QACPC;eAAAA,wBAAe;;;qBAFrB;8DACqB;sEACQ;;;;;;;;;;;;;;;;;;;AAjB3C,SAASC,cAAcC,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAA4C,EAAEC,QAA2B;IAC3J,IAAMC,SAASC,QAAQ;IAEvB,IAAI,OAAOH,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,IAAI,OAAOC,aAAa,YAAY,OAAOC,OAAOL,SAASC,MAAMC,cAAcC,SAASC;IACxF,OAAO,IAAIG,QAAQ,SAACC,SAASC;eAAWJ,OAAOL,SAASC,MAAMC,cAAcC,SAAS,SAACO,KAAKC;mBAAYD,MAAMD,OAAOC,OAAOF,QAAQG;;;AACrI;AAEA,IAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;IAKlD,WAAeJ,QAAQ,KAAKb,gBAAgBkB"}
@@ -1,5 +1,5 @@
1
- import type { SpawnCallback, SpawnOptions, TerminalOptions } from './types.js';
2
- declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | SpawnCallback, callback?: SpawnCallback): void | Promise<unknown>;
1
+ import type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';
2
+ declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult>;
3
3
  export * from './types.js';
4
4
  export { default as figures } from './lib/figures.js';
5
5
  export { default as formatArguments } from './lib/formatArguments.js';
@@ -1,5 +1,5 @@
1
- import type { SpawnCallback, SpawnOptions, TerminalOptions } from './types.js';
2
- declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | SpawnCallback, callback?: SpawnCallback): void | Promise<unknown>;
1
+ import type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';
2
+ declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult>;
3
3
  export * from './types.js';
4
4
  export { default as figures } from './lib/figures.js';
5
5
  export { default as formatArguments } from './lib/formatArguments.js';
@@ -50,7 +50,7 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
50
50
  if (typeof callback === 'function') return (0, _worker.default)(command, args, spawnOptions, options, callback);
51
51
  return new Promise(function(resolve, reject) {
52
52
  return (0, _worker.default)(command, args, spawnOptions, options, function(err, result) {
53
- return err ? reject(err) : resolve(result);
53
+ err ? reject(err) : resolve(result);
54
54
  });
55
55
  });
56
56
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/index-esm.ts"],"sourcesContent":["import worker from './worker.js';\n\nimport type { SpawnCallback, SpawnOptions, TerminalOptions } from './types.js';\n\nfunction spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | SpawnCallback, callback?: SpawnCallback) {\n if (typeof options === 'function') {\n callback = options as SpawnCallback;\n options = {};\n }\n options = options || {};\n\n if (typeof callback === 'function') return worker(command, args, spawnOptions, options, callback);\n return new Promise((resolve, reject) => worker(command, args, spawnOptions, options, (err, result) => (err ? reject(err) : resolve(result))));\n}\n\nconst major = +process.versions.node.split('.')[0];\n\nexport * from './types.js';\nexport { default as figures } from './lib/figures.js';\nexport { default as formatArguments } from './lib/formatArguments.js';\nexport default major > 10 ? spawnTerminal : undefined;\n"],"names":["figures","formatArguments","spawnTerminal","command","args","spawnOptions","options","callback","worker","Promise","resolve","reject","err","result","major","process","versions","node","split","undefined"],"mappings":";;;;;;;;;;;QAoBA;eAAA;;QAFoBA;eAAAA,gBAAO;;QACPC;eAAAA,wBAAe;;;6DAnBhB;qBAiBL;8DACqB;sEACQ;;;;;;;;;;;;;;;;;;;AAf3C,SAASC,cAAcC,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAAyC,EAAEC,QAAwB;IACrJ,IAAI,OAAOD,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,IAAI,OAAOC,aAAa,YAAY,OAAOC,IAAAA,eAAM,EAACL,SAASC,MAAMC,cAAcC,SAASC;IACxF,OAAO,IAAIE,QAAQ,SAACC,SAASC;eAAWH,IAAAA,eAAM,EAACL,SAASC,MAAMC,cAAcC,SAAS,SAACM,KAAKC;mBAAYD,MAAMD,OAAOC,OAAOF,QAAQG;;;AACrI;AAEA,IAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;IAKlD,WAAeJ,QAAQ,KAAKZ,gBAAgBiB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/index-esm.ts"],"sourcesContent":["import worker from './worker.js';\n\nimport type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';\n\nfunction spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult> {\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\nconst major = +process.versions.node.split('.')[0];\n\nexport * from './types.js';\nexport { default as figures } from './lib/figures.js';\nexport { default as formatArguments } from './lib/formatArguments.js';\nexport default major > 10 ? spawnTerminal : undefined;\n"],"names":["figures","formatArguments","spawnTerminal","command","args","spawnOptions","options","callback","worker","Promise","resolve","reject","err","result","major","process","versions","node","split","undefined"],"mappings":";;;;;;;;;;;QAwBA;eAAA;;QAFoBA;eAAAA,gBAAO;;QACPC;eAAAA,wBAAe;;;6DAvBhB;qBAqBL;8DACqB;sEACQ;;;;;;;;;;;;;;;;;;;AAnB3C,SAASC,cAAcC,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAA4C,EAAEC,QAA2B;IAC3J,IAAI,OAAOD,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,IAAI,OAAOC,aAAa,YAAY,OAAOC,IAAAA,eAAM,EAACL,SAASC,MAAMC,cAAcC,SAASC;IACxF,OAAO,IAAIE,QAAQ,SAACC,SAASC;eAC3BH,IAAAA,eAAM,EAACL,SAASC,MAAMC,cAAcC,SAAS,SAACM,KAAKC;YACjDD,MAAMD,OAAOC,OAAOF,QAAQG;QAC9B;;AAEJ;AAEA,IAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;IAKlD,WAAeJ,QAAQ,KAAKZ,gBAAgBiB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/ink.ts"],"sourcesContent":["import 'core-js/actual/array/at.js';\nimport 'core-js/actual/object/has-own.js';\nimport 'core-js/actual/object/values.js';\nimport 'core-js/actual/string/replace-all.js';\nimport 'core-js/actual/string/trim-end.js';\nif (typeof process.stdout.off === 'undefined') process.stdout.off = (name, fn) => process.stdout.removeListener(name, fn);\nif (typeof process.stderr.off === 'undefined') process.stderr.off = (name, fn) => process.stderr.removeListener(name, fn);\n\n// @ts-ignore\nimport * as ink from '../../assets/ink.cjs';\nconst { Box, Newline, Spacer, Static, Text, Transform, measureElement, render, useApp, useFocus, useFocusManager, useInput, useStderr, useStdin, useStdout, initialize } = ink.default || ink;\nexport { Box, Newline, Spacer, Static, Text, Transform, measureElement, render, useApp, useFocus, useFocusManager, useInput, useStderr, useStdin, useStdout, initialize };\n"],"names":["Box","Newline","Spacer","Static","Text","Transform","initialize","measureElement","render","useApp","useFocus","useFocusManager","useInput","useStderr","useStdin","useStdout","process","stdout","off","name","fn","removeListener","stderr","ink","default"],"mappings":";;;;;;;;;;;QAWSA;eAAAA;;QAAKC;eAAAA;;QAASC;eAAAA;;QAAQC;eAAAA;;QAAQC;eAAAA;;QAAMC;eAAAA;;QAAgHC;eAAAA;;QAArGC;eAAAA;;QAAgBC;eAAAA;;QAAQC;eAAAA;;QAAQC;eAAAA;;QAAUC;eAAAA;;QAAiBC;eAAAA;;QAAUC;eAAAA;;QAAWC;eAAAA;;QAAUC;eAAAA;;;QAX3I;QACA;QACA;QACA;QACA;8DAKc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAJrB,IAAI,OAAOC,QAAQC,MAAM,CAACC,GAAG,KAAK,aAAaF,QAAQC,MAAM,CAACC,GAAG,GAAG,SAACC,MAAMC;WAAOJ,QAAQC,MAAM,CAACI,cAAc,CAACF,MAAMC;;AACtH,IAAI,OAAOJ,QAAQM,MAAM,CAACJ,GAAG,KAAK,aAAaF,QAAQM,MAAM,CAACJ,GAAG,GAAG,SAACC,MAAMC;WAAOJ,QAAQM,MAAM,CAACD,cAAc,CAACF,MAAMC;;AAItH,IAA2KG,OAAAA,QAAIC,OAAO,IAAID,SAAlLvB,MAAmKuB,KAAnKvB,KAAKC,UAA8JsB,KAA9JtB,SAASC,SAAqJqB,KAArJrB,QAAQC,SAA6IoB,KAA7IpB,QAAQC,OAAqImB,KAArInB,MAAMC,YAA+HkB,KAA/HlB,WAAWE,iBAAoHgB,KAApHhB,gBAAgBC,SAAoGe,KAApGf,QAAQC,SAA4Fc,KAA5Fd,QAAQC,WAAoFa,KAApFb,UAAUC,kBAA0EY,KAA1EZ,iBAAiBC,WAAyDW,KAAzDX,UAAUC,YAA+CU,KAA/CV,WAAWC,WAAoCS,KAApCT,UAAUC,YAA0BQ,KAA1BR,WAAWT,aAAeiB,KAAfjB"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/ink.ts"],"sourcesContent":["import 'core-js/actual/array/at.js';\nimport 'core-js/actual/object/has-own.js';\nimport 'core-js/actual/object/values.js';\nimport 'core-js/actual/string/replace-all.js';\nimport 'core-js/actual/string/trim-end.js';\nif (typeof process.stdout.off === 'undefined') process.stdout.off = (name, fn) => process.stdout.removeListener(name, fn);\nif (typeof process.stderr.off === 'undefined') process.stderr.off = (name, fn) => process.stderr.removeListener(name, fn);\n\n// @ts-ignore\nimport * as ink from '../../assets/ink.cjs';\nconst { Box, Newline, Spacer, Static, Text, Transform, measureElement, render, useApp, useFocus, useFocusManager, useInput, useStderr, useStdin, useStdout, initialize } = ink.default || ink;\n\nexport { Box, Newline, Spacer, Static, Text, Transform, measureElement, render, useApp, useFocus, useFocusManager, useInput, useStderr, useStdin, useStdout, initialize };\n"],"names":["Box","Newline","Spacer","Static","Text","Transform","initialize","measureElement","render","useApp","useFocus","useFocusManager","useInput","useStderr","useStdin","useStdout","process","stdout","off","name","fn","removeListener","stderr","ink","default"],"mappings":";;;;;;;;;;;QAYSA;eAAAA;;QAAKC;eAAAA;;QAASC;eAAAA;;QAAQC;eAAAA;;QAAQC;eAAAA;;QAAMC;eAAAA;;QAAgHC;eAAAA;;QAArGC;eAAAA;;QAAgBC;eAAAA;;QAAQC;eAAAA;;QAAQC;eAAAA;;QAAUC;eAAAA;;QAAiBC;eAAAA;;QAAUC;eAAAA;;QAAWC;eAAAA;;QAAUC;eAAAA;;;QAZ3I;QACA;QACA;QACA;QACA;8DAKc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAJrB,IAAI,OAAOC,QAAQC,MAAM,CAACC,GAAG,KAAK,aAAaF,QAAQC,MAAM,CAACC,GAAG,GAAG,SAACC,MAAMC;WAAOJ,QAAQC,MAAM,CAACI,cAAc,CAACF,MAAMC;;AACtH,IAAI,OAAOJ,QAAQM,MAAM,CAACJ,GAAG,KAAK,aAAaF,QAAQM,MAAM,CAACJ,GAAG,GAAG,SAACC,MAAMC;WAAOJ,QAAQM,MAAM,CAACD,cAAc,CAACF,MAAMC;;AAItH,IAA2KG,OAAAA,QAAIC,OAAO,IAAID,SAAlLvB,MAAmKuB,KAAnKvB,KAAKC,UAA8JsB,KAA9JtB,SAASC,SAAqJqB,KAArJrB,QAAQC,SAA6IoB,KAA7IpB,QAAQC,OAAqImB,KAArInB,MAAMC,YAA+HkB,KAA/HlB,WAAWE,iBAAoHgB,KAApHhB,gBAAgBC,SAAoGe,KAApGf,QAAQC,SAA4Fc,KAA5Fd,QAAQC,WAAoFa,KAApFb,UAAUC,kBAA0EY,KAA1EZ,iBAAiBC,WAAyDW,KAAzDX,UAAUC,YAA+CU,KAA/CV,WAAWC,WAAoCS,KAApCT,UAAUC,YAA0BQ,KAA1BR,WAAWT,aAAeiB,KAAfjB"}
@@ -1 +1,3 @@
1
- export default function addLines(fn: any): any;
1
+ import { Writable } from 'readable-stream';
2
+ export type Callback = (lines: string[]) => undefined;
3
+ export default function addLines(fn: Callback): Writable;
@@ -1 +1,3 @@
1
- export default function addLines(fn: any): any;
1
+ import { Writable } from 'readable-stream';
2
+ export type Callback = (lines: string[]) => undefined;
3
+ export default function addLines(fn: Callback): Writable;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/addLines.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nconst REGEX_NEW_LINE = /\\r?\\n|\\r/g;\n\nexport default function addLines(fn) {\n let last = '';\n\n const stream = new Writable({\n write(chunk, _enc, callback) {\n const more = last + chunk.toString('utf8');\n const lines = more.split(REGEX_NEW_LINE);\n last = lines.pop();\n if (lines.length > 0) fn(lines);\n callback();\n },\n });\n stream.on('finish', () => {\n if (last.length) fn([last]);\n last = '';\n });\n return stream;\n}\n"],"names":["addLines","REGEX_NEW_LINE","fn","last","stream","Writable","write","chunk","_enc","callback","more","toString","lines","split","pop","length","on"],"mappings":";;;;+BAIA;;;eAAwBA;;;8BAJC;AAEzB,IAAMC,iBAAiB;AAER,SAASD,SAASE,EAAE;IACjC,IAAIC,OAAO;IAEX,IAAMC,SAAS,IAAIC,wBAAQ,CAAC;QAC1BC,OAAAA,SAAAA,MAAMC,KAAK,EAAEC,IAAI,EAAEC,QAAQ;YACzB,IAAMC,OAAOP,OAAOI,MAAMI,QAAQ,CAAC;YACnC,IAAMC,QAAQF,KAAKG,KAAK,CAACZ;YACzBE,OAAOS,MAAME,GAAG;YAChB,IAAIF,MAAMG,MAAM,GAAG,GAAGb,GAAGU;YACzBH;QACF;IACF;IACAL,OAAOY,EAAE,CAAC,UAAU;QAClB,IAAIb,KAAKY,MAAM,EAAEb,GAAG;YAACC;SAAK;QAC1BA,OAAO;IACT;IACA,OAAOC;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/addLines.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nconst REGEX_NEW_LINE = /\\r?\\n|\\r/g;\n\nexport type Callback = (lines: string[]) => undefined;\n\nexport default function addLines(fn: Callback): Writable {\n let last = '';\n\n const stream = new Writable({\n write(chunk, _enc, callback) {\n const more = last + chunk.toString('utf8');\n const lines = more.split(REGEX_NEW_LINE);\n last = lines.pop();\n if (lines.length > 0) fn(lines);\n callback();\n },\n });\n stream.on('finish', () => {\n if (last.length) fn([last]);\n last = '';\n });\n return stream;\n}\n"],"names":["addLines","REGEX_NEW_LINE","fn","last","stream","Writable","write","chunk","_enc","callback","more","toString","lines","split","pop","length","on"],"mappings":";;;;+BAMA;;;eAAwBA;;;8BANC;AAEzB,IAAMC,iBAAiB;AAIR,SAASD,SAASE,EAAY;IAC3C,IAAIC,OAAO;IAEX,IAAMC,SAAS,IAAIC,wBAAQ,CAAC;QAC1BC,OAAAA,SAAAA,MAAMC,KAAK,EAAEC,IAAI,EAAEC,QAAQ;YACzB,IAAMC,OAAOP,OAAOI,MAAMI,QAAQ,CAAC;YACnC,IAAMC,QAAQF,KAAKG,KAAK,CAACZ;YACzBE,OAAOS,MAAME,GAAG;YAChB,IAAIF,MAAMG,MAAM,GAAG,GAAGb,GAAGU;YACzBH;QACF;IACF;IACAL,OAAOY,EAAE,CAAC,UAAU;QAClB,IAAIb,KAAKY,MAAM,EAAEb,GAAG;YAACC;SAAK;QAC1BA,OAAO;IACT;IACA,OAAOC;AACT"}
@@ -1 +1,3 @@
1
- export default function concatWritable(callback: any): any;
1
+ import { Writable } from 'readable-stream';
2
+ export type Callback = (lines: Buffer) => undefined;
3
+ export default function concatWritable(callback: Callback): Writable;
@@ -1 +1,3 @@
1
- export default function concatWritable(callback: any): any;
1
+ import { Writable } from 'readable-stream';
2
+ export type Callback = (lines: Buffer) => undefined;
3
+ export default function concatWritable(callback: Callback): Writable;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/concatWritable.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nexport default function concatWritable(callback) {\n const chunks = [];\n const stream = new Writable({\n write: (chunk, _encoding, next) => {\n chunks.push(chunk);\n next();\n },\n });\n stream.on('finish', () => callback(Buffer.concat(chunks.splice(0))));\n return stream;\n}\n"],"names":["concatWritable","callback","chunks","stream","Writable","write","chunk","_encoding","next","push","on","Buffer","concat","splice"],"mappings":";;;;+BAEA;;;eAAwBA;;;8BAFC;AAEV,SAASA,eAAeC,QAAQ;IAC7C,IAAMC,SAAS,EAAE;IACjB,IAAMC,SAAS,IAAIC,wBAAQ,CAAC;QAC1BC,OAAO,SAACC,OAAOC,WAAWC;YACxBN,OAAOO,IAAI,CAACH;YACZE;QACF;IACF;IACAL,OAAOO,EAAE,CAAC,UAAU;eAAMT,SAASU,OAAOC,MAAM,CAACV,OAAOW,MAAM,CAAC;;IAC/D,OAAOV;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/concatWritable.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nexport type Callback = (lines: Buffer) => undefined;\n\nexport default function concatWritable(callback: Callback): Writable {\n const chunks = [];\n const stream = new Writable({\n write: (chunk, _encoding, next) => {\n chunks.push(chunk);\n next();\n },\n });\n stream.on('finish', () => callback(Buffer.concat(chunks.splice(0))));\n return stream;\n}\n"],"names":["concatWritable","callback","chunks","stream","Writable","write","chunk","_encoding","next","push","on","Buffer","concat","splice"],"mappings":";;;;+BAIA;;;eAAwBA;;;8BAJC;AAIV,SAASA,eAAeC,QAAkB;IACvD,IAAMC,SAAS,EAAE;IACjB,IAAMC,SAAS,IAAIC,wBAAQ,CAAC;QAC1BC,OAAO,SAACC,OAAOC,WAAWC;YACxBN,OAAOO,IAAI,CAACH;YACZE;QACF;IACF;IACAL,OAAOO,EAAE,CAAC,UAAU;eAAMT,SAASU,OAAOC,MAAM,CAACV,OAAOW,MAAM,CAAC;;IAC/D,OAAOV;AACT"}
@@ -1,2 +1,2 @@
1
- declare const _default: (args: any) => any;
1
+ declare const _default: (args: string[]) => string[];
2
2
  export default _default;
@@ -1,2 +1,2 @@
1
- declare const _default: (args: any) => any;
1
+ declare const _default: (args: string[]) => string[];
2
2
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/formatArguments.ts"],"sourcesContent":["export default (args) => args.map((text) => (text.indexOf(' ') >= 0 ? `\"${text}\"` : text));\n"],"names":["args","map","text","indexOf"],"mappings":";;;;+BAAA;;;eAAA;;;IAAA,WAAe,SAACA;WAASA,KAAKC,GAAG,CAAC,SAACC;eAAUA,KAAKC,OAAO,CAAC,QAAQ,IAAI,AAAC,IAAQ,OAALD,MAAK,OAAKA"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/formatArguments.ts"],"sourcesContent":["export default (args: string[]): string[] => args.map((text) => (text.indexOf(' ') >= 0 ? `\"${text}\"` : text));\n"],"names":["args","map","text","indexOf"],"mappings":";;;;+BAAA;;;eAAA;;;IAAA,WAAe,SAACA;WAA6BA,KAAKC,GAAG,CAAC,SAACC;eAAUA,KAAKC,OAAO,CAAC,QAAQ,IAAI,AAAC,IAAQ,OAALD,MAAK,OAAKA"}
@@ -1,8 +1,11 @@
1
- export type { SpawnOptions, SpawnCallback, SpawnResult } from 'cross-spawn-cb';
1
+ import type { StoreApi } from 'zustand';
2
+ export type { SpawnOptions, SpawnCallback, SpawnResult, SpawnError } from 'cross-spawn-cb';
3
+ import type { SpawnError, SpawnResult } from 'cross-spawn-cb';
2
4
  export type TerminalOptions = {
3
5
  group?: string;
4
- expanded?: string;
6
+ expanded?: boolean;
5
7
  };
8
+ export type TerminalCallback = (error?: SpawnError, result?: SpawnResult) => undefined;
6
9
  export declare const LineType: {
7
10
  readonly stdout: 1;
8
11
  readonly stderr: 2;
@@ -18,10 +21,15 @@ export type ChildProcess = {
18
21
  title: string;
19
22
  state: State;
20
23
  lines: Line[];
21
- expanded?: string;
24
+ expanded?: boolean;
22
25
  };
23
26
  export interface AppState {
24
27
  processes: ChildProcess[];
25
28
  addProcess: (process: ChildProcess) => void;
26
29
  updateProcess: (process: ChildProcess) => void;
27
30
  }
31
+ export interface Store extends StoreApi<AppState> {
32
+ onRender: () => undefined;
33
+ }
34
+ export type RetainCallback = (app: Store) => undefined;
35
+ export type ReleaseCallback = () => undefined;
@@ -1,8 +1,11 @@
1
- export type { SpawnOptions, SpawnCallback, SpawnResult } from 'cross-spawn-cb';
1
+ import type { StoreApi } from 'zustand';
2
+ export type { SpawnOptions, SpawnCallback, SpawnResult, SpawnError } from 'cross-spawn-cb';
3
+ import type { SpawnError, SpawnResult } from 'cross-spawn-cb';
2
4
  export type TerminalOptions = {
3
5
  group?: string;
4
- expanded?: string;
6
+ expanded?: boolean;
5
7
  };
8
+ export type TerminalCallback = (error?: SpawnError, result?: SpawnResult) => undefined;
6
9
  export declare const LineType: {
7
10
  readonly stdout: 1;
8
11
  readonly stderr: 2;
@@ -18,10 +21,15 @@ export type ChildProcess = {
18
21
  title: string;
19
22
  state: State;
20
23
  lines: Line[];
21
- expanded?: string;
24
+ expanded?: boolean;
22
25
  };
23
26
  export interface AppState {
24
27
  processes: ChildProcess[];
25
28
  addProcess: (process: ChildProcess) => void;
26
29
  updateProcess: (process: ChildProcess) => void;
27
30
  }
31
+ export interface Store extends StoreApi<AppState> {
32
+ onRender: () => undefined;
33
+ }
34
+ export type RetainCallback = (app: Store) => undefined;
35
+ export type ReleaseCallback = () => undefined;
package/dist/cjs/types.js CHANGED
@@ -1,4 +1,3 @@
1
- // @ts-ignore
2
1
  "use strict";
3
2
  Object.defineProperty(exports, "__esModule", {
4
3
  value: true
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/types.ts"],"sourcesContent":["// @ts-ignore\nexport type { SpawnOptions, SpawnCallback, SpawnResult } from 'cross-spawn-cb';\n\nexport type TerminalOptions = {\n group?: string;\n expanded?: string;\n};\n\nexport const LineType = {\n stdout: 1,\n stderr: 2,\n} as const;\n\nexport type Line = {\n type: (typeof LineType)[keyof typeof LineType];\n text: string;\n};\n\nexport type State = 'running' | 'error' | 'success';\nexport type ChildProcess = {\n id: string;\n group?: string;\n title: string;\n state: State;\n lines: Line[];\n expanded?: string;\n};\n\nexport interface AppState {\n processes: ChildProcess[];\n addProcess: (process: ChildProcess) => void;\n updateProcess: (process: ChildProcess) => void;\n}\n"],"names":["LineType","stdout","stderr"],"mappings":"AAAA,aAAa;;;;;+BAQAA;;;eAAAA;;;AAAN,IAAMA,WAAW;IACtBC,QAAQ;IACRC,QAAQ;AACV"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/types.ts"],"sourcesContent":["import type { StoreApi } from 'zustand';\nexport type { SpawnOptions, SpawnCallback, SpawnResult, SpawnError } from 'cross-spawn-cb';\nimport type { SpawnError, SpawnResult } from 'cross-spawn-cb';\n\nexport type TerminalOptions = {\n group?: string;\n expanded?: boolean;\n};\n\nexport type TerminalCallback = (error?: SpawnError, result?: SpawnResult) => undefined;\n\nexport const LineType = {\n stdout: 1,\n stderr: 2,\n} as const;\n\nexport type Line = {\n type: (typeof LineType)[keyof typeof LineType];\n text: string;\n};\n\nexport type State = 'running' | 'error' | 'success';\nexport type ChildProcess = {\n id: string;\n group?: string;\n title: string;\n state: State;\n lines: Line[];\n expanded?: boolean;\n};\n\nexport interface AppState {\n processes: ChildProcess[];\n addProcess: (process: ChildProcess) => void;\n updateProcess: (process: ChildProcess) => void;\n}\n\nexport interface Store extends StoreApi<AppState> {\n onRender: () => undefined;\n}\nexport type RetainCallback = (app: Store) => undefined;\nexport type ReleaseCallback = () => undefined;\n"],"names":["LineType","stdout","stderr"],"mappings":";;;;+BAWaA;;;eAAAA;;;AAAN,IAAMA,WAAW;IACtBC,QAAQ;IACRC,QAAQ;AACV"}
@@ -1,2 +1,2 @@
1
- import type { SpawnOptions, TerminalOptions } from './types.js';
2
- export default function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options: TerminalOptions, callback: any): void;
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,2 +1,2 @@
1
- import type { SpawnOptions, TerminalOptions } from './types.js';
2
- export default function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options: TerminalOptions, callback: any): void;
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;
@@ -226,9 +226,8 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
226
226
  store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
227
227
  state: err ? 'error' : 'success'
228
228
  }));
229
- // let rendering complete
230
- setTimeout(function() {
231
- terminal.release();
229
+ // ensure rendering completes
230
+ terminal.release(function() {
232
231
  err ? callback(err) : callback(null, res);
233
232
  });
234
233
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/worker.ts"],"sourcesContent":["// @ts-ignore\nimport spawn, { crossSpawn, type SpawnResult } from 'cross-spawn-cb';\nimport uuid from 'lil-uuid';\nimport oo from 'on-one';\nimport Queue from 'queue-cb';\n\nimport createApp from './createApp.js';\nimport addLines from './lib/addLines.js';\nimport concatWritable from './lib/concatWritable.js';\nimport formatArguments from './lib/formatArguments.js';\n\nimport type { SpawnOptions, TerminalOptions } from './types.js';\nimport { LineType } from './types.js';\n\nconst terminal = createApp();\n\nexport default function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options: TerminalOptions, callback) {\n const { encoding, stdio, ...csOptions } = spawnOptions;\n\n if (stdio === 'inherit') {\n terminal.retain((store) => {\n const id = uuid();\n store.getState().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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stdout, text }))) });\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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stderr, text }))) });\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, encoding: 'utf8' }));\n queue.await((err) => {\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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, state: err ? 'error' : 'success' });\n\n // let rendering complete\n setTimeout(() => {\n terminal.release();\n err ? callback(err) : callback(null, res);\n });\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, encoding: encoding || 'utf8' }));\n queue.await((err) => {\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":["spawnTerminal","terminal","createApp","command","args","spawnOptions","options","callback","encoding","stdio","csOptions","retain","store","id","uuid","getState","addProcess","title","concat","formatArguments","join","state","lines","cp","crossSpawn","outputs","stdout","stderr","queue","Queue","addLines","item","processes","find","x","updateProcess","map","text","type","LineType","defer","oo","bind","pipe","spawn","worker","await","err","res","output","setTimeout","release","concatWritable","toString"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/worker.ts"],"sourcesContent":["// @ts-ignore\nimport spawn, { crossSpawn, type SpawnResult } from 'cross-spawn-cb';\nimport uuid from 'lil-uuid';\nimport oo from 'on-one';\nimport Queue from 'queue-cb';\n\nimport createApp from './createApp.js';\nimport addLines from './lib/addLines.js';\nimport concatWritable from './lib/concatWritable.js';\nimport formatArguments from './lib/formatArguments.js';\n\nimport type { SpawnError, SpawnOptions, TerminalCallback, TerminalOptions } from './types.js';\nimport { LineType } from './types.js';\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 terminal.retain((store) => {\n const id = uuid();\n store.getState().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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stdout, text }))) });\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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stderr, text }))) });\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, encoding: 'utf8' }));\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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, state: err ? 'error' : 'success' });\n\n // ensure rendering completes\n terminal.release(() => {\n err ? callback(err) : callback(null, res);\n });\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, encoding: encoding || 'utf8' }));\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":["spawnTerminal","terminal","createApp","command","args","spawnOptions","options","callback","encoding","stdio","csOptions","retain","store","id","uuid","getState","addProcess","title","concat","formatArguments","join","state","lines","cp","crossSpawn","outputs","stdout","stderr","queue","Queue","addLines","item","processes","find","x","updateProcess","map","text","type","LineType","defer","oo","bind","pipe","spawn","worker","await","err","res","output","release","concatWritable","toString"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { useContext } from 'react';
2
+ import { Profiler, useContext } from 'react';
3
3
  import { useStore } from 'zustand';
4
4
  import StoreContext from '../contexts/Store.js';
5
5
  import { Box } from '../ink.js';
@@ -7,10 +7,16 @@ import ChildProcess from './ChildProcess.js';
7
7
  export default function App() {
8
8
  const store = useContext(StoreContext);
9
9
  const appState = useStore(store);
10
- return /*#__PURE__*/ _jsx(Box, {
11
- flexDirection: "column",
12
- children: appState.processes.map((item)=>/*#__PURE__*/ _jsx(ChildProcess, {
13
- item: item
14
- }, item.id))
10
+ return /*#__PURE__*/ _jsx(Profiler, {
11
+ id: "App",
12
+ onRender: (_id, phase)=>{
13
+ if (phase === 'update') store === null || store === void 0 ? void 0 : store.onRender();
14
+ },
15
+ children: /*#__PURE__*/ _jsx(Box, {
16
+ flexDirection: "column",
17
+ children: appState.processes.map((item)=>/*#__PURE__*/ _jsx(ChildProcess, {
18
+ item: item
19
+ }, item.id))
20
+ })
15
21
  });
16
22
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/App.tsx"],"sourcesContent":["import { useContext } from 'react';\nimport { useStore } from 'zustand';\nimport StoreContext from '../contexts/Store.js';\nimport { Box } from '../ink.js';\nimport type { AppState, ChildProcess as ChildProcessT } from '../types.js';\nimport ChildProcess from './ChildProcess.js';\n\nexport default function App() {\n const store = useContext(StoreContext);\n const appState = useStore(store) as AppState;\n\n return (\n <Box flexDirection=\"column\">\n {appState.processes.map((item: ChildProcessT) => (\n <ChildProcess key={item.id} item={item} />\n ))}\n </Box>\n );\n}\n"],"names":["useContext","useStore","StoreContext","Box","ChildProcess","App","store","appState","flexDirection","processes","map","item","id"],"mappings":";AAAA,SAASA,UAAU,QAAQ,QAAQ;AACnC,SAASC,QAAQ,QAAQ,UAAU;AACnC,OAAOC,kBAAkB,uBAAuB;AAChD,SAASC,GAAG,QAAQ,YAAY;AAEhC,OAAOC,kBAAkB,oBAAoB;AAE7C,eAAe,SAASC;IACtB,MAAMC,QAAQN,WAAWE;IACzB,MAAMK,WAAWN,SAASK;IAE1B,qBACE,KAACH;QAAIK,eAAc;kBAChBD,SAASE,SAAS,CAACC,GAAG,CAAC,CAACC,qBACvB,KAACP;gBAA2BO,MAAMA;eAAfA,KAAKC,EAAE;;AAIlC"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/App.tsx"],"sourcesContent":["import { Profiler, useContext } from 'react';\nimport { useStore } from 'zustand';\nimport StoreContext from '../contexts/Store.js';\nimport { Box } from '../ink.js';\nimport type { AppState, ChildProcess as ChildProcessT, Store } from '../types.js';\nimport ChildProcess from './ChildProcess.js';\n\nexport default function App() {\n const store = useContext<Store>(StoreContext);\n const appState = useStore(store) as AppState;\n\n return (\n <Profiler\n id=\"App\"\n onRender={(_id, phase) => {\n if (phase === 'update') store?.onRender();\n }}\n >\n <Box flexDirection=\"column\">\n {appState.processes.map((item: ChildProcessT) => (\n <ChildProcess key={item.id} item={item} />\n ))}\n </Box>\n </Profiler>\n );\n}\n"],"names":["Profiler","useContext","useStore","StoreContext","Box","ChildProcess","App","store","appState","id","onRender","_id","phase","flexDirection","processes","map","item"],"mappings":";AAAA,SAASA,QAAQ,EAAEC,UAAU,QAAQ,QAAQ;AAC7C,SAASC,QAAQ,QAAQ,UAAU;AACnC,OAAOC,kBAAkB,uBAAuB;AAChD,SAASC,GAAG,QAAQ,YAAY;AAEhC,OAAOC,kBAAkB,oBAAoB;AAE7C,eAAe,SAASC;IACtB,MAAMC,QAAQN,WAAkBE;IAChC,MAAMK,WAAWN,SAASK;IAE1B,qBACE,KAACP;QACCS,IAAG;QACHC,UAAU,CAACC,KAAKC;YACd,IAAIA,UAAU,UAAUL,kBAAAA,4BAAAA,MAAOG,QAAQ;QACzC;kBAEA,cAAA,KAACN;YAAIS,eAAc;sBAChBL,SAASM,SAAS,CAACC,GAAG,CAAC,CAACC,qBACvB,KAACX;oBAA2BW,MAAMA;mBAAfA,KAAKP,EAAE;;;AAKpC"}
@@ -1,2 +1,3 @@
1
- declare const _default: import("react").Context<any>;
1
+ import type { Store } from '../types.js';
2
+ declare const _default: import("react").Context<Store>;
2
3
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/contexts/Store.tsx"],"sourcesContent":["import { createContext } from 'react';\nexport default createContext(undefined);\n"],"names":["createContext","undefined"],"mappings":"AAAA,SAASA,aAAa,QAAQ,QAAQ;AACtC,6BAAeA,cAAcC,WAAW"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/contexts/Store.tsx"],"sourcesContent":["import { createContext } from 'react';\nimport type { Store } from '../types.js';\n\nexport default createContext<Store>(undefined);\n"],"names":["createContext","undefined"],"mappings":"AAAA,SAASA,aAAa,QAAQ,QAAQ;AAGtC,6BAAeA,cAAqBC,WAAW"}
@@ -1,4 +1,5 @@
1
+ import type { ReleaseCallback, RetainCallback } from './types.js';
1
2
  export default function createApp(): {
2
- retain(fn: any): void;
3
- release(): void;
3
+ retain(fn: RetainCallback): undefined;
4
+ release(cb: ReleaseCallback): undefined;
4
5
  };
@@ -15,16 +15,29 @@ export default function createApp() {
15
15
  if (store) throw new Error('Not expecting store');
16
16
  store = createStore()((set)=>({
17
17
  processes: [],
18
- addProcess: (process1)=>set((state)=>({
18
+ addProcess: (process1)=>{
19
+ store.nextRenders = store.renders + 1;
20
+ set((state)=>({
19
21
  processes: [
20
22
  ...state.processes,
21
23
  process1
22
24
  ]
23
- })),
24
- updateProcess: (process1)=>set((state)=>({
25
+ }));
26
+ },
27
+ updateProcess: (process1)=>{
28
+ store.nextRenders = store.renders + 1;
29
+ set((state)=>({
25
30
  processes: state.processes.map((x)=>x.id === process1.id ? process1 : x)
26
- }))
31
+ }));
32
+ }
27
33
  }));
34
+ store.nextRenders = 0;
35
+ store.renders = 0;
36
+ store.waiting = [];
37
+ store.onRender = ()=>{
38
+ store.renders = store.nextRenders;
39
+ while(store === null || store === void 0 ? void 0 : store.waiting.length)store.waiting.pop()();
40
+ };
28
41
  inkApp = render(/*#__PURE__*/ _jsx(StoreContext.Provider, {
29
42
  value: store,
30
43
  children: /*#__PURE__*/ _jsx(App, {})
@@ -34,13 +47,22 @@ export default function createApp() {
34
47
  return fn(store);
35
48
  });
36
49
  },
37
- release () {
38
- if (--refCount > 0) return;
50
+ release (cb) {
51
+ if (--refCount > 0) {
52
+ if (store.renders === store.nextRenders) cb();
53
+ else store.waiting.push(cb);
54
+ return;
55
+ }
39
56
  if (!store) throw new Error('Expecting store');
40
- store = null;
41
- inkApp.unmount();
42
- inkApp = null;
43
- process.stdout.write('\x1b[?25h'); // show cursor
57
+ function done() {
58
+ inkApp.unmount();
59
+ inkApp = null;
60
+ store = null;
61
+ process.stdout.write('\x1b[?25h'); // show cursor
62
+ cb();
63
+ }
64
+ if (store.renders === store.nextRenders) done();
65
+ else store.waiting.push(done);
44
66
  }
45
67
  };
46
68
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/createApp.tsx"],"sourcesContent":["import { createStore } from 'zustand';\nimport App from './components/App.js';\nimport StoreContext from './contexts/Store.js';\n\n// @ts-ignore\nimport { type Instance, initialize, render } from './ink.js';\nimport type { AppState } from './types.js';\n\nexport default function createApp() {\n let refCount = 0;\n let store = null;\n let inkApp: Instance | null = null;\n\n return {\n retain(fn) {\n initialize(() => {\n if (++refCount > 1) return fn(store);\n if (store) throw new Error('Not expecting store');\n store = createStore<AppState>()((set) => ({\n processes: [],\n addProcess: (process) => set((state) => ({ processes: [...state.processes, process] })),\n updateProcess: (process) => set((state) => ({ processes: state.processes.map((x) => (x.id === process.id ? process : x)) })),\n }));\n inkApp = render(\n <StoreContext.Provider value={store}>\n <App />\n </StoreContext.Provider>,\n { patchConsole: false }\n );\n return fn(store);\n });\n },\n release() {\n if (--refCount > 0) return;\n if (!store) throw new Error('Expecting store');\n store = null;\n inkApp.unmount();\n inkApp = null;\n process.stdout.write('\\x1b[?25h'); // show cursor\n },\n };\n}\n"],"names":["createStore","App","StoreContext","initialize","render","createApp","refCount","store","inkApp","retain","fn","Error","set","processes","addProcess","process","state","updateProcess","map","x","id","Provider","value","patchConsole","release","unmount","stdout","write"],"mappings":";AAAA,SAASA,WAAW,QAAQ,UAAU;AACtC,OAAOC,SAAS,sBAAsB;AACtC,OAAOC,kBAAkB,sBAAsB;AAE/C,aAAa;AACb,SAAwBC,UAAU,EAAEC,MAAM,QAAQ,WAAW;AAG7D,eAAe,SAASC;IACtB,IAAIC,WAAW;IACf,IAAIC,QAAQ;IACZ,IAAIC,SAA0B;IAE9B,OAAO;QACLC,QAAOC,EAAE;YACPP,WAAW;gBACT,IAAI,EAAEG,WAAW,GAAG,OAAOI,GAAGH;gBAC9B,IAAIA,OAAO,MAAM,IAAII,MAAM;gBAC3BJ,QAAQP,cAAwB,CAACY,MAAS,CAAA;wBACxCC,WAAW,EAAE;wBACbC,YAAY,CAACC,WAAYH,IAAI,CAACI,QAAW,CAAA;oCAAEH,WAAW;2CAAIG,MAAMH,SAAS;wCAAEE;qCAAQ;gCAAC,CAAA;wBACpFE,eAAe,CAACF,WAAYH,IAAI,CAACI,QAAW,CAAA;oCAAEH,WAAWG,MAAMH,SAAS,CAACK,GAAG,CAAC,CAACC,IAAOA,EAAEC,EAAE,KAAKL,SAAQK,EAAE,GAAGL,WAAUI;gCAAI,CAAA;oBAC3H,CAAA;gBACAX,SAASJ,qBACP,KAACF,aAAamB,QAAQ;oBAACC,OAAOf;8BAC5B,cAAA,KAACN;oBAEH;oBAAEsB,cAAc;gBAAM;gBAExB,OAAOb,GAAGH;YACZ;QACF;QACAiB;YACE,IAAI,EAAElB,WAAW,GAAG;YACpB,IAAI,CAACC,OAAO,MAAM,IAAII,MAAM;YAC5BJ,QAAQ;YACRC,OAAOiB,OAAO;YACdjB,SAAS;YACTO,QAAQW,MAAM,CAACC,KAAK,CAAC,cAAc,cAAc;QACnD;IACF;AACF"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/createApp.tsx"],"sourcesContent":["import { createStore } from 'zustand';\nimport App from './components/App.js';\nimport StoreContext from './contexts/Store.js';\n\n// @ts-ignore\nimport { type Instance, initialize, render } from './ink.js';\nimport type { AppState, ReleaseCallback, RetainCallback } from './types.js';\n\nexport default function createApp() {\n let refCount = 0;\n let store = null;\n let inkApp: Instance | null = null;\n\n return {\n retain(fn: RetainCallback): undefined {\n initialize(() => {\n if (++refCount > 1) return fn(store);\n if (store) throw new Error('Not expecting store');\n store = createStore<AppState>()((set) => ({\n processes: [],\n addProcess: (process) => {\n store.nextRenders = store.renders + 1;\n set((state) => ({ processes: [...state.processes, process] }));\n },\n updateProcess: (process) => {\n store.nextRenders = store.renders + 1;\n set((state) => ({ processes: state.processes.map((x) => (x.id === process.id ? process : x)) }));\n },\n }));\n store.nextRenders = 0;\n store.renders = 0;\n store.waiting = [];\n store.onRender = () => {\n store.renders = store.nextRenders;\n while (store?.waiting.length) store.waiting.pop()();\n };\n inkApp = render(\n <StoreContext.Provider value={store}>\n <App />\n </StoreContext.Provider>,\n { patchConsole: false }\n );\n return fn(store);\n });\n },\n release(cb: ReleaseCallback): undefined {\n if (--refCount > 0) {\n if (store.renders === store.nextRenders) cb();\n else store.waiting.push(cb);\n return;\n }\n if (!store) throw new Error('Expecting store');\n\n function done() {\n inkApp.unmount();\n inkApp = null;\n store = null;\n process.stdout.write('\\x1b[?25h'); // show cursor\n cb();\n }\n if (store.renders === store.nextRenders) done();\n else store.waiting.push(done);\n },\n };\n}\n"],"names":["createStore","App","StoreContext","initialize","render","createApp","refCount","store","inkApp","retain","fn","Error","set","processes","addProcess","process","nextRenders","renders","state","updateProcess","map","x","id","waiting","onRender","length","pop","Provider","value","patchConsole","release","cb","push","done","unmount","stdout","write"],"mappings":";AAAA,SAASA,WAAW,QAAQ,UAAU;AACtC,OAAOC,SAAS,sBAAsB;AACtC,OAAOC,kBAAkB,sBAAsB;AAE/C,aAAa;AACb,SAAwBC,UAAU,EAAEC,MAAM,QAAQ,WAAW;AAG7D,eAAe,SAASC;IACtB,IAAIC,WAAW;IACf,IAAIC,QAAQ;IACZ,IAAIC,SAA0B;IAE9B,OAAO;QACLC,QAAOC,EAAkB;YACvBP,WAAW;gBACT,IAAI,EAAEG,WAAW,GAAG,OAAOI,GAAGH;gBAC9B,IAAIA,OAAO,MAAM,IAAII,MAAM;gBAC3BJ,QAAQP,cAAwB,CAACY,MAAS,CAAA;wBACxCC,WAAW,EAAE;wBACbC,YAAY,CAACC;4BACXR,MAAMS,WAAW,GAAGT,MAAMU,OAAO,GAAG;4BACpCL,IAAI,CAACM,QAAW,CAAA;oCAAEL,WAAW;2CAAIK,MAAML,SAAS;wCAAEE;qCAAQ;gCAAC,CAAA;wBAC7D;wBACAI,eAAe,CAACJ;4BACdR,MAAMS,WAAW,GAAGT,MAAMU,OAAO,GAAG;4BACpCL,IAAI,CAACM,QAAW,CAAA;oCAAEL,WAAWK,MAAML,SAAS,CAACO,GAAG,CAAC,CAACC,IAAOA,EAAEC,EAAE,KAAKP,SAAQO,EAAE,GAAGP,WAAUM;gCAAI,CAAA;wBAC/F;oBACF,CAAA;gBACAd,MAAMS,WAAW,GAAG;gBACpBT,MAAMU,OAAO,GAAG;gBAChBV,MAAMgB,OAAO,GAAG,EAAE;gBAClBhB,MAAMiB,QAAQ,GAAG;oBACfjB,MAAMU,OAAO,GAAGV,MAAMS,WAAW;oBACjC,MAAOT,kBAAAA,4BAAAA,MAAOgB,OAAO,CAACE,MAAM,CAAElB,MAAMgB,OAAO,CAACG,GAAG;gBACjD;gBACAlB,SAASJ,qBACP,KAACF,aAAayB,QAAQ;oBAACC,OAAOrB;8BAC5B,cAAA,KAACN;oBAEH;oBAAE4B,cAAc;gBAAM;gBAExB,OAAOnB,GAAGH;YACZ;QACF;QACAuB,SAAQC,EAAmB;YACzB,IAAI,EAAEzB,WAAW,GAAG;gBAClB,IAAIC,MAAMU,OAAO,KAAKV,MAAMS,WAAW,EAAEe;qBACpCxB,MAAMgB,OAAO,CAACS,IAAI,CAACD;gBACxB;YACF;YACA,IAAI,CAACxB,OAAO,MAAM,IAAII,MAAM;YAE5B,SAASsB;gBACPzB,OAAO0B,OAAO;gBACd1B,SAAS;gBACTD,QAAQ;gBACRQ,QAAQoB,MAAM,CAACC,KAAK,CAAC,cAAc,cAAc;gBACjDL;YACF;YACA,IAAIxB,MAAMU,OAAO,KAAKV,MAAMS,WAAW,EAAEiB;iBACpC1B,MAAMgB,OAAO,CAACS,IAAI,CAACC;QAC1B;IACF;AACF"}
@@ -1,5 +1,5 @@
1
- import type { SpawnCallback, SpawnOptions, TerminalOptions } from './types.js';
2
- declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | SpawnCallback, callback?: SpawnCallback): any;
1
+ import type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';
2
+ declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult>;
3
3
  export * from './types';
4
4
  export { default as figures } from './lib/figures';
5
5
  export { default as formatArguments } from './lib/formatArguments';
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/index-cjs.ts"],"sourcesContent":["import type { SpawnCallback, SpawnOptions, TerminalOptions } from './types.js';\n\nfunction spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | SpawnCallback, callback?: SpawnCallback) {\n const worker = require('./worker.js');\n\n if (typeof options === 'function') {\n callback = options as SpawnCallback;\n options = {};\n }\n options = options || {};\n\n if (typeof callback === 'function') return worker(command, args, spawnOptions, options, callback);\n return new Promise((resolve, reject) => worker(command, args, spawnOptions, options, (err, result) => (err ? reject(err) : resolve(result))));\n}\n\nconst major = +process.versions.node.split('.')[0];\n\nexport * from './types';\nexport { default as figures } from './lib/figures';\nexport { default as formatArguments } from './lib/formatArguments';\nexport default major > 10 ? spawnTerminal : undefined;\n"],"names":["spawnTerminal","command","args","spawnOptions","options","callback","worker","require","Promise","resolve","reject","err","result","major","process","versions","node","split","default","figures","formatArguments","undefined"],"mappings":"AAEA,SAASA,cAAcC,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAAyC,EAAEC,QAAwB;IACrJ,MAAMC,SAASC,QAAQ;IAEvB,IAAI,OAAOH,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,IAAI,OAAOC,aAAa,YAAY,OAAOC,OAAOL,SAASC,MAAMC,cAAcC,SAASC;IACxF,OAAO,IAAIG,QAAQ,CAACC,SAASC,SAAWJ,OAAOL,SAASC,MAAMC,cAAcC,SAAS,CAACO,KAAKC,SAAYD,MAAMD,OAAOC,OAAOF,QAAQG;AACrI;AAEA,MAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAElD,cAAc,UAAU;AACxB,SAASC,WAAWC,OAAO,QAAQ,gBAAgB;AACnD,SAASD,WAAWE,eAAe,QAAQ,wBAAwB;AACnE,eAAeP,QAAQ,KAAKb,gBAAgBqB,UAAU"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/index-cjs.ts"],"sourcesContent":["import type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';\n\nfunction spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult> {\n const worker = require('./worker.js');\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);\n return new Promise((resolve, reject) => worker(command, args, spawnOptions, options, (err, result) => (err ? reject(err) : resolve(result))));\n}\n\nconst major = +process.versions.node.split('.')[0];\n\nexport * from './types';\nexport { default as figures } from './lib/figures';\nexport { default as formatArguments } from './lib/formatArguments';\nexport default major > 10 ? spawnTerminal : undefined;\n"],"names":["spawnTerminal","command","args","spawnOptions","options","callback","worker","require","Promise","resolve","reject","err","result","major","process","versions","node","split","default","figures","formatArguments","undefined"],"mappings":"AAEA,SAASA,cAAcC,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAA4C,EAAEC,QAA2B;IAC3J,MAAMC,SAASC,QAAQ;IAEvB,IAAI,OAAOH,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,IAAI,OAAOC,aAAa,YAAY,OAAOC,OAAOL,SAASC,MAAMC,cAAcC,SAASC;IACxF,OAAO,IAAIG,QAAQ,CAACC,SAASC,SAAWJ,OAAOL,SAASC,MAAMC,cAAcC,SAAS,CAACO,KAAKC,SAAYD,MAAMD,OAAOC,OAAOF,QAAQG;AACrI;AAEA,MAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAElD,cAAc,UAAU;AACxB,SAASC,WAAWC,OAAO,QAAQ,gBAAgB;AACnD,SAASD,WAAWE,eAAe,QAAQ,wBAAwB;AACnE,eAAeP,QAAQ,KAAKb,gBAAgBqB,UAAU"}
@@ -1,5 +1,5 @@
1
- import type { SpawnCallback, SpawnOptions, TerminalOptions } from './types.js';
2
- declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | SpawnCallback, callback?: SpawnCallback): void | Promise<unknown>;
1
+ import type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';
2
+ declare function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult>;
3
3
  export * from './types.js';
4
4
  export { default as figures } from './lib/figures.js';
5
5
  export { default as formatArguments } from './lib/formatArguments.js';
@@ -6,7 +6,9 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
6
6
  }
7
7
  options = options || {};
8
8
  if (typeof callback === 'function') return worker(command, args, spawnOptions, options, callback);
9
- return new Promise((resolve, reject)=>worker(command, args, spawnOptions, options, (err, result)=>err ? reject(err) : resolve(result)));
9
+ return new Promise((resolve, reject)=>worker(command, args, spawnOptions, options, (err, result)=>{
10
+ err ? reject(err) : resolve(result);
11
+ }));
10
12
  }
11
13
  const major = +process.versions.node.split('.')[0];
12
14
  export * from './types.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/index-esm.ts"],"sourcesContent":["import worker from './worker.js';\n\nimport type { SpawnCallback, SpawnOptions, TerminalOptions } from './types.js';\n\nfunction spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | SpawnCallback, callback?: SpawnCallback) {\n if (typeof options === 'function') {\n callback = options as SpawnCallback;\n options = {};\n }\n options = options || {};\n\n if (typeof callback === 'function') return worker(command, args, spawnOptions, options, callback);\n return new Promise((resolve, reject) => worker(command, args, spawnOptions, options, (err, result) => (err ? reject(err) : resolve(result))));\n}\n\nconst major = +process.versions.node.split('.')[0];\n\nexport * from './types.js';\nexport { default as figures } from './lib/figures.js';\nexport { default as formatArguments } from './lib/formatArguments.js';\nexport default major > 10 ? spawnTerminal : undefined;\n"],"names":["worker","spawnTerminal","command","args","spawnOptions","options","callback","Promise","resolve","reject","err","result","major","process","versions","node","split","default","figures","formatArguments","undefined"],"mappings":"AAAA,OAAOA,YAAY,cAAc;AAIjC,SAASC,cAAcC,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAAyC,EAAEC,QAAwB;IACrJ,IAAI,OAAOD,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,IAAI,OAAOC,aAAa,YAAY,OAAON,OAAOE,SAASC,MAAMC,cAAcC,SAASC;IACxF,OAAO,IAAIC,QAAQ,CAACC,SAASC,SAAWT,OAAOE,SAASC,MAAMC,cAAcC,SAAS,CAACK,KAAKC,SAAYD,MAAMD,OAAOC,OAAOF,QAAQG;AACrI;AAEA,MAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAElD,cAAc,aAAa;AAC3B,SAASC,WAAWC,OAAO,QAAQ,mBAAmB;AACtD,SAASD,WAAWE,eAAe,QAAQ,2BAA2B;AACtE,eAAeP,QAAQ,KAAKX,gBAAgBmB,UAAU"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/index-esm.ts"],"sourcesContent":["import worker from './worker.js';\n\nimport type { SpawnOptions, SpawnResult, TerminalCallback, TerminalOptions } from './types.js';\n\nfunction spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options?: TerminalOptions | TerminalCallback, callback?: TerminalCallback): undefined | Promise<SpawnResult> {\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\nconst major = +process.versions.node.split('.')[0];\n\nexport * from './types.js';\nexport { default as figures } from './lib/figures.js';\nexport { default as formatArguments } from './lib/formatArguments.js';\nexport default major > 10 ? spawnTerminal : undefined;\n"],"names":["worker","spawnTerminal","command","args","spawnOptions","options","callback","Promise","resolve","reject","err","result","major","process","versions","node","split","default","figures","formatArguments","undefined"],"mappings":"AAAA,OAAOA,YAAY,cAAc;AAIjC,SAASC,cAAcC,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAA4C,EAAEC,QAA2B;IAC3J,IAAI,OAAOD,YAAY,YAAY;QACjCC,WAAWD;QACXA,UAAU,CAAC;IACb;IACAA,UAAUA,WAAW,CAAC;IAEtB,IAAI,OAAOC,aAAa,YAAY,OAAON,OAAOE,SAASC,MAAMC,cAAcC,SAASC;IACxF,OAAO,IAAIC,QAAQ,CAACC,SAASC,SAC3BT,OAAOE,SAASC,MAAMC,cAAcC,SAAS,CAACK,KAAKC;YACjDD,MAAMD,OAAOC,OAAOF,QAAQG;QAC9B;AAEJ;AAEA,MAAMC,QAAQ,CAACC,QAAQC,QAAQ,CAACC,IAAI,CAACC,KAAK,CAAC,IAAI,CAAC,EAAE;AAElD,cAAc,aAAa;AAC3B,SAASC,WAAWC,OAAO,QAAQ,mBAAmB;AACtD,SAASD,WAAWE,eAAe,QAAQ,2BAA2B;AACtE,eAAeP,QAAQ,KAAKX,gBAAgBmB,UAAU"}
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/ink.ts"],"sourcesContent":["import 'core-js/actual/array/at.js';\nimport 'core-js/actual/object/has-own.js';\nimport 'core-js/actual/object/values.js';\nimport 'core-js/actual/string/replace-all.js';\nimport 'core-js/actual/string/trim-end.js';\nif (typeof process.stdout.off === 'undefined') process.stdout.off = (name, fn) => process.stdout.removeListener(name, fn);\nif (typeof process.stderr.off === 'undefined') process.stderr.off = (name, fn) => process.stderr.removeListener(name, fn);\n\n// @ts-ignore\nimport * as ink from '../../assets/ink.cjs';\nconst { Box, Newline, Spacer, Static, Text, Transform, measureElement, render, useApp, useFocus, useFocusManager, useInput, useStderr, useStdin, useStdout, initialize } = ink.default || ink;\nexport { Box, Newline, Spacer, Static, Text, Transform, measureElement, render, useApp, useFocus, useFocusManager, useInput, useStderr, useStdin, useStdout, initialize };\n"],"names":["process","stdout","off","name","fn","removeListener","stderr","ink","Box","Newline","Spacer","Static","Text","Transform","measureElement","render","useApp","useFocus","useFocusManager","useInput","useStderr","useStdin","useStdout","initialize","default"],"mappings":"AAAA,OAAO,6BAA6B;AACpC,OAAO,mCAAmC;AAC1C,OAAO,kCAAkC;AACzC,OAAO,uCAAuC;AAC9C,OAAO,oCAAoC;AAC3C,IAAI,OAAOA,QAAQC,MAAM,CAACC,GAAG,KAAK,aAAaF,QAAQC,MAAM,CAACC,GAAG,GAAG,CAACC,MAAMC,KAAOJ,QAAQC,MAAM,CAACI,cAAc,CAACF,MAAMC;AACtH,IAAI,OAAOJ,QAAQM,MAAM,CAACJ,GAAG,KAAK,aAAaF,QAAQM,MAAM,CAACJ,GAAG,GAAG,CAACC,MAAMC,KAAOJ,QAAQM,MAAM,CAACD,cAAc,CAACF,MAAMC;AAEtH,aAAa;AACb,YAAYG,SAAS,uBAAuB;AAC5C,MAAM,EAAEC,GAAG,EAAEC,OAAO,EAAEC,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAEC,cAAc,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGhB,IAAIiB,OAAO,IAAIjB;AAC1L,SAASC,GAAG,EAAEC,OAAO,EAAEC,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAEC,cAAc,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,UAAU,GAAG"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/ink.ts"],"sourcesContent":["import 'core-js/actual/array/at.js';\nimport 'core-js/actual/object/has-own.js';\nimport 'core-js/actual/object/values.js';\nimport 'core-js/actual/string/replace-all.js';\nimport 'core-js/actual/string/trim-end.js';\nif (typeof process.stdout.off === 'undefined') process.stdout.off = (name, fn) => process.stdout.removeListener(name, fn);\nif (typeof process.stderr.off === 'undefined') process.stderr.off = (name, fn) => process.stderr.removeListener(name, fn);\n\n// @ts-ignore\nimport * as ink from '../../assets/ink.cjs';\nconst { Box, Newline, Spacer, Static, Text, Transform, measureElement, render, useApp, useFocus, useFocusManager, useInput, useStderr, useStdin, useStdout, initialize } = ink.default || ink;\n\nexport { Box, Newline, Spacer, Static, Text, Transform, measureElement, render, useApp, useFocus, useFocusManager, useInput, useStderr, useStdin, useStdout, initialize };\n"],"names":["process","stdout","off","name","fn","removeListener","stderr","ink","Box","Newline","Spacer","Static","Text","Transform","measureElement","render","useApp","useFocus","useFocusManager","useInput","useStderr","useStdin","useStdout","initialize","default"],"mappings":"AAAA,OAAO,6BAA6B;AACpC,OAAO,mCAAmC;AAC1C,OAAO,kCAAkC;AACzC,OAAO,uCAAuC;AAC9C,OAAO,oCAAoC;AAC3C,IAAI,OAAOA,QAAQC,MAAM,CAACC,GAAG,KAAK,aAAaF,QAAQC,MAAM,CAACC,GAAG,GAAG,CAACC,MAAMC,KAAOJ,QAAQC,MAAM,CAACI,cAAc,CAACF,MAAMC;AACtH,IAAI,OAAOJ,QAAQM,MAAM,CAACJ,GAAG,KAAK,aAAaF,QAAQM,MAAM,CAACJ,GAAG,GAAG,CAACC,MAAMC,KAAOJ,QAAQM,MAAM,CAACD,cAAc,CAACF,MAAMC;AAEtH,aAAa;AACb,YAAYG,SAAS,uBAAuB;AAC5C,MAAM,EAAEC,GAAG,EAAEC,OAAO,EAAEC,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAEC,cAAc,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGhB,IAAIiB,OAAO,IAAIjB;AAE1L,SAASC,GAAG,EAAEC,OAAO,EAAEC,MAAM,EAAEC,MAAM,EAAEC,IAAI,EAAEC,SAAS,EAAEC,cAAc,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,eAAe,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,UAAU,GAAG"}
@@ -1 +1,3 @@
1
- export default function addLines(fn: any): any;
1
+ import { Writable } from 'readable-stream';
2
+ export type Callback = (lines: string[]) => undefined;
3
+ export default function addLines(fn: Callback): Writable;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/addLines.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nconst REGEX_NEW_LINE = /\\r?\\n|\\r/g;\n\nexport default function addLines(fn) {\n let last = '';\n\n const stream = new Writable({\n write(chunk, _enc, callback) {\n const more = last + chunk.toString('utf8');\n const lines = more.split(REGEX_NEW_LINE);\n last = lines.pop();\n if (lines.length > 0) fn(lines);\n callback();\n },\n });\n stream.on('finish', () => {\n if (last.length) fn([last]);\n last = '';\n });\n return stream;\n}\n"],"names":["Writable","REGEX_NEW_LINE","addLines","fn","last","stream","write","chunk","_enc","callback","more","toString","lines","split","pop","length","on"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,kBAAkB;AAE3C,MAAMC,iBAAiB;AAEvB,eAAe,SAASC,SAASC,EAAE;IACjC,IAAIC,OAAO;IAEX,MAAMC,SAAS,IAAIL,SAAS;QAC1BM,OAAMC,KAAK,EAAEC,IAAI,EAAEC,QAAQ;YACzB,MAAMC,OAAON,OAAOG,MAAMI,QAAQ,CAAC;YACnC,MAAMC,QAAQF,KAAKG,KAAK,CAACZ;YACzBG,OAAOQ,MAAME,GAAG;YAChB,IAAIF,MAAMG,MAAM,GAAG,GAAGZ,GAAGS;YACzBH;QACF;IACF;IACAJ,OAAOW,EAAE,CAAC,UAAU;QAClB,IAAIZ,KAAKW,MAAM,EAAEZ,GAAG;YAACC;SAAK;QAC1BA,OAAO;IACT;IACA,OAAOC;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/addLines.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nconst REGEX_NEW_LINE = /\\r?\\n|\\r/g;\n\nexport type Callback = (lines: string[]) => undefined;\n\nexport default function addLines(fn: Callback): Writable {\n let last = '';\n\n const stream = new Writable({\n write(chunk, _enc, callback) {\n const more = last + chunk.toString('utf8');\n const lines = more.split(REGEX_NEW_LINE);\n last = lines.pop();\n if (lines.length > 0) fn(lines);\n callback();\n },\n });\n stream.on('finish', () => {\n if (last.length) fn([last]);\n last = '';\n });\n return stream;\n}\n"],"names":["Writable","REGEX_NEW_LINE","addLines","fn","last","stream","write","chunk","_enc","callback","more","toString","lines","split","pop","length","on"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,kBAAkB;AAE3C,MAAMC,iBAAiB;AAIvB,eAAe,SAASC,SAASC,EAAY;IAC3C,IAAIC,OAAO;IAEX,MAAMC,SAAS,IAAIL,SAAS;QAC1BM,OAAMC,KAAK,EAAEC,IAAI,EAAEC,QAAQ;YACzB,MAAMC,OAAON,OAAOG,MAAMI,QAAQ,CAAC;YACnC,MAAMC,QAAQF,KAAKG,KAAK,CAACZ;YACzBG,OAAOQ,MAAME,GAAG;YAChB,IAAIF,MAAMG,MAAM,GAAG,GAAGZ,GAAGS;YACzBH;QACF;IACF;IACAJ,OAAOW,EAAE,CAAC,UAAU;QAClB,IAAIZ,KAAKW,MAAM,EAAEZ,GAAG;YAACC;SAAK;QAC1BA,OAAO;IACT;IACA,OAAOC;AACT"}
@@ -1 +1,3 @@
1
- export default function concatWritable(callback: any): any;
1
+ import { Writable } from 'readable-stream';
2
+ export type Callback = (lines: Buffer) => undefined;
3
+ export default function concatWritable(callback: Callback): Writable;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/concatWritable.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nexport default function concatWritable(callback) {\n const chunks = [];\n const stream = new Writable({\n write: (chunk, _encoding, next) => {\n chunks.push(chunk);\n next();\n },\n });\n stream.on('finish', () => callback(Buffer.concat(chunks.splice(0))));\n return stream;\n}\n"],"names":["Writable","concatWritable","callback","chunks","stream","write","chunk","_encoding","next","push","on","Buffer","concat","splice"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,kBAAkB;AAE3C,eAAe,SAASC,eAAeC,QAAQ;IAC7C,MAAMC,SAAS,EAAE;IACjB,MAAMC,SAAS,IAAIJ,SAAS;QAC1BK,OAAO,CAACC,OAAOC,WAAWC;YACxBL,OAAOM,IAAI,CAACH;YACZE;QACF;IACF;IACAJ,OAAOM,EAAE,CAAC,UAAU,IAAMR,SAASS,OAAOC,MAAM,CAACT,OAAOU,MAAM,CAAC;IAC/D,OAAOT;AACT"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/concatWritable.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nexport type Callback = (lines: Buffer) => undefined;\n\nexport default function concatWritable(callback: Callback): Writable {\n const chunks = [];\n const stream = new Writable({\n write: (chunk, _encoding, next) => {\n chunks.push(chunk);\n next();\n },\n });\n stream.on('finish', () => callback(Buffer.concat(chunks.splice(0))));\n return stream;\n}\n"],"names":["Writable","concatWritable","callback","chunks","stream","write","chunk","_encoding","next","push","on","Buffer","concat","splice"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,kBAAkB;AAI3C,eAAe,SAASC,eAAeC,QAAkB;IACvD,MAAMC,SAAS,EAAE;IACjB,MAAMC,SAAS,IAAIJ,SAAS;QAC1BK,OAAO,CAACC,OAAOC,WAAWC;YACxBL,OAAOM,IAAI,CAACH;YACZE;QACF;IACF;IACAJ,OAAOM,EAAE,CAAC,UAAU,IAAMR,SAASS,OAAOC,MAAM,CAACT,OAAOU,MAAM,CAAC;IAC/D,OAAOT;AACT"}
@@ -1,2 +1,2 @@
1
- declare const _default: (args: any) => any;
1
+ declare const _default: (args: string[]) => string[];
2
2
  export default _default;
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/formatArguments.ts"],"sourcesContent":["export default (args) => args.map((text) => (text.indexOf(' ') >= 0 ? `\"${text}\"` : text));\n"],"names":["args","map","text","indexOf"],"mappings":"AAAA,eAAe,CAAA,CAACA,OAASA,KAAKC,GAAG,CAAC,CAACC,OAAUA,KAAKC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAED,KAAK,CAAC,CAAC,GAAGA,KAAK,EAAE"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/formatArguments.ts"],"sourcesContent":["export default (args: string[]): string[] => args.map((text) => (text.indexOf(' ') >= 0 ? `\"${text}\"` : text));\n"],"names":["args","map","text","indexOf"],"mappings":"AAAA,eAAe,CAAA,CAACA,OAA6BA,KAAKC,GAAG,CAAC,CAACC,OAAUA,KAAKC,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,EAAED,KAAK,CAAC,CAAC,GAAGA,KAAK,EAAE"}
@@ -1,8 +1,11 @@
1
- export type { SpawnOptions, SpawnCallback, SpawnResult } from 'cross-spawn-cb';
1
+ import type { StoreApi } from 'zustand';
2
+ export type { SpawnOptions, SpawnCallback, SpawnResult, SpawnError } from 'cross-spawn-cb';
3
+ import type { SpawnError, SpawnResult } from 'cross-spawn-cb';
2
4
  export type TerminalOptions = {
3
5
  group?: string;
4
- expanded?: string;
6
+ expanded?: boolean;
5
7
  };
8
+ export type TerminalCallback = (error?: SpawnError, result?: SpawnResult) => undefined;
6
9
  export declare const LineType: {
7
10
  readonly stdout: 1;
8
11
  readonly stderr: 2;
@@ -18,10 +21,15 @@ export type ChildProcess = {
18
21
  title: string;
19
22
  state: State;
20
23
  lines: Line[];
21
- expanded?: string;
24
+ expanded?: boolean;
22
25
  };
23
26
  export interface AppState {
24
27
  processes: ChildProcess[];
25
28
  addProcess: (process: ChildProcess) => void;
26
29
  updateProcess: (process: ChildProcess) => void;
27
30
  }
31
+ export interface Store extends StoreApi<AppState> {
32
+ onRender: () => undefined;
33
+ }
34
+ export type RetainCallback = (app: Store) => undefined;
35
+ export type ReleaseCallback = () => undefined;
package/dist/esm/types.js CHANGED
@@ -1,4 +1,3 @@
1
- // @ts-ignore
2
1
  export const LineType = {
3
2
  stdout: 1,
4
3
  stderr: 2
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/types.ts"],"sourcesContent":["// @ts-ignore\nexport type { SpawnOptions, SpawnCallback, SpawnResult } from 'cross-spawn-cb';\n\nexport type TerminalOptions = {\n group?: string;\n expanded?: string;\n};\n\nexport const LineType = {\n stdout: 1,\n stderr: 2,\n} as const;\n\nexport type Line = {\n type: (typeof LineType)[keyof typeof LineType];\n text: string;\n};\n\nexport type State = 'running' | 'error' | 'success';\nexport type ChildProcess = {\n id: string;\n group?: string;\n title: string;\n state: State;\n lines: Line[];\n expanded?: string;\n};\n\nexport interface AppState {\n processes: ChildProcess[];\n addProcess: (process: ChildProcess) => void;\n updateProcess: (process: ChildProcess) => void;\n}\n"],"names":["LineType","stdout","stderr"],"mappings":"AAAA,aAAa;AAQb,OAAO,MAAMA,WAAW;IACtBC,QAAQ;IACRC,QAAQ;AACV,EAAW"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/types.ts"],"sourcesContent":["import type { StoreApi } from 'zustand';\nexport type { SpawnOptions, SpawnCallback, SpawnResult, SpawnError } from 'cross-spawn-cb';\nimport type { SpawnError, SpawnResult } from 'cross-spawn-cb';\n\nexport type TerminalOptions = {\n group?: string;\n expanded?: boolean;\n};\n\nexport type TerminalCallback = (error?: SpawnError, result?: SpawnResult) => undefined;\n\nexport const LineType = {\n stdout: 1,\n stderr: 2,\n} as const;\n\nexport type Line = {\n type: (typeof LineType)[keyof typeof LineType];\n text: string;\n};\n\nexport type State = 'running' | 'error' | 'success';\nexport type ChildProcess = {\n id: string;\n group?: string;\n title: string;\n state: State;\n lines: Line[];\n expanded?: boolean;\n};\n\nexport interface AppState {\n processes: ChildProcess[];\n addProcess: (process: ChildProcess) => void;\n updateProcess: (process: ChildProcess) => void;\n}\n\nexport interface Store extends StoreApi<AppState> {\n onRender: () => undefined;\n}\nexport type RetainCallback = (app: Store) => undefined;\nexport type ReleaseCallback = () => undefined;\n"],"names":["LineType","stdout","stderr"],"mappings":"AAWA,OAAO,MAAMA,WAAW;IACtBC,QAAQ;IACRC,QAAQ;AACV,EAAW"}
@@ -1,2 +1,2 @@
1
- import type { SpawnOptions, TerminalOptions } from './types.js';
2
- export default function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options: TerminalOptions, callback: any): void;
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;
@@ -160,9 +160,8 @@ export default function spawnTerminal(command, args, spawnOptions, options, call
160
160
  store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
161
161
  state: err ? 'error' : 'success'
162
162
  }));
163
- // let rendering complete
164
- setTimeout(()=>{
165
- terminal.release();
163
+ // ensure rendering completes
164
+ terminal.release(()=>{
166
165
  err ? callback(err) : callback(null, res);
167
166
  });
168
167
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/worker.ts"],"sourcesContent":["// @ts-ignore\nimport spawn, { crossSpawn, type SpawnResult } from 'cross-spawn-cb';\nimport uuid from 'lil-uuid';\nimport oo from 'on-one';\nimport Queue from 'queue-cb';\n\nimport createApp from './createApp.js';\nimport addLines from './lib/addLines.js';\nimport concatWritable from './lib/concatWritable.js';\nimport formatArguments from './lib/formatArguments.js';\n\nimport type { SpawnOptions, TerminalOptions } from './types.js';\nimport { LineType } from './types.js';\n\nconst terminal = createApp();\n\nexport default function spawnTerminal(command: string, args: string[], spawnOptions: SpawnOptions, options: TerminalOptions, callback) {\n const { encoding, stdio, ...csOptions } = spawnOptions;\n\n if (stdio === 'inherit') {\n terminal.retain((store) => {\n const id = uuid();\n store.getState().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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stdout, text }))) });\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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stderr, text }))) });\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, encoding: 'utf8' }));\n queue.await((err) => {\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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, state: err ? 'error' : 'success' });\n\n // let rendering complete\n setTimeout(() => {\n terminal.release();\n err ? callback(err) : callback(null, res);\n });\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, encoding: encoding || 'utf8' }));\n queue.await((err) => {\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","uuid","oo","Queue","createApp","addLines","concatWritable","formatArguments","LineType","terminal","spawnTerminal","command","args","spawnOptions","options","callback","encoding","stdio","csOptions","retain","store","id","getState","addProcess","title","concat","join","state","lines","cp","outputs","stdout","stderr","queue","item","processes","find","x","updateProcess","map","text","type","defer","bind","pipe","worker","await","err","res","output","setTimeout","release","toString"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/worker.ts"],"sourcesContent":["// @ts-ignore\nimport spawn, { crossSpawn, type SpawnResult } from 'cross-spawn-cb';\nimport uuid from 'lil-uuid';\nimport oo from 'on-one';\nimport Queue from 'queue-cb';\n\nimport createApp from './createApp.js';\nimport addLines from './lib/addLines.js';\nimport concatWritable from './lib/concatWritable.js';\nimport formatArguments from './lib/formatArguments.js';\n\nimport type { SpawnError, SpawnOptions, TerminalCallback, TerminalOptions } from './types.js';\nimport { LineType } from './types.js';\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 terminal.retain((store) => {\n const id = uuid();\n store.getState().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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stdout, text }))) });\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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stderr, text }))) });\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, encoding: 'utf8' }));\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 const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, state: err ? 'error' : 'success' });\n\n // ensure rendering completes\n terminal.release(() => {\n err ? callback(err) : callback(null, res);\n });\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, encoding: encoding || 'utf8' }));\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","uuid","oo","Queue","createApp","addLines","concatWritable","formatArguments","LineType","terminal","spawnTerminal","command","args","spawnOptions","options","callback","encoding","stdio","csOptions","retain","store","id","getState","addProcess","title","concat","join","state","lines","cp","outputs","stdout","stderr","queue","item","processes","find","x","updateProcess","map","text","type","defer","bind","pipe","worker","await","err","res","output","release","toString"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spawn-term",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "description": "Formats spawn with for terminal grouping",
5
5
  "keywords": [
6
6
  "spawn",