void 0.26.0 → 0.27.0

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 (365) hide show
  1. package/AGENTS_TEMPLATE.md +1 -3
  2. package/README.md +19 -9
  3. package/dist/{account-cmd-CDry3B5V.mjs → account-cmd-l-FM7Ioq.mjs} +8 -7
  4. package/dist/{application-analysis-DC2yPvzY.mjs → application-analysis-DKy02UY0.mjs} +21 -32
  5. package/dist/{application-routing-C9khgLiS.mjs → application-routing-DQyUh_5S.mjs} +1 -1
  6. package/dist/{auth-D52yG7hl.mjs → auth-Dn2vw-SG.mjs} +9 -9
  7. package/dist/{auth-B60QDbjg.mjs → auth-LMJcNESe.mjs} +1 -1
  8. package/dist/{auth-link-DjeOptYi.mjs → auth-link-vz9Z2kmG.mjs} +5 -5
  9. package/dist/{auth-migrations-9vif1uj8.mjs → auth-migrations-BwHgeEsD.mjs} +8 -18
  10. package/dist/{auth-router-BRxIuqDi.mjs → auth-router-DvsCUVw4.mjs} +6 -19
  11. package/dist/{better-auth-shared-BVkjZ3vM.d.mts → better-auth-shared-CPvWD3nG.d.mts} +0 -4
  12. package/dist/{better-auth-shared-hy6RPh9W.mjs → better-auth-shared-DPpj8zxc.mjs} +94 -16
  13. package/dist/{build-cmd-Ce3C8huo.mjs → build-cmd-D6we0VjO.mjs} +8 -7
  14. package/dist/{cache-CS8Yxr5a.mjs → cache-CZRdzKx1.mjs} +8 -8
  15. package/dist/{cancel-deploy-mZsD88Xa.mjs → cancel-deploy-CQ3NnMvf.mjs} +6 -5
  16. package/dist/{cf-access-YTlqvAsk.mjs → cf-access-BcIBSKqG.mjs} +11 -12
  17. package/dist/{cf-build-output-U8o1Gl6X.mjs → cf-build-output-DjvB_872.mjs} +62 -85
  18. package/dist/cf-build-output-H9a97vME.mjs +2 -0
  19. package/dist/cf-user-agent-lKblH3zU.mjs +17 -0
  20. package/dist/cli/cli.mjs +48 -83
  21. package/dist/cli/cloudflare-operation-process.mjs +78 -78
  22. package/dist/cli/env-schema-probe.mjs +5 -6
  23. package/dist/{client-mC-dFGDD.mjs → client-DlDJuY0s.mjs} +30 -8
  24. package/dist/client-tso2OfcG.mjs +2 -0
  25. package/dist/{cloudflare-auth-Qdc7tw8F.mjs → cloudflare-auth-CuxfF6OA.mjs} +9 -17
  26. package/dist/{cloudflare-cmd-bhwCxAN6.mjs → cloudflare-cmd-lHqNlJGW.mjs} +6 -5
  27. package/dist/{cloudflare-config-Bktvwtpf.mjs → cloudflare-config-BmhBv3HV.mjs} +1 -1
  28. package/dist/{cloudflare-connect-CuhRgk3k.mjs → cloudflare-connect-2G3rL2rP.mjs} +4 -4
  29. package/dist/{cloudflare-operations-DoQrVHAt.mjs → cloudflare-operations-BlYLlowZ.mjs} +1 -1
  30. package/dist/{cloudflare-operations-DYa3coIk.mjs → cloudflare-operations-CwI1bChl.mjs} +41 -70
  31. package/dist/{cloudflare-process-B-wekeR6.mjs → cloudflare-process-2-TfIEzB.mjs} +20 -22
  32. package/dist/{config-CyQ-wVd7.mjs → config-5r-YpMC-.mjs} +1 -1
  33. package/dist/{config-C_XRIPx2.mjs → config-B_ggY-IO.mjs} +3 -3
  34. package/dist/config-BtSFvXZx.mjs +2 -0
  35. package/dist/config-CLYAosnQ.mjs +78 -0
  36. package/dist/{config-BMHb8RCj.d.mts → config-CSa15FvD.d.mts} +1 -1
  37. package/dist/{config-Br_JZD6u.mjs → config-DiowPT80.mjs} +24 -30
  38. package/dist/config-entry.d.mts +1 -1
  39. package/dist/{config-write-B1f88wJA.mjs → config-write-AHGesphx.mjs} +8 -7
  40. package/dist/{connect-H6EvP62X.mjs → connect-BfPBHHm-.mjs} +12 -11
  41. package/dist/{create-project-B2kk9Q0o.mjs → create-project-BdXEFKal.mjs} +7 -7
  42. package/dist/{create-project-Dbb4uiN-.mjs → create-project-qFDC45zg.mjs} +1 -1
  43. package/dist/{db-DpCKZto0.mjs → db-Xs80hcaA.mjs} +101 -133
  44. package/dist/{delete-CxlSvsvW.mjs → delete-d2vuou3j.mjs} +7 -7
  45. package/dist/{deploy-CeEbnv4b.mjs → deploy-Bqe1PYBw.mjs} +2351 -2497
  46. package/dist/deploy-VsWsVQkw.mjs +2 -0
  47. package/dist/{dev-inbox-D64ZKUod.mjs → dev-inbox-CK-UuPob.mjs} +7 -16
  48. package/dist/{discover-BcPPiF1o.mjs → discover-CkCYv9T_.mjs} +1 -2
  49. package/dist/discover-EDUf6JJw.mjs +2 -0
  50. package/dist/{prompts-ZAuJlyCj.mjs → dist-Bx1z6Eva.mjs} +1 -1
  51. package/dist/{dist-AoCzRTJE.mjs → dist-Cegxq8gs.mjs} +8 -8
  52. package/dist/{prompts-6OSVA7DJ.mjs → dist-D3m88sjf.mjs} +10 -53
  53. package/dist/{domain-B_9VgOm6.mjs → domain-BsDUBAvt.mjs} +29 -30
  54. package/dist/{dotenv-VQxupEUv.mjs → dotenv-BfU6eqFt.mjs} +20 -32
  55. package/dist/{drizzle-Beb2Am5S.mjs → drizzle-CF84FOVM.mjs} +16 -13
  56. package/dist/{email-BokHgjKj.mjs → email-_lGAHOhp.mjs} +24 -19
  57. package/dist/{email--tEtMoj_.mjs → email-d_Aux1vM.mjs} +1 -1
  58. package/dist/{entry-CF5wvH4w.mjs → entry-CMAkqBmU.mjs} +6 -6
  59. package/dist/{env-_v349JBd.mjs → env-BxocywBB.mjs} +25 -6
  60. package/dist/{env-BdTc-K2L.mjs → env-C74QepDE.mjs} +10 -10
  61. package/dist/{env-D5liuQYR.mjs → env-DMA3cXZt.mjs} +1 -1
  62. package/dist/{env-raw-Cx8ElDdj.mjs → env-raw-jZpP5n47.mjs} +1 -2
  63. package/dist/{env-types-D5kds_OZ.mjs → env-types-CwXgeMgL.mjs} +1 -1
  64. package/dist/{env-validation-cZBvGWaP.mjs → env-validation-CrVNjsPm.mjs} +1 -1
  65. package/dist/{env-validation-vBSQ8gw5.mjs → env-validation-Dxdx_5wo.mjs} +17 -21
  66. package/dist/{fetch-_SeGZao9.d.mts → fetch-BPCYVi3H.d.mts} +20 -1
  67. package/dist/{fetch-BIZJh7vR.mjs → fetch-sAcwjzLO.mjs} +1 -1
  68. package/dist/{fetch-stream-Nm3hkZbT.mjs → fetch-stream-PGgz4uGz.mjs} +18 -23
  69. package/dist/{fetch-stream-Bjf0hoZb.d.mts → fetch-stream-obvZ7fvO.d.mts} +1 -16
  70. package/dist/{gen-BhDlTpwW.mjs → gen-DtkQhvQg.mjs} +40 -57
  71. package/dist/gen-dA9hW7AV.mjs +2 -0
  72. package/dist/{github-cmd-hhkTzlGS.mjs → github-cmd-DaDdBbSS.mjs} +65 -164
  73. package/dist/{handler-DghKr6dU.mjs → handler-BHAn2fZJ.mjs} +1 -0
  74. package/dist/{handler-BeK3weD4.d.mts → handler-CNAwjRcW.d.mts} +4 -11
  75. package/dist/{head-Do8P4puT.d.mts → head-C8K_iGe6.d.mts} +1 -1
  76. package/dist/{head-D_QRR5Yd.mjs → head-D2VF4ApL.mjs} +29 -51
  77. package/dist/{headers-2rKda9Y6.mjs → headers-DlfR78Nu.mjs} +3 -3
  78. package/dist/{help-Bv44e2tm.mjs → help-0bTe_lID.mjs} +13 -32
  79. package/dist/help-DfQYVfGY.mjs +2 -0
  80. package/dist/{inbound-fRkqcXaC.mjs → inbound-PfQDLXc5.mjs} +23 -24
  81. package/dist/index.d.mts +19 -2
  82. package/dist/index.mjs +619 -532
  83. package/dist/{info-DhtTKh65.mjs → info-PYWwkWyt.mjs} +4 -4
  84. package/dist/{init-BMf4T03q.mjs → init-DaBGmaXC.mjs} +161 -198
  85. package/dist/{link-BqYsSS_I.mjs → link-C6fjafep.mjs} +10 -10
  86. package/dist/{list-_kBToO-l.mjs → list-BTFBlqKl.mjs} +9 -8
  87. package/dist/{live-CB1y5IuC.mjs → live-CgQuTpqD.mjs} +15 -16
  88. package/dist/{live-iAuEH1hd.d.mts → live-Du8jXwOW.d.mts} +4 -2
  89. package/dist/{local-d1-fGxYrVD6.mjs → local-d1-ga5O_idV.mjs} +2 -2
  90. package/dist/{login-DFuo-RWO.mjs → login-GKcNUmtI.mjs} +7 -7
  91. package/dist/login-mx_ydhmp.mjs +2 -0
  92. package/dist/{logs-DYgnh6dH.mjs → logs-BiMSULmc.mjs} +28 -11
  93. package/dist/migrate-BHp07yJE.mjs +2 -0
  94. package/dist/{migrate-CV1on-yJ.mjs → migrate-NLsjBbuM.mjs} +34 -20
  95. package/dist/{mime-D5Nmdzf7.mjs → mime-DxCznlJq.mjs} +45 -95
  96. package/dist/{node-C6Q6e1Es.mjs → node-DJicPvPj.mjs} +5 -5
  97. package/dist/{operator-args-DdY54Bgb.mjs → operator-args-DOBhIaIg.mjs} +10 -1
  98. package/dist/{operator-auth-2dsGlTT5.mjs → operator-auth-BEZ_u0Cz.mjs} +2 -2
  99. package/dist/{operator-client-BFqpp6z0.mjs → operator-client-DbDv4vtE.mjs} +2 -2
  100. package/dist/{operator-cmd-CUGHXrQf.mjs → operator-cmd-BT4hgavL.mjs} +24 -11
  101. package/dist/operator-cmd-CwBB-1yb.mjs +2 -0
  102. package/dist/{output-BvdaehtE.mjs → output-C50ag2r3.mjs} +20 -2
  103. package/dist/pages/client.d.mts +19 -51
  104. package/dist/pages/client.mjs +204 -225
  105. package/dist/pages/head-client.d.mts +1 -1
  106. package/dist/pages/head.d.mts +1 -1
  107. package/dist/pages/head.mjs +1 -1
  108. package/dist/pages/index.d.mts +2 -2
  109. package/dist/pages/index.mjs +6 -12
  110. package/dist/pages/islands-plugin.d.mts +1 -1
  111. package/dist/pages/islands-plugin.mjs +21 -25
  112. package/dist/pages/protocol.d.mts +2 -2
  113. package/dist/pages/protocol.mjs +2 -2
  114. package/dist/{plan-CJGEeTEI.mjs → plan-BhLO2p4w.mjs} +2 -1
  115. package/dist/plan-CH2G51je.mjs +2 -0
  116. package/dist/platform-args-D4E1PjVw.mjs +2 -0
  117. package/dist/{platform-args-DSV2p4nY.mjs → platform-args-DUeXY9Om.mjs} +1 -1
  118. package/dist/{platform-auth-config-Bosx7U1h.mjs → platform-auth-config-CkSx3usH.mjs} +40 -36
  119. package/dist/{platform-auth-protection-DcbL_LW_.mjs → platform-auth-protection-BJimB_p9.mjs} +9 -8
  120. package/dist/{platform-auth-recovery-WfTZ8K6o.mjs → platform-auth-recovery-BU6izFAU.mjs} +8 -7
  121. package/dist/{platform-cmd-DbKtQb_4.mjs → platform-cmd-BbY1dWiM.mjs} +14 -13
  122. package/dist/{platform-cmd-dyFUof0t.mjs → platform-cmd-BbmJiq5O.mjs} +1 -1
  123. package/dist/{platform-discovery-BC0HCKYt.mjs → platform-discovery-DIYz8V63.mjs} +1 -1
  124. package/dist/{platform-domain-Bsq43AJp.mjs → platform-domain-CHVS6cV0.mjs} +6 -6
  125. package/dist/{platform-lifecycle--5gWmDoI.mjs → platform-lifecycle-ByAlpkhV.mjs} +1 -1
  126. package/dist/{platform-lifecycle-Cfi0o6xM.mjs → platform-lifecycle-DzCwqhFq.mjs} +76 -387
  127. package/dist/{platform-management-Bbwf6-Dq.mjs → platform-management-CBOT4BSM.mjs} +1 -1
  128. package/dist/{platform-management-BrF9STZp.mjs → platform-management-CuuVDhyt.mjs} +7 -7
  129. package/dist/{platform-plans-config-DU-8nC2Y.mjs → platform-plans-config-CN-heS4q.mjs} +5 -4
  130. package/dist/{platform-recovery-DQAqAQYu.mjs → platform-recovery-CskSJgLh.mjs} +3 -3
  131. package/dist/{platform-registry-P387v42A.mjs → platform-registry-Cjv2Qf0r.mjs} +5 -1
  132. package/dist/platform-setup-BBxRxmFC.mjs +299 -0
  133. package/dist/{plugin-inference-CXWnn79A.mjs → plugin-inference-BlQbOL0P.mjs} +43 -42
  134. package/dist/prepare-DRUV-g3X.mjs +2 -0
  135. package/dist/{prepare-WoUubFKL.mjs → prepare-Do96654b.mjs} +8 -8
  136. package/dist/{prepare-BMrRWLwP.mjs → prepare-Dq9hTIbo.mjs} +4 -4
  137. package/dist/{prerender-render-D9qbLs2f.mjs → prerender-render-Ct20jftc.mjs} +17 -3
  138. package/dist/prerender-render.mjs +1 -1
  139. package/dist/{project-DQstYTxO.mjs → project-BAm2aB6Q.mjs} +1 -1
  140. package/dist/{project-BiaPQ7ur.mjs → project-DedqCp59.mjs} +1 -1
  141. package/dist/{project-cmd-BbH2LptN.mjs → project-cmd-DaoRrn-8.mjs} +19 -19
  142. package/dist/{project-team-Yiww3-go.mjs → project-team-Q_lCA7Io.mjs} +15 -18
  143. package/dist/{project-token-BrtT2NkY.mjs → project-token-BArgK9o1.mjs} +14 -17
  144. package/dist/{project-tsconfig-B8GeM0RM.mjs → project-tsconfig-CVJhNMxs.mjs} +2 -1
  145. package/dist/{project-zero-trust-nYJ2V2nc.mjs → project-zero-trust-KO9Hu2Pq.mjs} +12 -9
  146. package/dist/{protocol-BX8t2jiw.d.mts → protocol-BPZaNqBo.d.mts} +4 -2
  147. package/dist/{protocol-U7bfjHmA.mjs → protocol-CfaUwNs8.mjs} +46 -49
  148. package/dist/{providers-CJlNS3kT.mjs → providers-BXuhmuub.mjs} +1 -12
  149. package/dist/{provision-VeqAC77A.mjs → provision-BfaLiWbj.mjs} +38 -41
  150. package/dist/{provision-DMTPG8Rh.mjs → provision-Wu9ZBk9L.mjs} +2 -3
  151. package/dist/{requests-TIz_jtSu.mjs → requests-C7Oeoh5u.mjs} +5 -5
  152. package/dist/resolve-project-BIeYs9Cw.mjs +2 -0
  153. package/dist/{resolve-project-BG5ORGID.mjs → resolve-project-CP8rZs_p.mjs} +6 -1
  154. package/dist/{rollback-dBqICPzj.mjs → rollback-DVAtrLAl.mjs} +30 -37
  155. package/dist/{route-types-Clm4WD0B.mjs → route-types-CbtsIeFn.mjs} +1 -1
  156. package/dist/route-url-BgPja1GS.d.mts +5 -0
  157. package/dist/route-url-BjGv_KKY.mjs +28 -0
  158. package/dist/runner-9wjsSZx-.mjs +2 -0
  159. package/dist/{runner--2KF6Kua.mjs → runner-DMBKSrRk.mjs} +2 -2
  160. package/dist/{runner-mysql-DmWchSWJ.mjs → runner-mysql-CEzKtmFb.mjs} +8 -8
  161. package/dist/{runner-mysql-CEG5JozK.mjs → runner-mysql-CkFqZ6CE.mjs} +1 -1
  162. package/dist/{runner-pg-Bh4AgZdj.mjs → runner-pg-BGYRFdRp.mjs} +1 -1
  163. package/dist/runtime/ai.d.mts +1 -1
  164. package/dist/runtime/ai.mjs +34 -95
  165. package/dist/runtime/better-auth-mysql.d.mts +1 -1
  166. package/dist/runtime/better-auth-mysql.mjs +4 -9
  167. package/dist/runtime/better-auth-pg.d.mts +1 -1
  168. package/dist/runtime/better-auth-pg.mjs +5 -10
  169. package/dist/runtime/better-auth.d.mts +1 -1
  170. package/dist/runtime/better-auth.mjs +3 -3
  171. package/dist/runtime/client-react.d.mts +2 -3
  172. package/dist/runtime/client-react.mjs +2 -2
  173. package/dist/runtime/client-solid.d.mts +2 -3
  174. package/dist/runtime/client-solid.mjs +2 -2
  175. package/dist/runtime/client-svelte.d.mts +2 -3
  176. package/dist/runtime/client-svelte.mjs +2 -2
  177. package/dist/runtime/client-vue.d.mts +2 -3
  178. package/dist/runtime/client-vue.mjs +2 -2
  179. package/dist/runtime/client.d.mts +2 -3
  180. package/dist/runtime/client.mjs +2 -2
  181. package/dist/runtime/db.mjs +1 -1
  182. package/dist/runtime/durable.mjs +3 -10
  183. package/dist/runtime/email/testing.mjs +5 -5
  184. package/dist/runtime/email.d.mts +2 -1
  185. package/dist/runtime/email.mjs +11 -27
  186. package/dist/runtime/env-public.mjs +15 -20
  187. package/dist/runtime/env.mjs +1 -1
  188. package/dist/runtime/fetch-stream.d.mts +2 -2
  189. package/dist/runtime/fetch-stream.mjs +1 -1
  190. package/dist/runtime/fetch.d.mts +2 -3
  191. package/dist/runtime/fetch.mjs +1 -1
  192. package/dist/runtime/handler.d.mts +1 -1
  193. package/dist/runtime/handler.mjs +2 -2
  194. package/dist/runtime/isr.mjs +1 -1
  195. package/dist/runtime/kv.mjs +10 -11
  196. package/dist/runtime/live-client.d.mts +1 -1
  197. package/dist/runtime/live-client.mjs +12 -22
  198. package/dist/runtime/live-server.mjs +27 -35
  199. package/dist/runtime/live.d.mts +2 -2
  200. package/dist/runtime/live.mjs +2 -2
  201. package/dist/runtime/migration-handler.mjs +4 -81
  202. package/dist/runtime/queues.mjs +1 -1
  203. package/dist/runtime/remote/binding-handler.d.mts +2 -2
  204. package/dist/runtime/remote/binding-handler.mjs +8 -9
  205. package/dist/runtime/remote/index.mjs +27 -77
  206. package/dist/runtime/route-url.d.mts +2 -4
  207. package/dist/runtime/route-url.mjs +1 -1
  208. package/dist/runtime/routing.d.mts +1 -1
  209. package/dist/runtime/routing.mjs +15 -26
  210. package/dist/runtime/sandbox.mjs +2 -2
  211. package/dist/runtime/sse.mjs +1 -1
  212. package/dist/runtime/storage.mjs +1 -1
  213. package/dist/runtime/validator.d.mts +1 -1
  214. package/dist/runtime/ws-server.d.mts +2 -2
  215. package/dist/runtime/ws-server.mjs +30 -61
  216. package/dist/runtime/ws.d.mts +1 -1
  217. package/dist/runtime/ws.mjs +1 -1
  218. package/dist/{scan-C8dA7iM4.mjs → scan-C3uDzz6J.mjs} +12 -13
  219. package/dist/{secret-AKnNXNP5.mjs → secret-BvtB7IjY.mjs} +15 -15
  220. package/dist/{skills-BPQUGClu.mjs → skills-BgVMvQdy.mjs} +2 -2
  221. package/dist/{sse-CQNaDFFV.mjs → sse-CMvCgjNk.mjs} +1 -1
  222. package/dist/{subcommand-prompt-B6WS9Aoz.mjs → subcommand-prompt-BSlnD1fI.mjs} +2 -2
  223. package/dist/sveltekit.d.mts +0 -2
  224. package/dist/terminal-log-text-D9ACPOuG.mjs +32 -0
  225. package/dist/validate-BJr9LfXy.mjs +2 -0
  226. package/dist/{validate-ymhap6M_.mjs → validate-C9qJArv7.mjs} +9 -28
  227. package/dist/{defer-YsYDUoii.mjs → validation-error-Dg9Recn1.mjs} +11 -11
  228. package/dist/{wrangler-DhUerFkW.mjs → wrangler-D9KTuqnv.mjs} +89 -194
  229. package/dist/{ws-C79j4aED.d.mts → ws-CChrrAU-.d.mts} +1 -1
  230. package/dist/{yarn-pnp-BV4AzNul.mjs → yarn-pnp-CUX_iTPA.mjs} +19 -27
  231. package/{skills/void/docs → docs}/guide/ai.md +5 -3
  232. package/{skills/void/docs → docs}/guide/auth.md +37 -1
  233. package/{skills/void/docs → docs}/guide/database/postgresql.md +2 -2
  234. package/{skills/void/docs → docs}/guide/deployment.md +2 -2
  235. package/{skills/void/docs → docs}/guide/edge/revalidation.md +1 -1
  236. package/{skills/void/docs → docs}/guide/edge/rewrites.md +2 -4
  237. package/{skills/void/docs → docs}/guide/email/receiving.md +2 -2
  238. package/{skills/void/docs → docs}/guide/email/sending.md +0 -2
  239. package/{skills/void/docs → docs}/guide/env-vars.md +4 -0
  240. package/{skills/void/docs → docs}/guide/jobs.md +2 -2
  241. package/{skills/void/docs → docs}/guide/live.md +10 -5
  242. package/{skills/void/docs → docs}/guide/pages-routing/actions-and-forms.md +20 -8
  243. package/{skills/void/docs → docs}/guide/pages-routing/loaders.md +7 -3
  244. package/{skills/void/docs → docs}/guide/pages-routing/markdown.md +15 -23
  245. package/{skills/void/docs → docs}/guide/pages-routing/overview.md +6 -4
  246. package/{skills/void/docs → docs}/guide/platform/administration/access.md +3 -11
  247. package/{skills/void/docs → docs}/guide/platform/administration/operations.md +3 -12
  248. package/{skills/void/docs → docs}/guide/platform/administration/projects.md +1 -1
  249. package/{skills/void/docs → docs}/guide/platform/development/local.md +4 -2
  250. package/{skills/void/docs → docs}/guide/platform/development/runtime.md +1 -1
  251. package/{skills/void/docs → docs}/guide/platform/development/schema-ci.md +1 -1
  252. package/{skills/void/docs → docs}/guide/platform/installation/domains.md +3 -1
  253. package/{skills/void/docs → docs}/guide/platform/installation/first-deployment.md +4 -2
  254. package/{skills/void/docs → docs}/guide/platform/installation/maintenance.md +4 -0
  255. package/{skills/void/docs → docs}/guide/project-collaboration.md +7 -3
  256. package/{skills/void/docs → docs}/guide/queues.md +0 -2
  257. package/{skills/void/docs → docs}/guide/remote-dev.md +5 -5
  258. package/{skills/void/docs → docs}/guide/sandboxes.md +2 -2
  259. package/{skills/void/docs → docs}/guide/sse.md +0 -2
  260. package/{skills/void/docs → docs}/guide/storage.md +7 -2
  261. package/{skills/void/docs → docs}/guide/websockets.md +4 -0
  262. package/docs/integrations/agents.md +37 -0
  263. package/{skills/void/docs → docs}/integrations/frameworks/astro.md +3 -3
  264. package/{skills/void/docs → docs}/integrations/frameworks/nuxt.md +6 -2
  265. package/{skills/void/docs → docs}/integrations/hono.md +15 -7
  266. package/{skills/void/docs → docs}/integrations/nodejs-bun-deno.md +1 -0
  267. package/{skills/void/docs → docs}/reference/api/auth.md +1 -1
  268. package/{skills/void/docs → docs}/reference/api/handlers.md +4 -2
  269. package/{skills/void/docs → docs}/reference/api/pages.md +4 -0
  270. package/{skills/void/docs → docs}/reference/cli/auth.md +1 -6
  271. package/{skills/void/docs → docs}/reference/cli/database.md +3 -4
  272. package/{skills/void/docs → docs}/reference/cli/deploy.md +1 -1
  273. package/{skills/void/docs → docs}/reference/cli/generate.md +1 -1
  274. package/{skills/void/docs → docs}/reference/cli/github.md +3 -12
  275. package/{skills/void/docs → docs}/reference/cli/platform-config.md +1 -1
  276. package/{skills/void/docs → docs}/reference/cli/platform-email.md +2 -3
  277. package/{skills/void/docs → docs}/reference/cli/platform-installation.md +1 -1
  278. package/{skills/void/docs → docs}/reference/cli/platform-operations.md +3 -0
  279. package/{skills/void/docs → docs}/reference/cli/platform-users.md +2 -2
  280. package/{skills/void/docs → docs}/reference/cli/project.md +5 -4
  281. package/{skills/void/docs → docs}/reference/cli/secrets.md +3 -3
  282. package/{skills/void/docs → docs}/reference/cli/setup.md +9 -11
  283. package/{skills/void/docs → docs}/reference/cli.md +1 -1
  284. package/{skills/void/docs → docs}/reference/config.md +13 -13
  285. package/{skills/void/docs → docs}/reference/resource-inference.md +1 -16
  286. package/package.json +34 -30
  287. package/schema.json +1 -1
  288. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +4 -1
  289. package/skills/void/SKILL.md +9 -5
  290. package/dist/cf-build-output-ChY6-XWP.mjs +0 -2
  291. package/dist/client-BxVixJBI.mjs +0 -2
  292. package/dist/config-0acf1oys.mjs +0 -2
  293. package/dist/config-D8MOgiQV.mjs +0 -32
  294. package/dist/deploy-qmiLE1G1.mjs +0 -2
  295. package/dist/discover-AMCBXivQ.mjs +0 -2
  296. package/dist/fetch-error-Sp1R4mZv.d.mts +0 -20
  297. package/dist/gen-qCBwH3fZ.mjs +0 -2
  298. package/dist/help-Dw5f9Xrg.mjs +0 -2
  299. package/dist/login-D7meQg_3.mjs +0 -2
  300. package/dist/migrate-CEu2X5DB.mjs +0 -2
  301. package/dist/operator-cmd-DRPvhpjM.mjs +0 -2
  302. package/dist/plan-COtUvdMA.mjs +0 -2
  303. package/dist/platform-args-Dcy_5b_Y.mjs +0 -2
  304. package/dist/prepare-BBknoZI1.mjs +0 -2
  305. package/dist/resolve-project-DtbidV4y.mjs +0 -2
  306. package/dist/route-url-CG7U-cRN.mjs +0 -15
  307. package/dist/runner-voIltZrY.mjs +0 -2
  308. package/dist/validate-pna7R3Pv.mjs +0 -2
  309. package/skills/void/docs/integrations/agents.md +0 -26
  310. package/dist/{runner-pg-D4OPlil-.mjs → runner-pg-DV8p_zjA.mjs} +4 -4
  311. package/{skills/void/docs → docs}/guide/app-types.md +0 -0
  312. package/{skills/void/docs → docs}/guide/database/d1.md +2 -2
  313. package/{skills/void/docs → docs}/guide/database/mysql.md +0 -0
  314. package/{skills/void/docs → docs}/guide/database.md +8 -8
  315. package/{skills/void/docs → docs}/guide/durable-state.md +0 -0
  316. package/{skills/void/docs → docs}/guide/edge/headers.md +0 -0
  317. package/{skills/void/docs → docs}/guide/edge/prerendering.md +0 -0
  318. package/{skills/void/docs → docs}/guide/edge/redirects.md +0 -0
  319. package/{skills/void/docs → docs}/guide/edge/static-assets.md +0 -0
  320. package/{skills/void/docs → docs}/guide/email/domains.md +0 -0
  321. package/{skills/void/docs → docs}/guide/email.md +0 -0
  322. package/{skills/void/docs → docs}/guide/index.md +0 -0
  323. package/{skills/void/docs → docs}/guide/kv.md +0 -0
  324. package/{skills/void/docs → docs}/guide/pages-routing/head.md +0 -0
  325. package/{skills/void/docs → docs}/guide/pages-routing/islands.md +2 -2
  326. package/{skills/void/docs → docs}/guide/pages-routing/layouts.md +0 -0
  327. package/{skills/void/docs → docs}/guide/pages-routing/view-transitions.md +0 -0
  328. package/{skills/void/docs → docs}/guide/platform/administration/email.md +0 -0
  329. package/{skills/void/docs → docs}/guide/platform/administration/plans.md +0 -0
  330. package/{skills/void/docs → docs}/guide/platform/administration/zero-trust.md +0 -0
  331. package/{skills/void/docs → docs}/guide/platform/installation/ci.md +0 -0
  332. package/{skills/void/docs → docs}/guide/platform/installation/credentials.md +0 -0
  333. package/{skills/void/docs → docs}/guide/platform/installation/prerequisites.md +0 -0
  334. package/{skills/void/docs → docs}/guide/platform/installation/setup.md +0 -0
  335. package/{skills/void/docs → docs}/guide/platform/installation/uninstall.md +0 -0
  336. package/{skills/void/docs → docs}/guide/platform-administration.md +0 -0
  337. package/{skills/void/docs → docs}/guide/platform-development.md +0 -0
  338. package/{skills/void/docs → docs}/guide/quickstart.md +0 -0
  339. package/{skills/void/docs → docs}/guide/self-hosted-platform.md +0 -0
  340. package/{skills/void/docs → docs}/guide/server-routing.md +3 -3
  341. package/{skills/void/docs → docs}/guide/ssg.md +0 -0
  342. package/{skills/void/docs → docs}/guide/ssr.md +0 -0
  343. package/{skills/void/docs → docs}/guide/type-safety.md +0 -0
  344. package/{skills/void/docs → docs}/guide/typed-fetch.md +0 -0
  345. package/{skills/void/docs → docs}/index.md +0 -0
  346. package/{skills/void/docs → docs}/integrations/cloudflare.md +0 -0
  347. package/{skills/void/docs → docs}/integrations/frameworks/analog.md +3 -3
  348. package/{skills/void/docs → docs}/integrations/frameworks/overview.md +0 -0
  349. package/{skills/void/docs → docs}/integrations/frameworks/react-router.md +3 -3
  350. package/{skills/void/docs → docs}/integrations/frameworks/sveltekit.md +1 -1
  351. package/{skills/void/docs → docs}/integrations/frameworks/tanstack-start.md +2 -2
  352. package/{skills/void/docs → docs}/reference/api/client.md +0 -0
  353. package/{skills/void/docs → docs}/reference/api/database.md +2 -2
  354. /package/{skills/void/docs → docs}/reference/api/durable.md +0 -0
  355. /package/{skills/void/docs → docs}/reference/api/env.md +0 -0
  356. /package/{skills/void/docs → docs}/reference/api/plugin.md +0 -0
  357. /package/{skills/void/docs → docs}/reference/api/resources.md +0 -0
  358. /package/{skills/void/docs → docs}/reference/api/rewrites.md +0 -0
  359. /package/{skills/void/docs → docs}/reference/api/types.md +0 -0
  360. /package/{skills/void/docs → docs}/reference/api.md +0 -0
  361. /package/{skills/void/docs → docs}/reference/cli/domains.md +0 -0
  362. /package/{skills/void/docs → docs}/reference/cli/email.md +0 -0
  363. /package/{skills/void/docs → docs}/reference/cli/platform-zero-trust.md +0 -0
  364. /package/{skills/void/docs → docs}/reference/cli/platform.md +0 -0
  365. /package/{skills/void/docs → docs}/reference/structure.md +0 -0
