spawn-term 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/cjs/components/App.js +32 -7
  2. package/dist/cjs/components/App.js.map +1 -1
  3. package/dist/cjs/components/ChildProcess.d.cts +1 -4
  4. package/dist/cjs/components/ChildProcess.d.ts +1 -4
  5. package/dist/cjs/components/ChildProcess.js +22 -34
  6. package/dist/cjs/components/ChildProcess.js.map +1 -1
  7. package/dist/cjs/createApp.d.cts +1 -1
  8. package/dist/cjs/createApp.d.ts +1 -1
  9. package/dist/cjs/createApp.js +6 -18
  10. package/dist/cjs/createApp.js.map +1 -1
  11. package/dist/cjs/state/ProcessContext.d.cts +6 -0
  12. package/dist/cjs/state/ProcessContext.d.ts +6 -0
  13. package/dist/cjs/state/ProcessContext.js +139 -0
  14. package/dist/cjs/state/ProcessContext.js.map +1 -0
  15. package/dist/cjs/state/ProcessStore.d.cts +7 -0
  16. package/dist/cjs/state/ProcessStore.d.ts +7 -0
  17. package/dist/cjs/state/ProcessStore.js +99 -0
  18. package/dist/cjs/state/ProcessStore.js.map +1 -0
  19. package/dist/cjs/types.d.cts +7 -0
  20. package/dist/cjs/types.d.ts +7 -0
  21. package/dist/cjs/types.js.map +1 -1
  22. package/dist/cjs/worker.js +7 -10
  23. package/dist/cjs/worker.js.map +1 -1
  24. package/dist/esm/components/App.js +31 -6
  25. package/dist/esm/components/App.js.map +1 -1
  26. package/dist/esm/components/ChildProcess.d.ts +1 -4
  27. package/dist/esm/components/ChildProcess.js +22 -31
  28. package/dist/esm/components/ChildProcess.js.map +1 -1
  29. package/dist/esm/createApp.d.ts +1 -1
  30. package/dist/esm/createApp.js +6 -18
  31. package/dist/esm/createApp.js.map +1 -1
  32. package/dist/esm/state/ProcessContext.d.ts +6 -0
  33. package/dist/esm/state/ProcessContext.js +51 -0
  34. package/dist/esm/state/ProcessContext.js.map +1 -0
  35. package/dist/esm/state/ProcessStore.d.ts +7 -0
  36. package/dist/esm/state/ProcessStore.js +21 -0
  37. package/dist/esm/state/ProcessStore.js.map +1 -0
  38. package/dist/esm/types.d.ts +7 -0
  39. package/dist/esm/types.js.map +1 -1
  40. package/dist/esm/worker.js +7 -8
  41. package/dist/esm/worker.js.map +1 -1
  42. package/package.json +1 -3
  43. package/dist/cjs/store/Context.d.cts +0 -3
  44. package/dist/cjs/store/Context.d.ts +0 -3
  45. package/dist/cjs/store/Context.js +0 -13
  46. package/dist/cjs/store/Context.js.map +0 -1
  47. package/dist/cjs/store/Store.d.cts +0 -9
  48. package/dist/cjs/store/Store.d.ts +0 -9
  49. package/dist/cjs/store/Store.js +0 -37
  50. package/dist/cjs/store/Store.js.map +0 -1
  51. package/dist/cjs/store/index.d.cts +0 -2
  52. package/dist/cjs/store/index.d.ts +0 -2
  53. package/dist/cjs/store/index.js +0 -26
  54. package/dist/cjs/store/index.js.map +0 -1
  55. package/dist/esm/store/Context.d.ts +0 -3
  56. package/dist/esm/store/Context.js +0 -2
  57. package/dist/esm/store/Context.js.map +0 -1
  58. package/dist/esm/store/Store.d.ts +0 -9
  59. package/dist/esm/store/Store.js +0 -16
  60. package/dist/esm/store/Store.js.map +0 -1
  61. package/dist/esm/store/index.d.ts +0 -2
  62. package/dist/esm/store/index.js +0 -2
  63. package/dist/esm/store/index.js.map +0 -1
@@ -10,22 +10,47 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _jsxruntime = require("react/jsx-runtime");
12
12
  var _ink = require("ink");
13
- var _react = require("react");
14
- var _index = require("../store/index.js");
13
+ var _ProcessContext = require("../state/ProcessContext.js");
15
14
  var _ChildProcess = /*#__PURE__*/ _interop_require_default(require("./ChildProcess.js"));
15
+ function _define_property(obj, key, value) {
16
+ if (key in obj) {
17
+ Object.defineProperty(obj, key, {
18
+ value: value,
19
+ enumerable: true,
20
+ configurable: true,
21
+ writable: true
22
+ });
23
+ } else {
24
+ obj[key] = value;
25
+ }
26
+ return obj;
27
+ }
16
28
  function _interop_require_default(obj) {
17
29
  return obj && obj.__esModule ? obj : {
18
30
  default: obj
19
31
  };
20
32
  }
