tubeless 0.1.0
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/LICENSE +21 -0
- package/README.md +106 -0
- package/dist/abort.d.ts +12 -0
- package/dist/abort.d.ts.map +1 -0
- package/dist/abort.js +49 -0
- package/dist/abort.js.map +1 -0
- package/dist/batch.d.ts +22 -0
- package/dist/batch.d.ts.map +1 -0
- package/dist/batch.js +73 -0
- package/dist/batch.js.map +1 -0
- package/dist/checkpoint.d.ts +33 -0
- package/dist/checkpoint.d.ts.map +1 -0
- package/dist/checkpoint.js +71 -0
- package/dist/checkpoint.js.map +1 -0
- package/dist/child-execution.d.ts +30 -0
- package/dist/child-execution.d.ts.map +1 -0
- package/dist/child-execution.js +270 -0
- package/dist/child-execution.js.map +1 -0
- package/dist/cli-command.d.ts +29 -0
- package/dist/cli-command.d.ts.map +1 -0
- package/dist/cli-command.js +314 -0
- package/dist/cli-command.js.map +1 -0
- package/dist/cli-parser.d.ts +28 -0
- package/dist/cli-parser.d.ts.map +1 -0
- package/dist/cli-parser.js +557 -0
- package/dist/cli-parser.js.map +1 -0
- package/dist/cli-pipeline-command.d.ts +84 -0
- package/dist/cli-pipeline-command.d.ts.map +1 -0
- package/dist/cli-pipeline-command.js +185 -0
- package/dist/cli-pipeline-command.js.map +1 -0
- package/dist/cli-types.d.ts +220 -0
- package/dist/cli-types.d.ts.map +1 -0
- package/dist/cli-types.js +19 -0
- package/dist/cli-types.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +6 -0
- package/dist/cli.js.map +1 -0
- package/dist/env.d.ts +2 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +8 -0
- package/dist/env.js.map +1 -0
- package/dist/file-utils.d.ts +4 -0
- package/dist/file-utils.d.ts.map +1 -0
- package/dist/file-utils.js +35 -0
- package/dist/file-utils.js.map +1 -0
- package/dist/interactive-reporter.d.ts +38 -0
- package/dist/interactive-reporter.d.ts.map +1 -0
- package/dist/interactive-reporter.js +308 -0
- package/dist/interactive-reporter.js.map +1 -0
- package/dist/lifecycle.d.ts +17 -0
- package/dist/lifecycle.d.ts.map +1 -0
- package/dist/lifecycle.js +77 -0
- package/dist/lifecycle.js.map +1 -0
- package/dist/live-ticker.d.ts +21 -0
- package/dist/live-ticker.d.ts.map +1 -0
- package/dist/live-ticker.js +377 -0
- package/dist/live-ticker.js.map +1 -0
- package/dist/mapped-child-progress.d.ts +109 -0
- package/dist/mapped-child-progress.d.ts.map +1 -0
- package/dist/mapped-child-progress.js +133 -0
- package/dist/mapped-child-progress.js.map +1 -0
- package/dist/node.d.ts +5 -0
- package/dist/node.d.ts.map +1 -0
- package/dist/node.js +5 -0
- package/dist/node.js.map +1 -0
- package/dist/paths.d.ts +9 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +19 -0
- package/dist/paths.js.map +1 -0
- package/dist/pipeline-command-marker.d.ts +5 -0
- package/dist/pipeline-command-marker.d.ts.map +1 -0
- package/dist/pipeline-command-marker.js +21 -0
- package/dist/pipeline-command-marker.js.map +1 -0
- package/dist/pipeline-diagnostics.d.ts +4 -0
- package/dist/pipeline-diagnostics.d.ts.map +1 -0
- package/dist/pipeline-diagnostics.js +17 -0
- package/dist/pipeline-diagnostics.js.map +1 -0
- package/dist/pipeline-module.d.ts +62 -0
- package/dist/pipeline-module.d.ts.map +1 -0
- package/dist/pipeline-module.js +157 -0
- package/dist/pipeline-module.js.map +1 -0
- package/dist/pipeline.d.ts +606 -0
- package/dist/pipeline.d.ts.map +1 -0
- package/dist/pipeline.js +1444 -0
- package/dist/pipeline.js.map +1 -0
- package/dist/progress.d.ts +4 -0
- package/dist/progress.d.ts.map +1 -0
- package/dist/progress.js +8 -0
- package/dist/progress.js.map +1 -0
- package/dist/prompt-select.d.ts +81 -0
- package/dist/prompt-select.d.ts.map +1 -0
- package/dist/prompt-select.js +197 -0
- package/dist/prompt-select.js.map +1 -0
- package/dist/rate-limit.d.ts +7 -0
- package/dist/rate-limit.d.ts.map +1 -0
- package/dist/rate-limit.js +23 -0
- package/dist/rate-limit.js.map +1 -0
- package/dist/render.d.ts +21 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +60 -0
- package/dist/render.js.map +1 -0
- package/dist/reporter-entry.d.ts +3 -0
- package/dist/reporter-entry.d.ts.map +1 -0
- package/dist/reporter-entry.js +3 -0
- package/dist/reporter-entry.js.map +1 -0
- package/dist/reporter.d.ts +50 -0
- package/dist/reporter.d.ts.map +1 -0
- package/dist/reporter.js +167 -0
- package/dist/reporter.js.map +1 -0
- package/dist/retry.d.ts +28 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +59 -0
- package/dist/retry.js.map +1 -0
- package/dist/run-store-sqlite.d.ts +12 -0
- package/dist/run-store-sqlite.d.ts.map +1 -0
- package/dist/run-store-sqlite.js +187 -0
- package/dist/run-store-sqlite.js.map +1 -0
- package/dist/run-store-ui-http.d.ts +5 -0
- package/dist/run-store-ui-http.d.ts.map +1 -0
- package/dist/run-store-ui-http.js +19 -0
- package/dist/run-store-ui-http.js.map +1 -0
- package/dist/run-store-ui-page.d.ts +2 -0
- package/dist/run-store-ui-page.d.ts.map +1 -0
- package/dist/run-store-ui-page.js +759 -0
- package/dist/run-store-ui-page.js.map +1 -0
- package/dist/run-store-ui-protocol.d.ts +28 -0
- package/dist/run-store-ui-protocol.d.ts.map +1 -0
- package/dist/run-store-ui-protocol.js +84 -0
- package/dist/run-store-ui-protocol.js.map +1 -0
- package/dist/run-store-ui-state.d.ts +21 -0
- package/dist/run-store-ui-state.d.ts.map +1 -0
- package/dist/run-store-ui-state.js +65 -0
- package/dist/run-store-ui-state.js.map +1 -0
- package/dist/run-store-ui.d.ts +25 -0
- package/dist/run-store-ui.d.ts.map +1 -0
- package/dist/run-store-ui.js +217 -0
- package/dist/run-store-ui.js.map +1 -0
- package/dist/run-store.d.ts +109 -0
- package/dist/run-store.d.ts.map +1 -0
- package/dist/run-store.js +345 -0
- package/dist/run-store.js.map +1 -0
- package/dist/testing.d.ts +40 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +83 -0
- package/dist/testing.js.map +1 -0
- package/dist/tracing-internal.d.ts +21 -0
- package/dist/tracing-internal.d.ts.map +1 -0
- package/dist/tracing-internal.js +206 -0
- package/dist/tracing-internal.js.map +1 -0
- package/dist/tracing-json.d.ts +12 -0
- package/dist/tracing-json.d.ts.map +1 -0
- package/dist/tracing-json.js +8 -0
- package/dist/tracing-json.js.map +1 -0
- package/dist/tracing-otel.d.ts +36 -0
- package/dist/tracing-otel.d.ts.map +1 -0
- package/dist/tracing-otel.js +60 -0
- package/dist/tracing-otel.js.map +1 -0
- package/dist/tracing.d.ts +48 -0
- package/dist/tracing.d.ts.map +1 -0
- package/dist/tracing.js +2 -0
- package/dist/tracing.js.map +1 -0
- package/dist/workbench-bin.d.ts +3 -0
- package/dist/workbench-bin.d.ts.map +1 -0
- package/dist/workbench-bin.js +8 -0
- package/dist/workbench-bin.js.map +1 -0
- package/dist/workbench-graph.d.ts +3 -0
- package/dist/workbench-graph.d.ts.map +1 -0
- package/dist/workbench-graph.js +64 -0
- package/dist/workbench-graph.js.map +1 -0
- package/dist/workbench-inspect.d.ts +3 -0
- package/dist/workbench-inspect.d.ts.map +1 -0
- package/dist/workbench-inspect.js +65 -0
- package/dist/workbench-inspect.js.map +1 -0
- package/dist/workbench-plan.d.ts +3 -0
- package/dist/workbench-plan.d.ts.map +1 -0
- package/dist/workbench-plan.js +72 -0
- package/dist/workbench-plan.js.map +1 -0
- package/dist/workbench-run.d.ts +13 -0
- package/dist/workbench-run.d.ts.map +1 -0
- package/dist/workbench-run.js +115 -0
- package/dist/workbench-run.js.map +1 -0
- package/dist/workbench-shared.d.ts +67 -0
- package/dist/workbench-shared.d.ts.map +1 -0
- package/dist/workbench-shared.js +163 -0
- package/dist/workbench-shared.js.map +1 -0
- package/dist/workbench-studio.d.ts +26 -0
- package/dist/workbench-studio.d.ts.map +1 -0
- package/dist/workbench-studio.js +57 -0
- package/dist/workbench-studio.js.map +1 -0
- package/dist/workbench-ui.d.ts +3 -0
- package/dist/workbench-ui.d.ts.map +1 -0
- package/dist/workbench-ui.js +262 -0
- package/dist/workbench-ui.js.map +1 -0
- package/dist/workbench.d.ts +5 -0
- package/dist/workbench.d.ts.map +1 -0
- package/dist/workbench.js +43 -0
- package/dist/workbench.js.map +1 -0
- package/docs/README.md +31 -0
- package/docs/agent-guide.md +168 -0
- package/docs/api-reference.md +269 -0
- package/docs/api-report.json +298 -0
- package/docs/child-pipeline-composition.md +185 -0
- package/docs/cli.md +118 -0
- package/docs/concepts.md +502 -0
- package/docs/getting-started.md +162 -0
- package/docs/llms.txt +62 -0
- package/docs/recipes.md +51 -0
- package/docs/studio.md +86 -0
- package/examples/best-effort.ts +42 -0
- package/examples/cancellation-and-testing.ts +45 -0
- package/examples/child-pipeline.ts +51 -0
- package/examples/cli-job.ts +86 -0
- package/examples/conditional-step.ts +41 -0
- package/examples/fan-out-progress.ts +53 -0
- package/examples/local-observability.ts +80 -0
- package/examples/publish-with-gates.ts +56 -0
- package/examples/rendering.ts +34 -0
- package/examples/resumable-enrichment.ts +75 -0
- package/examples/tracing.ts +35 -0
- package/examples/tsconfig.json +15 -0
- package/examples/typed-import.ts +54 -0
- package/examples/validated-boundaries.ts +75 -0
- package/package.json +156 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
import { writeSync } from "node:fs";
|
|
2
|
+
import { Worker } from "node:worker_threads";
|
|
3
|
+
import { formatDurationMs } from "./reporter.js";
|
|
4
|
+
export const SPINNER_TOKEN = "\u0001";
|
|
5
|
+
export const ELAPSED_TOKEN_START = "\u0002";
|
|
6
|
+
export const ELAPSED_TOKEN_END = "\u0003";
|
|
7
|
+
const ANSI = {
|
|
8
|
+
clearDown: "\u001B[J",
|
|
9
|
+
hideCursor: "\u001B[?25l",
|
|
10
|
+
reset: "\u001B[0m",
|
|
11
|
+
showCursor: "\u001B[?25h",
|
|
12
|
+
};
|
|
13
|
+
const ANSI_STYLE = /\u001B\[[0-9;]*m/g;
|
|
14
|
+
const ANSI_STYLE_PREFIX = /^\u001B\[[0-9;]*m/;
|
|
15
|
+
const COMBINING_MARK = /\p{Mark}/u;
|
|
16
|
+
const EMOJI = /\p{Extended_Pictographic}/u;
|
|
17
|
+
const SPINNERS = {
|
|
18
|
+
ascii: ["-", "\\", "|", "/"],
|
|
19
|
+
unicode: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
|
|
20
|
+
};
|
|
21
|
+
function characterWidth(character) {
|
|
22
|
+
if (COMBINING_MARK.test(character) || character === "\u200D")
|
|
23
|
+
return 0;
|
|
24
|
+
if (EMOJI.test(character))
|
|
25
|
+
return 2;
|
|
26
|
+
const codePoint = character.codePointAt(0) ?? 0;
|
|
27
|
+
return codePoint >= 0x1100 &&
|
|
28
|
+
(codePoint <= 0x115f ||
|
|
29
|
+
codePoint === 0x2329 ||
|
|
30
|
+
codePoint === 0x232a ||
|
|
31
|
+
(codePoint >= 0x2e80 && codePoint <= 0xa4cf) ||
|
|
32
|
+
(codePoint >= 0xac00 && codePoint <= 0xd7a3) ||
|
|
33
|
+
(codePoint >= 0xf900 && codePoint <= 0xfaff) ||
|
|
34
|
+
(codePoint >= 0xfe10 && codePoint <= 0xfe6f) ||
|
|
35
|
+
(codePoint >= 0xff00 && codePoint <= 0xff60) ||
|
|
36
|
+
(codePoint >= 0xffe0 && codePoint <= 0xffe6) ||
|
|
37
|
+
(codePoint >= 0x20000 && codePoint <= 0x3fffd))
|
|
38
|
+
? 2
|
|
39
|
+
: 1;
|
|
40
|
+
}
|
|
41
|
+
function visibleWidth(value) {
|
|
42
|
+
return [...value].reduce((width, character) => width + characterWidth(character), 0);
|
|
43
|
+
}
|
|
44
|
+
function fitLine(value, columns) {
|
|
45
|
+
if (!columns || columns <= 1)
|
|
46
|
+
return value;
|
|
47
|
+
const maxWidth = columns - 1;
|
|
48
|
+
const plain = value.replace(ANSI_STYLE, "");
|
|
49
|
+
if (visibleWidth(plain) <= maxWidth)
|
|
50
|
+
return value;
|
|
51
|
+
const targetWidth = Math.max(0, maxWidth - 1);
|
|
52
|
+
let width = 0;
|
|
53
|
+
let truncated = "";
|
|
54
|
+
let index = 0;
|
|
55
|
+
let hasStyle = false;
|
|
56
|
+
while (index < value.length) {
|
|
57
|
+
const style = value.slice(index).match(ANSI_STYLE_PREFIX)?.[0];
|
|
58
|
+
if (style) {
|
|
59
|
+
truncated += style;
|
|
60
|
+
index += style.length;
|
|
61
|
+
hasStyle = true;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const character = String.fromCodePoint(value.codePointAt(index) ?? 0);
|
|
65
|
+
const nextWidth = width + characterWidth(character);
|
|
66
|
+
if (nextWidth > targetWidth)
|
|
67
|
+
break;
|
|
68
|
+
truncated += character;
|
|
69
|
+
width = nextWidth;
|
|
70
|
+
index += character.length;
|
|
71
|
+
}
|
|
72
|
+
return `${truncated}${hasStyle ? ANSI.reset : ""}…`;
|
|
73
|
+
}
|
|
74
|
+
export function elapsedToken(startedAtMs) {
|
|
75
|
+
return `${ELAPSED_TOKEN_START}${startedAtMs}${ELAPSED_TOKEN_END}`;
|
|
76
|
+
}
|
|
77
|
+
export function paintLiveLines(lines, spinner, nowMs, columns) {
|
|
78
|
+
return lines.map((line) => fitLine(line
|
|
79
|
+
.replaceAll(SPINNER_TOKEN, spinner)
|
|
80
|
+
.replace(new RegExp(`${ELAPSED_TOKEN_START}(\\d+)${ELAPSED_TOKEN_END}`, "g"), (_match, start) => formatDurationMs(Math.max(0, nowMs - Number(start)))), columns));
|
|
81
|
+
}
|
|
82
|
+
function resolveColumns(options) {
|
|
83
|
+
return options.getColumns?.() ?? options.columns;
|
|
84
|
+
}
|
|
85
|
+
function currentSpinner(unicode, refreshIntervalMs) {
|
|
86
|
+
const frames = unicode ? SPINNERS.unicode : SPINNERS.ascii;
|
|
87
|
+
return frames[Math.floor(Date.now() / refreshIntervalMs) % frames.length] ?? frames[0];
|
|
88
|
+
}
|
|
89
|
+
function createInlineTicker(options) {
|
|
90
|
+
const state = {
|
|
91
|
+
cursorHidden: false,
|
|
92
|
+
disposed: false,
|
|
93
|
+
frameLineCount: 0,
|
|
94
|
+
lines: [],
|
|
95
|
+
};
|
|
96
|
+
const write = (chunk) => {
|
|
97
|
+
options.write(chunk);
|
|
98
|
+
};
|
|
99
|
+
const hideCursor = () => {
|
|
100
|
+
if (state.cursorHidden)
|
|
101
|
+
return;
|
|
102
|
+
write(ANSI.hideCursor);
|
|
103
|
+
state.cursorHidden = true;
|
|
104
|
+
};
|
|
105
|
+
const showCursor = () => {
|
|
106
|
+
if (!state.cursorHidden)
|
|
107
|
+
return;
|
|
108
|
+
write(ANSI.showCursor);
|
|
109
|
+
state.cursorHidden = false;
|
|
110
|
+
};
|
|
111
|
+
const clearFrame = () => {
|
|
112
|
+
if (state.frameLineCount === 0)
|
|
113
|
+
return;
|
|
114
|
+
write(`\u001B[${state.frameLineCount}F${ANSI.clearDown}`);
|
|
115
|
+
state.frameLineCount = 0;
|
|
116
|
+
};
|
|
117
|
+
const redraw = () => {
|
|
118
|
+
if (state.disposed)
|
|
119
|
+
return;
|
|
120
|
+
hideCursor();
|
|
121
|
+
clearFrame();
|
|
122
|
+
if (state.lines.length === 0)
|
|
123
|
+
return;
|
|
124
|
+
const painted = paintLiveLines(state.lines, currentSpinner(options.unicode, options.refreshIntervalMs), Date.now(), resolveColumns(options));
|
|
125
|
+
write(`${painted.join("\n")}\n`);
|
|
126
|
+
state.frameLineCount = painted.length;
|
|
127
|
+
};
|
|
128
|
+
const timer = setInterval(() => {
|
|
129
|
+
if (state.disposed || !state.lines.some((line) => line.includes(SPINNER_TOKEN)))
|
|
130
|
+
return;
|
|
131
|
+
redraw();
|
|
132
|
+
}, options.refreshIntervalMs);
|
|
133
|
+
return {
|
|
134
|
+
setLines(lines) {
|
|
135
|
+
state.lines = lines;
|
|
136
|
+
redraw();
|
|
137
|
+
},
|
|
138
|
+
writeLog(text) {
|
|
139
|
+
if (state.disposed) {
|
|
140
|
+
write(text);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
clearFrame();
|
|
144
|
+
write(text);
|
|
145
|
+
state.frameLineCount = 0;
|
|
146
|
+
},
|
|
147
|
+
dispose() {
|
|
148
|
+
if (state.disposed)
|
|
149
|
+
return;
|
|
150
|
+
state.disposed = true;
|
|
151
|
+
clearInterval(timer);
|
|
152
|
+
showCursor();
|
|
153
|
+
},
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
// CJS eval worker: paints independently of the pipeline thread.
|
|
157
|
+
const WORKER_SOURCE = `
|
|
158
|
+
const { parentPort, workerData } = require("node:worker_threads");
|
|
159
|
+
const { writeSync } = require("node:fs");
|
|
160
|
+
const ANSI = {
|
|
161
|
+
clearDown: "\\u001B[J",
|
|
162
|
+
hideCursor: "\\u001B[?25l",
|
|
163
|
+
reset: "\\u001B[0m",
|
|
164
|
+
showCursor: "\\u001B[?25h",
|
|
165
|
+
};
|
|
166
|
+
const ANSI_STYLE = /\\u001B\\[[0-9;]*m/g;
|
|
167
|
+
const ANSI_STYLE_PREFIX = /^\\u001B\\[[0-9;]*m/;
|
|
168
|
+
const COMBINING_MARK = /\\p{Mark}/u;
|
|
169
|
+
const EMOJI = /\\p{Extended_Pictographic}/u;
|
|
170
|
+
const frames = workerData.unicode
|
|
171
|
+
? ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"]
|
|
172
|
+
: ["-", "\\\\", "|", "/"];
|
|
173
|
+
const handshake = new Int32Array(workerData.handshakeBuffer);
|
|
174
|
+
let columns = workerData.columns;
|
|
175
|
+
function characterWidth(character) {
|
|
176
|
+
if (COMBINING_MARK.test(character) || character === "\\u200D") return 0;
|
|
177
|
+
if (EMOJI.test(character)) return 2;
|
|
178
|
+
const codePoint = character.codePointAt(0) ?? 0;
|
|
179
|
+
return codePoint >= 0x1100 &&
|
|
180
|
+
(codePoint <= 0x115f ||
|
|
181
|
+
codePoint === 0x2329 ||
|
|
182
|
+
codePoint === 0x232a ||
|
|
183
|
+
(codePoint >= 0x2e80 && codePoint <= 0xa4cf) ||
|
|
184
|
+
(codePoint >= 0xac00 && codePoint <= 0xd7a3) ||
|
|
185
|
+
(codePoint >= 0xf900 && codePoint <= 0xfaff) ||
|
|
186
|
+
(codePoint >= 0xfe10 && codePoint <= 0xfe6f) ||
|
|
187
|
+
(codePoint >= 0xff00 && codePoint <= 0xff60) ||
|
|
188
|
+
(codePoint >= 0xffe0 && codePoint <= 0xffe6) ||
|
|
189
|
+
(codePoint >= 0x20000 && codePoint <= 0x3fffd))
|
|
190
|
+
? 2
|
|
191
|
+
: 1;
|
|
192
|
+
}
|
|
193
|
+
function visibleWidth(value) {
|
|
194
|
+
return [...value].reduce((width, character) => width + characterWidth(character), 0);
|
|
195
|
+
}
|
|
196
|
+
function fitLine(value, nextColumns) {
|
|
197
|
+
if (!nextColumns || nextColumns <= 1) return value;
|
|
198
|
+
const maxWidth = nextColumns - 1;
|
|
199
|
+
const plain = value.replace(ANSI_STYLE, "");
|
|
200
|
+
if (visibleWidth(plain) <= maxWidth) return value;
|
|
201
|
+
const targetWidth = Math.max(0, maxWidth - 1);
|
|
202
|
+
let width = 0;
|
|
203
|
+
let truncated = "";
|
|
204
|
+
let index = 0;
|
|
205
|
+
let hasStyle = false;
|
|
206
|
+
while (index < value.length) {
|
|
207
|
+
const style = value.slice(index).match(ANSI_STYLE_PREFIX)?.[0];
|
|
208
|
+
if (style) {
|
|
209
|
+
truncated += style;
|
|
210
|
+
index += style.length;
|
|
211
|
+
hasStyle = true;
|
|
212
|
+
continue;
|
|
213
|
+
}
|
|
214
|
+
const character = String.fromCodePoint(value.codePointAt(index) ?? 0);
|
|
215
|
+
const nextWidth = width + characterWidth(character);
|
|
216
|
+
if (nextWidth > targetWidth) break;
|
|
217
|
+
truncated += character;
|
|
218
|
+
width = nextWidth;
|
|
219
|
+
index += character.length;
|
|
220
|
+
}
|
|
221
|
+
return truncated + (hasStyle ? ANSI.reset : "") + "…";
|
|
222
|
+
}
|
|
223
|
+
function formatDurationMs(durationMs) {
|
|
224
|
+
const ms = Math.max(0, Math.round(durationMs));
|
|
225
|
+
if (ms < 1000) return ms + "ms";
|
|
226
|
+
if (ms < 60000) {
|
|
227
|
+
const seconds = ms / 1000;
|
|
228
|
+
return Number.isInteger(seconds) ? seconds + "s" : seconds.toFixed(1) + "s";
|
|
229
|
+
}
|
|
230
|
+
const minutes = Math.floor(ms / 60000);
|
|
231
|
+
const seconds = Math.round((ms % 60000) / 1000);
|
|
232
|
+
return seconds === 0 ? minutes + "m" : minutes + "m" + seconds + "s";
|
|
233
|
+
}
|
|
234
|
+
function paint(lines, spinner, nowMs) {
|
|
235
|
+
return lines.map((line) =>
|
|
236
|
+
fitLine(
|
|
237
|
+
line
|
|
238
|
+
.replaceAll("\\u0001", spinner)
|
|
239
|
+
.replace(/\\u0002(\\d+)\\u0003/g, (_, start) =>
|
|
240
|
+
formatDurationMs(Math.max(0, nowMs - Number(start)))
|
|
241
|
+
),
|
|
242
|
+
columns
|
|
243
|
+
)
|
|
244
|
+
);
|
|
245
|
+
}
|
|
246
|
+
let lines = [];
|
|
247
|
+
let frameLineCount = 0;
|
|
248
|
+
let cursorHidden = false;
|
|
249
|
+
function write(chunk) {
|
|
250
|
+
writeSync(workerData.fd, chunk);
|
|
251
|
+
}
|
|
252
|
+
function hideCursor() {
|
|
253
|
+
if (cursorHidden) return;
|
|
254
|
+
write(ANSI.hideCursor);
|
|
255
|
+
cursorHidden = true;
|
|
256
|
+
}
|
|
257
|
+
function showCursor() {
|
|
258
|
+
if (!cursorHidden) return;
|
|
259
|
+
write(ANSI.showCursor);
|
|
260
|
+
cursorHidden = false;
|
|
261
|
+
}
|
|
262
|
+
function clearFrame() {
|
|
263
|
+
if (frameLineCount === 0) return;
|
|
264
|
+
write("\\u001B[" + frameLineCount + "F" + ANSI.clearDown);
|
|
265
|
+
frameLineCount = 0;
|
|
266
|
+
}
|
|
267
|
+
function currentSpinner() {
|
|
268
|
+
return frames[Math.floor(Date.now() / workerData.refreshIntervalMs) % frames.length];
|
|
269
|
+
}
|
|
270
|
+
function redraw() {
|
|
271
|
+
hideCursor();
|
|
272
|
+
clearFrame();
|
|
273
|
+
if (lines.length === 0) return;
|
|
274
|
+
const painted = paint(lines, currentSpinner(), Date.now());
|
|
275
|
+
write(painted.join("\\n") + "\\n");
|
|
276
|
+
frameLineCount = painted.length;
|
|
277
|
+
}
|
|
278
|
+
function done() {
|
|
279
|
+
Atomics.store(handshake, 0, 1);
|
|
280
|
+
Atomics.notify(handshake, 0);
|
|
281
|
+
}
|
|
282
|
+
const timer = setInterval(() => {
|
|
283
|
+
if (!lines.some((line) => line.includes("\\u0001"))) return;
|
|
284
|
+
redraw();
|
|
285
|
+
}, workerData.refreshIntervalMs);
|
|
286
|
+
parentPort.on("message", (msg) => {
|
|
287
|
+
if (msg.columns !== undefined) columns = msg.columns;
|
|
288
|
+
if (msg.type === "lines") {
|
|
289
|
+
lines = msg.lines;
|
|
290
|
+
redraw();
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
if (msg.type === "log") {
|
|
294
|
+
clearFrame();
|
|
295
|
+
write(msg.text);
|
|
296
|
+
frameLineCount = 0;
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
if (msg.type === "stop") {
|
|
300
|
+
clearInterval(timer);
|
|
301
|
+
if (msg.lines) lines = msg.lines;
|
|
302
|
+
redraw();
|
|
303
|
+
showCursor();
|
|
304
|
+
done();
|
|
305
|
+
parentPort.close();
|
|
306
|
+
}
|
|
307
|
+
});
|
|
308
|
+
`;
|
|
309
|
+
function createWorkerTicker(options) {
|
|
310
|
+
const handshakeBuffer = new SharedArrayBuffer(4);
|
|
311
|
+
const handshake = new Int32Array(handshakeBuffer);
|
|
312
|
+
const worker = new Worker(WORKER_SOURCE, {
|
|
313
|
+
eval: true,
|
|
314
|
+
workerData: {
|
|
315
|
+
columns: resolveColumns(options),
|
|
316
|
+
fd: options.fd,
|
|
317
|
+
handshakeBuffer,
|
|
318
|
+
refreshIntervalMs: options.refreshIntervalMs,
|
|
319
|
+
unicode: options.unicode,
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
let disposed = false;
|
|
323
|
+
let lines = [];
|
|
324
|
+
const send = (message) => {
|
|
325
|
+
if (disposed)
|
|
326
|
+
return;
|
|
327
|
+
worker.postMessage(message);
|
|
328
|
+
};
|
|
329
|
+
return {
|
|
330
|
+
setLines(nextLines) {
|
|
331
|
+
lines = nextLines;
|
|
332
|
+
send({ columns: resolveColumns(options), lines: [...nextLines], type: "lines" });
|
|
333
|
+
},
|
|
334
|
+
writeLog(text) {
|
|
335
|
+
if (disposed) {
|
|
336
|
+
writeSync(options.fd, text);
|
|
337
|
+
return;
|
|
338
|
+
}
|
|
339
|
+
send({ text, type: "log" });
|
|
340
|
+
},
|
|
341
|
+
dispose() {
|
|
342
|
+
if (disposed)
|
|
343
|
+
return;
|
|
344
|
+
disposed = true;
|
|
345
|
+
Atomics.store(handshake, 0, 0);
|
|
346
|
+
worker.postMessage({
|
|
347
|
+
columns: resolveColumns(options),
|
|
348
|
+
lines: [...lines],
|
|
349
|
+
type: "stop",
|
|
350
|
+
});
|
|
351
|
+
Atomics.wait(handshake, 0, 0, 500);
|
|
352
|
+
try {
|
|
353
|
+
writeSync(options.fd, ANSI.showCursor);
|
|
354
|
+
}
|
|
355
|
+
catch {
|
|
356
|
+
// Stream may already be closed; cursor restore is best-effort.
|
|
357
|
+
}
|
|
358
|
+
void worker.terminate();
|
|
359
|
+
},
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
function outputFd(fd) {
|
|
363
|
+
return fd !== undefined && Number.isInteger(fd) && fd >= 0;
|
|
364
|
+
}
|
|
365
|
+
/** Inline interval for tests; worker thread when `fd` is a real TTY/pipe. */
|
|
366
|
+
export function createLiveTicker(options) {
|
|
367
|
+
if (outputFd(options.fd)) {
|
|
368
|
+
try {
|
|
369
|
+
return createWorkerTicker({ ...options, fd: options.fd });
|
|
370
|
+
}
|
|
371
|
+
catch {
|
|
372
|
+
// Worker threads are unavailable in some embeddings; fall back.
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
return createInlineTicker(options);
|
|
376
|
+
}
|
|
377
|
+
//# sourceMappingURL=live-ticker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-ticker.js","sourceRoot":"","sources":["../src/live-ticker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Live state for a `forEachPipeline` fan-out. Domain-agnostic: items can be
|
|
3
|
+
* shards, URLs, files, jobs, or anything else the parent maps over.
|
|
4
|
+
*
|
|
5
|
+
* Kept free of pipeline runtime imports so this module is safe to share with
|
|
6
|
+
* tests, CLIs, and domain packages without circular dependencies.
|
|
7
|
+
*/
|
|
8
|
+
export interface MappedChildProgressSnapshot {
|
|
9
|
+
/** Item key → short status label for currently in-flight children. */
|
|
10
|
+
readonly active: ReadonlyMap<string, string>;
|
|
11
|
+
/** Configured concurrency bound for the fan-out. */
|
|
12
|
+
readonly concurrency: number;
|
|
13
|
+
readonly failedItems: number;
|
|
14
|
+
readonly finishedItems: number;
|
|
15
|
+
readonly itemCount: number;
|
|
16
|
+
/**
|
|
17
|
+
* Maximum selected child steps per item seen so far. This is retained for
|
|
18
|
+
* compatibility with callers that provide uniform plans; exact fan-out
|
|
19
|
+
* totals use `plannedChildSteps` once every item plan is known.
|
|
20
|
+
*/
|
|
21
|
+
readonly stepsPerItem: number;
|
|
22
|
+
/** Total selected child steps across the item plans discovered so far. */
|
|
23
|
+
readonly plannedChildSteps?: number;
|
|
24
|
+
/** Number of item plans included in `plannedChildSteps`. */
|
|
25
|
+
readonly plannedItems?: number;
|
|
26
|
+
/** Cumulative terminal child steps across all items. */
|
|
27
|
+
readonly terminalChildSteps: number;
|
|
28
|
+
/** Optional one-off note (e.g. the item that just finished or failed). */
|
|
29
|
+
readonly spotlight?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface MappedChildProgressUnits {
|
|
32
|
+
completed: number;
|
|
33
|
+
total: number;
|
|
34
|
+
}
|
|
35
|
+
/** Shape-compatible with `PipelineStepProgressDetail` without importing the runtime. */
|
|
36
|
+
export interface MappedChildProgressDetail {
|
|
37
|
+
id: string;
|
|
38
|
+
label?: string;
|
|
39
|
+
status?: "completed" | "failed" | "pending" | "running" | "skipped";
|
|
40
|
+
}
|
|
41
|
+
export interface FormatMappedChildProgressOptions {
|
|
42
|
+
/**
|
|
43
|
+
* Max in-flight item labels embedded in the one-line summary message.
|
|
44
|
+
* Defaults to `0` — prefer `details` rows for multi-line reporters.
|
|
45
|
+
* Set > 0 when a plain/one-line consumer needs samples in `message`.
|
|
46
|
+
*/
|
|
47
|
+
sampleLimit?: number;
|
|
48
|
+
/**
|
|
49
|
+
* Max detail rows emitted for multi-line reporters. Defaults to unlimited
|
|
50
|
+
* (all active items). Use a positive cap for very large fan-outs.
|
|
51
|
+
*/
|
|
52
|
+
detailLimit?: number;
|
|
53
|
+
/**
|
|
54
|
+
* Plural noun for the mapped work unit in the default message.
|
|
55
|
+
* Defaults to `"items"`. Domain packages pass their own label
|
|
56
|
+
* (`"shards"`, `"images"`, `"editions"`) without custom formatters.
|
|
57
|
+
*/
|
|
58
|
+
itemNoun?: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Resolve determinate progress units for a mapped fan-out.
|
|
62
|
+
*
|
|
63
|
+
* When every item plan is known, progress advances on terminal child steps
|
|
64
|
+
* using the exact sum of selected steps across items. The transition preserves
|
|
65
|
+
* the prior item-level completion fraction, rounding up when necessary, so a
|
|
66
|
+
* newly discovered denominator cannot make the reporter move backward. Until
|
|
67
|
+
* then it falls back to item-level accounting. Legacy snapshots without the
|
|
68
|
+
* exact plan fields retain the uniform `stepsPerItem` behavior.
|
|
69
|
+
*/
|
|
70
|
+
export declare function mappedChildProgressUnits(snapshot: MappedChildProgressSnapshot): MappedChildProgressUnits;
|
|
71
|
+
/**
|
|
72
|
+
* Default domain-neutral one-line summary for mapped children.
|
|
73
|
+
*
|
|
74
|
+
* Example (no samples):
|
|
75
|
+
* `3/10 items · 4 running (max 8)`
|
|
76
|
+
*
|
|
77
|
+
* Example with `sampleLimit: 2`:
|
|
78
|
+
* `3/10 items · 4 running (max 8) · shard-a/parse · shard-b/write · +2 more`
|
|
79
|
+
*/
|
|
80
|
+
export declare function formatMappedChildProgressMessage(snapshot: MappedChildProgressSnapshot, options?: FormatMappedChildProgressOptions): string;
|
|
81
|
+
/**
|
|
82
|
+
* Build sorted detail rows for in-flight mapped children.
|
|
83
|
+
* Stable key order so multi-line UIs do not thrash row positions.
|
|
84
|
+
*/
|
|
85
|
+
export declare function mappedChildProgressDetails(snapshot: MappedChildProgressSnapshot, options?: Pick<FormatMappedChildProgressOptions, "detailLimit">): MappedChildProgressDetail[];
|
|
86
|
+
export interface ToMappedChildStepProgressOptions extends FormatMappedChildProgressOptions {
|
|
87
|
+
/**
|
|
88
|
+
* Replace the default message while keeping the same completed/total units.
|
|
89
|
+
* Use this for domain labels without forking the fan-out runner.
|
|
90
|
+
*
|
|
91
|
+
* @example
|
|
92
|
+
* formatMessage: (s) => `${s.finishedItems}/${s.itemCount} images`
|
|
93
|
+
*/
|
|
94
|
+
formatMessage?: (snapshot: MappedChildProgressSnapshot, units: MappedChildProgressUnits) => string;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Build a progress payload for an opaque mapped-child parent step.
|
|
98
|
+
* Shape matches `PipelineStepProgress` without importing the runtime module.
|
|
99
|
+
*
|
|
100
|
+
* `message` is a one-line summary; `details` lists each in-flight item for
|
|
101
|
+
* multi-line reporters.
|
|
102
|
+
*/
|
|
103
|
+
export declare function toMappedChildStepProgress(snapshot: MappedChildProgressSnapshot, options?: ToMappedChildStepProgressOptions): {
|
|
104
|
+
completed: number;
|
|
105
|
+
total: number;
|
|
106
|
+
message: string;
|
|
107
|
+
details: MappedChildProgressDetail[];
|
|
108
|
+
};
|
|
109
|
+
//# sourceMappingURL=mapped-child-progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapped-child-progress.d.ts","sourceRoot":"","sources":["../src/mapped-child-progress.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IAC1C,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,oDAAoD;IACpD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,0EAA0E;IAC1E,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,wDAAwD;IACxD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,0EAA0E;IAC1E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wFAAwF;AACxF,MAAM,WAAW,yBAAyB;IACxC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;CACrE;AAED,MAAM,WAAW,gCAAgC;IAC/C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,2BAA2B,GACpC,wBAAwB,CAwC1B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,2BAA2B,EACrC,OAAO,GAAE,gCAAqC,GAC7C,MAAM,CAiCR;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,2BAA2B,EACrC,OAAO,GAAE,IAAI,CAAC,gCAAgC,EAAE,aAAa,CAAM,GAClE,yBAAyB,EAAE,CAqB7B;AAED,MAAM,WAAW,gCAAiC,SAAQ,gCAAgC;IACxF;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,CACd,QAAQ,EAAE,2BAA2B,EACrC,KAAK,EAAE,wBAAwB,KAC5B,MAAM,CAAC;CACb;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,2BAA2B,EACrC,OAAO,GAAE,gCAAqC;;;;;EAuB/C"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve determinate progress units for a mapped fan-out.
|
|
3
|
+
*
|
|
4
|
+
* When every item plan is known, progress advances on terminal child steps
|
|
5
|
+
* using the exact sum of selected steps across items. The transition preserves
|
|
6
|
+
* the prior item-level completion fraction, rounding up when necessary, so a
|
|
7
|
+
* newly discovered denominator cannot make the reporter move backward. Until
|
|
8
|
+
* then it falls back to item-level accounting. Legacy snapshots without the
|
|
9
|
+
* exact plan fields retain the uniform `stepsPerItem` behavior.
|
|
10
|
+
*/
|
|
11
|
+
export function mappedChildProgressUnits(snapshot) {
|
|
12
|
+
if (snapshot.itemCount <= 0) {
|
|
13
|
+
return { completed: 0, total: 0 };
|
|
14
|
+
}
|
|
15
|
+
const plannedItems = snapshot.plannedItems;
|
|
16
|
+
const plannedChildSteps = snapshot.plannedChildSteps;
|
|
17
|
+
if (plannedItems !== undefined && plannedChildSteps !== undefined) {
|
|
18
|
+
if (plannedItems >= snapshot.itemCount && plannedChildSteps > 0) {
|
|
19
|
+
const completedItems = Math.min(snapshot.finishedItems + snapshot.failedItems, snapshot.itemCount);
|
|
20
|
+
const preservedItemProgress = completedItems === 0
|
|
21
|
+
? 0
|
|
22
|
+
: Math.ceil((completedItems * plannedChildSteps) / snapshot.itemCount);
|
|
23
|
+
return {
|
|
24
|
+
completed: Math.min(plannedChildSteps, Math.max(snapshot.terminalChildSteps, preservedItemProgress)),
|
|
25
|
+
total: plannedChildSteps,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
completed: Math.min(snapshot.finishedItems + snapshot.failedItems, snapshot.itemCount),
|
|
30
|
+
total: snapshot.itemCount,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if (snapshot.stepsPerItem > 0) {
|
|
34
|
+
const total = snapshot.itemCount * snapshot.stepsPerItem;
|
|
35
|
+
return {
|
|
36
|
+
completed: Math.min(snapshot.terminalChildSteps, total),
|
|
37
|
+
total,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
completed: Math.min(snapshot.finishedItems + snapshot.failedItems, snapshot.itemCount),
|
|
42
|
+
total: snapshot.itemCount,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Default domain-neutral one-line summary for mapped children.
|
|
47
|
+
*
|
|
48
|
+
* Example (no samples):
|
|
49
|
+
* `3/10 items · 4 running (max 8)`
|
|
50
|
+
*
|
|
51
|
+
* Example with `sampleLimit: 2`:
|
|
52
|
+
* `3/10 items · 4 running (max 8) · shard-a/parse · shard-b/write · +2 more`
|
|
53
|
+
*/
|
|
54
|
+
export function formatMappedChildProgressMessage(snapshot, options = {}) {
|
|
55
|
+
const noun = options.itemNoun?.trim() || "items";
|
|
56
|
+
if (snapshot.itemCount <= 0) {
|
|
57
|
+
return `0 ${noun}`;
|
|
58
|
+
}
|
|
59
|
+
const sampleLimit = Math.max(0, Math.floor(options.sampleLimit ?? 0));
|
|
60
|
+
const runningEntries = [...snapshot.active.entries()].sort(([left], [right]) => left.localeCompare(right));
|
|
61
|
+
const runningSample = runningEntries
|
|
62
|
+
.slice(0, sampleLimit)
|
|
63
|
+
.map(([itemKey, label]) => `${itemKey}/${label}`)
|
|
64
|
+
.join(" · ");
|
|
65
|
+
const overflow = sampleLimit > 0 && runningEntries.length > sampleLimit
|
|
66
|
+
? ` · +${runningEntries.length - sampleLimit} more`
|
|
67
|
+
: "";
|
|
68
|
+
const settled = snapshot.finishedItems + snapshot.failedItems;
|
|
69
|
+
const parts = [
|
|
70
|
+
`${snapshot.finishedItems}/${snapshot.itemCount} ${noun}`,
|
|
71
|
+
snapshot.failedItems > 0 ? `${snapshot.failedItems} failed` : null,
|
|
72
|
+
snapshot.active.size > 0
|
|
73
|
+
? `${snapshot.active.size} running (max ${snapshot.concurrency})`
|
|
74
|
+
: settled >= snapshot.itemCount
|
|
75
|
+
? null
|
|
76
|
+
: "starting",
|
|
77
|
+
runningSample ? `${runningSample}${overflow}` : null,
|
|
78
|
+
snapshot.spotlight,
|
|
79
|
+
].filter((part) => Boolean(part));
|
|
80
|
+
return parts.join(" · ");
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Build sorted detail rows for in-flight mapped children.
|
|
84
|
+
* Stable key order so multi-line UIs do not thrash row positions.
|
|
85
|
+
*/
|
|
86
|
+
export function mappedChildProgressDetails(snapshot, options = {}) {
|
|
87
|
+
const entries = [...snapshot.active.entries()].sort(([left], [right]) => left.localeCompare(right));
|
|
88
|
+
const limit = options.detailLimit === undefined
|
|
89
|
+
? entries.length
|
|
90
|
+
: Math.max(0, Math.floor(options.detailLimit));
|
|
91
|
+
const visible = entries.slice(0, limit);
|
|
92
|
+
const details = visible.map(([id, label]) => ({
|
|
93
|
+
id,
|
|
94
|
+
label,
|
|
95
|
+
status: "running",
|
|
96
|
+
}));
|
|
97
|
+
if (entries.length > visible.length) {
|
|
98
|
+
details.push({
|
|
99
|
+
id: `+${entries.length - visible.length} more`,
|
|
100
|
+
status: "pending",
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return details;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Build a progress payload for an opaque mapped-child parent step.
|
|
107
|
+
* Shape matches `PipelineStepProgress` without importing the runtime module.
|
|
108
|
+
*
|
|
109
|
+
* `message` is a one-line summary; `details` lists each in-flight item for
|
|
110
|
+
* multi-line reporters.
|
|
111
|
+
*/
|
|
112
|
+
export function toMappedChildStepProgress(snapshot, options = {}) {
|
|
113
|
+
const units = mappedChildProgressUnits(snapshot);
|
|
114
|
+
const message = options.formatMessage?.(snapshot, units) ??
|
|
115
|
+
formatMappedChildProgressMessage(snapshot, {
|
|
116
|
+
itemNoun: options.itemNoun,
|
|
117
|
+
sampleLimit: options.sampleLimit,
|
|
118
|
+
});
|
|
119
|
+
// Empty fan-outs report total 0; otherwise keep total ≥ 1 so renderers can
|
|
120
|
+
// show a determinate bar once work has been scheduled.
|
|
121
|
+
const total = snapshot.itemCount === 0
|
|
122
|
+
? 0
|
|
123
|
+
: Math.max(1, units.total === 0 ? snapshot.itemCount : units.total);
|
|
124
|
+
return {
|
|
125
|
+
completed: units.completed,
|
|
126
|
+
total,
|
|
127
|
+
message,
|
|
128
|
+
details: mappedChildProgressDetails(snapshot, {
|
|
129
|
+
detailLimit: options.detailLimit,
|
|
130
|
+
}),
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=mapped-child-progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapped-child-progress.js","sourceRoot":"","sources":["../src/mapped-child-progress.ts"],"names":[],"mappings":"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"}
|
package/dist/node.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { openCheckpoint, withCheckpointedBatch, type CheckpointStore } from "./checkpoint.js";
|
|
2
|
+
export { requireEnv } from "./env.js";
|
|
3
|
+
export { readJson, resetDir, writeJson } from "./file-utils.js";
|
|
4
|
+
export { definePaths } from "./paths.js";
|
|
5
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/node.js
ADDED
package/dist/node.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAwB,MAAM,iBAAiB,CAAC;AAC9F,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
|