void 0.21.9 → 0.23.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 (293) hide show
  1. package/README.md +5 -1
  2. package/dist/{account-cmd-DZZGK80W.mjs → account-cmd-C84Ee8cO.mjs} +5 -5
  3. package/dist/{scan-ClYmX3sa.mjs → application-analysis-BVsVqc11.mjs} +135 -18
  4. package/dist/application-routing-B7QEjqSR.mjs +27 -0
  5. package/dist/{auth-CZuiVsFh.mjs → auth-CCjt0hcq.mjs} +1 -1
  6. package/dist/{auth-DLNN0D3Z.mjs → auth-CSkdO2Bb.mjs} +4 -47
  7. package/dist/{auth-link-B_CeugBw.mjs → auth-link-CioEg6uY.mjs} +5 -5
  8. package/dist/{auth-router-BgEFRuvZ.mjs → auth-router-BsR981d4.mjs} +5 -5
  9. package/dist/{better-auth-shared-rsBGBvWJ.mjs → better-auth-shared-hy6RPh9W.mjs} +13 -2
  10. package/dist/{build-cmd-Dpt0jd-x.mjs → build-cmd-LzvNJORH.mjs} +19 -7
  11. package/dist/{cache-7_UeZdTk.mjs → cache-C4MvnrMH.mjs} +4 -4
  12. package/dist/{cancel-deploy-D23R1RXT.mjs → cancel-deploy-abUxpP2n.mjs} +4 -4
  13. package/dist/{cf-build-output-CGT03qCD.mjs → cf-build-output-BPqOT964.mjs} +141 -63
  14. package/dist/cf-build-output-_0HNWysu.mjs +2 -0
  15. package/dist/cli/cli.mjs +114 -460
  16. package/dist/cli/cloudflare-operation-process.mjs +1103 -0
  17. package/dist/cli/env-schema-probe.d.mts +2 -1
  18. package/dist/cli/env-schema-probe.mjs +3 -3
  19. package/dist/client-Cu7jWiF1.mjs +2 -0
  20. package/dist/{client-QTl6ko_D.mjs → client-RV8NVeB8.mjs} +165 -21
  21. package/dist/{cloudflare-auth-C4_GPZr0.mjs → cloudflare-auth-Qdc7tw8F.mjs} +41 -43
  22. package/dist/{cloudflare-cmd-bSmZ1d5L.mjs → cloudflare-cmd-BcrVyTmJ.mjs} +9 -10
  23. package/dist/cloudflare-config-Bktvwtpf.mjs +182 -0
  24. package/dist/{cloudflare-connect-jAwacxxP.mjs → cloudflare-connect-B8uPZ4nx.mjs} +4 -4
  25. package/dist/{cloudflare-operations-BipGMJ5O.mjs → cloudflare-operations-AiWashgg.mjs} +1 -1
  26. package/dist/{cloudflare-operations-sMZXpk_S.mjs → cloudflare-operations-fxHb-byx.mjs} +118 -203
  27. package/dist/{preset-UHj9ARyP.mjs → cloudflare-process-B-wekeR6.mjs} +93 -6
  28. package/dist/{config-CF69HgXc.d.mts → config-BMHb8RCj.d.mts} +2 -2
  29. package/dist/{config-CafTW6Cz.mjs → config-Br_JZD6u.mjs} +2 -7
  30. package/dist/config-C_XRIPx2.mjs +89 -0
  31. package/dist/{config-s7Xj7tPb.mjs → config-CyQ-wVd7.mjs} +1 -1
  32. package/dist/config-entry.d.mts +1 -1
  33. package/dist/{config-write-BSduPMY8.mjs → config-write-B1f88wJA.mjs} +1 -1
  34. package/dist/{connect-BsUSRzln.mjs → connect-Bd4kJd9U.mjs} +6 -6
  35. package/dist/{create-project-BniEV0OW.mjs → create-project-Boczwj5r.mjs} +1 -1
  36. package/dist/{create-project-DBfFSZKY.mjs → create-project-bMf6ffLZ.mjs} +9 -5
  37. package/dist/{db-hRrvZaq_.mjs → db-8uG64XLl.mjs} +26 -26
  38. package/dist/{delete-D6dZ9B6B.mjs → delete-NvbiyeJf.mjs} +4 -4
  39. package/dist/{deploy-WaAQez1O.mjs → deploy-DzAIwqNU.mjs} +944 -607
  40. package/dist/{deploy-DDz7c8LK.mjs → deploy-bjXdFCtn.mjs} +1 -1
  41. package/dist/{dist-BR1quN_w.mjs → dist-AoCzRTJE.mjs} +226 -60
  42. package/dist/{dist-C5fND3R0.mjs → dist-BuDuKZJv.mjs} +1 -1
  43. package/dist/{dist-Dn6nn2IU.mjs → dist-CTBk70IR.mjs} +42 -42
  44. package/dist/{domain-Dmhvb2oU.mjs → domain-y5Tvydvo.mjs} +5 -5
  45. package/dist/{email-DFi-s2t4.mjs → email-B3umsW75.mjs} +15 -30
  46. package/dist/{env-Csi-tMbT.mjs → env-BS6qYHDb.mjs} +6 -6
  47. package/dist/{env-public-D_6u46fX.d.mts → env-public-BX_r8HR6.d.mts} +2 -1
  48. package/dist/{env-validation-BB4GkLxn.mjs → env-validation-BPn7vk-V.mjs} +18 -71
  49. package/dist/{env-validation-BXge7uyK.mjs → env-validation-DbTg7-ar.mjs} +1 -1
  50. package/dist/{fetch-CXDChK7B.mjs → fetch-BIZJh7vR.mjs} +2 -2
  51. package/dist/{fetch-stream-AOByI7Ki.mjs → fetch-stream-IvCYKyQL.mjs} +24 -4
  52. package/dist/{gen-Dz3X1Qab.mjs → gen-B580--vC.mjs} +5 -5
  53. package/dist/gen-BVaUUumi.mjs +2 -0
  54. package/dist/{github-cmd-BED3_9JD.mjs → github-cmd-v45BdfKX.mjs} +6 -8
  55. package/dist/{handler-BXJTXd02.d.mts → handler-CZ4nAylQ.d.mts} +2 -1
  56. package/dist/{headers-BOg_velo.mjs → headers-DWi2IXWx.mjs} +1 -1
  57. package/dist/help-DofyZuY7.mjs +2 -0
  58. package/dist/{help-DC7gdz7L.mjs → help-daGKjXGk.mjs} +268 -666
  59. package/dist/index.d.mts +1 -1
  60. package/dist/index.mjs +305 -1490
  61. package/dist/info-B97bTX9N.mjs +113 -0
  62. package/dist/{init-WO0JlPx8.mjs → init-Bvy7zrBo.mjs} +51 -20
  63. package/dist/limits-Bq5LG8Id.d.mts +27 -0
  64. package/dist/limits-Cjuk2VPm.mjs +68 -0
  65. package/dist/{link-CsHOinF7.mjs → link-CDqqCjFl.mjs} +5 -5
  66. package/dist/{list-CDb-4bZ1.mjs → list-CZj0dzKY.mjs} +5 -5
  67. package/dist/{live-CKiJilLr.d.mts → live-Chw1eIMv.d.mts} +1 -1
  68. package/dist/{local-d1-CC8sKFGu.mjs → local-d1-2CMnpuW_.mjs} +2 -2
  69. package/dist/login-DYt_An22.mjs +2 -0
  70. package/dist/{login-DvqXsfGs.mjs → login-UZKFM_u7.mjs} +5 -5
  71. package/dist/{logs-BdfiOezj.mjs → logs-CUZ6t9t3.mjs} +5 -5
  72. package/dist/migrate-8_2u55MD.mjs +2 -0
  73. package/dist/{migrate-B8KuoYsO.mjs → migrate-DHul7PRV.mjs} +5 -4
  74. package/dist/{node-BM43oz4G.mjs → node-BkyRWRx8.mjs} +2 -2
  75. package/dist/operator-args-CLgKGlwU.mjs +690 -0
  76. package/dist/{operator-cmd-03819ATr.mjs → operator-cmd-DBA6dl0m.mjs} +69 -23
  77. package/dist/output-Dm_A4Tbv.mjs +81 -0
  78. package/dist/pages/client.d.mts +34 -2
  79. package/dist/pages/client.mjs +59 -3
  80. package/dist/pages/index.d.mts +1 -1
  81. package/dist/pages/index.mjs +3 -3
  82. package/dist/pages/islands-plugin.d.mts +16 -6
  83. package/dist/pages/islands-plugin.mjs +2 -2
  84. package/dist/pages/protocol.d.mts +2 -2
  85. package/dist/pages/protocol.mjs +2 -308
  86. package/dist/{parse-filename-DioPHiR9.mjs → parse-filename-CUbj-1MP.mjs} +35 -1
  87. package/dist/{output-CCH48AMM.mjs → picocolors-BTps1_gs.mjs} +2 -76
  88. package/dist/plan-D1Q5rf-r.mjs +2 -0
  89. package/dist/plan-NPpwZ_kc.mjs +58 -0
  90. package/dist/platform-args-BJdRtlLq.mjs +506 -0
  91. package/dist/platform-args-D3RXyR6h.mjs +2 -0
  92. package/dist/{platform-auth-config-z92h63q5.mjs → platform-auth-config-B56E9YP1.mjs} +4 -4
  93. package/dist/{platform-auth-protection-DeE3yr2R.mjs → platform-auth-protection-BDWO_aER.mjs} +3 -3
  94. package/dist/{platform-auth-recovery-o_340Ixx.mjs → platform-auth-recovery-1gg4CSRe.mjs} +4 -4
  95. package/dist/{platform-cmd-C4ZV3Vpy.mjs → platform-cmd-Bt-1w6pY.mjs} +1 -1
  96. package/dist/{platform-cmd-DNl8WosH.mjs → platform-cmd-DMcQStSc.mjs} +26 -5
  97. package/dist/{platform-domain-CU1JtJkW.mjs → platform-domain-BNkcz0OB.mjs} +36 -9
  98. package/dist/{platform-lifecycle-Bc047IeT.mjs → platform-lifecycle-9OyBALhH.mjs} +850 -276
  99. package/dist/{platform-lifecycle-Bs2qx1E3.mjs → platform-lifecycle-BE6C_jxh.mjs} +1 -1
  100. package/dist/{platform-management-CVpGI9Y5.mjs → platform-management-CjwLVQwN.mjs} +59 -11
  101. package/dist/{platform-management-C8tt6D8h.mjs → platform-management-CnyTdcWX.mjs} +1 -1
  102. package/dist/platform-plans-config-BNGKGr4P.mjs +359 -0
  103. package/dist/{platform-recovery-dvUaptLr.mjs → platform-recovery-D6KSpuFm.mjs} +2 -2
  104. package/dist/{plugin-inference-BMfKRSqE.mjs → plugin-inference-CXWnn79A.mjs} +174 -64
  105. package/dist/{prepare-DyZ-Yok5.mjs → prepare-B5Mkic5u.mjs} +3 -3
  106. package/dist/{prepare-C3kt3Rst.mjs → prepare-DOsL0CC9.mjs} +4 -20
  107. package/dist/prepare-cgvDMtSb.mjs +2 -0
  108. package/dist/{project-cmd-B44I8J_W.mjs → project-cmd-CNzrqvBv.mjs} +30 -16
  109. package/dist/{project-team-BkbYIsXN.mjs → project-team-DQOWPfQT.mjs} +4 -4
  110. package/dist/{project-token-C8xEEQnB.mjs → project-token-CTDYU0Cc.mjs} +4 -4
  111. package/dist/project-zero-trust-BNAkW-_0.mjs +63 -0
  112. package/dist/{protocol-ZH3jP4a7.d.mts → protocol-CjF_iI9X.d.mts} +2 -2
  113. package/dist/protocol-U7bfjHmA.mjs +331 -0
  114. package/dist/{provision-DNtrtaVD.mjs → provision-C4ORE7G7.mjs} +1 -1
  115. package/dist/{provision-BhreDAOS.mjs → provision-CJFgTZY8.mjs} +111 -215
  116. package/dist/{requests-DFyhBMaf.mjs → requests-MhxYnau8.mjs} +4 -4
  117. package/dist/resource-name-C7LVpcRm.mjs +11 -0
  118. package/dist/{rollback-DHHxXZiS.mjs → rollback-CJ6iSDoU.mjs} +5 -5
  119. package/dist/route-url-CG7U-cRN.mjs +15 -0
  120. package/dist/{runner-B8wXwWlo.mjs → runner-CXA9Fh8h.mjs} +1 -1
  121. package/dist/{runner-p-dMs2UN.mjs → runner-Ol0TNjk6.mjs} +2 -2
  122. package/dist/runtime/ai.d.mts +12 -8
  123. package/dist/runtime/ai.mjs +84 -17
  124. package/dist/runtime/better-auth-mysql.mjs +1 -1
  125. package/dist/runtime/better-auth-pg.mjs +1 -1
  126. package/dist/runtime/better-auth.mjs +1 -1
  127. package/dist/runtime/client-react.mjs +2 -2
  128. package/dist/runtime/client-solid.mjs +2 -2
  129. package/dist/runtime/client-svelte.mjs +2 -2
  130. package/dist/runtime/client-vue.mjs +2 -2
  131. package/dist/runtime/client.mjs +2 -2
  132. package/dist/runtime/durable.d.mts +3 -1
  133. package/dist/runtime/durable.mjs +4 -1
  134. package/dist/runtime/email/testing.mjs +1 -1
  135. package/dist/runtime/env-public.d.mts +1 -1
  136. package/dist/runtime/fetch-stream.mjs +1 -1
  137. package/dist/runtime/fetch.mjs +1 -1
  138. package/dist/runtime/handler.d.mts +1 -1
  139. package/dist/runtime/kv.mjs +0 -1
  140. package/dist/runtime/limits.d.mts +2 -0
  141. package/dist/runtime/limits.mjs +2 -0
  142. package/dist/runtime/live-client.d.mts +1 -1
  143. package/dist/runtime/live-server.mjs +25 -16
  144. package/dist/runtime/live.d.mts +1 -1
  145. package/dist/runtime/migration-handler.mjs +62 -42
  146. package/dist/runtime/route-url.d.mts +4 -0
  147. package/dist/runtime/route-url.mjs +2 -0
  148. package/dist/runtime/routing.d.mts +180 -0
  149. package/dist/runtime/routing.mjs +1082 -0
  150. package/dist/runtime/sandbox-container.d.mts +3 -0
  151. package/dist/runtime/sandbox-container.mjs +2 -0
  152. package/dist/runtime/sandbox.d.mts +4 -32
  153. package/dist/runtime/sandbox.mjs +151 -75
  154. package/dist/runtime/sse.mjs +1 -1
  155. package/dist/runtime/validator.d.mts +1 -1
  156. package/dist/runtime/ws-server.d.mts +4 -2
  157. package/dist/runtime/ws-server.mjs +27 -2
  158. package/dist/runtime/ws.d.mts +2 -2
  159. package/dist/runtime/ws.mjs +8 -6
  160. package/dist/sandbox-XZAqzFlG.d.mts +52 -0
  161. package/dist/sandbox-container-Bo0eiFKz.d.mts +73 -0
  162. package/dist/sandbox-container-C6ItmVuN.mjs +281 -0
  163. package/dist/{scan-4tfN-PSn.mjs → scan-C7okrLyM.mjs} +4 -35
  164. package/dist/{secret-DN9sSNiV.mjs → secret-Dli5fP0B.mjs} +6 -6
  165. package/dist/{skills-O6FUaizK.mjs → skills-D1II1Juz.mjs} +1 -1
  166. package/dist/{sse-BaC1jXko.mjs → sse-CQNaDFFV.mjs} +6 -3
  167. package/dist/{subcommand-prompt-BuGYkAkC.mjs → subcommand-prompt-CY1C4fvl.mjs} +2 -2
  168. package/dist/validate-Dq_L3s0S.mjs +2 -0
  169. package/dist/{validate-CIUwFpjB.mjs → validate-ctOrgiS3.mjs} +2 -1
  170. package/dist/{wrangler-BymcxrRa.mjs → wrangler-7K-bW_DL.mjs} +14 -235
  171. package/dist/{ws-BwcqizuH.d.mts → ws-CL1w7GXU.d.mts} +13 -2
  172. package/package.json +48 -33
  173. package/sandbox.Dockerfile +4 -0
  174. package/schema.json +10 -22
  175. package/skills/migrate-vite-cloudflare-to-void/SKILL.md +34 -157
  176. package/skills/void/SKILL.md +50 -133
  177. package/skills/void/docs/guide/ai.md +94 -84
  178. package/skills/void/docs/guide/app-types.md +3 -32
  179. package/skills/void/docs/guide/auth.md +12 -116
  180. package/skills/void/docs/guide/database/d1.md +9 -54
  181. package/skills/void/docs/guide/database/mysql.md +1 -1
  182. package/skills/void/docs/guide/database/postgresql.md +5 -26
  183. package/skills/void/docs/guide/database.md +23 -75
  184. package/skills/void/docs/guide/deployment.md +27 -113
  185. package/skills/void/docs/guide/durable-state.md +43 -18
  186. package/skills/void/docs/guide/edge/headers.md +3 -47
  187. package/skills/void/docs/guide/edge/prerendering.md +5 -20
  188. package/skills/void/docs/guide/edge/redirects.md +11 -64
  189. package/skills/void/docs/guide/edge/revalidation.md +6 -19
  190. package/skills/void/docs/guide/edge/rewrites.md +56 -284
  191. package/skills/void/docs/guide/edge/static-assets.md +23 -72
  192. package/skills/void/docs/guide/email/domains.md +112 -0
  193. package/skills/void/docs/guide/email/receiving.md +139 -0
  194. package/skills/void/docs/guide/email/sending.md +231 -0
  195. package/skills/void/docs/guide/email.md +13 -619
  196. package/skills/void/docs/guide/env-migration.md +11 -11
  197. package/skills/void/docs/guide/env-vars.md +9 -29
  198. package/skills/void/docs/guide/index.md +0 -15
  199. package/skills/void/docs/guide/jobs.md +3 -18
  200. package/skills/void/docs/guide/kv.md +5 -11
  201. package/skills/void/docs/guide/live.md +5 -56
  202. package/skills/void/docs/guide/pages-routing/actions-and-forms.md +78 -125
  203. package/skills/void/docs/guide/pages-routing/head.md +10 -10
  204. package/skills/void/docs/guide/pages-routing/islands.md +6 -36
  205. package/skills/void/docs/guide/pages-routing/layouts.md +6 -128
  206. package/skills/void/docs/guide/pages-routing/loaders.md +3 -19
  207. package/skills/void/docs/guide/pages-routing/markdown.md +13 -171
  208. package/skills/void/docs/guide/pages-routing/overview.md +7 -17
  209. package/skills/void/docs/guide/pages-routing/view-transitions.md +1 -1
  210. package/skills/void/docs/guide/platform/administration/access.md +1 -4
  211. package/skills/void/docs/guide/platform/administration/email.md +35 -8
  212. package/skills/void/docs/guide/platform/administration/operations.md +26 -4
  213. package/skills/void/docs/guide/platform/administration/plans.md +126 -0
  214. package/skills/void/docs/guide/platform/administration/projects.md +5 -2
  215. package/skills/void/docs/guide/platform/administration/zero-trust.md +189 -0
  216. package/skills/void/docs/guide/platform/development/local.md +2 -2
  217. package/skills/void/docs/guide/platform/development/runtime.md +3 -13
  218. package/skills/void/docs/guide/platform/development/schema-ci.md +0 -58
  219. package/skills/void/docs/guide/platform/installation/credentials.md +6 -4
  220. package/skills/void/docs/guide/platform/installation/domains.md +31 -3
  221. package/skills/void/docs/guide/platform/installation/first-deployment.md +6 -0
  222. package/skills/void/docs/guide/platform/installation/maintenance.md +3 -1
  223. package/skills/void/docs/guide/platform/installation/prerequisites.md +21 -16
  224. package/skills/void/docs/guide/platform/installation/setup.md +9 -5
  225. package/skills/void/docs/guide/platform/installation/uninstall.md +17 -2
  226. package/skills/void/docs/guide/platform-administration.md +2 -0
  227. package/skills/void/docs/guide/queues.md +7 -9
  228. package/skills/void/docs/guide/quickstart.md +38 -37
  229. package/skills/void/docs/guide/remote-dev.md +4 -9
  230. package/skills/void/docs/guide/sandboxes.md +78 -41
  231. package/skills/void/docs/guide/server-routing.md +9 -72
  232. package/skills/void/docs/guide/sse.md +4 -18
  233. package/skills/void/docs/guide/ssg.md +3 -15
  234. package/skills/void/docs/guide/ssr.md +14 -62
  235. package/skills/void/docs/guide/storage.md +9 -4
  236. package/skills/void/docs/guide/type-safety.md +3 -14
  237. package/skills/void/docs/guide/typed-fetch.md +3 -7
  238. package/skills/void/docs/guide/websockets.md +68 -40
  239. package/skills/void/docs/integrations/agents.md +3 -3
  240. package/skills/void/docs/integrations/cloudflare.md +85 -316
  241. package/skills/void/docs/integrations/frameworks/analog.md +5 -64
  242. package/skills/void/docs/integrations/frameworks/astro.md +4 -73
  243. package/skills/void/docs/integrations/frameworks/nuxt.md +5 -62
  244. package/skills/void/docs/integrations/frameworks/overview.md +11 -54
  245. package/skills/void/docs/integrations/frameworks/react-router.md +5 -60
  246. package/skills/void/docs/integrations/frameworks/sveltekit.md +6 -65
  247. package/skills/void/docs/integrations/frameworks/tanstack-start.md +4 -62
  248. package/skills/void/docs/integrations/nodejs-bun-deno.md +5 -69
  249. package/skills/void/docs/reference/api/auth.md +156 -0
  250. package/skills/void/docs/reference/api/client.md +87 -0
  251. package/skills/void/docs/reference/api/database.md +95 -0
  252. package/skills/void/docs/reference/api/durable.md +46 -0
  253. package/skills/void/docs/reference/api/env.md +50 -0
  254. package/skills/void/docs/reference/api/handlers.md +254 -0
  255. package/skills/void/docs/reference/api/pages.md +241 -0
  256. package/skills/void/docs/reference/api/plugin.md +39 -0
  257. package/skills/void/docs/reference/api/resources.md +109 -0
  258. package/skills/void/docs/reference/api/rewrites.md +76 -0
  259. package/skills/void/docs/reference/api/types.md +92 -0
  260. package/skills/void/docs/reference/api.md +56 -1218
  261. package/skills/void/docs/reference/cli/auth.md +88 -0
  262. package/skills/void/docs/reference/cli/database.md +128 -0
  263. package/skills/void/docs/reference/cli/deploy.md +85 -0
  264. package/skills/void/docs/reference/cli/domains.md +41 -0
  265. package/skills/void/docs/reference/cli/email.md +129 -0
  266. package/skills/void/docs/reference/cli/generate.md +116 -0
  267. package/skills/void/docs/reference/cli/github.md +189 -0
  268. package/skills/void/docs/reference/cli/platform-config.md +92 -0
  269. package/skills/void/docs/reference/cli/platform-email.md +81 -0
  270. package/skills/void/docs/reference/cli/platform-installation.md +127 -0
  271. package/skills/void/docs/reference/cli/platform-operations.md +90 -0
  272. package/skills/void/docs/reference/cli/platform-users.md +89 -0
  273. package/skills/void/docs/reference/cli/platform-zero-trust.md +45 -0
  274. package/skills/void/docs/reference/cli/platform.md +70 -0
  275. package/skills/void/docs/reference/cli/project.md +214 -0
  276. package/skills/void/docs/reference/cli/secrets.md +76 -0
  277. package/skills/void/docs/reference/cli/setup.md +70 -0
  278. package/skills/void/docs/reference/cli.md +33 -1621
  279. package/skills/void/docs/reference/config.md +26 -32
  280. package/skills/void/docs/reference/resource-inference.md +3 -58
  281. package/skills/void/docs/reference/structure.md +14 -41
  282. package/dist/canonical-json-DuDiiUsQ.mjs +0 -13
  283. package/dist/cli/cf-compat.mjs +0 -968
  284. package/dist/client-4cDVv7BO.mjs +0 -2
  285. package/dist/gen-Vnv2f65C.mjs +0 -2
  286. package/dist/help-DQMfeKMz.mjs +0 -2
  287. package/dist/login-DFQk7rbW.mjs +0 -2
  288. package/dist/migrate-TsHGBnDA.mjs +0 -2
  289. package/dist/plan-BEZ8VJW0.mjs +0 -256
  290. package/dist/plan-DpuOr14e.mjs +0 -2
  291. package/dist/prepare-BZXkjdNe.mjs +0 -2
  292. package/dist/validate-EKmJWxmy.mjs +0 -2
  293. /package/dist/cli/{cf-compat.d.mts → cloudflare-operation-process.d.mts} +0 -0
