@textjs/app 0.0.0-stage → 1.0.2
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 +34 -2
- package/bin/text.js +29 -0
- package/bin/text.ts +13 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/cli/build.d.ts +39 -0
- package/dist/cli/build.d.ts.map +1 -0
- package/dist/cli/build.js +157 -0
- package/dist/cli/build.js.map +1 -0
- package/dist/cli/config.d.ts +22 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +73 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/dev.d.ts +12 -0
- package/dist/cli/dev.d.ts.map +1 -0
- package/dist/cli/dev.js +49 -0
- package/dist/cli/dev.js.map +1 -0
- package/dist/cli/index.d.ts +26 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +192 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/run.d.ts +31 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +111 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/start.d.ts +14 -0
- package/dist/cli/start.d.ts.map +1 -0
- package/dist/cli/start.js +183 -0
- package/dist/cli/start.js.map +1 -0
- package/dist/cli/ui.d.ts +35 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +73 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/client.d.ts +34 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +93 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +143 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +28 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +44 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +26 -0
- package/dist/context.js.map +1 -0
- package/dist/dev-errors.d.ts +68 -0
- package/dist/dev-errors.d.ts.map +1 -0
- package/dist/dev-errors.js +121 -0
- package/dist/dev-errors.js.map +1 -0
- package/dist/devtools.d.ts +64 -0
- package/dist/devtools.d.ts.map +1 -0
- package/dist/devtools.js +186 -0
- package/dist/devtools.js.map +1 -0
- package/dist/frame-mirror.d.ts +19 -0
- package/dist/frame-mirror.d.ts.map +1 -0
- package/dist/frame-mirror.js +141 -0
- package/dist/frame-mirror.js.map +1 -0
- package/dist/frame-protocol.d.ts +175 -0
- package/dist/frame-protocol.d.ts.map +1 -0
- package/dist/frame-protocol.js +369 -0
- package/dist/frame-protocol.js.map +1 -0
- package/dist/history.d.ts +54 -0
- package/dist/history.d.ts.map +1 -0
- package/dist/history.js +152 -0
- package/dist/history.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/link.d.ts +32 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +54 -0
- package/dist/link.js.map +1 -0
- package/dist/live-player.d.ts +83 -0
- package/dist/live-player.d.ts.map +1 -0
- package/dist/live-player.js +413 -0
- package/dist/live-player.js.map +1 -0
- package/dist/live-protocol.d.ts +132 -0
- package/dist/live-protocol.d.ts.map +1 -0
- package/dist/live-protocol.js +278 -0
- package/dist/live-protocol.js.map +1 -0
- package/dist/live-stub.d.ts +10 -0
- package/dist/live-stub.d.ts.map +1 -0
- package/dist/live-stub.js +32 -0
- package/dist/live-stub.js.map +1 -0
- package/dist/mcp/cli.d.ts +22 -0
- package/dist/mcp/cli.d.ts.map +1 -0
- package/dist/mcp/cli.js +177 -0
- package/dist/mcp/cli.js.map +1 -0
- package/dist/mcp/frame.d.ts +58 -0
- package/dist/mcp/frame.d.ts.map +1 -0
- package/dist/mcp/frame.js +169 -0
- package/dist/mcp/frame.js.map +1 -0
- package/dist/mcp/index.d.ts +15 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +15 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/inspect.d.ts +95 -0
- package/dist/mcp/inspect.d.ts.map +1 -0
- package/dist/mcp/inspect.js +386 -0
- package/dist/mcp/inspect.js.map +1 -0
- package/dist/mcp/keys.d.ts +20 -0
- package/dist/mcp/keys.d.ts.map +1 -0
- package/dist/mcp/keys.js +87 -0
- package/dist/mcp/keys.js.map +1 -0
- package/dist/mcp/logs.d.ts +63 -0
- package/dist/mcp/logs.d.ts.map +1 -0
- package/dist/mcp/logs.js +217 -0
- package/dist/mcp/logs.js.map +1 -0
- package/dist/mcp/server.d.ts +64 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +485 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session.d.ts +230 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +742 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/navigation-errors.d.ts +28 -0
- package/dist/navigation-errors.d.ts.map +1 -0
- package/dist/navigation-errors.js +43 -0
- package/dist/navigation-errors.js.map +1 -0
- package/dist/navigation.d.ts +21 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +33 -0
- package/dist/navigation.js.map +1 -0
- package/dist/router.d.ts +76 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +296 -0
- package/dist/router.js.map +1 -0
- package/dist/routing.d.ts +101 -0
- package/dist/routing.d.ts.map +1 -0
- package/dist/routing.js +286 -0
- package/dist/routing.js.map +1 -0
- package/dist/server/adapters/build-step.d.ts +34 -0
- package/dist/server/adapters/build-step.d.ts.map +1 -0
- package/dist/server/adapters/build-step.js +112 -0
- package/dist/server/adapters/build-step.js.map +1 -0
- package/dist/server/adapters/bun.d.ts +8 -0
- package/dist/server/adapters/bun.d.ts.map +1 -0
- package/dist/server/adapters/bun.js +89 -0
- package/dist/server/adapters/bun.js.map +1 -0
- package/dist/server/adapters/bundle.d.ts +21 -0
- package/dist/server/adapters/bundle.d.ts.map +1 -0
- package/dist/server/adapters/bundle.js +86 -0
- package/dist/server/adapters/bundle.js.map +1 -0
- package/dist/server/adapters/cloudflare.d.ts +29 -0
- package/dist/server/adapters/cloudflare.d.ts.map +1 -0
- package/dist/server/adapters/cloudflare.js +105 -0
- package/dist/server/adapters/cloudflare.js.map +1 -0
- package/dist/server/adapters/index.d.ts +10 -0
- package/dist/server/adapters/index.d.ts.map +1 -0
- package/dist/server/adapters/index.js +24 -0
- package/dist/server/adapters/index.js.map +1 -0
- package/dist/server/adapters/runtime-node.d.ts +16 -0
- package/dist/server/adapters/runtime-node.d.ts.map +1 -0
- package/dist/server/adapters/runtime-node.js +29 -0
- package/dist/server/adapters/runtime-node.js.map +1 -0
- package/dist/server/adapters/runtime.d.ts +42 -0
- package/dist/server/adapters/runtime.d.ts.map +1 -0
- package/dist/server/adapters/runtime.js +115 -0
- package/dist/server/adapters/runtime.js.map +1 -0
- package/dist/server/adapters/shared.d.ts +66 -0
- package/dist/server/adapters/shared.d.ts.map +1 -0
- package/dist/server/adapters/shared.js +124 -0
- package/dist/server/adapters/shared.js.map +1 -0
- package/dist/server/adapters/static.d.ts +9 -0
- package/dist/server/adapters/static.d.ts.map +1 -0
- package/dist/server/adapters/static.js +70 -0
- package/dist/server/adapters/static.js.map +1 -0
- package/dist/server/adapters/vercel.d.ts +43 -0
- package/dist/server/adapters/vercel.d.ts.map +1 -0
- package/dist/server/adapters/vercel.js +119 -0
- package/dist/server/adapters/vercel.js.map +1 -0
- package/dist/server/bun-jsx.d.ts +18 -0
- package/dist/server/bun-jsx.d.ts.map +1 -0
- package/dist/server/bun-jsx.js +56 -0
- package/dist/server/bun-jsx.js.map +1 -0
- package/dist/server/cache-route.d.ts +38 -0
- package/dist/server/cache-route.d.ts.map +1 -0
- package/dist/server/cache-route.js +109 -0
- package/dist/server/cache-route.js.map +1 -0
- package/dist/server/cache.d.ts +131 -0
- package/dist/server/cache.d.ts.map +1 -0
- package/dist/server/cache.js +409 -0
- package/dist/server/cache.js.map +1 -0
- package/dist/server/frames.d.ts +45 -0
- package/dist/server/frames.d.ts.map +1 -0
- package/dist/server/frames.js +294 -0
- package/dist/server/frames.js.map +1 -0
- package/dist/server/http.d.ts +80 -0
- package/dist/server/http.d.ts.map +1 -0
- package/dist/server/http.js +453 -0
- package/dist/server/http.js.map +1 -0
- package/dist/server/jsx-dev-runtime.d.ts +5 -0
- package/dist/server/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/server/jsx-dev-runtime.js +6 -0
- package/dist/server/jsx-dev-runtime.js.map +1 -0
- package/dist/server/jsx-runtime.d.ts +10 -0
- package/dist/server/jsx-runtime.d.ts.map +1 -0
- package/dist/server/jsx-runtime.js +11 -0
- package/dist/server/jsx-runtime.js.map +1 -0
- package/dist/server/live-app.d.ts +87 -0
- package/dist/server/live-app.d.ts.map +1 -0
- package/dist/server/live-app.js +307 -0
- package/dist/server/live-app.js.map +1 -0
- package/dist/server/live-build.d.ts +70 -0
- package/dist/server/live-build.d.ts.map +1 -0
- package/dist/server/live-build.js +222 -0
- package/dist/server/live-build.js.map +1 -0
- package/dist/server/live-dev.d.ts +62 -0
- package/dist/server/live-dev.d.ts.map +1 -0
- package/dist/server/live-dev.js +313 -0
- package/dist/server/live-dev.js.map +1 -0
- package/dist/server/live-manifest.d.ts +23 -0
- package/dist/server/live-manifest.d.ts.map +1 -0
- package/dist/server/live-manifest.js +7 -0
- package/dist/server/live-manifest.js.map +1 -0
- package/dist/server/live-prod.d.ts +30 -0
- package/dist/server/live-prod.d.ts.map +1 -0
- package/dist/server/live-prod.js +97 -0
- package/dist/server/live-prod.js.map +1 -0
- package/dist/server/live-routes.d.ts +72 -0
- package/dist/server/live-routes.d.ts.map +1 -0
- package/dist/server/live-routes.js +274 -0
- package/dist/server/live-routes.js.map +1 -0
- package/dist/server/live-web.d.ts +16 -0
- package/dist/server/live-web.d.ts.map +1 -0
- package/dist/server/live-web.js +159 -0
- package/dist/server/live-web.js.map +1 -0
- package/dist/server/live.d.ts +138 -0
- package/dist/server/live.d.ts.map +1 -0
- package/dist/server/live.js +542 -0
- package/dist/server/live.js.map +1 -0
- package/dist/server/middleware-node.d.ts +48 -0
- package/dist/server/middleware-node.d.ts.map +1 -0
- package/dist/server/middleware-node.js +167 -0
- package/dist/server/middleware-node.js.map +1 -0
- package/dist/server/middleware-runtime.d.ts +97 -0
- package/dist/server/middleware-runtime.d.ts.map +1 -0
- package/dist/server/middleware-runtime.js +447 -0
- package/dist/server/middleware-runtime.js.map +1 -0
- package/dist/server/middleware.d.ts +145 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/middleware.js +365 -0
- package/dist/server/middleware.js.map +1 -0
- package/dist/server/ppr.d.ts +22 -0
- package/dist/server/ppr.d.ts.map +1 -0
- package/dist/server/ppr.js +58 -0
- package/dist/server/ppr.js.map +1 -0
- package/dist/server/scan.d.ts +48 -0
- package/dist/server/scan.d.ts.map +1 -0
- package/dist/server/scan.js +161 -0
- package/dist/server/scan.js.map +1 -0
- package/dist/server/server-components.d.ts +65 -0
- package/dist/server/server-components.d.ts.map +1 -0
- package/dist/server/server-components.js +215 -0
- package/dist/server/server-components.js.map +1 -0
- package/dist/terminal.d.ts +5 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +5 -0
- package/dist/terminal.js.map +1 -0
- package/dist/testing.d.ts +5 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +5 -0
- package/dist/testing.js.map +1 -0
- package/dist/vite-plugin.d.ts +51 -0
- package/dist/vite-plugin.d.ts.map +1 -0
- package/dist/vite-plugin.js +403 -0
- package/dist/vite-plugin.js.map +1 -0
- package/package.json +130 -4
- package/src/cli/build.ts +182 -0
- package/src/cli/config.ts +72 -0
- package/src/cli/dev.ts +54 -0
- package/src/cli/index.ts +185 -0
- package/src/cli/run.ts +124 -0
- package/src/cli/start.ts +194 -0
- package/src/cli/ui.ts +93 -0
- package/src/client.tsx +122 -0
- package/src/config.ts +155 -0
- package/src/context.ts +69 -0
- package/src/dev-errors.ts +167 -0
- package/src/devtools.tsx +419 -0
- package/src/frame-mirror.ts +145 -0
- package/src/frame-protocol.ts +435 -0
- package/src/history.ts +201 -0
- package/src/index.ts +9 -0
- package/src/link.tsx +108 -0
- package/src/live-player.ts +449 -0
- package/src/live-protocol.ts +317 -0
- package/src/live-stub.tsx +32 -0
- package/src/mcp/cli.ts +188 -0
- package/src/mcp/frame.ts +224 -0
- package/src/mcp/index.ts +15 -0
- package/src/mcp/inspect.ts +445 -0
- package/src/mcp/keys.ts +86 -0
- package/src/mcp/logs.ts +225 -0
- package/src/mcp/server.ts +595 -0
- package/src/mcp/session.ts +821 -0
- package/src/navigation-errors.ts +60 -0
- package/src/navigation.ts +44 -0
- package/src/router.tsx +497 -0
- package/src/routing.ts +344 -0
- package/src/server/adapters/build-step.ts +135 -0
- package/src/server/adapters/bun.ts +92 -0
- package/src/server/adapters/bundle.ts +97 -0
- package/src/server/adapters/cloudflare.ts +111 -0
- package/src/server/adapters/index.ts +29 -0
- package/src/server/adapters/runtime-node.ts +34 -0
- package/src/server/adapters/runtime.ts +145 -0
- package/src/server/adapters/shared.ts +159 -0
- package/src/server/adapters/static.ts +68 -0
- package/src/server/adapters/vercel.ts +149 -0
- package/src/server/bun-jsx.ts +65 -0
- package/src/server/cache-route.ts +139 -0
- package/src/server/cache.ts +498 -0
- package/src/server/frames.ts +326 -0
- package/src/server/http.ts +467 -0
- package/src/server/jsx-dev-runtime.ts +9 -0
- package/src/server/jsx-runtime.ts +13 -0
- package/src/server/live-app.tsx +374 -0
- package/src/server/live-build.ts +258 -0
- package/src/server/live-dev.ts +357 -0
- package/src/server/live-manifest.ts +25 -0
- package/src/server/live-prod.ts +120 -0
- package/src/server/live-routes.ts +298 -0
- package/src/server/live-web.ts +170 -0
- package/src/server/live.ts +551 -0
- package/src/server/middleware-node.ts +168 -0
- package/src/server/middleware-runtime.ts +478 -0
- package/src/server/middleware.ts +451 -0
- package/src/server/ppr.ts +62 -0
- package/src/server/scan.ts +190 -0
- package/src/server/server-components.ts +224 -0
- package/src/terminal.ts +5 -0
- package/src/testing.ts +5 -0
- package/src/vite-plugin.ts +413 -0
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire protocol for server-rendered console routes (`export const runtime = "server"`).
|
|
3
|
+
*
|
|
4
|
+
* Server ──(SSE `GET /__textjs/live`)──▶ frame player: {@link LiveServerMessage}
|
|
5
|
+
* Player ──(`POST /__textjs/live`, JSON {@link LiveInput}[])──▶ server
|
|
6
|
+
*
|
|
7
|
+
* Frames are exact cell deltas: only rows whose hash changed since the last
|
|
8
|
+
* message are sent, as runs of `[styleIndex, text]` against an append-only
|
|
9
|
+
* per-connection style table of packed `[fg, bg, attrs]`. The player writes
|
|
10
|
+
* them into its own `CellBuffer` and encodes `console.log` frames with the
|
|
11
|
+
* same `CssConsoleDriver` the client renderer uses, so a server-rendered
|
|
12
|
+
* frame is byte-for-byte the frame the client would have logged.
|
|
13
|
+
*
|
|
14
|
+
* Browser-safe and dependency-light: the frame player bundles this module.
|
|
15
|
+
*/
|
|
16
|
+
import { type CellBuffer } from "@textjs/core";
|
|
17
|
+
export declare const LIVE_PROTOCOL_VERSION = 1;
|
|
18
|
+
/** SSE stream (GET) and input endpoint (POST), relative to `basePath`. */
|
|
19
|
+
export declare const LIVE_PATH = "/__textjs/live";
|
|
20
|
+
/** Session id header required on input POSTs (a custom header forces a CORS preflight cross-origin). */
|
|
21
|
+
export declare const LIVE_SESSION_HEADER = "x-textjs-live";
|
|
22
|
+
/** `[fg, bg, attrs]` (packed `0xRRGGBBAA` colors, attribute bitmask without `ATTR_WIDE_CONT`). */
|
|
23
|
+
export type LiveStyle = [fg: number, bg: number, attrs: number];
|
|
24
|
+
/** `[y, runs, graphemes?]`: `runs` alternates style index and text. */
|
|
25
|
+
export type LiveRow = [y: number, runs: Array<number | string>, graphemes?: string[]];
|
|
26
|
+
export interface LiveFrame {
|
|
27
|
+
t: "f";
|
|
28
|
+
w: number;
|
|
29
|
+
h: number;
|
|
30
|
+
/** Keyframe: reset the style table and buffer before applying. */
|
|
31
|
+
k?: 1;
|
|
32
|
+
/** Styles appended to the table, in index order. */
|
|
33
|
+
s?: LiveStyle[];
|
|
34
|
+
r: LiveRow[];
|
|
35
|
+
}
|
|
36
|
+
export type LiveServerMessage = {
|
|
37
|
+
t: "hello";
|
|
38
|
+
v: number;
|
|
39
|
+
sid: string;
|
|
40
|
+
resumed: boolean;
|
|
41
|
+
} | LiveFrame
|
|
42
|
+
/** The app navigated: mirror it into the address bar. */
|
|
43
|
+
| {
|
|
44
|
+
t: "url";
|
|
45
|
+
href: string;
|
|
46
|
+
replace?: boolean;
|
|
47
|
+
}
|
|
48
|
+
/** The app went back / forward (`router.back()`): move the browser's history by `delta`. */
|
|
49
|
+
| {
|
|
50
|
+
t: "go";
|
|
51
|
+
delta: number;
|
|
52
|
+
} | {
|
|
53
|
+
t: "title";
|
|
54
|
+
title: string;
|
|
55
|
+
}
|
|
56
|
+
/** The next route renders on the client: load it as a document. */
|
|
57
|
+
| {
|
|
58
|
+
t: "load";
|
|
59
|
+
href: string;
|
|
60
|
+
} | {
|
|
61
|
+
t: "error";
|
|
62
|
+
message: string;
|
|
63
|
+
};
|
|
64
|
+
export interface LiveKeyInput {
|
|
65
|
+
type: "key";
|
|
66
|
+
key: string;
|
|
67
|
+
input: string;
|
|
68
|
+
code: string;
|
|
69
|
+
repeat: boolean;
|
|
70
|
+
ctrl: boolean;
|
|
71
|
+
meta: boolean;
|
|
72
|
+
shift: boolean;
|
|
73
|
+
alt: boolean;
|
|
74
|
+
}
|
|
75
|
+
export type LiveInput = LiveKeyInput | {
|
|
76
|
+
type: "paste";
|
|
77
|
+
text: string;
|
|
78
|
+
} | {
|
|
79
|
+
type: "wheel";
|
|
80
|
+
deltaX: number;
|
|
81
|
+
deltaY: number;
|
|
82
|
+
rows: number;
|
|
83
|
+
cols: number;
|
|
84
|
+
ctrl: boolean;
|
|
85
|
+
meta: boolean;
|
|
86
|
+
shift: boolean;
|
|
87
|
+
alt: boolean;
|
|
88
|
+
} | {
|
|
89
|
+
type: "resize";
|
|
90
|
+
cols: number;
|
|
91
|
+
rows: number;
|
|
92
|
+
} | {
|
|
93
|
+
type: "focus";
|
|
94
|
+
focused: boolean;
|
|
95
|
+
}
|
|
96
|
+
/** Browser Back / Forward (`delta` entries from the previous one, when known). */
|
|
97
|
+
| {
|
|
98
|
+
type: "nav";
|
|
99
|
+
href: string;
|
|
100
|
+
delta?: number;
|
|
101
|
+
};
|
|
102
|
+
export declare const MAX_COLS = 400;
|
|
103
|
+
export declare const MAX_ROWS = 200;
|
|
104
|
+
/**
|
|
105
|
+
* `true` for a same-origin app path: one leading `/`, no `//` or `/\` prefix
|
|
106
|
+
* (which browsers resolve to another host), no backslashes or control characters.
|
|
107
|
+
*/
|
|
108
|
+
export declare function isAppPath(href: string): boolean;
|
|
109
|
+
/** Validate one untrusted input event (returns `null` when malformed). */
|
|
110
|
+
export declare function parseLiveInput(raw: unknown): LiveInput | null;
|
|
111
|
+
/** Format one SSE event. */
|
|
112
|
+
export declare function sseEvent(message: LiveServerMessage, id?: string): string;
|
|
113
|
+
/** Server half: diffs a `CellBuffer` against what this connection has been sent. */
|
|
114
|
+
export declare class LiveFrameEncoder {
|
|
115
|
+
private styles;
|
|
116
|
+
private prev;
|
|
117
|
+
private width;
|
|
118
|
+
private height;
|
|
119
|
+
private keyframe;
|
|
120
|
+
/** Make the next frame a keyframe (a new or resumed connection). */
|
|
121
|
+
reset(): void;
|
|
122
|
+
/** Encode rows changed since the last call, or `null` when nothing changed. */
|
|
123
|
+
encode(buf: CellBuffer): LiveFrame | null;
|
|
124
|
+
private encodeRow;
|
|
125
|
+
}
|
|
126
|
+
/** Player half: applies {@link LiveFrame}s to a `CellBuffer`. */
|
|
127
|
+
export declare class LiveFrameDecoder {
|
|
128
|
+
private styles;
|
|
129
|
+
/** Apply a frame. Returns `false` when it can't be applied (a delta before any keyframe). */
|
|
130
|
+
apply(buf: CellBuffer, frame: LiveFrame): boolean;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=live-protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-protocol.d.ts","sourceRoot":"","sources":["../src/live-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wire protocol for server-rendered console routes (`export const runtime = "server"`).
|
|
3
|
+
*
|
|
4
|
+
* Server ──(SSE `GET /__textjs/live`)──▶ frame player: {@link LiveServerMessage}
|
|
5
|
+
* Player ──(`POST /__textjs/live`, JSON {@link LiveInput}[])──▶ server
|
|
6
|
+
*
|
|
7
|
+
* Frames are exact cell deltas: only rows whose hash changed since the last
|
|
8
|
+
* message are sent, as runs of `[styleIndex, text]` against an append-only
|
|
9
|
+
* per-connection style table of packed `[fg, bg, attrs]`. The player writes
|
|
10
|
+
* them into its own `CellBuffer` and encodes `console.log` frames with the
|
|
11
|
+
* same `CssConsoleDriver` the client renderer uses, so a server-rendered
|
|
12
|
+
* frame is byte-for-byte the frame the client would have logged.
|
|
13
|
+
*
|
|
14
|
+
* Browser-safe and dependency-light: the frame player bundles this module.
|
|
15
|
+
*/
|
|
16
|
+
import { ATTR_WIDE_CONT, CHAR_CONTINUATION, GRAPHEME_POOL_FLAG } from "@textjs/core";
|
|
17
|
+
export const LIVE_PROTOCOL_VERSION = 1;
|
|
18
|
+
/** SSE stream (GET) and input endpoint (POST), relative to `basePath`. */
|
|
19
|
+
export const LIVE_PATH = "/__textjs/live";
|
|
20
|
+
/** Session id header required on input POSTs (a custom header forces a CORS preflight cross-origin). */
|
|
21
|
+
export const LIVE_SESSION_HEADER = "x-textjs-live";
|
|
22
|
+
export const MAX_COLS = 400;
|
|
23
|
+
export const MAX_ROWS = 200;
|
|
24
|
+
const MAX_KEY = 64;
|
|
25
|
+
const MAX_PASTE = 256 * 1024;
|
|
26
|
+
const clampInt = (v, lo, hi) => typeof v === "number" && Number.isFinite(v) ? Math.max(lo, Math.min(hi, Math.floor(v))) : null;
|
|
27
|
+
const finite = (v) => (typeof v === "number" && Number.isFinite(v) ? Math.max(-1e6, Math.min(1e6, v)) : 0);
|
|
28
|
+
const str = (v, max) => (typeof v === "string" && v.length <= max ? v : null);
|
|
29
|
+
/**
|
|
30
|
+
* `true` for a same-origin app path: one leading `/`, no `//` or `/\` prefix
|
|
31
|
+
* (which browsers resolve to another host), no backslashes or control characters.
|
|
32
|
+
*/
|
|
33
|
+
export function isAppPath(href) {
|
|
34
|
+
return href.startsWith("/") && !/^\/[/\\]/.test(href) && !/[\u0000-\u001f\u007f\\]/.test(href);
|
|
35
|
+
}
|
|
36
|
+
/** Validate one untrusted input event (returns `null` when malformed). */
|
|
37
|
+
export function parseLiveInput(raw) {
|
|
38
|
+
if (typeof raw !== "object" || raw === null)
|
|
39
|
+
return null;
|
|
40
|
+
const m = raw;
|
|
41
|
+
switch (m.type) {
|
|
42
|
+
case "key": {
|
|
43
|
+
const key = str(m.key, MAX_KEY);
|
|
44
|
+
if (key === null || key.length === 0)
|
|
45
|
+
return null;
|
|
46
|
+
return {
|
|
47
|
+
type: "key",
|
|
48
|
+
key,
|
|
49
|
+
input: str(m.input, MAX_KEY) ?? "",
|
|
50
|
+
code: str(m.code, MAX_KEY) ?? "",
|
|
51
|
+
repeat: m.repeat === true,
|
|
52
|
+
ctrl: m.ctrl === true,
|
|
53
|
+
meta: m.meta === true,
|
|
54
|
+
shift: m.shift === true,
|
|
55
|
+
alt: m.alt === true,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
case "paste": {
|
|
59
|
+
const text = str(m.text, MAX_PASTE);
|
|
60
|
+
return text === null ? null : { type: "paste", text: text.replace(/\r\n?/g, "\n") };
|
|
61
|
+
}
|
|
62
|
+
case "wheel":
|
|
63
|
+
return {
|
|
64
|
+
type: "wheel",
|
|
65
|
+
deltaX: finite(m.deltaX),
|
|
66
|
+
deltaY: finite(m.deltaY),
|
|
67
|
+
rows: finite(m.rows),
|
|
68
|
+
cols: finite(m.cols),
|
|
69
|
+
ctrl: m.ctrl === true,
|
|
70
|
+
meta: m.meta === true,
|
|
71
|
+
shift: m.shift === true,
|
|
72
|
+
alt: m.alt === true,
|
|
73
|
+
};
|
|
74
|
+
case "resize": {
|
|
75
|
+
const cols = clampInt(m.cols, 1, MAX_COLS);
|
|
76
|
+
const rows = clampInt(m.rows, 1, MAX_ROWS);
|
|
77
|
+
return cols === null || rows === null ? null : { type: "resize", cols, rows };
|
|
78
|
+
}
|
|
79
|
+
case "focus":
|
|
80
|
+
return typeof m.focused === "boolean" ? { type: "focus", focused: m.focused } : null;
|
|
81
|
+
case "nav": {
|
|
82
|
+
const href = str(m.href, 2048);
|
|
83
|
+
if (href === null || !isAppPath(href))
|
|
84
|
+
return null;
|
|
85
|
+
const delta = clampInt(m.delta, -1000, 1000);
|
|
86
|
+
return delta === null || delta === 0 ? { type: "nav", href } : { type: "nav", href, delta };
|
|
87
|
+
}
|
|
88
|
+
default:
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
/** Format one SSE event. */
|
|
93
|
+
export function sseEvent(message, id) {
|
|
94
|
+
return `${id !== undefined ? `id: ${id}\n` : ""}data: ${JSON.stringify(message)}\n\n`;
|
|
95
|
+
}
|
|
96
|
+
// ---------------------------------------------------------------------------
|
|
97
|
+
// Cell codec
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
/** Run text markers: a wide-grapheme continuation cell, a pooled grapheme, an escaped code point. */
|
|
100
|
+
const M_CONT = "\u0000";
|
|
101
|
+
const M_POOL = "\u0001";
|
|
102
|
+
const M_ESC = "\u0002";
|
|
103
|
+
const STYLE_TABLE_CAP = 4096;
|
|
104
|
+
/** Server half: diffs a `CellBuffer` against what this connection has been sent. */
|
|
105
|
+
export class LiveFrameEncoder {
|
|
106
|
+
styles = new Map();
|
|
107
|
+
prev = new Uint32Array(0);
|
|
108
|
+
width = -1;
|
|
109
|
+
height = -1;
|
|
110
|
+
keyframe = true;
|
|
111
|
+
/** Make the next frame a keyframe (a new or resumed connection). */
|
|
112
|
+
reset() {
|
|
113
|
+
this.keyframe = true;
|
|
114
|
+
}
|
|
115
|
+
/** Encode rows changed since the last call, or `null` when nothing changed. */
|
|
116
|
+
encode(buf) {
|
|
117
|
+
const W = buf.width;
|
|
118
|
+
const H = buf.height;
|
|
119
|
+
if (W !== this.width || H !== this.height || this.styles.size > STYLE_TABLE_CAP)
|
|
120
|
+
this.keyframe = true;
|
|
121
|
+
const key = this.keyframe;
|
|
122
|
+
if (key) {
|
|
123
|
+
this.keyframe = false;
|
|
124
|
+
this.width = W;
|
|
125
|
+
this.height = H;
|
|
126
|
+
this.prev = new Uint32Array(H);
|
|
127
|
+
this.styles = new Map();
|
|
128
|
+
}
|
|
129
|
+
const hashes = buf.getRowHashes();
|
|
130
|
+
const newStyles = [];
|
|
131
|
+
const rows = [];
|
|
132
|
+
for (let y = 0; y < H; y++) {
|
|
133
|
+
const h = hashes[y];
|
|
134
|
+
if (!key && h === this.prev[y])
|
|
135
|
+
continue;
|
|
136
|
+
this.prev[y] = h;
|
|
137
|
+
rows.push(this.encodeRow(buf, y, newStyles));
|
|
138
|
+
}
|
|
139
|
+
if (rows.length === 0)
|
|
140
|
+
return null;
|
|
141
|
+
const frame = { t: "f", w: W, h: H, r: rows };
|
|
142
|
+
if (key)
|
|
143
|
+
frame.k = 1;
|
|
144
|
+
if (newStyles.length > 0)
|
|
145
|
+
frame.s = newStyles;
|
|
146
|
+
return frame;
|
|
147
|
+
}
|
|
148
|
+
encodeRow(buf, y, newStyles) {
|
|
149
|
+
const W = buf.width;
|
|
150
|
+
const C = buf.chars;
|
|
151
|
+
const F = buf.fg;
|
|
152
|
+
const B = buf.bg;
|
|
153
|
+
const A = buf.attrs;
|
|
154
|
+
const runs = [];
|
|
155
|
+
let graphemes;
|
|
156
|
+
let curF = -1;
|
|
157
|
+
let curB = -1;
|
|
158
|
+
let curA = -1;
|
|
159
|
+
let text = "";
|
|
160
|
+
for (let i = y * W, end = i + W; i < end; i++) {
|
|
161
|
+
const f = F[i];
|
|
162
|
+
const b = B[i];
|
|
163
|
+
const rawA = A[i];
|
|
164
|
+
const a = rawA & ~ATTR_WIDE_CONT;
|
|
165
|
+
if (f !== curF || b !== curB || a !== curA) {
|
|
166
|
+
if (text.length > 0)
|
|
167
|
+
runs.push(text);
|
|
168
|
+
text = "";
|
|
169
|
+
curF = f;
|
|
170
|
+
curB = b;
|
|
171
|
+
curA = a;
|
|
172
|
+
const k = `${f},${b},${a}`;
|
|
173
|
+
let idx = this.styles.get(k);
|
|
174
|
+
if (idx === undefined) {
|
|
175
|
+
idx = this.styles.size;
|
|
176
|
+
this.styles.set(k, idx);
|
|
177
|
+
newStyles.push([f, b, a]);
|
|
178
|
+
}
|
|
179
|
+
runs.push(idx);
|
|
180
|
+
}
|
|
181
|
+
const c = C[i];
|
|
182
|
+
if (rawA & ATTR_WIDE_CONT)
|
|
183
|
+
text += M_CONT;
|
|
184
|
+
else if (c >= GRAPHEME_POOL_FLAG) {
|
|
185
|
+
text += M_POOL;
|
|
186
|
+
(graphemes ??= []).push(buf.graphemePool[c & 0x7fffffff] ?? " ");
|
|
187
|
+
}
|
|
188
|
+
else if (c < 0x20 || c === 0x7f || (c >= 0xd800 && c <= 0xdfff))
|
|
189
|
+
text += `${M_ESC}${c.toString(16)};`;
|
|
190
|
+
else
|
|
191
|
+
text += c < 0x10000 ? String.fromCharCode(c) : String.fromCodePoint(c);
|
|
192
|
+
}
|
|
193
|
+
if (text.length > 0)
|
|
194
|
+
runs.push(text);
|
|
195
|
+
return graphemes ? [y, runs, graphemes] : [y, runs];
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
/** Player half: applies {@link LiveFrame}s to a `CellBuffer`. */
|
|
199
|
+
export class LiveFrameDecoder {
|
|
200
|
+
styles = [];
|
|
201
|
+
/** Apply a frame. Returns `false` when it can't be applied (a delta before any keyframe). */
|
|
202
|
+
apply(buf, frame) {
|
|
203
|
+
if (frame.k === 1) {
|
|
204
|
+
this.styles = [];
|
|
205
|
+
if (buf.width !== frame.w || buf.height !== frame.h)
|
|
206
|
+
buf.resize(frame.w, frame.h);
|
|
207
|
+
buf.clear();
|
|
208
|
+
}
|
|
209
|
+
else if (buf.width !== frame.w || buf.height !== frame.h)
|
|
210
|
+
return false;
|
|
211
|
+
if (frame.s)
|
|
212
|
+
for (const s of frame.s)
|
|
213
|
+
this.styles.push(s);
|
|
214
|
+
const W = buf.width;
|
|
215
|
+
const C = buf.chars;
|
|
216
|
+
const F = buf.fg;
|
|
217
|
+
const B = buf.bg;
|
|
218
|
+
const A = buf.attrs;
|
|
219
|
+
for (const row of frame.r) {
|
|
220
|
+
const y = row[0];
|
|
221
|
+
if (y < 0 || y >= buf.height)
|
|
222
|
+
continue;
|
|
223
|
+
const runs = row[1];
|
|
224
|
+
const graphemes = row[2];
|
|
225
|
+
let gi = 0;
|
|
226
|
+
let i = y * W;
|
|
227
|
+
const end = i + W;
|
|
228
|
+
let f = 0;
|
|
229
|
+
let b = 0;
|
|
230
|
+
let a = 0;
|
|
231
|
+
for (let r = 0; r < runs.length; r++) {
|
|
232
|
+
const item = runs[r];
|
|
233
|
+
if (typeof item === "number") {
|
|
234
|
+
const s = this.styles[item];
|
|
235
|
+
if (s === undefined)
|
|
236
|
+
return false;
|
|
237
|
+
f = s[0];
|
|
238
|
+
b = s[1];
|
|
239
|
+
a = s[2];
|
|
240
|
+
continue;
|
|
241
|
+
}
|
|
242
|
+
for (let k = 0; k < item.length && i < end;) {
|
|
243
|
+
const cp = item.codePointAt(k);
|
|
244
|
+
let code;
|
|
245
|
+
let attrs = a;
|
|
246
|
+
if (cp === 0) {
|
|
247
|
+
code = CHAR_CONTINUATION;
|
|
248
|
+
attrs = a | ATTR_WIDE_CONT;
|
|
249
|
+
k++;
|
|
250
|
+
}
|
|
251
|
+
else if (cp === 1) {
|
|
252
|
+
code = buf.internGrapheme(graphemes?.[gi++] ?? " ");
|
|
253
|
+
k++;
|
|
254
|
+
}
|
|
255
|
+
else if (cp === 2) {
|
|
256
|
+
const semi = item.indexOf(";", k);
|
|
257
|
+
if (semi < 0)
|
|
258
|
+
return false;
|
|
259
|
+
code = Number.parseInt(item.slice(k + 1, semi), 16) >>> 0;
|
|
260
|
+
k = semi + 1;
|
|
261
|
+
}
|
|
262
|
+
else {
|
|
263
|
+
code = cp;
|
|
264
|
+
k += cp > 0xffff ? 2 : 1;
|
|
265
|
+
}
|
|
266
|
+
C[i] = code;
|
|
267
|
+
F[i] = f;
|
|
268
|
+
B[i] = b;
|
|
269
|
+
A[i] = attrs;
|
|
270
|
+
i++;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
buf.markRowsDirty(y);
|
|
274
|
+
}
|
|
275
|
+
return true;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
//# sourceMappingURL=live-protocol.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-protocol.js","sourceRoot":"","sources":["../src/live-protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stands in for server-rendered pages (`export const runtime = "server"`) in
|
|
3
|
+
* the browser bundle, so their modules (and whatever they import) never ship
|
|
4
|
+
* to the client. Navigating to one from a client route loads it as a document,
|
|
5
|
+
* which the server answers with the frame player.
|
|
6
|
+
*/
|
|
7
|
+
import { type ReactNode } from "react";
|
|
8
|
+
export declare const runtime = "server";
|
|
9
|
+
export default function ServerRoute(): ReactNode;
|
|
10
|
+
//# sourceMappingURL=live-stub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-stub.d.ts","sourceRoot":"","sources":["../src/live-stub.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAElD,eAAO,MAAM,OAAO,WAAW,CAAC;AAIhC,MAAM,CAAC,OAAO,UAAU,WAAW,IAAI,SAAS,CAkB/C"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Stands in for server-rendered pages (`export const runtime = "server"`) in
|
|
3
|
+
* the browser bundle, so their modules (and whatever they import) never ship
|
|
4
|
+
* to the client. Navigating to one from a client route loads it as a document,
|
|
5
|
+
* which the server answers with the frame player.
|
|
6
|
+
*/
|
|
7
|
+
import { useEffect } from "react";
|
|
8
|
+
export const runtime = "server";
|
|
9
|
+
const GUARD_KEY = "textjs:server-route";
|
|
10
|
+
export default function ServerRoute() {
|
|
11
|
+
useEffect(() => {
|
|
12
|
+
if (typeof window === "undefined")
|
|
13
|
+
return;
|
|
14
|
+
const href = window.location.href;
|
|
15
|
+
try {
|
|
16
|
+
// Never loop if the document for this URL is (stale) client HTML.
|
|
17
|
+
const last = window.sessionStorage.getItem(GUARD_KEY);
|
|
18
|
+
if (last !== null) {
|
|
19
|
+
const [at, url] = [Number(last.slice(0, last.indexOf(" "))), last.slice(last.indexOf(" ") + 1)];
|
|
20
|
+
if (url === href && Date.now() - at < 3000)
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
window.sessionStorage.setItem(GUARD_KEY, `${Date.now()} ${href}`);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Storage blocked: reload anyway.
|
|
27
|
+
}
|
|
28
|
+
window.location.reload();
|
|
29
|
+
}, []);
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=live-stub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-stub.js","sourceRoot":"","sources":["../src/live-stub.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAkB,MAAM,OAAO,CAAC;AAElD,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,MAAM,SAAS,GAAG,qBAAqB,CAAC;AAExC,MAAM,CAAC,OAAO,UAAU,WAAW;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,kEAAkE;YAClE,MAAM,IAAI,GAAG,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChG,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;oBAAE,OAAO;YACrD,CAAC;YACD,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,kCAAkC;QACpC,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IACP,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `text mcp [dir]` — serve a headless Text.js app to coding agents over MCP
|
|
3
|
+
* (stdio). stdout carries JSON-RPC only: app `console.*` output and stray
|
|
4
|
+
* `process.stdout.write` calls are captured into the `logs` tool instead.
|
|
5
|
+
*/
|
|
6
|
+
export interface McpCliArgs {
|
|
7
|
+
dir: string;
|
|
8
|
+
path?: string;
|
|
9
|
+
cols?: number;
|
|
10
|
+
rows?: number;
|
|
11
|
+
theme?: string;
|
|
12
|
+
skipConfig: boolean;
|
|
13
|
+
verbose: boolean;
|
|
14
|
+
help: boolean;
|
|
15
|
+
/** Unrecognized `-`/`--` flags (reported as a usage error). */
|
|
16
|
+
unknown: string[];
|
|
17
|
+
}
|
|
18
|
+
export declare const MCP_HELP = "Usage: text mcp [dir] [options]\n\nServe the app in [dir] to coding agents over the Model Context Protocol (stdio).\nThe app runs headless, in-process: same routes, layouts and route handlers.\n\nOptions:\n --path <pathname> Initial route (default /)\n --cols <n> Grid width (default: text.config.ts viewport, else 100)\n --rows <n> Grid height (default: text.config.ts viewport, else 32)\n --theme <name> Theme preset\n --no-config Ignore text.config.ts\n --verbose Mirror captured logs to stderr\n -h, --help Show this help\n\nTools: list_routes navigate read_frame press type paste scroll resize\n inspect_tree find wait_for logs fetch reload\n";
|
|
19
|
+
export declare function parseMcpArgs(argv: readonly string[]): McpCliArgs;
|
|
20
|
+
/** Run the stdio server until stdin closes or a signal arrives. Resolves with the exit code. */
|
|
21
|
+
export declare function runMcpCli(argv: readonly string[]): Promise<number>;
|
|
22
|
+
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/mcp/cli.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,+DAA+D;IAC/D,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,eAAO,MAAM,QAAQ,6sBAgBpB,CAAC;AAEF,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CA2BhE;AAMD,gGAAgG;AAChG,wBAAsB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA8GxE"}
|