33
+ function _object_spread(target) {
34
+ for(var i = 1; i < arguments.length; i++){
35
+ var source = arguments[i] != null ? arguments[i] : {};
36
+ var ownKeys = Object.keys(source);
37
+ if (typeof Object.getOwnPropertySymbols === "function") {
38
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
39
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
40
+ }));
41
+ }
42
+ ownKeys.forEach(function(key) {
43
+ _define_property(target, key, source[key]);
44
+ });
45
+ }
46
+ return target;
47
+ }
21
48
  function App() {
22
- var store = (0, _react.useContext)(_index.Context);
49
+ var processes = (0, _ProcessContext.useProcesses)();
23
50
  return /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Box, {
24
51
  flexDirection: "column",
25
- children: store.processes.map(function(item) {
26
- return /*#__PURE__*/ (0, _jsxruntime.jsx)(_ChildProcess.default, {
27
- item: item
28
- }, item.id);
52
+ children: processes.map(function(item) {
53
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_ChildProcess.default, _object_spread({}, item), item.id);
29
54
  })
30
55
  });
31
56
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/App.tsx"],"sourcesContent":["import { Box } from 'ink';\nimport { useContext } from 'react';\nimport { Context, type Store } from '../store/index.js';\nimport type { ChildProcess as ChildProcessT } from '../types.js';\nimport ChildProcess from './ChildProcess.js';\n\nexport default function App() {\n const store = useContext<Store>(Context);\n\n return (\n <Box flexDirection=\"column\">\n {store.processes.map((item: ChildProcessT) => (\n <ChildProcess key={item.id} item={item} />\n ))}\n </Box>\n );\n}\n"],"names":["App","store","useContext","Context","Box","flexDirection","processes","map","item","ChildProcess","id"],"mappings":";;;;+BAMA;;;eAAwBA;;;;mBANJ;qBACO;qBACS;mEAEX;;;;;;AAEV,SAASA;IACtB,IAAMC,QAAQC,IAAAA,iBAAU,EAAQC,cAAO;IAEvC,qBACE,qBAACC,QAAG;QAACC,eAAc;kBAChBJ,MAAMK,SAAS,CAACC,GAAG,CAAC,SAACC;iCACpB,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 { Box } from 'ink';\nimport { useProcesses } from '../state/ProcessContext.js';\nimport type { ChildProcess as ChildProcessT } from '../types.js';\nimport ChildProcess from './ChildProcess.js';\n\nexport default function App() {\n const processes = useProcesses();\n\n return (\n <Box flexDirection=\"column\">\n {processes.map((item: ChildProcessT) => (\n <ChildProcess key={item.id} {...item} />\n ))}\n </Box>\n );\n}\n"],"names":["App","processes","useProcesses","Box","flexDirection","map","item","ChildProcess","id"],"mappings":";;;;+BAKA;;;eAAwBA;;;;mBALJ;8BACS;mEAEJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEV,SAASA;IACtB,IAAMC,YAAYC,IAAAA,4BAAY;IAE9B,qBACE,qBAACC,QAAG;QAACC,eAAc;kBAChBH,UAAUI,GAAG,CAAC,SAACC;iCACd,qBAACC,qBAAY,qBAAmBD,OAAbA,KAAKE,EAAE;;;AAIlC"}
@@ -1,6 +1,3 @@
1
1
  import type { ChildProcess as ChildProcessT } from '../types.js';
2
- type ItemProps = {
3
- item: ChildProcessT;
4
- };
5
- declare const _default: import("react").NamedExoticComponent<ItemProps>;
2
+ declare const _default: import("react").NamedExoticComponent<ChildProcessT>;
6
3
  export default _default;
@@ -1,6 +1,3 @@
1
1
  import type { ChildProcess as ChildProcessT } from '../types.js';
2
- type ItemProps = {
3
- item: ChildProcessT;
4
- };
5
- declare const _default: import("react").NamedExoticComponent<ItemProps>;
2
+ declare const _default: import("react").NamedExoticComponent<ChildProcessT>;
6
3
  export default _default;
@@ -9,7 +9,6 @@ Object.defineProperty(exports, "default", {
9
9
  }
10
10
  });
11
11
  var _jsxruntime = require("react/jsx-runtime");
12
- var _ansicolors = /*#__PURE__*/ _interop_require_default(require("ansi-colors"));
13
12
  var _ink = require("ink");
14
13
  var _react = require("react");
15
14
  var _ansiRegex = /*#__PURE__*/ _interop_require_default(require("../lib/ansiRegex.js"));
@@ -71,13 +70,13 @@ var SPINNER = {
71
70
  ]
72
71
  };
73
72
  var ICONS = {
74
- // @ts-ignore
75
- error: /*#__PURE__*/ (0, _jsxruntime.jsx)("ink-text", {
76
- children: _ansicolors.default.red(_figures.default.cross)
73
+ error: /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Text, {
74
+ color: "red",
75
+ children: _figures.default.cross
77
76
  }),
78
- // @ts-ignore
79
- success: /*#__PURE__*/ (0, _jsxruntime.jsx)("ink-text", {
80
- children: _ansicolors.default.green(_figures.default.tick)
77
+ success: /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Text, {
78
+ color: "green",
79
+ children: _figures.default.tick
81
80
  }),
82
81
  running: /*#__PURE__*/ (0, _jsxruntime.jsx)(_Spinner.default, _object_spread({}, SPINNER))
83
82
  };
@@ -110,13 +109,12 @@ var RunningSummary = /*#__PURE__*/ (0, _react.memo)(function RunningSummary(para
110
109
  });
111
110
  });
112
111
  var renderLine = function(line, index) {
113
- return(// @ts-ignore
114
- /*#__PURE__*/ (0, _jsxruntime.jsx)("ink-text", {
115
- style: {
116
- minHeight: 1
117
- },
118
- children: line.text
119
- }, index));
112
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Box, {
113
+ minHeight: 1,
114
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_ink.Text, {
115
+ children: line.text
116
+ })
117
+ }, index);
120
118
  };
121
119
  var Lines = /*#__PURE__*/ (0, _react.memo)(function Lines(param) {
122
120
  var lines = param.lines;
@@ -126,9 +124,7 @@ var Lines = /*#__PURE__*/ (0, _react.memo)(function Lines(param) {
126
124
  children: lines.map(renderLine)
127
125
  });
128
126
  });