@@ -2,11 +2,148 @@ import { a as join, d as toSlash, l as relative } from "./dist-BVqXeR_h.mjs";
2
2
  import { n as readProjectPaths } from "./project-paths-GgcMozYz.mjs";
3
3
  import { n as globSync, t as glob } from "./dist-Bn8Kodjp.mjs";
4
4
  import { a as isObjectExpression, i as isMemberExpression, n as isIdentifier, r as isLiteral, t as isCallExpression } from "./ast-CPGPjb0V.mjs";
5
- import { n as parseRouteFilename, r as parseWebSocketFilename, t as isRouteEnabledForEnvironment } from "./parse-filename-DioPHiR9.mjs";
5
+ import { a as staticLiteral, n as parseRouteFilename, o as unwrapStaticExpression, r as parseWebSocketFilename, t as isRouteEnabledForEnvironment } from "./parse-filename-CUbj-1MP.mjs";
6
+ import { n as resourceNameWords, t as isResourceName } from "./resource-name-C7LVpcRm.mjs";
6
7
  import { r as getSsrServerEntryPath } from "./entry-CF5wvH4w.mjs";
7
8
  import { existsSync, readFileSync } from "node:fs";
8
9
  import { parseSync } from "vite";
9
10
  import { parse } from "es-module-lexer/js";
