spawn-term 0.1.20 → 0.1.22

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.
@@ -120,6 +120,26 @@ function Lines(param) {
120
120
  }, line.text)));
121
121
  }));
122
122
  }
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
+ }
123
143
  function ChildProcess(param) {
124
144
  var id = param.id;
125
145
  var store = (0, _react.useContext)(_Store.default);
@@ -137,6 +157,7 @@ function ChildProcess(param) {
137
157
  lines: lines
138
158
  }));
139
159
  }
160
+ var headings = filterHeadings(lines);
140
161
  var errors = lines.filter(function(line) {
141
162
  return line.type === _types.LineType.stderr;
142
163
  });
@@ -147,6 +168,8 @@ function ChildProcess(param) {
147
168
  flexDirection: "column"
148
169
  }, /*#__PURE__*/ _react.default.createElement(Header, {
149
170
  item: item
171
+ }), headings.length > 0 && /*#__PURE__*/ _react.default.createElement(Lines, {
172
+ lines: headings
150
173
  }), state === 'running' && output && /*#__PURE__*/ _react.default.createElement(Output, {
151
174
  output: output
152
175
  }), 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\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 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 {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","id","store","useContext","StoreContext","appState","useStore","processes","find","x","expanded","errors","filter","length","pop"],"mappings":";;;;+BA4DA;;;eAAwBA;;;6DA5DU;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;AAEe,SAAS5B,aAAa,KAAyB;QAAzB,AAAEwC,KAAF,MAAEA;IACrC,IAAMC,QAAQC,IAAAA,iBAAU,EAACC,cAAY;IACrC,IAAMC,WAAWC,IAAAA,iBAAQ,EAACJ;IAC1B,IAAM1B,OAAO6B,SAASE,SAAS,CAACC,IAAI,CAAC,SAACC;eAAMA,EAAER,EAAE,KAAKA;;IACrD,IAAQtB,QAA2BH,KAA3BG,OAAOY,QAAoBf,KAApBe,OAAOmB,WAAalC,KAAbkC;IAEtB,IAAIA,UAAU;QACZ,qBACE,6BAAC7B,QAAG;YAACW,eAAc;yBACjB,6BAACjB;YAAOC,MAAMA;0BACd,6BAACc;YAAMC,OAAOA;;IAGpB;IACA,IAAMoB,SAASpB,MAAMqB,MAAM,CAAC,SAAClB;eAASA,KAAKI,IAAI,KAAKC,eAAQ,CAACC,MAAM;;IACnE,IAAMd,SAASK,MAAMqB,MAAM,CAAC,SAAClB;eAASA,KAAKL,IAAI,CAACwB,MAAM,GAAG;OAAGC,GAAG;IAE/D,qBACE,6BAACjC,QAAG;QAACW,eAAc;qBACjB,6BAACjB;QAAOC,MAAMA;QACbG,UAAU,aAAaO,wBAAU,6BAACD;QAAOC,QAAQA;QACjDyB,OAAOE,MAAM,GAAG,mBAAK,6BAACvB;QAAMC,OAAOoB;;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 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":"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"}
@@ -0,0 +1,22 @@
1
+ // https://github.com/chalk/ansi-regex/blob/main/index.js
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ Object.defineProperty(exports, "default", {
7
+ enumerable: true,
8
+ get: function() {
9
+ return ansiRegex;
10
+ }
11
+ });
12
+ function ansiRegex() {
13
+ var _ref = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {}, _ref_onlyFirst = _ref.onlyFirst, onlyFirst = _ref_onlyFirst === void 0 ? false : _ref_onlyFirst;
14
+ // Valid string terminator sequences are BEL, ESC\, and 0x9c
15
+ var ST = '(?:\\u0007|\\u001B\\u005C|\\u009C)';
16
+ var pattern = [
17
+ "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?".concat(ST, ")"),
18
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))'
19
+ ].join('|');
20
+ return new RegExp(pattern, onlyFirst ? undefined : 'g');
21
+ }
22
+ /* 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/lib/ansiRegex.ts"],"sourcesContent":["// https://github.com/chalk/ansi-regex/blob/main/index.js\nexport default function ansiRegex({ onlyFirst = false } = {}) {\n // Valid string terminator sequences are BEL, ESC\\, and 0x9c\n const ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n const pattern = [`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`, '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))'].join('|');\n\n return new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n"],"names":["ansiRegex","onlyFirst","ST","pattern","join","RegExp","undefined"],"mappings":"AAAA,yDAAyD;;;;;+BACzD;;;eAAwBA;;;AAAT,SAASA;QAAU,OAAA,iEAAwB,CAAC,oBAAzB,KAAEC,WAAAA,wCAAY;IAC9C,4DAA4D;IAC5D,IAAMC,KAAK;IACX,IAAMC,UAAU;QAAE,uHAAyH,OAAHD,IAAG;QAAI;KAA2D,CAACE,IAAI,CAAC;IAEhN,OAAO,IAAIC,OAAOF,SAASF,YAAYK,YAAY;AACrD"}
@@ -15,6 +15,7 @@ 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"));
18
19
  var _concatWritable = /*#__PURE__*/ _interop_require_default(require("./lib/concatWritable.cjs"));
