limina 0.0.5 → 0.1.1

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.
@@ -0,0 +1,109 @@
1
+ import { a as hasRunningSnapshotWork, c as toWritableText, n as SPINNER_INTERVAL_MS, o as renderSnapshotLines, t as SPINNER_FRAMES } from "./chunks/dep-CuMHuWBQ.js";
2
+
3
+ //#region src/flow/renderer-process.ts
4
+ const DEFAULT_TERMINAL_COLUMNS = 80;
5
+ const ANSI_ESCAPE = String.fromCodePoint(27);
6
+ const ANSI_PATTERN = new RegExp(String.raw`${ANSI_ESCAPE}\[[\d:;<=>?]*[\u0020-\u002F]*[\u0040-\u007E]`, "gu");
7
+ let snapshot = {
8
+ entries: [],
9
+ treeRoots: []
10
+ };
11
+ let terminalColumn = 0;
12
+ let terminalLineCount = 0;
13
+ let spinnerFrameIndex = 0;
14
+ let spinnerTimer;
15
+ let closed = false;
16
+ function send(message) {
17
+ if (typeof process.send === "function") process.send(message);
18
+ }
19
+ function stripControlSequences(text) {
20
+ return text.replaceAll(ANSI_PATTERN, "").replaceAll("\r", "");
21
+ }
22
+ function recordTerminalWrite(chunk) {
23
+ const text = stripControlSequences(toWritableText(chunk));
24
+ const columns = Math.max(1, process.stdout.columns ?? DEFAULT_TERMINAL_COLUMNS);
25
+ for (const char of text) {
26
+ if (char === "\n") {
27
+ terminalLineCount += 1;
28
+ terminalColumn = 0;
29
+ continue;
30
+ }
31
+ terminalColumn += 1;
32
+ if (terminalColumn >= columns) {
33
+ terminalLineCount += 1;
34
+ terminalColumn = 0;
35
+ }
36
+ }
37
+ }
38
+ function writeTracked(message, stream) {
39
+ recordTerminalWrite(message);
40
+ stream.write(message);
41
+ }
42
+ function clearRenderedFrame() {
43
+ if (terminalLineCount <= 0) return;
44
+ process.stdout.write(`\r\u001B[${terminalLineCount}A\u001B[J`);
45
+ terminalLineCount = 0;
46
+ terminalColumn = 0;
47
+ }
48
+ function render() {
49
+ clearRenderedFrame();
50
+ for (const line of renderSnapshotLines(snapshot, spinnerFrameIndex)) writeTracked(`${line}\n`, process.stdout);
51
+ }
52
+ function syncSpinnerTimer() {
53
+ if (closed || !hasRunningSnapshotWork(snapshot)) {
54
+ if (spinnerTimer) {
55
+ clearInterval(spinnerTimer);
56
+ spinnerTimer = void 0;
57
+ }
58
+ return;
59
+ }
60
+ if (spinnerTimer) return;
61
+ spinnerTimer = setInterval(() => {
62
+ spinnerFrameIndex = (spinnerFrameIndex + 1) % SPINNER_FRAMES.length;
63
+ render();
64
+ }, SPINNER_INTERVAL_MS);
65
+ }
66
+ function writeOutput(message) {
67
+ clearRenderedFrame();
68
+ writeTracked(message.output.text, message.output.stream === "stderr" ? process.stderr : process.stdout);
69
+ terminalLineCount = 0;
70
+ terminalColumn = 0;
71
+ render();
72
+ }
73
+ process.on("message", (rawMessage) => {
74
+ try {
75
+ if (process.env.LIMINA_FLOW_RENDERER_TEST_CRASH === "1" && rawMessage.type === "snapshot") process.exit(1);
76
+ switch (rawMessage.type) {
77
+ case "snapshot":
78
+ snapshot = rawMessage.snapshot;
79
+ syncSpinnerTimer();
80
+ render();
81
+ break;
82
+ case "output":
83
+ writeOutput(rawMessage);
84
+ break;
85
+ case "close":
86
+ closed = true;
87
+ snapshot = rawMessage.snapshot;
88
+ if (spinnerTimer) {
89
+ clearInterval(spinnerTimer);
90
+ spinnerTimer = void 0;
91
+ }
92
+ render();
93
+ send({ type: "closed" });
94
+ setImmediate(() => {
95
+ process.exit(0);
96
+ });
97
+ break;
98
+ }
99
+ } catch (error) {
100
+ send({
101
+ message: error instanceof Error ? error.message : String(error),
102
+ type: "failed"
103
+ });
104
+ }
105
+ });
106
+ send({ type: "ready" });
107
+
108
+ //#endregion
109
+ export { };