11
+ //#region src/application-features.ts
12
+ /** Apply explicitly named overrides while preserving unrelated source features. */
13
+ function applyBindingOverrides(inferred, overrides) {
14
+ const bindings = { ...inferred };
15
+ if (overrides) for (const [key, inferredKey] of Object.entries({
16
+ db: "needsD1",
17
+ kv: "needsKV",
18
+ storage: "needsR2",
19
+ ai: "needsAI",
20
+ email: "needsEmail"
21
+ })) {
22
+ const value = overrides[key];
23
+ if (value !== void 0) bindings[inferredKey] = Boolean(value);
24
+ }
25
+ return bindings;
26
+ }
27
+ /** Shared database requirement for development and both deployment targets. */
28
+ function needsApplicationDatabase(bindings, migrationCount) {
29
+ return bindings.needsD1 || bindings.needsAuth || migrationCount > 0;
30
+ }
31
+ //#endregion
32
+ //#region src/shared/resource-definition.ts
33
+ /** Inspect default helper definitions without running application code. */
34
+ function readResourceDefinition(filename, source, helpers) {
35
+ let program;
36
+ try {
37
+ program = parseSync(filename, source).program;
38
+ } catch {
39
+ return null;
40
+ }
41
+ const constants = /* @__PURE__ */ new Map();
42
+ const definitions = /* @__PURE__ */ new Map();
43
+ const importedHelpers = /* @__PURE__ */ new Map();
44
+ const namespaces = /* @__PURE__ */ new Map();
45
+ const bindings = /* @__PURE__ */ new Set();
46
+ function recordBindings(node) {
47
+ if (isIdentifier(node)) bindings.add(node.name);
48
+ else if (node?.type === "ObjectPattern") for (const property of node.properties ?? []) recordBindings(property.type === "RestElement" ? property.argument : property.value);
49
+ else if (node?.type === "ArrayPattern") for (const element of node.elements ?? []) recordBindings(element);
50
+ else if (node?.type === "AssignmentPattern" || node?.type === "RestElement") recordBindings(node.left ?? node.argument);
51
+ }
52
+ for (const statement of program.body ?? []) {
53
+ if (statement.type === "ImportDeclaration") {
54
+ const declaration = statement;
55
+ const source = declaration.source.value;
56
+ const supported = source === "void/ws" ? /* @__PURE__ */ new Set(["defineRoom", "defineWebSocket"]) : source === "void/durable" ? /* @__PURE__ */ new Set(["defineDurableState"]) : /* @__PURE__ */ new Set();
57
+ for (const specifier of declaration.specifiers ?? []) {
58
+ const local = specifier.local;
59
+ recordBindings(local);
60
+ if (specifier.type === "ImportNamespaceSpecifier") namespaces.set(specifier.local.name, supported);
61
+ else if (specifier.type === "ImportSpecifier") {
62
+ const named = specifier;
63
+ const imported = isIdentifier(named.imported) ? named.imported.name : staticLiteral(named.imported);
64
+ if (typeof imported === "string" && supported.has(imported) && helpers.has(imported)) importedHelpers.set(named.local.name, imported);
65
+ }
66
+ }
67
+ continue;
68
+ }
69
+ const declaration = statement.type === "ExportNamedDeclaration" ? statement.declaration : statement;
70
+ recordBindings(declaration?.id);
71
+ if (declaration?.type !== "VariableDeclaration") continue;
72
+ for (const variable of declaration.declarations ?? []) {
73
+ recordBindings(variable.id);
74
+ if (isIdentifier(variable.id) && variable.init) {
75
+ definitions.set(variable.id.name, variable.init);
76
+ if (declaration.kind === "const") constants.set(variable.id.name, variable.init);
77
+ }
78
+ }
79
+ }
80
+ function resolve(node, seen = /* @__PURE__ */ new Set()) {
81
+ node = unwrapStaticExpression(node);
82
+ if (!isIdentifier(node) || !constants.has(node.name) || seen.has(node.name)) return node;
83
+ seen.add(node.name);
84
+ return resolve(constants.get(node.name), seen);
85
+ }
86
+ function isStaticUndefined(node) {
87
+ node = resolve(node);
88
+ return isIdentifier(node) && node.name === "undefined" && !bindings.has(node.name);
89
+ }
90
+ function readName(options, seen = /* @__PURE__ */ new Set()) {
91
+ options = resolve(options);
92
+ if (!isObjectExpression(options) || seen.has(options)) return { present: false };
93
+ seen.add(options);
94
+ let name = { present: false };
95
+ for (const property of options.properties ?? []) {
96
+ if (property.type === "SpreadElement") {
97
+ const spread = resolve(property.argument);
98
+ if (isObjectExpression(spread)) {
99
+ const spreadName = readName(spread, seen);
100
+ if (spreadName.present) name = spreadName;
101
+ } else if (name.value !== void 0) throw new Error(`${filename}: resource name cannot be overridden by a dynamic spread.`);
102
+ continue;
103
+ }
104
+ if (property.type !== "Property") continue;
105
+ const key = property.key;
106
+ const keyName = !property.computed && isIdentifier(key) ? key.name : staticLiteral(key);
107
+ if (keyName !== "name") {
108
+ if (property.computed && keyName === void 0 && name.value !== void 0) throw new Error(`${filename}: resource name cannot be overridden by a dynamic key.`);
109
+ continue;
110
+ }
111
+ const valueNode = property.value;
112
+ if (isStaticUndefined(valueNode)) {
113
+ name = { present: true };
114
+ continue;
115
+ }
116
+ const value = staticLiteral(resolve(valueNode));
117
+ if (!isResourceName(value)) throw new Error(`${filename}: resource name must be a static string containing a word starting with a letter.`);
118
+ name = {
119
+ present: true,
120
+ value
121
+ };
122
+ }
123
+ seen.delete(options);
124
+ return name;
125
+ }
126
+ const statement = program.body?.find((node) => node.type === "ExportDefaultDeclaration");
127
+ const declaration = unwrapStaticExpression(statement?.declaration);
128
+ const call = resolve(isIdentifier(declaration) ? definitions.get(declaration.name) : declaration);
129
+ if (!isCallExpression(call)) return null;
130
+ const callee = resolve(call.callee);
131
+ let helper;
132
+ if (isIdentifier(callee)) helper = importedHelpers.get(callee.name) ?? (helpers.has(callee.name) ? callee.name : void 0);
133
+ else if (isMemberExpression(callee) && isIdentifier(callee.object)) {
134
+ const property = !callee.computed && isIdentifier(callee.property) ? callee.property.name : staticLiteral(callee.property);
135
+ if (typeof property === "string" && helpers.has(property) && namespaces.get(callee.object.name)?.has(property)) helper = property;
136
+ }
137
+ if (!helper) return null;
138
+ const options = resolve(call.arguments?.[0]);
139
+ const name = readName(options).value;
140
+ return {
141
+ helper,
142
+ options,
143
+ ...name === void 0 ? {} : { name }
144
+ };
145
+ }
146
+ //#endregion
10
147
  //#region ../../node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/walker.js
