@flyingrobots/bijou-node 7.1.0 → 7.2.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/dist/gifenc-runtime.d.ts +5 -0
- package/dist/gifenc-runtime.d.ts.map +1 -0
- package/dist/gifenc-runtime.js +30 -0
- package/dist/gifenc-runtime.js.map +1 -0
- package/dist/index.d.ts +6 -45
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -10
- package/dist/index.js.map +1 -1
- package/dist/index.test-support.d.ts +11 -0
- package/dist/index.test-support.d.ts.map +1 -0
- package/dist/index.test-support.js +9 -0
- package/dist/index.test-support.js.map +1 -0
- package/dist/index.test-support.part01.d.ts +28 -0
- package/dist/index.test-support.part01.d.ts.map +1 -0
- package/dist/index.test-support.part01.js +89 -0
- package/dist/index.test-support.part01.js.map +1 -0
- package/dist/index.test-support.part02.d.ts +5 -0
- package/dist/index.test-support.part02.d.ts.map +1 -0
- package/dist/index.test-support.part02.js +63 -0
- package/dist/index.test-support.part02.js.map +1 -0
- package/dist/io-types.d.ts +26 -0
- package/dist/io-types.d.ts.map +1 -0
- package/dist/io-types.js +2 -0
- package/dist/io-types.js.map +1 -0
- package/dist/io.d.ts +3 -18
- package/dist/io.d.ts.map +1 -1
- package/dist/io.js +10 -17
- package/dist/io.js.map +1 -1
- package/dist/io.test-support.d.ts +5 -0
- package/dist/io.test-support.d.ts.map +1 -0
- package/dist/io.test-support.js +13 -0
- package/dist/io.test-support.js.map +1 -0
- package/dist/oled-font.d.ts +8 -0
- package/dist/oled-font.d.ts.map +1 -0
- package/dist/oled-font.js +28 -0
- package/dist/oled-font.js.map +1 -0
- package/dist/options.d.ts +48 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +2 -0
- package/dist/options.js.map +1 -0
- package/dist/readline-output.d.ts +3 -0
- package/dist/readline-output.d.ts.map +1 -0
- package/dist/readline-output.js +20 -0
- package/dist/readline-output.js.map +1 -0
- package/dist/recorder.d.ts.map +1 -1
- package/dist/recorder.js +23 -24
- package/dist/recorder.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +10 -4
- package/dist/runtime.js.map +1 -1
- package/dist/style.d.ts +1 -8
- package/dist/style.d.ts.map +1 -1
- package/dist/style.js +8 -3
- package/dist/style.js.map +1 -1
- package/dist/worker/fixtures/echo-worker.js +7 -6
- package/dist/worker/fixtures/echo-worker.js.map +1 -1
- package/dist/worker/worker-data.d.ts +25 -0
- package/dist/worker/worker-data.d.ts.map +1 -0
- package/dist/worker/worker-data.js +44 -0
- package/dist/worker/worker-data.js.map +1 -0
- package/dist/worker/worker-mouse-mode.d.ts +10 -0
- package/dist/worker/worker-mouse-mode.d.ts.map +1 -0
- package/dist/worker/worker-mouse-mode.js +14 -0
- package/dist/worker/worker-mouse-mode.js.map +1 -0
- package/dist/worker/worker-options.d.ts +33 -0
- package/dist/worker/worker-options.d.ts.map +1 -0
- package/dist/worker/worker-options.js +2 -0
- package/dist/worker/worker-options.js.map +1 -0
- package/dist/worker/worker.d.ts +7 -36
- package/dist/worker/worker.d.ts.map +1 -1
- package/dist/worker/worker.js +56 -44
- package/dist/worker/worker.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export function hasBijouWorkerFlag(value) {
|
|
2
|
+
return isObjectRecord(value) && value['isBijouWorker'] === true;
|
|
3
|
+
}
|
|
4
|
+
export function readBijouWorkerData(value) {
|
|
5
|
+
if (!hasBijouWorkerFlag(value)) {
|
|
6
|
+
throw new Error('startWorkerApp requires Bijou worker data');
|
|
7
|
+
}
|
|
8
|
+
const options = value.options;
|
|
9
|
+
const runtime = value.runtime;
|
|
10
|
+
if (!isWorkerSerializableOptions(options) || !isRuntimeViewportData(runtime)) {
|
|
11
|
+
throw new Error('startWorkerApp received malformed Bijou worker data');
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
isBijouWorker: true,
|
|
15
|
+
options,
|
|
16
|
+
runtime,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export function isObjectRecord(value) {
|
|
20
|
+
return value !== null && typeof value === 'object' && !Array.isArray(value);
|
|
21
|
+
}
|
|
22
|
+
function isWorkerSerializableOptions(value) {
|
|
23
|
+
return isObjectRecord(value)
|
|
24
|
+
&& optionalBoolean(value['altScreen'])
|
|
25
|
+
&& optionalBoolean(value['hideCursor'])
|
|
26
|
+
&& optionalBoolean(value['mouse'])
|
|
27
|
+
&& optionalMouseMode(value['mouseMode'])
|
|
28
|
+
&& optionalString(value['css']);
|
|
29
|
+
}
|
|
30
|
+
function isRuntimeViewportData(value) {
|
|
31
|
+
return isObjectRecord(value)
|
|
32
|
+
&& typeof value['columns'] === 'number'
|
|
33
|
+
&& typeof value['rows'] === 'number';
|
|
34
|
+
}
|
|
35
|
+
function optionalBoolean(value) {
|
|
36
|
+
return value === undefined || typeof value === 'boolean';
|
|
37
|
+
}
|
|
38
|
+
function optionalMouseMode(value) {
|
|
39
|
+
return value === undefined || value === 'press' || value === 'drag' || value === 'any';
|
|
40
|
+
}
|
|
41
|
+
function optionalString(value) {
|
|
42
|
+
return value === undefined || typeof value === 'string';
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=worker-data.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-data.js","sourceRoot":"","sources":["../../src/worker/worker-data.ts"],"names":[],"mappings":"AAuBA,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IAED,OAAO;QACL,aAAa,EAAE,IAAI;QACnB,OAAO;QACP,OAAO;KACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAc;IACjD,OAAO,cAAc,CAAC,KAAK,CAAC;WACvB,eAAe,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;WACnC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;WACpC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;WAC/B,iBAAiB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;WACrC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAc;IAC3C,OAAO,cAAc,CAAC,KAAK,CAAC;WACvB,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ;WACpC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;AACzC,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,SAAS,CAAC;AAC3D,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,OAAO,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,KAAK,CAAC;AACzF,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IACpC,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type WorkerMouseTrackingMode = 'press' | 'drag' | 'any';
|
|
2
|
+
export declare const DISABLE_MOUSE = "\u001B[?1000l\u001B[?1002l\u001B[?1003l\u001B[?1006l";
|
|
3
|
+
interface WorkerMouseModeOptions {
|
|
4
|
+
readonly mouse?: boolean;
|
|
5
|
+
readonly mouseMode?: WorkerMouseTrackingMode;
|
|
6
|
+
}
|
|
7
|
+
export declare function resolveWorkerMouseMode(options: WorkerMouseModeOptions): WorkerMouseTrackingMode | undefined;
|
|
8
|
+
export declare function mouseModeEnableSequence(mode: WorkerMouseTrackingMode): string;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=worker-mouse-mode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-mouse-mode.d.ts","sourceRoot":"","sources":["../../src/worker/worker-mouse-mode.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE/D,eAAO,MAAM,aAAa,yDAAiD,CAAC;AAE5E,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,uBAAuB,CAAC;CAC9C;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,sBAAsB,GAC9B,uBAAuB,GAAG,SAAS,CAGrC;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,CAI7E"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const DISABLE_MOUSE = '\x1b[?1000l\x1b[?1002l\x1b[?1003l\x1b[?1006l';
|
|
2
|
+
export function resolveWorkerMouseMode(options) {
|
|
3
|
+
if (options.mouseMode !== undefined)
|
|
4
|
+
return options.mouseMode;
|
|
5
|
+
return options.mouse === true ? 'drag' : undefined;
|
|
6
|
+
}
|
|
7
|
+
export function mouseModeEnableSequence(mode) {
|
|
8
|
+
if (mode === 'press')
|
|
9
|
+
return '\x1b[?1000h\x1b[?1002l\x1b[?1003l\x1b[?1006h';
|
|
10
|
+
if (mode === 'any')
|
|
11
|
+
return '\x1b[?1000h\x1b[?1002l\x1b[?1003h\x1b[?1006h';
|
|
12
|
+
return '\x1b[?1000h\x1b[?1002h\x1b[?1003l\x1b[?1006h';
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=worker-mouse-mode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-mouse-mode.js","sourceRoot":"","sources":["../../src/worker/worker-mouse-mode.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,aAAa,GAAG,8CAA8C,CAAC;AAO5E,MAAM,UAAU,sBAAsB,CACpC,OAA+B;IAE/B,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAAE,OAAO,OAAO,CAAC,SAAS,CAAC;IAC9D,OAAO,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAA6B;IACnE,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,8CAA8C,CAAC;IAC5E,IAAI,IAAI,KAAK,KAAK;QAAE,OAAO,8CAA8C,CAAC;IAC1E,OAAO,8CAA8C,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { BijouContext } from '@flyingrobots/bijou';
|
|
2
|
+
import type { WorkerMouseTrackingMode } from './worker-mouse-mode.js';
|
|
3
|
+
/** Options for starting an app in a background worker. */
|
|
4
|
+
export interface RunWorkerOptions {
|
|
5
|
+
/** The absolute path to the worker entry file. */
|
|
6
|
+
entry: string;
|
|
7
|
+
/** Optional Bijou context for the host thread. */
|
|
8
|
+
ctx?: BijouContext;
|
|
9
|
+
/** Enter the alternate screen buffer on startup. */
|
|
10
|
+
altScreen?: boolean;
|
|
11
|
+
/** Hide the cursor on startup. */
|
|
12
|
+
hideCursor?: boolean;
|
|
13
|
+
/** Enable mouse input. */
|
|
14
|
+
mouse?: boolean;
|
|
15
|
+
/** Mouse tracking mode. Supplying this implies `mouse: true`. */
|
|
16
|
+
mouseMode?: WorkerMouseTrackingMode;
|
|
17
|
+
/** Optional BCSS stylesheet string. */
|
|
18
|
+
css?: string;
|
|
19
|
+
/** Callback for custom data messages sent from the worker. */
|
|
20
|
+
onMessage?: (payload: unknown) => void;
|
|
21
|
+
/** Optional arguments passed to the Node.js worker process. */
|
|
22
|
+
execArgv?: string[];
|
|
23
|
+
}
|
|
24
|
+
/** Handle for a running background worker. */
|
|
25
|
+
export interface WorkerHandle {
|
|
26
|
+
/** Sends a custom data message to the worker thread. */
|
|
27
|
+
send(payload: unknown): void;
|
|
28
|
+
/** Forcefully terminate the worker thread. */
|
|
29
|
+
terminate(): Promise<void>;
|
|
30
|
+
/** Resolves when the worker exits cleanly. */
|
|
31
|
+
onExit: Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=worker-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-options.d.ts","sourceRoot":"","sources":["../../src/worker/worker-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAEtE,0DAA0D;AAC1D,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,kDAAkD;IAClD,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,0BAA0B;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iEAAiE;IACjE,SAAS,CAAC,EAAE,uBAAuB,CAAC;IACpC,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,8CAA8C;AAC9C,MAAM,WAAW,YAAY;IAC3B,wDAAwD;IACxD,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC7B,8CAA8C;IAC9C,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,8CAA8C;IAC9C,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-options.js","sourceRoot":"","sources":["../../src/worker/worker-options.ts"],"names":[],"mappings":""}
|
package/dist/worker/worker.d.ts
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { type BijouContext } from '@flyingrobots/bijou';
|
|
2
2
|
import type { App, RunOptions } from '@flyingrobots/bijou-tui';
|
|
3
|
+
import type { RunWorkerOptions, WorkerHandle } from './worker-options.js';
|
|
4
|
+
export type { RunWorkerOptions, WorkerHandle } from './worker-options.js';
|
|
3
5
|
interface WorkerInstance {
|
|
4
6
|
postMessage(message: unknown): void;
|
|
5
|
-
on(event:
|
|
7
|
+
on(event: 'message', handler: (value: MainMessage) => void): void;
|
|
8
|
+
on(event: 'error', handler: (value: Error) => void): void;
|
|
9
|
+
on(event: 'exit', handler: (value: number) => void): void;
|
|
6
10
|
terminate(): Promise<number>;
|
|
7
11
|
}
|
|
8
12
|
interface WorkerParentPort {
|
|
9
|
-
on(event:
|
|
10
|
-
off(event:
|
|
13
|
+
on(event: 'message', listener: (msg: unknown) => void): void;
|
|
14
|
+
off(event: 'message', listener: (msg: unknown) => void): void;
|
|
11
15
|
postMessage(message: unknown): void;
|
|
12
16
|
}
|
|
13
17
|
interface WorkerThreadBindings {
|
|
@@ -53,38 +57,6 @@ export declare function isBijouWorker(): boolean;
|
|
|
53
57
|
* This will be received via the `onMessage` callback in `runInWorker`.
|
|
54
58
|
*/
|
|
55
59
|
export declare function sendToMain(payload: unknown): void;
|
|
56
|
-
/**
|
|
57
|
-
* Options for starting an app in a background worker.
|
|
58
|
-
*/
|
|
59
|
-
export interface RunWorkerOptions {
|
|
60
|
-
/** The absolute path to the file containing the worker entry point. */
|
|
61
|
-
entry: string;
|
|
62
|
-
/** Optional Bijou context for the host thread. */
|
|
63
|
-
ctx?: BijouContext;
|
|
64
|
-
/** Enter the alternate screen buffer on startup. */
|
|
65
|
-
altScreen?: boolean;
|
|
66
|
-
/** Hide the cursor on startup. */
|
|
67
|
-
hideCursor?: boolean;
|
|
68
|
-
/** Enable mouse input (SGR mode). */
|
|
69
|
-
mouse?: boolean;
|
|
70
|
-
/** Optional BCSS stylesheet string. */
|
|
71
|
-
css?: string;
|
|
72
|
-
/** Optional callback for custom data messages sent from the worker via `sendToMain`. */
|
|
73
|
-
onMessage?: (payload: unknown) => void;
|
|
74
|
-
/** Optional arguments passed to the Node.js worker process (e.g. ['--import', 'tsx']). */
|
|
75
|
-
execArgv?: string[];
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Handle for a running background worker.
|
|
79
|
-
*/
|
|
80
|
-
export interface WorkerHandle {
|
|
81
|
-
/** Sends a custom data message to the worker thread. */
|
|
82
|
-
send(payload: unknown): void;
|
|
83
|
-
/** Forcefully terminates the worker thread. */
|
|
84
|
-
terminate(): Promise<void>;
|
|
85
|
-
/** A promise that resolves when the worker exits cleanly. */
|
|
86
|
-
onExit: Promise<void>;
|
|
87
|
-
}
|
|
88
60
|
/**
|
|
89
61
|
* Spawns a background worker thread to run the TEA application.
|
|
90
62
|
* The main thread delegates all logic to the worker, only handling raw I/O
|
|
@@ -103,5 +75,4 @@ export declare function runInWorker(options: RunWorkerOptions, bindings?: Worker
|
|
|
103
75
|
* @param app - The TEA app to run.
|
|
104
76
|
*/
|
|
105
77
|
export declare function startWorkerApp<Model, M>(app: App<Model, M>, bindings?: WorkerThreadBindings): Promise<void>;
|
|
106
|
-
export {};
|
|
107
78
|
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"AAEA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"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"}
|
package/dist/worker/worker.js
CHANGED
|
@@ -3,6 +3,8 @@ import { resolve as resolvePath } from 'node:path';
|
|
|
3
3
|
import { installRuntimeViewportOverlay, readRuntimeViewport, updateRuntimeViewport, } from '@flyingrobots/bijou';
|
|
4
4
|
import { run } from '@flyingrobots/bijou-tui';
|
|
5
5
|
import { createNodeContext } from '../index.js';
|
|
6
|
+
import { hasBijouWorkerFlag, isObjectRecord, readBijouWorkerData, } from './worker-data.js';
|
|
7
|
+
import { DISABLE_MOUSE, mouseModeEnableSequence, resolveWorkerMouseMode, } from './worker-mouse-mode.js';
|
|
6
8
|
function defaultWorkerThreadBindings() {
|
|
7
9
|
return {
|
|
8
10
|
isMainThread,
|
|
@@ -18,15 +20,12 @@ function defaultWorkerThreadBindings() {
|
|
|
18
20
|
},
|
|
19
21
|
};
|
|
20
22
|
}
|
|
21
|
-
// ---------------------------------------------------------------------------
|
|
22
|
-
// Worker Environment API
|
|
23
|
-
// ---------------------------------------------------------------------------
|
|
24
23
|
/**
|
|
25
24
|
* Checks if the current environment is running inside a Bijou Worker.
|
|
26
25
|
*/
|
|
27
26
|
export function isBijouWorker() {
|
|
28
27
|
const bindings = defaultWorkerThreadBindings();
|
|
29
|
-
return !bindings.isMainThread && bindings.workerData
|
|
28
|
+
return !bindings.isMainThread && hasBijouWorkerFlag(bindings.workerData);
|
|
30
29
|
}
|
|
31
30
|
/**
|
|
32
31
|
* Sends a custom data message from the worker to the main thread.
|
|
@@ -54,21 +53,24 @@ export function runInWorker(options, bindings = defaultWorkerThreadBindings()) {
|
|
|
54
53
|
installRuntimeViewportOverlay(ctx);
|
|
55
54
|
const useAltScreen = options.altScreen ?? true;
|
|
56
55
|
const useHideCursor = options.hideCursor ?? true;
|
|
57
|
-
const
|
|
58
|
-
|
|
56
|
+
const mouseMode = resolveWorkerMouseMode(options);
|
|
57
|
+
const useMouse = mouseMode !== undefined;
|
|
59
58
|
if (useAltScreen || useHideCursor) {
|
|
60
59
|
ctx.io.write('\x1b[?1049h'); // ENTER_ALT_SCREEN
|
|
61
60
|
if (useHideCursor)
|
|
62
61
|
ctx.io.write('\x1b[?25l'); // HIDE_CURSOR
|
|
63
62
|
}
|
|
64
63
|
if (useMouse) {
|
|
65
|
-
ctx.io.write(
|
|
64
|
+
ctx.io.write(mouseModeEnableSequence(mouseMode)); // ENABLE_MOUSE
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
ctx.io.write(DISABLE_MOUSE);
|
|
66
68
|
}
|
|
67
|
-
// Spawn the worker with structured-clone-safe options only.
|
|
68
69
|
const serializableOptions = {
|
|
69
70
|
altScreen: options.altScreen,
|
|
70
71
|
hideCursor: options.hideCursor,
|
|
71
72
|
mouse: options.mouse,
|
|
73
|
+
mouseMode: options.mouseMode,
|
|
72
74
|
css: options.css,
|
|
73
75
|
};
|
|
74
76
|
const worker = bindings.createWorker(resolvePath(options.entry), {
|
|
@@ -80,7 +82,6 @@ export function runInWorker(options, bindings = defaultWorkerThreadBindings()) {
|
|
|
80
82
|
execArgv: options.execArgv,
|
|
81
83
|
// Pipe stdout/stderr so we can capture logs if needed, but primarily use IPC
|
|
82
84
|
});
|
|
83
|
-
// 1. Pipe Main Stdin -> Worker IPC
|
|
84
85
|
const inputHandle = ctx.io.rawInput((data) => {
|
|
85
86
|
worker.postMessage({ type: 'io:data', data });
|
|
86
87
|
});
|
|
@@ -91,22 +92,17 @@ export function runInWorker(options, bindings = defaultWorkerThreadBindings()) {
|
|
|
91
92
|
const onExit = new Promise((resolve, reject) => {
|
|
92
93
|
let requestedQuit = false;
|
|
93
94
|
let forcedTerminate = false;
|
|
94
|
-
// 2. Pipe Worker IPC -> Main Stdout
|
|
95
95
|
worker.on('message', (msg) => {
|
|
96
96
|
if (msg.type === 'render:frame') {
|
|
97
97
|
ctx.io.write(msg.output);
|
|
98
98
|
}
|
|
99
99
|
else if (msg.type === 'error') {
|
|
100
|
-
|
|
101
|
-
ctx.io.writeError(msg.message);
|
|
102
|
-
else
|
|
103
|
-
ctx.io.write(msg.message);
|
|
100
|
+
ctx.io.writeError(msg.message);
|
|
104
101
|
}
|
|
105
102
|
else if (msg.type === 'data') {
|
|
106
|
-
|
|
107
|
-
options.onMessage(msg.payload);
|
|
103
|
+
options.onMessage?.(msg.payload);
|
|
108
104
|
}
|
|
109
|
-
else
|
|
105
|
+
else {
|
|
110
106
|
requestedQuit = true;
|
|
111
107
|
bindings.scheduleTimeout(() => {
|
|
112
108
|
if (requestedQuit) {
|
|
@@ -127,7 +123,7 @@ export function runInWorker(options, bindings = defaultWorkerThreadBindings()) {
|
|
|
127
123
|
return;
|
|
128
124
|
}
|
|
129
125
|
if (code !== 0)
|
|
130
|
-
reject(new Error(`Worker stopped with exit code ${code}`));
|
|
126
|
+
reject(new Error(`Worker stopped with exit code ${String(code)}`));
|
|
131
127
|
else
|
|
132
128
|
resolve();
|
|
133
129
|
});
|
|
@@ -135,7 +131,7 @@ export function runInWorker(options, bindings = defaultWorkerThreadBindings()) {
|
|
|
135
131
|
inputHandle.dispose();
|
|
136
132
|
resizeHandle.dispose();
|
|
137
133
|
if (useMouse) {
|
|
138
|
-
ctx.io.write(
|
|
134
|
+
ctx.io.write(DISABLE_MOUSE);
|
|
139
135
|
}
|
|
140
136
|
if (useAltScreen || useHideCursor) {
|
|
141
137
|
ctx.io.write('\x1b[?1049l'); // EXIT_ALT_SCREEN
|
|
@@ -145,14 +141,11 @@ export function runInWorker(options, bindings = defaultWorkerThreadBindings()) {
|
|
|
145
141
|
}
|
|
146
142
|
});
|
|
147
143
|
return {
|
|
148
|
-
send: (payload) => worker.postMessage({ type: 'data', payload }),
|
|
144
|
+
send: (payload) => { worker.postMessage({ type: 'data', payload }); },
|
|
149
145
|
terminate: async () => { await worker.terminate(); },
|
|
150
146
|
onExit
|
|
151
147
|
};
|
|
152
148
|
}
|
|
153
|
-
// ---------------------------------------------------------------------------
|
|
154
|
-
// Worker Thread Logic
|
|
155
|
-
// ---------------------------------------------------------------------------
|
|
156
149
|
/**
|
|
157
150
|
* The entry point for the worker thread. Must be called in the file
|
|
158
151
|
* specified by `options.entry` in `runInWorker()`.
|
|
@@ -162,68 +155,87 @@ export function runInWorker(options, bindings = defaultWorkerThreadBindings()) {
|
|
|
162
155
|
* @param app - The TEA app to run.
|
|
163
156
|
*/
|
|
164
157
|
export async function startWorkerApp(app, bindings = defaultWorkerThreadBindings()) {
|
|
165
|
-
|
|
158
|
+
const port = bindings.parentPort;
|
|
159
|
+
if (bindings.isMainThread || port === null) {
|
|
166
160
|
throw new Error('startWorkerApp must be called from within a worker thread.');
|
|
167
161
|
}
|
|
168
|
-
const initData = bindings.workerData;
|
|
169
|
-
// Create a proxy Context that speaks IPC instead of true I/O
|
|
162
|
+
const initData = readBijouWorkerData(bindings.workerData);
|
|
170
163
|
const proxyCtx = bindings.createNodeContext();
|
|
171
164
|
installRuntimeViewportOverlay(proxyCtx);
|
|
172
165
|
const { setDefaultContext } = await import('@flyingrobots/bijou');
|
|
173
166
|
setDefaultContext(proxyCtx);
|
|
174
|
-
updateRuntimeViewport(proxyCtx.runtime, initData.runtime
|
|
175
|
-
|
|
167
|
+
updateRuntimeViewport(proxyCtx.runtime, initData.runtime.columns, initData.runtime.rows);
|
|
168
|
+
const proxyMouseMode = resolveWorkerMouseMode(initData.options);
|
|
169
|
+
const ignoredProxyWrites = new Set([DISABLE_MOUSE]);
|
|
170
|
+
if (proxyMouseMode !== undefined) {
|
|
171
|
+
ignoredProxyWrites.add(mouseModeEnableSequence(proxyMouseMode));
|
|
172
|
+
}
|
|
176
173
|
proxyCtx.io.write = (data) => {
|
|
177
|
-
|
|
174
|
+
if (ignoredProxyWrites.has(data))
|
|
175
|
+
return;
|
|
176
|
+
port.postMessage({ type: 'render:frame', output: data });
|
|
178
177
|
};
|
|
179
178
|
proxyCtx.io.writeError = (data) => {
|
|
180
|
-
|
|
179
|
+
port.postMessage({ type: 'error', message: data });
|
|
181
180
|
};
|
|
182
|
-
//
|
|
183
|
-
// already handled alt screen and mouse modes. We tell run() to do nothing.
|
|
181
|
+
// The main thread owns terminal mode; the worker still parses forwarded input.
|
|
184
182
|
const proxyOptions = {
|
|
185
|
-
|
|
183
|
+
css: initData.options.css,
|
|
186
184
|
ctx: proxyCtx,
|
|
187
185
|
altScreen: false,
|
|
188
186
|
hideCursor: false,
|
|
189
|
-
mouse:
|
|
187
|
+
mouse: initData.options.mouse,
|
|
188
|
+
mouseMode: initData.options.mouseMode,
|
|
190
189
|
};
|
|
191
|
-
// Override the io.rawInput to listen to IPC messages instead of process.stdin
|
|
192
190
|
proxyCtx.io.rawInput = (handler) => {
|
|
193
191
|
const listener = (msg) => {
|
|
192
|
+
if (!isWorkerMessage(msg))
|
|
193
|
+
return;
|
|
194
194
|
if (msg.type === 'io:data')
|
|
195
195
|
handler(msg.data);
|
|
196
196
|
};
|
|
197
|
-
|
|
197
|
+
port.on('message', listener);
|
|
198
198
|
return {
|
|
199
|
-
dispose: () =>
|
|
199
|
+
dispose: () => { port.off('message', listener); }
|
|
200
200
|
};
|
|
201
201
|
};
|
|
202
202
|
proxyCtx.io.onResize = (handler) => {
|
|
203
203
|
const listener = (msg) => {
|
|
204
|
+
if (!isWorkerMessage(msg))
|
|
205
|
+
return;
|
|
204
206
|
if (msg.type === 'io:resize') {
|
|
205
207
|
const nextViewport = updateRuntimeViewport(proxyCtx.runtime, msg.columns, msg.rows);
|
|
206
208
|
handler(nextViewport.columns, nextViewport.rows);
|
|
207
209
|
}
|
|
208
210
|
};
|
|
209
|
-
|
|
211
|
+
port.on('message', listener);
|
|
210
212
|
return {
|
|
211
|
-
dispose: () =>
|
|
213
|
+
dispose: () => { port.off('message', listener); }
|
|
212
214
|
};
|
|
213
215
|
};
|
|
214
216
|
proxyCtx.io.onData = (handler) => {
|
|
215
217
|
const listener = (msg) => {
|
|
218
|
+
if (!isWorkerMessage(msg))
|
|
219
|
+
return;
|
|
216
220
|
if (msg.type === 'data')
|
|
217
221
|
handler(msg.payload);
|
|
218
222
|
};
|
|
219
|
-
|
|
223
|
+
port.on('message', listener);
|
|
220
224
|
return {
|
|
221
|
-
dispose: () =>
|
|
225
|
+
dispose: () => { port.off('message', listener); }
|
|
222
226
|
};
|
|
223
227
|
};
|
|
224
|
-
// Run the app using the proxy context
|
|
225
228
|
await bindings.runApp(app, proxyOptions);
|
|
226
|
-
|
|
227
|
-
|
|
229
|
+
port.postMessage({ type: 'quit' });
|
|
230
|
+
}
|
|
231
|
+
function isWorkerMessage(msg) {
|
|
232
|
+
if (!isObjectRecord(msg))
|
|
233
|
+
return false;
|
|
234
|
+
if (msg['type'] === 'io:data')
|
|
235
|
+
return typeof msg['data'] === 'string';
|
|
236
|
+
if (msg['type'] === 'io:resize') {
|
|
237
|
+
return typeof msg['columns'] === 'number' && typeof msg['rows'] === 'number';
|
|
238
|
+
}
|
|
239
|
+
return msg['type'] === 'data' || msg['type'] === 'quit';
|
|
228
240
|
}
|
|
229
241
|
//# sourceMappingURL=worker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,EACnB,qBAAqB,GAEtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/worker/worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flyingrobots/bijou-node",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.2.0",
|
|
4
4
|
"description": "Node.js adapter for bijou — chalk styling, readline I/O, process runtime.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -24,13 +24,13 @@
|
|
|
24
24
|
"lint": "tsc --noEmit"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@flyingrobots/bijou-tui": "7.
|
|
27
|
+
"@flyingrobots/bijou-tui": "7.2.0",
|
|
28
28
|
"chalk": "^5.6.2",
|
|
29
29
|
"gifenc": "^1.0.3",
|
|
30
30
|
"oled-font-5x7": "^1.0.3"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@flyingrobots/bijou": "7.
|
|
33
|
+
"@flyingrobots/bijou": "7.2.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/node": "^22.0.0",
|