129
- var Expanded = /*#__PURE__*/ (0, _react.memo)(function Expanded(param) {
130
- var item = param.item;
131
- var lines = item.lines;
127
+ var Expanded = /*#__PURE__*/ (0, _react.memo)(function Expanded(item) {
132
128
  return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_ink.Box, {
133
129
  flexDirection: "column",
134
130
  children: [
@@ -138,28 +134,26 @@ var Expanded = /*#__PURE__*/ (0, _react.memo)(function Expanded(param) {
138
134
  state: item.state
139
135
  }),
140
136
  /*#__PURE__*/ (0, _jsxruntime.jsx)(Lines, {
141
- lines: lines
137
+ lines: item.lines
142
138
  })
143
139
  ]
144
140
  });
145
141
  });
146
- var Contracted = /*#__PURE__*/ (0, _react.memo)(function Contracted(param) {
147
- var item = param.item;
148
- var state = item.state, lines = item.lines;
142
+ var Contracted = /*#__PURE__*/ (0, _react.memo)(function Contracted(item) {
149
143
  // remove ansi codes when displaying single lines
150
144
  var errors = (0, _react.useMemo)(function() {
151
- return lines.filter(function(line) {
145
+ return item.lines.filter(function(line) {
152
146
  return line.type === _types.LineType.stderr;
153
147
  });
154
148
  }, [
155
- lines
149
+ item.lines
156
150
  ]);
157
151
  var summary = (0, _react.useMemo)(function() {
158
- return lines.filter(function(line) {
152
+ return item.lines.filter(function(line) {
159
153
  return line.text.length > 0 && errors.indexOf(line) < 0;
160
154
  }).pop();
161
155
  }, [
162
- lines,
156
+ item.lines,
163
157
  errors
164
158
  ]);
165
159
  return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_ink.Box, {
@@ -170,7 +164,7 @@ var Contracted = /*#__PURE__*/ (0, _react.memo)(function Contracted(param) {
170
164
  title: item.title,
171
165
  state: item.state
172
166
  }),
173
- state === 'running' && /*#__PURE__*/ (0, _jsxruntime.jsx)(RunningSummary, {
167
+ item.state === 'running' && /*#__PURE__*/ (0, _jsxruntime.jsx)(RunningSummary, {
174
168
  line: summary || BLANK_LINE
175
169
  }),
176
170
  errors.length > 0 && /*#__PURE__*/ (0, _jsxruntime.jsx)(Lines, {
@@ -179,13 +173,7 @@ var Contracted = /*#__PURE__*/ (0, _react.memo)(function Contracted(param) {
179
173
  ]
180
174
  });
181
175
  });
182
- var _default = /*#__PURE__*/ (0, _react.memo)(function ChildProcess(param) {
183
- var item = param.item;
184
- var expanded = item.expanded;
185
- return expanded ? /*#__PURE__*/ (0, _jsxruntime.jsx)(Expanded, {
186
- item: item
187
- }) : /*#__PURE__*/ (0, _jsxruntime.jsx)(Contracted, {
188
- item: item
189
- });
176
+ var _default = /*#__PURE__*/ (0, _react.memo)(function ChildProcess(item) {
177
+ return item.expanded ? /*#__PURE__*/ (0, _jsxruntime.jsx)(Expanded, _object_spread({}, item)) : /*#__PURE__*/ (0, _jsxruntime.jsx)(Contracted, _object_spread({}, item));
190
178
  });
191
179
  /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/ChildProcess.tsx"],"sourcesContent":["import c from 'ansi-colors';\nimport { Box, Text } from 'ink';\nimport { memo, useMemo } from 'react';\nimport ansiRegex from '../lib/ansiRegex.js';\nimport figures from '../lib/figures.js';\nimport type { ChildProcess as ChildProcessT, Line, State } from '../types.js';\nimport { LineType } from '../types.js';\nimport Spinner from './Spinner.js';\n\nconst REGEX_ANSI = ansiRegex();\nconst BLANK_LINE = { type: LineType.stdout, text: '' };\n\n// From: https://github.com/sindresorhus/cli-spinners/blob/00de8fbeee16fa49502fa4f687449f70f2c8ca2c/spinners.json#L2\nconst SPINNER = {\n interval: 80,\n frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],\n};\n\nconst ICONS = {\n // @ts-ignore\n error: <ink-text>{c.red(figures.cross)}</ink-text>,\n // @ts-ignore\n success: <ink-text>{c.green(figures.tick)}</ink-text>,\n running: <Spinner {...SPINNER} />,\n};\n\ntype ItemProps = {\n item: ChildProcessT;\n};\n\ntype HeaderProps = {\n group?: string;\n title: string;\n state: State;\n};\n\nconst Header = memo(\n function Header({ group, title, state }: HeaderProps) {\n const icon = ICONS[state];\n\n return (\n <Box>\n {icon}\n {group && <Text bold>{`${group}${figures.pointer} `}</Text>}\n <Text>{title}</Text>\n </Box>\n );\n },\n (a, b) => a.group === b.group && a.title === b.title && a.state === b.state\n);\n\ntype RunningSummaryProps = {\n line: Line;\n};\n\nconst RunningSummary = memo(function RunningSummary({ line }: RunningSummaryProps) {\n return (\n <Box marginLeft={2}>\n <Text color=\"gray\">{line.text.replace(REGEX_ANSI, '')}</Text>\n </Box>\n );\n});\n\ntype LinesProps = {\n lines: Line[];\n};\n\nconst renderLine = (line, index) => {\n return (\n // @ts-ignore\n <ink-text key={index} style={{ minHeight: 1 }}>\n {line.text}\n {/* @ts-ignore */}\n </ink-text>\n );\n};\n\nconst Lines = memo(function Lines({ lines }: LinesProps) {\n return (\n <Box flexDirection=\"column\" marginLeft={2}>\n {lines.map(renderLine)}\n </Box>\n );\n});\n\nconst Expanded = memo(function Expanded({ item }: ItemProps) {\n const { lines } = item;\n\n return (\n <Box flexDirection=\"column\">\n <Header group={item.group} title={item.title} state={item.state} />\n <Lines lines={lines} />\n </Box>\n );\n});\n\nconst Contracted = memo(function Contracted({ item }: ItemProps) {\n const { state, lines } = item;\n\n // remove ansi codes when displaying single lines\n const errors = useMemo(() => lines.filter((line) => line.type === LineType.stderr), [lines]);\n const summary = useMemo(() => lines.filter((line) => line.text.length > 0 && errors.indexOf(line) < 0).pop(), [lines, errors]);\n\n return (\n <Box flexDirection=\"column\">\n <Header group={item.group} title={item.title} state={item.state} />\n {state === 'running' && <RunningSummary line={summary || BLANK_LINE} />}\n {errors.length > 0 && <Lines lines={errors} />}\n </Box>\n );\n});\n\nexport default memo(function ChildProcess({ item }: ItemProps) {\n const { expanded } = item;\n return expanded ? <Expanded item={item} /> : <Contracted item={item} />;\n});\n"],"names":["REGEX_ANSI","ansiRegex","BLANK_LINE","type","LineType","stdout","text","SPINNER","interval","frames","ICONS","error","ink-text","c","red","figures","cross","success","green","tick","running","Spinner","Header","memo","group","title","state","icon","Box","Text","bold","pointer","a","b","RunningSummary","line","marginLeft","color","replace","renderLine","index","style","minHeight","Lines","lines","flexDirection","map","Expanded","item","Contracted","errors","useMemo","filter","stderr","summary","length","indexOf","pop","ChildProcess","expanded"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/ChildProcess.tsx"],"sourcesContent":["import { Box, Text } from 'ink';\nimport { memo, useMemo } from 'react';\nimport ansiRegex from '../lib/ansiRegex.js';\nimport figures from '../lib/figures.js';\nimport type { ChildProcess as ChildProcessT, Line, State } from '../types.js';\nimport { LineType } from '../types.js';\nimport Spinner from './Spinner.js';\n\nconst REGEX_ANSI = ansiRegex();\nconst BLANK_LINE = { type: LineType.stdout, text: '' };\n\n// From: https://github.com/sindresorhus/cli-spinners/blob/00de8fbeee16fa49502fa4f687449f70f2c8ca2c/spinners.json#L2\nconst SPINNER = {\n interval: 80,\n frames: ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'],\n};\n\nconst ICONS = {\n error: <Text color=\"red\">{figures.cross}</Text>,\n success: <Text color=\"green\">{figures.tick}</Text>,\n running: <Spinner {...SPINNER} />,\n};\n\ntype HeaderProps = {\n group?: string;\n title: string;\n state: State;\n};\n\nconst Header = memo(\n function Header({ group, title, state }: HeaderProps) {\n const icon = ICONS[state];\n\n return (\n <Box>\n {icon}\n {group && <Text bold>{`${group}${figures.pointer} `}</Text>}\n <Text>{title}</Text>\n </Box>\n );\n },\n (a, b) => a.group === b.group && a.title === b.title && a.state === b.state\n);\n\ntype RunningSummaryProps = {\n line: Line;\n};\n\nconst RunningSummary = memo(function RunningSummary({ line }: RunningSummaryProps) {\n return (\n <Box marginLeft={2}>\n <Text color=\"gray\">{line.text.replace(REGEX_ANSI, '')}</Text>\n </Box>\n );\n});\n\ntype LinesProps = {\n lines: Line[];\n};\n\nconst renderLine = (line, index) => {\n return (\n <Box key={index} minHeight={1}>\n <Text>{line.text}</Text>\n </Box>\n );\n};\n\nconst Lines = memo(function Lines({ lines }: LinesProps) {\n return (\n <Box flexDirection=\"column\" marginLeft={2}>\n {lines.map(renderLine)}\n </Box>\n );\n});\n\nconst Expanded = memo(function Expanded(item: ChildProcessT) {\n return (\n <Box flexDirection=\"column\">\n <Header group={item.group} title={item.title} state={item.state} />\n <Lines lines={item.lines} />\n </Box>\n );\n});\n\nconst Contracted = memo(function Contracted(item: ChildProcessT) {\n // remove ansi codes when displaying single lines\n const errors = useMemo(() => item.lines.filter((line) => line.type === LineType.stderr), [item.lines]);\n const summary = useMemo(() => item.lines.filter((line) => line.text.length > 0 && errors.indexOf(line) < 0).pop(), [item.lines, errors]);\n\n return (\n <Box flexDirection=\"column\">\n <Header group={item.group} title={item.title} state={item.state} />\n {item.state === 'running' && <RunningSummary line={summary || BLANK_LINE} />}\n {errors.length > 0 && <Lines lines={errors} />}\n </Box>\n );\n});\n\nexport default memo(function ChildProcess(item: ChildProcessT) {\n return item.expanded ? <Expanded {...item} /> : <Contracted {...item} />;\n});\n"],"names":["REGEX_ANSI","ansiRegex","BLANK_LINE","type","LineType","stdout","text","SPINNER","interval","frames","ICONS","error","Text","color","figures","cross","success","tick","running","Spinner","Header","memo","group","title","state","icon","Box","bold","pointer","a","b","RunningSummary","line","marginLeft","replace","renderLine","index","minHeight","Lines","lines","flexDirection","map","Expanded","item","Contracted","errors","useMemo","filter","stderr","summary","length","indexOf","pop","ChildProcess","expanded"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { Store } from './store/index.js';
1
+ import Store from './state/ProcessStore.js';
2
2
  export type RetainCallback = (app: Store) => undefined;
3
3
  export type ReleaseCallback = () => undefined;
4
4
  export default function createApp(): {
@@ -1,4 +1,4 @@
1
- import { Store } from './store/index.js';
1
+ import Store from './state/ProcessStore.js';
2
2
  export type RetainCallback = (app: Store) => undefined;
3
3
  export type ReleaseCallback = () => undefined;
4
4
  export default function createApp(): {
@@ -10,44 +10,32 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _jsxruntime = require("react/jsx-runtime");
12
12
  var _ink = require("ink");
13
- var _lodashthrottle = /*#__PURE__*/ _interop_require_default(require("lodash.throttle"));
14
13
  var _App = /*#__PURE__*/ _interop_require_default(require("./components/App.js"));
15
- var _Context = /*#__PURE__*/ _interop_require_default(require("./store/Context.js"));
16
- var _index = require("./store/index.js");
14
+ var _ProcessContext = require("./state/ProcessContext.js");
15
+ var _ProcessStore = /*#__PURE__*/ _interop_require_default(require("./state/ProcessStore.js"));
17
16
  function _interop_require_default(obj) {
18
17
  return obj && obj.__esModule ? obj : {
19
18
  default: obj
20
19
  };
21
20
  }
22
- var THROTTLE = 50;
23
21
  function createApp() {
24
22
  var refCount = 0;
25
23
  var store = null;
26
24
  var inkApp = null;
27
- var rerender = function() {
28
- inkApp === null || inkApp === void 0 ? void 0 : inkApp.rerender(/*#__PURE__*/ (0, _jsxruntime.jsx)(_Context.default.Provider, {
29
- value: store,
30
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_App.default, {})
31
- }));
32
- };
33
- var rerenderThrottled = (0, _lodashthrottle.default)(rerender, THROTTLE);
34
25
  return {
35
26
  retain: function retain(fn) {
36
27
  if (++refCount > 1) return fn(store);
37
28
  if (store) throw new Error('Not expecting store');
38
- store = new _index.Store(rerenderThrottled);
39
- inkApp = (0, _ink.render)(/*#__PURE__*/ (0, _jsxruntime.jsx)(_Context.default.Provider, {
40
- value: store,
29
+ store = new _ProcessStore.default();
30
+ inkApp = (0, _ink.render)(/*#__PURE__*/ (0, _jsxruntime.jsx)(_ProcessContext.ProcessProvider, {
31
+ store: store,
41
32
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_App.default, {})
42
- }), {
43
- patchConsole: false
44
- });
33
+ }));
45
34
  fn(store);
46
35
  },
47
36
  release: function release(cb) {
48
37
  if (--refCount > 0) return cb();
49
38
  if (!store) throw new Error('Expecting store');
50
- rerender();
51
39
  inkApp.waitUntilExit().then(function() {
52
40
  return cb();
53
41
  }).catch(cb);
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/createApp.tsx"],"sourcesContent":["import { type Instance, render } from 'ink';\nimport throttle from 'lodash.throttle';\nimport App from './components/App.js';\nimport StoreContext from './store/Context.js';\nimport { Store } from './store/index.js';\n\nexport type RetainCallback = (app: Store) => undefined;\nexport type ReleaseCallback = () => undefined;\n\nconst THROTTLE = 50;\n\nexport default function createApp() {\n let refCount = 0;\n let store = null;\n let inkApp: Instance | null = null;\n\n const rerender = () => {\n inkApp?.rerender(\n <StoreContext.Provider value={store}>\n <App />\n </StoreContext.Provider>\n );\n };\n const rerenderThrottled = throttle(rerender, THROTTLE);\n\n return {\n retain(fn: RetainCallback): undefined {\n if (++refCount > 1) return fn(store);\n if (store) throw new Error('Not expecting store');\n\n store = new Store(rerenderThrottled);\n inkApp = render(\n <StoreContext.Provider value={store}>\n <App />\n </StoreContext.Provider>,\n { patchConsole: false }\n );\n fn(store);\n },\n release(cb: ReleaseCallback): undefined {\n if (--refCount > 0) return cb();\n if (!store) throw new Error('Expecting store');\n\n rerender();\n inkApp\n .waitUntilExit()\n .then(() => cb())\n .catch(cb);\n inkApp.unmount();\n inkApp = null;\n store = null;\n process.stdout.write('\\x1b[?25h'); // show cursor\n },\n };\n}\n"],"names":["createApp","THROTTLE","refCount","store","inkApp","rerender","StoreContext","Provider","value","App","rerenderThrottled","throttle","retain","fn","Error","Store","render","patchConsole","release","cb","waitUntilExit","then","catch","unmount","process","stdout","write"],"mappings":";;;;+BAWA;;;eAAwBA;;;;mBAXc;qEACjB;0DACL;8DACS;qBACH;;;;;;AAKtB,IAAMC,WAAW;AAEF,SAASD;IACtB,IAAIE,WAAW;IACf,IAAIC,QAAQ;IACZ,IAAIC,SAA0B;IAE9B,IAAMC,WAAW;QACfD,mBAAAA,6BAAAA,OAAQC,QAAQ,eACd,qBAACC,gBAAY,CAACC,QAAQ;YAACC,OAAOL;sBAC5B,cAAA,qBAACM,YAAG;;IAGV;IACA,IAAMC,oBAAoBC,IAAAA,uBAAQ,EAACN,UAAUJ;IAE7C,OAAO;QACLW,QAAAA,SAAAA,OAAOC,EAAkB;YACvB,IAAI,EAAEX,WAAW,GAAG,OAAOW,GAAGV;YAC9B,IAAIA,OAAO,MAAM,IAAIW,MAAM;YAE3BX,QAAQ,IAAIY,YAAK,CAACL;YAClBN,SAASY,IAAAA,WAAM,gBACb,qBAACV,gBAAY,CAACC,QAAQ;gBAACC,OAAOL;0BAC5B,cAAA,qBAACM,YAAG;gBAEN;gBAAEQ,cAAc;YAAM;YAExBJ,GAAGV;QACL;QACAe,SAAAA,SAAAA,QAAQC,EAAmB;YACzB,IAAI,EAAEjB,WAAW,GAAG,OAAOiB;YAC3B,IAAI,CAAChB,OAAO,MAAM,IAAIW,MAAM;YAE5BT;YACAD,OACGgB,aAAa,GACbC,IAAI,CAAC;uBAAMF;eACXG,KAAK,CAACH;YACTf,OAAOmB,OAAO;YACdnB,SAAS;YACTD,QAAQ;YACRqB,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 { type Instance, render } from 'ink';\nimport App from './components/App.js';\nimport { ProcessProvider } from './state/ProcessContext.js';\nimport Store from './state/ProcessStore.js';\n\nexport type RetainCallback = (app: Store) => undefined;\nexport type ReleaseCallback = () => undefined;\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 if (++refCount > 1) return fn(store);\n if (store) throw new Error('Not expecting store');\n\n store = new Store();\n inkApp = render(\n <ProcessProvider store={store}>\n <App />\n </ProcessProvider>\n );\n fn(store);\n },\n release(cb: ReleaseCallback): undefined {\n if (--refCount > 0) return cb();\n if (!store) throw new Error('Expecting store');\n\n inkApp\n .waitUntilExit()\n .then(() => cb())\n .catch(cb);\n inkApp.unmount();\n inkApp = null;\n store = null;\n process.stdout.write('\\x1b[?25h'); // show cursor\n },\n };\n}\n"],"names":["createApp","refCount","store","inkApp","retain","fn","Error","Store","render","ProcessProvider","App","release","cb","waitUntilExit","then","catch","unmount","process","stdout","write"],"mappings":";;;;+BAQA;;;eAAwBA;;;;mBARc;0DACtB;8BACgB;mEACd;;;;;;AAKH,SAASA;IACtB,IAAIC,WAAW;IACf,IAAIC,QAAQ;IACZ,IAAIC,SAA0B;IAE9B,OAAO;QACLC,QAAAA,SAAAA,OAAOC,EAAkB;YACvB,IAAI,EAAEJ,WAAW,GAAG,OAAOI,GAAGH;YAC9B,IAAIA,OAAO,MAAM,IAAII,MAAM;YAE3BJ,QAAQ,IAAIK,qBAAK;YACjBJ,SAASK,IAAAA,WAAM,gBACb,qBAACC,+BAAe;gBAACP,OAAOA;0BACtB,cAAA,qBAACQ,YAAG;;YAGRL,GAAGH;QACL;QACAS,SAAAA,SAAAA,QAAQC,EAAmB;YACzB,IAAI,EAAEX,WAAW,GAAG,OAAOW;YAC3B,IAAI,CAACV,OAAO,MAAM,IAAII,MAAM;YAE5BH,OACGU,aAAa,GACbC,IAAI,CAAC;uBAAMF;eACXG,KAAK,CAACH;YACTT,OAAOa,OAAO;YACdb,SAAS;YACTD,QAAQ;YACRe,QAAQC,MAAM,CAACC,KAAK,CAAC,cAAc,cAAc;QACnD;IACF;AACF"}
@@ -0,0 +1,6 @@
1
+ export declare function ProcessProvider({ children, store }: {
2
+ children: any;
3
+ store: any;
4
+ }): import("react").JSX.Element;
5
+ export declare function useProcesses(): any;
6
+ export declare function useProcessDispatch(): any;
@@ -0,0 +1,6 @@
1
+ export declare function ProcessProvider({ children, store }: {
2
+ children: any;
3
+ store: any;
4
+ }): import("react").JSX.Element;
5
+ export declare function useProcesses(): any;
6
+ export declare function useProcessDispatch(): any;
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get ProcessProvider () {
13
+ return ProcessProvider;
14
+ },
15
+ get useProcessDispatch () {
16
+ return useProcessDispatch;
17
+ },
18
+ get useProcesses () {
19
+ return useProcesses;
20
+ }
21
+ });
22
+ var _jsxruntime = require("react/jsx-runtime");
23
+ var _react = require("react");
24
+ function _array_like_to_array(arr, len) {
25
+ if (len == null || len > arr.length) len = arr.length;
26
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
27
+ return arr2;
28
+ }
29
+ function _array_with_holes(arr) {
30
+ if (Array.isArray(arr)) return arr;
31
+ }
32
+ function _array_without_holes(arr) {
33
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
34
+ }
35
+ function _iterable_to_array(iter) {
36
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
37
+ }
38
+ function _iterable_to_array_limit(arr, i) {
39
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
40
+ if (_i == null) return;
41
+ var _arr = [];
42
+ var _n = true;
43
+ var _d = false;
44
+ var _s, _e;
45
+ try {
46
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
47
+ _arr.push(_s.value);
48
+ if (i && _arr.length === i) break;
49
+ }
50
+ } catch (err) {
51
+ _d = true;
52
+ _e = err;
53
+ } finally{
54
+ try {
55
+ if (!_n && _i["return"] != null) _i["return"]();
56
+ } finally{
57
+ if (_d) throw _e;
58
+ }
59
+ }
60
+ return _arr;
61
+ }
62
+ function _non_iterable_rest() {
63
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
64
+ }
65
+ function _non_iterable_spread() {
66
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
67
+ }
68
+ function _sliced_to_array(arr, i) {
69
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
70
+ }
71
+ function _to_consumable_array(arr) {
72
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
73
+ }
74
+ function _unsupported_iterable_to_array(o, minLen) {
75
+ if (!o) return;
76
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
77
+ var n = Object.prototype.toString.call(o).slice(8, -1);
78
+ if (n === "Object" && o.constructor) n = o.constructor.name;
79
+ if (n === "Map" || n === "Set") return Array.from(n);
80
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
81
+ }
82
+ var ProcessContext = /*#__PURE__*/ (0, _react.createContext)(null);
83
+ var ProcessDispatchContext = /*#__PURE__*/ (0, _react.createContext)(null);
84
+ function ProcessProvider(param) {
85
+ var children = param.children, store = param.store;
86
+ var _useReducer = _sliced_to_array((0, _react.useReducer)(ProcessReducer, []), 2), Process = _useReducer[0], dispatch = _useReducer[1];
87
+ store.on('added', function(process) {
88
+ return dispatch({
89
+ type: 'added',
90
+ process: process
91
+ });
92
+ });
93
+ store.on('changed', function(process) {
94
+ return dispatch({
95
+ type: 'changed',
96
+ process: process
97
+ });
98
+ });
99
+ return /*#__PURE__*/ (0, _jsxruntime.jsx)(ProcessContext, {
100
+ value: Process,
101
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(ProcessDispatchContext, {
102
+ value: dispatch,
103
+ children: children
104
+ })
105
+ });
106
+ }
107
+ function useProcesses() {
108
+ return (0, _react.useContext)(ProcessContext);
109
+ }
110
+ function useProcessDispatch() {
111
+ return (0, _react.useContext)(ProcessDispatchContext);
112
+ }
113
+ function ProcessReducer(processes, action) {
114
+ switch(action.type){
115
+ case 'added':
116
+ {
117
+ if (processes.find(function(x) {
118
+ return x.id === action.process.id;
119
+ })) {
120
+ console.log("".concat(action.process.id, " process added a second time"));
121
+ return processes;
122
+ }
123
+ return _to_consumable_array(processes).concat([
124
+ action.process
125
+ ]);
126
+ }
127
+ case 'changed':
128
+ {
129
+ return processes.map(function(x) {
130
+ return x.id === action.process.id ? action.process : x;
131
+ });
132
+ }
133
+ default:
134
+ {
135
+ throw Error("Unknown action: ".concat(action.type));
136
+ }
137
+ }
138
+ }
139
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/state/ProcessContext.tsx"],"sourcesContent":["import { createContext, useContext, useReducer } from 'react';\n\nconst ProcessContext = createContext(null);\nconst ProcessDispatchContext = createContext(null);\n\nexport function ProcessProvider({ children, store }) {\n const [Process, dispatch] = useReducer(ProcessReducer, []);\n\n store.on('added', (process) => dispatch({ type: 'added', process }));\n store.on('changed', (process) => dispatch({ type: 'changed', process }));\n\n return (\n <ProcessContext value={Process}>\n <ProcessDispatchContext value={dispatch}>{children}</ProcessDispatchContext>\n </ProcessContext>\n );\n}\n\nexport function useProcesses() {\n return useContext(ProcessContext);\n}\n\nexport function useProcessDispatch() {\n return useContext(ProcessDispatchContext);\n}\n\nfunction ProcessReducer(processes, action) {\n switch (action.type) {\n case 'added': {\n if (processes.find((x) => x.id === action.process.id)) {\n console.log(`${action.process.id} process added a second time`);\n return processes;\n }\n return [...processes, action.process];\n }\n case 'changed': {\n return processes.map((x) => (x.id === action.process.id ? action.process : x));\n }\n default: {\n throw Error(`Unknown action: ${action.type}`);\n }\n }\n}\n"],"names":["ProcessProvider","useProcessDispatch","useProcesses","ProcessContext","createContext","ProcessDispatchContext","children","store","useReducer","ProcessReducer","Process","dispatch","on","process","type","value","useContext","processes","action","find","x","id","console","log","map","Error"],"mappings":";;;;;;;;;;;QAKgBA;eAAAA;;QAiBAC;eAAAA;;QAJAC;eAAAA;;;;qBAlBsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEtD,IAAMC,+BAAiBC,IAAAA,oBAAa,EAAC;AACrC,IAAMC,uCAAyBD,IAAAA,oBAAa,EAAC;AAEtC,SAASJ,gBAAgB,KAAmB;QAAjBM,WAAF,MAAEA,UAAUC,QAAZ,MAAYA;IAC1C,IAA4BC,+BAAAA,IAAAA,iBAAU,EAACC,gBAAgB,EAAE,OAAlDC,UAAqBF,gBAAZG,WAAYH;IAE5BD,MAAMK,EAAE,CAAC,SAAS,SAACC;eAAYF,SAAS;YAAEG,MAAM;YAASD,SAAAA;QAAQ;;IACjEN,MAAMK,EAAE,CAAC,WAAW,SAACC;eAAYF,SAAS;YAAEG,MAAM;YAAWD,SAAAA;QAAQ;;IAErE,qBACE,qBAACV;QAAeY,OAAOL;kBACrB,cAAA,qBAACL;YAAuBU,OAAOJ;sBAAWL;;;AAGhD;AAEO,SAASJ;IACd,OAAOc,IAAAA,iBAAU,EAACb;AACpB;AAEO,SAASF;IACd,OAAOe,IAAAA,iBAAU,EAACX;AACpB;AAEA,SAASI,eAAeQ,SAAS,EAAEC,MAAM;IACvC,OAAQA,OAAOJ,IAAI;QACjB,KAAK;YAAS;gBACZ,IAAIG,UAAUE,IAAI,CAAC,SAACC;2BAAMA,EAAEC,EAAE,KAAKH,OAAOL,OAAO,CAACQ,EAAE;oBAAG;oBACrDC,QAAQC,GAAG,CAAC,AAAC,GAAoB,OAAlBL,OAAOL,OAAO,CAACQ,EAAE,EAAC;oBACjC,OAAOJ;gBACT;gBACA,OAAO,AAAC,qBAAGA,kBAAJ;oBAAeC,OAAOL,OAAO;iBAAC;YACvC;QACA,KAAK;YAAW;gBACd,OAAOI,UAAUO,GAAG,CAAC,SAACJ;2BAAOA,EAAEC,EAAE,KAAKH,OAAOL,OAAO,CAACQ,EAAE,GAAGH,OAAOL,OAAO,GAAGO;;YAC7E;QACA;YAAS;gBACP,MAAMK,MAAM,AAAC,mBAA8B,OAAZP,OAAOJ,IAAI;YAC5C;IACF;AACF"}
@@ -0,0 +1,7 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { ChildProcess, ChildProcessUpdate } from '../types.js';
3
+ export default class ProcessStore extends EventEmitter {
4
+ processes: ChildProcess[];
5
+ add(process: ChildProcess): ChildProcess;
6
+ update(id: string, update: ChildProcessUpdate): void;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { EventEmitter } from 'events';
2
+ import type { ChildProcess, ChildProcessUpdate } from '../types.js';
3
+ export default class ProcessStore extends EventEmitter {
4
+ processes: ChildProcess[];
5
+ add(process: ChildProcess): ChildProcess;
6
+ update(id: string, update: ChildProcessUpdate): void;
7
+ }
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return ProcessStore;
9
+ }
10
+ });
11
+ var _events = require("events");
12
+ function _assert_this_initialized(self) {
13
+ if (self === void 0) {
14
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
15
+ }
16
+ return self;
17
+ }
18
+ function _call_super(_this, derived, args) {
19
+ derived = _get_prototype_of(derived);
20
+ return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
21
+ }
22
+ function _class_call_check(instance, Constructor) {
23
+ if (!(instance instanceof Constructor)) {
24
+ throw new TypeError("Cannot call a class as a function");
25
+ }
26
+ }
27
+ function _get_prototype_of(o) {
28
+ _get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
29
+ return o.__proto__ || Object.getPrototypeOf(o);
30
+ };
31
+ return _get_prototype_of(o);
32
+ }
33
+ function _inherits(subClass, superClass) {
34
+ if (typeof superClass !== "function" && superClass !== null) {
35
+ throw new TypeError("Super expression must either be null or a function");
36
+ }
37
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
38
+ constructor: {
39
+ value: subClass,
40
+ writable: true,
41
+ configurable: true
42
+ }
43
+ });
44
+ if (superClass) _set_prototype_of(subClass, superClass);
45
+ }
46
+ function _possible_constructor_return(self, call) {
47
+ if (call && (_type_of(call) === "object" || typeof call === "function")) {
48
+ return call;
49
+ }
50
+ return _assert_this_initialized(self);
51
+ }
52
+ function _set_prototype_of(o, p) {
53
+ _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
54
+ o.__proto__ = p;
55
+ return o;
56
+ };
57
+ return _set_prototype_of(o, p);
58
+ }
59
+ function _type_of(obj) {
60
+ "@swc/helpers - typeof";
61
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
62
+ }
63
+ function _is_native_reflect_construct() {
64
+ try {
65
+ var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
66
+ } catch (_) {}
67
+ return (_is_native_reflect_construct = function() {
68
+ return !!result;
69
+ })();
70
+ }
71
+ var ProcessStore = /*#__PURE__*/ function(EventEmitter) {
72
+ "use strict";
73
+ _inherits(ProcessStore, EventEmitter);
74
+ function ProcessStore() {
75
+ _class_call_check(this, ProcessStore);
76
+ var _this;
77
+ _this = _call_super(this, ProcessStore, arguments), _this.processes = [];
78
+ return _this;
79
+ }
80
+ var _proto = ProcessStore.prototype;
81
+ _proto.add = function add(process) {
82
+ this.processes.push(process);
83
+ this.emit('added', process);
84
+ return process;
85
+ };
86
+ _proto.update = function update(id, update) {
87
+ var found = this.processes.find(function(x) {
88
+ return x.id === id;
89
+ });
90
+ if (!found) {
91
+ console.log("Process ".concat(id, " not found"));
92
+ return;
93
+ }
94
+ Object.assign(found, update);
95
+ this.emit('changed', found);
96
+ };
97
+ return ProcessStore;
98
+ }(_events.EventEmitter);
99
+ /* CJS INTEROP */ if (exports.__esModule && exports.default) { try { Object.defineProperty(exports.default, '__esModule', { value: true }); for (var key in exports) { exports.default[key] = exports[key]; } } catch (_) {}; module.exports = exports.default; }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/state/ProcessStore.ts"],"sourcesContent":["import { EventEmitter } from 'events';\nimport type { ChildProcess, ChildProcessUpdate } from '../types.js';\n\nexport default class ProcessStore extends EventEmitter {\n processes: ChildProcess[] = [];\n\n add(process: ChildProcess): ChildProcess {\n this.processes.push(process);\n this.emit('added', process);\n return process;\n }\n\n update(id: string, update: ChildProcessUpdate): void {\n const found = this.processes.find((x) => x.id === id);\n if (!found) {\n console.log(`Process ${id} not found`);\n return;\n }\n Object.assign(found, update);\n this.emit('changed', found);\n }\n}\n"],"names":["ProcessStore","processes","add","process","push","emit","update","id","found","find","x","console","log","Object","assign","EventEmitter"],"mappings":";;;;;;;eAGqBA;;;sBAHQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGd,IAAA,AAAMA,6BAAN;;cAAMA;aAAAA;gCAAAA;;gBAAN,kBAAMA,gCACnBC,YAA4B,EAAE;;;iBADXD;IAGnBE,OAAAA,GAIC,GAJDA,SAAAA,IAAIC,OAAqB;QACvB,IAAI,CAACF,SAAS,CAACG,IAAI,CAACD;QACpB,IAAI,CAACE,IAAI,CAAC,SAASF;QACnB,OAAOA;IACT;IAEAG,OAAAA,MAQC,GARDA,SAAAA,OAAOC,EAAU,EAAED,MAA0B;QAC3C,IAAME,QAAQ,IAAI,CAACP,SAAS,CAACQ,IAAI,CAAC,SAACC;mBAAMA,EAAEH,EAAE,KAAKA;;QAClD,IAAI,CAACC,OAAO;YACVG,QAAQC,GAAG,CAAC,AAAC,WAAa,OAAHL,IAAG;YAC1B;QACF;QACAM,OAAOC,MAAM,CAACN,OAAOF;QACrB,IAAI,CAACD,IAAI,CAAC,WAAWG;IACvB;WAjBmBR;EAAqBe,oBAAY"}
@@ -22,3 +22,10 @@ export type ChildProcess = {
22
22
  lines: Line[];
23
23
  expanded?: boolean;
24
24
  };
25
+ export type ChildProcessUpdate = {
26
+ group?: string;
27
+ title?: string;
28
+ state?: State;
29
+ lines?: Line[];
30
+ expanded?: boolean;
31
+ };
@@ -22,3 +22,10 @@ export type ChildProcess = {
22
22
  lines: Line[];
23
23
  expanded?: boolean;
24
24
  };
25
+ export type ChildProcessUpdate = {
26
+ group?: string;
27
+ title?: string;
28
+ state?: State;
29
+ lines?: Line[];
30
+ expanded?: boolean;
31
+ };