@take-out/cli 0.1.10 → 0.1.12
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/utils/parallel-runner.cjs +24 -3
- package/dist/cjs/utils/parallel-runner.js +27 -3
- package/dist/cjs/utils/parallel-runner.js.map +1 -1
- package/dist/esm/utils/parallel-runner.js +27 -3
- package/dist/esm/utils/parallel-runner.js.map +1 -1
- package/dist/esm/utils/parallel-runner.mjs +24 -3
- package/dist/esm/utils/parallel-runner.mjs.map +1 -1
- package/package.json +3 -3
- package/src/utils/parallel-runner.ts +42 -1
- package/types/utils/parallel-runner.d.ts.map +1 -1
|
@@ -47,6 +47,25 @@ function isBunShellNoise(line) {
|
|
|
47
47
|
// source code lines like "24 | await $`..."
|
|
48
48
|
/^\s*\^$/.test(stripped);
|
|
49
49
|
}
|
|
50
|
+
const spawnedProcesses = [];
|
|
51
|
+
let cleaning = !1;
|
|
52
|
+
function killAllProcessGroups(signal = "SIGTERM") {
|
|
53
|
+
for (const proc of spawnedProcesses) if (proc.pid) try {
|
|
54
|
+
process.kill(-proc.pid, signal);
|
|
55
|
+
} catch {
|
|
56
|
+
try {
|
|
57
|
+
process.kill(proc.pid, signal);
|
|
58
|
+
} catch {}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function cleanupAndExit() {
|
|
62
|
+
cleaning || (cleaning = !0, process.stdout.write(`
|
|
63
|
+
\x1B[0m`), killAllProcessGroups("SIGTERM"), setTimeout(() => {
|
|
64
|
+
killAllProcessGroups("SIGKILL"), process.exit(0);
|
|
65
|
+
}, 150));
|
|
66
|
+
}
|
|
67
|
+
process.on("SIGINT", cleanupAndExit);
|
|
68
|
+
process.on("SIGTERM", cleanupAndExit);
|
|
50
69
|
async function runScriptsInParallel(scripts, options = {}) {
|
|
51
70
|
const {
|
|
52
71
|
title,
|
|
@@ -83,23 +102,25 @@ function runSingleScript(script, colorIndex) {
|
|
|
83
102
|
},
|
|
84
103
|
detached: !0
|
|
85
104
|
});
|
|
105
|
+
spawnedProcesses.push(proc);
|
|
86
106
|
let stderrBuffer = "";
|
|
87
107
|
proc.stdout.on("data", data => {
|
|
108
|
+
if (cleaning) return;
|
|
88
109
|
const lines = data.toString().split(`
|
|
89
110
|
`);
|
|
90
111
|
for (const line of lines) line && console.info(`${color}${prefixLabel}${reset} ${line}`);
|
|
91
112
|
}), proc.stderr.on("data", data => {
|
|
92
113
|
const dataStr = data.toString();
|
|
93
|
-
stderrBuffer += dataStr;
|
|
114
|
+
if (stderrBuffer += dataStr, cleaning) return;
|
|
94
115
|
const lines = dataStr.split(`
|
|
95
116
|
`);
|
|
96
117
|
for (const line of lines) line && !isBunShellNoise(line) && console.error(`${color}${prefixLabel}${reset} ${line}`);
|
|
97
118
|
}), proc.on("error", error => {
|
|
98
119
|
console.error(`${color}${prefixLabel}${reset} Failed to start: ${error.message}`), reject(error);
|
|
99
120
|
}), proc.on("close", code => {
|
|
100
|
-
code && code !== 0 ? (stderrBuffer.includes("ShellError") || stderrBuffer.includes("at BunShell") || (console.error(`${color}${prefixLabel}${reset} Process exited with code ${code}`), stderrBuffer.trim() && (console.error(`
|
|
121
|
+
cleaning || (code && code !== 0 ? (stderrBuffer.includes("ShellError") || stderrBuffer.includes("at BunShell") || (console.error(`${color}${prefixLabel}${reset} Process exited with code ${code}`), stderrBuffer.trim() && (console.error(`
|
|
101
122
|
${color}${prefixLabel}${reset} Error output:`), console.error("\x1B[90m" + "\u2500".repeat(80) + "\x1B[0m"), console.error(stderrBuffer), console.error("\x1B[90m" + "\u2500".repeat(80) + `\x1B[0m
|
|
102
|
-
`))), reject(new Error(`Script ${prefixLabel} failed with code ${code}`))) : (console.info(`${color}${prefixLabel}${reset} \x1B[32m\u2713 completed${reset}`), resolve());
|
|
123
|
+
`))), reject(new Error(`Script ${prefixLabel} failed with code ${code}`))) : (console.info(`${color}${prefixLabel}${reset} \x1B[32m\u2713 completed${reset}`), resolve()));
|
|
103
124
|
});
|
|
104
125
|
});
|
|
105
126
|
}
|
|
@@ -39,6 +39,28 @@ function isBunShellNoise(line) {
|
|
|
39
39
|
return stripped.startsWith("ShellError:") || stripped.startsWith("exitCode:") || stripped.startsWith("stdout:") || stripped.startsWith("stderr:") || stripped.startsWith("at ShellPromise") || stripped.startsWith("at BunShell") || stripped.startsWith("Bun v") || /^\d+\s*\|/.test(stripped) || // source code lines like "24 | await $`..."
|
|
40
40
|
/^\s*\^$/.test(stripped);
|
|
41
41
|
}
|
|
42
|
+
const spawnedProcesses = [];
|
|
43
|
+
let cleaning = !1;
|
|
44
|
+
function killAllProcessGroups(signal = "SIGTERM") {
|
|
45
|
+
for (const proc of spawnedProcesses)
|
|
46
|
+
if (proc.pid)
|
|
47
|
+
try {
|
|
48
|
+
process.kill(-proc.pid, signal);
|
|
49
|
+
} catch {
|
|
50
|
+
try {
|
|
51
|
+
process.kill(proc.pid, signal);
|
|
52
|
+
} catch {
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
function cleanupAndExit() {
|
|
57
|
+
cleaning || (cleaning = !0, process.stdout.write(`
|
|
58
|
+
\x1B[0m`), killAllProcessGroups("SIGTERM"), setTimeout(() => {
|
|
59
|
+
killAllProcessGroups("SIGKILL"), process.exit(0);
|
|
60
|
+
}, 150));
|
|
61
|
+
}
|
|
62
|
+
process.on("SIGINT", cleanupAndExit);
|
|
63
|
+
process.on("SIGTERM", cleanupAndExit);
|
|
42
64
|
async function runScriptsInParallel(scripts, options = {}) {
|
|
43
65
|
const { title, onError = "exit", maxParallelism = (0, import_node_os.cpus)().length } = options;
|
|
44
66
|
title && (console.info(), console.info(title), console.info());
|
|
@@ -64,15 +86,17 @@ function runSingleScript(script, colorIndex) {
|
|
|
64
86
|
env: { ...process.env, FORCE_COLOR: "3" },
|
|
65
87
|
detached: !0
|
|
66
88
|
});
|
|
89
|
+
spawnedProcesses.push(proc);
|
|
67
90
|
let stderrBuffer = "";
|
|
68
91
|
proc.stdout.on("data", (data) => {
|
|
92
|
+
if (cleaning) return;
|
|
69
93
|
const lines = data.toString().split(`
|
|
70
94
|
`);
|
|
71
95
|
for (const line of lines)
|
|
72
96
|
line && console.info(`${color}${prefixLabel}${reset} ${line}`);
|
|
73
97
|
}), proc.stderr.on("data", (data) => {
|
|
74
98
|
const dataStr = data.toString();
|
|
75
|
-
stderrBuffer += dataStr;
|
|
99
|
+
if (stderrBuffer += dataStr, cleaning) return;
|
|
76
100
|
const lines = dataStr.split(`
|
|
77
101
|
`);
|
|
78
102
|
for (const line of lines)
|
|
@@ -80,9 +104,9 @@ function runSingleScript(script, colorIndex) {
|
|
|
80
104
|
}), proc.on("error", (error) => {
|
|
81
105
|
console.error(`${color}${prefixLabel}${reset} Failed to start: ${error.message}`), reject(error);
|
|
82
106
|
}), proc.on("close", (code) => {
|
|
83
|
-
code && code !== 0 ? (stderrBuffer.includes("ShellError") || stderrBuffer.includes("at BunShell") || (console.error(`${color}${prefixLabel}${reset} Process exited with code ${code}`), stderrBuffer.trim() && (console.error(`
|
|
107
|
+
cleaning || (code && code !== 0 ? (stderrBuffer.includes("ShellError") || stderrBuffer.includes("at BunShell") || (console.error(`${color}${prefixLabel}${reset} Process exited with code ${code}`), stderrBuffer.trim() && (console.error(`
|
|
84
108
|
${color}${prefixLabel}${reset} Error output:`), console.error("\x1B[90m" + "\u2500".repeat(80) + "\x1B[0m"), console.error(stderrBuffer), console.error("\x1B[90m" + "\u2500".repeat(80) + `\x1B[0m
|
|
85
|
-
`))), reject(new Error(`Script ${prefixLabel} failed with code ${code}`))) : (console.info(`${color}${prefixLabel}${reset} \x1B[32m\u2713 completed${reset}`), resolve());
|
|
109
|
+
`))), reject(new Error(`Script ${prefixLabel} failed with code ${code}`))) : (console.info(`${color}${prefixLabel}${reset} \x1B[32m\u2713 completed${reset}`), resolve()));
|
|
86
110
|
});
|
|
87
111
|
});
|
|
88
112
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/utils/parallel-runner.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -21,6 +21,28 @@ function isBunShellNoise(line) {
|
|
|
21
21
|
return stripped.startsWith("ShellError:") || stripped.startsWith("exitCode:") || stripped.startsWith("stdout:") || stripped.startsWith("stderr:") || stripped.startsWith("at ShellPromise") || stripped.startsWith("at BunShell") || stripped.startsWith("Bun v") || /^\d+\s*\|/.test(stripped) || // source code lines like "24 | await $`..."
|
|
22
22
|
/^\s*\^$/.test(stripped);
|
|
23
23
|
}
|
|
24
|
+
const spawnedProcesses = [];
|
|
25
|
+
let cleaning = !1;
|
|
26
|
+
function killAllProcessGroups(signal = "SIGTERM") {
|
|
27
|
+
for (const proc of spawnedProcesses)
|
|
28
|
+
if (proc.pid)
|
|
29
|
+
try {
|
|
30
|
+
process.kill(-proc.pid, signal);
|
|
31
|
+
} catch {
|
|
32
|
+
try {
|
|
33
|
+
process.kill(proc.pid, signal);
|
|
34
|
+
} catch {
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function cleanupAndExit() {
|
|
39
|
+
cleaning || (cleaning = !0, process.stdout.write(`
|
|
40
|
+
\x1B[0m`), killAllProcessGroups("SIGTERM"), setTimeout(() => {
|
|
41
|
+
killAllProcessGroups("SIGKILL"), process.exit(0);
|
|
42
|
+
}, 150));
|
|
43
|
+
}
|
|
44
|
+
process.on("SIGINT", cleanupAndExit);
|
|
45
|
+
process.on("SIGTERM", cleanupAndExit);
|
|
24
46
|
async function runScriptsInParallel(scripts, options = {}) {
|
|
25
47
|
const { title, onError = "exit", maxParallelism = cpus().length } = options;
|
|
26
48
|
title && (console.info(), console.info(title), console.info());
|
|
@@ -46,15 +68,17 @@ function runSingleScript(script, colorIndex) {
|
|
|
46
68
|
env: { ...process.env, FORCE_COLOR: "3" },
|
|
47
69
|
detached: !0
|
|
48
70
|
});
|
|
71
|
+
spawnedProcesses.push(proc);
|
|
49
72
|
let stderrBuffer = "";
|
|
50
73
|
proc.stdout.on("data", (data) => {
|
|
74
|
+
if (cleaning) return;
|
|
51
75
|
const lines = data.toString().split(`
|
|
52
76
|
`);
|
|
53
77
|
for (const line of lines)
|
|
54
78
|
line && console.info(`${color}${prefixLabel}${reset} ${line}`);
|
|
55
79
|
}), proc.stderr.on("data", (data) => {
|
|
56
80
|
const dataStr = data.toString();
|
|
57
|
-
stderrBuffer += dataStr;
|
|
81
|
+
if (stderrBuffer += dataStr, cleaning) return;
|
|
58
82
|
const lines = dataStr.split(`
|
|
59
83
|
`);
|
|
60
84
|
for (const line of lines)
|
|
@@ -62,9 +86,9 @@ function runSingleScript(script, colorIndex) {
|
|
|
62
86
|
}), proc.on("error", (error) => {
|
|
63
87
|
console.error(`${color}${prefixLabel}${reset} Failed to start: ${error.message}`), reject(error);
|
|
64
88
|
}), proc.on("close", (code) => {
|
|
65
|
-
code && code !== 0 ? (stderrBuffer.includes("ShellError") || stderrBuffer.includes("at BunShell") || (console.error(`${color}${prefixLabel}${reset} Process exited with code ${code}`), stderrBuffer.trim() && (console.error(`
|
|
89
|
+
cleaning || (code && code !== 0 ? (stderrBuffer.includes("ShellError") || stderrBuffer.includes("at BunShell") || (console.error(`${color}${prefixLabel}${reset} Process exited with code ${code}`), stderrBuffer.trim() && (console.error(`
|
|
66
90
|
${color}${prefixLabel}${reset} Error output:`), console.error("\x1B[90m" + "\u2500".repeat(80) + "\x1B[0m"), console.error(stderrBuffer), console.error("\x1B[90m" + "\u2500".repeat(80) + `\x1B[0m
|
|
67
|
-
`))), reject(new Error(`Script ${prefixLabel} failed with code ${code}`))) : (console.info(`${color}${prefixLabel}${reset} \x1B[32m\u2713 completed${reset}`), resolve());
|
|
91
|
+
`))), reject(new Error(`Script ${prefixLabel} failed with code ${code}`))) : (console.info(`${color}${prefixLabel}${reset} \x1B[32m\u2713 completed${reset}`), resolve()));
|
|
68
92
|
});
|
|
69
93
|
});
|
|
70
94
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/utils/parallel-runner.ts"],
|
|
4
|
-
"mappings": "AAIA,SAAS,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -22,6 +22,25 @@ function isBunShellNoise(line) {
|
|
|
22
22
|
// source code lines like "24 | await $`..."
|
|
23
23
|
/^\s*\^$/.test(stripped);
|
|
24
24
|
}
|
|
25
|
+
const spawnedProcesses = [];
|
|
26
|
+
let cleaning = !1;
|
|
27
|
+
function killAllProcessGroups(signal = "SIGTERM") {
|
|
28
|
+
for (const proc of spawnedProcesses) if (proc.pid) try {
|
|
29
|
+
process.kill(-proc.pid, signal);
|
|
30
|
+
} catch {
|
|
31
|
+
try {
|
|
32
|
+
process.kill(proc.pid, signal);
|
|
33
|
+
} catch {}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
function cleanupAndExit() {
|
|
37
|
+
cleaning || (cleaning = !0, process.stdout.write(`
|
|
38
|
+
\x1B[0m`), killAllProcessGroups("SIGTERM"), setTimeout(() => {
|
|
39
|
+
killAllProcessGroups("SIGKILL"), process.exit(0);
|
|
40
|
+
}, 150));
|
|
41
|
+
}
|
|
42
|
+
process.on("SIGINT", cleanupAndExit);
|
|
43
|
+
process.on("SIGTERM", cleanupAndExit);
|
|
25
44
|
async function runScriptsInParallel(scripts, options = {}) {
|
|
26
45
|
const {
|
|
27
46
|
title,
|
|
@@ -58,23 +77,25 @@ function runSingleScript(script, colorIndex) {
|
|
|
58
77
|
},
|
|
59
78
|
detached: !0
|
|
60
79
|
});
|
|
80
|
+
spawnedProcesses.push(proc);
|
|
61
81
|
let stderrBuffer = "";
|
|
62
82
|
proc.stdout.on("data", data => {
|
|
83
|
+
if (cleaning) return;
|
|
63
84
|
const lines = data.toString().split(`
|
|
64
85
|
`);
|
|
65
86
|
for (const line of lines) line && console.info(`${color}${prefixLabel}${reset} ${line}`);
|
|
66
87
|
}), proc.stderr.on("data", data => {
|
|
67
88
|
const dataStr = data.toString();
|
|
68
|
-
stderrBuffer += dataStr;
|
|
89
|
+
if (stderrBuffer += dataStr, cleaning) return;
|
|
69
90
|
const lines = dataStr.split(`
|
|
70
91
|
`);
|
|
71
92
|
for (const line of lines) line && !isBunShellNoise(line) && console.error(`${color}${prefixLabel}${reset} ${line}`);
|
|
72
93
|
}), proc.on("error", error => {
|
|
73
94
|
console.error(`${color}${prefixLabel}${reset} Failed to start: ${error.message}`), reject(error);
|
|
74
95
|
}), proc.on("close", code => {
|
|
75
|
-
code && code !== 0 ? (stderrBuffer.includes("ShellError") || stderrBuffer.includes("at BunShell") || (console.error(`${color}${prefixLabel}${reset} Process exited with code ${code}`), stderrBuffer.trim() && (console.error(`
|
|
96
|
+
cleaning || (code && code !== 0 ? (stderrBuffer.includes("ShellError") || stderrBuffer.includes("at BunShell") || (console.error(`${color}${prefixLabel}${reset} Process exited with code ${code}`), stderrBuffer.trim() && (console.error(`
|
|
76
97
|
${color}${prefixLabel}${reset} Error output:`), console.error("\x1B[90m" + "\u2500".repeat(80) + "\x1B[0m"), console.error(stderrBuffer), console.error("\x1B[90m" + "\u2500".repeat(80) + `\x1B[0m
|
|
77
|
-
`))), reject(new Error(`Script ${prefixLabel} failed with code ${code}`))) : (console.info(`${color}${prefixLabel}${reset} \x1B[32m\u2713 completed${reset}`), resolve());
|
|
98
|
+
`))), reject(new Error(`Script ${prefixLabel} failed with code ${code}`))) : (console.info(`${color}${prefixLabel}${reset} \x1B[32m\u2713 completed${reset}`), resolve()));
|
|
78
99
|
});
|
|
79
100
|
});
|
|
80
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["spawn","cpus","colors","reset","isBunShellNoise","line","stripped","replace","trim","startsWith","test","runScriptsInParallel","scripts","options","title","onError","maxParallelism","length","console","info","allPromises","executing","Set","i","script","scriptPromise","runSingleScript","finally","delete","push","add","size","Promise","race","failures","allSettled","filter","r","status","error","
|
|
1
|
+
{"version":3,"names":["spawn","cpus","colors","reset","isBunShellNoise","line","stripped","replace","trim","startsWith","test","spawnedProcesses","cleaning","killAllProcessGroups","signal","proc","pid","process","kill","cleanupAndExit","stdout","write","setTimeout","exit","on","runScriptsInParallel","scripts","options","title","onError","maxParallelism","length","console","info","allPromises","executing","Set","i","script","scriptPromise","runSingleScript","finally","delete","push","add","size","Promise","race","failures","allSettled","filter","r","status","error","colorIndex","resolve","reject","color","prefixLabel","name","path","args","stdio","shell","env","FORCE_COLOR","detached","stderrBuffer","data","lines","toString","split","stderr","dataStr","message","code","includes","repeat","Error"],"sources":["../../../src/utils/parallel-runner.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@take-out/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"description": "CLI tools for Takeout starter kit - interactive onboarding and project setup",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -51,8 +51,8 @@
|
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"@clack/prompts": "^0.8.2",
|
|
54
|
-
"@take-out/docs": "0.1.
|
|
55
|
-
"@take-out/scripts": "0.1.
|
|
54
|
+
"@take-out/docs": "0.1.12",
|
|
55
|
+
"@take-out/scripts": "0.1.12",
|
|
56
56
|
"citty": "^0.1.6",
|
|
57
57
|
"picocolors": "^1.1.1"
|
|
58
58
|
},
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Utility for running scripts in parallel with color-coded output
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
import { spawn } from 'node:child_process'
|
|
5
|
+
import { spawn, type ChildProcess } from 'node:child_process'
|
|
6
6
|
import { cpus } from 'node:os'
|
|
7
7
|
|
|
8
8
|
const colors = [
|
|
@@ -40,6 +40,41 @@ interface ScriptToRun {
|
|
|
40
40
|
args?: string[]
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
+
// track all spawned processes for cleanup
|
|
44
|
+
const spawnedProcesses: ChildProcess[] = []
|
|
45
|
+
let cleaning = false
|
|
46
|
+
|
|
47
|
+
function killAllProcessGroups(signal: NodeJS.Signals = 'SIGTERM') {
|
|
48
|
+
for (const proc of spawnedProcesses) {
|
|
49
|
+
if (proc.pid) {
|
|
50
|
+
// negative pid kills the entire process group (detached: true makes them group leaders)
|
|
51
|
+
try {
|
|
52
|
+
process.kill(-proc.pid, signal)
|
|
53
|
+
} catch (_) {
|
|
54
|
+
try {
|
|
55
|
+
process.kill(proc.pid, signal)
|
|
56
|
+
} catch (_) {}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function cleanupAndExit() {
|
|
63
|
+
if (cleaning) return
|
|
64
|
+
cleaning = true
|
|
65
|
+
|
|
66
|
+
process.stdout.write('\n\x1b[0m')
|
|
67
|
+
killAllProcessGroups('SIGTERM')
|
|
68
|
+
|
|
69
|
+
setTimeout(() => {
|
|
70
|
+
killAllProcessGroups('SIGKILL')
|
|
71
|
+
process.exit(0)
|
|
72
|
+
}, 150)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
process.on('SIGINT', cleanupAndExit)
|
|
76
|
+
process.on('SIGTERM', cleanupAndExit)
|
|
77
|
+
|
|
43
78
|
export async function runScriptsInParallel(
|
|
44
79
|
scripts: ScriptToRun[],
|
|
45
80
|
options: {
|
|
@@ -100,9 +135,12 @@ function runSingleScript(script: ScriptToRun, colorIndex: number): Promise<void>
|
|
|
100
135
|
detached: true,
|
|
101
136
|
})
|
|
102
137
|
|
|
138
|
+
spawnedProcesses.push(proc)
|
|
139
|
+
|
|
103
140
|
let stderrBuffer = ''
|
|
104
141
|
|
|
105
142
|
proc.stdout.on('data', (data) => {
|
|
143
|
+
if (cleaning) return
|
|
106
144
|
const lines = data.toString().split('\n')
|
|
107
145
|
for (const line of lines) {
|
|
108
146
|
if (line) console.info(`${color}${prefixLabel}${reset} ${line}`)
|
|
@@ -113,6 +151,7 @@ function runSingleScript(script: ScriptToRun, colorIndex: number): Promise<void>
|
|
|
113
151
|
const dataStr = data.toString()
|
|
114
152
|
stderrBuffer += dataStr
|
|
115
153
|
|
|
154
|
+
if (cleaning) return
|
|
116
155
|
const lines = dataStr.split('\n')
|
|
117
156
|
for (const line of lines) {
|
|
118
157
|
if (line && !isBunShellNoise(line)) {
|
|
@@ -127,6 +166,8 @@ function runSingleScript(script: ScriptToRun, colorIndex: number): Promise<void>
|
|
|
127
166
|
})
|
|
128
167
|
|
|
129
168
|
proc.on('close', (code) => {
|
|
169
|
+
if (cleaning) return
|
|
170
|
+
|
|
130
171
|
if (code && code !== 0) {
|
|
131
172
|
// detect if this was a bun shell error (already printed inline)
|
|
132
173
|
// check for ShellError or the bun shell stack trace pattern
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallel-runner.d.ts","sourceRoot":"","sources":["../../src/utils/parallel-runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkCH,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;
|
|
1
|
+
{"version":3,"file":"parallel-runner.d.ts","sourceRoot":"","sources":["../../src/utils/parallel-runner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAkCH,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAqCD,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,GAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,UAAU,GAAG,MAAM,CAAA;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAA;CACnB,GACL,OAAO,CAAC,IAAI,CAAC,CAuCf"}
|