spawn-term 0.1.22 → 0.1.24

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.
@@ -12,6 +12,7 @@ var _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
12
12
  var _zustand = require("zustand");
13
13
  var _Store = /*#__PURE__*/ _interop_require_default(require("../contexts/Store.cjs"));
14
14
  var _ink = require("../ink.cjs");
15
+ var _ansiRegex = /*#__PURE__*/ _interop_require_default(require("../lib/ansiRegex.cjs"));
15
16
  var _figures = /*#__PURE__*/ _interop_require_default(require("../lib/figures.cjs"));
16
17
  var _Spinner = /*#__PURE__*/ _interop_require_default(require("./Spinner.cjs"));
17
18
  var _types = require("../types.cjs");
@@ -61,6 +62,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
61
62
  }
62
63
  return newObj;
63
64
  }
65
+ var ansiRegex = (0, _ansiRegex.default)();
64
66
  // From: https://github.com/sindresorhus/cli-spinners/blob/00de8fbeee16fa49502fa4f687449f70f2c8ca2c/spinners.json#L2
65
67
  var spinner = {
66
68
  interval: 80,
@@ -102,7 +104,7 @@ function Output(param) {
102
104
  marginLeft: 2
103
105
  }, /*#__PURE__*/ _react.default.createElement(_ink.Text, {
104
106
  color: "gray"
105
- }, "".concat(_figures.default.arrowRight, " ").concat(output.text)));
107
+ }, output.text));
106
108
  }
107
109
  function Lines(param) {
108
110
  var lines = param.lines;
@@ -120,26 +122,6 @@ function Lines(param) {
120
122
  }, line.text)));
121
123
  }));
122
124
  }
123
- var HEADINGS = [
124
- _figures.default.tick,
125
- _figures.default.cross,
126
- spinner.frames[0]
127
- ];
128
- function filterHeadings(lines) {
129
- var _loop = function(i) {
130
- var line = lines[i];
131
- if (!HEADINGS.some(function(x) {
132
- return line[0] === x;
133
- })) return "break";
134
- headings.push(line);
135
- };
136
- var headings = [];
137
- for(var i = 0; i < lines.length; i++){
138
- var _ret = _loop(i);
139
- if (_ret === "break") break;
140
- }
141
- return headings;
142
- }
143
125
  function ChildProcess(param) {
144
126
  var id = param.id;
145
127
  var store = (0, _react.useContext)(_Store.default);
@@ -157,19 +139,23 @@ function ChildProcess(param) {
157
139
  lines: lines
158
140
  }));
159
141
  }