11
148
  /**
12
149
  * @typedef { import('estree').Node} Node
@@ -348,12 +485,18 @@ const WEBSOCKET_ROUTE_RE = /(?:\.(?:dev|prod))?\.ws\.(?:ts|mts|js|mjs)$/;
348
485
  function isWebSocketRouteFile(filePath) {
349
486
  return WEBSOCKET_ROUTE_RE.test(filePath.replace(/\\/g, "/"));
350
487
  }
351
- function toIdentifierPart(segment) {
352
- return segment.replace(/^\(\s*|\s*\)$/g, "").replace(/^\[\.\.\.(.+)\]$/, "$1").replace(/^\[(.+)\]$/, "$1").replace(/\.ws$/, "").replace(/\.(dev|prod)$/, "").replace(/[^a-zA-Z0-9]+/g, " ").split(" ").filter(Boolean).map((part) => part[0].toUpperCase() + part.slice(1)).join("");
488
+ function identifierWords(segment) {
489
+ return segment.replace(/^\(\s*|\s*\)$/g, "").replace(/^\[\.\.\.(.+)\]$/, "$1").replace(/^\[(.+)\]$/, "$1").replace(/\.ws$/, "").replace(/\.(dev|prod)$/, "").replace(/[^a-zA-Z0-9]+/g, " ").split(" ").filter(Boolean);
490
+ }
491
+ function deriveWebSocketClassNameFromName(name) {
492
+ return resourceNameWords(name).map((part) => part[0].toUpperCase() + part.slice(1)).join("") + "Ws";
493
+ }
494
+ function inferWebSocketResourceName(filePath) {
495
+ const parts = filePath.replace(/\\/g, "/").replace(/\.(ts|mts|js|mjs)$/, "").split("/").filter((segment) => segment.length > 0 && !(segment.startsWith("(") && segment.endsWith(")"))).flatMap(identifierWords);
496
+ return parts.length > 0 ? parts.join("-") : "WebSocket";
353
497
  }
354
498
  function deriveWebSocketClassName(filePath) {
355
- const parts = filePath.replace(/\\/g, "/").replace(/\.(ts|mts|js|mjs)$/, "").split("/").filter((segment) => segment.length > 0 && !(segment.startsWith("(") && segment.endsWith(")"))).map(toIdentifierPart).filter(Boolean);
356
- return (parts.length > 0 ? parts.join("") : "WebSocket") + "Ws";
499
+ return deriveWebSocketClassNameFromName(inferWebSocketResourceName(filePath));
357
500
  }
358
501
  function getPropertyName(node) {
359
502
  if (!node) return null;
@@ -361,64 +504,43 @@ function getPropertyName(node) {
361
504
  if (isLiteral(node) && typeof node.value === "string") return node.value;
362
505
  return null;
363
506
  }
364
- function extractDefinition(call) {
365
- if (!isCallExpression(call)) return null;
366
- if (!isIdentifier(call.callee)) return null;
367
- const calleeName = call.callee.name;
368
- if (calleeName !== "defineRoom" && calleeName !== "defineWebSocket") return null;
369
- let hasAuthGate = false;
370
- const options = call.arguments?.[0];
371
- if (isObjectExpression(options)) for (const property of options.properties ?? []) {
372
- if (property.type !== "Property") continue;
373
- if (getPropertyName(property.key) === "onBeforeConnect") {
374
- hasAuthGate = true;
375
- break;
376
- }
377
- }
507
+ const WEBSOCKET_HELPERS = /* @__PURE__ */ new Set(["defineRoom", "defineWebSocket"]);
508
+ function detectWebSocketDefinition(absPath) {
509
+ const definition = readResourceDefinition(absPath, readFileSync(absPath, "utf-8"), WEBSOCKET_HELPERS);
510
+ if (!definition) return null;
511
+ const hasAuthGate = isObjectExpression(definition.options) && (definition.options.properties ?? []).some((property) => property.type === "Property" && getPropertyName(property.key) === "onBeforeConnect");
378
512
  return {
379
- mode: calleeName === "defineRoom" ? "room" : "socket",
380
- hasAuthGate
513
+ mode: definition.helper === "defineRoom" ? "room" : "socket",
514
+ hasAuthGate,
515
+ ...definition.name === void 0 ? {} : { name: definition.name }
381
516
  };
382
517
  }
