spawn-term 0.1.32 → 0.1.34
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.
- package/dist/cjs/components/ChildProcess.cjs +36 -23
- package/dist/cjs/components/ChildProcess.cjs.map +1 -1
- package/dist/cjs/lib/addData.cjs +3 -0
- package/dist/cjs/lib/addData.cjs.map +1 -1
- package/dist/cjs/worker.cjs +2 -2
- package/dist/cjs/worker.cjs.map +1 -1
- package/dist/esm/components/ChildProcess.mjs +30 -19
- package/dist/esm/components/ChildProcess.mjs.map +1 -1
- package/dist/esm/lib/addData.mjs +1 -0
- package/dist/esm/lib/addData.mjs.map +1 -1
- package/dist/esm/worker.mjs +2 -2
- package/dist/esm/worker.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
var _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
12
12
|
var _ink = require("../ink.cjs");
|
|
13
|
+
var _ansiRegex = /*#__PURE__*/ _interop_require_default(require("../lib/ansiRegex.cjs"));
|
|
13
14
|
var _figures = /*#__PURE__*/ _interop_require_default(require("../lib/figures.cjs"));
|
|
14
15
|
var _Spinner = /*#__PURE__*/ _interop_require_default(require("./Spinner.cjs"));
|
|
15
16
|
var _types = require("../types.cjs");
|
|
@@ -59,7 +60,12 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
59
60
|
}
|
|
60
61
|
return newObj;
|
|
61
62
|
}
|
|
62
|
-
var
|
|
63
|
+
var REGEX_NEW_LINE = /\r\n|[\n\v\f\r\x85\u2028\u2029]/g;
|
|
64
|
+
var REGEX_ANSI = (0, _ansiRegex.default)();
|
|
65
|
+
var DEFAULT_SUMMARY = {
|
|
66
|
+
type: _types.DataType.stdout,
|
|
67
|
+
text: ''
|
|
68
|
+
};
|
|
63
69
|
// From: https://github.com/sindresorhus/cli-spinners/blob/00de8fbeee16fa49502fa4f687449f70f2c8ca2c/spinners.json#L2
|
|
64
70
|
var spinner = {
|
|
65
71
|
interval: 80,
|
|
@@ -96,13 +102,13 @@ var Header = /*#__PURE__*/ (0, _react.memo)(function Header(param) {
|
|
|
96
102
|
}, function(a, b) {
|
|
97
103
|
return a.group === b.group && a.title === b.title && a.state === b.state;
|
|
98
104
|
});
|
|
99
|
-
var
|
|
100
|
-
var
|
|
105
|
+
var RunningSummary = /*#__PURE__*/ (0, _react.memo)(function RunningSummary(param) {
|
|
106
|
+
var line = param.line;
|
|
101
107
|
return /*#__PURE__*/ _react.default.createElement(_ink.Box, {
|
|
102
108
|
marginLeft: 2
|
|
103
109
|
}, /*#__PURE__*/ _react.default.createElement(_ink.Text, {
|
|
104
110
|
color: "gray"
|
|
105
|
-
},
|
|
111
|
+
}, line.text.replace(REGEX_ANSI, '')));
|
|
106
112
|
});
|
|
107
113
|
var Lines = /*#__PURE__*/ (0, _react.memo)(function Lines(param) {
|
|
108
114
|
var lines = param.lines;
|
|
@@ -117,9 +123,29 @@ var Lines = /*#__PURE__*/ (0, _react.memo)(function Lines(param) {
|
|
|
117
123
|
}, /*#__PURE__*/ _react.default.createElement("ink-text", null, line.text)));
|
|
118
124
|
}));
|
|
119
125
|
});
|
|
126
|
+
var useLines = function(data) {
|
|
127
|
+
return (0, _react.useMemo)(function() {
|
|
128
|
+
var finished = data.length > 0 ? data[data.length - 1].text === null : false;
|
|
129
|
+
if (finished) data.pop(); // null at end means done
|
|
130
|
+
var lines = [];
|
|
131
|
+
data.forEach(function(x) {
|
|
132
|
+
x.text.split(REGEX_NEW_LINE).forEach(function(text) {
|
|
133
|
+
return lines.push({
|
|
134
|
+
type: x.type,
|
|
135
|
+
text: text
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
if (!finished) lines.pop(); // remove partial lines
|
|
140
|
+
return lines;
|
|
141
|
+
}, [
|
|
142
|
+
data
|
|
143
|
+
]);
|
|
144
|
+
};
|
|
120
145
|
var Expanded = /*#__PURE__*/ (0, _react.memo)(function Expanded(param) {
|
|
121
146
|
var item = param.item;
|
|
122
147
|
var data = item.data;
|
|
148
|
+
var lines = useLines(data);
|
|
123
149
|
return /*#__PURE__*/ _react.default.createElement(_ink.Box, {
|
|
124
150
|
flexDirection: "column"
|
|
125
151
|
}, /*#__PURE__*/ _react.default.createElement(Header, {
|
|
@@ -127,26 +153,13 @@ var Expanded = /*#__PURE__*/ (0, _react.memo)(function Expanded(param) {
|
|
|
127
153
|
title: item.title,
|
|
128
154
|
state: item.state
|
|
129
155
|
}), /*#__PURE__*/ _react.default.createElement(Lines, {
|
|
130
|
-
lines:
|
|
156
|
+
lines: lines
|
|
131
157
|
}));
|
|
132
158
|
});
|
|
133
159
|
var Contracted = /*#__PURE__*/ (0, _react.memo)(function Contracted(param) {
|
|
134
160
|
var item = param.item;
|
|
135
161
|
var state = item.state, data = item.data;
|
|
136
|
-
var lines = (
|
|
137
|
-
var lines = [];
|
|
138
|
-
data.forEach(function(x) {
|
|
139
|
-
x.text.split(NEW_LINE_REGEX).forEach(function(text) {
|
|
140
|
-
return lines.push({
|
|
141
|
-
type: x.type,
|
|
142
|
-
text: text
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
return lines;
|
|
147
|
-
}, [
|
|
148
|
-
data
|
|
149
|
-
]);
|
|
162
|
+
var lines = useLines(data);
|
|
150
163
|
// remove ansi codes when displaying single lines
|
|
151
164
|
var errors = (0, _react.useMemo)(function() {
|
|
152
165
|
return lines.filter(function(line) {
|
|
@@ -155,10 +168,10 @@ var Contracted = /*#__PURE__*/ (0, _react.memo)(function Contracted(param) {
|
|
|
155
168
|
}, [
|
|
156
169
|
lines
|
|
157
170
|
]);
|
|
158
|
-
var
|
|
171
|
+
var summary = (0, _react.useMemo)(function() {
|
|
159
172
|
return lines.filter(function(line) {
|
|
160
173
|
return line.text.length > 0 && errors.indexOf(line) < 0;
|
|
161
|
-
}).pop() ||
|
|
174
|
+
}).pop() || DEFAULT_SUMMARY;
|
|
162
175
|
}, [
|
|
163
176
|
lines,
|
|
164
177
|
errors
|
|
@@ -169,8 +182,8 @@ var Contracted = /*#__PURE__*/ (0, _react.memo)(function Contracted(param) {
|
|
|
169
182
|
group: item.group,
|
|
170
183
|
title: item.title,
|
|
171
184
|
state: item.state
|
|
172
|
-
}), state === 'running' && /*#__PURE__*/ _react.default.createElement(
|
|
173
|
-
|
|
185
|
+
}), state === 'running' && /*#__PURE__*/ _react.default.createElement(RunningSummary, {
|
|
186
|
+
line: summary
|
|
174
187
|
}), errors.length > 0 && /*#__PURE__*/ _react.default.createElement(Lines, {
|
|
175
188
|
lines: errors
|
|
176
189
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/ChildProcess.tsx"],"sourcesContent":["import React, { memo, useMemo } from 'react';\nimport { Box, Text } from '../ink.mjs';\nimport figures from '../lib/figures';\nimport Spinner from './Spinner';\n\nimport type { ChildProcess as ChildProcessT, Data, State } from '../types';\nimport { DataType } from '../types';\n\nconst
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/ChildProcess.tsx"],"sourcesContent":["import React, { memo, useMemo } from 'react';\nimport { Box, Text } from '../ink.mjs';\nimport ansiRegex from '../lib/ansiRegex';\nimport figures from '../lib/figures';\nimport Spinner from './Spinner';\n\nimport type { ChildProcess as ChildProcessT, Data, State } from '../types';\nimport { DataType } from '../types';\n\nconst REGEX_NEW_LINE = /\\r\\n|[\\n\\v\\f\\r\\x85\\u2028\\u2029]/g;\nconst REGEX_ANSI = ansiRegex();\nconst DEFAULT_SUMMARY = { type: DataType.stdout, text: '' };\n\ntype ItemProps = {\n item: ChildProcessT;\n};\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 <Box marginRight={1}>{icon}</Box>\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: Data;\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: Data[];\n};\n\nconst Lines = memo(function Lines({ lines }: LinesProps) {\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\">\n {/* @ts-ignore */}\n <ink-text>{line.text}</ink-text>\n </Box>\n ))}\n </Box>\n );\n});\n\nconst useLines = (data: Data[]) =>\n useMemo(() => {\n const finished = data.length > 0 ? data[data.length - 1].text === null : false;\n if (finished) data.pop(); // null at end means done\n const lines = [];\n data.forEach((x) => {\n x.text.split(REGEX_NEW_LINE).forEach((text) => lines.push({ type: x.type, text }));\n });\n if (!finished) lines.pop(); // remove partial lines\n return lines;\n }, [data]) as Data[];\n\nconst Expanded = memo(function Expanded({ item }: ItemProps) {\n const { data } = item;\n const lines = useLines(data);\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, data } = item;\n const lines = useLines(data);\n\n // remove ansi codes when displaying single lines\n const errors = useMemo(() => lines.filter((line) => line.type === DataType.stderr), [lines]);\n const summary = useMemo(() => lines.filter((line) => line.text.length > 0 && errors.indexOf(line) < 0).pop() || DEFAULT_SUMMARY, [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} />}\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_NEW_LINE","REGEX_ANSI","ansiRegex","DEFAULT_SUMMARY","type","DataType","stdout","text","spinner","interval","frames","ICONS","error","Text","color","figures","cross","success","tick","running","Spinner","Header","memo","group","title","state","icon","Box","marginRight","bold","pointer","a","b","RunningSummary","line","marginLeft","replace","Lines","lines","flexDirection","map","index","key","ink-text","useLines","data","useMemo","finished","length","pop","forEach","x","split","push","Expanded","item","Contracted","errors","filter","stderr","summary","indexOf","ChildProcess","expanded"],"mappings":"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"}
|
package/dist/cjs/lib/addData.cjs
CHANGED
|
@@ -16,6 +16,9 @@ function addLines(fn) {
|
|
|
16
16
|
callback();
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
|
+
stream.on('finish', function() {
|
|
20
|
+
return fn(null);
|
|
21
|
+
});
|
|
19
22
|
return stream;
|
|
20
23
|
}
|
|
21
24
|
/* 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/lib/addData.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nexport default function addLines(fn) {\n const stream = new Writable({\n write(data, _enc, callback) {\n fn(data);\n callback();\n },\n });\n return stream;\n}\n"],"names":["addLines","fn","stream","Writable","write","data","_enc","callback"],"mappings":";;;;+BAEA;;;eAAwBA;;;8BAFC;AAEV,SAASA,SAASC,EAAE;IACjC,IAAMC,SAAS,IAAIC,wBAAQ,CAAC;QAC1BC,OAAAA,SAAAA,MAAMC,IAAI,EAAEC,IAAI,EAAEC,QAAQ;YACxBN,GAAGI;YACHE;QACF;IACF;
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/addData.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nexport default function addLines(fn) {\n const stream = new Writable({\n write(data, _enc, callback) {\n fn(data);\n callback();\n },\n });\n stream.on('finish', () => fn(null));\n return stream;\n}\n"],"names":["addLines","fn","stream","Writable","write","data","_enc","callback","on"],"mappings":";;;;+BAEA;;;eAAwBA;;;8BAFC;AAEV,SAASA,SAASC,EAAE;IACjC,IAAMC,SAAS,IAAIC,wBAAQ,CAAC;QAC1BC,OAAAA,SAAAA,MAAMC,IAAI,EAAEC,IAAI,EAAEC,QAAQ;YACxBN,GAAGI;YACHE;QACF;IACF;IACAL,OAAOM,EAAE,CAAC,UAAU;eAAMP,GAAG;;IAC7B,OAAOC;AACT"}
|
package/dist/cjs/worker.cjs
CHANGED
|
@@ -175,7 +175,7 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
|
|
|
175
175
|
data: item.data.concat([
|
|
176
176
|
{
|
|
177
177
|
type: _types.DataType.stdout,
|
|
178
|
-
text: data.toString('utf8')
|
|
178
|
+
text: data === null ? null : data.toString('utf8')
|
|
179
179
|
}
|
|
180
180
|
])
|
|
181
181
|
}));
|
|
@@ -196,7 +196,7 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
|
|
|
196
196
|
data: item.data.concat([
|
|
197
197
|
{
|
|
198
198
|
type: _types.DataType.stderr,
|
|
199
|
-
text: data.toString('utf8')
|
|
199
|
+
text: data === null ? null : data.toString('utf8')
|
|
200
200
|
}
|
|
201
201
|
])
|
|
202
202
|
}));
|
package/dist/cjs/worker.cjs.map
CHANGED
|
@@ -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 addData from './lib/addData';\nimport concatWritable from './lib/concatWritable';\nimport formatArguments from './lib/formatArguments';\n\nimport type { SpawnOptions, TerminalOptions } from './types';\nimport { DataType } 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', data: [], ...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 = addData((data) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, data: item.data.concat([{ type: DataType.stdout, text: data.toString('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 = addData((data) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, data: item.data.concat([{ type: DataType.stderr, text: data.toString('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: '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","data","cp","crossSpawn","outputs","stdout","stderr","queue","Queue","addData","item","processes","find","x","updateProcess","type","DataType","text","toString","defer","oo","bind","pipe","spawn","worker","await","err","res","output","setTimeout","release","concatWritable"],"mappings":"AAAA,aAAa;;;;;+BAgBb;;;eAAwBA;;;oEAf4B;8DACnC;4DACF;8DACG;gEAEI;8DACF;qEACO;sEACC;qBAGH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzB,IAAMC,WAAWC,IAAAA,kBAAS;AAEX,SAASF,cAAcG,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAAwB,EAAEC,QAAQ;IACnI,IAAQC,WAAkCH,aAAlCG,UAAUC,QAAwBJ,aAAxBI,OAAUC,uCAAcL;QAAlCG;QAAUC;;IAElB,IAAIA,UAAU,WAAW;QACvBR,SAASU,MAAM,CAAC,SAACC;YACf,IAAMC,KAAKC,IAAAA,gBAAI;YACfF,MAAMG,QAAQ,GAAGC,UAAU,CAAC;gBAAEH,IAAAA;gBAAII,OAAO;oBAACd;iBAAQ,CAACe,MAAM,CAACC,IAAAA,wBAAe,EAACf,OAAOgB,IAAI,CAAC;gBAAMC,OAAO;gBAAWC,MAAM,EAAE;eAAKhB;YAE3H,IAAMiB,KAAKC,IAAAA,wBAAU,EAACrB,SAASC,MAAMM;YACrC,IAAMe,UAAU;gBAAEC,QAAQ;gBAAMC,QAAQ;YAAK;YAE7C,IAAMC,QAAQ,IAAIC,gBAAK;YACvB,IAAIN,GAAGG,MAAM,EAAE;gBACbD,QAAQC,MAAM,GAAGI,IAAAA,gBAAO,EAAC,SAACR;oBACxB,IAAMS,OAAOnB,MAAMG,QAAQ,GAAGiB,SAAS,CAACC,IAAI,CAAC,SAACC;+BAAMA,EAAErB,EAAE,KAAKA;;oBAC7DD,MAAMG,QAAQ,GAAGoB,aAAa,CAAC,wCAAKJ;wBAAMT,MAAMS,KAAKT,IAAI,CAACJ,MAAM,CAAC;4BAAC;gCAAEkB,MAAMC,eAAQ,CAACX,MAAM;gCAAEY,MAAMhB,KAAKiB,QAAQ,CAAC;4BAAQ;yBAAE;;
|
|
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 addData from './lib/addData';\nimport concatWritable from './lib/concatWritable';\nimport formatArguments from './lib/formatArguments';\n\nimport type { SpawnOptions, TerminalOptions } from './types';\nimport { DataType } 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', data: [], ...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 = addData((data) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, data: item.data.concat([{ type: DataType.stdout, text: data === null ? null : data.toString('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 = addData((data) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, data: item.data.concat([{ type: DataType.stderr, text: data === null ? null : data.toString('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: '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","data","cp","crossSpawn","outputs","stdout","stderr","queue","Queue","addData","item","processes","find","x","updateProcess","type","DataType","text","toString","defer","oo","bind","pipe","spawn","worker","await","err","res","output","setTimeout","release","concatWritable"],"mappings":"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"}
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import React, { memo, useMemo } from 'react';
|
|
2
2
|
import { Box, Text } from '../ink.mjs';
|
|
3
|
+
import ansiRegex from '../lib/ansiRegex.mjs';
|
|
3
4
|
import figures from '../lib/figures.mjs';
|
|
4
5
|
import Spinner from './Spinner.mjs';
|
|
5
6
|
import { DataType } from '../types.mjs';
|
|
6
|
-
const
|
|
7
|
+
const REGEX_NEW_LINE = /\r\n|[\n\v\f\r\x85\u2028\u2029]/g;
|
|
8
|
+
const REGEX_ANSI = ansiRegex();
|
|
9
|
+
const DEFAULT_SUMMARY = {
|
|
10
|
+
type: DataType.stdout,
|
|
11
|
+
text: ''
|
|
12
|
+
};
|
|
7
13
|
// From: https://github.com/sindresorhus/cli-spinners/blob/00de8fbeee16fa49502fa4f687449f70f2c8ca2c/spinners.json#L2
|
|
8
14
|
const spinner = {
|
|
9
15
|
interval: 80,
|
|
@@ -37,12 +43,12 @@ const Header = /*#__PURE__*/ memo(function Header({ group, title, state }) {
|
|
|
37
43
|
bold: true
|
|
38
44
|
}, `${group}${figures.pointer} `), /*#__PURE__*/ React.createElement(Text, null, title));
|
|
39
45
|
}, (a, b)=>a.group === b.group && a.title === b.title && a.state === b.state);
|
|
40
|
-
const
|
|
46
|
+
const RunningSummary = /*#__PURE__*/ memo(function RunningSummary({ line }) {
|
|
41
47
|
return /*#__PURE__*/ React.createElement(Box, {
|
|
42
48
|
marginLeft: 2
|
|
43
49
|
}, /*#__PURE__*/ React.createElement(Text, {
|
|
44
50
|
color: "gray"
|
|
45
|
-
},
|
|
51
|
+
}, line.text.replace(REGEX_ANSI, '')));
|
|
46
52
|
});
|
|
47
53
|
const Lines = /*#__PURE__*/ memo(function Lines({ lines }) {
|
|
48
54
|
return /*#__PURE__*/ React.createElement(Box, {
|
|
@@ -54,8 +60,24 @@ const Lines = /*#__PURE__*/ memo(function Lines({ lines }) {
|
|
|
54
60
|
flexDirection: "column"
|
|
55
61
|
}, /*#__PURE__*/ React.createElement("ink-text", null, line.text))));
|
|
56
62
|
});
|
|
63
|
+
const useLines = (data)=>useMemo(()=>{
|
|
64
|
+
const finished = data.length > 0 ? data[data.length - 1].text === null : false;
|
|
65
|
+
if (finished) data.pop(); // null at end means done
|
|
66
|
+
const lines = [];
|
|
67
|
+
data.forEach((x)=>{
|
|
68
|
+
x.text.split(REGEX_NEW_LINE).forEach((text)=>lines.push({
|
|
69
|
+
type: x.type,
|
|
70
|
+
text
|
|
71
|
+
}));
|
|
72
|
+
});
|
|
73
|
+
if (!finished) lines.pop(); // remove partial lines
|
|
74
|
+
return lines;
|
|
75
|
+
}, [
|
|
76
|
+
data
|
|
77
|
+
]);
|
|
57
78
|
const Expanded = /*#__PURE__*/ memo(function Expanded({ item }) {
|
|
58
79
|
const { data } = item;
|
|
80
|
+
const lines = useLines(data);
|
|
59
81
|
return /*#__PURE__*/ React.createElement(Box, {
|
|
60
82
|
flexDirection: "column"
|
|
61
83
|
}, /*#__PURE__*/ React.createElement(Header, {
|
|
@@ -63,28 +85,17 @@ const Expanded = /*#__PURE__*/ memo(function Expanded({ item }) {
|
|
|
63
85
|
title: item.title,
|
|
64
86
|
state: item.state
|
|
65
87
|
}), /*#__PURE__*/ React.createElement(Lines, {
|
|
66
|
-
lines:
|
|
88
|
+
lines: lines
|
|
67
89
|
}));
|
|
68
90
|
});
|
|
69
91
|
const Contracted = /*#__PURE__*/ memo(function Contracted({ item }) {
|
|
70
92
|
const { state, data } = item;
|
|
71
|
-
const lines =
|
|
72
|
-
const lines = [];
|
|
73
|
-
data.forEach((x)=>{
|
|
74
|
-
x.text.split(NEW_LINE_REGEX).forEach((text)=>lines.push({
|
|
75
|
-
type: x.type,
|
|
76
|
-
text
|
|
77
|
-
}));
|
|
78
|
-
});
|
|
79
|
-
return lines;
|
|
80
|
-
}, [
|
|
81
|
-
data
|
|
82
|
-
]);
|
|
93
|
+
const lines = useLines(data);
|
|
83
94
|
// remove ansi codes when displaying single lines
|
|
84
95
|
const errors = useMemo(()=>lines.filter((line)=>line.type === DataType.stderr), [
|
|
85
96
|
lines
|
|
86
97
|
]);
|
|
87
|
-
const
|
|
98
|
+
const summary = useMemo(()=>lines.filter((line)=>line.text.length > 0 && errors.indexOf(line) < 0).pop() || DEFAULT_SUMMARY, [
|
|
88
99
|
lines,
|
|
89
100
|
errors
|
|
90
101
|
]);
|
|
@@ -94,8 +105,8 @@ const Contracted = /*#__PURE__*/ memo(function Contracted({ item }) {
|
|
|
94
105
|
group: item.group,
|
|
95
106
|
title: item.title,
|
|
96
107
|
state: item.state
|
|
97
|
-
}), state === 'running' && /*#__PURE__*/ React.createElement(
|
|
98
|
-
|
|
108
|
+
}), state === 'running' && /*#__PURE__*/ React.createElement(RunningSummary, {
|
|
109
|
+
line: summary
|
|
99
110
|
}), errors.length > 0 && /*#__PURE__*/ React.createElement(Lines, {
|
|
100
111
|
lines: errors
|
|
101
112
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/ChildProcess.tsx"],"sourcesContent":["import React, { memo, useMemo } from 'react';\nimport { Box, Text } from '../ink.mjs';\nimport figures from '../lib/figures';\nimport Spinner from './Spinner';\n\nimport type { ChildProcess as ChildProcessT, Data, State } from '../types';\nimport { DataType } from '../types';\n\nconst
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/components/ChildProcess.tsx"],"sourcesContent":["import React, { memo, useMemo } from 'react';\nimport { Box, Text } from '../ink.mjs';\nimport ansiRegex from '../lib/ansiRegex';\nimport figures from '../lib/figures';\nimport Spinner from './Spinner';\n\nimport type { ChildProcess as ChildProcessT, Data, State } from '../types';\nimport { DataType } from '../types';\n\nconst REGEX_NEW_LINE = /\\r\\n|[\\n\\v\\f\\r\\x85\\u2028\\u2029]/g;\nconst REGEX_ANSI = ansiRegex();\nconst DEFAULT_SUMMARY = { type: DataType.stdout, text: '' };\n\ntype ItemProps = {\n item: ChildProcessT;\n};\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 <Box marginRight={1}>{icon}</Box>\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: Data;\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: Data[];\n};\n\nconst Lines = memo(function Lines({ lines }: LinesProps) {\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\">\n {/* @ts-ignore */}\n <ink-text>{line.text}</ink-text>\n </Box>\n ))}\n </Box>\n );\n});\n\nconst useLines = (data: Data[]) =>\n useMemo(() => {\n const finished = data.length > 0 ? data[data.length - 1].text === null : false;\n if (finished) data.pop(); // null at end means done\n const lines = [];\n data.forEach((x) => {\n x.text.split(REGEX_NEW_LINE).forEach((text) => lines.push({ type: x.type, text }));\n });\n if (!finished) lines.pop(); // remove partial lines\n return lines;\n }, [data]) as Data[];\n\nconst Expanded = memo(function Expanded({ item }: ItemProps) {\n const { data } = item;\n const lines = useLines(data);\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, data } = item;\n const lines = useLines(data);\n\n // remove ansi codes when displaying single lines\n const errors = useMemo(() => lines.filter((line) => line.type === DataType.stderr), [lines]);\n const summary = useMemo(() => lines.filter((line) => line.text.length > 0 && errors.indexOf(line) < 0).pop() || DEFAULT_SUMMARY, [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} />}\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":["React","memo","useMemo","Box","Text","ansiRegex","figures","Spinner","DataType","REGEX_NEW_LINE","REGEX_ANSI","DEFAULT_SUMMARY","type","stdout","text","spinner","interval","frames","ICONS","error","color","cross","success","tick","running","Header","group","title","state","icon","marginRight","bold","pointer","a","b","RunningSummary","line","marginLeft","replace","Lines","lines","flexDirection","map","index","key","ink-text","useLines","data","finished","length","pop","forEach","x","split","push","Expanded","item","Contracted","errors","filter","stderr","summary","indexOf","ChildProcess","expanded"],"mappings":"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"}
|
package/dist/esm/lib/addData.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/addData.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nexport default function addLines(fn) {\n const stream = new Writable({\n write(data, _enc, callback) {\n fn(data);\n callback();\n },\n });\n return stream;\n}\n"],"names":["Writable","addLines","fn","stream","write","data","_enc","callback"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,kBAAkB;AAE3C,eAAe,SAASC,SAASC,EAAE;IACjC,MAAMC,SAAS,IAAIH,SAAS;QAC1BI,OAAMC,IAAI,EAAEC,IAAI,EAAEC,QAAQ;YACxBL,GAAGG;YACHE;QACF;IACF;
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/addData.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nexport default function addLines(fn) {\n const stream = new Writable({\n write(data, _enc, callback) {\n fn(data);\n callback();\n },\n });\n stream.on('finish', () => fn(null));\n return stream;\n}\n"],"names":["Writable","addLines","fn","stream","write","data","_enc","callback","on"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,kBAAkB;AAE3C,eAAe,SAASC,SAASC,EAAE;IACjC,MAAMC,SAAS,IAAIH,SAAS;QAC1BI,OAAMC,IAAI,EAAEC,IAAI,EAAEC,QAAQ;YACxBL,GAAGG;YACHE;QACF;IACF;IACAJ,OAAOK,EAAE,CAAC,UAAU,IAAMN,GAAG;IAC7B,OAAOC;AACT"}
|
package/dist/esm/worker.mjs
CHANGED
|
@@ -117,7 +117,7 @@ export default function spawnTerminal(command, args, spawnOptions, options, call
|
|
|
117
117
|
data: item.data.concat([
|
|
118
118
|
{
|
|
119
119
|
type: DataType.stdout,
|
|
120
|
-
text: data.toString('utf8')
|
|
120
|
+
text: data === null ? null : data.toString('utf8')
|
|
121
121
|
}
|
|
122
122
|
])
|
|
123
123
|
}));
|
|
@@ -136,7 +136,7 @@ export default function spawnTerminal(command, args, spawnOptions, options, call
|
|
|
136
136
|
data: item.data.concat([
|
|
137
137
|
{
|
|
138
138
|
type: DataType.stderr,
|
|
139
|
-
text: data.toString('utf8')
|
|
139
|
+
text: data === null ? null : data.toString('utf8')
|
|
140
140
|
}
|
|
141
141
|
])
|
|
142
142
|
}));
|
package/dist/esm/worker.mjs.map
CHANGED
|
@@ -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 addData from './lib/addData';\nimport concatWritable from './lib/concatWritable';\nimport formatArguments from './lib/formatArguments';\n\nimport type { SpawnOptions, TerminalOptions } from './types';\nimport { DataType } 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', data: [], ...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 = addData((data) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, data: item.data.concat([{ type: DataType.stdout, text: data.toString('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 = addData((data) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, data: item.data.concat([{ type: DataType.stderr, text: data.toString('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: '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","addData","concatWritable","formatArguments","DataType","terminal","spawnTerminal","command","args","spawnOptions","options","callback","encoding","stdio","csOptions","retain","store","id","getState","addProcess","title","concat","join","state","data","cp","outputs","stdout","stderr","queue","item","processes","find","x","updateProcess","type","text","toString","defer","bind","pipe","worker","await","err","res","output","setTimeout","release"],"mappings":"AAAA,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACb,OAAOA,SAASC,UAAU,QAA0B,iBAAiB;AACrE,OAAOC,UAAU,WAAW;AAC5B,OAAOC,QAAQ,SAAS;AACxB,OAAOC,WAAW,WAAW;AAE7B,OAAOC,eAAe,cAAc;AACpC,OAAOC,aAAa,gBAAgB;AACpC,OAAOC,oBAAoB,uBAAuB;AAClD,OAAOC,qBAAqB,wBAAwB;AAGpD,SAASC,QAAQ,QAAQ,UAAU;AAEnC,MAAMC,WAAWL;AAEjB,eAAe,SAASM,cAAcC,OAAe,EAAEC,IAAc,EAAEC,YAA0B,EAAEC,OAAwB,EAAEC,QAAQ;IACnI,MAAM,EAAEC,QAAQ,EAAEC,KAAK,EAAgB,GAAGJ,cAAdK,uCAAcL;QAAlCG;QAAUC;;IAElB,IAAIA,UAAU,WAAW;QACvBR,SAASU,MAAM,CAAC,CAACC;YACf,MAAMC,KAAKpB;YACXmB,MAAME,QAAQ,GAAGC,UAAU,CAAC;gBAAEF;gBAAIG,OAAO;oBAACb;iBAAQ,CAACc,MAAM,CAAClB,gBAAgBK,OAAOc,IAAI,CAAC;gBAAMC,OAAO;gBAAWC,MAAM,EAAE;eAAKd;YAE3H,MAAMe,KAAK7B,WAAWW,SAASC,MAAMM;YACrC,MAAMY,UAAU;gBAAEC,QAAQ;gBAAMC,QAAQ;YAAK;YAE7C,MAAMC,QAAQ,IAAI9B;YAClB,IAAI0B,GAAGE,MAAM,EAAE;gBACbD,QAAQC,MAAM,GAAG1B,QAAQ,CAACuB;oBACxB,MAAMM,OAAOd,MAAME,QAAQ,GAAGa,SAAS,CAACC,IAAI,CAAC,CAACC,IAAMA,EAAEhB,EAAE,KAAKA;oBAC7DD,MAAME,QAAQ,GAAGgB,aAAa,CAAC,wCAAKJ;wBAAMN,MAAMM,KAAKN,IAAI,CAACH,MAAM,CAAC;4BAAC;gCAAEc,MAAM/B,SAASuB,MAAM;gCAAES,MAAMZ,KAAKa,QAAQ,CAAC;4BAAQ;yBAAE;;
|
|
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 addData from './lib/addData';\nimport concatWritable from './lib/concatWritable';\nimport formatArguments from './lib/formatArguments';\n\nimport type { SpawnOptions, TerminalOptions } from './types';\nimport { DataType } 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', data: [], ...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 = addData((data) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, data: item.data.concat([{ type: DataType.stdout, text: data === null ? null : data.toString('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 = addData((data) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, data: item.data.concat([{ type: DataType.stderr, text: data === null ? null : data.toString('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: '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","addData","concatWritable","formatArguments","DataType","terminal","spawnTerminal","command","args","spawnOptions","options","callback","encoding","stdio","csOptions","retain","store","id","getState","addProcess","title","concat","join","state","data","cp","outputs","stdout","stderr","queue","item","processes","find","x","updateProcess","type","text","toString","defer","bind","pipe","worker","await","err","res","output","setTimeout","release"],"mappings":"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"}
|