19
20
  var _formatArguments = /*#__PURE__*/ _interop_require_default(require("./lib/formatArguments.cjs"));
20
21
  var _types = require("./types.cjs");
@@ -143,6 +144,7 @@ function _object_without_properties_loose(source, excluded) {
143
144
  }
144
145
  return target;
145
146
  }
147
+ var ansiRegex = (0, _ansiRegex.default)();
146
148
  var terminal = (0, _createApp.default)();
147
149
  function spawnTerminal(command, args, spawnOptions, options, callback) {
148
150
  var encoding = spawnOptions.encoding, stdio = spawnOptions.stdio, csOptions = _object_without_properties(spawnOptions, [
@@ -174,7 +176,7 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
174
176
  var lines = item.lines.concat(texts.map(function(text) {
175
177
  return {
176
178
  type: _types.LineType.stdout,
177
- text: text
179
+ text: text.replace(ansiRegex, '')
178
180
  };
179
181
  }));
180
182
  store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
@@ -196,7 +198,7 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
196
198
  var lines = item.lines.concat(texts.map(function(text) {
197
199
  return {
198
200
  type: _types.LineType.stderr,
199
- text: text
201
+ text: text.replace(ansiRegex, '')
200
202
  };
201
203
  }));
202
204
  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 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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"}
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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"}
@@ -59,6 +59,20 @@ function Lines({ lines }) {
59
59
  color: line.type === LineType.stderr ? 'red' : 'black'
60
60
  }, line.text))));
61
61
  }
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
+ }
62
76
  export default function ChildProcess({ id }) {
63
77
  const store = useContext(StoreContext);
64
78
  const appState = useStore(store);
@@ -73,12 +87,15 @@ export default function ChildProcess({ id }) {
73
87
  lines: lines
74
88
  }));
75
89
  }
90
+ const headings = filterHeadings(lines);
76
91
  const errors = lines.filter((line)=>line.type === LineType.stderr);
77
92
  const output = lines.filter((line)=>line.text.length > 0).pop();
