@flyingrobots/bijou-node 4.4.1 → 5.0.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/README.md CHANGED
@@ -8,7 +8,7 @@ Node.js adapters and runtime utilities for Bijou.
8
8
 
9
9
  - **Port Implementation**: Maps Node.js APIs to the Bijou port interfaces.
10
10
  - **Worker Runtime**: Offloads heavy TEA logic to worker threads while maintaining main-thread responsiveness.
11
- - **Bootstrapping**: One-line context initialization with `initDefaultContext()`.
11
+ - **Bootstrapping**: One-call hosted app startup with `startApp()`.
12
12
 
13
13
  ## Install
14
14
 
@@ -19,12 +19,20 @@ npm install @flyingrobots/bijou @flyingrobots/bijou-node
19
19
  ## Quick Start
20
20
 
21
21
  ```typescript
22
- import { initDefaultContext } from '@flyingrobots/bijou-node';
23
- import { headerBox } from '@flyingrobots/bijou';
24
-
25
- initDefaultContext();
26
-
27
- console.log(headerBox('My CLI', { detail: 'v1.0.0' }));
22
+ import { stringToSurface } from '@flyingrobots/bijou';
23
+ import { startApp } from '@flyingrobots/bijou-node';
24
+ import { isKeyMsg, quit, type App } from '@flyingrobots/bijou-tui';
25
+
26
+ const app: App<{ count: number }> = {
27
+ init: () => [{ count: 0 }, []],
28
+ update: (msg, model) => {
29
+ if (isKeyMsg(msg) && msg.key === 'q') return [model, [quit()]];
30
+ return [model, []];
31
+ },
32
+ view: (model) => stringToSurface(`Count: ${model.count}\\nPress q to quit`, 16, 2),
33
+ };
34
+
35
+ await startApp(app);
28
36
  ```
29
37
 
30
38
  ## Port Mapping
@@ -38,10 +46,33 @@ console.log(headerBox('My CLI', { detail: 'v1.0.0' }));
38
46
  ## API
39
47
 
40
48
  - **`createNodeContext()`**: Returns a wired `BijouContext` without setting it as the global default.
49
+ - **`createNodeContext({ theme })`**: The explicit programmatic path for a custom theme on a Node-owned context.
50
+ - **`createNodeContext({ themes, themeMode, themeOverride })`**: Picks from a named theme set with automatic light/dark selection and optional app-owned override state.
41
51
  - **`initDefaultContext()`**: Registers the first context as the global default for all Bijou components.
52
+ - **`startApp()`**: Initializes a default Node context when needed and runs a TUI app through the hosted runtime. Pass `startApp(app, { theme })` for the one-line programmatic custom-theme path, or `startApp(app, { themes, themeMode, themeOverride })` for automatic light/dark selection plus override support. When the app is a self-running framed shell, `startApp()` delegates to that hosted runner instead of bypassing it.
53
+ - **Ambient default initializer**: Importing `@flyingrobots/bijou-node` registers a lazy Node default-context initializer so low-level `run(app)` flows can still resolve `ctx` without a separate `initDefaultContext()` call.
54
+ - **`scopedNodeIO()`**: Wraps the Node file adapter in a rooted filesystem boundary for app-level reads and guarded path resolution.
42
55
  - **`runInWorker()`**: Starts a TEA app inside a worker thread.
43
56
  - **`recordDemoGif()`**: Captures surface frames and rasterizes them to GIF for documentation.
44
57
 
58
+ ## Scoped File Access
59
+
60
+ Prefer `scopedNodeIO()` over raw `nodeIO()` when the app should only read assets from
61
+ one project directory.
62
+
63
+ ```typescript
64
+ import { scopedNodeIO } from '@flyingrobots/bijou-node';
65
+
66
+ const io = scopedNodeIO({ root: process.cwd() });
67
+
68
+ const theme = io.readFile('themes/app.json');
69
+ const outputPath = io.resolvePath('captures/demo.gif');
70
+ ```
71
+
72
+ `readFile()`, `readDir()`, and `joinPath()` now stay inside the declared root. `resolvePath()`
73
+ gives hosts the same boundary check before they hand a path to raw Node writes such as
74
+ `fs.writeFileSync()`.
75
+
45
76
  ## Documentation
46
77
 
47
78
  - **[GUIDE.md](./GUIDE.md)**: Productive-fast path for Node setups.
package/dist/index.d.ts CHANGED
@@ -8,16 +8,61 @@
8
8
  *
9
9
  * @packageDocumentation
10
10
  */
11
- import type { BijouContext } from '@flyingrobots/bijou';
11
+ import type { BijouContext, Theme, ColorScheme } from '@flyingrobots/bijou';
12
+ import { type App, type RunOptions } from '@flyingrobots/bijou-tui';
12
13
  /** Re-export the Node.js {@link RuntimePort} factory. */
13
14
  export { nodeRuntime, detectRefreshRate } from './runtime.js';
14
15
  /** Re-export the Node.js {@link IOPort} factory. */