383
- function detectWebSocketDefinition(absPath) {
384
- const code = readFileSync(absPath, "utf-8");
385
- const filename = absPath.split("/").pop() ?? absPath;
386
- let parsed;
387
- try {
388
- parsed = parseSync(filename, code);
389
- } catch {
390
- return null;
391
- }
392
- const program = parsed.program;
393
- const variableInitializers = /* @__PURE__ */ new Map();
394
- for (const node of program.body ?? []) if (node.type === "VariableDeclaration") {
395
- for (const declarator of node.declarations ?? []) if (isIdentifier(declarator.id) && declarator.init) variableInitializers.set(declarator.id.name, declarator.init);
396
- }
397
- for (const node of program.body ?? []) {
398
- if (node.type !== "ExportDefaultDeclaration") continue;
399
- const declaration = node.declaration;
400
- if (isIdentifier(declaration)) return extractDefinition(variableInitializers.get(declaration.name));
401
- return extractDefinition(declaration);
402
- }
403
- return null;
404
- }
405
518
  function buildWebSocketRoute(root, filePath, paths = readProjectPaths(root)) {
406
519
  const parsed = parseWebSocketFilename(filePath);
407
520
  const info = detectWebSocketDefinition(join(paths.routesDir, filePath));
408
- const className = deriveWebSocketClassName(filePath);
521
+ const className = info?.name === void 0 ? deriveWebSocketClassName(filePath) : deriveWebSocketClassNameFromName(info.name);
409
522
  return {
410
523
  ...parsed,
411
524
  className,
412
525
  bindingName: className,
413
526
  mode: info?.mode ?? "socket",
414
- hasAuthGate: info?.hasAuthGate ?? false
527
+ hasAuthGate: info?.hasAuthGate ?? false,
528
+ ...info?.name === void 0 ? {} : { name: info.name }
415
529
  };
416
530
  }