78
93
  return /*#__PURE__*/ React.createElement(Box, {
79
94
  flexDirection: "column"
80
95
  }, /*#__PURE__*/ React.createElement(Header, {
81
96
  item: item
97
+ }), headings.length > 0 && /*#__PURE__*/ React.createElement(Lines, {
98
+ lines: headings
82
99
  }), state === 'running' && output && /*#__PURE__*/ React.createElement(Output, {
83
100
  output: output
84
101
  }), 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\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 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 {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","ChildProcess","id","store","appState","processes","find","x","expanded","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,aAAa,iBAAiB;AACrC,OAAOC,aAAa,YAAY;AAGhC,SAASC,QAAQ,QAAQ,WAAW;AAEpC,oHAAoH;AACpH,MAAMC,UAAU;IACdC,UAAU;IACVC,QAAQ;QAAC;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;QAAK;KAAI;AAC5D;AAEA,MAAMC,QAAQ;IACZC,qBAAO,oBAACR;QAAKS,OAAM;OAAOR,QAAQS,KAAK;IACvCC,uBAAS,oBAACX;QAAKS,OAAM;OAASR,QAAQW,IAAI;IAC1CC,uBAAS,oBAACX,SAAYE;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,oBAACnB,yBACC,oBAACA;QAAIqB,aAAa;OAAID,OACrBH,uBAAS,oBAAChB;QAAKqB,MAAAA;OAAM,GAAGL,QAAQf,QAAQqB,OAAO,CAAC,CAAC,CAAC,iBACnD,oBAACtB,YAAMiB;AAGb;AAEA,SAASM,OAAO,EAAEC,MAAM,EAAE;IACxB,qBACE,oBAACzB;QAAI0B,YAAY;qBACf,oBAACzB;QAAKS,OAAM;OAAQ,GAAGR,QAAQyB,UAAU,CAAC,CAAC,EAAEF,OAAOG,IAAI,EAAE;AAGhE;AAEA,SAASC,MAAM,EAAEC,KAAK,EAAE;IACtB,qBACE,oBAAC9B;QAAI+B,eAAc;QAASL,YAAY;OACrCI,MAAME,GAAG,CAAC,CAACC,MAAMC,QAChB,8DAA8D;sBAC9D,oBAAClC;YAAImC,KAAKD;YAAOH,eAAc;YAASK,QAAQ;yBAC9C,oBAACnC;YAAKS,OAAOuB,KAAKI,IAAI,KAAKjC,SAASkC,MAAM,GAAG,QAAQ;WAAUL,KAAKL,IAAI;AAKlF;AAEA,eAAe,SAASW,aAAa,EAAEC,EAAE,EAAqB;IAC5D,MAAMC,QAAQ5C,WAAWE;IACzB,MAAM2C,WAAW5C,SAAS2C;IAC1B,MAAMzB,OAAO0B,SAASC,SAAS,CAACC,IAAI,CAAC,CAACC,IAAMA,EAAEL,EAAE,KAAKA;IACrD,MAAM,EAAErB,KAAK,EAAEW,KAAK,EAAEgB,QAAQ,EAAE,GAAG9B;IAEnC,IAAI8B,UAAU;QACZ,qBACE,oBAAC9C;YAAI+B,eAAc;yBACjB,oBAAChB;YAAOC,MAAMA;0BACd,oBAACa;YAAMC,OAAOA;;IAGpB;IACA,MAAMiB,SAASjB,MAAMkB,MAAM,CAAC,CAACf,OAASA,KAAKI,IAAI,KAAKjC,SAASkC,MAAM;IACnE,MAAMb,SAASK,MAAMkB,MAAM,CAAC,CAACf,OAASA,KAAKL,IAAI,CAACqB,MAAM,GAAG,GAAGC,GAAG;IAE/D,qBACE,oBAAClD;QAAI+B,eAAc;qBACjB,oBAAChB;QAAOC,MAAMA;QACbG,UAAU,aAAaM,wBAAU,oBAACD;QAAOC,QAAQA;QACjDsB,OAAOE,MAAM,GAAG,mBAAK,oBAACpB;QAAMC,OAAOiB;;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 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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"}
@@ -0,0 +1,10 @@
1
+ // https://github.com/chalk/ansi-regex/blob/main/index.js
2
+ export default function ansiRegex({ onlyFirst = false } = {}) {
3
+ // Valid string terminator sequences are BEL, ESC\, and 0x9c
4
+ const ST = '(?:\\u0007|\\u001B\\u005C|\\u009C)';
5
+ const pattern = [
6
+ `[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?${ST})`,
7
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))'
8
+ ].join('|');
9
+ return new RegExp(pattern, onlyFirst ? undefined : 'g');
10
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/ansiRegex.ts"],"sourcesContent":["// https://github.com/chalk/ansi-regex/blob/main/index.js\nexport default function ansiRegex({ onlyFirst = false } = {}) {\n // Valid string terminator sequences are BEL, ESC\\, and 0x9c\n const ST = '(?:\\\\u0007|\\\\u001B\\\\u005C|\\\\u009C)';\n const pattern = [`[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?${ST})`, '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-nq-uy=><~]))'].join('|');\n\n return new RegExp(pattern, onlyFirst ? undefined : 'g');\n}\n"],"names":["ansiRegex","onlyFirst","ST","pattern","join","RegExp","undefined"],"mappings":"AAAA,yDAAyD;AACzD,eAAe,SAASA,UAAU,EAAEC,YAAY,KAAK,EAAE,GAAG,CAAC,CAAC;IAC1D,4DAA4D;IAC5D,MAAMC,KAAK;IACX,MAAMC,UAAU;QAAC,CAAC,oHAAoH,EAAED,GAAG,CAAC,CAAC;QAAE;KAA2D,CAACE,IAAI,CAAC;IAEhN,OAAO,IAAIC,OAAOF,SAASF,YAAYK,YAAY;AACrD"}
@@ -84,9 +84,11 @@ 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';
87
88
  import concatWritable from './lib/concatWritable.mjs';
88
89
  import formatArguments from './lib/formatArguments.mjs';
89
90
  import { LineType } from './types.mjs';
91
+ const ansiRegex = _ansiRegex();
90
92
  const terminal = createApp();
91
93
  export default function spawnTerminal(command, args, spawnOptions, options, callback) {
92
94
  const { encoding, stdio } = spawnOptions, csOptions = _object_without_properties(spawnOptions, [
@@ -115,7 +117,7 @@ export default function spawnTerminal(command, args, spawnOptions, options, call
115
117
  const item = store.getState().processes.find((x)=>x.id === id);
116
118
  const lines = item.lines.concat(texts.map((text)=>({
117
119
  type: LineType.stdout,
118
- text
120
+ text: text.replace(ansiRegex, '')
119
121
  })));
120
122
  store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
121
123
  lines
@@ -133,7 +135,7 @@ export default function spawnTerminal(command, args, spawnOptions, options, call
133
135
  const item = store.getState().processes.find((x)=>x.id === id);
134
136
  const lines = item.lines.concat(texts.map((text)=>({
135
137
  type: LineType.stderr,
136
- text
138
+ text: text.replace(ansiRegex, '')
137
139
  })));
138
140
  store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
139
141
  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 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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"}
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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"}
@@ -0,0 +1,3 @@
1
+ export default function ansiRegex({ onlyFirst }?: {
2
+ onlyFirst?: boolean;
3
+ }): RegExp;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "spawn-term",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
4
4
  "description": "Formats spawn with for terminal grouping",
5
5
  "keywords": [
6
6
  "spawn",