15
- export { nodeIO } from './io.js';
16
+ export { nodeIO, scopedNodeIO, ScopedNodeIOError, type ScopedNodeIO, type ScopedNodeIOOptions, } from './io.js';
16
17
  /** Re-export the Chalk-based {@link StylePort} factory and its options type. */
17
18
  export { chalkStyle, type ChalkStyleOptions } from './style.js';
18
19
  /** Re-export Worker utilities for multi-threaded applications. */
19
20
  export { isBijouWorker, runInWorker, sendToMain, startWorkerApp, type RunWorkerOptions } from './worker/worker.js';
20
21
  export { recordDemoGif, rasterizeSurface, writeSurfaceGif, type NativeDemoSpec, type RecorderResult, type SurfaceGifOptions, } from './recorder.js';
22
+ /** Theme-selection options for Node-hosted context creation. */
23
+ export interface NodeThemeEntry {
24
+ /** Stable selection id for env/config or app-owned override state. */
25
+ readonly id: string;
26
+ /** Theme value associated with this entry. */
27
+ readonly theme: Theme;
28
+ /**
29
+ * Optional light/dark hint used by automatic selection.
30
+ *
31
+ * When omitted, `id === "light"` and `id === "dark"` are treated as the
32
+ * corresponding scheme.
33
+ */
34
+ readonly scheme?: ColorScheme;
35
+ }
36
+ /** Host-level theme mode for automatic selection. */
37
+ export type NodeThemeMode = 'auto' | ColorScheme;
38
+ /** Theme-selection options for Node-hosted context creation. */
39
+ export interface NodeThemeOptions {
40
+ /**
41
+ * Explicit fallback theme object to use for this host context.
42
+ *
43
+ * This wins whenever the selected env var does not point at a known preset or
44
+ * a valid DTCG JSON file.
45
+ */
46
+ theme?: Theme;
47
+ /** Named preset themes available to env-var selection. */
48
+ presets?: Record<string, Theme>;
49
+ /** Environment variable name that selects a preset or JSON theme path. */
50
+ envVar?: string;
51
+ /** Named theme entries available for auto-selection or app-owned overrides. */
52
+ themes?: readonly NodeThemeEntry[];
53
+ /** Automatic or forced light/dark selection mode for `themes`. */
54
+ themeMode?: NodeThemeMode;
55
+ /** Explicit theme-entry id override that wins over env-driven selection. */
56
+ themeOverride?: string;
57
+ }
58
+ /** Options for {@link createNodeContext}. */
59
+ export type CreateNodeContextOptions = NodeThemeOptions;
60
+ /** Options for {@link initDefaultContext}. */
61
+ export type InitDefaultContextOptions = NodeThemeOptions;
62
+ /** Options for {@link startApp}. */
63
+ export type StartAppOptions<M = any> = RunOptions<M> & NodeThemeOptions;
64
+ /** Test-only helper that restores the Node ambient-context initializer after resets. */
65
+ export declare function _registerDefaultContextInitializerForTesting(): void;
21
66
  /**
22
67
  * Create a {@link BijouContext} wired to Node.js adapters.
23
68
  *
@@ -28,7 +73,7 @@ export { recordDemoGif, rasterizeSurface, writeSurfaceGif, type NativeDemoSpec,
28
73
  *
29
74
  * @returns A fresh {@link BijouContext} backed by the current Node.js process.
30
75
  */
31
- export declare function createNodeContext(): BijouContext;
76
+ export declare function createNodeContext(options?: CreateNodeContextOptions): BijouContext;
32
77
  /**
33
78
  * Reset the initialization guard.
34
79
  *
@@ -49,5 +94,19 @@ export declare function _resetInitializedForTesting(): void;
49
94
  * @returns The {@link BijouContext} created during initialization, or a
50
95
  * fresh context on subsequent calls.
51
96
  */