160
- var headings = filterHeadings(lines);
161
- var errors = lines.filter(function(line) {
142
+ // remove ansi codes when displaying single lines
143
+ var cleaned = lines.map(function(x) {
144
+ return {
145
+ type: x.type,
146
+ text: x.text.replace(ansiRegex, '')
147
+ };
148
+ });
149
+ var errors = cleaned.filter(function(line) {
162
150
  return line.type === _types.LineType.stderr;
163
151
  });
164
- var output = lines.filter(function(line) {
152
+ var output = cleaned.filter(function(line) {
165
153
  return line.text.length > 0;
166
154
  }).pop();
167
155
  return /*#__PURE__*/ _react.default.createElement(_ink.Box, {
168
156
  flexDirection: "column"
169
157
  }, /*#__PURE__*/ _react.default.createElement(Header, {
170
158
  item: item
171
- }), headings.length > 0 && /*#__PURE__*/ _react.default.createElement(Lines, {
172
- lines: headings
173
159
  }), state === 'running' && output && /*#__PURE__*/ _react.default.createElement(Output, {
174
160
  output: output
175
161
  }), errors.length > 0 && /*#__PURE__*/ _react.default.createElement(Lines, {
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/ChildProcess.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { useStore } from 'zustand';\nimport StoreContext from '../contexts/Store';\nimport { Box, Text } from '../ink.mjs';\nimport figures from '../lib/figures';\nimport Spinner from './Spinner';\n\nimport type { AppState } from '../types';\nimport { LineType } from '../types';\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 ChildProcessProps = {\n id: string;\n};\n\nfunction Header({ item }) {\n const { group, title, state } = item;\n const icon = ICONS[state];\n\n return (\n <Box>\n <Box marginRight={1}>{icon}</Box>\n {group && <Text bold>{`${group}${figures.pointer} `}</Text>}\n <Text>{title}</Text>\n </Box>\n );\n}\n\nfunction Output({ output }) {\n return (\n <Box marginLeft={2}>\n <Text color=\"gray\">{`${figures.arrowRight} ${output.text}`}</Text>\n </Box>\n );\n}\n\nfunction Lines({ lines }) {\n return (\n <Box flexDirection=\"column\" marginLeft={2}>\n {lines.map((line, index) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: <explanation>\n <Box key={index} flexDirection=\"column\" height={1}>\n <Text color={line.type === LineType.stderr ? 'red' : 'black'}>{line.text}</Text>\n </Box>\n ))}\n </Box>\n );\n}\n\nconst HEADINGS = [figures.tick, figures.cross, spinner.frames[0]];\nfunction filterHeadings(lines) {\n const headings = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!HEADINGS.some((x) => line[0] === x)) break;\n headings.push(line);\n }\n return headings;\n}\n\nexport default function ChildProcess({ id }: ChildProcessProps) {\n const store = useContext(StoreContext);\n const appState = useStore(store) as AppState;\n const item = appState.processes.find((x) => x.id === id);\n const { state, lines, expanded } = item;\n\n if (expanded) {\n return (\n <Box flexDirection=\"column\">\n <Header item={item} />\n <Lines lines={lines} />\n </Box>\n );\n }\n const headings = filterHeadings(lines);\n const errors = lines.filter((line) => line.type === LineType.stderr);\n const output = lines.filter((line) => line.text.length > 0).pop();\n\n return (\n <Box flexDirection=\"column\">\n <Header item={item} />\n {headings.length > 0 && <Lines lines={headings} />}\n {state === 'running' && output && <Output output={output} />}\n {errors.length > 0 && <Lines lines={errors} />}\n </Box>\n );\n}\n"],"names":["ChildProcess","spinner","interval","frames","ICONS","error","Text","color","figures","cross","success","tick","running","Spinner","Header","item","group","title","state","icon","Box","marginRight","bold","pointer","Output","output","marginLeft","arrowRight","text","Lines","lines","flexDirection","map","line","index","key","height","type","LineType","stderr","HEADINGS","filterHeadings","i","some","x","headings","push","length","id","store","useContext","StoreContext","appState","useStore","processes","find","expanded","errors","filter","pop"],"mappings":";;;;+BAuEA;;;eAAwBA;;;6DAvEU;uBACT;4DACA;mBACC;8DACN;8DACA;qBAGK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzB,oHAAoH;AACpH,IAAMC,UAAU;IACdC,UAAU;IACVC,QAAQ;QAAC;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;KAAI;AAC5D;AAEA,IAAMC,QAAQ;IACZC,qBAAO,6BAACC,SAAI;QAACC,OAAM;OAAOC,gBAAO,CAACC,KAAK;IACvCC,uBAAS,6BAACJ,SAAI;QAACC,OAAM;OAASC,gBAAO,CAACG,IAAI;IAC1CC,uBAAS,6BAACC,gBAAO,EAAKZ;AACxB;AAMA,SAASa,OAAO,KAAQ;QAAR,AAAEC,OAAF,MAAEA;IAChB,IAAQC,QAAwBD,KAAxBC,OAAOC,QAAiBF,KAAjBE,OAAOC,QAAUH,KAAVG;IACtB,IAAMC,OAAOf,KAAK,CAACc,MAAM;IAEzB,qBACE,6BAACE,QAAG,sBACF,6BAACA,QAAG;QAACC,aAAa;OAAIF,OACrBH,uBAAS,6BAACV,SAAI;QAACgB,MAAAA;OAAM,AAAC,GAAUd,OAARQ,OAAwB,OAAhBR,gBAAO,CAACe,OAAO,EAAC,qBACjD,6BAACjB,SAAI,QAAEW;AAGb;AAEA,SAASO,OAAO,KAAU;QAAV,AAAEC,SAAF,MAAEA;IAChB,qBACE,6BAACL,QAAG;QAACM,YAAY;qBACf,6BAACpB,SAAI;QAACC,OAAM;OAAQ,AAAC,GAAwBkB,OAAtBjB,gBAAO,CAACmB,UAAU,EAAC,KAAe,OAAZF,OAAOG,IAAI;AAG9D;AAEA,SAASC,MAAM,KAAS;QAAT,AAAEC,QAAF,MAAEA;IACf,qBACE,6BAACV,QAAG;QAACW,eAAc;QAASL,YAAY;OACrCI,MAAME,GAAG,CAAC,SAACC,MAAMC;eAChB,8DAA8D;sBAC9D,6BAACd,QAAG;YAACe,KAAKD;YAAOH,eAAc;YAASK,QAAQ;yBAC9C,6BAAC9B,SAAI;YAACC,OAAO0B,KAAKI,IAAI,KAAKC,eAAQ,CAACC,MAAM,GAAG,QAAQ;WAAUN,KAAKL,IAAI;;AAKlF;AAEA,IAAMY,WAAW;IAAChC,gBAAO,CAACG,IAAI;IAAEH,gBAAO,CAACC,KAAK;IAAER,QAAQE,MAAM,CAAC,EAAE;CAAC;AACjE,SAASsC,eAAeX,KAAK;;QAGzB,IAAMG,OAAOH,KAAK,CAACY,EAAE;QACrB,IAAI,CAACF,SAASG,IAAI,CAAC,SAACC;mBAAMX,IAAI,CAAC,EAAE,KAAKW;YAAI,OAAA;QAC1CC,SAASC,IAAI,CAACb;IAChB;IALA,IAAMY,WAAW,EAAE;IACnB,IAAK,IAAIH,IAAI,GAAGA,IAAIZ,MAAMiB,MAAM,EAAEL;;;;IAKlC,OAAOG;AACT;AAEe,SAAS7C,aAAa,KAAyB;QAAzB,AAAEgD,KAAF,MAAEA;IACrC,IAAMC,QAAQC,IAAAA,iBAAU,EAACC,cAAY;IACrC,IAAMC,WAAWC,IAAAA,iBAAQ,EAACJ;IAC1B,IAAMlC,OAAOqC,SAASE,SAAS,CAACC,IAAI,CAAC,SAACX;eAAMA,EAAEI,EAAE,KAAKA;;IACrD,IAAQ9B,QAA2BH,KAA3BG,OAAOY,QAAoBf,KAApBe,OAAO0B,WAAazC,KAAbyC;IAEtB,IAAIA,UAAU;QACZ,qBACE,6BAACpC,QAAG;YAACW,eAAc;yBACjB,6BAACjB;YAAOC,MAAMA;0BACd,6BAACc;YAAMC,OAAOA;;IAGpB;IACA,IAAMe,WAAWJ,eAAeX;IAChC,IAAM2B,SAAS3B,MAAM4B,MAAM,CAAC,SAACzB;eAASA,KAAKI,IAAI,KAAKC,eAAQ,CAACC,MAAM;;IACnE,IAAMd,SAASK,MAAM4B,MAAM,CAAC,SAACzB;eAASA,KAAKL,IAAI,CAACmB,MAAM,GAAG;OAAGY,GAAG;IAE/D,qBACE,6BAACvC,QAAG;QAACW,eAAc;qBACjB,6BAACjB;QAAOC,MAAMA;QACb8B,SAASE,MAAM,GAAG,mBAAK,6BAAClB;QAAMC,OAAOe;QACrC3B,UAAU,aAAaO,wBAAU,6BAACD;QAAOC,QAAQA;QACjDgC,OAAOV,MAAM,GAAG,mBAAK,6BAAClB;QAAMC,OAAO2B;;AAG1C"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/ChildProcess.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { useStore } from 'zustand';\nimport StoreContext from '../contexts/Store';\nimport { Box, Text } from '../ink.mjs';\nimport _ansiRegex from '../lib/ansiRegex';\nimport figures from '../lib/figures';\nimport Spinner from './Spinner';\n\nimport type { AppState } from '../types';\nimport { LineType } from '../types';\n\nconst ansiRegex = _ansiRegex();\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 ChildProcessProps = {\n id: string;\n};\n\nfunction Header({ item }) {\n const { group, title, state } = item;\n const icon = ICONS[state];\n\n return (\n <Box>\n <Box marginRight={1}>{icon}</Box>\n {group && <Text bold>{`${group}${figures.pointer} `}</Text>}\n <Text>{title}</Text>\n </Box>\n );\n}\n\nfunction Output({ output }) {\n return (\n <Box marginLeft={2}>\n <Text color=\"gray\">{output.text}</Text>\n </Box>\n );\n}\n\nfunction Lines({ lines }) {\n return (\n <Box flexDirection=\"column\" marginLeft={2}>\n {lines.map((line, index) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: <explanation>\n <Box key={index} flexDirection=\"column\" height={1}>\n <Text color={line.type === LineType.stderr ? 'red' : 'black'}>{line.text}</Text>\n </Box>\n ))}\n </Box>\n );\n}\n\nexport default function ChildProcess({ id }: ChildProcessProps) {\n const store = useContext(StoreContext);\n const appState = useStore(store) as AppState;\n const item = appState.processes.find((x) => x.id === id);\n const { state, lines, expanded } = item;\n\n if (expanded) {\n return (\n <Box flexDirection=\"column\">\n <Header item={item} />\n <Lines lines={lines} />\n </Box>\n );\n }\n // remove ansi codes when displaying single lines\n const cleaned = lines.map((x) => ({ type: x.type, text: x.text.replace(ansiRegex, '') }));\n const errors = cleaned.filter((line) => line.type === LineType.stderr);\n const output = cleaned.filter((line) => line.text.length > 0).pop();\n\n return (\n <Box flexDirection=\"column\">\n <Header item={item} />\n {state === 'running' && output && <Output output={output} />}\n {errors.length > 0 && <Lines lines={errors} />}\n </Box>\n );\n}\n"],"names":["ChildProcess","ansiRegex","_ansiRegex","spinner","interval","frames","ICONS","error","Text","color","figures","cross","success","tick","running","Spinner","Header","item","group","title","state","icon","Box","marginRight","bold","pointer","Output","output","marginLeft","text","Lines","lines","flexDirection","map","line","index","key","height","type","LineType","stderr","id","store","useContext","StoreContext","appState","useStore","processes","find","x","expanded","cleaned","replace","errors","filter","length","pop"],"mappings":"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"}
@@ -15,7 +15,6 @@ var _onone = /*#__PURE__*/ _interop_require_default(require("on-one"));
15
15
  var _queuecb = /*#__PURE__*/ _interop_require_default(require("queue-cb"));
16
16
  var _createApp = /*#__PURE__*/ _interop_require_default(require("./createApp.cjs"));
17
17
  var _addLines = /*#__PURE__*/ _interop_require_default(require("./lib/addLines.cjs"));
18
- var _ansiRegex = /*#__PURE__*/ _interop_require_default(require("./lib/ansiRegex.cjs"));
19
18
  var _concatWritable = /*#__PURE__*/ _interop_require_default(require("./lib/concatWritable.cjs"));
20
19
  var _formatArguments = /*#__PURE__*/ _interop_require_default(require("./lib/formatArguments.cjs"));
21
20
  var _types = require("./types.cjs");
@@ -144,7 +143,6 @@ function _object_without_properties_loose(source, excluded) {
144
143
  }
145
144
  return target;
146
145
  }
147
- var ansiRegex = (0, _ansiRegex.default)();
148
146
  var terminal = (0, _createApp.default)();
149
147
  function spawnTerminal(command, args, spawnOptions, options, callback) {
150
148
  var encoding = spawnOptions.encoding, stdio = spawnOptions.stdio, csOptions = _object_without_properties(spawnOptions, [
@@ -176,7 +174,7 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
176
174
  var lines = item.lines.concat(texts.map(function(text) {
177
175
  return {
178
176
  type: _types.LineType.stdout,
179
- text: text.replace(ansiRegex, '')
177
+ text: text
180
178
  };
181
179
  }));
182
180
  store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
@@ -198,7 +196,7 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
198
196
  var lines = item.lines.concat(texts.map(function(text) {
199
197
  return {
200
198
  type: _types.LineType.stderr,
201
- text: text.replace(ansiRegex, '')
199
+ text: text
202
200
  };
203
201
  }));
204
202
  store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
@@ -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';\nimport addLines from './lib/addLines';\nimport _ansiRegex from './lib/ansiRegex';\nimport concatWritable from './lib/concatWritable';\nimport formatArguments from './lib/formatArguments';\n\nimport type { SpawnOptions, TerminalOptions } from './types';\nimport { LineType } from './types';\n\nconst ansiRegex = _ansiRegex();\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((texts) => {\n const item = store.getState().processes.find((x) => x.id === id);\n const lines = item.lines.concat(texts.map((text) => ({ type: LineType.stdout, text: text.replace(ansiRegex, '') })));\n store.getState().updateProcess({ ...item, lines });\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((texts) => {\n const item = store.getState().processes.find((x) => x.id === id);\n const lines = item.lines.concat(texts.map((text) => ({ type: LineType.stderr, text: text.replace(ansiRegex, '') })));\n store.getState().updateProcess({ ...item, lines });\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","ansiRegex","_ansiRegex","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","texts","item","processes","find","x","map","text","type","LineType","replace","updateProcess","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';\nimport addLines from './lib/addLines';\nimport concatWritable from './lib/concatWritable';\nimport formatArguments from './lib/formatArguments';\n\nimport type { SpawnOptions, TerminalOptions } from './types';\nimport { LineType } from './types';\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((texts) => {\n const item = store.getState().processes.find((x) => x.id === id);\n const lines = item.lines.concat(texts.map((text) => ({ type: LineType.stdout, text })));\n store.getState().updateProcess({ ...item, lines });\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((texts) => {\n const item = store.getState().processes.find((x) => x.id === id);\n const lines = item.lines.concat(texts.map((text) => ({ type: LineType.stderr, text })));\n store.getState().updateProcess({ ...item, lines });\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","texts","item","processes","find","x","map","text","type","LineType","updateProcess","defer","oo","bind","pipe","spawn","worker","await","err","res","output","setTimeout","release","concatWritable","toString"],"mappings":"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"}
@@ -2,9 +2,11 @@ import React, { useContext } from 'react';
2
2
  import { useStore } from 'zustand';
3
3
  import StoreContext from '../contexts/Store.mjs';
4
4
  import { Box, Text } from '../ink.mjs';
5
+ import _ansiRegex from '../lib/ansiRegex.mjs';
5
6
  import figures from '../lib/figures.mjs';
6
7
  import Spinner from './Spinner.mjs';
7
8
  import { LineType } from '../types.mjs';
9
+ const ansiRegex = _ansiRegex();
8
10
  // From: https://github.com/sindresorhus/cli-spinners/blob/00de8fbeee16fa49502fa4f687449f70f2c8ca2c/spinners.json#L2
9
11
  const spinner = {
10
12
  interval: 80,
@@ -44,7 +46,7 @@ function Output({ output }) {
44
46
  marginLeft: 2
45
47
  }, /*#__PURE__*/ React.createElement(Text, {
46
48
  color: "gray"
47
- }, `${figures.arrowRight} ${output.text}`));
49
+ }, output.text));
48
50
  }
49
51
  function Lines({ lines }) {
50
52
  return /*#__PURE__*/ React.createElement(Box, {
@@ -59,20 +61,6 @@ function Lines({ lines }) {
59
61
  color: line.type === LineType.stderr ? 'red' : 'black'
60
62
  }, line.text))));
61
63
  }
62
- const HEADINGS = [
63
- figures.tick,
64
- figures.cross,
65
- spinner.frames[0]
66
- ];
67
- function filterHeadings(lines) {
68
- const headings = [];
69
- for(let i = 0; i < lines.length; i++){
70
- const line = lines[i];
71
- if (!HEADINGS.some((x)=>line[0] === x)) break;
72
- headings.push(line);
73
- }
74
- return headings;
75
- }
76
64
  export default function ChildProcess({ id }) {
77
65
  const store = useContext(StoreContext);
78
66
  const appState = useStore(store);
@@ -87,15 +75,17 @@ export default function ChildProcess({ id }) {
87
75
  lines: lines
88
76
  }));
89
77
  }
90
- const headings = filterHeadings(lines);
91
- const errors = lines.filter((line)=>line.type === LineType.stderr);
92
- const output = lines.filter((line)=>line.text.length > 0).pop();
78
+ // remove ansi codes when displaying single lines
79
+ const cleaned = lines.map((x)=>({
80
+ type: x.type,
81
+ text: x.text.replace(ansiRegex, '')
82
+ }));
83
+ const errors = cleaned.filter((line)=>line.type === LineType.stderr);
84
+ const output = cleaned.filter((line)=>line.text.length > 0).pop();
93
85
  return /*#__PURE__*/ React.createElement(Box, {
94
86
  flexDirection: "column"
95
87
  }, /*#__PURE__*/ React.createElement(Header, {
96
88
  item: item
97
- }), headings.length > 0 && /*#__PURE__*/ React.createElement(Lines, {
98
- lines: headings
99
89
  }), state === 'running' && output && /*#__PURE__*/ React.createElement(Output, {
100
90
  output: output
101
91
  }), errors.length > 0 && /*#__PURE__*/ React.createElement(Lines, {
@@ -1 +1 @@
1
- {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/ChildProcess.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { useStore } from 'zustand';\nimport StoreContext from '../contexts/Store';\nimport { Box, Text } from '../ink.mjs';\nimport figures from '../lib/figures';\nimport Spinner from './Spinner';\n\nimport type { AppState } from '../types';\nimport { LineType } from '../types';\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 ChildProcessProps = {\n id: string;\n};\n\nfunction Header({ item }) {\n const { group, title, state } = item;\n const icon = ICONS[state];\n\n return (\n <Box>\n <Box marginRight={1}>{icon}</Box>\n {group && <Text bold>{`${group}${figures.pointer} `}</Text>}\n <Text>{title}</Text>\n </Box>\n );\n}\n\nfunction Output({ output }) {\n return (\n <Box marginLeft={2}>\n <Text color=\"gray\">{`${figures.arrowRight} ${output.text}`}</Text>\n </Box>\n );\n}\n\nfunction Lines({ lines }) {\n return (\n <Box flexDirection=\"column\" marginLeft={2}>\n {lines.map((line, index) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: <explanation>\n <Box key={index} flexDirection=\"column\" height={1}>\n <Text color={line.type === LineType.stderr ? 'red' : 'black'}>{line.text}</Text>\n </Box>\n ))}\n </Box>\n );\n}\n\nconst HEADINGS = [figures.tick, figures.cross, spinner.frames[0]];\nfunction filterHeadings(lines) {\n const headings = [];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n if (!HEADINGS.some((x) => line[0] === x)) break;\n headings.push(line);\n }\n return headings;\n}\n\nexport default function ChildProcess({ id }: ChildProcessProps) {\n const store = useContext(StoreContext);\n const appState = useStore(store) as AppState;\n const item = appState.processes.find((x) => x.id === id);\n const { state, lines, expanded } = item;\n\n if (expanded) {\n return (\n <Box flexDirection=\"column\">\n <Header item={item} />\n <Lines lines={lines} />\n </Box>\n );\n }\n const headings = filterHeadings(lines);\n const errors = lines.filter((line) => line.type === LineType.stderr);\n const output = lines.filter((line) => line.text.length > 0).pop();\n\n return (\n <Box flexDirection=\"column\">\n <Header item={item} />\n {headings.length > 0 && <Lines lines={headings} />}\n {state === 'running' && output && <Output output={output} />}\n {errors.length > 0 && <Lines lines={errors} />}\n </Box>\n );\n}\n"],"names":["React","useContext","useStore","StoreContext","Box","Text","figures","Spinner","LineType","spinner","interval","frames","ICONS","error","color","cross","success","tick","running","Header","item","group","title","state","icon","marginRight","bold","pointer","Output","output","marginLeft","arrowRight","text","Lines","lines","flexDirection","map","line","index","key","height","type","stderr","HEADINGS","filterHeadings","headings","i","length","some","x","push","ChildProcess","id","store","appState","processes","find","expanded","errors","filter","pop"],"mappings":"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"}
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/ChildProcess.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { useStore } from 'zustand';\nimport StoreContext from '../contexts/Store';\nimport { Box, Text } from '../ink.mjs';\nimport _ansiRegex from '../lib/ansiRegex';\nimport figures from '../lib/figures';\nimport Spinner from './Spinner';\n\nimport type { AppState } from '../types';\nimport { LineType } from '../types';\n\nconst ansiRegex = _ansiRegex();\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 ChildProcessProps = {\n id: string;\n};\n\nfunction Header({ item }) {\n const { group, title, state } = item;\n const icon = ICONS[state];\n\n return (\n <Box>\n <Box marginRight={1}>{icon}</Box>\n {group && <Text bold>{`${group}${figures.pointer} `}</Text>}\n <Text>{title}</Text>\n </Box>\n );\n}\n\nfunction Output({ output }) {\n return (\n <Box marginLeft={2}>\n <Text color=\"gray\">{output.text}</Text>\n </Box>\n );\n}\n\nfunction Lines({ lines }) {\n return (\n <Box flexDirection=\"column\" marginLeft={2}>\n {lines.map((line, index) => (\n // biome-ignore lint/suspicious/noArrayIndexKey: <explanation>\n <Box key={index} flexDirection=\"column\" height={1}>\n <Text color={line.type === LineType.stderr ? 'red' : 'black'}>{line.text}</Text>\n </Box>\n ))}\n </Box>\n );\n}\n\nexport default function ChildProcess({ id }: ChildProcessProps) {\n const store = useContext(StoreContext);\n const appState = useStore(store) as AppState;\n const item = appState.processes.find((x) => x.id === id);\n const { state, lines, expanded } = item;\n\n if (expanded) {\n return (\n <Box flexDirection=\"column\">\n <Header item={item} />\n <Lines lines={lines} />\n </Box>\n );\n }\n // remove ansi codes when displaying single lines\n const cleaned = lines.map((x) => ({ type: x.type, text: x.text.replace(ansiRegex, '') }));\n const errors = cleaned.filter((line) => line.type === LineType.stderr);\n const output = cleaned.filter((line) => line.text.length > 0).pop();\n\n return (\n <Box flexDirection=\"column\">\n <Header item={item} />\n {state === 'running' && output && <Output output={output} />}\n {errors.length > 0 && <Lines lines={errors} />}\n </Box>\n );\n}\n"],"names":["React","useContext","useStore","StoreContext","Box","Text","_ansiRegex","figures","Spinner","LineType","ansiRegex","spinner","interval","frames","ICONS","error","color","cross","success","tick","running","Header","item","group","title","state","icon","marginRight","bold","pointer","Output","output","marginLeft","text","Lines","lines","flexDirection","map","line","index","key","height","type","stderr","ChildProcess","id","store","appState","processes","find","x","expanded","cleaned","replace","errors","filter","length","pop"],"mappings":"AAAA,OAAOA,SAASC,UAAU,QAAQ,QAAQ;AAC1C,SAASC,QAAQ,QAAQ,UAAU;AACnC,OAAOC,kBAAkB,oBAAoB;AAC7C,SAASC,GAAG,EAAEC,IAAI,QAAQ,aAAa;AACvC,OAAOC,gBAAgB,mBAAmB;AAC1C,OAAOC,aAAa,iBAAiB;AACrC,OAAOC,aAAa,YAAY;AAGhC,SAASC,QAAQ,QAAQ,WAAW;AAEpC,MAAMC,YAAYJ;AAElB,oHAAoH;AACpH,MAAMK,UAAU;IACdC,UAAU;IACVC,QAAQ;QAAC;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;KAAI;AAC5D;AAEA,MAAMC,QAAQ;IACZC,qBAAO,oBAACV;QAAKW,OAAM;OAAOT,QAAQU,KAAK;IACvCC,uBAAS,oBAACb;QAAKW,OAAM;OAAST,QAAQY,IAAI;IAC1CC,uBAAS,oBAACZ,SAAYG;AACxB;AAMA,SAASU,OAAO,EAAEC,IAAI,EAAE;IACtB,MAAM,EAAEC,KAAK,EAAEC,KAAK,EAAEC,KAAK,EAAE,GAAGH;IAChC,MAAMI,OAAOZ,KAAK,CAACW,MAAM;IAEzB,qBACE,oBAACrB,yBACC,oBAACA;QAAIuB,aAAa;OAAID,OACrBH,uBAAS,oBAAClB;QAAKuB,MAAAA;OAAM,GAAGL,QAAQhB,QAAQsB,OAAO,CAAC,CAAC,CAAC,iBACnD,oBAACxB,YAAMmB;AAGb;AAEA,SAASM,OAAO,EAAEC,MAAM,EAAE;IACxB,qBACE,oBAAC3B;QAAI4B,YAAY;qBACf,oBAAC3B;QAAKW,OAAM;OAAQe,OAAOE,IAAI;AAGrC;AAEA,SAASC,MAAM,EAAEC,KAAK,EAAE;IACtB,qBACE,oBAAC/B;QAAIgC,eAAc;QAASJ,YAAY;OACrCG,MAAME,GAAG,CAAC,CAACC,MAAMC,QAChB,8DAA8D;sBAC9D,oBAACnC;YAAIoC,KAAKD;YAAOH,eAAc;YAASK,QAAQ;yBAC9C,oBAACpC;YAAKW,OAAOsB,KAAKI,IAAI,KAAKjC,SAASkC,MAAM,GAAG,QAAQ;WAAUL,KAAKL,IAAI;AAKlF;AAEA,eAAe,SAASW,aAAa,EAAEC,EAAE,EAAqB;IAC5D,MAAMC,QAAQ7C,WAAWE;IACzB,MAAM4C,WAAW7C,SAAS4C;IAC1B,MAAMxB,OAAOyB,SAASC,SAAS,CAACC,IAAI,CAAC,CAACC,IAAMA,EAAEL,EAAE,KAAKA;IACrD,MAAM,EAAEpB,KAAK,EAAEU,KAAK,EAAEgB,QAAQ,EAAE,GAAG7B;IAEnC,IAAI6B,UAAU;QACZ,qBACE,oBAAC/C;YAAIgC,eAAc;yBACjB,oBAACf;YAAOC,MAAMA;0BACd,oBAACY;YAAMC,OAAOA;;IAGpB;IACA,iDAAiD;IACjD,MAAMiB,UAAUjB,MAAME,GAAG,CAAC,CAACa,IAAO,CAAA;YAAER,MAAMQ,EAAER,IAAI;YAAET,MAAMiB,EAAEjB,IAAI,CAACoB,OAAO,CAAC3C,WAAW;QAAI,CAAA;IACtF,MAAM4C,SAASF,QAAQG,MAAM,CAAC,CAACjB,OAASA,KAAKI,IAAI,KAAKjC,SAASkC,MAAM;IACrE,MAAMZ,SAASqB,QAAQG,MAAM,CAAC,CAACjB,OAASA,KAAKL,IAAI,CAACuB,MAAM,GAAG,GAAGC,GAAG;IAEjE,qBACE,oBAACrD;QAAIgC,eAAc;qBACjB,oBAACf;QAAOC,MAAMA;QACbG,UAAU,aAAaM,wBAAU,oBAACD;QAAOC,QAAQA;QACjDuB,OAAOE,MAAM,GAAG,mBAAK,oBAACtB;QAAMC,OAAOmB;;AAG1C"}
@@ -84,11 +84,9 @@ import oo from 'on-one';
84
84
  import Queue from 'queue-cb';
85
85
  import createApp from './createApp.mjs';
86
86
  import addLines from './lib/addLines.mjs';
87
- import _ansiRegex from './lib/ansiRegex.mjs';
88
87
  import concatWritable from './lib/concatWritable.mjs';
89
88
  import formatArguments from './lib/formatArguments.mjs';
90
89
  import { LineType } from './types.mjs';
91
- const ansiRegex = _ansiRegex();
92
90
  const terminal = createApp();
93
91
  export default function spawnTerminal(command, args, spawnOptions, options, callback) {
94
92
  const { encoding, stdio } = spawnOptions, csOptions = _object_without_properties(spawnOptions, [
@@ -117,7 +115,7 @@ export default function spawnTerminal(command, args, spawnOptions, options, call
117
115
  const item = store.getState().processes.find((x)=>x.id === id);
118
116
  const lines = item.lines.concat(texts.map((text)=>({
119
117
  type: LineType.stdout,
120
- text: text.replace(ansiRegex, '')
118
+ text
121
119
  })));
122
120
  store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
123
121
  lines
@@ -135,7 +133,7 @@ export default function spawnTerminal(command, args, spawnOptions, options, call
135
133
  const item = store.getState().processes.find((x)=>x.id === id);
136
134
  const lines = item.lines.concat(texts.map((text)=>({
137
135
  type: LineType.stderr,
138
- text: text.replace(ansiRegex, '')
136
+ text
139
137
  })));
140
138
  store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
141
139
  lines
@@ -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';\nimport addLines from './lib/addLines';\nimport _ansiRegex from './lib/ansiRegex';\nimport concatWritable from './lib/concatWritable';\nimport formatArguments from './lib/formatArguments';\n\nimport type { SpawnOptions, TerminalOptions } from './types';\nimport { LineType } from './types';\n\nconst ansiRegex = _ansiRegex();\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((texts) => {\n const item = store.getState().processes.find((x) => x.id === id);\n const lines = item.lines.concat(texts.map((text) => ({ type: LineType.stdout, text: text.replace(ansiRegex, '') })));\n store.getState().updateProcess({ ...item, lines });\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((texts) => {\n const item = store.getState().processes.find((x) => x.id === id);\n const lines = item.lines.concat(texts.map((text) => ({ type: LineType.stderr, text: text.replace(ansiRegex, '') })));\n store.getState().updateProcess({ ...item, lines });\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","_ansiRegex","concatWritable","formatArguments","LineType","ansiRegex","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","texts","item","processes","find","x","map","text","type","replace","updateProcess","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';\nimport addLines from './lib/addLines';\nimport concatWritable from './lib/concatWritable';\nimport formatArguments from './lib/formatArguments';\n\nimport type { SpawnOptions, TerminalOptions } from './types';\nimport { LineType } from './types';\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((texts) => {\n const item = store.getState().processes.find((x) => x.id === id);\n const lines = item.lines.concat(texts.map((text) => ({ type: LineType.stdout, text })));\n store.getState().updateProcess({ ...item, lines });\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((texts) => {\n const item = store.getState().processes.find((x) => x.id === id);\n const lines = item.lines.concat(texts.map((text) => ({ type: LineType.stderr, text })));\n store.getState().updateProcess({ ...item, lines });\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","texts","item","processes","find","x","map","text","type","updateProcess","defer","bind","pipe","worker","await","err","res","output","setTimeout","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.1.22",
3
+ "version": "0.1.24",
4
4
  "description": "Formats spawn with for terminal grouping",
5
5
  "keywords": [
6
6
  "spawn",