@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 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/server/adapters/runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,cAAc,EAA6C,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAmB,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,aAAa,EAAE,sBAAsB,EAAE,UAAU,EAA2B,MAAM,SAAS,CAAC;AAEpI,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAwB,MAAM,uBAAuB,CAAC;AAiC5G,SAAS,QAAQ;IACf,OAAO,IAAI,QAAQ,CAAC,qCAAqC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;AACxI,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,QAAgB;IACnD,IAAI,CAAC,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC/B,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC;IACtC,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACtF,CAAC;AAED,SAAS,QAAQ,CAAC,QAAuB,EAAE,QAAgB;IACzD,MAAM,CAAC,GAAG,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC7C,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAqB,CAAC;IAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAClE,CAAC;AAED,SAAS,UAAU,CAAC,QAAgB;IAClC,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC9D,IAAI,OAAO,CAAC,UAAU;QAAE,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE1D,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE;QACjC,uFAAuF;QACvF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,UAAU,GAAG,sBAAsB,CAAC,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAChF,MAAM,QAAQ,GAAG,UAAU,KAAK,GAAG,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACxJ,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACnD,IAAI,QAAQ,KAAK,IAAI;YAAE,OAAO,QAAQ,EAAE,CAAC;QACzC,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QACxB,IAAI,OAAO,GAAG,QAAQ,CAAC;QACvB,IAAI,KAAK,GAAmB,IAAI,CAAC;QACjC,IAAI,KAAK,GAAoB,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,QAAkB,EAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAEpH,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;YAC7G,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU;gBAAE,OAAO,OAAO,CAAC,QAAQ,CAAC;YACzD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YAC1B,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;YACxB,KAAK,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;YAC7D,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM;oBAAE,OAAO,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjK,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACxD,QAAQ,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACzC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;YAClC,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAAC,CAAC;YAC1D,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;oBAAE,OAAO,MAAM,CAAC,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,gBAAgB,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;gBACjI,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;gBACtC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;gBACtB,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;YACpB,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC;YACrE,IAAI,IAAI;gBAAE,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,MAAM,CAAC,IAAI,QAAQ,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACxF,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACvD,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,GAAG,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YACtD,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;YAC3G,OAAO,MAAM,CAAC,MAAM,wBAAwB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QACzJ,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QAC5C,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/H,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAC9D,IAAI,KAAK;gBAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAC5C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjF,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACrD,OAAO,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC;IACnC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Shared adapter plumbing: the build context, generated server entries and
3
+ * route-pattern → regular-expression helpers.
4
+ */
5
+ import type { Rewrite, TextConfig } from "../../config.js";
6
+ import type { ApiRoute, AppScan } from "../scan.js";
7
+ export declare const ADAPTERS: readonly ["static", "bun", "vercel", "cloudflare"];
8
+ export type AdapterName = (typeof ADAPTERS)[number];
9
+ export interface AdapterContext {
10
+ root: string;
11
+ /** The client build (`dist/`). */
12
+ outDir: string;
13
+ config: TextConfig;
14
+ scan: AppScan;
15
+ api: ApiRoute[];
16
+ basePath: string;
17
+ /** Config rewrites, resolved at build time. */
18
+ rewrites: Rewrite[];
19
+ middlewareFile: string | null;
20
+ cacheHandlerFile: string | null;
21
+ print(line?: string): void;
22
+ }
23
+ export interface AdapterResult {
24
+ adapter: AdapterName;
25
+ /** Deployable output directory. */
26
+ output: string;
27
+ /** Lines for the build summary. */
28
+ notes: string[];
29
+ }
30
+ export declare function isAdapterName(value: unknown): value is AdapterName;
31
+ /** The adapter implied by the build environment (`VERCEL=1`, `CF_PAGES=1`). */
32
+ export declare function detectAdapter(env?: Record<string, string | undefined>): AdapterName | undefined;
33
+ export interface EntryOptions {
34
+ /** Extra source appended after `options` is declared. */
35
+ body: string;
36
+ /** Import the route handler modules (default `true`). */
37
+ handlers?: boolean;
38
+ /** Import `middleware.ts` (default `true`). */
39
+ middleware?: boolean;
40
+ /** Import `createRequestHandler` (default `true`). */
41
+ runtime?: boolean;
42
+ }
43
+ /**
44
+ * The common entry prelude: route handlers (`manifest`, `handlers`), the
45
+ * middleware module, the cache store and `options` for `createRequestHandler`.
46
+ */
47
+ export declare function serverEntry(ctx: AdapterContext, opts: EntryOptions): string;
48
+ export declare function escapeRegex(s: string): string;
49
+ /** App route pattern (`/api/posts/[id]`, `/api/[...slug]`) → anchored regex source with one outer capture. */
50
+ export declare function patternRegex(pattern: string, basePath?: string): string;
51
+ /** A middleware matcher, prefixed with basePath, as an anchored regex source. */
52
+ export declare function matcherRegex(source: string, basePath?: string): string;
53
+ /** Config rewrite `source` → `{ src, dest }` with `$n` substitutions. */
54
+ export declare function rewriteRoute(rewrite: Rewrite, basePath?: string): {
55
+ src: string;
56
+ dest: string;
57
+ };
58
+ /** Copy `from` into `to`, skipping the `.text/` build metadata directory. */
59
+ export declare function copyStatic(from: string, to: string, skip?: (rel: string) => boolean): void;
60
+ /** Remove `.text/` (server bundles and build manifests) from output a static host publishes as-is. */
61
+ export declare function removeServerBundle(outDir: string): void;
62
+ /** Patterns of `export const runtime = "server"` pages. */
63
+ export declare function serverRoutePatterns(ctx: Pick<AdapterContext, "scan">): string[];
64
+ /** Server-rendered routes keep a live session per tab: refuse platforms without a long-lived server. */
65
+ export declare function assertNoServerRoutes(ctx: Pick<AdapterContext, "scan">, adapter: AdapterName): void;
66
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/shared.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAGxD,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAMjD,eAAO,MAAM,QAAQ,oDAAqD,CAAC;AAC3E,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,QAAQ,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,WAAW,CAAC;IACrB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,WAAW,GAAG,SAAS,CAI5G;AAID,MAAM,WAAW,YAAY;IAC3B,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAe3E;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,8GAA8G;AAC9G,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM,CAWnE;AAED,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,MAAM,CAGlE;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,SAAK,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAW3F;AAED,6EAA6E;AAC7E,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAqB,GAAG,IAAI,CAevG;AAED,sGAAsG;AACtG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGvD;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,MAAM,EAAE,CAE/E;AAED,wGAAwG;AACxG,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAGlG"}
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Shared adapter plumbing: the build context, generated server entries and
3
+ * route-pattern → regular-expression helpers.
4
+ */
5
+ import { cpSync, existsSync, mkdirSync, readdirSync, rmSync, statSync } from "node:fs";
6
+ import { join } from "node:path";
7
+ import { parseSegment } from "../../routing.js";
8
+ import { generateApiModule } from "../../vite-plugin.js";
9
+ import { txError } from "@textjs/core";
10
+ import { compileMatcherSource, matcherKeys } from "../middleware-runtime.js";
11
+ import { listServerPages } from "../live-routes.js";
12
+ import { frameworkFile } from "./bundle.js";
13
+ export const ADAPTERS = ["static", "bun", "vercel", "cloudflare"];
14
+ export function isAdapterName(value) {
15
+ return typeof value === "string" && ADAPTERS.includes(value);
16
+ }
17
+ /** The adapter implied by the build environment (`VERCEL=1`, `CF_PAGES=1`). */
18
+ export function detectAdapter(env = process.env) {
19
+ if (env.VERCEL === "1")
20
+ return "vercel";
21
+ if (env.CF_PAGES === "1")
22
+ return "cloudflare";
23
+ return undefined;
24
+ }
25
+ const json = JSON.stringify;
26
+ /**
27
+ * The common entry prelude: route handlers (`manifest`, `handlers`), the
28
+ * middleware module, the cache store and `options` for `createRequestHandler`.
29
+ */
30
+ export function serverEntry(ctx, opts) {
31
+ const lines = [];
32
+ const withHandlers = opts.handlers !== false;
33
+ const withMiddleware = opts.middleware !== false && ctx.middlewareFile !== null;
34
+ if (withHandlers)
35
+ lines.push(generateApiModule(ctx.scan));
36
+ else
37
+ lines.push("export const manifest = { segment: \"\" };", "export const handlers = {};");
38
+ if (opts.runtime !== false)
39
+ lines.push(`import { createRequestHandler } from ${json(frameworkFile("server/adapters/runtime.ts"))};`);
40
+ if (withMiddleware)
41
+ lines.push(`import * as middleware from ${json(ctx.middlewareFile)};`);
42
+ const withStore = ctx.cacheHandlerFile !== null && opts.runtime !== false;
43
+ if (withStore)
44
+ lines.push(`import cacheStore from ${json(ctx.cacheHandlerFile)};`);
45
+ lines.push(`const options = { manifest, handlers, basePath: ${json(ctx.basePath)}, rewrites: ${json(ctx.rewrites)}${withMiddleware ? ", middleware" : ""}${withStore ? ", cacheStore" : ""} };`, opts.body);
46
+ return lines.join("\n");
47
+ }
48
+ export function escapeRegex(s) {
49
+ return s.replace(/[.+*?^${}()|[\]\\/]/g, "\\$&");
50
+ }
51
+ /** App route pattern (`/api/posts/[id]`, `/api/[...slug]`) → anchored regex source with one outer capture. */
52
+ export function patternRegex(pattern, basePath = "") {
53
+ let body = "";
54
+ for (const seg of pattern.split("/").filter(Boolean)) {
55
+ const p = parseSegment(seg);
56
+ if (p.kind === "group")
57
+ continue;
58
+ if (p.kind === "static")
59
+ body += `\\/${escapeRegex(p.name)}`;
60
+ else if (p.kind === "dynamic")
61
+ body += "\\/[^/]+";
62
+ else if (p.kind === "catchAll")
63
+ body += "\\/[^/]+(?:\\/[^/]+)*";
64
+ else
65
+ body += "(?:\\/[^/]+(?:\\/[^/]+)*)?";
66
+ }
67
+ return `^(${escapeRegex(basePath)}${body})\\/?$`;
68
+ }
69
+ /** A middleware matcher, prefixed with basePath, as an anchored regex source. */
70
+ export function matcherRegex(source, basePath = "") {
71
+ const re = compileMatcherSource(source);
72
+ return `^${escapeRegex(basePath)}${re.slice(1)}`;
73
+ }
74
+ /** Config rewrite `source` → `{ src, dest }` with `$n` substitutions. */
75
+ export function rewriteRoute(rewrite, basePath = "") {
76
+ // Capture order, including unnamed groups (`/(.*)`) and groups inside custom patterns.
77
+ const names = matcherKeys(rewrite.source);
78
+ const src = matcherRegex(rewrite.source, basePath);
79
+ const external = /^[a-z]+:\/\//i.test(rewrite.destination);
80
+ let dest = rewrite.destination.replace(/:([A-Za-z_]\w*)[*+?]?/g, (_, n) => {
81
+ const i = names.indexOf(n);
82
+ return i < 0 ? "" : `$${i + 1}`;
83
+ });
84
+ if (!external)
85
+ dest = basePath + dest;
86
+ return { src, dest };
87
+ }
88
+ /** Copy `from` into `to`, skipping the `.text/` build metadata directory. */
89
+ export function copyStatic(from, to, skip = () => false) {
90
+ mkdirSync(to, { recursive: true });
91
+ const walk = (dir, rel) => {
92
+ for (const name of readdirSync(dir)) {
93
+ const r = rel ? `${rel}/${name}` : name;
94
+ if (r === ".text" || skip(r))
95
+ continue;
96
+ const src = join(dir, name);
97
+ const dest = join(to, r);
98
+ if (statSync(src).isDirectory()) {
99
+ mkdirSync(dest, { recursive: true });
100
+ walk(src, r);
101
+ }
102
+ else
103
+ cpSync(src, dest);
104
+ }
105
+ };
106
+ walk(from, "");
107
+ }
108
+ /** Remove `.text/` (server bundles and build manifests) from output a static host publishes as-is. */
109
+ export function removeServerBundle(outDir) {
110
+ const dir = join(outDir, ".text");
111
+ if (existsSync(dir))
112
+ rmSync(dir, { recursive: true, force: true });
113
+ }
114
+ /** Patterns of `export const runtime = "server"` pages. */
115
+ export function serverRoutePatterns(ctx) {
116
+ return listServerPages(ctx.scan).map((p) => p.pattern);
117
+ }
118
+ /** Server-rendered routes keep a live session per tab: refuse platforms without a long-lived server. */
119
+ export function assertNoServerRoutes(ctx, adapter) {
120
+ const routes = serverRoutePatterns(ctx);
121
+ if (routes.length > 0)
122
+ throw txError("TX030", routes.join(", "), adapter);
123
+ }
124
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../src/server/adapters/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `text build --adapter static`: a pure static export. Static `GET` route
3
+ * handlers (`dynamic = "force-static"` / `revalidate`) are prerendered into
4
+ * files; anything that needs a server is a build error.
5
+ */
6
+ import type { MiddlewareModule } from "../middleware.js";
7
+ import { type AdapterContext, type AdapterResult } from "./shared.js";
8
+ export declare function adaptStatic(ctx: AdapterContext, middleware: MiddlewareModule | null, apiBundle: string): Promise<AdapterResult>;
9
+ //# sourceMappingURL=static.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/static.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAA2C,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAE5G,wBAAsB,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAoDrI"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * `text build --adapter static`: a pure static export. Static `GET` route
3
+ * handlers (`dynamic = "force-static"` / `revalidate`) are prerendered into
4
+ * files; anything that needs a server is a build error.
5
+ */
6
+ import { copyFileSync, existsSync, mkdirSync, statSync, writeFileSync } from "node:fs";
7
+ import { dirname, join } from "node:path";
8
+ import { pathToFileURL } from "node:url";
9
+ import { isDynamicPattern, matchAppRoutes } from "../../routing.js";
10
+ import { routeCacheConfig, runRouteHandlerWithCache } from "../cache-route.js";
11
+ import { removeServerBundle, serverRoutePatterns } from "./shared.js";
12
+ export async function adaptStatic(ctx, middleware, apiBundle) {
13
+ const problems = [];
14
+ if (middleware)
15
+ problems.push("middleware.ts needs a server. Use --adapter bun, vercel or cloudflare (or `text start`).");
16
+ for (const pattern of serverRoutePatterns(ctx))
17
+ problems.push(`${pattern}: renders on the server (\`export const runtime = "server"\`). Use --adapter bun (or \`text start\`).`);
18
+ const notes = [];
19
+ if (ctx.rewrites.length > 0)
20
+ notes.push("rewrites in text.config.ts are not applied by static hosts; configure them on your host.");
21
+ const written = [];
22
+ if (ctx.api.length > 0 && problems.length === 0) {
23
+ const bundle = (await import(`${pathToFileURL(apiBundle).href}?t=${Date.now()}`));
24
+ for (const route of ctx.api) {
25
+ if (isDynamicPattern(route.pattern)) {
26
+ problems.push(`${route.pattern}: dynamic segments need a server.`);
27
+ continue;
28
+ }
29
+ const m = matchAppRoutes(bundle.manifest, route.pattern);
30
+ const id = m ? m.chain[m.chain.length - 1].files?.page : undefined;
31
+ const mod = id ? bundle.handlers[id] : undefined;
32
+ if (!mod)
33
+ continue;
34
+ const others = ["POST", "PUT", "PATCH", "DELETE"].filter((k) => typeof mod[k] === "function");
35
+ if (typeof mod.GET !== "function" || others.length > 0) {
36
+ problems.push(`${route.pattern}: only GET route handlers can be exported statically${others.length ? ` (found ${others.join(", ")})` : ""}.`);
37
+ continue;
38
+ }
39
+ if (!routeCacheConfig(mod, `${route.pattern}/route`).static) {
40
+ problems.push(`${route.pattern}: the route handler is dynamic. Add \`export const dynamic = "force-static"\` to prerender it.`);
41
+ continue;
42
+ }
43
+ const res = await runRouteHandlerWithCache(mod, new Request(`http://localhost${ctx.basePath}${route.pattern}`), { params: {}, pattern: route.pattern, pathname: route.pattern, cache: false });
44
+ if (!res.ok) {
45
+ problems.push(`${route.pattern}: prerendering returned ${res.status}.`);
46
+ continue;
47
+ }
48
+ const file = join(ctx.outDir, ...route.pattern.split("/").filter(Boolean));
49
+ if (existsSync(file) && statSync(file).isDirectory()) {
50
+ problems.push(`${route.pattern}: conflicts with a directory of the same name in the output.`);
51
+ continue;
52
+ }
53
+ mkdirSync(dirname(file), { recursive: true });
54
+ writeFileSync(file, new Uint8Array(await res.arrayBuffer()));
55
+ written.push(route.pattern);
56
+ }
57
+ }
58
+ if (problems.length > 0) {
59
+ throw new Error(`▼ Text.js: the static adapter can't export this app:\n${problems.map((p) => ` - ${p}`).join("\n")}`);
60
+ }
61
+ removeServerBundle(ctx.outDir);
62
+ // SPA fallback for hosts that serve 404.html for unknown paths (GitHub Pages, S3, …).
63
+ const fallback = join(ctx.outDir, "404.html");
64
+ if (!existsSync(fallback))
65
+ copyFileSync(join(ctx.outDir, "index.html"), fallback);
66
+ if (written.length > 0)
67
+ notes.unshift(`Prerendered ${written.length} route handler${written.length === 1 ? "" : "s"}: ${written.join(", ")}`);
68
+ return { adapter: "static", output: ctx.outDir, notes };
69
+ }
70
+ //# sourceMappingURL=static.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static.js","sourceRoot":"","sources":["../../../src/server/adapters/static.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * `text build --adapter vercel`: Vercel Build Output API v3 in `.vercel/output`.
3
+ *
4
+ * - `static/`: the client build (under `basePath`).
5
+ * - `functions/_textjs/server.func`: one Node.js function for every route handler.
6
+ * - `functions/_middleware.func`: `middleware.ts` as Edge Routing Middleware,
7
+ * speaking the `x-middleware-*` protocol Vercel's router understands.
8
+ * - `config.json`: asset headers, middleware, rewrites, handler routes and the
9
+ * SPA fallback.
10
+ */
11
+ import type { MiddlewareModule } from "../middleware.js";
12
+ import { type AdapterContext, type AdapterResult } from "./shared.js";
13
+ export declare const VERCEL_FUNCTION = "_textjs/server";
14
+ export declare const VERCEL_MIDDLEWARE = "_middleware";
15
+ /** Query parameter carrying the routed path into the function. */
16
+ export declare const PATH_PARAM = "__textjs_path";
17
+ export declare const VERCEL_NODE_RUNTIME = "nodejs22.x";
18
+ /** A routed path the function accepts: one leading slash, no backslashes or control characters. */
19
+ export declare const ROUTED_PATH: RegExp;
20
+ export interface VercelRoute {
21
+ src?: string;
22
+ dest?: string;
23
+ headers?: Record<string, string>;
24
+ continue?: boolean;
25
+ override?: boolean;
26
+ check?: boolean;
27
+ status?: number;
28
+ middlewarePath?: string;
29
+ middlewareRawSrc?: string[];
30
+ has?: unknown[];
31
+ missing?: unknown[];
32
+ handle?: "filesystem" | "rewrite" | "miss" | "hit" | "error" | "resource";
33
+ }
34
+ export interface VercelConfig {
35
+ version: 3;
36
+ routes: VercelRoute[];
37
+ framework: {
38
+ version: string;
39
+ };
40
+ }
41
+ export declare function vercelConfig(ctx: AdapterContext, middleware: MiddlewareModule | null): VercelConfig;
42
+ export declare function adaptVercel(ctx: AdapterContext, middleware: MiddlewareModule | null): Promise<AdapterResult>;
43
+ //# sourceMappingURL=vercel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.d.ts","sourceRoot":"","sources":["../../../src/server/adapters/vercel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGtD,OAAO,EAAwG,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzK,eAAO,MAAM,eAAe,mBAAmB,CAAC;AAChD,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAC/C,kEAAkE;AAClE,eAAO,MAAM,UAAU,kBAAkB,CAAC;AAC1C,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAEhD,mGAAmG;AACnG,eAAO,MAAM,WAAW,QAA2C,CAAC;AA4CpE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,GAAG,CAAC,EAAE,OAAO,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,UAAU,CAAC;CAC3E;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAChC;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI,GAAG,YAAY,CAgCnG;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,CAuBlH"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * `text build --adapter vercel`: Vercel Build Output API v3 in `.vercel/output`.
3
+ *
4
+ * - `static/`: the client build (under `basePath`).
5
+ * - `functions/_textjs/server.func`: one Node.js function for every route handler.
6
+ * - `functions/_middleware.func`: `middleware.ts` as Edge Routing Middleware,
7
+ * speaking the `x-middleware-*` protocol Vercel's router understands.
8
+ * - `config.json`: asset headers, middleware, rewrites, handler routes and the
9
+ * SPA fallback.
10
+ */
11
+ import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
12
+ import { join } from "node:path";
13
+ import { VERSION } from "@textjs/core";
14
+ import { middlewareMatchers } from "../middleware-runtime.js";
15
+ import { bundleServerEntry, frameworkFile } from "./bundle.js";
16
+ import { assertNoServerRoutes, copyStatic, escapeRegex, matcherRegex, patternRegex, rewriteRoute, serverEntry } from "./shared.js";
17
+ export const VERCEL_FUNCTION = "_textjs/server";
18
+ export const VERCEL_MIDDLEWARE = "_middleware";
19
+ /** Query parameter carrying the routed path into the function. */
20
+ export const PATH_PARAM = "__textjs_path";
21
+ export const VERCEL_NODE_RUNTIME = "nodejs22.x";
22
+ /** A routed path the function accepts: one leading slash, no backslashes or control characters. */
23
+ export const ROUTED_PATH = /^\/(?![/\\])[^\\\u0000-\u001f\u007f]*$/;
24
+ const FUNCTION_BODY = `
25
+ import { normalizeRequestTarget, requestOrigin, sendWebResponse, toWebRequest } from ${JSON.stringify(frameworkFile("server/http.ts"))};
26
+
27
+ // Middleware already ran in Vercel's router. The function is only reachable
28
+ // through the handler routes in config.json, which reject client-supplied
29
+ // ${PATH_PARAM} parameters and direct requests to /_textjs/*.
30
+ const handler = createRequestHandler({ ...options, skipMiddleware: true });
31
+ const REQUEST_CONTEXT = Symbol.for("@vercel/request-context");
32
+ const ROUTED_PATH = ${ROUTED_PATH.toString()};
33
+
34
+ export default async function textjs(req, res) {
35
+ const url = new URL(normalizeRequestTarget(req.url), "http://vercel.internal");
36
+ const routed = url.searchParams.getAll(${JSON.stringify(PATH_PARAM)});
37
+ if (routed.length !== 1 || !ROUTED_PATH.test(routed[0])) {
38
+ res.statusCode = 400;
39
+ res.end();
40
+ return;
41
+ }
42
+ url.searchParams.delete(${JSON.stringify(PATH_PARAM)});
43
+ req.url = routed[0] + url.search;
44
+ const request = toWebRequest(req, requestOrigin(req, { trustProxy: true, protocol: "https" }), res);
45
+ const vercel = globalThis[REQUEST_CONTEXT]?.get?.();
46
+ try {
47
+ const response = await handler(request, { waitUntil: (p) => vercel?.waitUntil?.(p) });
48
+ await sendWebResponse(res, response, request.method);
49
+ } catch (error) {
50
+ console.error(error);
51
+ if (!res.headersSent) res.statusCode = 500;
52
+ res.end();
53
+ }
54
+ }
55
+ `;
56
+ const MIDDLEWARE_BODY = `
57
+ import { runMiddleware, toMiddlewareResponse } from ${JSON.stringify(frameworkFile("server/middleware-runtime.ts"))};
58
+
59
+ export default async function textjsMiddleware(request, context) {
60
+ const outcome = await runMiddleware(middleware, request, { basePath: options.basePath, waitUntil: (p) => context?.waitUntil?.(p) });
61
+ return toMiddlewareResponse(outcome, request);
62
+ }
63
+ `;
64
+ export function vercelConfig(ctx, middleware) {
65
+ const base = ctx.basePath;
66
+ const routes = [
67
+ // The handler function is internal: only the handler routes below may reach it, with a path they set.
68
+ { src: `^\\/${escapeRegex(VERCEL_FUNCTION.split("/")[0])}(?:\\/.*)?$`, status: 404 },
69
+ { src: "^.*$", has: [{ type: "query", key: PATH_PARAM }], status: 400 },
70
+ { src: `^${escapeRegex(base)}\\/assets\\/(.*)$`, headers: { "cache-control": "public, max-age=31536000, immutable" }, continue: true },
71
+ ];
72
+ if (middleware) {
73
+ const matchers = middlewareMatchers(middleware);
74
+ const list = matchers ?? [{ source: "/:path*", regex: "", has: undefined, missing: undefined }];
75
+ for (const m of list) {
76
+ routes.push({
77
+ src: matchers ? matcherRegex(m.source, base) : `^${escapeRegex(base)}(?:\\/.*)?$`,
78
+ middlewarePath: VERCEL_MIDDLEWARE,
79
+ middlewareRawSrc: [m.source],
80
+ continue: true,
81
+ override: true,
82
+ ...(m.has ? { has: m.has } : {}),
83
+ ...(m.missing ? { missing: m.missing } : {}),
84
+ });
85
+ }
86
+ }
87
+ for (const r of ctx.rewrites) {
88
+ const { src, dest } = rewriteRoute(r, base);
89
+ routes.push(/^[a-z]+:\/\//i.test(dest) ? { src, dest } : { src, dest, continue: true });
90
+ }
91
+ for (const a of ctx.api)
92
+ routes.push({ src: patternRegex(a.pattern, base), dest: `/${VERCEL_FUNCTION}?${PATH_PARAM}=$1` });
93
+ routes.push({ handle: "filesystem" });
94
+ // Extensionless paths are console pages: serve the SPA document.
95
+ routes.push({ src: `^${escapeRegex(base)}(?:\\/(?:[^/]+\\/)*[^/.]*)?$`, dest: `${base}/index.html` });
96
+ return { version: 3, routes, framework: { version: VERSION } };
97
+ }
98
+ export async function adaptVercel(ctx, middleware) {
99
+ assertNoServerRoutes(ctx, "vercel");
100
+ const out = join(ctx.root, ".vercel", "output");
101
+ if (existsSync(out))
102
+ rmSync(out, { recursive: true, force: true });
103
+ copyStatic(ctx.outDir, join(out, "static", ...ctx.basePath.split("/").filter(Boolean)));
104
+ if (ctx.api.length > 0) {
105
+ const dir = join(out, "functions", `${VERCEL_FUNCTION}.func`);
106
+ mkdirSync(dir, { recursive: true });
107
+ await bundleServerEntry({ root: ctx.root, config: ctx.config, code: serverEntry(ctx, { body: FUNCTION_BODY, middleware: false }), outFile: join(dir, "index.mjs"), target: "node" });
108
+ writeFileSync(join(dir, ".vc-config.json"), `${JSON.stringify({ runtime: VERCEL_NODE_RUNTIME, handler: "index.mjs", launcherType: "Nodejs", shouldAddHelpers: false, supportsResponseStreaming: true }, null, 2)}\n`);
109
+ }
110
+ if (middleware && ctx.middlewareFile) {
111
+ const dir = join(out, "functions", `${VERCEL_MIDDLEWARE}.func`);
112
+ mkdirSync(dir, { recursive: true });
113
+ await bundleServerEntry({ root: ctx.root, config: ctx.config, code: serverEntry(ctx, { body: MIDDLEWARE_BODY, handlers: false, runtime: false }), outFile: join(dir, "index.js"), target: "edge" });
114
+ writeFileSync(join(dir, ".vc-config.json"), `${JSON.stringify({ runtime: "edge", entrypoint: "index.js" }, null, 2)}\n`);
115
+ }
116
+ writeFileSync(join(out, "config.json"), `${JSON.stringify(vercelConfig(ctx, middleware), null, 2)}\n`);
117
+ return { adapter: "vercel", output: out, notes: ["Deploy: vercel deploy --prebuilt (or push: Vercel runs `text build` and picks up .vercel/output)"] };
118
+ }
119
+ //# sourceMappingURL=vercel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../../src/server/adapters/vercel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Async Server Components for app files Bun imports in-process (`text mcp`,
3
+ * `text run`). `text dev` / `text build` alias `react/jsx-runtime` for project
4
+ * files to `@textjs/app/server/jsx-runtime` in Vite; here a Bun runtime
5
+ * plugin does the same by adding a `@jsxImportSource` pragma to every
6
+ * `.tsx` / `.jsx` file under the project root (dependencies are untouched).
7
+ */
8
+ /** Bun appends `/jsx-runtime` or `/jsx-dev-runtime` (see the package `exports`). */
9
+ export declare const SERVER_JSX_IMPORT_SOURCE = "@textjs/app/server";
10
+ /** The source as Bun should compile it: JSX through the server runtime, line numbers unchanged. */
11
+ export declare function withServerJsxPragma(source: string): string;
12
+ /**
13
+ * Compile JSX in project files under `root` against the server JSX runtime,
14
+ * so `async function` components suspend instead of failing on the console
15
+ * reconciler. Idempotent per root; returns `false` outside Bun.
16
+ */
17
+ export declare function installServerJsxRuntime(root: string): boolean;
18
+ //# sourceMappingURL=bun-jsx.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bun-jsx.d.ts","sourceRoot":"","sources":["../../src/server/bun-jsx.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,oFAAoF;AACpF,eAAO,MAAM,wBAAwB,uBAAuB,CAAC;AAuB7D,mGAAmG;AACnG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAmB7D"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Async Server Components for app files Bun imports in-process (`text mcp`,
3
+ * `text run`). `text dev` / `text build` alias `react/jsx-runtime` for project
4
+ * files to `@textjs/app/server/jsx-runtime` in Vite; here a Bun runtime
5
+ * plugin does the same by adding a `@jsxImportSource` pragma to every
6
+ * `.tsx` / `.jsx` file under the project root (dependencies are untouched).
7
+ */
8
+ import { readFileSync, realpathSync } from "node:fs";
9
+ import { resolve, sep } from "node:path";
10
+ /** Bun appends `/jsx-runtime` or `/jsx-dev-runtime` (see the package `exports`). */
11
+ export const SERVER_JSX_IMPORT_SOURCE = "@textjs/app/server";
12
+ const installed = new Set();
13
+ function escapeRegExp(s) {
14
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
15
+ }
16
+ function realpath(p) {
17
+ try {
18
+ return realpathSync(p);
19
+ }
20
+ catch {
21
+ return p;
22
+ }
23
+ }
24
+ /** The source as Bun should compile it: JSX through the server runtime, line numbers unchanged. */
25
+ export function withServerJsxPragma(source) {
26
+ return `/** @jsxImportSource ${SERVER_JSX_IMPORT_SOURCE} */ ${source}`;
27
+ }
28
+ /**
29
+ * Compile JSX in project files under `root` against the server JSX runtime,
30
+ * so `async function` components suspend instead of failing on the console
31
+ * reconciler. Idempotent per root; returns `false` outside Bun.
32
+ */
33
+ export function installServerJsxRuntime(root) {
34
+ const bun = globalThis.Bun;
35
+ if (!bun?.plugin)
36
+ return false;
37
+ const dirs = [...new Set([resolve(root), realpath(resolve(root))])].map((d) => (d.endsWith(sep) ? d : d + sep)).filter((d) => !installed.has(d));
38
+ if (dirs.length === 0)
39
+ return true;
40
+ for (const d of dirs)
41
+ installed.add(d);
42
+ const nm = escapeRegExp(`${sep}node_modules${sep}`);
43
+ const filter = new RegExp(`^(?:${dirs.map(escapeRegExp).join("|")})(?!.*${nm}).*\\.[jt]sx$`);
44
+ bun.plugin({
45
+ name: `textjs-server-jsx:${dirs[0]}`,
46
+ target: "bun",
47
+ setup(build) {
48
+ build.onLoad({ filter }, (args) => ({
49
+ contents: withServerJsxPragma(readFileSync(args.path, "utf8")),
50
+ loader: args.path.endsWith(".jsx") ? "jsx" : "tsx",
51
+ }));
52
+ },
53
+ });
54
+ return true;
55
+ }
56
+ //# sourceMappingURL=bun-jsx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bun-jsx.js","sourceRoot":"","sources":["../../src/server/bun-jsx.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAEzC,oFAAoF;AACpF,MAAM,CAAC,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AAS7D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;AAEpC,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,mBAAmB,CAAC,MAAc;IAChD,OAAO,wBAAwB,wBAAwB,OAAO,MAAM,EAAE,CAAC;AACzE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,MAAM,GAAG,GAAI,UAAmC,CAAC,GAAG,CAAC;IACrD,IAAI,CAAC,GAAG,EAAE,MAAM;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjJ,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,IAAI;QAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,GAAG,eAAe,GAAG,EAAE,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;IAC7F,GAAG,CAAC,MAAM,CAAC;QACT,IAAI,EAAE,qBAAqB,IAAI,CAAC,CAAC,CAAC,EAAE;QACpC,MAAM,EAAE,KAAK;QACb,KAAK,CAAC,KAAK;YACT,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAClC,QAAQ,EAAE,mBAAmB,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;gBAC9D,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;aACnD,CAAC,CAAC,CAAC;QACN,CAAC;KACF,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Full-route caching for `app/**\/route.ts` handlers: `export const dynamic`
3
+ * and `export const revalidate` (Next.js route segment config).
4
+ *
5
+ * - `dynamic = "force-static"` or `revalidate = N` (N > 0): `GET` / `HEAD` are
6
+ * cached per pathname with stale-while-revalidate. The handler receives a
7
+ * build-time-like request (no query string, headers, cookies or body).
8
+ * - Default, `"force-dynamic"` or `revalidate = 0`: run on every request.
9
+ */
10
+ import { type RouteHandlerModule } from "./http.js";
11
+ import type { RouteParams } from "../routing.js";
12
+ export declare const CACHE_HEADER = "x-textjs-cache";
13
+ export interface RouteCacheConfig {
14
+ /** Cached (static / ISR) for GET and HEAD. */
15
+ static: boolean;
16
+ revalidate: number | false;
17
+ }
18
+ /** Read and validate a route module's `dynamic` / `revalidate` exports. */
19
+ export declare function routeCacheConfig(mod: RouteHandlerModule, where?: string): RouteCacheConfig;
20
+ export interface RouteCacheContext {
21
+ params: RouteParams;
22
+ /** Route pattern, e.g. `/api/posts/[id]`. */
23
+ pattern: string;
24
+ /** Pathname without `basePath` (defaults to the request URL's). */
25
+ pathname?: string;
26
+ /** `false` in `text dev`: static semantics without storing responses (default `true`). */
27
+ cache?: boolean;
28
+ waitUntil?: (promise: Promise<unknown>) => void;
29
+ }
30
+ /** The request a static handler sees: same origin and path, nothing request-specific. */
31
+ export declare function staticRequest(request: Request): Request;
32
+ /** `Cache-Control` for a cached route (Next.js: `s-maxage=N, stale-while-revalidate=<expire - N>`). */
33
+ export declare function cacheControlFor(revalidate: number | false): string;
34
+ /** Responses a shared cache must never replay to other visitors. */
35
+ export declare function isUncacheableResponse(res: Response): boolean;
36
+ /** Run a route handler with route segment config caching. */
37
+ export declare function runRouteHandlerWithCache(mod: RouteHandlerModule, request: Request, ctx: RouteCacheContext): Promise<Response>;
38
+ //# sourceMappingURL=cache-route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-route.d.ts","sourceRoot":"","sources":["../../src/server/cache-route.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAqE,KAAK,kBAAkB,EAAE,MAAM,QAAQ,CAAC;AACpH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,eAAO,MAAM,YAAY,mBAAmB,CAAC;AAE7C,MAAM,WAAW,gBAAgB;IAC/B,8CAA8C;IAC9C,MAAM,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,MAAM,GAAG,KAAK,CAAC;CAC5B;AAKD,2EAA2E;AAC3E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,EAAE,KAAK,SAAkB,GAAG,gBAAgB,CAOnG;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,6CAA6C;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0FAA0F;IAC1F,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;CACjD;AAuBD,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAGvD;AAED,uGAAuG;AACvG,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAIlE;AAED,oEAAoE;AACpE,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,QAAQ,GAAG,OAAO,CAK5D;AAED,6DAA6D;AAC7D,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgDnI"}