52
- export declare function initDefaultContext(): BijouContext;
97
+ export declare function initDefaultContext(options?: InitDefaultContextOptions): BijouContext;
98
+ /**
99
+ * Start a Bijou TUI app on the current Node.js host.
100
+ *
101
+ * This is the first-app convenience path for Node hosts. When no context is
102
+ * provided, it initializes and registers the default Node context so apps that
103
+ * rely on ambient `ctx` resolution still behave correctly. Callers that need
104
+ * explicit ownership can pass `options.ctx` directly. Self-running framed apps
105
+ * are delegated to their hosted runner instead of being forced through raw
106
+ * `run(app, ...)`.
107
+ *
108
+ * @param app - The TEA application to run.
109
+ * @param options - Runtime options forwarded to {@link run}.
110
+ */
111
+ export declare function startApp<Model, M>(app: App<Model, M>, options?: StartAppOptions<M>): Promise<void>;
53
112
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMxD,yDAAyD;AACzD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC9D,oDAAoD;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,gFAAgF;AAChF,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhE,kEAAkE;AAClE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACnH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,YAAY,CAUhD;AAQD;;;;;GAKG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,IAAI,YAAY,CAQjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAQ5E,OAAO,EAAO,KAAK,GAAG,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAKzE,yDAAyD;AACzD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC9D,oDAAoD;AACpD,OAAO,EACL,MAAM,EACN,YAAY,EACZ,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,mBAAmB,GACzB,MAAM,SAAS,CAAC;AACjB,gFAAgF;AAChF,OAAO,EAAE,UAAU,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEhE,kEAAkE;AAClE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACnH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,GACvB,MAAM,eAAe,CAAC;AAIvB,gEAAgE;AAChE,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;CAC/B;AAED,qDAAqD;AACrD,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,WAAW,CAAC;AAEjD,gEAAgE;AAChE,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,0DAA0D;IAC1D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACnC,kEAAkE;IAClE,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,4EAA4E;IAC5E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,6CAA6C;AAC7C,MAAM,MAAM,wBAAwB,GAAG,gBAAgB,CAAC;AAExD,8CAA8C;AAC9C,MAAM,MAAM,yBAAyB,GAAG,gBAAgB,CAAC;AAEzD,oCAAoC;AACpC,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;AA8GxE,wFAAwF;AACxF,wBAAgB,4CAA4C,IAAI,IAAI,CAEnE;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,wBAA6B,GAAG,YAAY,CAetF;AAUD;;;;;GAKG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAElD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,GAAE,yBAA8B,GAAG,YAAY,CAsBxF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,QAAQ,CAAC,KAAK,EAAE,CAAC,EACrC,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,EAClB,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,GAC3B,OAAO,CAAC,IAAI,CAAC,CAiCf"}
package/dist/index.js CHANGED
@@ -8,19 +8,105 @@
8
8
  *
9
9
  * @packageDocumentation
10
10
  */
11
- import { createBijou, setDefaultContext } from '@flyingrobots/bijou';
11
+ import { createBijou, detectColorScheme, resolveSafeCtx, setDefaultContext, setDefaultContextInitializer, } from '@flyingrobots/bijou';
12
+ import { run } from '@flyingrobots/bijou-tui';
12
13
  import { nodeRuntime } from './runtime.js';
13
14
  import { nodeIO } from './io.js';
14
15
  import { chalkStyle } from './style.js';
15
16
  /** Re-export the Node.js {@link RuntimePort} factory. */
16
17
  export { nodeRuntime, detectRefreshRate } from './runtime.js';
17
18
  /** Re-export the Node.js {@link IOPort} factory. */
18
- export { nodeIO } from './io.js';
19
+ export { nodeIO, scopedNodeIO, ScopedNodeIOError, } from './io.js';
19
20
  /** Re-export the Chalk-based {@link StylePort} factory and its options type. */
20
21
  export { chalkStyle } from './style.js';
21
22
  /** Re-export Worker utilities for multi-threaded applications. */
22
23
  export { isBijouWorker, runInWorker, sendToMain, startWorkerApp } from './worker/worker.js';
23
24
  export { recordDemoGif, rasterizeSurface, writeSurfaceGif, } from './recorder.js';