@@ -1,2 +1,2 @@
1
- import { l as writeProjectConfig, t as attachSelectedPlatform } from "./project-DQstYTxO.mjs";
1
+ import { l as writeProjectConfig, t as attachSelectedPlatform } from "./project-BAm2aB6Q.mjs";
2
2
  export { attachSelectedPlatform, writeProjectConfig };
@@ -1,8 +1,8 @@
1
- import { n as readDeploymentPlatform } from "./project-DQstYTxO.mjs";
2
- import { c as getToken, s as getSiteDomain } from "./auth-D52yG7hl.mjs";
3
- import { H as outro, L as log } from "./prompts-6OSVA7DJ.mjs";
4
- import { r as PlatformClient } from "./client-mC-dFGDD.mjs";
5
- import { c as import_picocolors, f as tablePrefix, i as dim, o as formatCount } from "./output-BvdaehtE.mjs";
1
+ import { n as readDeploymentPlatform } from "./project-BAm2aB6Q.mjs";
2
+ import { c as getToken, s as getSiteDomain } from "./auth-Dn2vw-SG.mjs";
3
+ import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
4
+ import { i as dim, l as import_picocolors, m as tablePrefix, s as formatCount } from "./output-C50ag2r3.mjs";
5
+ import { r as PlatformClient } from "./client-DlDJuY0s.mjs";
6
6
  //#region src/cli/projects.ts
