@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.
Files changed (335) hide show
  1. package/README.md +34 -2
  2. package/bin/text.js +29 -0
  3. package/bin/text.ts +13 -0
  4. package/dist/.tsbuildinfo +1 -0
  5. package/dist/cli/build.d.ts +39 -0
  6. package/dist/cli/build.d.ts.map +1 -0
  7. package/dist/cli/build.js +157 -0
  8. package/dist/cli/build.js.map +1 -0
  9. package/dist/cli/config.d.ts +22 -0
  10. package/dist/cli/config.d.ts.map +1 -0
  11. package/dist/cli/config.js +73 -0
  12. package/dist/cli/config.js.map +1 -0
  13. package/dist/cli/dev.d.ts +12 -0
  14. package/dist/cli/dev.d.ts.map +1 -0
  15. package/dist/cli/dev.js +49 -0
  16. package/dist/cli/dev.js.map +1 -0
  17. package/dist/cli/index.d.ts +26 -0
  18. package/dist/cli/index.d.ts.map +1 -0
  19. package/dist/cli/index.js +192 -0
  20. package/dist/cli/index.js.map +1 -0
  21. package/dist/cli/run.d.ts +31 -0
  22. package/dist/cli/run.d.ts.map +1 -0
  23. package/dist/cli/run.js +111 -0
  24. package/dist/cli/run.js.map +1 -0
  25. package/dist/cli/start.d.ts +14 -0
  26. package/dist/cli/start.d.ts.map +1 -0
  27. package/dist/cli/start.js +183 -0
  28. package/dist/cli/start.js.map +1 -0
  29. package/dist/cli/ui.d.ts +35 -0
  30. package/dist/cli/ui.d.ts.map +1 -0
  31. package/dist/cli/ui.js +73 -0
  32. package/dist/cli/ui.js.map +1 -0
  33. package/dist/client.d.ts +34 -0
  34. package/dist/client.d.ts.map +1 -0
  35. package/dist/client.js +93 -0
  36. package/dist/client.js.map +1 -0
  37. package/dist/config.d.ts +143 -0
  38. package/dist/config.d.ts.map +1 -0
  39. package/dist/config.js +28 -0
  40. package/dist/config.js.map +1 -0
  41. package/dist/context.d.ts +44 -0
  42. package/dist/context.d.ts.map +1 -0
  43. package/dist/context.js +26 -0
  44. package/dist/context.js.map +1 -0
  45. package/dist/dev-errors.d.ts +68 -0
  46. package/dist/dev-errors.d.ts.map +1 -0
  47. package/dist/dev-errors.js +121 -0
  48. package/dist/dev-errors.js.map +1 -0
  49. package/dist/devtools.d.ts +64 -0
  50. package/dist/devtools.d.ts.map +1 -0
  51. package/dist/devtools.js +186 -0
  52. package/dist/devtools.js.map +1 -0
  53. package/dist/frame-mirror.d.ts +19 -0
  54. package/dist/frame-mirror.d.ts.map +1 -0
  55. package/dist/frame-mirror.js +141 -0
  56. package/dist/frame-mirror.js.map +1 -0
  57. package/dist/frame-protocol.d.ts +175 -0
  58. package/dist/frame-protocol.d.ts.map +1 -0
  59. package/dist/frame-protocol.js +369 -0
  60. package/dist/frame-protocol.js.map +1 -0
  61. package/dist/history.d.ts +54 -0
  62. package/dist/history.d.ts.map +1 -0
  63. package/dist/history.js +152 -0
  64. package/dist/history.js.map +1 -0
  65. package/dist/index.d.ts +9 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +8 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/link.d.ts +32 -0
  70. package/dist/link.d.ts.map +1 -0
  71. package/dist/link.js +54 -0
  72. package/dist/link.js.map +1 -0
  73. package/dist/live-player.d.ts +83 -0
  74. package/dist/live-player.d.ts.map +1 -0
  75. package/dist/live-player.js +413 -0
  76. package/dist/live-player.js.map +1 -0
  77. package/dist/live-protocol.d.ts +132 -0
  78. package/dist/live-protocol.d.ts.map +1 -0
  79. package/dist/live-protocol.js +278 -0
  80. package/dist/live-protocol.js.map +1 -0
  81. package/dist/live-stub.d.ts +10 -0
  82. package/dist/live-stub.d.ts.map +1 -0
  83. package/dist/live-stub.js +32 -0
  84. package/dist/live-stub.js.map +1 -0
  85. package/dist/mcp/cli.d.ts +22 -0
  86. package/dist/mcp/cli.d.ts.map +1 -0
  87. package/dist/mcp/cli.js +177 -0
  88. package/dist/mcp/cli.js.map +1 -0
  89. package/dist/mcp/frame.d.ts +58 -0
  90. package/dist/mcp/frame.d.ts.map +1 -0
  91. package/dist/mcp/frame.js +169 -0
  92. package/dist/mcp/frame.js.map +1 -0
  93. package/dist/mcp/index.d.ts +15 -0
  94. package/dist/mcp/index.d.ts.map +1 -0
  95. package/dist/mcp/index.js +15 -0
  96. package/dist/mcp/index.js.map +1 -0
  97. package/dist/mcp/inspect.d.ts +95 -0
  98. package/dist/mcp/inspect.d.ts.map +1 -0
  99. package/dist/mcp/inspect.js +386 -0
  100. package/dist/mcp/inspect.js.map +1 -0
  101. package/dist/mcp/keys.d.ts +20 -0
  102. package/dist/mcp/keys.d.ts.map +1 -0
  103. package/dist/mcp/keys.js +87 -0
  104. package/dist/mcp/keys.js.map +1 -0
  105. package/dist/mcp/logs.d.ts +63 -0
  106. package/dist/mcp/logs.d.ts.map +1 -0
  107. package/dist/mcp/logs.js +217 -0
  108. package/dist/mcp/logs.js.map +1 -0
  109. package/dist/mcp/server.d.ts +64 -0
  110. package/dist/mcp/server.d.ts.map +1 -0
  111. package/dist/mcp/server.js +485 -0
  112. package/dist/mcp/server.js.map +1 -0
  113. package/dist/mcp/session.d.ts +230 -0
  114. package/dist/mcp/session.d.ts.map +1 -0
  115. package/dist/mcp/session.js +742 -0
  116. package/dist/mcp/session.js.map +1 -0
  117. package/dist/navigation-errors.d.ts +28 -0
  118. package/dist/navigation-errors.d.ts.map +1 -0
  119. package/dist/navigation-errors.js +43 -0
  120. package/dist/navigation-errors.js.map +1 -0
  121. package/dist/navigation.d.ts +21 -0
  122. package/dist/navigation.d.ts.map +1 -0
  123. package/dist/navigation.js +33 -0
  124. package/dist/navigation.js.map +1 -0
  125. package/dist/router.d.ts +76 -0
  126. package/dist/router.d.ts.map +1 -0
  127. package/dist/router.js +296 -0
  128. package/dist/router.js.map +1 -0
  129. package/dist/routing.d.ts +101 -0
  130. package/dist/routing.d.ts.map +1 -0
  131. package/dist/routing.js +286 -0
  132. package/dist/routing.js.map +1 -0
  133. package/dist/server/adapters/build-step.d.ts +34 -0
  134. package/dist/server/adapters/build-step.d.ts.map +1 -0
  135. package/dist/server/adapters/build-step.js +112 -0
  136. package/dist/server/adapters/build-step.js.map +1 -0
  137. package/dist/server/adapters/bun.d.ts +8 -0
  138. package/dist/server/adapters/bun.d.ts.map +1 -0
  139. package/dist/server/adapters/bun.js +89 -0
  140. package/dist/server/adapters/bun.js.map +1 -0
  141. package/dist/server/adapters/bundle.d.ts +21 -0
  142. package/dist/server/adapters/bundle.d.ts.map +1 -0
  143. package/dist/server/adapters/bundle.js +86 -0
  144. package/dist/server/adapters/bundle.js.map +1 -0
  145. package/dist/server/adapters/cloudflare.d.ts +29 -0
  146. package/dist/server/adapters/cloudflare.d.ts.map +1 -0
  147. package/dist/server/adapters/cloudflare.js +105 -0
  148. package/dist/server/adapters/cloudflare.js.map +1 -0
  149. package/dist/server/adapters/index.d.ts +10 -0
  150. package/dist/server/adapters/index.d.ts.map +1 -0
  151. package/dist/server/adapters/index.js +24 -0
  152. package/dist/server/adapters/index.js.map +1 -0
  153. package/dist/server/adapters/runtime-node.d.ts +16 -0
  154. package/dist/server/adapters/runtime-node.d.ts.map +1 -0
  155. package/dist/server/adapters/runtime-node.js +29 -0
  156. package/dist/server/adapters/runtime-node.js.map +1 -0
  157. package/dist/server/adapters/runtime.d.ts +42 -0
  158. package/dist/server/adapters/runtime.d.ts.map +1 -0
  159. package/dist/server/adapters/runtime.js +115 -0
  160. package/dist/server/adapters/runtime.js.map +1 -0
  161. package/dist/server/adapters/shared.d.ts +66 -0
  162. package/dist/server/adapters/shared.d.ts.map +1 -0
  163. package/dist/server/adapters/shared.js +124 -0
  164. package/dist/server/adapters/shared.js.map +1 -0
  165. package/dist/server/adapters/static.d.ts +9 -0
  166. package/dist/server/adapters/static.d.ts.map +1 -0
  167. package/dist/server/adapters/static.js +70 -0
  168. package/dist/server/adapters/static.js.map +1 -0
  169. package/dist/server/adapters/vercel.d.ts +43 -0
  170. package/dist/server/adapters/vercel.d.ts.map +1 -0
  171. package/dist/server/adapters/vercel.js +119 -0
  172. package/dist/server/adapters/vercel.js.map +1 -0
  173. package/dist/server/bun-jsx.d.ts +18 -0
  174. package/dist/server/bun-jsx.d.ts.map +1 -0
  175. package/dist/server/bun-jsx.js +56 -0
  176. package/dist/server/bun-jsx.js.map +1 -0
  177. package/dist/server/cache-route.d.ts +38 -0
  178. package/dist/server/cache-route.d.ts.map +1 -0
  179. package/dist/server/cache-route.js +109 -0
  180. package/dist/server/cache-route.js.map +1 -0
  181. package/dist/server/cache.d.ts +131 -0
  182. package/dist/server/cache.d.ts.map +1 -0
  183. package/dist/server/cache.js +409 -0
  184. package/dist/server/cache.js.map +1 -0
  185. package/dist/server/frames.d.ts +45 -0
  186. package/dist/server/frames.d.ts.map +1 -0
  187. package/dist/server/frames.js +294 -0
  188. package/dist/server/frames.js.map +1 -0
  189. package/dist/server/http.d.ts +80 -0
  190. package/dist/server/http.d.ts.map +1 -0
  191. package/dist/server/http.js +453 -0
  192. package/dist/server/http.js.map +1 -0
  193. package/dist/server/jsx-dev-runtime.d.ts +5 -0
  194. package/dist/server/jsx-dev-runtime.d.ts.map +1 -0
  195. package/dist/server/jsx-dev-runtime.js +6 -0
  196. package/dist/server/jsx-dev-runtime.js.map +1 -0
  197. package/dist/server/jsx-runtime.d.ts +10 -0
  198. package/dist/server/jsx-runtime.d.ts.map +1 -0
  199. package/dist/server/jsx-runtime.js +11 -0
  200. package/dist/server/jsx-runtime.js.map +1 -0
  201. package/dist/server/live-app.d.ts +87 -0
  202. package/dist/server/live-app.d.ts.map +1 -0
  203. package/dist/server/live-app.js +307 -0
  204. package/dist/server/live-app.js.map +1 -0
  205. package/dist/server/live-build.d.ts +70 -0
  206. package/dist/server/live-build.d.ts.map +1 -0
  207. package/dist/server/live-build.js +222 -0
  208. package/dist/server/live-build.js.map +1 -0
  209. package/dist/server/live-dev.d.ts +62 -0
  210. package/dist/server/live-dev.d.ts.map +1 -0
  211. package/dist/server/live-dev.js +313 -0
  212. package/dist/server/live-dev.js.map +1 -0
  213. package/dist/server/live-manifest.d.ts +23 -0
  214. package/dist/server/live-manifest.d.ts.map +1 -0
  215. package/dist/server/live-manifest.js +7 -0
  216. package/dist/server/live-manifest.js.map +1 -0
  217. package/dist/server/live-prod.d.ts +30 -0
  218. package/dist/server/live-prod.d.ts.map +1 -0
  219. package/dist/server/live-prod.js +97 -0
  220. package/dist/server/live-prod.js.map +1 -0
  221. package/dist/server/live-routes.d.ts +72 -0
  222. package/dist/server/live-routes.d.ts.map +1 -0
  223. package/dist/server/live-routes.js +274 -0
  224. package/dist/server/live-routes.js.map +1 -0
  225. package/dist/server/live-web.d.ts +16 -0
  226. package/dist/server/live-web.d.ts.map +1 -0
  227. package/dist/server/live-web.js +159 -0
  228. package/dist/server/live-web.js.map +1 -0
  229. package/dist/server/live.d.ts +138 -0
  230. package/dist/server/live.d.ts.map +1 -0
  231. package/dist/server/live.js +542 -0
  232. package/dist/server/live.js.map +1 -0
  233. package/dist/server/middleware-node.d.ts +48 -0
  234. package/dist/server/middleware-node.d.ts.map +1 -0
  235. package/dist/server/middleware-node.js +167 -0
  236. package/dist/server/middleware-node.js.map +1 -0
  237. package/dist/server/middleware-runtime.d.ts +97 -0
  238. package/dist/server/middleware-runtime.d.ts.map +1 -0
  239. package/dist/server/middleware-runtime.js +447 -0
  240. package/dist/server/middleware-runtime.js.map +1 -0
  241. package/dist/server/middleware.d.ts +145 -0
  242. package/dist/server/middleware.d.ts.map +1 -0
  243. package/dist/server/middleware.js +365 -0
  244. package/dist/server/middleware.js.map +1 -0
  245. package/dist/server/ppr.d.ts +22 -0
  246. package/dist/server/ppr.d.ts.map +1 -0
  247. package/dist/server/ppr.js +58 -0
  248. package/dist/server/ppr.js.map +1 -0
  249. package/dist/server/scan.d.ts +48 -0
  250. package/dist/server/scan.d.ts.map +1 -0
  251. package/dist/server/scan.js +161 -0
  252. package/dist/server/scan.js.map +1 -0
  253. package/dist/server/server-components.d.ts +65 -0
  254. package/dist/server/server-components.d.ts.map +1 -0
  255. package/dist/server/server-components.js +215 -0
  256. package/dist/server/server-components.js.map +1 -0
  257. package/dist/terminal.d.ts +5 -0
  258. package/dist/terminal.d.ts.map +1 -0
  259. package/dist/terminal.js +5 -0
  260. package/dist/terminal.js.map +1 -0
  261. package/dist/testing.d.ts +5 -0
  262. package/dist/testing.d.ts.map +1 -0
  263. package/dist/testing.js +5 -0
  264. package/dist/testing.js.map +1 -0
  265. package/dist/vite-plugin.d.ts +51 -0
  266. package/dist/vite-plugin.d.ts.map +1 -0
  267. package/dist/vite-plugin.js +403 -0
  268. package/dist/vite-plugin.js.map +1 -0
  269. package/package.json +130 -4
  270. package/src/cli/build.ts +182 -0
  271. package/src/cli/config.ts +72 -0
  272. package/src/cli/dev.ts +54 -0
  273. package/src/cli/index.ts +185 -0
  274. package/src/cli/run.ts +124 -0
  275. package/src/cli/start.ts +194 -0
  276. package/src/cli/ui.ts +93 -0
  277. package/src/client.tsx +122 -0
  278. package/src/config.ts +155 -0
  279. package/src/context.ts +69 -0
  280. package/src/dev-errors.ts +167 -0
  281. package/src/devtools.tsx +419 -0
  282. package/src/frame-mirror.ts +145 -0
  283. package/src/frame-protocol.ts +435 -0
  284. package/src/history.ts +201 -0
  285. package/src/index.ts +9 -0
  286. package/src/link.tsx +108 -0
  287. package/src/live-player.ts +449 -0
  288. package/src/live-protocol.ts +317 -0
  289. package/src/live-stub.tsx +32 -0
  290. package/src/mcp/cli.ts +188 -0
  291. package/src/mcp/frame.ts +224 -0
  292. package/src/mcp/index.ts +15 -0
  293. package/src/mcp/inspect.ts +445 -0
  294. package/src/mcp/keys.ts +86 -0
  295. package/src/mcp/logs.ts +225 -0
  296. package/src/mcp/server.ts +595 -0
  297. package/src/mcp/session.ts +821 -0
  298. package/src/navigation-errors.ts +60 -0
  299. package/src/navigation.ts +44 -0
  300. package/src/router.tsx +497 -0
  301. package/src/routing.ts +344 -0
  302. package/src/server/adapters/build-step.ts +135 -0
  303. package/src/server/adapters/bun.ts +92 -0
  304. package/src/server/adapters/bundle.ts +97 -0
  305. package/src/server/adapters/cloudflare.ts +111 -0
  306. package/src/server/adapters/index.ts +29 -0
  307. package/src/server/adapters/runtime-node.ts +34 -0
  308. package/src/server/adapters/runtime.ts +145 -0
  309. package/src/server/adapters/shared.ts +159 -0
  310. package/src/server/adapters/static.ts +68 -0
  311. package/src/server/adapters/vercel.ts +149 -0
  312. package/src/server/bun-jsx.ts +65 -0
  313. package/src/server/cache-route.ts +139 -0
  314. package/src/server/cache.ts +498 -0
  315. package/src/server/frames.ts +326 -0
  316. package/src/server/http.ts +467 -0
  317. package/src/server/jsx-dev-runtime.ts +9 -0
  318. package/src/server/jsx-runtime.ts +13 -0
  319. package/src/server/live-app.tsx +374 -0
  320. package/src/server/live-build.ts +258 -0
  321. package/src/server/live-dev.ts +357 -0
  322. package/src/server/live-manifest.ts +25 -0
  323. package/src/server/live-prod.ts +120 -0
  324. package/src/server/live-routes.ts +298 -0
  325. package/src/server/live-web.ts +170 -0
  326. package/src/server/live.ts +551 -0
  327. package/src/server/middleware-node.ts +168 -0
  328. package/src/server/middleware-runtime.ts +478 -0
  329. package/src/server/middleware.ts +451 -0
  330. package/src/server/ppr.ts +62 -0
  331. package/src/server/scan.ts +190 -0
  332. package/src/server/server-components.ts +224 -0
  333. package/src/terminal.ts +5 -0
  334. package/src/testing.ts +5 -0
  335. package/src/vite-plugin.ts +413 -0
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Browser half of the dev frame mirror: while an editor is watching
3
+ * (`textjs:mirror { active: true }`), encode each emitted frame as a row delta
4
+ * and send it over the Vite HMR socket; apply forwarded input. Idle otherwise.
5
+ */
6
+ import { extractStyledFrame } from "@textjs/core";
7
+ import { FrameEncoder, MAX_TITLE, HMR_FRAME_EVENT, HMR_HELLO_EVENT, HMR_INPUT_EVENT, HMR_MIRROR_EVENT, parseInputMessage } from "./frame-protocol.js";
8
+ function sourceId() {
9
+ return Math.random().toString(36).slice(2, 10);
10
+ }
11
+ /** Apply a forwarded input message to a root. */
12
+ export function applyInputMessage(root, msg, history) {
13
+ switch (msg.type) {
14
+ case "key":
15
+ root.input.handleKeyDown({ ...msg, preventDefault() { } });
16
+ break;
17
+ case "paste":
18
+ root.input.handlePaste(msg.text);
19
+ break;
20
+ case "wheel":
21
+ root.input.handleWheel({ ...msg, ctrlKey: false, metaKey: false, shiftKey: false, altKey: false });
22
+ break;
23
+ case "navigate":
24
+ history?.push(msg.href);
25
+ break;
26
+ }
27
+ }
28
+ export function connectFrameMirror(root, hot, history) {
29
+ const source = sourceId();
30
+ const encoder = new FrameEncoder();
31
+ let unsubscribe = null;
32
+ let hiddenTimer = null;
33
+ let sendTimer = null;
34
+ let flushTimer = null;
35
+ let disposed = false;
36
+ const meta = () => ({
37
+ path: history?.getLocation().pathname,
38
+ title: typeof document !== "undefined" ? document.title.slice(0, MAX_TITLE) : undefined,
39
+ focused: root.renderer.focused,
40
+ });
41
+ const send = () => {
42
+ // Nobody is watching (stopped, or a deferred send outlived the subscription).
43
+ if (!unsubscribe)
44
+ return;
45
+ const msg = encoder.encode(extractStyledFrame(root.renderer.buffer), { source, meta: meta() });
46
+ if (msg)
47
+ hot.send(HMR_FRAME_EVENT, msg);
48
+ };
49
+ // Background tabs get no animation frames, so the renderer defers work; flush directly instead.
50
+ const isHidden = () => typeof document !== "undefined" && document.visibilityState === "hidden";
51
+ const flushIfHidden = () => {
52
+ if (isHidden())
53
+ root.flushSyncRender();
54
+ };
55
+ const start = () => {
56
+ if (unsubscribe || disposed)
57
+ return;
58
+ encoder.reset();
59
+ unsubscribe = root.onFrame((f) => {
60
+ if (!f.skipped)
61
+ send();
62
+ });
63
+ send();
64
+ hiddenTimer = setInterval(flushIfHidden, 100);
65
+ };
66
+ const stop = () => {
67
+ unsubscribe?.();
68
+ unsubscribe = null;
69
+ if (hiddenTimer !== null)
70
+ clearInterval(hiddenTimer);
71
+ hiddenTimer = null;
72
+ if (sendTimer !== null)
73
+ clearTimeout(sendTimer);
74
+ sendTimer = null;
75
+ };
76
+ const onMirror = (payload) => (payload?.active ? start() : stop());
77
+ const onInput = (payload) => {
78
+ const msg = parseInputMessage(payload);
79
+ if (!msg)
80
+ return;
81
+ applyInputMessage(root, msg, history);
82
+ if (flushTimer === null) {
83
+ flushTimer = setTimeout(() => {
84
+ flushTimer = null;
85
+ flushIfHidden();
86
+ }, 0);
87
+ }
88
+ };
89
+ const hello = () => {
90
+ const buf = root.renderer.buffer;
91
+ hot.send(HMR_HELLO_EVENT, { source, grid: { width: buf.width, height: buf.height }, path: history?.getLocation().pathname });
92
+ };
93
+ // Keep the server's status (editor status bars) current without streaming frames.
94
+ let helloTimer = null;
95
+ const helloSoon = () => {
96
+ if (helloTimer !== null)
97
+ clearTimeout(helloTimer);
98
+ helloTimer = setTimeout(() => {
99
+ helloTimer = null;
100
+ hello();
101
+ }, 250);
102
+ };
103
+ const unlisten = history?.listen(() => {
104
+ if (!unsubscribe)
105
+ helloSoon();
106
+ else if (sendTimer === null) {
107
+ sendTimer = setTimeout(() => {
108
+ sendTimer = null;
109
+ send();
110
+ }, 0);
111
+ }
112
+ });
113
+ const unlistenViewport = root.renderer.viewport.subscribe(() => {
114
+ if (!unsubscribe)
115
+ helloSoon();
116
+ });
117
+ hot.on(HMR_MIRROR_EVENT, onMirror);
118
+ hot.on(HMR_INPUT_EVENT, onInput);
119
+ hot.on("vite:ws:connect", hello);
120
+ hello();
121
+ const dispose = () => {
122
+ if (disposed)
123
+ return;
124
+ disposed = true;
125
+ stop();
126
+ unlisten?.();
127
+ unlistenViewport();
128
+ if (helloTimer !== null)
129
+ clearTimeout(helloTimer);
130
+ helloTimer = null;
131
+ if (flushTimer !== null)
132
+ clearTimeout(flushTimer);
133
+ flushTimer = null;
134
+ hot.off?.(HMR_MIRROR_EVENT, onMirror);
135
+ hot.off?.(HMR_INPUT_EVENT, onInput);
136
+ hot.off?.("vite:ws:connect", hello);
137
+ };
138
+ hot.dispose?.(dispose);
139
+ return dispose;
140
+ }
141
+ //# sourceMappingURL=frame-mirror.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-mirror.js","sourceRoot":"","sources":["../src/frame-mirror.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * `@textjs/app/frame-protocol` — the wire format `text dev` uses to mirror a
3
+ * running app's console frames to editors (the VS Code Live Preview) and to
4
+ * forward keyboard input back.
5
+ *
6
+ * Browser tab ──(Vite HMR socket: `textjs:frame`)──▶ dev server ──(SSE `/__textjs/frames`)──▶ editor
7
+ * Editor ──(POST `/__textjs/input`)──▶ dev server ──(HMR: `textjs:input`)──▶ browser tab
8
+ *
9
+ * Frames are row deltas: only rows whose spans changed since the previous
10
+ * message are sent, each with a small per-message style table. Pure and
11
+ * dependency-free so the editor bundle can share it.
12
+ */
13
+ import type { StyledFrame, StyledSpan } from "@textjs/core";
14
+ export declare const FRAME_PROTOCOL_VERSION = 1;
15
+ /** Server-sent events stream of {@link WireFrame} messages (dev only, loopback only). */
16
+ export declare const FRAMES_PATH = "/__textjs/frames";
17
+ /** `POST` an {@link InputMessage} as JSON. */
18
+ export declare const INPUT_PATH = "/__textjs/input";
19
+ /** `GET` a {@link DevStatus} JSON document. */
20
+ export declare const STATUS_PATH = "/__textjs/status";
21
+ /** Browser → server: an encoded frame. */
22
+ export declare const HMR_FRAME_EVENT = "textjs:frame";
23
+ /** Server → browser: `{ active: boolean }`, whether anyone is watching. */
24
+ export declare const HMR_MIRROR_EVENT = "textjs:mirror";
25
+ /** Server → browser: an {@link InputMessage}. */
26
+ export declare const HMR_INPUT_EVENT = "textjs:input";
27
+ /** Browser → server: sent on boot and reconnect; the server replies with {@link HMR_MIRROR_EVENT}. */
28
+ export declare const HMR_HELLO_EVENT = "textjs:hello";
29
+ /** Required on `POST /__textjs/input` (with a JSON body) so cross-site simple requests are rejected. */
30
+ export declare const MIRROR_HEADER = "x-textjs-mirror";
31
+ export declare const FLAG_BOLD = 1;
32
+ export declare const FLAG_DIM = 2;
33
+ export declare const FLAG_ITALIC = 4;
34
+ export declare const FLAG_UNDERLINE = 8;
35
+ export declare const FLAG_STRIKETHROUGH = 16;
36
+ export declare const FLAG_INVERSE = 32;
37
+ export declare const FLAG_ALLOW_LINK = 64;
38
+ /** `[fgCss, bgCss, flags]` — `null` colors use the theme default. */
39
+ export type WireStyle = [fg: string | null, bg: string | null, flags: number];
40
+ /** `[text, styleIndex]`, or `[text, styleIndex, width]` when the column width differs from `text.length`. */
41
+ export type WireSpan = [text: string, style: number] | [text: string, style: number, width: number];
42
+ export interface FrameMeta {
43
+ /** Current pathname of the app. */
44
+ path?: string;
45
+ title?: string;
46
+ /** Whether the page has keyboard focus. */
47
+ focused?: boolean;
48
+ }
49
+ export interface WireFrame {
50
+ v: typeof FRAME_PROTOCOL_VERSION;
51
+ /** Monotonic per-source sequence number. */
52
+ seq: number;
53
+ /** Source identifier (one per browser tab). */
54
+ source?: string;
55
+ width: number;
56
+ height: number;
57
+ /** `true` when `rows` covers every row (receivers drop previous state). */
58
+ full: boolean;
59
+ styles: WireStyle[];
60
+ /** `[y, spans]` for each changed row. */
61
+ rows: Array<[y: number, spans: WireSpan[]]>;
62
+ meta?: FrameMeta;
63
+ }
64
+ export interface DevStatus {
65
+ name: "textjs";
66
+ version: string;
67
+ /** Absolute project root. */
68
+ root: string;
69
+ /** Browser tabs currently connected to the HMR socket. */
70
+ clients: number;
71
+ /** Browser tabs running the app (announced via `textjs:hello`). */
72
+ sources: number;
73
+ /** Editors subscribed to the frame stream. */
74
+ watchers: number;
75
+ /** Size of the most recent frame, if any. */
76
+ grid: {
77
+ width: number;
78
+ height: number;
79
+ } | null;
80
+ path: string | null;
81
+ /** The app's `basePath` (`""` when none): app paths are served under it. */
82
+ basePath?: string;
83
+ }
84
+ export type InputMessage = {
85
+ type: "key";
86
+ key: string;
87
+ code?: string;
88
+ ctrlKey: boolean;
89
+ metaKey: boolean;
90
+ shiftKey: boolean;
91
+ altKey: boolean;
92
+ repeat?: boolean;
93
+ } | {
94
+ type: "paste";
95
+ text: string;
96
+ } | {
97
+ type: "wheel";
98
+ deltaX: number;
99
+ deltaY: number;
100
+ deltaMode: number;
101
+ } | {
102
+ type: "navigate";
103
+ href: string;
104
+ };
105
+ export declare function spanFlags(s: StyledSpan): number;
106
+ /** A {@link StyledSpan} rebuilt from wire data. Packed colors are not transmitted (they read `0`). */
107
+ export declare function toStyledSpan(text: string, width: number, style: WireStyle): StyledSpan;
108
+ export interface EncodeOptions {
109
+ meta?: FrameMeta;
110
+ source?: string;
111
+ }
112
+ /**
113
+ * Stateful encoder: the first call (and the first after `reset()` or a resize)
114
+ * emits a full frame, later calls emit only changed rows. Returns `null` when
115
+ * nothing changed and no meta changed.
116
+ */
117
+ export declare class FrameEncoder {
118
+ private keys;
119
+ private width;
120
+ private height;
121
+ private seq;
122
+ private metaKey;
123
+ reset(): void;
124
+ encode(frame: StyledFrame, options?: EncodeOptions): WireFrame | null;
125
+ }
126
+ /** Encode a complete frame without delta state (for late subscribers). */
127
+ export declare function encodeFullFrame(frame: StyledFrame, options?: EncodeOptions & {
128
+ seq?: number;
129
+ }): WireFrame;
130
+ /** Applies {@link WireFrame} messages to rebuild the current {@link StyledFrame}. */
131
+ export declare class FrameDecoder {
132
+ frame: StyledFrame | null;
133
+ meta: FrameMeta;
134
+ seq: number;
135
+ /** Returns the updated frame, or `null` when a delta arrives before any full frame. */
136
+ apply(msg: WireFrame): StyledFrame | null;
137
+ reset(): void;
138
+ }
139
+ /**
140
+ * Whether frames from a tab with `next` meta should become the mirrored
141
+ * ("active") source instead of the current one. A focused tab is never
142
+ * displaced by an unfocused one (background tabs that animate keep sending
143
+ * frames), so the preview and forwarded keystrokes stay on the tab in use.
144
+ */
145
+ export declare function shouldSwitchSource(current: FrameMeta | null, next: FrameMeta): boolean;
146
+ /** Plain text of a frame (trailing whitespace trimmed), for tests and copy. */
147
+ export declare function frameToText(frame: StyledFrame): string;
148
+ /** Validate an untrusted {@link InputMessage}. Returns a clean copy or `null`. */
149
+ export declare function parseInputMessage(value: unknown): InputMessage | null;
150
+ /** Largest grid side, style table and total span text accepted in one frame. */
151
+ export declare const MAX_GRID = 1000;
152
+ export declare const MAX_STYLES = 4096;
153
+ export declare const MAX_FRAME_TEXT: number;
154
+ export declare const MAX_TITLE = 512;
155
+ export declare const MAX_PATH = 2048;
156
+ /** A same-app pathname: starts with one `/`, no backslashes, bounded. */
157
+ export declare function isAppPath(v: unknown): v is string;
158
+ /** `""` or `/segment[/segment…]` without a trailing slash. */
159
+ export declare function isBasePath(v: unknown): v is string;
160
+ /** Validate untrusted {@link FrameMeta}; returns a copy of the known fields or `null`. */
161
+ export declare function parseFrameMeta(value: unknown): FrameMeta | null;
162
+ /** Validate a frame source id (one per browser tab). */
163
+ export declare function isSourceId(v: unknown): v is string;
164
+ /**
165
+ * Validate an untrusted {@link WireFrame} (structure, bounds and hex-only
166
+ * colors) and return a clean copy, or `null`. Rows must lie inside the grid,
167
+ * spans must have a positive width that fits it and reference a style, and
168
+ * `meta` keeps only `path`, `title` and `focused`.
169
+ */
170
+ export declare function parseWireFrame(value: unknown): WireFrame | null;
171
+ /** Whether `value` is a valid {@link WireFrame} (see {@link parseWireFrame}). */
172
+ export declare function isWireFrame(value: unknown): value is WireFrame;
173
+ /** Validate an untrusted {@link DevStatus} (from `/__textjs/status` or the stream). */
174
+ export declare function parseDevStatus(value: unknown): DevStatus | null;
175
+ //# sourceMappingURL=frame-protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-protocol.d.ts","sourceRoot":"","sources":["../src/frame-protocol.ts"],"names":[],"mappings":"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"}