25
+ const DISABLED_THEME_ENV_VAR = '__BIJOU_THEME_DISABLED__';
26
+ function isSelfRunningApp(app) {
27
+ return typeof app.run === 'function';
28
+ }
29
+ function inferThemeEntryScheme(entry) {
30
+ if (entry.scheme !== undefined)
31
+ return entry.scheme;
32
+ if (entry.id === 'light' || entry.id === 'dark')
33
+ return entry.id;
34
+ return undefined;
35
+ }
36
+ function mergeNodeThemePresets(options) {
37
+ if (options.themes === undefined || options.themes.length === 0) {
38
+ return options.presets;
39
+ }
40
+ const merged = { ...(options.presets ?? {}) };
41
+ for (const entry of options.themes) {
42
+ merged[entry.id] = entry.theme;
43
+ }
44
+ return merged;
45
+ }
46
+ function resolveRequestedColorScheme(runtime, options) {
47
+ const mode = options.themeMode ?? 'auto';
48
+ return mode === 'auto' ? detectColorScheme(runtime) : mode;
49
+ }
50
+ function resolveAutomaticThemeEntry(options, targetScheme) {
51
+ if (options.themes === undefined || options.themes.length === 0) {
52
+ return undefined;
53
+ }
54
+ const byScheme = options.themes.find((entry) => inferThemeEntryScheme(entry) === targetScheme);
55
+ if (byScheme !== undefined)
56
+ return byScheme;
57
+ const byId = options.themes.find((entry) => entry.id === targetScheme);
58
+ if (byId !== undefined)
59
+ return byId;
60
+ return options.themes[0];
61
+ }
62
+ function resolveNodeThemeSelection(runtime, options) {
63
+ const colorScheme = resolveRequestedColorScheme(runtime, options);
64
+ const presets = mergeNodeThemePresets(options);
65
+ const envVar = options.envVar;
66
+ if (options.themeOverride !== undefined) {
67
+ const match = options.themes?.find((entry) => entry.id === options.themeOverride);
68
+ if (match !== undefined) {
69
+ return {
70
+ fallbackTheme: match.theme,
71
+ colorScheme: inferThemeEntryScheme(match) ?? colorScheme,
72
+ envVar: DISABLED_THEME_ENV_VAR,
73
+ presets,
74
+ };
75
+ }
76
+ }
77
+ const selectionEnvVar = envVar ?? 'BIJOU_THEME';
78
+ const envSelection = runtime.env(selectionEnvVar);
79
+ if (envSelection !== undefined) {
80
+ const envThemeEntry = options.themes?.find((entry) => entry.id === envSelection);
81
+ if (envThemeEntry !== undefined) {
82
+ return {
83
+ fallbackTheme: envThemeEntry.theme,
84
+ colorScheme: inferThemeEntryScheme(envThemeEntry) ?? colorScheme,
85
+ envVar: DISABLED_THEME_ENV_VAR,
86
+ presets,
87
+ };
88
+ }
89
+ return {
90
+ fallbackTheme: options.theme ?? resolveAutomaticThemeEntry(options, colorScheme)?.theme,
91
+ colorScheme,
92
+ envVar,
93
+ presets,
94
+ };
95
+ }
96
+ const automaticThemeEntry = resolveAutomaticThemeEntry(options, colorScheme);
97
+ return {
98
+ fallbackTheme: automaticThemeEntry?.theme ?? options.theme,
99
+ colorScheme: automaticThemeEntry != null
100
+ ? (inferThemeEntryScheme(automaticThemeEntry) ?? colorScheme)
101
+ : colorScheme,
102
+ envVar,
103
+ presets,
104
+ };
105
+ }
106
+ /** Test-only helper that restores the Node ambient-context initializer after resets. */
107
+ export function _registerDefaultContextInitializerForTesting() {
108
+ setDefaultContextInitializer(() => createNodeContext());
109
+ }
24
110
  /**
25
111
  * Create a {@link BijouContext} wired to Node.js adapters.
26
112
  *
@@ -31,17 +117,23 @@ export { recordDemoGif, rasterizeSurface, writeSurfaceGif, } from './recorder.js
31
117
  *
32
118
  * @returns A fresh {@link BijouContext} backed by the current Node.js process.
33
119
  */
