@textjs/app 0.0.0-stage → 1.0.3

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 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/server/cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Dev-only frame mirror endpoints for editor previews (the VS Code extension).
3
+ *
4
+ * - `GET /__textjs/frames` — server-sent events: `frame` ({@link WireFrame}) and `status` ({@link DevStatus}).
5
+ * - `POST /__textjs/input` — forward an {@link InputMessage} to the browser tab(s).
6
+ * - `GET /__textjs/status` — {@link DevStatus} JSON.
7
+ *
8
+ * Loopback peers only, addressed by a loopback `Host` (so DNS rebinding can't
9
+ * reach them even when Vite's `allowedHosts` is relaxed). Browsers can't reach
10
+ * them cross-origin: SSE and status send no CORS headers, Fetch Metadata
11
+ * rejects cross-site and `no-cors` requests, and input requires a JSON body
12
+ * plus a custom header, so a foreign page can't send keystrokes with a simple
13
+ * request. Tabs only encode frames while at least one editor is watching.
14
+ */
15
+ import type { IncomingMessage } from "node:http";
16
+ import type { ViteDevServer } from "vite";
17
+ import { type DevStatus } from "../frame-protocol.js";
18
+ export declare function isLoopbackAddress(address: string | undefined): boolean;
19
+ /**
20
+ * `Host` names the loopback interface: `localhost`, `*.localhost`, `127.x.x.x`
21
+ * or `[::1]`, with an optional port. Anything else may be a rebound DNS name.
22
+ */
23
+ export declare function isLoopbackHost(host: string | undefined): boolean;
24
+ /**
25
+ * Fetch Metadata: browsers label every request. Only same-origin requests and
26
+ * user-initiated ones (`none`) are accepted, and never `no-cors` loads of the
27
+ * stream (`<img>`, `fetch(..., { mode: "no-cors" })` omit `Origin`). Clients
28
+ * that send no metadata (editors, curl) pass.
29
+ */
30
+ export declare function isFetchMetadataAllowed(req: Pick<IncomingMessage, "headers">, pathname: string): boolean;
31
+ /** `Origin` is absent (editors, curl) or the dev server's own origin. */
32
+ export declare function isSameOriginRequest(req: Pick<IncomingMessage, "headers">): boolean;
33
+ export interface FrameStream {
34
+ /** Connected editors. */
35
+ readonly watchers: number;
36
+ status(): DevStatus;
37
+ close(): void;
38
+ }
39
+ /** Register the frame mirror middleware and HMR channel on a Vite dev server. */
40
+ export interface FrameStreamOptions {
41
+ /** The app's `basePath`: reported in status, and the endpoints also answer under it. */
42
+ basePath?: string;
43
+ }
44
+ export declare function attachFrameStream(server: ViteDevServer, root: string, options?: FrameStreamOptions): FrameStream;
45
+ //# sourceMappingURL=frames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.d.ts","sourceRoot":"","sources":["../../src/server/frames.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAkB,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAgBL,KAAK,SAAS,EAGf,MAAM,mBAAmB,CAAC;AAM3B,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAEtE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAQhE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAKvG;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,OAAO,CAUlF;AAYD,MAAM,WAAW,WAAW;IAC1B,yBAAyB;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,MAAM,IAAI,SAAS,CAAC;IACpB,KAAK,IAAI,IAAI,CAAC;CACf;AA8BD,iFAAiF;AACjF,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,kBAAuB,GAAG,WAAW,CA0LpH"}
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Dev-only frame mirror endpoints for editor previews (the VS Code extension).
3
+ *
4
+ * - `GET /__textjs/frames` — server-sent events: `frame` ({@link WireFrame}) and `status` ({@link DevStatus}).
5
+ * - `POST /__textjs/input` — forward an {@link InputMessage} to the browser tab(s).
6
+ * - `GET /__textjs/status` — {@link DevStatus} JSON.
7
+ *
8
+ * Loopback peers only, addressed by a loopback `Host` (so DNS rebinding can't
9
+ * reach them even when Vite's `allowedHosts` is relaxed). Browsers can't reach
10
+ * them cross-origin: SSE and status send no CORS headers, Fetch Metadata
11
+ * rejects cross-site and `no-cors` requests, and input requires a JSON body
12
+ * plus a custom header, so a foreign page can't send keystrokes with a simple
13
+ * request. Tabs only encode frames while at least one editor is watching.
14
+ */
15
+ import { isIP } from "node:net";
16
+ import { VERSION } from "@textjs/core";
17
+ import { encodeFullFrame, FrameDecoder, FRAMES_PATH, HMR_FRAME_EVENT, HMR_HELLO_EVENT, HMR_INPUT_EVENT, HMR_MIRROR_EVENT, INPUT_PATH, isAppPath, isSourceId, MIRROR_HEADER, parseWireFrame, parseInputMessage, shouldSwitchSource, STATUS_PATH, } from "../frame-protocol.js";
18
+ const LOOPBACK = new Set(["127.0.0.1", "::1", "::ffff:127.0.0.1"]);
19
+ const MAX_INPUT_BYTES = 128 * 1024;
20
+ const HEARTBEAT_MS = 15_000;
21
+ export function isLoopbackAddress(address) {
22
+ return address !== undefined && (LOOPBACK.has(address) || address.startsWith("127."));
23
+ }
24
+ /**
25
+ * `Host` names the loopback interface: `localhost`, `*.localhost`, `127.x.x.x`
26
+ * or `[::1]`, with an optional port. Anything else may be a rebound DNS name.
27
+ */
28
+ export function isLoopbackHost(host) {
29
+ if (!host)
30
+ return false;
31
+ const m = /^(\[[^\]]*\]|[^:[\]]+)(?::\d{1,5})?$/.exec(host.trim().toLowerCase());
32
+ if (!m)
33
+ return false;
34
+ const name = m[1];
35
+ if (name === "[::1]")
36
+ return true;
37
+ if (name === "localhost" || name.endsWith(".localhost"))
38
+ return true;
39
+ return isIP(name) === 4 && name.startsWith("127.");
40
+ }
41
+ /**
42
+ * Fetch Metadata: browsers label every request. Only same-origin requests and
43
+ * user-initiated ones (`none`) are accepted, and never `no-cors` loads of the
44
+ * stream (`<img>`, `fetch(..., { mode: "no-cors" })` omit `Origin`). Clients
45
+ * that send no metadata (editors, curl) pass.
46
+ */
47
+ export function isFetchMetadataAllowed(req, pathname) {
48
+ const site = req.headers["sec-fetch-site"];
49
+ if (site !== undefined && site !== "same-origin" && site !== "none")
50
+ return false;
51
+ if (pathname === FRAMES_PATH && req.headers["sec-fetch-mode"] === "no-cors")
52
+ return false;
53
+ return true;
54
+ }
55
+ /** `Origin` is absent (editors, curl) or the dev server's own origin. */
56
+ export function isSameOriginRequest(req) {
57
+ const origin = req.headers.origin;
58
+ if (origin === undefined)
59
+ return true;
60
+ const host = req.headers.host;
61
+ if (!host)
62
+ return false;
63
+ try {
64
+ return new URL(origin).host === host;
65
+ }
66
+ catch {
67
+ return false;
68
+ }
69
+ }
70
+ class PayloadTooLarge extends Error {
71
+ }
72
+ /** Read a request body up to `limit` bytes. Past the limit it stops reading and rejects with {@link PayloadTooLarge}. */
73
+ function readBody(req, limit) {
74
+ return new Promise((resolve, reject) => {
75
+ const declared = Number(req.headers["content-length"]);
76
+ if (Number.isFinite(declared) && declared > limit) {
77
+ reject(new PayloadTooLarge());
78
+ return;
79
+ }
80
+ let size = 0;
81
+ const chunks = [];
82
+ const onData = (c) => {
83
+ size += c.length;
84
+ if (size > limit) {
85
+ req.off("data", onData);
86
+ req.pause();
87
+ reject(new PayloadTooLarge());
88
+ return;
89
+ }
90
+ chunks.push(c);
91
+ };
92
+ req.on("data", onData);
93
+ req.on("end", () => resolve(Buffer.concat(chunks).toString("utf8")));
94
+ req.on("error", reject);
95
+ });
96
+ }
97
+ export function attachFrameStream(server, root, options = {}) {
98
+ const basePath = options.basePath ?? "";
99
+ const sources = new Map();
100
+ const watchers = new Set();
101
+ let latest = null;
102
+ const status = () => {
103
+ const f = latest?.decoder.frame ?? null;
104
+ return {
105
+ name: "textjs",
106
+ version: VERSION,
107
+ root,
108
+ clients: server.ws.clients.size,
109
+ sources: sources.size,
110
+ watchers: watchers.size,
111
+ grid: f ? { width: f.width, height: f.height } : (latest?.grid ?? null),
112
+ path: latest?.decoder.meta.path ?? latest?.path ?? null,
113
+ basePath,
114
+ };
115
+ };
116
+ const write = (res, event, data) => {
117
+ res.write(`event: ${event}\ndata: ${JSON.stringify(data)}\n\n`);
118
+ };
119
+ const broadcast = (event, data) => {
120
+ for (const res of watchers)
121
+ write(res, event, data);
122
+ };
123
+ const announce = () => {
124
+ server.ws.send(HMR_MIRROR_EVENT, { active: watchers.size > 0 });
125
+ };
126
+ const mostRecent = () => [...sources.values()].sort((a, b) => b.updatedAt - a.updatedAt)[0] ?? null;
127
+ const sourceFor = (id, client) => {
128
+ let src = sources.get(id);
129
+ if (src?.client === client)
130
+ return src;
131
+ if (src)
132
+ src.client = client;
133
+ else {
134
+ src = { id, decoder: new FrameDecoder(), client, updatedAt: Date.now(), grid: null, path: null };
135
+ sources.set(id, src);
136
+ }
137
+ // A tab that reconnects keeps its id on a new socket: only the socket that currently owns the source may remove it.
138
+ const socket = client.socket;
139
+ socket?.once?.("close", () => {
140
+ const gone = sources.get(id);
141
+ if (!gone || gone.client !== client)
142
+ return;
143
+ sources.delete(id);
144
+ if (latest === gone)
145
+ latest = mostRecent();
146
+ broadcast("gone", { source: id });
147
+ broadcast("status", status());
148
+ });
149
+ return src;
150
+ };
151
+ const metaOf = (src) => (src ? src.decoder.meta : null);
152
+ server.ws.on(HMR_HELLO_EVENT, (data, client) => {
153
+ client.send(HMR_MIRROR_EVENT, { active: watchers.size > 0 });
154
+ const d = (data ?? {});
155
+ if (isSourceId(d.source)) {
156
+ const src = sourceFor(d.source, client);
157
+ const w = d.grid?.width;
158
+ const h = d.grid?.height;
159
+ if (Number.isInteger(w) && Number.isInteger(h) && w > 0 && h > 0 && w <= 1000 && h <= 1000) {
160
+ src.grid = { width: w, height: h };
161
+ }
162
+ if (isAppPath(d.path))
163
+ src.path = d.path;
164
+ src.updatedAt = Date.now();
165
+ if (latest === null || latest === src || shouldSwitchSource(metaOf(latest), {}))
166
+ latest = src;
167
+ }
168
+ broadcast("status", status());
169
+ });
170
+ server.ws.on(HMR_FRAME_EVENT, (raw, client) => {
171
+ const data = parseWireFrame(raw);
172
+ if (!data || data.source === undefined)
173
+ return;
174
+ const src = sourceFor(data.source, client);
175
+ if (src.decoder.apply(data) === null)
176
+ return;
177
+ src.updatedAt = Date.now();
178
+ const switched = latest !== src && shouldSwitchSource(metaOf(latest), src.decoder.meta);
179
+ if (switched)
180
+ latest = src;
181
+ broadcast("frame", data);
182
+ if (data.full || switched)
183
+ broadcast("status", status());
184
+ });
185
+ const heartbeat = setInterval(() => {
186
+ for (const res of watchers)
187
+ res.write(": ♥\n\n");
188
+ }, HEARTBEAT_MS);
189
+ heartbeat.unref?.();
190
+ const reject = (res, code, message) => {
191
+ res.statusCode = code;
192
+ res.setHeader("Content-Type", "text/plain; charset=utf-8");
193
+ res.end(message);
194
+ };
195
+ server.middlewares.use((req, res, next) => {
196
+ let pathname = (req.url ?? "/").split("?")[0];
197
+ if (basePath && pathname.startsWith(`${basePath}/__textjs/`))
198
+ pathname = pathname.slice(basePath.length);
199
+ if (pathname !== FRAMES_PATH && pathname !== INPUT_PATH && pathname !== STATUS_PATH)
200
+ return next();
201
+ res.setHeader("X-Content-Type-Options", "nosniff");
202
+ if (!isLoopbackAddress(req.socket.remoteAddress) || !isLoopbackHost(req.headers.host) || !isSameOriginRequest(req) || !isFetchMetadataAllowed(req, pathname)) {
203
+ return reject(res, 403, "▼ Text.js: the frame mirror only accepts local requests.");
204
+ }
205
+ if (pathname === STATUS_PATH) {
206
+ res.setHeader("Content-Type", "application/json; charset=utf-8");
207
+ res.setHeader("Cache-Control", "no-store");
208
+ res.end(JSON.stringify(status()));
209
+ return;
210
+ }
211
+ if (pathname === FRAMES_PATH) {
212
+ if (req.method !== "GET")
213
+ return reject(res, 405, "Method Not Allowed");
214
+ res.writeHead(200, {
215
+ "Content-Type": "text/event-stream; charset=utf-8",
216
+ "Cache-Control": "no-store",
217
+ Connection: "keep-alive",
218
+ "X-Accel-Buffering": "no",
219
+ });
220
+ res.write("retry: 1000\n\n");
221
+ watchers.add(res);
222
+ write(res, "status", status());
223
+ // The latest source last: editors mirror whichever tab sent the most recent frame.
224
+ for (const src of [...sources.values()].filter((s) => s !== latest).concat(latest ? [latest] : [])) {
225
+ const f = src.decoder.frame;
226
+ if (f)
227
+ write(res, "frame", encodeFullFrame(f, { source: src.id, meta: src.decoder.meta, seq: src.decoder.seq }));
228
+ }
229
+ if (watchers.size === 1)
230
+ announce();
231
+ req.on("close", () => {
232
+ if (!watchers.delete(res) || watchers.size > 0)
233
+ return;
234
+ // Tabs stop streaming now, so these frames go stale: keep the size and path for status, and
235
+ // wait for the full frames tabs send when the next editor subscribes.
236
+ for (const src of sources.values()) {
237
+ const f = src.decoder.frame;
238
+ if (f)
239
+ src.grid = { width: f.width, height: f.height };
240
+ if (src.decoder.meta.path)
241
+ src.path = src.decoder.meta.path;
242
+ src.decoder.reset();
243
+ }
244
+ announce();
245
+ });
246
+ return;
247
+ }
248
+ if (req.method !== "POST")
249
+ return reject(res, 405, "Method Not Allowed");
250
+ if (!(req.headers["content-type"] ?? "").startsWith("application/json") || req.headers[MIRROR_HEADER] !== "1") {
251
+ return reject(res, 400, `▼ Text.js: send JSON with the ${MIRROR_HEADER}: 1 header.`);
252
+ }
253
+ void readBody(req, MAX_INPUT_BYTES).then((body) => {
254
+ let parsed;
255
+ try {
256
+ parsed = JSON.parse(body);
257
+ }
258
+ catch {
259
+ return reject(res, 400, "Invalid JSON");
260
+ }
261
+ const target = parsed?.source;
262
+ const msg = parseInputMessage(parsed);
263
+ if (!msg)
264
+ return reject(res, 400, "Invalid input message");
265
+ // Never broadcast: input for a tab that just closed (or when no tab is connected) is dropped.
266
+ const src = target === undefined ? latest : typeof target === "string" ? (sources.get(target) ?? null) : null;
267
+ if (!src)
268
+ return reject(res, 404, "Unknown source");
269
+ src.client.send(HMR_INPUT_EVENT, msg);
270
+ res.statusCode = 204;
271
+ res.end();
272
+ }, (error) => {
273
+ if (!(error instanceof PayloadTooLarge))
274
+ return void req.destroy();
275
+ // Answer before dropping the connection so the client sees 413 rather than a reset.
276
+ res.setHeader("Connection", "close");
277
+ res.once("finish", () => req.destroy());
278
+ reject(res, 413, "Payload Too Large");
279
+ });
280
+ });
281
+ return {
282
+ get watchers() {
283
+ return watchers.size;
284
+ },
285
+ status,
286
+ close() {
287
+ clearInterval(heartbeat);
288
+ for (const res of watchers)
289
+ res.end();
290
+ watchers.clear();
291
+ },
292
+ };
293
+ }
294
+ //# sourceMappingURL=frames.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frames.js","sourceRoot":"","sources":["../../src/server/frames.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Node HTTP helpers shared by `text dev` middleware and `text start`:
3
+ * Web `Request` / `Response` bridging, route handlers, rewrites and proxying.
4
+ */
5
+ import type { IncomingMessage, ServerResponse } from "node:http";
6
+ import type { Rewrite } from "../config.js";
7
+ import type { RouteParams } from "../routing.js";
8
+ export declare const HTTP_METHODS: readonly ["GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"];
9
+ export type HttpMethod = (typeof HTTP_METHODS)[number];
10
+ export type RouteHandler = (request: Request, context: {
11
+ params: RouteParams;
12
+ }) => Response | Promise<Response>;
13
+ export type RouteHandlerModule = Partial<Record<HttpMethod, RouteHandler>> & Record<string, unknown>;
14
+ /**
15
+ * The request target as a path and query with exactly one leading slash.
16
+ * `//evil.com/x` and `/\evil.com/x` would otherwise resolve to another host
17
+ * against the origin (`request.url` → `http://evil.com/x`); absolute-form
18
+ * targets (`GET http://evil.com/x`) keep only their path and query.
19
+ */
20
+ export declare function normalizeRequestTarget(raw: string | undefined): string;
21
+ /** Resolve a request target against `origin`, never leaving it. */
22
+ export declare function requestUrl(raw: string | undefined, origin: string): URL;
23
+ /** A syntactically valid `Host` header (`name[:port]` or `[ipv6][:port]`). */
24
+ export declare function isValidHostHeader(host: string | undefined): host is string;
25
+ /** `localhost`, `*.localhost`, IP literals and `allowed` (a leading `.` allows subdomains). */
26
+ export declare function isAllowedHost(hostHeader: string | undefined, allowed?: readonly string[] | true): boolean;
27
+ export interface OriginOptions {
28
+ /** Fixed public origin (wins over headers). */
29
+ origin?: string;
30
+ /** Read `X-Forwarded-Host` / `X-Forwarded-Proto`. */
31
+ trustProxy?: boolean;
32
+ /** Protocol when not behind a trusted proxy (default `http`). */
33
+ protocol?: "http" | "https";
34
+ }
35
+ /** The origin a Node request was addressed to (`http://localhost:3000`), from validated headers only. */
36
+ export declare function requestOrigin(req: Pick<IncomingMessage, "headers">, options?: OriginOptions): string;
37
+ /**
38
+ * Read a request body as text, at most `max` bytes (`null` when larger).
39
+ * Prefers the body `middleware.ts` already took over from the Node stream.
40
+ */
41
+ export declare function readRequestBody(req: IncomingMessage, max: number): Promise<string | null>;
42
+ /**
43
+ * Bridge a Node request into a Web `Request`. Its `signal` aborts as soon as the
44
+ * client disconnects, so streaming handlers (SSE) can clean up immediately.
45
+ */
46
+ export declare function toWebRequest(req: IncomingMessage, origin: string, res?: ServerResponse): Request;
47
+ /** `Cache-Control` for responses that must not be stored by shared caches. */
48
+ export declare const PRIVATE_CACHE_CONTROL = "private, no-cache, no-store, max-age=0, must-revalidate";
49
+ export declare function markGeneratedCacheControl(response: Response): Response;
50
+ export declare function hasGeneratedCacheControl(response: Response): boolean;
51
+ /** What `middleware.ts` decided for a Node response that is completed later (see `sendWebResponse`). */
52
+ export interface MiddlewareResponseState {
53
+ /** Middleware set cookies, rewrote or changed request headers: never let shared caches store the result. */
54
+ private?: boolean;
55
+ /** `NextResponse.next({ status })` / `rewrite(url, { status })`. */
56
+ status?: number;
57
+ }
58
+ export declare function setMiddlewareState(res: ServerResponse, state: MiddlewareResponseState): void;
59
+ export declare function sendWebResponse(res: ServerResponse, response: Response, method?: string): Promise<void>;
60
+ export declare function allowedMethods(mod: RouteHandlerModule): string[];
61
+ /** Invoke an `app/**\/route.ts` handler with Next.js semantics (HEAD → GET, auto OPTIONS, 405). */
62
+ export declare function runRouteHandler(mod: RouteHandlerModule, request: Request, params: RouteParams): Promise<Response>;
63
+ export interface CompiledRewrite {
64
+ rewrite: Rewrite;
65
+ match(pathname: string): Record<string, string> | null;
66
+ destination(params: Record<string, string>, search: string): string;
67
+ }
68
+ /** Compile `/docs/:slug`, `/blog/:path*`, `/a/:rest+` source patterns. */
69
+ export declare function compileRewrite(rewrite: Rewrite): CompiledRewrite;
70
+ export declare function applyRewrites(rewrites: readonly CompiledRewrite[], url: string): string | null;
71
+ export declare function isLoopbackUrl(url: string): boolean;
72
+ /** Remove hop-by-hop headers (and any named by `Connection`) before forwarding a message. */
73
+ export declare function stripHopByHop(headers: Headers): Headers;
74
+ /** Forward `request` to an absolute URL (a middleware or config rewrite). Credentials are stripped for third-party origins. */
75
+ export declare function proxyFetch(request: Request, target: string | URL, options?: {
76
+ stripCredentials?: boolean;
77
+ }): Promise<Response>;
78
+ /** Forward a request to an absolute URL and pipe the response back. */
79
+ export declare function proxyRequest(req: IncomingMessage, res: ServerResponse, target: string, origin: string): Promise<void>;
80
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/server/http.ts"],"names":[],"mappings":"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"}