spawn-term 0.1.34 → 0.1.36
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.
|
@@ -169,10 +169,14 @@ var Contracted = /*#__PURE__*/ (0, _react.memo)(function Contracted(param) {
|
|
|
169
169
|
lines
|
|
170
170
|
]);
|
|
171
171
|
var summary = (0, _react.useMemo)(function() {
|
|
172
|
-
|
|
172
|
+
var finished = data.length > 0 ? data[data.length - 1].text === null : false;
|
|
173
|
+
var summary = lines.filter(function(line) {
|
|
173
174
|
return line.text.length > 0 && errors.indexOf(line) < 0;
|
|
174
|
-
}).pop()
|
|
175
|
+
}).pop();
|
|
176
|
+
if (!summary && !finished) summary = DEFAULT_SUMMARY;
|
|
177
|
+
return summary;
|
|
175
178
|
}, [
|
|
179
|
+
data,
|
|
176
180
|
lines,
|
|
177
181
|
errors
|
|
178
182
|
]);
|
|
@@ -182,7 +186,7 @@ var Contracted = /*#__PURE__*/ (0, _react.memo)(function Contracted(param) {
|
|
|
182
186
|
group: item.group,
|
|
183
187
|
title: item.title,
|
|
184
188
|
state: item.state
|
|
185
|
-
}), state === 'running' && /*#__PURE__*/ _react.default.createElement(RunningSummary, {
|
|
189
|
+
}), state === 'running' && summary && /*#__PURE__*/ _react.default.createElement(RunningSummary, {
|
|
186
190
|
line: summary
|
|
187
191
|
}), errors.length > 0 && /*#__PURE__*/ _react.default.createElement(Lines, {
|
|
188
192
|
lines: errors
|
|
@@ -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, 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()
|
|
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(() => {\n const finished = data.length > 0 ? data[data.length - 1].text === null : false;\n let summary = lines.filter((line) => line.text.length > 0 && errors.indexOf(line) < 0).pop();\n if (!summary && !finished) summary = DEFAULT_SUMMARY;\n return summary;\n }, [data, 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","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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"}
|
|
@@ -95,7 +95,13 @@ const Contracted = /*#__PURE__*/ memo(function Contracted({ item }) {
|
|
|
95
95
|
const errors = useMemo(()=>lines.filter((line)=>line.type === DataType.stderr), [
|
|
96
96
|
lines
|
|
97
97
|
]);
|
|
98
|
-
const summary = useMemo(()=>
|
|
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,
|
|
99
105
|
lines,
|
|
100
106
|
errors
|
|
101
107
|
]);
|
|
@@ -105,7 +111,7 @@ const Contracted = /*#__PURE__*/ memo(function Contracted({ item }) {
|
|
|
105
111
|
group: item.group,
|
|
106
112
|
title: item.title,
|
|
107
113
|
state: item.state
|
|
108
|
-
}), state === 'running' && /*#__PURE__*/ React.createElement(RunningSummary, {
|
|
114
|
+
}), state === 'running' && summary && /*#__PURE__*/ React.createElement(RunningSummary, {
|
|
109
115
|
line: summary
|
|
110
116
|
}), errors.length > 0 && /*#__PURE__*/ React.createElement(Lines, {
|
|
111
117
|
lines: errors
|
|
@@ -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, 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()
|
|
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(() => {\n const finished = data.length > 0 ? data[data.length - 1].text === null : false;\n let summary = lines.filter((line) => line.text.length > 0 && errors.indexOf(line) < 0).pop();\n if (!summary && !finished) summary = DEFAULT_SUMMARY;\n return summary;\n }, [data, 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","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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"}
|