34
- export function createNodeContext() {
120
+ export function createNodeContext(options = {}) {
35
121
  const runtime = nodeRuntime();
36
122
  const noColor = runtime.env('NO_COLOR') !== undefined;
123
+ const selection = resolveNodeThemeSelection(runtime, options);
37
124
  // Force level 3 (truecolor) if NO_COLOR is not set,
38
125
  // as the user is explicitly requesting a rich dashboard experience.
39
126
  return createBijou({
40
127
  runtime,
41
128
  io: nodeIO(),
42
129
  style: chalkStyle({ noColor, level: noColor ? 0 : 3 }),
130
+ theme: selection.fallbackTheme,
131
+ presets: selection.presets,
132
+ envVar: selection.envVar,
133
+ colorScheme: selection.colorScheme,
43
134
  });
44
135
  }
136
+ _registerDefaultContextInitializerForTesting();
45
137
  /**
46
138
  * Guard flag ensuring {@link initDefaultContext} only registers the global
47
139
  * default context once per process lifetime.
@@ -69,13 +161,63 @@ export function _resetInitializedForTesting() {
69
161
  * @returns The {@link BijouContext} created during initialization, or a
70
162
  * fresh context on subsequent calls.
71
163
  */
72
- export function initDefaultContext() {
164
+ export function initDefaultContext(options = {}) {
165
+ const hasExplicitThemeSelection = options.theme !== undefined
166
+ || options.presets !== undefined
167
+ || options.envVar !== undefined
168
+ || options.themes !== undefined
169
+ || options.themeMode !== undefined
170
+ || options.themeOverride !== undefined;
171
+ if (!initialized && !hasExplicitThemeSelection) {
172
+ const existing = resolveSafeCtx();
173
+ if (existing != null) {
174
+ initialized = true;
175
+ return existing;
176
+ }
177
+ }
73
178
  if (!initialized) {
74
- const ctx = createNodeContext();
179
+ const ctx = createNodeContext(options);
75
180
  setDefaultContext(ctx);
76
181
  initialized = true;
77
182
  return ctx;
78
183
  }
79
- return createNodeContext();
184
+ return createNodeContext(options);
185
+ }
186
+ /**
187
+ * Start a Bijou TUI app on the current Node.js host.
188
+ *
189
+ * This is the first-app convenience path for Node hosts. When no context is
190
+ * provided, it initializes and registers the default Node context so apps that
191
+ * rely on ambient `ctx` resolution still behave correctly. Callers that need
192
+ * explicit ownership can pass `options.ctx` directly. Self-running framed apps
193
+ * are delegated to their hosted runner instead of being forced through raw
194
+ * `run(app, ...)`.
195
+ *
196
+ * @param app - The TEA application to run.
197
+ * @param options - Runtime options forwarded to {@link run}.
198
+ */
199
+ export async function startApp(app, options) {
200
+ const { ctx: explicitCtx, theme, presets, envVar, themes, themeMode, themeOverride, ...runOptions } = options ?? {};
201
+ let ctx = explicitCtx;
202
+ if (!ctx) {
203
+ if (theme !== undefined
204
+ || presets !== undefined
205
+ || envVar !== undefined
206
+ || themes !== undefined
207
+ || themeMode !== undefined
208
+ || themeOverride !== undefined) {
209
+ ctx = createNodeContext({ theme, presets, envVar, themes, themeMode, themeOverride });
210
+ setDefaultContext(ctx);
211
+ initialized = true;
212
+ }
213
+ else {
214
+ ctx = initDefaultContext();
215
+ }
216
+ }
217
+ if (isSelfRunningApp(app)) {
218
+ await app.run({ ...runOptions, ctx });
219
+ return;
220
+ }
221
+ await run(app, { ...runOptions, ctx });
80
222
  }
81
223
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,yDAAyD;AACzD,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAC9D,oDAAoD;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,gFAAgF;AAChF,OAAO,EAAE,UAAU,EAA0B,MAAM,YAAY,CAAC;AAEhE,kEAAkE;AAClE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,cAAc,EAAyB,MAAM,oBAAoB,CAAC;AACnH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,eAAe,GAIhB,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;IACtD,qDAAqD;IACrD,oEAAoE;IACpE,OAAO,WAAW,CAAC;QACjB,OAAO;QACP,EAAE,EAAE,MAAM,EAAE;QACZ,KAAK,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB;;;;;GAKG;AACH,MAAM,UAAU,2BAA2B;IACzC,WAAW,GAAG,KAAK,CAAC;AACtB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,kBAAkB;IAChC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;QAChC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,WAAW,GAAG,IAAI,CAAC;QACnB,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,iBAAiB,EAAE,CAAC;AAC7B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/io.d.ts CHANGED
@@ -4,6 +4,21 @@ export interface NodeIOOptions {
4
4
  /** Clock override for deterministic timer scheduling in tests. */
5
5
  clock?: ClockPort;
6
6
  }
7
+ export interface ScopedNodeIOOptions extends NodeIOOptions {
8
+ /** Root directory that all file access must stay inside. */
9
+ readonly root: string;
10
+ /** Optional base adapter for stdout/stdin/timer behavior. Defaults to {@link nodeIO}. */
11
+ readonly baseIO?: IOPort;
12
+ }
13
+ export interface ScopedNodeIO extends IOPort {
14
+ /** Absolute root directory that constrains filesystem access. */
15
+ readonly root: string;
16
+ /** Resolve a relative or absolute path and reject anything outside {@link root}. */
17
+ resolvePath(path: string): string;
18
+ }
19
+ export declare class ScopedNodeIOError extends Error {
20
+ constructor(root: string, requestedPath: string);
21
+ }
7
22
  /**
8
23
  * Create an {@link IOPort} backed by Node.js I/O primitives.
9
24
  *
@@ -16,4 +31,16 @@ export interface NodeIOOptions {
16
31
  * @returns An {@link IOPort} bound to the current Node.js process.
17
32
  */
18
33
  export declare function nodeIO(options?: NodeIOOptions): IOPort;
34
+ /**
35
+ * Create a Node.js I/O adapter whose filesystem access is constrained to a root directory.
36
+ *
37
+ * This wraps an {@link IOPort} and guards `readFile`, `readDir`, and `joinPath`
38
+ * so app-level file access cannot escape the declared root. Hosts can also call
39
+ * {@link ScopedNodeIO.resolvePath} before performing their own writes with Node's
40
+ * filesystem APIs, preserving the same root boundary for output paths.
41
+ *
42
+ * @param options - Root path plus optional adapter overrides.
43
+ * @returns An {@link ScopedNodeIO} rooted at the provided directory.
44
+ */
45
+ export declare function scopedNodeIO(options: ScopedNodeIOOptions): ScopedNodeIO;
19
46
  //# sourceMappingURL=io.d.ts.map
package/dist/io.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,MAAM,EAAyC,MAAM,qBAAqB,CAAC;AAEvH,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAoK1D"}
1
+ {"version":3,"file":"io.d.ts","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,MAAM,EAAyC,MAAM,qBAAqB,CAAC;AAEvH,6CAA6C;AAC7C,MAAM,WAAW,aAAa;IAC5B,kEAAkE;IAClE,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yFAAyF;IACzF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,YAAa,SAAQ,MAAM;IAC1C,iEAAiE;IACjE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC;AAED,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;CAIhD;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAoK1D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,YAAY,CAmDvE"}
package/dist/io.js CHANGED
@@ -1,7 +1,13 @@
1
1
  import * as readline from 'readline';
2
- import { readFileSync, readdirSync } from 'fs';
3
- import { join } from 'path';
2
+ import { existsSync, readFileSync, readdirSync, realpathSync } from 'fs';
3
+ import { basename, dirname, isAbsolute, join, relative, resolve } from 'path';
4
4
  import { resolveClock } from '@flyingrobots/bijou';
5
+ export class ScopedNodeIOError extends Error {
6
+ constructor(root, requestedPath) {
7
+ super(`Scoped node IO path escapes root "${root}": ${requestedPath}`);
8
+ this.name = 'ScopedNodeIOError';
9
+ }
10
+ }
5
11
  /**
6
12
  * Create an {@link IOPort} backed by Node.js I/O primitives.
7
13
  *
@@ -169,4 +175,62 @@ export function nodeIO(options = {}) {
169
175
  },
170
176
  };
171
177
  }
178
+ /**
179
+ * Create a Node.js I/O adapter whose filesystem access is constrained to a root directory.
180
+ *
181
+ * This wraps an {@link IOPort} and guards `readFile`, `readDir`, and `joinPath`
182
+ * so app-level file access cannot escape the declared root. Hosts can also call
183
+ * {@link ScopedNodeIO.resolvePath} before performing their own writes with Node's
184
+ * filesystem APIs, preserving the same root boundary for output paths.
185
+ *
186
+ * @param options - Root path plus optional adapter overrides.
187
+ * @returns An {@link ScopedNodeIO} rooted at the provided directory.
188
+ */
189
+ export function scopedNodeIO(options) {
190
+ const baseIO = options.baseIO ?? nodeIO({ clock: options.clock });
191
+ const root = resolve(options.root);
192
+ const realRoot = realpathSync.native(root);
193
+ function assertWithinRoot(realCandidate, requestedPath) {
194
+ const rel = relative(realRoot, realCandidate);
195
+ if (rel === '' || (!rel.startsWith('..') && !isAbsolute(rel))) {
196
+ return;
197
+ }
198
+ throw new ScopedNodeIOError(root, requestedPath);
199
+ }
200
+ function resolvePathWithinRoot(requestedPath) {
201
+ const candidate = resolve(root, requestedPath);
202
+ const suffix = [];
203
+ let existingPath = candidate;
204
+ while (!existsSync(existingPath)) {
205
+ const parent = dirname(existingPath);
206
+ if (parent === existingPath) {
207
+ throw new ScopedNodeIOError(root, requestedPath);
208
+ }
209
+ suffix.unshift(basename(existingPath));
210
+ existingPath = parent;
211
+ }
212
+ const realExistingPath = realpathSync.native(existingPath);
213
+ const realCandidate = suffix.length === 0
214
+ ? realExistingPath
215
+ : resolve(realExistingPath, ...suffix);
216
+ assertWithinRoot(realCandidate, requestedPath);
217
+ return realCandidate;
218
+ }
219
+ return {
220
+ ...baseIO,
221
+ root,
222
+ resolvePath(path) {
223
+ return resolvePathWithinRoot(path);
224
+ },
225
+ readFile(path) {
226
+ return baseIO.readFile(resolvePathWithinRoot(path));
227
+ },
228
+ readDir(path) {
229
+ return baseIO.readDir(resolvePathWithinRoot(path));
230
+ },
231
+ joinPath(...segments) {
232
+ return resolvePathWithinRoot(join(...segments));
233
+ },
234
+ };
235
+ }
172
236
  //# sourceMappingURL=io.js.map
package/dist/io.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"io.js","sourceRoot":"","sources":["../src/io.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAa,KAAK,GAAG,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAe/E,MAAM,WAAW,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,EAClD,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,GAC7B,OAAO,CAAC,cAAc,CAAC,CAezB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAuC1E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAgBlG"}
1
+ {"version":3,"file":"recorder.d.ts","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"AAGA,OAAO,EAAsC,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAa,KAAK,GAAG,EAAE,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAwC/E,MAAM,WAAW,cAAc,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACnB,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,YAAY,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,gBAAgB;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,EAClD,IAAI,EAAE,cAAc,CAAC,KAAK,EAAE,CAAC,CAAC,GAC7B,OAAO,CAAC,cAAc,CAAC,CAezB;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,iBAAiB,GAAG,cAAc,CAuC1E;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,UAAU,CAgBlG"}
package/dist/recorder.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { mkdirSync, writeFileSync } from 'node:fs';
2
2
  import { dirname } from 'node:path';
3
3
  import { createRequire } from 'node:module';
4
- import { createSurface } from '@flyingrobots/bijou';
4
+ import { createSurface, sanitizePositiveInt } from '@flyingrobots/bijou';
5
5
  import { runScript } from '@flyingrobots/bijou-tui';
6
6
  const require = createRequire(import.meta.url);
7
7
  const { GIFEncoder, applyPalette, quantize } = require('gifenc');
@@ -9,6 +9,32 @@ const FONT = require('oled-font-5x7');
9
9
  const GLYPH_MAP = new Map(FONT.lookup.map((char, index) => [char, index]));
10
10
  const DEFAULT_FOREGROUND = '#f5f7ff';
11
11
  const DEFAULT_BACKGROUND = '#0b1020';
12
+ function resolvedColorRgb(ref) {
13
+ if (typeof ref !== 'object' || ref == null)
14
+ return undefined;
15
+ if (!('kind' in ref) || ref.kind !== 'resolved-color')
16
+ return undefined;
17
+ if (!('rgb' in ref))
18
+ return undefined;
19
+ const rgb = ref.rgb;
20
+ return { r: rgb[0], g: rgb[1], b: rgb[2] };
21
+ }
22
+ function normalizeRgb(rgb) {
23
+ return Array.isArray(rgb)
24
+ ? { r: rgb[0], g: rgb[1], b: rgb[2] }
25
+ : rgb;
26
+ }
27
+ function resolvedColorHex(ref) {
28
+ if (typeof ref === 'string')
29
+ return ref;
30
+ return typeof ref === 'object'
31
+ && ref !== null
32
+ && 'kind' in ref
33
+ && ref.kind === 'resolved-color'
34
+ && 'hex' in ref
35
+ ? ref.hex
36
+ : undefined;
37
+ }
12
38
  export async function recordDemoGif(spec) {
13
39
  const result = await runScript(spec.app, spec.steps, {
14
40
  ctx: spec.ctx,
@@ -29,8 +55,8 @@ export function writeSurfaceGif(options) {
29
55
  throw new Error('writeSurfaceGif() requires at least one frame');
30
56
  }
31
57
  const rasterOptions = {
32
- cellWidth: options.cellWidth ?? 8,
33
- cellHeight: options.cellHeight ?? 10,
58
+ cellWidth: sanitizePositiveInt(options.cellWidth, 8),
59
+ cellHeight: sanitizePositiveInt(options.cellHeight, 10),
34
60
  foreground: options.foreground ?? DEFAULT_FOREGROUND,
35
61
  background: options.background ?? DEFAULT_BACKGROUND,
36
62
  };
@@ -41,7 +67,7 @@ export function writeSurfaceGif(options) {
41
67
  .map((frame) => rasterizeSurface(frame, rasterOptions));
42
68
  const palette = quantize(joinFrames(frames), 256, { format: 'rgb565' });
43
69
  const gif = GIFEncoder();
44
- const delay = Math.max(2, Math.round((options.frameDelayMs ?? 90) / 10));
70
+ const delay = Math.max(2, Math.round(sanitizePositiveInt(options.frameDelayMs, 90) / 10));
45
71
  for (const frame of frames) {
46
72
  const indexed = applyPalette(frame, palette);
47
73
  gif.writeFrame(indexed, width * rasterOptions.cellWidth, height * rasterOptions.cellHeight, {
@@ -60,8 +86,8 @@ export function writeSurfaceGif(options) {
60
86
  };
61
87
  }
62
88
  export function rasterizeSurface(surface, options) {
63
- const cellWidth = options?.cellWidth ?? 8;
64
- const cellHeight = options?.cellHeight ?? 10;
89
+ const cellWidth = sanitizePositiveInt(options?.cellWidth, 8);
90
+ const cellHeight = sanitizePositiveInt(options?.cellHeight, 10);
65
91
  const foreground = options?.foreground ?? DEFAULT_FOREGROUND;
66
92
  const background = options?.background ?? DEFAULT_BACKGROUND;
67
93
  const width = surface.width * cellWidth;
@@ -76,8 +102,10 @@ export function rasterizeSurface(surface, options) {
76
102
  }
77
103
  function drawCell(rgba, width, height, cellX, cellY, cellWidth, cellHeight, cell, fallbackForeground, fallbackBackground) {
78
104
  const modifiers = new Set(cell.modifiers ?? []);
79
- let fg = parseHex(cell.fg ?? fallbackForeground);
80
- let bg = parseHex(cell.bg ?? fallbackBackground);
105
+ const fgHex = resolvedColorHex(cell.fg);
106
+ const bgHex = resolvedColorHex(cell.bg);
107
+ let fg = normalizeRgb(cell.fgRGB ?? resolvedColorRgb(cell.fg) ?? parseHex(fgHex ?? fallbackForeground));
108
+ let bg = normalizeRgb(cell.bgRGB ?? resolvedColorRgb(cell.bg) ?? parseHex(bgHex ?? fallbackBackground));
81
109
  if (modifiers.has('inverse')) {
82
110
  [fg, bg] = [bg, fg];
83
111
  }
@@ -1 +1 @@
1
- {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"recorder.js","sourceRoot":"","sources":["../src/recorder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAmC,MAAM,qBAAqB,CAAC;AAC1G,OAAO,EAAE,SAAS,EAA6B,MAAM,yBAAyB,CAAC;AAE/E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,CAA4B,CAAC;AAC5F,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAKnC,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,GAAG,CAAiB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3F,MAAM,kBAAkB,GAAG,SAAS,CAAC;AACrC,MAAM,kBAAkB,GAAG,SAAS,CAAC;AAErC,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IAC7D,IAAI,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,IAAK,GAA0B,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,SAAS,CAAC;IAChG,IAAI,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,MAAM,GAAG,GAAI,GAAkD,CAAC,GAAG,CAAC;IACpE,OAAO,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,GAA4C;IAChE,OAAO,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QACvB,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAE,EAAE;QACxC,CAAC,CAAE,GAAW,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAY;IACpC,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACxC,OAAO,OAAO,GAAG,KAAK,QAAQ;WACzB,GAAG,KAAK,IAAI;WACZ,MAAM,IAAI,GAAG;WACZ,GAA0B,CAAC,IAAI,KAAK,gBAAgB;WACrD,KAAK,IAAI,GAAG;QACf,CAAC,CAAE,GAAuB,CAAC,GAAG;QAC9B,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAwCD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,EAAE;QACnD,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,GAAG,EAAE,IAAI,CAAC,GAAG;KACd,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;QACrB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,YAAY,EAAE,IAAI,CAAC,YAAY;QAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA0B;IACxD,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IAED,MAAM,aAAa,GAAqB;QACtC,SAAS,EAAE,mBAAmB,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QACpD,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;QACvD,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,kBAAkB;QACpD,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,kBAAkB;KACrD,CAAC;IAEF,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;SAC1B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;SAC3D,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IACxE,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAE1F,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7C,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU,EAAE;YAC1F,OAAO;YACP,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,GAAG,CAAC,MAAM,EAAE,CAAC;IACb,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAE5D,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,KAAK,GAAG,aAAa,CAAC,SAAS;QACtC,MAAM,EAAE,MAAM,GAAG,aAAa,CAAC,UAAU;KAC1C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgB,EAAE,OAAmC;IACpF,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,kBAAkB,CAAC;IAC7D,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,kBAAkB,CAAC;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC;IACxC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC;IAC3C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC;IAEhD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,QAAQ,CACf,IAAgB,EAChB,KAAa,EACb,MAAc,EACd,KAAa,EACb,KAAa,EACb,SAAiB,EACjB,UAAkB,EAClB,IAA8B,EAC9B,kBAA0B,EAC1B,kBAA0B;IAE1B,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxC,IAAI,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,IAAI,kBAAkB,CAAC,CAAC,CAAC;IACxG,IAAI,EAAE,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,KAAK,IAAI,kBAAkB,CAAC,CAAC,CAAC;IAExG,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACtB,CAAC;IACD,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,EAAE,GAAG,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;IACjC,MAAM,MAAM,GAAG,KAAK,GAAG,UAAU,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;IAEzE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;QACpC,OAAO;IACT,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1G,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClH,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,IAAI,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACvG,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CACtB,IAAgB,EAChB,KAAa,EACb,MAAc,EACd,CAAS,EACT,CAAS,EACT,IAAY,EACZ,KAAU;IAEV,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;IACvC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YAC3C,IAAI,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,IAAgB,EAChB,KAAa,EACb,MAAc,EACd,CAAS,EACT,CAAS,EACT,SAAiB,EACjB,UAAkB,EAClB,IAAY,EACZ,KAAU;IAEV,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;IAElC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,GAAG;YACN,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,KAAK,GAAG;YACN,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACrE,OAAO,IAAI,CAAC;QACd,KAAK,GAAG;YACN,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACtE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,KAAK,GAAG;YACN,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC/D,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,KAAK,GAAG;YACN,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YAC/D,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QACd,KAAK,GAAG;YACN,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;YAC/D,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YAC/D,OAAO,IAAI,CAAC;QACd,KAAK,GAAG;YACN,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;YACtE,OAAO,IAAI,CAAC;QACd;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CACf,IAAgB,EAChB,KAAa,EACb,MAAc,EACd,CAAS,EACT,CAAS,EACT,CAAS,EACT,CAAS,EACT,KAAU;IAEV,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;QACjC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAgB,EAAE,KAAa,EAAE,MAAc,EAAE,CAAS,EAAE,CAAS,EAAE,KAAU;IACjG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM;QAAE,OAAO;IACxD,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;IACxB,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACtB,CAAC;AAED,SAAS,UAAU,CAAC,MAAoB;IACtC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAgB,EAAE,KAAa,EAAE,MAAc;IAC5E,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACzD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAChD,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,OAAO,UAAU,CAAC;AACpB,CAAC;AAQD,SAAS,QAAQ,CAAC,GAAW;IAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC;IAC/D,OAAO;QACL,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACvC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;QACvC,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,CAAM,EAAE,CAAM,EAAE,KAAa;IAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAC1C,OAAO;QACL,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACtC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;KACvC,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flyingrobots/bijou-node",
3
- "version": "4.4.1",
3
+ "version": "5.0.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": "4.4.1",
27
+ "@flyingrobots/bijou-tui": "5.0.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": "4.4.1"
33
+ "@flyingrobots/bijou": "5.0.0"
34
34
  },
35
35
  "devDependencies": {
36
36
  "@types/node": "^22.0.0",