7
7
  async function runProjectsCommand(root) {
8
8
  console.log();
@@ -38,77 +38,77 @@ async function runProjectsCommand(root) {
38
38
  async function runProjectCommand(root, args) {
39
39
  const cloudflare = readDeploymentPlatform(root) === "cloudflare";
40
40
  if (args.subcommand === "status") {
41
- const { runListCommand } = await import("./list-_kBToO-l.mjs");
41
+ const { runListCommand } = await import("./list-BTFBlqKl.mjs");
42
42
  return runListCommand(root, args.name || void 0);
43
43
  }
44
44
  if (args.subcommand === "link") {
45
45
  if (cloudflare) throw new Error("project: Direct Cloudflare apps are identified by cloudflare.name in void.config.ts and do not need linking.");
46
- const { runLink } = await import("./link-BqYsSS_I.mjs");
46
+ const { runLink } = await import("./link-C6fjafep.mjs");
47
47
  return runLink(root, args.name || void 0);
48
48
  }
49
49
  if (args.subcommand === "list") {
50
50
  if (cloudflare) {
51
- const { runListCommand } = await import("./list-_kBToO-l.mjs");
51
+ const { runListCommand } = await import("./list-BTFBlqKl.mjs");
52
52
  return runListCommand(root);
53
53
  }
54
54
  return runProjectsCommand(root);
55
55
  }
56
56
  if (args.subcommand === "token") {
57
57
  if (cloudflare) throw new Error("project: CI deploy credentials are available only for Void platform projects.");
58
- const { runProjectTokenCommand } = await import("./project-token-BrtT2NkY.mjs");
58
+ const { runProjectTokenCommand } = await import("./project-token-BArgK9o1.mjs");
59
59
  return runProjectTokenCommand(root, args);
60
60
  }
61
61
  if (args.subcommand === "team") {
62
62
  if (args.action === "") {
63
- const { printHelpPage } = await import("./help-Dw5f9Xrg.mjs");
63
+ const { printHelpPage } = await import("./help-DfQYVfGY.mjs");
64
64
  printHelpPage(["project", "team"]);
65
65
  return;
66
66
  }
67
67
  const accountInvitationAction = args.action === "pending" || args.action === "accept" || args.action === "decline";
68
68
  if (cloudflare && !accountInvitationAction) throw new Error("project: Teams are available only for projects hosted on a Void platform, not direct Cloudflare deployments.");
69
- const { runProjectTeamCommand } = await import("./project-team-Yiww3-go.mjs");
69
+ const { runProjectTeamCommand } = await import("./project-team-Q_lCA7Io.mjs");
70
70
  return runProjectTeamCommand(root, args);
71
71
  }
72
72
  if (args.subcommand === "zero-trust") {
73
73
  if (cloudflare) throw new Error("project: Zero Trust overrides are available only for projects hosted on a Void platform.");
74
74
  if (args.action === "") {
75
- const { printHelpPage } = await import("./help-Dw5f9Xrg.mjs");
75
+ const { printHelpPage } = await import("./help-DfQYVfGY.mjs");
76
76
  printHelpPage(["project", "zero-trust"]);
77
77
  return;
78
78
  }
79
79
  const action = args.action;
80
- const { runProjectZeroTrustCommand } = await import("./project-zero-trust-nYJ2V2nc.mjs");
80
+ const { runProjectZeroTrustCommand } = await import("./project-zero-trust-KO9Hu2Pq.mjs");
81
81
  return runProjectZeroTrustCommand(root, {
82
82
  ...args,
83
83
  action
84
84
  });
85
85
  }
86
86
  if (args.subcommand === "logs") {
87
- const { runLogsCommand } = await import("./logs-DYgnh6dH.mjs");
87
+ const { runLogsCommand } = await import("./logs-BiMSULmc.mjs");
88
88
  return runLogsCommand(root, args.filter, args.range, args.deployment || void 0, args.level || void 0);
89
89
  }
90
90
  if (args.subcommand === "requests") {
91
91
  if (cloudflare) throw new Error("project: Historical request analytics require the Void platform. Use `void project logs` for a live Cloudflare tail.");
92
- const { runRequestsCommand } = await import("./requests-TIz_jtSu.mjs");
92
+ const { runRequestsCommand } = await import("./requests-C7Oeoh5u.mjs");
93
93
  return runRequestsCommand(root, args.range, args.status || void 0);
94
94
  }
95
95
  if (args.subcommand === "rollback") {
96
- const { runRollbackCommand } = await import("./rollback-dBqICPzj.mjs");
96
+ const { runRollbackCommand } = await import("./rollback-DVAtrLAl.mjs");
97
97
  return runRollbackCommand(root, args.deployId || void 0);
98
98
  }
99
99
  if (args.subcommand === "cancel") {
100
100
  if (cloudflare) throw new Error("project: Direct Cloudflare deploys activate only after readiness succeeds, so there is no remote build to cancel.");
101
- const { runCancelDeployCommand } = await import("./cancel-deploy-mZsD88Xa.mjs");
101
+ const { runCancelDeployCommand } = await import("./cancel-deploy-CQ3NnMvf.mjs");
102
102
  return runCancelDeployCommand(root, args.deployId || void 0);
103
103
  }
104
104
  if (args.subcommand === "delete") {
105
105
  if (cloudflare) throw new Error("project: Refusing to delete Cloudflare resources through this command. Direct deployments are additive and existing resources may be shared.");
106
- const { runDeleteCommand } = await import("./delete-CxlSvsvW.mjs");
106
+ const { runDeleteCommand } = await import("./delete-d2vuou3j.mjs");
107
107
  return runDeleteCommand(root, args.name || void 0, { force: args.force });
108
108
  }
109
109
  if (args.subcommand === "purge-cache") {
110
110
  if (cloudflare) throw new Error("project: Direct Cloudflare ISR cache purge is not available yet; redeploy or purge the configured KV namespace explicitly.");
111
- const { runPurgeCacheCommand } = await import("./cache-CS8Yxr5a.mjs");
111
+ const { runPurgeCacheCommand } = await import("./cache-CZRdzKx1.mjs");
112
112
  return runPurgeCacheCommand(root, args.projectSlug || void 0);
113
113
  }
114
114
  }
@@ -1,9 +1,9 @@
1
- import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
2
- import { c as getToken, i as getAccountCredential } from "./auth-D52yG7hl.mjs";
3
- import { H as outro, L as log } from "./prompts-6OSVA7DJ.mjs";
4
- import { c as platformErrorMessage, n as PlatformApiError, r as PlatformClient, s as parsePlatformErrorBody } from "./client-mC-dFGDD.mjs";
5
- import { l as note, o as formatCount } from "./output-BvdaehtE.mjs";
6
- import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
1
+ import { r as readProjectConfig } from "./project-BAm2aB6Q.mjs";
2
+ import { c as getToken, i as getAccountCredential } from "./auth-Dn2vw-SG.mjs";
3
+ import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
4
+ import { d as printSuccess, f as sanitizeTerminalText, s as formatCount, u as note } from "./output-C50ag2r3.mjs";
5
+ import { c as parsePlatformErrorBody, l as platformErrorMessage, n as PlatformApiError, r as PlatformClient } from "./client-DlDJuY0s.mjs";
6
+ import { r as requireProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-CP8rZs_p.mjs";
7
7
  //#region src/cli/project-team.ts
8
8
  function clean(value) {
9
9
  return (value ?? "—").replace(/[\u0000-\u001f\u007f]/g, " ");
@@ -33,11 +33,7 @@ function invitationLines(invitations, pending) {
33
33
  }
34
34
  async function resolveProjectId(root, client, projectSlug) {
35
35
  const requestedSlug = getRequestedProjectSlug({ projectSlug });
36
- if (requestedSlug) {
37
- const project = resolveProjectBySlug(await client.listProjects(), requestedSlug);
38
- if (!project) throw new Error(`project: No project found with slug '${requestedSlug}'.`);
39
- return project.projectId;
40
- }
36
+ if (requestedSlug) return (await requireProjectBySlug(client, requestedSlug)).projectId;
41
37
  const linked = readProjectConfig(root);
42
38
  if (!linked) throw new Error("No linked project. Run `void project link` or pass --project <slug>.");
43
39
  return linked.projectId;
@@ -83,12 +79,13 @@ async function runProjectTeamCommand(root, args) {
83
79
  throw invitationResponseError(error, client.apiUrl);
84
80
  }
85
81
  if (args.action === "accept") log.info("Open the invited application’s directory and run `void project link` if it is not linked yet. If it is linked to another project, use a separate checkout. Accepting an invitation keeps existing project links.");
86
- outro(`Project invitation ${args.action === "accept" ? "accepted" : "declined"}.`);
82
+ printSuccess(`Project invitation ${args.action === "accept" ? "accepted" : "declined"}.`);
87
83
  return;
88
84
  }
89
85
  const projectId = await resolveProjectId(root, client, "projectSlug" in args ? args.projectSlug : "");
90
86
  if (args.action === "list") {
91
- const members = await client.listProjectMembers(projectId);
87
+ const { members, warnings } = await client.listProjectMembers(projectId);
88
+ for (const warning of warnings ?? []) log.warn(sanitizeTerminalText(warning));
92
89
  note(memberLines(members), "Project Team");
93
90
  outro(formatCount(members.length, "member"));
94
91
  return;
@@ -108,26 +105,26 @@ async function runProjectTeamCommand(root, args) {
108
105
  const delivery = result.delivery.status === "sent" ? "" : ` (email delivery: ${result.delivery.status.replace("_", " ")})`;
109
106
  const action = result.refreshed ? "Updated invitation for" : "Invited";
110
107
  if (result.delivery.status !== "sent") note(`Invitation: ${clean(result.invitation.id)}\nShare these steps with the invited user:\n\nvoid connect '${client.apiUrl.replaceAll("'", "'\\''")}'\nvoid project team pending\nvoid project team accept ${clean(result.invitation.id)}`, "Invitation saved; email was not sent");
111
- outro(`${action} ${clean(invitationEmail(result.invitation))} as ${args.role}${delivery}.`);
108
+ printSuccess(`${action} ${clean(invitationEmail(result.invitation))} as ${args.role}${delivery}.`);
112
109
  return;
113
110
  }
114
111
  if (args.action === "role") {
115
112
  await client.updateProjectMemberRole(projectId, args.userId, args.role);
116
- outro(`Changed ${args.userId} to ${args.role}.`);
113
+ printSuccess(`Changed ${args.userId} to ${args.role}.`);
117
114
  return;
118
115
  }
119
116
  if (args.action === "remove") {
120
117
  await client.removeProjectMember(projectId, args.userId);
121
- outro(`Removed ${args.userId} from the project.`);
118
+ printSuccess(`Removed ${args.userId} from the project.`);
122
119
  return;
123
120
  }
124
121
  if (args.action === "revoke") {
125
122
  await client.revokeProjectInvitation(projectId, args.invitationId);
126
- outro(`Revoked invitation ${args.invitationId}.`);
123
+ printSuccess(`Revoked invitation ${args.invitationId}.`);
127
124
  return;
128
125
  }
129
126
  await client.leaveProject(projectId);
130
- outro("Left the project.");
127
+ printSuccess("Left the project.");
131
128
  }
132
129
  //#endregion
133
130
  export { runProjectTeamCommand };
@@ -1,23 +1,19 @@
1
- import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
2
- import { c as getToken } from "./auth-D52yG7hl.mjs";
3
- import { H as outro, L as log } from "./prompts-6OSVA7DJ.mjs";
4
- import { r as PlatformClient } from "./client-mC-dFGDD.mjs";
5
- import { f as tablePrefix, i as dim } from "./output-BvdaehtE.mjs";
6
- import { r as resolveProjectBySlug } from "./resolve-project-BG5ORGID.mjs";
1
+ import { r as readProjectConfig } from "./project-BAm2aB6Q.mjs";
2
+ import { c as getToken } from "./auth-Dn2vw-SG.mjs";
3
+ import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
4
+ import { d as printSuccess, i as dim, m as tablePrefix } from "./output-C50ag2r3.mjs";
5
+ import { r as PlatformClient } from "./client-DlDJuY0s.mjs";
6
+ import { r as requireProjectBySlug } from "./resolve-project-CP8rZs_p.mjs";
7
7
  //#region src/cli/project-token.ts
8
8
  async function resolveTarget(root, args) {
9
9
  const humanToken = getToken(root);
10
10
  if (!humanToken) throw new Error("project: Sign in with a human account before managing CI credentials.");
11
11
  const client = new PlatformClient(humanToken, { root });
12
- if (args.projectSlug) {
13
- const resolved = resolveProjectBySlug(await client.listProjects(), args.projectSlug);
14
- if (!resolved) throw new Error(`project: No project found with slug '${args.projectSlug}'.`);
15
- return {
16
- client,
17
- projectId: resolved.projectId,
18
- slug: args.projectSlug
19
- };
20
- }
12
+ if (args.projectSlug) return {
13
+ client,
14
+ projectId: (await requireProjectBySlug(client, args.projectSlug)).projectId,
15
+ slug: args.projectSlug
16
+ };
21
17
  const linked = readProjectConfig(root);
22
18
  if (!linked) throw new Error("project: No linked project. Pass --project <name>.");
23
19
  return {
@@ -34,9 +30,10 @@ function printIssued(args, result, apiUrl) {
34
30
  }));
35
31
  return;
36
32
  }
37
- log.success(`Credential ${result.id} is valid until ${result.expiresAt}.`);
33
+ log.info(`Credential ${result.id} is valid until ${result.expiresAt}.`);
38
34
  log.warn("Copy this token now. Void will not display it again.");
39
35
  console.log(`\nVOID_TOKEN=${result.token}\nVOID_API_URL=${apiUrl}\n`);
36
+ printSuccess("Project deploy credential created.");
40
37
  }
41
38
  async function runProjectTokenCommand(root, args) {
42
39
  if (!args.json) console.log();
@@ -52,7 +49,7 @@ async function runProjectTokenCommand(root, args) {
52
49
  ok: true,
53
50
  id: args.credentialId
54
51
  }));
55
- else log.success(`Revoked ${args.credentialId}.`);
52
+ else printSuccess(`Revoked ${args.credentialId}.`);
56
53
  } else {
57
54
  const rows = await client.listProjectTokens(projectId);
58
55
  if (args.json) {
@@ -23,7 +23,8 @@ function writeFileIfChanged(path, content) {
23
23
  *
24
24
  * @param hasRouteTypes - When true, include routes.d.ts. When omitted,
25
25
  * auto-detect by checking for a routes/ directory.
26
- * @param hasDrizzle - When true, configure `@schema` paths for the user's
26
+ * @param hasDb - When true, include db.d.ts and redirect `void/db` to it.
27
+ * @param hasSchema - When true, configure `@schema` paths for the user's
27
28
  * Drizzle schema.
28
29
  */
29
30
  function createProjectTsconfig(root, hasRouteTypes, hasDb, hasSchema, options = {}) {
@@ -1,9 +1,9 @@
1
- import { r as readProjectConfig } from "./project-DQstYTxO.mjs";
2
- import { c as getToken } from "./auth-D52yG7hl.mjs";
3
- import { H as outro, L as log } from "./prompts-6OSVA7DJ.mjs";
4
- import { r as PlatformClient } from "./client-mC-dFGDD.mjs";
5
- import { l as note, u as sanitizeTerminalText } from "./output-BvdaehtE.mjs";
6
- import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
1
+ import { r as readProjectConfig } from "./project-BAm2aB6Q.mjs";
2
+ import { c as getToken } from "./auth-Dn2vw-SG.mjs";
3
+ import { H as outro, L as log } from "./dist-D3m88sjf.mjs";
4
+ import { d as printSuccess, f as sanitizeTerminalText, u as note } from "./output-C50ag2r3.mjs";
5
+ import { r as PlatformClient } from "./client-DlDJuY0s.mjs";
6
+ import { r as requireProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-CP8rZs_p.mjs";
7
7
  //#region src/cli/project-zero-trust.ts
8
8
  async function resolveTarget(root, args) {
9
9
  const token = getToken(root);
@@ -11,8 +11,7 @@ async function resolveTarget(root, args) {
11
11
  const client = new PlatformClient(token, { root });
12
12
  const requestedSlug = getRequestedProjectSlug({ projectSlug: args.projectSlug });
13
13
  if (requestedSlug) {
14
- const project = resolveProjectBySlug(await client.listProjects(), requestedSlug);
15
- if (!project) throw new Error(`project: No project found with slug '${requestedSlug}'.`);
14
+ const project = await requireProjectBySlug(client, requestedSlug);
16
15
  return {
17
16
  client,
18
17
  projectId: project.projectId,
@@ -56,7 +55,11 @@ async function runProjectZeroTrustCommand(root, args) {
56
55
  outro(`${slug} Zero Trust update is still in progress. Run \`void project zero-trust reconcile\` to continue, or wait for scheduled maintenance.`);
57
56
  return;
58
57
  }
59
- outro(args.action === "protect" ? `${slug} is protected by Zero Trust.` : args.action === "public" ? `${slug} is public.` : `${slug} Zero Trust reconciled (${result.project.state}).`);
58
+ if (result.project.last_error || result.project.state === "error") {
59
+ outro(`${slug} Zero Trust needs attention (${result.project.state}).`);
60
+ return;
61
+ }
62
+ printSuccess(args.action === "protect" ? `${slug} is protected by Zero Trust.` : args.action === "public" ? `${slug} is public.` : `${slug} Zero Trust reconciled (${result.project.state}).`);
60
63
  }
61
64
  //#endregion
62
65
  export { runProjectZeroTrustCommand };
@@ -1,5 +1,5 @@
1
- import { n as HeadDescriptor, t as HeadConfig } from "./head-Do8P4puT.mjs";
2
- import { n as CloudBindings, r as CloudContext } from "./handler-BeK3weD4.mjs";
1
+ import { n as HeadDescriptor, t as HeadConfig } from "./head-C8K_iGe6.mjs";
2
+ import { n as CloudBindings, r as CloudContext } from "./handler-CNAwjRcW.mjs";
3
3
  import { a as PageRenderMode, t as DevCssAsset } from "./types-BAp5AEBU.mjs";
4
4
  //#region src/pages/protocol.d.ts
5
5
  /** Escape characters that are unsafe inside inline <script> tags to prevent XSS. */
@@ -20,6 +20,8 @@ type PageHandler = ((c: CloudContext) => unknown | Promise<unknown>) | undefined
20
20
  type PageHeadHandler = ((c: CloudContext, props: Record<string, unknown>) => HeadDescriptor | undefined) | undefined;
21
21
  type PageRenderOptions = {
22
22
  renderMode?: PageRenderMode;
23
+ /** Dev server build: rejected deferred props keep their raw error message. */
24
+ dev?: boolean;
23
25
  };
24
26
  type AssetTags = {
25
27
  css: string;
@@ -1,6 +1,6 @@
1
1
  import { n as isConvertedResponse } from "./response-Tn7rU0MV.mjs";
2
- import { i as ValidationError, r as separateDeferred, t as DEFERRED } from "./defer-YsYDUoii.mjs";
3
- import { i as resolveHead, n as renderHeadToString, r as renderHtmlAttrs, t as renderBodyAttrs } from "./head-D_QRR5Yd.mjs";
2
+ import { i as separateDeferred, n as DEFERRED, t as ValidationError } from "./validation-error-Dg9Recn1.mjs";
3
+ import { i as resolveHead, n as renderHeadToString, r as renderHtmlAttrs, t as renderBodyAttrs } from "./head-D2VF4ApL.mjs";
4
4
  import { t as serializePageData } from "./serialize-BPvnNQuA.mjs";
5
5
  //#region src/pages/protocol.ts
6
6
  const POWERED_BY = { "X-Powered-By": "Void" };
@@ -44,30 +44,17 @@ function adjustCspValue(value, nonce) {
44
44
  sources
45
45
  };
46
46
  });
47
- const styleElem = parsed.find((directive) => directive.name === "style-src-elem");
48
- if (styleElem) {
49
- if (!styleElem.sources.some((source) => hasCompatibleStyleSource(source, nonceSource))) styleElem.sources.push(nonceSource);
50
- return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
51
- }
52
- const style = parsed.find((directive) => directive.name === "style-src");
47
+ const style = parsed.find((directive) => directive.name === "style-src-elem") ?? parsed.find((directive) => directive.name === "style-src");
53
48
  if (style) {
54
49
  if (!style.sources.some((source) => hasCompatibleStyleSource(source, nonceSource))) style.sources.push(nonceSource);
55
- return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
56
- }
57
- const defaultSrc = parsed.find((directive) => directive.name === "default-src");
58
- if (defaultSrc) {
50
+ } else {
51
+ const defaultSrc = parsed.find((directive) => directive.name === "default-src");
59
52
  parsed.push({
60
53
  name: "style-src",
61
54
  originalName: "style-src",
62
- sources: [...defaultSrc.sources, nonceSource]
55
+ sources: [...defaultSrc?.sources ?? [], nonceSource]
63
56
  });
64
- return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
65
57
  }
66
- parsed.push({
67
- name: "style-src",
68
- originalName: "style-src",
69
- sources: [nonceSource]
70
- });
71
58
  return parsed.map((directive) => [directive.originalName, ...directive.sources].join(" ")).join("; ");
72
59
  }
73
60
  function adjustDevCssCsp(headers, nonce) {
@@ -116,6 +103,13 @@ function renderClientOnlyPage(pageObj, assetTags, renderFn) {
116
103
  </body>
117
104
  </html>`;
118
105
  }
106
+ async function renderPageHtml(c, pageObj, componentId, renderMode, renderFn, getAssetTags) {
107
+ const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
108
+ return {
109
+ html: renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags),
110
+ assetTags
111
+ };
112
+ }
119
113
  function pageJsonResponse(c, pageObj) {
120
114
  return Response.json(pageObj, { headers: pageResponseHeaders(c, {
121
115
  "X-VoidPages": "true",
@@ -172,12 +166,24 @@ function renderedResponse(c, result, contentType, assetTags) {
172
166
  ...POWERED_BY
173
167
  }), assetTags?.devCssNonce) });
174
168
  }
169
+ /**
170
+ * Message sent to the browser for a rejected deferred prop. HTTPException
171
+ * messages are deliberate and pass through, as in the page error handler.
172
+ * Anything else is logged and, outside dev, replaced with a generic message so
173
+ * internal details (SQL, hostnames, URLs) do not reach the page.
174
+ */
175
+ function deferredErrorMessage(err, dev) {
176
+ const message = err instanceof Error ? err.message : String(err);
177
+ if (err && typeof err === "object" && "getResponse" in err && typeof err.getResponse === "function") return message;
178
+ console.error(err);
179
+ return dev ? message : "Internal Server Error";
180
+ }
175
181
  /** Build a streaming response that sends an initial chunk then streams deferred results. */
176
- function streamDeferredResponse(initialChunk, deferredMap, c, contentType, formatResolved, formatRejected, assetTags) {
182
+ function streamDeferredResponse(initialChunk, deferredMap, c, contentType, dev, formatResolved, formatRejected, assetTags) {
177
183
  const encoder = new TextEncoder();
178
184
  const { readable, writable } = new TransformStream();
179
185
  const writer = writable.getWriter();
180
- const pendingChunks = Object.entries(deferredMap).map(([group, { resolver }]) => resolver(c).then((data) => formatResolved(group, data)).catch((err) => formatRejected(group, err instanceof Error ? err.message : String(err))));
186
+ const pendingChunks = Object.entries(deferredMap).map(([group, { resolver }]) => resolver(c).then((data) => formatResolved(group, data)).catch((err) => formatRejected(group, deferredErrorMessage(err, dev))));
181
187
  (async () => {
182
188
  await writeRenderResult(writer, encoder, initialChunk);
183
189
  await Promise.all(pendingChunks.map(async (chunk) => writer.write(encoder.encode(await chunk))));
@@ -185,10 +191,7 @@ function streamDeferredResponse(initialChunk, deferredMap, c, contentType, forma
185
191
  })().catch((error) => {
186
192
  writer.abort(error).catch(() => {});
187
193
  });
188
- return new Response(readable, { headers: adjustDevCssCsp(pageResponseHeaders(c, {
189
- "content-type": contentType,
190
- ...POWERED_BY
191
- }), assetTags?.devCssNonce) });
194
+ return renderedResponse(c, readable, contentType, assetTags);
192
195
  }
193
196
  /** Handle GET page request — run handler, return page object or SSR HTML */
194
197
  async function handlePageGet(handler, headFn, c, componentId, renderFn, getAssetTags, configHead, options) {
@@ -209,7 +212,7 @@ async function handlePageGet(handler, headFn, c, componentId, renderFn, getAsset
209
212
  const { immediateProps, deferredMap } = separateDeferred(props);
210
213
  const hasDeferred = Object.keys(deferredMap).length > 0;
211
214
  const deferredKeys = {};
212
- if (hasDeferred) for (const [group, { keys }] of Object.entries(deferredMap)) for (const key of keys) deferredKeys[key] = group;
215
+ for (const [group, { keys }] of Object.entries(deferredMap)) for (const key of keys) deferredKeys[key] = group;
213
216
  const pageObj = {
214
217
  component: componentId,
215
218
  props: immediateProps,
@@ -249,7 +252,7 @@ async function handlePageGet(handler, headFn, c, componentId, renderFn, getAsset
249
252
  const headers = new Headers(c.res.headers);
250
253
  appendVary(headers, "X-VoidPages");
251
254
  c.header("Vary", headers.get("Vary"));
252
- return streamDeferredResponse(JSON.stringify(pageObj) + "\n", deferredMap, c, "application/x-ndjson", (group, data) => JSON.stringify({
255
+ return streamDeferredResponse(JSON.stringify(pageObj) + "\n", deferredMap, c, "application/x-ndjson", options?.dev === true, (group, data) => JSON.stringify({
253
256
  __deferred: group,
254
257
  data
255
258
  }) + "\n", (group, error) => JSON.stringify({
@@ -257,10 +260,9 @@ async function handlePageGet(handler, headFn, c, componentId, renderFn, getAsset
257
260
  error
258
261
  }) + "\n");
259
262
  }
260
- const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
261
- const html = renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags);
263
+ const { html, assetTags } = await renderPageHtml(c, pageObj, componentId, renderMode, renderFn, getAssetTags);
262
264
  if (!hasDeferred) return renderedResponse(c, html, "text/html; charset=utf-8", assetTags);
263
- return streamDeferredResponse(html, deferredMap, c, "text/html; charset=utf-8", (group, data) => `\n<script>window.__resolveDeferred?window.__resolveDeferred(${safeJsonStringify(group)},${safeJsonStringify(data)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},${safeJsonStringify(data)}])<\/script>`, (group, error) => `\n<script>window.__rejectDeferred?window.__rejectDeferred(${safeJsonStringify(group)},${safeJsonStringify(error)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},0,${safeJsonStringify(error)}])<\/script>`, assetTags);
265
+ return streamDeferredResponse(html, deferredMap, c, "text/html; charset=utf-8", options?.dev === true, (group, data) => `\n<script>window.__resolveDeferred?window.__resolveDeferred(${safeJsonStringify(group)},${safeJsonStringify(data)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},${safeJsonStringify(data)}])<\/script>`, (group, error) => `\n<script>window.__rejectDeferred?window.__rejectDeferred(${safeJsonStringify(group)},${safeJsonStringify(error)}):(window.__deferredQueue??=[]).push([${safeJsonStringify(group)},0,${safeJsonStringify(error)}])<\/script>`, assetTags);
264
266
  }
265
267
  function isSameOriginAction(request) {
266
268
  const origin = new URL(request.url).origin;
@@ -295,37 +297,32 @@ async function handlePageMutation(mutationHandler, getHandler, headFn, c, compon
295
297
  ...head && { head }
296
298
  };
297
299
  }
300
+ /** Re-run the GET loader and respond with the page, optionally carrying validation errors. */
301
+ async function respondWithPage(errors) {
302
+ const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), errors);
303
+ if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
304
+ const { html, assetTags } = await renderPageHtml(c, pageObj, componentId, renderMode, renderFn, getAssetTags);
305
+ return renderedResponse(c, html, "text/html; charset=utf-8", assetTags);
306
+ }
307
+ function respondWithErrors(errors) {
308
+ if (renderMode === "island") return Promise.resolve(Response.json({ errors }, { status: 422 }));
309
+ return respondWithPage(errors);
310
+ }
298
311
  let result;
299
312
  try {
300
313
  result = mutationHandler ? await mutationHandler(c) : void 0;
301
314
  } catch (e) {
302
- if (e instanceof ValidationError) {
303
- if (renderMode === "island") return Response.json({ errors: e.errors }, { status: 422 });
304
- const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), e.errors);
305
- if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
306
- const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
307
- return renderedResponse(c, renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags), "text/html; charset=utf-8", assetTags);
308
- }
315
+ if (e instanceof ValidationError) return respondWithErrors(e.errors);
309
316
  throw e;
310
317
  }
311
318
  if (result instanceof Response) {
312
319
  const status = result.status;
313
320
  if (status >= 300 && status < 400) return result;
314
- if (status === 400) {
315
- const errors = flattenValidationErrors(await result.json());
316
- if (renderMode === "island") return Response.json({ errors }, { status: 422 });
317
- const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), errors);
318
- if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
319
- const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
320
- return renderedResponse(c, renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags), "text/html; charset=utf-8", assetTags);
321
- }
321
+ if (status === 400) return respondWithErrors(flattenValidationErrors(await result.json()));
322
322
  if (status !== 204) return result;
323
323
  }
324
324
  if (renderMode === "island") return Response.json({ success: true });
325
- const pageObj = buildMutationPageObj(stripDeferred(getHandler ? await extractProps(await getHandler(c)) : {}), null);
326
- if (isPagesRequest(c)) return pageJsonResponse(c, pageObj);
327
- const assetTags = prepareAssetTags(await getAssetTags(c.req.raw, c.env, componentId));
328
- return renderedResponse(c, renderMode === "client" ? renderClientOnlyPage(pageObj, assetTags, renderFn) : await renderWithAssetTags(renderFn, pageObj, assetTags), "text/html; charset=utf-8", assetTags);
325
+ return respondWithPage(null);
329
326
  }
330
327
  //#endregion
331
328
  export { safeJsonStringify as i, handlePageGet as n, handlePageMutation as r, flattenValidationErrors as t };
@@ -47,21 +47,10 @@ function isVoidAuthProvider(value) {
47
47
  }
48
48
  function getVoidAuthProviderEnvNames(provider) {
49
49
  const normalized = provider.toUpperCase().replaceAll("-", "_");
50
- const envNames = {
50
+ return {
51
51
  clientId: `AUTH_${normalized}_CLIENT_ID`,
52
52
  clientSecret: `AUTH_${normalized}_CLIENT_SECRET`
53
53
  };
54
- if (provider === "github") return {
55
- ...envNames,
56
- legacyClientId: "GITHUB_OAUTH_ID",
57
- legacyClientSecret: "GITHUB_OAUTH_SECRET"
58
- };
59
- if (provider === "google") return {
60
- ...envNames,
61
- legacyClientId: "GOOGLE_OAUTH_ID",
62
- legacyClientSecret: "GOOGLE_OAUTH_SECRET"
63
- };
64
- return envNames;
65
54
  }
66
55
  //#endregion
67
56
  export { isVoidSocialAuthProvider as a, isVoidAuthProvider as i, VOID_EMAIL_AUTH_PROVIDER as n, getVoidAuthProviderEnvNames as r, VOID_AUTH_PROVIDERS as t };