@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,365 @@
1
+ /**
2
+ * `@textjs/app/server` — the `middleware.ts` API: `NextRequest`, `NextResponse`,
3
+ * request / response cookies and the matcher config types.
4
+ *
5
+ * Web-standard only (no Node imports), so the same middleware runs on
6
+ * `text dev`, `text start`, Bun, Vercel Edge and Cloudflare Workers.
7
+ */
8
+ // ---------------------------------------------------------------------------
9
+ // Internal header protocol (the same headers Next.js and Vercel's edge
10
+ // routing understand, so middleware output can be handed to Vercel verbatim).
11
+ // ---------------------------------------------------------------------------
12
+ export const MIDDLEWARE_NEXT = "x-middleware-next";
13
+ export const MIDDLEWARE_REWRITE = "x-middleware-rewrite";
14
+ export const MIDDLEWARE_OVERRIDE_HEADERS = "x-middleware-override-headers";
15
+ export const MIDDLEWARE_REQUEST_PREFIX = "x-middleware-request-";
16
+ /**
17
+ * Brands `NextResponse.next()` / `NextResponse.rewrite()` results. Only these
18
+ * steer routing: an arbitrary `Response` (say, a proxied `fetch()`) carrying
19
+ * `x-middleware-*` headers is returned to the client as-is.
20
+ */
21
+ export const MIDDLEWARE_CONTROL = Symbol.for("textjs.middlewareControl");
22
+ const NEXT_URL_BRAND = Symbol.for("textjs.nextUrl");
23
+ const NEXT_RESPONSE_BRAND = Symbol.for("textjs.nextResponse");
24
+ /** `true` for responses created by `NextResponse.next()` / `NextResponse.rewrite()` (from any copy of this module). */
25
+ export function isMiddlewareControl(response) {
26
+ return response[MIDDLEWARE_CONTROL] === true;
27
+ }
28
+ function decode(value) {
29
+ try {
30
+ return decodeURIComponent(value);
31
+ }
32
+ catch {
33
+ return value;
34
+ }
35
+ }
36
+ /** Parse a `Cookie` request header. The first occurrence of a name wins. */
37
+ export function parseCookieHeader(header) {
38
+ const out = new Map();
39
+ if (!header)
40
+ return out;
41
+ for (const part of header.split(";")) {
42
+ const eq = part.indexOf("=");
43
+ if (eq < 0)
44
+ continue;
45
+ const name = part.slice(0, eq).trim();
46
+ if (!name || out.has(name))
47
+ continue;
48
+ let value = part.slice(eq + 1).trim();
49
+ if (value.startsWith('"') && value.endsWith('"') && value.length >= 2)
50
+ value = value.slice(1, -1);
51
+ out.set(name, decode(value));
52
+ }
53
+ return out;
54
+ }
55
+ const COOKIE_NAME = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
56
+ /** Serialize one `Set-Cookie` header value (RFC 6265bis). `path` defaults to `/`. */
57
+ export function serializeCookie(cookie) {
58
+ if (!COOKIE_NAME.test(cookie.name))
59
+ throw new TypeError(`Invalid cookie name: ${JSON.stringify(cookie.name)}`);
60
+ const parts = [`${cookie.name}=${encodeURIComponent(cookie.value)}`];
61
+ for (const [attr, v] of [["path", cookie.path], ["domain", cookie.domain]]) {
62
+ if (v !== undefined && /[;\u0000-\u001f\u007f]/.test(v))
63
+ throw new TypeError(`Invalid cookie ${attr}: ${JSON.stringify(v)}`);
64
+ }
65
+ parts.push(`Path=${cookie.path ?? "/"}`);
66
+ if (cookie.domain)
67
+ parts.push(`Domain=${cookie.domain}`);
68
+ if (cookie.expires !== undefined)
69
+ parts.push(`Expires=${new Date(cookie.expires).toUTCString()}`);
70
+ if (cookie.maxAge !== undefined)
71
+ parts.push(`Max-Age=${Math.floor(cookie.maxAge)}`);
72
+ if (cookie.httpOnly)
73
+ parts.push("HttpOnly");
74
+ if (cookie.secure)
75
+ parts.push("Secure");
76
+ if (cookie.sameSite !== undefined && cookie.sameSite !== false) {
77
+ const s = cookie.sameSite === true ? "strict" : cookie.sameSite;
78
+ parts.push(`SameSite=${s.charAt(0).toUpperCase()}${s.slice(1)}`);
79
+ }
80
+ if (cookie.priority)
81
+ parts.push(`Priority=${cookie.priority.charAt(0).toUpperCase()}${cookie.priority.slice(1)}`);
82
+ if (cookie.partitioned)
83
+ parts.push("Partitioned");
84
+ return parts.join("; ");
85
+ }
86
+ /** Parse a `Set-Cookie` header value back into a cookie (name, value and attributes). */
87
+ export function parseSetCookie(header) {
88
+ const [pair, ...attrs] = header.split(";");
89
+ const eq = (pair ?? "").indexOf("=");
90
+ if (!pair || eq <= 0)
91
+ return null;
92
+ const cookie = { name: pair.slice(0, eq).trim(), value: decode(pair.slice(eq + 1).trim()) };
93
+ for (const attr of attrs) {
94
+ const i = attr.indexOf("=");
95
+ const key = (i < 0 ? attr : attr.slice(0, i)).trim().toLowerCase();
96
+ const val = i < 0 ? "" : attr.slice(i + 1).trim();
97
+ if (key === "path")
98
+ cookie.path = val;
99
+ else if (key === "domain")
100
+ cookie.domain = val;
101
+ else if (key === "expires")
102
+ cookie.expires = new Date(val);
103
+ else if (key === "max-age")
104
+ cookie.maxAge = Number(val);
105
+ else if (key === "httponly")
106
+ cookie.httpOnly = true;
107
+ else if (key === "secure")
108
+ cookie.secure = true;
109
+ else if (key === "samesite")
110
+ cookie.sameSite = val.toLowerCase();
111
+ else if (key === "priority")
112
+ cookie.priority = val.toLowerCase();
113
+ else if (key === "partitioned")
114
+ cookie.partitioned = true;
115
+ }
116
+ return cookie;
117
+ }
118
+ /** `request.cookies`: reads the `Cookie` header; `set()` / `delete()` update it for downstream handlers. */
119
+ export class RequestCookies {
120
+ #headers;
121
+ #map;
122
+ constructor(headers) {
123
+ this.#headers = headers;
124
+ this.#map = parseCookieHeader(headers.get("cookie"));
125
+ }
126
+ get size() {
127
+ return this.#map.size;
128
+ }
129
+ get(name) {
130
+ const n = typeof name === "string" ? name : name.name;
131
+ const value = this.#map.get(n);
132
+ return value === undefined ? undefined : { name: n, value };
133
+ }
134
+ getAll(name) {
135
+ const all = [...this.#map].map(([n, value]) => ({ name: n, value }));
136
+ if (name === undefined)
137
+ return all;
138
+ const n = typeof name === "string" ? name : name.name;
139
+ return all.filter((c) => c.name === n);
140
+ }
141
+ has(name) {
142
+ return this.#map.has(name);
143
+ }
144
+ set(name, value) {
145
+ const c = typeof name === "string" ? { name, value: value ?? "" } : name;
146
+ this.#map.set(c.name, c.value);
147
+ this.#sync();
148
+ return this;
149
+ }
150
+ delete(names) {
151
+ const list = Array.isArray(names) ? names : [names];
152
+ const result = list.map((n) => this.#map.delete(n));
153
+ this.#sync();
154
+ return Array.isArray(names) ? result : result[0];
155
+ }
156
+ clear() {
157
+ this.#map.clear();
158
+ this.#sync();
159
+ return this;
160
+ }
161
+ [Symbol.iterator]() {
162
+ return new Map([...this.#map].map(([n, value]) => [n, { name: n, value }]))[Symbol.iterator]();
163
+ }
164
+ toString() {
165
+ return [...this.#map].map(([n, v]) => `${n}=${encodeURIComponent(v)}`).join("; ");
166
+ }
167
+ #sync() {
168
+ if (this.#map.size === 0)
169
+ this.#headers.delete("cookie");
170
+ else
171
+ this.#headers.set("cookie", this.toString());
172
+ }
173
+ }
174
+ /** `response.cookies`: a typed view over the response's `Set-Cookie` headers. */
175
+ export class ResponseCookies {
176
+ #headers;
177
+ #map = new Map();
178
+ constructor(headers) {
179
+ this.#headers = headers;
180
+ for (const line of headers.getSetCookie()) {
181
+ const c = parseSetCookie(line);
182
+ if (c)
183
+ this.#map.set(c.name, c);
184
+ }
185
+ }
186
+ get(name) {
187
+ return this.#map.get(typeof name === "string" ? name : name.name);
188
+ }
189
+ getAll(name) {
190
+ const all = [...this.#map.values()];
191
+ if (name === undefined)
192
+ return all;
193
+ const n = typeof name === "string" ? name : name.name;
194
+ return all.filter((c) => c.name === n);
195
+ }
196
+ has(name) {
197
+ return this.#map.has(name);
198
+ }
199
+ set(name, value, options) {
200
+ const c = typeof name === "string" ? { ...options, name, value: value ?? "" } : { ...name };
201
+ serializeCookie(c);
202
+ this.#map.set(c.name, c);
203
+ this.#sync();
204
+ return this;
205
+ }
206
+ /** Expire a cookie on the client (`Max-Age=0`). */
207
+ delete(name) {
208
+ const opts = typeof name === "string" ? { name } : name;
209
+ return this.set({ ...opts, value: "", expires: new Date(0), maxAge: 0 });
210
+ }
211
+ [Symbol.iterator]() {
212
+ return this.#map[Symbol.iterator]();
213
+ }
214
+ toString() {
215
+ return [...this.#map.values()].map(serializeCookie).join(", ");
216
+ }
217
+ #sync() {
218
+ this.#headers.delete("set-cookie");
219
+ for (const c of this.#map.values())
220
+ this.#headers.append("set-cookie", serializeCookie(c));
221
+ }
222
+ }
223
+ // ---------------------------------------------------------------------------
224
+ // NextURL / NextRequest
225
+ // ---------------------------------------------------------------------------
226
+ /**
227
+ * A `URL` whose `pathname` excludes the app's `basePath`. `href`, `toString()`
228
+ * and `toJSON()` include it, so `new URL("/x", request.nextUrl)` and
229
+ * `redirect(request.nextUrl)` stay inside the app.
230
+ */
231
+ export class NextURL extends URL {
232
+ basePath;
233
+ constructor(input, base, basePath = "") {
234
+ super(input, base);
235
+ this.basePath = basePath;
236
+ this[NEXT_URL_BRAND] = true;
237
+ if (basePath && (this.pathname === basePath || this.pathname.startsWith(`${basePath}/`))) {
238
+ this.pathname = this.pathname.slice(basePath.length) || "/";
239
+ }
240
+ }
241
+ /** Recognizes `NextURL`s from other copies of this module (dev SSR vs the CLI). */
242
+ static [Symbol.hasInstance](value) {
243
+ return typeof value === "object" && value !== null && value[NEXT_URL_BRAND] === true;
244
+ }
245
+ /** The full URL including `basePath`. */
246
+ toAbsolute() {
247
+ const u = new URL(rawHref(this));
248
+ if (this.basePath)
249
+ u.pathname = this.basePath + (this.pathname === "/" ? "" : this.pathname) || "/";
250
+ return u;
251
+ }
252
+ clone() {
253
+ return new NextURL(this.toAbsolute(), undefined, this.basePath);
254
+ }
255
+ toString() {
256
+ return this.toAbsolute().href;
257
+ }
258
+ toJSON() {
259
+ return this.toString();
260
+ }
261
+ }
262
+ const URL_HREF = Object.getOwnPropertyDescriptor(URL.prototype, "href");
263
+ function rawHref(url) {
264
+ return URL_HREF.get?.call(url);
265
+ }
266
+ Object.defineProperty(NextURL.prototype, "href", {
267
+ configurable: true,
268
+ enumerable: true,
269
+ get() {
270
+ return this.toAbsolute().href;
271
+ },
272
+ set(value) {
273
+ URL_HREF.set?.call(this, value);
274
+ const { basePath } = this;
275
+ if (basePath && (this.pathname === basePath || this.pathname.startsWith(`${basePath}/`)))
276
+ this.pathname = this.pathname.slice(basePath.length) || "/";
277
+ },
278
+ });
279
+ /** The request passed to `middleware()`: a Web `Request` plus `nextUrl` and `cookies`. */
280
+ export class NextRequest extends Request {
281
+ nextUrl;
282
+ cookies;
283
+ constructor(input, init = {}) {
284
+ const { basePath, ...rest } = init;
285
+ const url = typeof input === "string" || input instanceof URL ? String(input) : input.url;
286
+ const base = input instanceof Request ? input : undefined;
287
+ const reqInit = { ...rest };
288
+ if (base && reqInit.body === undefined && base.body)
289
+ reqInit.duplex = "half";
290
+ super(base ?? url, reqInit);
291
+ this.nextUrl = new NextURL(url, undefined, basePath ?? "");
292
+ this.cookies = new RequestCookies(this.headers);
293
+ }
294
+ }
295
+ function destination(url) {
296
+ if (url instanceof NextURL)
297
+ return url.toAbsolute().href;
298
+ if (url instanceof URL)
299
+ return url.href;
300
+ if (typeof url === "object" && url !== null && typeof url.toAbsolute === "function")
301
+ return url.toAbsolute().href;
302
+ try {
303
+ return new URL(url).href;
304
+ }
305
+ catch {
306
+ throw new TypeError(`URL is malformed "${String(url)}". Please use only absolute URLs, e.g. new URL("/login", request.url).`);
307
+ }
308
+ }
309
+ function applyRequestOverride(headers, init) {
310
+ if (!init?.request?.headers)
311
+ return;
312
+ const next = new Headers(init.request.headers);
313
+ const keys = [];
314
+ next.forEach((value, key) => {
315
+ keys.push(key);
316
+ headers.set(`${MIDDLEWARE_REQUEST_PREFIX}${key}`, value);
317
+ });
318
+ headers.set(MIDDLEWARE_OVERRIDE_HEADERS, keys.join(","));
319
+ }
320
+ function control(response) {
321
+ response[MIDDLEWARE_CONTROL] = true;
322
+ return response;
323
+ }
324
+ const REDIRECTS = new Set([301, 302, 303, 307, 308]);
325
+ export class NextResponse extends Response {
326
+ cookies;
327
+ constructor(body, init) {
328
+ super(body, init);
329
+ this.cookies = new ResponseCookies(this.headers);
330
+ this[NEXT_RESPONSE_BRAND] = true;
331
+ }
332
+ static [Symbol.hasInstance](value) {
333
+ return typeof value === "object" && value !== null && value[NEXT_RESPONSE_BRAND] === true;
334
+ }
335
+ static json(body, init) {
336
+ const headers = new Headers(init?.headers);
337
+ if (!headers.has("content-type"))
338
+ headers.set("content-type", "application/json");
339
+ return new NextResponse(JSON.stringify(body), { ...init, headers });
340
+ }
341
+ /** Redirect (`307` by default). The URL must be absolute: `new URL("/login", request.url)`. */
342
+ static redirect(url, init) {
343
+ const status = typeof init === "number" ? init : (init?.status ?? 307);
344
+ if (!REDIRECTS.has(status))
345
+ throw new RangeError(`Failed to execute "redirect" on "response": Invalid status code ${status}`);
346
+ const headers = new Headers(typeof init === "object" ? init.headers : undefined);
347
+ headers.set("location", destination(url));
348
+ return new NextResponse(null, { ...(typeof init === "object" ? init : {}), status, headers });
349
+ }
350
+ /** Serve another URL without changing the address bar. External origins are proxied. */
351
+ static rewrite(url, init) {
352
+ const headers = new Headers(init?.headers);
353
+ headers.set(MIDDLEWARE_REWRITE, destination(url));
354
+ applyRequestOverride(headers, init);
355
+ return control(new NextResponse(null, { ...init, headers }));
356
+ }
357
+ /** Continue to the route handler / page, optionally adding response or request headers. */
358
+ static next(init) {
359
+ const headers = new Headers(init?.headers);
360
+ headers.set(MIDDLEWARE_NEXT, "1");
361
+ applyRequestOverride(headers, init);
362
+ return control(new NextResponse(null, { ...init, headers }));
363
+ }
364
+ }
365
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../src/server/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Partial Prerendering for the console: `text build` renders each static
3
+ * route's first frame (the static shell, with `<Suspense>` fallbacks where
4
+ * data is still loading) and inlines it into that route's HTML as a classic
5
+ * `<script>` that replays the driver's exact `console.clear()` +
6
+ * `console.log(format, ...css)`, before any module loads. The client (or the
7
+ * frame player) then boots with `initialClear: false`, so its first frame is
8
+ * appended below the shell and swaps in within one DevTools paint: the
9
+ * console is cleared exactly once.
10
+ */
11
+ import type { ShellCall } from "./live-app.js";
12
+ /** The URL path a shell paints on (`basePath` + route pattern, percent-encoded like `location.pathname`). */
13
+ export declare function shellPath(basePath: string, pattern: string): string;
14
+ /**
15
+ * A self-contained `<script>` replaying `calls` when `location.pathname`
16
+ * matches `path` (so an SPA-fallback copy of the document never paints the
17
+ * wrong route). CSS arguments are deduplicated into a table.
18
+ */
19
+ export declare function shellScript(calls: readonly ShellCall[], path: string): string;
20
+ /** Insert a shell script into an HTML document, ahead of every module script. */
21
+ export declare function injectShell(html: string, script: string): string;
22
+ //# sourceMappingURL=ppr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ppr.d.ts","sourceRoot":"","sources":["../../src/server/ppr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAG5C,6GAA6G;AAC7G,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CA4B7E;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKhE"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Partial Prerendering for the console: `text build` renders each static
3
+ * route's first frame (the static shell, with `<Suspense>` fallbacks where
4
+ * data is still loading) and inlines it into that route's HTML as a classic
5
+ * `<script>` that replays the driver's exact `console.clear()` +
6
+ * `console.log(format, ...css)`, before any module loads. The client (or the
7
+ * frame player) then boots with `initialClear: false`, so its first frame is
8
+ * appended below the shell and swaps in within one DevTools paint: the
9
+ * console is cleared exactly once.
10
+ */
11
+ import { inlineJson } from "./live-routes.js";
12
+ /** The URL path a shell paints on (`basePath` + route pattern, percent-encoded like `location.pathname`). */
13
+ export function shellPath(basePath, pattern) {
14
+ const p = pattern === "/" ? basePath || "/" : `${basePath}${pattern}`;
15
+ return encodeURI(p);
16
+ }
17
+ /**
18
+ * A self-contained `<script>` replaying `calls` when `location.pathname`
19
+ * matches `path` (so an SPA-fallback copy of the document never paints the
20
+ * wrong route). CSS arguments are deduplicated into a table.
21
+ */
22
+ export function shellScript(calls, path) {
23
+ const table = [];
24
+ const index = new Map();
25
+ const ops = [];
26
+ for (const c of calls) {
27
+ if (c.method === "clear") {
28
+ ops.push(0);
29
+ continue;
30
+ }
31
+ const [format = "", ...args] = c.args;
32
+ ops.push([
33
+ format,
34
+ args.map((a) => {
35
+ let i = index.get(a);
36
+ if (i === undefined) {
37
+ i = table.length;
38
+ table.push(a);
39
+ index.set(a, i);
40
+ }
41
+ return i;
42
+ }),
43
+ ]);
44
+ }
45
+ const body = `(function(p,c,s){var l=location.pathname;if(l.length>1&&l.charAt(l.length-1)==="/")l=l.slice(0,-1);if(l!==p||typeof console==="undefined")return;` +
46
+ `for(var i=0;i<s.length;i++){var o=s[i];if(o===0){console.clear();continue}var a=[o[0]];for(var j=0;j<o[1].length;j++)a.push(c[o[1][j]]);console.log.apply(console,a)}` +
47
+ `window.__TEXTJS_SHELL__=1;window.__TEXTJS_SHELL_AT__=typeof performance!=="undefined"?performance.now():void 0})(${inlineJson(path)},${inlineJson(table)},${inlineJson(ops)});`;
48
+ return `<script data-textjs-shell>${body}</script>`;
49
+ }
50
+ /** Insert a shell script into an HTML document, ahead of every module script. */
51
+ export function injectShell(html, script) {
52
+ const at = html.search(/<script\b[^>]*type=["']module["']/i);
53
+ if (at >= 0)
54
+ return `${html.slice(0, at)}${script}\n ${html.slice(at)}`;
55
+ const body = html.lastIndexOf("</body>");
56
+ return body >= 0 ? `${html.slice(0, body)}${script}\n${html.slice(body)}` : html + script;
57
+ }
58
+ //# sourceMappingURL=ppr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ppr.js","sourceRoot":"","sources":["../../src/server/ppr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,6GAA6G;AAC7G,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IACzD,MAAM,CAAC,GAAG,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,OAAO,EAAE,CAAC;IACtE,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAA2B,EAAE,IAAY;IACnE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,MAAM,GAAG,GAAkC,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YACzB,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACZ,SAAS;QACX,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC;YACP,MAAM;YACN,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACb,IAAI,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACrB,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBACpB,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;oBACjB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBACd,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAClB,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GACR,mJAAmJ;QACnJ,uKAAuK;QACvK,oHAAoH,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;IACnL,OAAO,6BAA6B,IAAI,WAAW,CAAC;AACtD,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IACtD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC7D,IAAI,EAAE,IAAI,CAAC;QAAE,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,SAAS,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;IAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,MAAM,CAAC;AAC5F,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * File-system scanner for the `app/` directory (Node only).
3
+ */
4
+ import { type FlatRoute, type RouteFileKind, type RouteManifest, type RouteParams } from "../routing.js";
5
+ export declare const ROUTE_EXTENSIONS: readonly [".tsx", ".ts", ".jsx", ".js"];
6
+ export interface ScannedSegment {
7
+ segment: string;
8
+ dir: string;
9
+ /** Absolute file paths. */
10
+ files: Partial<Record<RouteFileKind, string>>;
11
+ /** Absolute `route.ts` path (API handler). */
12
+ route?: string;
13
+ children: ScannedSegment[];
14
+ }
15
+ export interface AppScan {
16
+ root: string;
17
+ appDir: string;
18
+ tree: ScannedSegment;
19
+ }
20
+ export declare function toPosix(p: string): string;
21
+ /** Scan `<root>/<appDir>` into a segment tree. */
22
+ export declare function scanApp(root: string, appDir?: string): AppScan;
23
+ /** `true` when `file` is a route file the manifest depends on. */
24
+ export declare function isRouteFile(file: string, appDir: string): boolean;
25
+ /** A manifest with placeholder modules (for summaries and matching on the server). */
26
+ export declare function toStaticManifest(scan: AppScan): RouteManifest;
27
+ export interface ApiRoute {
28
+ pattern: string;
29
+ file: string;
30
+ }
31
+ /** API route handlers as a manifest (route files stand in for pages). */
32
+ export declare function toApiManifest(scan: AppScan): RouteManifest;
33
+ export declare function listApiRoutes(scan: AppScan): ApiRoute[];
34
+ export declare function matchApiRoute(api: RouteManifest, pathname: string): {
35
+ file: string;
36
+ params: RouteParams;
37
+ pattern: string;
38
+ } | null;
39
+ export declare function listPages(scan: AppScan): FlatRoute[];
40
+ export interface GenerateOptions {
41
+ /** Emit `() => import()` for pages (code-split) instead of static imports. */
42
+ lazyPages?: boolean;
43
+ /** Add the self-accepting HMR footer. */
44
+ hmr?: boolean;
45
+ }
46
+ /** Generate the `virtual:textjs/routes` module source. */
47
+ export declare function generateRoutesModule(scan: AppScan, options?: GenerateOptions): string;
48
+ //# sourceMappingURL=scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../src/server/scan.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAmD,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAyB,MAAM,YAAY,CAAC;AAE9K,eAAO,MAAM,gBAAgB,yCAA0C,CAAC;AAExE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IAC9C,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzC;AA6BD,kDAAkD;AAClD,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAQ,GAAG,OAAO,CAI7D;AAED,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAOjE;AAaD,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAe7D;AAMD,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,yEAAyE;AACzE,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,CAY1D;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE,CAEvD;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMjI;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,EAAE,CAEpD;AAED,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,yCAAyC;IACzC,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,0DAA0D;AAC1D,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,eAAoB,GAAG,MAAM,CAsCzF"}