417
531
  function parseWebSocketFiles(root, files, paths = readProjectPaths(root), environment) {
418
- return files.filter((f) => isWebSocketRouteFile(f)).filter((f) => !f.split("/").some((segment) => segment.startsWith("_"))).filter((filePath) => isRouteEnabledForEnvironment(parseWebSocketFilename(filePath), environment)).map((filePath) => buildWebSocketRoute(root, filePath, paths)).sort((a, b) => {
532
+ const routes = files.filter((f) => isWebSocketRouteFile(f)).filter((f) => !f.split("/").some((segment) => segment.startsWith("_"))).filter((filePath) => isRouteEnabledForEnvironment(parseWebSocketFilename(filePath), environment)).map((filePath) => buildWebSocketRoute(root, filePath, paths)).sort((a, b) => {
419
533
  if (a.catchAll !== b.catchAll) return a.catchAll ? 1 : -1;
420
534
  return a.pattern.localeCompare(b.pattern);
421
535
  });
536
+ const byClass = /* @__PURE__ */ new Map();
537
+ for (const route of routes) {
538
+ const previous = byClass.get(route.className) ?? [];
539
+ if (previous.some((other) => other.env === null || route.env === null || other.env === route.env)) throw new Error(`websocket: duplicate generated name '${route.className}' for '${route.filePath}'. Choose a different resource name or rename one of the WebSocket route files.`);
540
+ previous.push(route);
541
+ byClass.set(route.className, previous);
542
+ }
543
+ return routes;
422
544
  }
423
545
  async function scanWebSocketRoutes(root, paths = readProjectPaths(root), environment) {
424
546
  const pattern = `**/*.{${HANDLER_EXTENSIONS.join(",")}}`;
@@ -549,23 +671,15 @@ function inferBindingsFromFile(file, code) {
549
671
  * @param scanDirs - Override the default scan directories (e.g., for framework mode)
550
672
  */
551
673
  function inferProjectBindings(root, options, scanDirs) {
552
- if (options?.bindings) return {
553
- needsD1: Boolean(options.bindings.db),
554
- needsKV: Boolean(options.bindings.kv),
555
- needsR2: Boolean(options.bindings.storage),
556
- needsAuth: false,
557
- needsQueues: false,
558
- needsAI: Boolean(options.bindings.ai),
559
- needsSandbox: false,
560
- needsLive: false,
561
- needsEmail: Boolean(options.bindings.email)
562
- };
563
674
  const paths = options?.paths ?? readProjectPaths(root);
564
675
  const dirs = scanDirs ?? (paths.sourceDir ? [paths.sourceDir] : DEFAULT_SCAN_DIRS);
565
676
  const allBindings = [];
677
+ const scannedFiles = /* @__PURE__ */ new Set();
566
678
  const routesPrefix = `${toSlash(paths.routesDir).replace(/\/$/, "")}/`;
567
679
  const addFile = (file) => {
568
680
  const normalizedFile = toSlash(file);
681
+ if (scannedFiles.has(normalizedFile)) return;
682
+ scannedFiles.add(normalizedFile);
569
683
  if (options?.environment && normalizedFile.startsWith(routesPrefix) && /\.(?:ts|mts|js|mjs)$/.test(normalizedFile)) {
570
684
  const routePath = relative(paths.routesDir, normalizedFile);
571
685
  const route = isWebSocketPatternFile(routePath) ? parseWebSocketFilename(routePath) : parseRouteFilename(routePath);
@@ -588,11 +702,7 @@ function inferProjectBindings(root, options, scanDirs) {
588
702
  for (const file of files) addFile(file);
589
703
  }
590
704
  const ssrEntry = getSsrServerEntryPath(root, paths);
591
- if (ssrEntry) {
592
- const code = readFileSync(ssrEntry, "utf-8");
593
- const filename = ssrEntry.split("/").pop() ?? "main.ssr.ts";
594
- allBindings.push(inferBindingsFromSource(code, filename));
595
- }
705
+ if (ssrEntry) addFile(ssrEntry);
596
706
  const dirsSet = new Set(dirs);
597
707
  const srcRel = paths.sourceDir ? paths.sourceDir : "src";
598
708
  if (!dirsSet.has(srcRel)) {
@@ -608,7 +718,7 @@ function inferProjectBindings(root, options, scanDirs) {
608
718
  }
609
719
  for (const file of srcFiles) addFile(file);
610
720
  }
611
- return mergeBindings(allBindings);
721
+ return applyBindingOverrides(mergeBindings(allBindings), options?.bindings);
612
722
  }
613
723
  //#endregion
614
- export { isWebSocketPatternFile as a, inferBindingsFromSource as c, inferProjectBindings as i, walk as l, FRAMEWORK_SCAN_DIRS as n, scanWebSocketRoutes as o, detectFramework as r, scanWebSocketRoutesSync as s, DEFAULT_SCAN_DIRS as t };
724
+ export { deriveWebSocketClassNameFromName as a, scanWebSocketRoutes as c, walk as d, readResourceDefinition as f, inferProjectBindings as i, scanWebSocketRoutesSync as l, needsApplicationDatabase as m, FRAMEWORK_SCAN_DIRS as n, inferWebSocketResourceName as o, applyBindingOverrides as p, detectFramework as r, isWebSocketPatternFile as s, DEFAULT_SCAN_DIRS as t, inferBindingsFromSource as u };
@@ -1,6 +1,6 @@
1
- import { r as cliTitle } from "./output-CCH48AMM.mjs";
2
- import { N as note, O as intro, P as outro, j as log } from "./dist-Dn6nn2IU.mjs";
3
- import { t as prepareProject } from "./prepare-C3kt3Rst.mjs";
1
+ import { N as note, O as intro, P as outro, j as log } from "./dist-CTBk70IR.mjs";
2
+ import { r as cliTitle } from "./output-Dm_A4Tbv.mjs";
3
+ import { t as prepareProject } from "./prepare-DOsL0CC9.mjs";
4
4
  //#region src/cli/prepare.ts
5
5
  async function runPrepareCommand(root, _args) {
6
6
  console.log();
@@ -1,14 +1,12 @@
1
1
  import { a as join } from "./dist-BVqXeR_h.mjs";
2
- import { i as resolveProjectPaths } from "./project-paths-GgcMozYz.mjs";
3
- import { n as loadVoidAuthConfig, t as findVoidAuthConfig } from "./config-DPByhVck.mjs";
4
- import { m as readConfig, u as getDatabaseDialect } from "./config-CafTW6Cz.mjs";
2
+ import { n as loadVoidAuthConfig } from "./config-DPByhVck.mjs";
3
+ import { m as readConfig } from "./config-Br_JZD6u.mjs";
5
4
  import { n as ensureProjectTsconfig, r as writeFileIfChanged } from "./project-tsconfig-B8GeM0RM.mjs";
6
- import { r as scanRoutes } from "./scan-ClYmX3sa.mjs";
7
- import { i as inferProjectBindings, n as FRAMEWORK_SCAN_DIRS, r as detectFramework } from "./plugin-inference-BMfKRSqE.mjs";
8
5
  import { i as generateDbDts, n as generateQueueTypes, t as generateRouteTypes } from "./route-types-Clm4WD0B.mjs";
9
6
  import { t as discoverSchema } from "./discover-BcPPiF1o.mjs";
10
7
  import { r as generateEnvTypes, t as findEnvFile } from "./env-types-C2_bIk_b.mjs";
11
8
  import { a as loadLocalEnv } from "./env-_v349JBd.mjs";
9
+ import { t as analyzeApplication } from "./application-routing-B7QEjqSR.mjs";
12
10
  import { n as generateVoidAuthDrizzleSchema, t as generateVoidAuthDatabaseModule } from "./drizzle-Beb2Am5S.mjs";
13
11
  import { existsSync, mkdirSync, rmSync } from "node:fs";
14
12
  import { fileURLToPath } from "node:url";
@@ -25,30 +23,16 @@ function removeGeneratedFile(outDir, fileName, removed) {
25
23
  }
26
24
  async function prepareProject(root) {
27
25
  const config = readConfig(root);
28
- const paths = resolveProjectPaths(root, config);
26
+ const { paths, authConfigPath, authEnabled, dialect, scan } = await analyzeApplication(root, { config });
29
27
  const outDir = join(root, ".void");
30
28
  const written = [];
31
29
  const removed = [];
32
30
  mkdirSync(outDir, { recursive: true });
33
- const detectedFramework = detectFramework(root);
34
- const inferenceOptions = config.inference?.bindings ? { bindings: config.inference.bindings } : void 0;
35
- const scanDirs = config.inference?.scanDirs ?? (detectedFramework ? FRAMEWORK_SCAN_DIRS : void 0);
36
- const bindings = inferProjectBindings(root, {
37
- ...inferenceOptions,
38
- paths
39
- }, scanDirs);
40
- const authConfigPath = findVoidAuthConfig(root, paths);
41
- const authEnabled = bindings.needsAuth || authConfigPath !== null || config.auth !== void 0;
42
- const dialect = getDatabaseDialect(config);
43
31
  const envFile = findEnvFile(root);
44
32
  if (envFile) {
45
33
  const { dts } = generateEnvTypes(envFile, outDir);
46
34
  writeGeneratedFile(outDir, "env.d.ts", dts, written);
47
35
  } else removeGeneratedFile(outDir, "env.d.ts", removed);
48
- const scan = await scanRoutes(root, {
49
- output: config.output,
50
- paths
51
- });
52
36
  const hasRouteTypes = scan.routes.length > 0 || (scan.websockets?.length ?? 0) > 0 || scan.pages.pages.length > 0;
53
37
  if (hasRouteTypes) {
54
38
  const { dts } = generateRouteTypes(scan, paths.routesDir, outDir, paths.pagesDir);
@@ -0,0 +1,2 @@
1
+ import { t as prepareProject } from "./prepare-DOsL0CC9.mjs";
2
+ export { prepareProject };
@@ -1,8 +1,8 @@
1
- import { a as dim, c as import_picocolors, r as cliTitle, u as tablePrefix } from "./output-CCH48AMM.mjs";
2
- import { c as getToken, s as getSiteDomain } from "./auth-DLNN0D3Z.mjs";
1
+ import { c as getToken, s as getSiteDomain } from "./auth-CSkdO2Bb.mjs";
3
2
  import { i as readDeploymentPlatform } from "./project-C0Fqu05O.mjs";
4
- import { O as intro, P as outro, j as log } from "./dist-Dn6nn2IU.mjs";
5
- import { n as PlatformClient } from "./client-QTl6ko_D.mjs";
3
+ import { O as intro, P as outro, j as log } from "./dist-CTBk70IR.mjs";
4
+ import { n as PlatformClient } from "./client-RV8NVeB8.mjs";
5
+ import { a as dim, c as import_picocolors, d as tablePrefix, r as cliTitle } from "./output-Dm_A4Tbv.mjs";
6
6
  //#region src/cli/projects.ts
7
7
  async function runProjectsCommand(root) {
8
8
  console.log();
@@ -39,63 +39,77 @@ async function runProjectsCommand(root) {
39
39
  async function runProjectCommand(root, args) {
40
40
  const cloudflare = readDeploymentPlatform(root) === "cloudflare";
41
41
  if (args.subcommand === "status") {
42
- const { runListCommand } = await import("./list-CDb-4bZ1.mjs");
42
+ const { runListCommand } = await import("./list-CZj0dzKY.mjs");
43
43
  return runListCommand(root, args.name || void 0);
44
44
  }
45
45
  if (args.subcommand === "link") {
46
46
  if (cloudflare) throw new Error("project: Direct Cloudflare apps are identified by cloudflare.name in void.config.ts and do not need linking.");
47
- const { runLink } = await import("./link-CsHOinF7.mjs");
47
+ const { runLink } = await import("./link-CDqqCjFl.mjs");
48
48
  return runLink(root, args.name || void 0);
49
49
  }
50
50
  if (args.subcommand === "list") {
51
51
  if (cloudflare) {
52
- const { runListCommand } = await import("./list-CDb-4bZ1.mjs");
52
+ const { runListCommand } = await import("./list-CZj0dzKY.mjs");
53
53
  return runListCommand(root);
54
54
  }
55
55
  return runProjectsCommand(root);
56
56
  }
57
57
  if (args.subcommand === "token") {
58
58
  if (cloudflare) throw new Error("project: CI deploy credentials are available only for Void platform projects.");
59
- const { runProjectTokenCommand } = await import("./project-token-C8xEEQnB.mjs");
59
+ const { runProjectTokenCommand } = await import("./project-token-CTDYU0Cc.mjs");
60
60
  return runProjectTokenCommand(root, args);
61
61
  }
62
62
  if (args.subcommand === "team") {
63
63
  if (args.action === "") {
64
- const { printHelpPage } = await import("./help-DQMfeKMz.mjs");
64
+ const { printHelpPage } = await import("./help-DofyZuY7.mjs");
65
65
  printHelpPage(["project", "team"]);
66
66
  return;
67
67
  }
68
68
  const accountInvitationAction = args.action === "pending" || args.action === "accept" || args.action === "decline";
69
69
  if (cloudflare && !accountInvitationAction) throw new Error("project: Teams are available only for projects hosted on a Void platform, not direct Cloudflare deployments.");
70
- const { runProjectTeamCommand } = await import("./project-team-BkbYIsXN.mjs");
70
+ const { runProjectTeamCommand } = await import("./project-team-DQOWPfQT.mjs");
71
71
  return runProjectTeamCommand(root, args);
72
72
  }
73
+ if (args.subcommand === "zero-trust") {
74
+ if (cloudflare) throw new Error("project: Zero Trust overrides are available only for projects hosted on a Void platform.");
75
+ if (args.action === "") {
76
+ const { printHelpPage } = await import("./help-DofyZuY7.mjs");
77
+ printHelpPage(["project", "zero-trust"]);
78
+ return;
79
+ }
80
+ const action = args.action;
81
+ const { runProjectZeroTrustCommand } = await import("./project-zero-trust-BNAkW-_0.mjs");
82
+ return runProjectZeroTrustCommand(root, {
83
+ ...args,
84
+ action
85
+ });
86
+ }
73
87
  if (args.subcommand === "logs") {
74
- const { runLogsCommand } = await import("./logs-BdfiOezj.mjs");
88
+ const { runLogsCommand } = await import("./logs-CUZ6t9t3.mjs");
75
89
  return runLogsCommand(root, args.filter, args.range, args.deployment || void 0, args.level || void 0);
76
90
  }
77
91
  if (args.subcommand === "requests") {
78
92
  if (cloudflare) throw new Error("project: Historical request analytics require the Void platform. Use `void project logs` for a live Cloudflare tail.");
79
- const { runRequestsCommand } = await import("./requests-DFyhBMaf.mjs");
93
+ const { runRequestsCommand } = await import("./requests-MhxYnau8.mjs");
80
94
  return runRequestsCommand(root, args.range, args.status || void 0);
81
95
  }
82
96
  if (args.subcommand === "rollback") {
83
- const { runRollbackCommand } = await import("./rollback-DHHxXZiS.mjs");
97
+ const { runRollbackCommand } = await import("./rollback-CJ6iSDoU.mjs");
84
98
  return runRollbackCommand(root, args.deployId || void 0);
85
99
  }
86
100
  if (args.subcommand === "cancel") {
87
101
  if (cloudflare) throw new Error("project: Direct Cloudflare deploys activate only after readiness succeeds, so there is no remote build to cancel.");
88
- const { runCancelDeployCommand } = await import("./cancel-deploy-D23R1RXT.mjs");
102
+ const { runCancelDeployCommand } = await import("./cancel-deploy-abUxpP2n.mjs");
89
103
  return runCancelDeployCommand(root, args.deployId || void 0);
90
104
  }
91
105
  if (args.subcommand === "delete") {
92
106
  if (cloudflare) throw new Error("project: Refusing to delete Cloudflare resources through this command. Direct deployments are additive and existing resources may be shared.");
93
- const { runDeleteCommand } = await import("./delete-D6dZ9B6B.mjs");
107
+ const { runDeleteCommand } = await import("./delete-NvbiyeJf.mjs");
94
108
  return runDeleteCommand(root, args.name || void 0, { force: args.force });
95
109
  }
96
110
  if (args.subcommand === "purge-cache") {
97
111
  if (cloudflare) throw new Error("project: Direct Cloudflare ISR cache purge is not available yet; redeploy or purge the configured KV namespace explicitly.");
98
- const { runPurgeCacheCommand } = await import("./cache-7_UeZdTk.mjs");
112
+ const { runPurgeCacheCommand } = await import("./cache-C4MvnrMH.mjs");
99
113
  return runPurgeCacheCommand(root, args.projectSlug || void 0);
100
114
  }
101
115
  }
@@ -1,8 +1,8 @@
1
- import { r as cliTitle } from "./output-CCH48AMM.mjs";
2
- import { c as getToken, i as getAccountCredential } from "./auth-DLNN0D3Z.mjs";
1
+ import { c as getToken, i as getAccountCredential } from "./auth-CSkdO2Bb.mjs";
3
2
  import { o as readProjectConfig } from "./project-C0Fqu05O.mjs";
4
- import { N as note, O as intro, P as outro, j as log } from "./dist-Dn6nn2IU.mjs";
5
- import { n as PlatformClient, o as parsePlatformErrorBody, s as platformErrorMessage, t as PlatformApiError } from "./client-QTl6ko_D.mjs";
3
+ import { N as note, O as intro, P as outro, j as log } from "./dist-CTBk70IR.mjs";
4
+ import { n as PlatformClient, o as parsePlatformErrorBody, s as platformErrorMessage, t as PlatformApiError } from "./client-RV8NVeB8.mjs";
5
+ import { r as cliTitle } from "./output-Dm_A4Tbv.mjs";
6
6
  import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
7
7
  //#region src/cli/project-team.ts
8
8
  function clean(value) {
@@ -1,8 +1,8 @@
1
- import { a as dim, r as cliTitle, u as tablePrefix } from "./output-CCH48AMM.mjs";
2
- import { c as getToken } from "./auth-DLNN0D3Z.mjs";
1
+ import { c as getToken } from "./auth-CSkdO2Bb.mjs";
3
2
  import { o as readProjectConfig } from "./project-C0Fqu05O.mjs";
4
- import { O as intro, P as outro, j as log } from "./dist-Dn6nn2IU.mjs";
5
- import { n as PlatformClient } from "./client-QTl6ko_D.mjs";
3
+ import { O as intro, P as outro, j as log } from "./dist-CTBk70IR.mjs";
4
+ import { n as PlatformClient } from "./client-RV8NVeB8.mjs";
5
+ import { a as dim, d as tablePrefix, r as cliTitle } from "./output-Dm_A4Tbv.mjs";
6
6
  import { r as resolveProjectBySlug } from "./resolve-project-BG5ORGID.mjs";
7
7
  //#region src/cli/project-token.ts
8
8
  async function resolveTarget(root, args) {
@@ -0,0 +1,63 @@
1
+ import { c as getToken } from "./auth-CSkdO2Bb.mjs";
2
+ import { o as readProjectConfig } from "./project-C0Fqu05O.mjs";
3
+ import { N as note, O as intro, P as outro, j as log } from "./dist-CTBk70IR.mjs";
4
+ import { n as PlatformClient } from "./client-RV8NVeB8.mjs";
5
+ import { l as sanitizeTerminalText, r as cliTitle } from "./output-Dm_A4Tbv.mjs";
6
+ import { r as resolveProjectBySlug, t as getRequestedProjectSlug } from "./resolve-project-BG5ORGID.mjs";
7
+ //#region src/cli/project-zero-trust.ts
8
+ async function resolveTarget(root, args) {
9
+ const token = getToken(root);
10
+ if (!token) throw new Error("project: Not logged in. Run `void account login` first.");
11
+ const client = new PlatformClient(token, { root });
12
+ const requestedSlug = getRequestedProjectSlug({ projectSlug: args.projectSlug });
13
+ if (requestedSlug) {
14
+ const project = resolveProjectBySlug(await client.listProjects(), requestedSlug);
15
+ if (!project) throw new Error(`project: No project found with slug '${requestedSlug}'.`);
16
+ return {
17
+ client,
18
+ projectId: project.projectId,
19
+ slug: project.slug
20
+ };
21
+ }
22
+ const linked = readProjectConfig(root);
23
+ if (!linked) throw new Error("project: No linked project. Pass --project <name> or set VOID_PROJECT.");
24
+ return {
25
+ client,
26
+ projectId: linked.projectId,
27
+ slug: linked.slug
28
+ };
29
+ }
30
+ function statusLines(result) {
31
+ const project = result.project;
32
+ const platformStatus = sanitizeTerminalText(result.platformStatus);
33
+ const unavailableMessage = result.platformStatus === "invalid_configuration" ? "The platform Zero Trust configuration is invalid. Ask a platform administrator to review it." : result.platformStatus === "configuring" ? "The platform is still applying Zero Trust configuration. A platform administrator can resume it with `void platform zero-trust reconcile`." : result.platformStatus === "disabling" ? "The platform is disabling project Zero Trust. A platform administrator can resume it with `void platform zero-trust reconcile`." : result.platformStatus === "error" ? "The platform Zero Trust configuration needs administrator attention. A platform administrator can inspect its status and reconcile it." : result.platformStatus === "ready" ? "The platform administrator has disabled project Zero Trust." : "The platform administrator has not configured project Zero Trust.";
34
+ return [
35
+ `Available: ${result.available ? "yes" : "no"}`,
36
+ `Platform: ${platformStatus}`,
37
+ ...result.platformStatus === "not_configured" || result.platformStatus === "invalid_configuration" ? [] : [`Default for new projects: ${result.protectNewProjects ? "protected" : "public"}`],
38
+ `Desired: ${project ? project.desired_protected ? "protected" : "public" : "not initialized"}`,
39
+ `Effective: ${project ? project.effective_protected ? "protected" : "public" : "not initialized"}`,
40
+ `State: ${project?.state ?? "not initialized"}`,
41
+ ...project?.last_error ? [`Last error: ${sanitizeTerminalText(project.last_error)}`] : [],
42
+ ...!result.available ? [unavailableMessage] : []
43
+ ].join("\n");
44
+ }
45
+ async function runProjectZeroTrustCommand(root, args) {
46
+ console.log();
47
+ intro(cliTitle(`project zero-trust ${args.action}`));
48
+ const { client, projectId, slug } = await resolveTarget(root, args);
49
+ if (args.action === "status") {
50
+ note(statusLines(await client.getProjectZeroTrust(projectId)), slug);
51
+ outro(`${slug} Zero Trust status`);
52
+ return;
53
+ }
54
+ const result = args.action === "reconcile" ? await client.reconcileProjectZeroTrust(projectId) : await client.setProjectZeroTrust(projectId, args.action === "protect");
55
+ if (result.project.last_error) log.warn(sanitizeTerminalText(result.project.last_error));
56
+ if (result.project.state === "reconciling") {
57
+ outro(`${slug} Zero Trust update is still in progress. Run \`void project zero-trust reconcile\` to continue, or wait for scheduled maintenance.`);
58
+ return;
59
+ }
60
+ outro(args.action === "protect" ? `${slug} is protected by Zero Trust.` : args.action === "public" ? `${slug} is public.` : `${slug} Zero Trust reconciled (${result.project.state}).`);
61
+ }
62
+ //#endregion
63
+ export { runProjectZeroTrustCommand };
@@ -1,5 +1,5 @@
1
1
  import { n as HeadDescriptor, t as HeadConfig } from "./head-Do8P4puT.mjs";
2
- import { n as CloudBindings, r as CloudContext } from "./handler-BXJTXd02.mjs";
2
+ import { n as CloudBindings, r as CloudContext } from "./handler-CZ4nAylQ.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. */
@@ -34,7 +34,7 @@ type GetAssetTags = (req: Request, env: CloudBindings, componentId: string) => P
34
34
  declare function flattenValidationErrors(body: unknown): Record<string, string>;
35
35
  /** Handle GET page request — run handler, return page object or SSR HTML */
36
36
  declare function handlePageGet(handler: PageHandler, headFn: PageHeadHandler, c: CloudContext, componentId: string, renderFn: RenderPage, getAssetTags: GetAssetTags, configHead?: HeadConfig, options?: PageRenderOptions): Promise<Response>;
37
- /** Handle POST/PUT/DELETE page request — run mutation, then re-run GET or redirect */
37
+ /** Handle POST/PUT/PATCH/DELETE page request — run mutation, then re-run GET or redirect */
38
38
  declare function handlePageMutation(mutationHandler: PageHandler, getHandler: PageHandler, headFn: PageHeadHandler, c: CloudContext, componentId: string, renderFn: RenderPage, getAssetTags: GetAssetTags, configHead?: HeadConfig, options?: PageRenderOptions): Promise<Response>;
39
39
  //#endregion
40
40
  export { handlePageMutation as a, handlePageGet as i, PageRenderResult as n, safeJsonStringify as o, flattenValidationErrors as r, PageObject as t };