spawn-term 0.1.37 → 0.1.38
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 +7 -32
- package/dist/cjs/components/ChildProcess.cjs.map +1 -1
- package/dist/cjs/lib/{addData.cjs → addLines.cjs} +9 -3
- package/dist/cjs/lib/addLines.cjs.map +1 -0
- package/dist/cjs/types.cjs +6 -6
- package/dist/cjs/types.cjs.map +1 -1
- package/dist/cjs/worker.cjs +16 -16
- package/dist/cjs/worker.cjs.map +1 -1
- package/dist/esm/components/ChildProcess.mjs +8 -31
- package/dist/esm/components/ChildProcess.mjs.map +1 -1
- package/dist/esm/lib/addLines.mjs +19 -0
- package/dist/esm/lib/addLines.mjs.map +1 -0
- package/dist/esm/types.mjs +4 -4
- package/dist/esm/types.mjs.map +1 -1
- package/dist/esm/worker.mjs +13 -17
- package/dist/esm/worker.mjs.map +1 -1
- package/dist/types/types.d.ts +4 -4
- package/package.json +1 -1
- package/dist/cjs/lib/addData.cjs.map +0 -1
- package/dist/esm/lib/addData.mjs +0 -11
- package/dist/esm/lib/addData.mjs.map +0 -1
- /package/dist/types/lib/{addData.d.ts → addLines.d.ts} +0 -0
|
@@ -60,10 +60,10 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
60
60
|
}
|
|
61
61
|
return newObj;
|
|
62
62
|
}
|
|
63
|
-
var
|
|
63
|
+
var _REGEX_NEW_LINE = /\r\n|[\n\v\f\r\x85\u2028\u2029]/g;
|
|
64
64
|
var REGEX_ANSI = (0, _ansiRegex.default)();
|
|
65
|
-
var
|
|
66
|
-
type: _types.
|
|
65
|
+
var _DEFAULT_SUMMARY = {
|
|
66
|
+
type: _types.LineType.stdout,
|
|
67
67
|
text: ''
|
|
68
68
|
};
|
|
69
69
|
// From: https://github.com/sindresorhus/cli-spinners/blob/00de8fbeee16fa49502fa4f687449f70f2c8ca2c/spinners.json#L2
|
|
@@ -123,29 +123,9 @@ var Lines = /*#__PURE__*/ (0, _react.memo)(function Lines(param) {
|
|
|
123
123
|
}, /*#__PURE__*/ _react.default.createElement(_ink.Text, null, line.text)));
|
|
124
124
|
}));
|
|
125
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
|
-
};
|
|
145
126
|
var Expanded = /*#__PURE__*/ (0, _react.memo)(function Expanded(param) {
|
|
146
127
|
var item = param.item;
|
|
147
|
-
var
|
|
148
|
-
var lines = useLines(data);
|
|
128
|
+
var lines = item.lines;
|
|
149
129
|
return /*#__PURE__*/ _react.default.createElement(_ink.Box, {
|
|
150
130
|
flexDirection: "column"
|
|
151
131
|
}, /*#__PURE__*/ _react.default.createElement(Header, {
|
|
@@ -158,25 +138,20 @@ var Expanded = /*#__PURE__*/ (0, _react.memo)(function Expanded(param) {
|
|
|
158
138
|
});
|
|
159
139
|
var Contracted = /*#__PURE__*/ (0, _react.memo)(function Contracted(param) {
|
|
160
140
|
var item = param.item;
|
|
161
|
-
var state = item.state,
|
|
162
|
-
var lines = useLines(data);
|
|
141
|
+
var state = item.state, lines = item.lines;
|
|
163
142
|
// remove ansi codes when displaying single lines
|
|
164
143
|
var errors = (0, _react.useMemo)(function() {
|
|
165
144
|
return lines.filter(function(line) {
|
|
166
|
-
return line.type === _types.
|
|
145
|
+
return line.type === _types.LineType.stderr;
|
|
167
146
|
});
|
|
168
147
|
}, [
|
|
169
148
|
lines
|
|
170
149
|
]);
|
|
171
150
|
var summary = (0, _react.useMemo)(function() {
|
|
172
|
-
|
|
173
|
-
var summary = lines.filter(function(line) {
|
|
151
|
+
return lines.filter(function(line) {
|
|
174
152
|
return line.text.length > 0 && errors.indexOf(line) < 0;
|
|
175
153
|
}).pop();
|
|
176
|
-
if (!summary && !finished) summary = DEFAULT_SUMMARY;
|
|
177
|
-
return summary;
|
|
178
154
|
}, [
|
|
179
|
-
data,
|
|
180
155
|
lines,
|
|
181
156
|
errors
|
|
182
157
|
]);
|
|
@@ -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 ansiRegex from '../lib/ansiRegex';\nimport figures from '../lib/figures';\nimport Spinner from './Spinner';\n\nimport type { ChildProcess as ChildProcessT,
|
|
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, Line, State } from '../types';\nimport { LineType } 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: LineType.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: Line;\n};\n\nconst RunningSummary = memo(function RunningSummary({ line }: RunningSummaryProps) {\n return (\n <Box marginLeft={2}>\n <Text color=\"gray\">{line.text.replace(REGEX_ANSI, '')}</Text>\n </Box>\n );\n});\n\ntype LinesProps = {\n lines: Line[];\n};\n\nconst 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 <Text>{line.text}</Text>\n </Box>\n ))}\n </Box>\n );\n});\n\nconst Expanded = memo(function Expanded({ item }: ItemProps) {\n const { lines } = item;\n\n return (\n <Box flexDirection=\"column\">\n <Header group={item.group} title={item.title} state={item.state} />\n <Lines lines={lines} />\n </Box>\n );\n});\n\nconst Contracted = memo(function Contracted({ item }: ItemProps) {\n const { state, lines } = item;\n\n // remove ansi codes when displaying single lines\n const errors = useMemo(() => lines.filter((line) => line.type === LineType.stderr), [lines]);\n const summary = useMemo(() => lines.filter((line) => line.text.length > 0 && errors.indexOf(line) < 0).pop(), [lines, errors]);\n\n return (\n <Box flexDirection=\"column\">\n <Header group={item.group} title={item.title} state={item.state} />\n {state === 'running' && summary && <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","LineType","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","Expanded","item","Contracted","errors","useMemo","filter","stderr","summary","length","indexOf","pop","ChildProcess","expanded"],"mappings":"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"}
|
|
@@ -9,15 +9,21 @@ Object.defineProperty(exports, "default", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
var _readablestream = require("readable-stream");
|
|
12
|
+
var REGEX_NEW_LINE = /\r\n|[\n\v\f\r\x85\u2028\u2029]/g;
|
|
12
13
|
function addLines(fn) {
|
|
14
|
+
var last = '';
|
|
13
15
|
var stream = new _readablestream.Writable({
|
|
14
|
-
write: function write(
|
|
15
|
-
|
|
16
|
+
write: function write(chunk, _enc, callback) {
|
|
17
|
+
var more = last + chunk.toString('utf8');
|
|
18
|
+
var lines = more.split(REGEX_NEW_LINE);
|
|
19
|
+
last = lines.pop();
|
|
20
|
+
if (lines.length > 0) fn(lines);
|
|
16
21
|
callback();
|
|
17
22
|
}
|
|
18
23
|
});
|
|
19
24
|
stream.on('finish', function() {
|
|
20
|
-
|
|
25
|
+
if (last.length) fn(last);
|
|
26
|
+
last = '';
|
|
21
27
|
});
|
|
22
28
|
return stream;
|
|
23
29
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/addLines.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nconst REGEX_NEW_LINE = /\\r\\n|[\\n\\v\\f\\r\\x85\\u2028\\u2029]/g;\n\nexport default function addLines(fn) {\n let last = '';\n\n const stream = new Writable({\n write(chunk, _enc, callback) {\n const more = last + chunk.toString('utf8');\n const lines = more.split(REGEX_NEW_LINE);\n last = lines.pop();\n if (lines.length > 0) fn(lines);\n callback();\n },\n });\n stream.on('finish', () => {\n if (last.length) fn(last);\n last = '';\n });\n return stream;\n}\n"],"names":["addLines","REGEX_NEW_LINE","fn","last","stream","Writable","write","chunk","_enc","callback","more","toString","lines","split","pop","length","on"],"mappings":";;;;+BAIA;;;eAAwBA;;;8BAJC;AAEzB,IAAMC,iBAAiB;AAER,SAASD,SAASE,EAAE;IACjC,IAAIC,OAAO;IAEX,IAAMC,SAAS,IAAIC,wBAAQ,CAAC;QAC1BC,OAAAA,SAAAA,MAAMC,KAAK,EAAEC,IAAI,EAAEC,QAAQ;YACzB,IAAMC,OAAOP,OAAOI,MAAMI,QAAQ,CAAC;YACnC,IAAMC,QAAQF,KAAKG,KAAK,CAACZ;YACzBE,OAAOS,MAAME,GAAG;YAChB,IAAIF,MAAMG,MAAM,GAAG,GAAGb,GAAGU;YACzBH;QACF;IACF;IACAL,OAAOY,EAAE,CAAC,UAAU;QAClB,IAAIb,KAAKY,MAAM,EAAEb,GAAGC;QACpBA,OAAO;IACT;IACA,OAAOC;AACT"}
|
package/dist/cjs/types.cjs
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
Object.defineProperty(exports, "
|
|
6
|
+
Object.defineProperty(exports, "LineType", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function() {
|
|
9
|
-
return
|
|
9
|
+
return LineType;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
return
|
|
12
|
+
var LineType = /*#__PURE__*/ function(LineType) {
|
|
13
|
+
LineType[LineType["stdout"] = 1] = "stdout";
|
|
14
|
+
LineType[LineType["stderr"] = 2] = "stderr";
|
|
15
|
+
return LineType;
|
|
16
16
|
}({});
|
|
17
17
|
/* 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; }
|
package/dist/cjs/types.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/types.ts"],"sourcesContent":["// @ts-ignore\nexport type { SpawnOptions, SpawnCallback, SpawnResult } from 'cross-spawn-cb';\n\nexport type TerminalOptions = {\n group?: string;\n expanded?: string;\n};\n\nexport enum
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/types.ts"],"sourcesContent":["// @ts-ignore\nexport type { SpawnOptions, SpawnCallback, SpawnResult } from 'cross-spawn-cb';\n\nexport type TerminalOptions = {\n group?: string;\n expanded?: string;\n};\n\nexport enum LineType {\n stdout = 1,\n stderr = 2,\n}\nexport type Line = {\n type: LineType;\n text: string;\n};\n\nexport type State = 'running' | 'error' | 'success';\nexport type ChildProcess = {\n id: string;\n group?: string;\n title: string;\n state: State;\n lines: Line[];\n expanded?: string;\n};\n\nexport interface AppState {\n processes: ChildProcess[];\n addProcess: (process: ChildProcess) => void;\n updateProcess: (process: ChildProcess) => void;\n}\n"],"names":["LineType"],"mappings":"AAAA,aAAa;;;;;+BAQDA;;;eAAAA;;;AAAL,IAAA,AAAKA,kCAAAA;;;WAAAA"}
|
package/dist/cjs/worker.cjs
CHANGED
|
@@ -14,7 +14,7 @@ var _liluuid = /*#__PURE__*/ _interop_require_default(require("lil-uuid"));
|
|
|
14
14
|
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
|
-
var
|
|
17
|
+
var _addLines = /*#__PURE__*/ _interop_require_default(require("./lib/addLines.cjs"));
|
|
18
18
|
var _concatWritable = /*#__PURE__*/ _interop_require_default(require("./lib/concatWritable.cjs"));
|
|
19
19
|
var _formatArguments = /*#__PURE__*/ _interop_require_default(require("./lib/formatArguments.cjs"));
|
|
20
20
|
var _types = require("./types.cjs");
|
|
@@ -158,7 +158,7 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
|
|
|
158
158
|
command
|
|
159
159
|
].concat((0, _formatArguments.default)(args)).join(' '),
|
|
160
160
|
state: 'running',
|
|
161
|
-
|
|
161
|
+
lines: []
|
|
162
162
|
}, options));
|
|
163
163
|
var cp = (0, _crossspawncb.crossSpawn)(command, args, csOptions);
|
|
164
164
|
var outputs = {
|
|
@@ -167,17 +167,17 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
|
|
|
167
167
|
};
|
|
168
168
|
var queue = new _queuecb.default();
|
|
169
169
|
if (cp.stdout) {
|
|
170
|
-
outputs.stdout = (0,
|
|
170
|
+
outputs.stdout = (0, _addLines.default)(function(lines) {
|
|
171
171
|
var item = store.getState().processes.find(function(x) {
|
|
172
172
|
return x.id === id;
|
|
173
173
|
});
|
|
174
174
|
store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
|
|
175
|
-
|
|
176
|
-
{
|
|
177
|
-
type: _types.
|
|
178
|
-
text:
|
|
179
|
-
}
|
|
180
|
-
|
|
175
|
+
lines: item.lines.concat(lines.map(function(text) {
|
|
176
|
+
return {
|
|
177
|
+
type: _types.LineType.stdout,
|
|
178
|
+
text: text
|
|
179
|
+
};
|
|
180
|
+
}))
|
|
181
181
|
}));
|
|
182
182
|
});
|
|
183
183
|
queue.defer(_onone.default.bind(null, cp.stdout.pipe(outputs.stdout), [
|
|
@@ -188,17 +188,17 @@ function spawnTerminal(command, args, spawnOptions, options, callback) {
|
|
|
188
188
|
]));
|
|
189
189
|
}
|
|
190
190
|
if (cp.stderr) {
|
|
191
|
-
outputs.stderr = (0,
|
|
191
|
+
outputs.stderr = (0, _addLines.default)(function(lines) {
|
|
192
192
|
var item = store.getState().processes.find(function(x) {
|
|
193
193
|
return x.id === id;
|
|
194
194
|
});
|
|
195
195
|
store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
|
|
196
|
-
|
|
197
|
-
{
|
|
198
|
-
type: _types.
|
|
199
|
-
text:
|
|
200
|
-
}
|
|
201
|
-
|
|
196
|
+
lines: item.lines.concat(lines.map(function(text) {
|
|
197
|
+
return {
|
|
198
|
+
type: _types.LineType.stderr,
|
|
199
|
+
text: text
|
|
200
|
+
};
|
|
201
|
+
}))
|
|
202
202
|
}));
|
|
203
203
|
});
|
|
204
204
|
queue.defer(_onone.default.bind(null, cp.stderr.pipe(outputs.stderr), [
|
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
|
|
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((lines) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stdout, text }))) });\n });\n queue.defer(oo.bind(null, cp.stdout.pipe(outputs.stdout), ['error', 'end', 'close', 'finish']));\n }\n if (cp.stderr) {\n outputs.stderr = addLines((lines) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stderr, text }))) });\n });\n queue.defer(oo.bind(null, cp.stderr.pipe(outputs.stderr), ['error', 'end', 'close', 'finish']));\n }\n queue.defer(spawn.worker.bind(null, cp, { ...csOptions, encoding: 'utf8' }));\n queue.await((err) => {\n const res = (err ? err : {}) as SpawnResult;\n res.stdout = outputs.stdout ? outputs.stdout.output : null;\n res.stderr = outputs.stderr ? outputs.stderr.output : null;\n res.output = [res.stdout, res.stderr, null];\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, state: err ? 'error' : 'success' });\n\n // let rendering complete\n setTimeout(() => {\n terminal.release();\n err ? callback(err) : callback(null, res);\n });\n });\n });\n } else {\n const cp = crossSpawn(command, args, csOptions);\n const outputs = { stdout: null, stderr: null };\n\n const queue = new Queue();\n if (cp.stdout) {\n outputs.stdout = concatWritable((output) => {\n outputs.stdout.output = output.toString(encoding || 'utf8');\n });\n queue.defer(oo.bind(null, cp.stdout.pipe(outputs.stdout), ['error', 'end', 'close', 'finish']));\n }\n if (cp.stderr) {\n outputs.stderr = concatWritable((output) => {\n outputs.stderr.output = output.toString(encoding || 'utf8');\n });\n queue.defer(oo.bind(null, cp.stderr.pipe(outputs.stderr), ['error', 'end', 'close', 'finish']));\n }\n queue.defer(spawn.worker.bind(null, cp, { ...csOptions, encoding: encoding || 'utf8' }));\n queue.await((err) => {\n const res = (err ? err : {}) as SpawnResult;\n res.stdout = outputs.stdout ? outputs.stdout.output : null;\n res.stderr = outputs.stderr ? outputs.stderr.output : null;\n res.output = [res.stdout, res.stderr, null];\n err ? callback(err) : callback(null, res);\n });\n }\n}\n"],"names":["spawnTerminal","terminal","createApp","command","args","spawnOptions","options","callback","encoding","stdio","csOptions","retain","store","id","uuid","getState","addProcess","title","concat","formatArguments","join","state","lines","cp","crossSpawn","outputs","stdout","stderr","queue","Queue","addLines","item","processes","find","x","updateProcess","map","text","type","LineType","defer","oo","bind","pipe","spawn","worker","await","err","res","output","setTimeout","release","concatWritable","toString"],"mappings":"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"}
|
|
@@ -3,11 +3,11 @@ import { Box, Text } from '../ink.mjs';
|
|
|
3
3
|
import ansiRegex from '../lib/ansiRegex.mjs';
|
|
4
4
|
import figures from '../lib/figures.mjs';
|
|
5
5
|
import Spinner from './Spinner.mjs';
|
|
6
|
-
import {
|
|
7
|
-
const
|
|
6
|
+
import { LineType } from '../types.mjs';
|
|
7
|
+
const _REGEX_NEW_LINE = /\r\n|[\n\v\f\r\x85\u2028\u2029]/g;
|
|
8
8
|
const REGEX_ANSI = ansiRegex();
|
|
9
|
-
const
|
|
10
|
-
type:
|
|
9
|
+
const _DEFAULT_SUMMARY = {
|
|
10
|
+
type: LineType.stdout,
|
|
11
11
|
text: ''
|
|
12
12
|
};
|
|
13
13
|
// From: https://github.com/sindresorhus/cli-spinners/blob/00de8fbeee16fa49502fa4f687449f70f2c8ca2c/spinners.json#L2
|
|
@@ -60,24 +60,8 @@ const Lines = /*#__PURE__*/ memo(function Lines({ lines }) {
|
|
|
60
60
|
flexDirection: "column"
|
|
61
61
|
}, /*#__PURE__*/ React.createElement(Text, null, line.text))));
|
|
62
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
|
-
]);
|
|
78
63
|
const Expanded = /*#__PURE__*/ memo(function Expanded({ item }) {
|
|
79
|
-
const {
|
|
80
|
-
const lines = useLines(data);
|
|
64
|
+
const { lines } = item;
|
|
81
65
|
return /*#__PURE__*/ React.createElement(Box, {
|
|
82
66
|
flexDirection: "column"
|
|
83
67
|
}, /*#__PURE__*/ React.createElement(Header, {
|
|
@@ -89,19 +73,12 @@ const Expanded = /*#__PURE__*/ memo(function Expanded({ item }) {
|
|
|
89
73
|
}));
|
|
90
74
|
});
|
|
91
75
|
const Contracted = /*#__PURE__*/ memo(function Contracted({ item }) {
|
|
92
|
-
const { state,
|
|
93
|
-
const lines = useLines(data);
|
|
76
|
+
const { state, lines } = item;
|
|
94
77
|
// remove ansi codes when displaying single lines
|
|
95
|
-
const errors = useMemo(()=>lines.filter((line)=>line.type ===
|
|
78
|
+
const errors = useMemo(()=>lines.filter((line)=>line.type === LineType.stderr), [
|
|
96
79
|
lines
|
|
97
80
|
]);
|
|
98
|
-
const summary = useMemo(()=>
|
|
99
|
-
const finished = data.length > 0 ? data[data.length - 1].text === null : false;
|
|
100
|
-
let summary = lines.filter((line)=>line.text.length > 0 && errors.indexOf(line) < 0).pop();
|
|
101
|
-
if (!summary && !finished) summary = DEFAULT_SUMMARY;
|
|
102
|
-
return summary;
|
|
103
|
-
}, [
|
|
104
|
-
data,
|
|
81
|
+
const summary = useMemo(()=>lines.filter((line)=>line.text.length > 0 && errors.indexOf(line) < 0).pop(), [
|
|
105
82
|
lines,
|
|
106
83
|
errors
|
|
107
84
|
]);
|
|
@@ -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 ansiRegex from '../lib/ansiRegex';\nimport figures from '../lib/figures';\nimport Spinner from './Spinner';\n\nimport type { ChildProcess as ChildProcessT,
|
|
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, Line, State } from '../types';\nimport { LineType } 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: LineType.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: Line;\n};\n\nconst RunningSummary = memo(function RunningSummary({ line }: RunningSummaryProps) {\n return (\n <Box marginLeft={2}>\n <Text color=\"gray\">{line.text.replace(REGEX_ANSI, '')}</Text>\n </Box>\n );\n});\n\ntype LinesProps = {\n lines: Line[];\n};\n\nconst 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 <Text>{line.text}</Text>\n </Box>\n ))}\n </Box>\n );\n});\n\nconst Expanded = memo(function Expanded({ item }: ItemProps) {\n const { lines } = item;\n\n return (\n <Box flexDirection=\"column\">\n <Header group={item.group} title={item.title} state={item.state} />\n <Lines lines={lines} />\n </Box>\n );\n});\n\nconst Contracted = memo(function Contracted({ item }: ItemProps) {\n const { state, lines } = item;\n\n // remove ansi codes when displaying single lines\n const errors = useMemo(() => lines.filter((line) => line.type === LineType.stderr), [lines]);\n const summary = useMemo(() => lines.filter((line) => line.text.length > 0 && errors.indexOf(line) < 0).pop(), [lines, errors]);\n\n return (\n <Box flexDirection=\"column\">\n <Header group={item.group} title={item.title} state={item.state} />\n {state === 'running' && summary && <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","LineType","_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","Expanded","item","Contracted","errors","filter","stderr","summary","length","indexOf","pop","ChildProcess","expanded"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Writable } from 'readable-stream';
|
|
2
|
+
const REGEX_NEW_LINE = /\r\n|[\n\v\f\r\x85\u2028\u2029]/g;
|
|
3
|
+
export default function addLines(fn) {
|
|
4
|
+
let last = '';
|
|
5
|
+
const stream = new Writable({
|
|
6
|
+
write (chunk, _enc, callback) {
|
|
7
|
+
const more = last + chunk.toString('utf8');
|
|
8
|
+
const lines = more.split(REGEX_NEW_LINE);
|
|
9
|
+
last = lines.pop();
|
|
10
|
+
if (lines.length > 0) fn(lines);
|
|
11
|
+
callback();
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
stream.on('finish', ()=>{
|
|
15
|
+
if (last.length) fn(last);
|
|
16
|
+
last = '';
|
|
17
|
+
});
|
|
18
|
+
return stream;
|
|
19
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/lib/addLines.ts"],"sourcesContent":["import { Writable } from 'readable-stream';\n\nconst REGEX_NEW_LINE = /\\r\\n|[\\n\\v\\f\\r\\x85\\u2028\\u2029]/g;\n\nexport default function addLines(fn) {\n let last = '';\n\n const stream = new Writable({\n write(chunk, _enc, callback) {\n const more = last + chunk.toString('utf8');\n const lines = more.split(REGEX_NEW_LINE);\n last = lines.pop();\n if (lines.length > 0) fn(lines);\n callback();\n },\n });\n stream.on('finish', () => {\n if (last.length) fn(last);\n last = '';\n });\n return stream;\n}\n"],"names":["Writable","REGEX_NEW_LINE","addLines","fn","last","stream","write","chunk","_enc","callback","more","toString","lines","split","pop","length","on"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,kBAAkB;AAE3C,MAAMC,iBAAiB;AAEvB,eAAe,SAASC,SAASC,EAAE;IACjC,IAAIC,OAAO;IAEX,MAAMC,SAAS,IAAIL,SAAS;QAC1BM,OAAMC,KAAK,EAAEC,IAAI,EAAEC,QAAQ;YACzB,MAAMC,OAAON,OAAOG,MAAMI,QAAQ,CAAC;YACnC,MAAMC,QAAQF,KAAKG,KAAK,CAACZ;YACzBG,OAAOQ,MAAME,GAAG;YAChB,IAAIF,MAAMG,MAAM,GAAG,GAAGZ,GAAGS;YACzBH;QACF;IACF;IACAJ,OAAOW,EAAE,CAAC,UAAU;QAClB,IAAIZ,KAAKW,MAAM,EAAEZ,GAAGC;QACpBA,OAAO;IACT;IACA,OAAOC;AACT"}
|
package/dist/esm/types.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @ts-ignore
|
|
2
|
-
export var
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
return
|
|
2
|
+
export var LineType = /*#__PURE__*/ function(LineType) {
|
|
3
|
+
LineType[LineType["stdout"] = 1] = "stdout";
|
|
4
|
+
LineType[LineType["stderr"] = 2] = "stderr";
|
|
5
|
+
return LineType;
|
|
6
6
|
}({});
|
package/dist/esm/types.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/types.ts"],"sourcesContent":["// @ts-ignore\nexport type { SpawnOptions, SpawnCallback, SpawnResult } from 'cross-spawn-cb';\n\nexport type TerminalOptions = {\n group?: string;\n expanded?: string;\n};\n\nexport enum
|
|
1
|
+
{"version":3,"sources":["/Users/kevin/Dev/OpenSource/node/spawn-term/src/types.ts"],"sourcesContent":["// @ts-ignore\nexport type { SpawnOptions, SpawnCallback, SpawnResult } from 'cross-spawn-cb';\n\nexport type TerminalOptions = {\n group?: string;\n expanded?: string;\n};\n\nexport enum LineType {\n stdout = 1,\n stderr = 2,\n}\nexport type Line = {\n type: LineType;\n text: string;\n};\n\nexport type State = 'running' | 'error' | 'success';\nexport type ChildProcess = {\n id: string;\n group?: string;\n title: string;\n state: State;\n lines: Line[];\n expanded?: string;\n};\n\nexport interface AppState {\n processes: ChildProcess[];\n addProcess: (process: ChildProcess) => void;\n updateProcess: (process: ChildProcess) => void;\n}\n"],"names":["LineType"],"mappings":"AAAA,aAAa;AAQb,OAAO,IAAA,AAAKA,kCAAAA;;;WAAAA;MAGX"}
|
package/dist/esm/worker.mjs
CHANGED
|
@@ -83,10 +83,10 @@ import uuid from 'lil-uuid';
|
|
|
83
83
|
import oo from 'on-one';
|
|
84
84
|
import Queue from 'queue-cb';
|
|
85
85
|
import createApp from './createApp.mjs';
|
|
86
|
-
import
|
|
86
|
+
import addLines from './lib/addLines.mjs';
|
|
87
87
|
import concatWritable from './lib/concatWritable.mjs';
|
|
88
88
|
import formatArguments from './lib/formatArguments.mjs';
|
|
89
|
-
import {
|
|
89
|
+
import { LineType } from './types.mjs';
|
|
90
90
|
const terminal = createApp();
|
|
91
91
|
export default function spawnTerminal(command, args, spawnOptions, options, callback) {
|
|
92
92
|
const { encoding, stdio } = spawnOptions, csOptions = _object_without_properties(spawnOptions, [
|
|
@@ -102,7 +102,7 @@ export default function spawnTerminal(command, args, spawnOptions, options, call
|
|
|
102
102
|
command
|
|
103
103
|
].concat(formatArguments(args)).join(' '),
|
|
104
104
|
state: 'running',
|
|
105
|
-
|
|
105
|
+
lines: []
|
|
106
106
|
}, options));
|
|
107
107
|
const cp = crossSpawn(command, args, csOptions);
|
|
108
108
|
const outputs = {
|
|
@@ -111,15 +111,13 @@ export default function spawnTerminal(command, args, spawnOptions, options, call
|
|
|
111
111
|
};
|
|
112
112
|
const queue = new Queue();
|
|
113
113
|
if (cp.stdout) {
|
|
114
|
-
outputs.stdout =
|
|
114
|
+
outputs.stdout = addLines((lines)=>{
|
|
115
115
|
const item = store.getState().processes.find((x)=>x.id === id);
|
|
116
116
|
store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
])
|
|
117
|
+
lines: item.lines.concat(lines.map((text)=>({
|
|
118
|
+
type: LineType.stdout,
|
|
119
|
+
text
|
|
120
|
+
})))
|
|
123
121
|
}));
|
|
124
122
|
});
|
|
125
123
|
queue.defer(oo.bind(null, cp.stdout.pipe(outputs.stdout), [
|
|
@@ -130,15 +128,13 @@ export default function spawnTerminal(command, args, spawnOptions, options, call
|
|
|
130
128
|
]));
|
|
131
129
|
}
|
|
132
130
|
if (cp.stderr) {
|
|
133
|
-
outputs.stderr =
|
|
131
|
+
outputs.stderr = addLines((lines)=>{
|
|
134
132
|
const item = store.getState().processes.find((x)=>x.id === id);
|
|
135
133
|
store.getState().updateProcess(_object_spread_props(_object_spread({}, item), {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
}
|
|
141
|
-
])
|
|
134
|
+
lines: item.lines.concat(lines.map((text)=>({
|
|
135
|
+
type: LineType.stderr,
|
|
136
|
+
text
|
|
137
|
+
})))
|
|
142
138
|
}));
|
|
143
139
|
});
|
|
144
140
|
queue.defer(oo.bind(null, cp.stderr.pipe(outputs.stderr), [
|
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
|
|
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((lines) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stdout, text }))) });\n });\n queue.defer(oo.bind(null, cp.stdout.pipe(outputs.stdout), ['error', 'end', 'close', 'finish']));\n }\n if (cp.stderr) {\n outputs.stderr = addLines((lines) => {\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, lines: item.lines.concat(lines.map((text) => ({ type: LineType.stderr, text }))) });\n });\n queue.defer(oo.bind(null, cp.stderr.pipe(outputs.stderr), ['error', 'end', 'close', 'finish']));\n }\n queue.defer(spawn.worker.bind(null, cp, { ...csOptions, encoding: 'utf8' }));\n queue.await((err) => {\n const res = (err ? err : {}) as SpawnResult;\n res.stdout = outputs.stdout ? outputs.stdout.output : null;\n res.stderr = outputs.stderr ? outputs.stderr.output : null;\n res.output = [res.stdout, res.stderr, null];\n const item = store.getState().processes.find((x) => x.id === id);\n store.getState().updateProcess({ ...item, state: err ? 'error' : 'success' });\n\n // let rendering complete\n setTimeout(() => {\n terminal.release();\n err ? callback(err) : callback(null, res);\n });\n });\n });\n } else {\n const cp = crossSpawn(command, args, csOptions);\n const outputs = { stdout: null, stderr: null };\n\n const queue = new Queue();\n if (cp.stdout) {\n outputs.stdout = concatWritable((output) => {\n outputs.stdout.output = output.toString(encoding || 'utf8');\n });\n queue.defer(oo.bind(null, cp.stdout.pipe(outputs.stdout), ['error', 'end', 'close', 'finish']));\n }\n if (cp.stderr) {\n outputs.stderr = concatWritable((output) => {\n outputs.stderr.output = output.toString(encoding || 'utf8');\n });\n queue.defer(oo.bind(null, cp.stderr.pipe(outputs.stderr), ['error', 'end', 'close', 'finish']));\n }\n queue.defer(spawn.worker.bind(null, cp, { ...csOptions, encoding: encoding || 'utf8' }));\n queue.await((err) => {\n const res = (err ? err : {}) as SpawnResult;\n res.stdout = outputs.stdout ? outputs.stdout.output : null;\n res.stderr = outputs.stderr ? outputs.stderr.output : null;\n res.output = [res.stdout, res.stderr, null];\n err ? callback(err) : callback(null, res);\n });\n }\n}\n"],"names":["spawn","crossSpawn","uuid","oo","Queue","createApp","addLines","concatWritable","formatArguments","LineType","terminal","spawnTerminal","command","args","spawnOptions","options","callback","encoding","stdio","csOptions","retain","store","id","getState","addProcess","title","concat","join","state","lines","cp","outputs","stdout","stderr","queue","item","processes","find","x","updateProcess","map","text","type","defer","bind","pipe","worker","await","err","res","output","setTimeout","release","toString"],"mappings":"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"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -3,12 +3,12 @@ export type TerminalOptions = {
|
|
|
3
3
|
group?: string;
|
|
4
4
|
expanded?: string;
|
|
5
5
|
};
|
|
6
|
-
export declare enum
|
|
6
|
+
export declare enum LineType {
|
|
7
7
|
stdout = 1,
|
|
8
8
|
stderr = 2
|
|
9
9
|
}
|
|
10
|
-
export type
|
|
11
|
-
type:
|
|
10
|
+
export type Line = {
|
|
11
|
+
type: LineType;
|
|
12
12
|
text: string;
|
|
13
13
|
};
|
|
14
14
|
export type State = 'running' | 'error' | 'success';
|
|
@@ -17,7 +17,7 @@ export type ChildProcess = {
|
|
|
17
17
|
group?: string;
|
|
18
18
|
title: string;
|
|
19
19
|
state: State;
|
|
20
|
-
|
|
20
|
+
lines: Line[];
|
|
21
21
|
expanded?: string;
|
|
22
22
|
};
|
|
23
23
|
export interface AppState {
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
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/esm/lib/addData.mjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
File without changes
|