void 0.10.4 → 0.10.6

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 (217) hide show
  1. package/dist/agents-Bmr5tFFb.mjs +1454 -0
  2. package/dist/{auth-cmd-CblKzAdD.mjs → auth-cmd-DlgNwByu.mjs} +10 -10
  3. package/dist/{better-auth-shared-D0Mbmx5V.mjs → better-auth-shared-BQooDxbw.mjs} +1 -1
  4. package/dist/{better-auth-shared-jkksALri.d.mts → better-auth-shared-BvnM9px6.d.mts} +2 -2
  5. package/dist/{build-cmd-CJQSRupz.mjs → build-cmd-Br8qL0rA.mjs} +15 -17
  6. package/dist/{cache-CMzjhxHh.mjs → cache-wH-mP8UE.mjs} +10 -12
  7. package/dist/{cancel-deploy-S2N8NSv6.mjs → cancel-deploy-BEBOEgtu.mjs} +16 -18
  8. package/dist/cli/cli.mjs +62 -51
  9. package/dist/{client-YIzxv2ZO.mjs → client-Cj96iiBH.mjs} +118 -8
  10. package/dist/{config-8dLIngKW.mjs → config-1twldYCW.mjs} +10 -10
  11. package/dist/{config--wXmVOoe.mjs → config-BdUctCZD.mjs} +6 -6
  12. package/dist/{create-project-pLQdzEPe.mjs → create-project-DD9n8Ho-.mjs} +28 -23
  13. package/dist/{db-hAmBumot.mjs → db-DjKE2-A-.mjs} +151 -150
  14. package/dist/{delete-CfSe3EJO.mjs → delete-D2kr3Kmk.mjs} +13 -15
  15. package/dist/{deploy-DpOdwtla.mjs → deploy-C4PbkFyE.mjs} +114 -119
  16. package/dist/{discover-C8N1I4tK.mjs → discover-BuVVSAum.mjs} +4 -4
  17. package/dist/{dist-5cGIJHQQ.mjs → dist-BuiRJkTd.mjs} +59 -27
  18. package/dist/{domain-CkowysQx.mjs → domain-_luIsM_B.mjs} +14 -16
  19. package/dist/{env-CIwG2y7G.mjs → env-CO5XAS9t.mjs} +23 -25
  20. package/dist/{env-helpers-B_ks681T.d.mts → env-helpers-z4stu8uc.d.mts} +1 -1
  21. package/dist/{env-types-CaJaIRXU.mjs → env-types-D51bnR-c.mjs} +4 -4
  22. package/dist/{env-validation-LH6eoyW-.mjs → env-validation-CeC2FL66.mjs} +4 -4
  23. package/dist/{fetch-error-C6qffTl2.mjs → fetch-error-Dj3crt0e.mjs} +3 -3
  24. package/dist/{gen-q6McxXgE.mjs → gen-Cf79J4aw.mjs} +42 -44
  25. package/dist/{github-cmd-BvEKQmcD.mjs → github-cmd-DnqxyOsb.mjs} +197 -91
  26. package/dist/{handler-B7rCOy21.d.mts → handler-imD0UVDT.d.mts} +4 -5
  27. package/dist/{headers-BNWymgnH.mjs → headers-BwvFGhkx.mjs} +3 -3
  28. package/dist/index.d.mts +3 -3
  29. package/dist/index.mjs +102 -83
  30. package/dist/{init-CZP69LJu.mjs → init-KirOzVDs.mjs} +132 -134
  31. package/dist/link-CUmiosyb.mjs +45 -0
  32. package/dist/{list-B7qXBBjo.mjs → list-3GEw7b6m.mjs} +10 -12
  33. package/dist/{login-B3l_sDwT.mjs → login-DJReaT_Q.mjs} +14 -15
  34. package/dist/{logs-AXm660MB.mjs → logs-D-rQ56Lq.mjs} +9 -11
  35. package/dist/{magic-string.es-C1Fb0uxq.mjs → magic-string.es-ZQjdJFFn.mjs} +3 -3
  36. package/dist/{mcp-D2plINxM.mjs → mcp-D7yc0dXY.mjs} +2 -3
  37. package/dist/{node-B07cZs0d.mjs → node-yFFk626c.mjs} +6 -6
  38. package/dist/{package-json-Bg_GJdJB.mjs → package-json-B0NuUWGd.mjs} +1 -1
  39. package/dist/pages/client.d.mts +1 -1
  40. package/dist/pages/client.mjs +2 -1
  41. package/dist/pages/head-client.d.mts +1 -1
  42. package/dist/pages/head.d.mts +1 -1
  43. package/dist/pages/index.d.mts +2 -2
  44. package/dist/pages/index.mjs +5 -5
  45. package/dist/pages/islands-plugin.d.mts +1 -1
  46. package/dist/pages/islands-plugin.mjs +3 -3
  47. package/dist/pages/protocol.d.mts +2 -2
  48. package/dist/pages/protocol.mjs +5 -2
  49. package/dist/{plugin-inference-C3fLzFvP.mjs → plugin-inference-CJxi_fWI.mjs} +4 -4
  50. package/dist/{prepare-DRRboRqH.mjs → prepare-C_cVurhP.mjs} +15 -18
  51. package/dist/{preset-B7ZQZn0u.mjs → preset-CVvwCeIy.mjs} +4 -4
  52. package/dist/{project-cmd-InegJruy.mjs → project-cmd-DnU7u9QF.mjs} +13 -14
  53. package/dist/{project-paths-CCMrHYQm.mjs → project-paths-tpdR1mJR.mjs} +2 -2
  54. package/dist/{project-tsconfig-BTNuNoJ0.mjs → project-tsconfig-D9uSVVpA.mjs} +4 -4
  55. package/dist/{protocol-6UZCowS1.d.mts → protocol-6hTJ04T1.d.mts} +3 -3
  56. package/dist/{resolve-project-D4O1_fZz.mjs → resolve-project-D2HI3TrG.mjs} +2 -2
  57. package/dist/{rollback-CHVE-DeT.mjs → rollback-Yh7bCKob.mjs} +21 -23
  58. package/dist/{route-types-D03ryMXz.mjs → route-types-CfKfhbIg.mjs} +234 -3
  59. package/dist/{runner-BQyKUqAL.mjs → runner-h272wcPj.mjs} +4 -5
  60. package/dist/{runner-pg-EuhrFW3D.mjs → runner-pg-waxJOnBb.mjs} +1 -1
  61. package/dist/runtime/ai.mjs +2 -2
  62. package/dist/runtime/auth.d.mts +1 -1
  63. package/dist/runtime/better-auth-pg.d.mts +1 -1
  64. package/dist/runtime/better-auth-pg.mjs +3 -3
  65. package/dist/runtime/better-auth.d.mts +1 -1
  66. package/dist/runtime/better-auth.mjs +2 -2
  67. package/dist/runtime/client-react.d.mts +2 -2
  68. package/dist/runtime/client-react.mjs +1 -1
  69. package/dist/runtime/client-solid.d.mts +2 -2
  70. package/dist/runtime/client-solid.mjs +1 -1
  71. package/dist/runtime/client-svelte.d.mts +2 -2
  72. package/dist/runtime/client-svelte.mjs +1 -1
  73. package/dist/runtime/client-vue.d.mts +2 -2
  74. package/dist/runtime/client-vue.mjs +1 -1
  75. package/dist/runtime/client.d.mts +2 -2
  76. package/dist/runtime/client.mjs +1 -1
  77. package/dist/runtime/db-pg.d.mts +1 -1
  78. package/dist/runtime/env-helpers.d.mts +1 -1
  79. package/dist/runtime/env-public-client.d.mts +1 -1
  80. package/dist/runtime/env-public-client.mjs +2 -0
  81. package/dist/runtime/env-public.d.mts +3 -4
  82. package/dist/runtime/env-public.mjs +3 -1
  83. package/dist/runtime/env.mjs +1 -1
  84. package/dist/runtime/fetch-stream.d.mts +1 -1
  85. package/dist/runtime/fetch-stream.mjs +1 -1
  86. package/dist/runtime/fetch.d.mts +1 -1
  87. package/dist/runtime/fetch.mjs +1 -1
  88. package/dist/runtime/handler.d.mts +2 -2
  89. package/dist/runtime/handler.mjs +1 -1
  90. package/dist/runtime/isr.mjs +1 -1
  91. package/dist/runtime/live-server.mjs +2 -0
  92. package/dist/runtime/live.d.mts +2 -2
  93. package/dist/runtime/live.mjs +3 -1
  94. package/dist/runtime/migration-handler-pg.mjs +1 -1
  95. package/dist/runtime/migration-handler.mjs +1 -1
  96. package/dist/runtime/remote/index.mjs +11 -1
  97. package/dist/runtime/sandbox.d.mts +1 -4
  98. package/dist/runtime/sandbox.mjs +1 -1
  99. package/dist/runtime/validator.d.mts +1 -1
  100. package/dist/runtime/ws-server.d.mts +2 -2
  101. package/dist/runtime/ws-server.mjs +2 -0
  102. package/dist/runtime/ws.d.mts +3 -3
  103. package/dist/runtime/ws.mjs +2 -0
  104. package/dist/{scan-VCAM1oh3.mjs → scan-Dp_Gyzs3.mjs} +3 -3
  105. package/dist/{scan-DGEp1-1Q.mjs → scan-i7Yz54fv.mjs} +26 -8
  106. package/dist/{secret-CVKwIOm3.mjs → secret-u7FRvg8d.mjs} +22 -24
  107. package/dist/{skills-Dl3u05da.mjs → skills-DsdNDtX3.mjs} +6 -7
  108. package/dist/{subcommand-prompt-B8ng0FTS.mjs → subcommand-prompt-DtES-oP6.mjs} +34 -35
  109. package/dist/sveltekit.mjs +2 -2
  110. package/dist/validate-DT7nFMlf.mjs +504 -0
  111. package/dist/{yarn-pnp-WLW2IHUY.mjs → yarn-pnp-CW8LB6g_.mjs} +1 -1
  112. package/package.json +19 -19
  113. package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/CHANGELOG.md +94 -0
  114. package/skills/void/docs/node_modules/void/node_modules/@clack/prompts/README.md +32 -11
  115. package/skills/void/docs/node_modules/void/node_modules/@cloudflare/sandbox/README.md +45 -0
  116. package/skills/void/docs/node_modules/void/node_modules/@electric-sql/pglite/README.md +5 -5
  117. package/skills/void/docs/node_modules/void/node_modules/@types/node/README.md +1 -1
  118. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/@types/node/README.md +1 -1
  119. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-exit/README.md +4 -1
  120. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/markdown-it-attrs/README.md +29 -12
  121. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/tinyglobby/README.md +1 -1
  122. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/AGENTS.md +1 -0
  123. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/README.md +18 -6
  124. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/build.md +1 -1
  125. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/check.md +35 -0
  126. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/create.md +70 -0
  127. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/fmt.md +3 -1
  128. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/index.md +11 -7
  129. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/lint.md +3 -1
  130. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/pack.md +1 -1
  131. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/run.md +141 -26
  132. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/staged.md +1 -1
  133. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/config/test.md +1 -1
  134. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +145 -0
  135. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/cache.md +16 -28
  136. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/check.md +16 -0
  137. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ci.md +15 -17
  138. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/commit-hooks.md +9 -0
  139. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/create.md +255 -2
  140. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/docker.md +175 -0
  141. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/env.md +70 -5
  142. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/github-actions-cache.md +165 -0
  143. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/ide-integration.md +2 -2
  144. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/index.md +9 -3
  145. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/install.md +63 -11
  146. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate-rules.md +347 -0
  147. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/migrate.md +27 -3
  148. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/monorepo.md +176 -0
  149. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/pack.md +8 -0
  150. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/run.md +36 -4
  151. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/troubleshooting.md +11 -35
  152. package/skills/void/docs/node_modules/void/node_modules/@void/md/node_modules/vite-plus/docs/guide/upgrade.md +65 -13
  153. package/skills/void/docs/node_modules/void/node_modules/es-module-lexer/README.md +403 -390
  154. package/skills/void/docs/node_modules/void/node_modules/pg/README.md +2 -1
  155. package/skills/void/docs/node_modules/void/node_modules/tinyglobby/README.md +1 -1
  156. package/skills/void/docs/node_modules/void/node_modules/vite-plus/AGENTS.md +1 -0
  157. package/skills/void/docs/node_modules/void/node_modules/vite-plus/README.md +18 -6
  158. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/build.md +1 -1
  159. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/check.md +35 -0
  160. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/create.md +70 -0
  161. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/fmt.md +3 -1
  162. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/index.md +11 -7
  163. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/lint.md +3 -1
  164. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/pack.md +1 -1
  165. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/run.md +141 -26
  166. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/staged.md +1 -1
  167. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/config/test.md +1 -1
  168. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/automatic-data-tracking.md +145 -0
  169. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/cache.md +16 -28
  170. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/check.md +16 -0
  171. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ci.md +15 -17
  172. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/commit-hooks.md +9 -0
  173. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/create.md +255 -2
  174. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/docker.md +175 -0
  175. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/env.md +70 -5
  176. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/github-actions-cache.md +165 -0
  177. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/ide-integration.md +2 -2
  178. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/index.md +9 -3
  179. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/install.md +63 -11
  180. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate-rules.md +347 -0
  181. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/migrate.md +27 -3
  182. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/monorepo.md +176 -0
  183. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/pack.md +8 -0
  184. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/run.md +36 -4
  185. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/troubleshooting.md +11 -35
  186. package/skills/void/docs/node_modules/void/node_modules/vite-plus/docs/guide/upgrade.md +65 -13
  187. package/skills/void/docs/reference/cli.md +19 -1
  188. package/dist/agents-MhSzNMiC.mjs +0 -151
  189. package/dist/collect-9rO3JFNM.mjs +0 -55
  190. package/dist/config-hhMYPVRT.mjs +0 -21
  191. package/dist/dist-abzUneor.mjs +0 -1287
  192. package/dist/drizzle-DqstQTGq.mjs +0 -232
  193. package/dist/link-BKLElphS.mjs +0 -47
  194. package/dist/output-DeiS4oEX.mjs +0 -139
  195. package/dist/plan-aD3wRDqF.mjs +0 -271
  196. package/dist/project-CH9pdo16.mjs +0 -72
  197. package/dist/project-slug-rX3kTOfY.mjs +0 -10
  198. package/dist/validate-CNWm-PsL.mjs +0 -186
  199. /package/dist/{auth-migrations-BP-hMzYl.mjs → auth-migrations-BTZ-ATvQ.mjs} +0 -0
  200. /package/dist/{auth-Dz2CCn4T.d.mts → auth-qgMlYp7Z.d.mts} +0 -0
  201. /package/dist/{canonical-json-CEyQaVDa.mjs → canonical-json-DuDiiUsQ.mjs} +0 -0
  202. /package/dist/{cf-access-DKDsgwOU.mjs → cf-access-Bqw81xAf.mjs} +0 -0
  203. /package/dist/{defer-C-bdSM_b.mjs → defer-YsYDUoii.mjs} +0 -0
  204. /package/dist/{dotenv-lS94ymhM.mjs → dotenv-D_UbC_vc.mjs} +0 -0
  205. /package/dist/{env-raw-Dtj1UAoK.mjs → env-raw-CoS20LHP.mjs} +0 -0
  206. /package/dist/{fetch-error-B6RaJ-eZ.d.mts → fetch-error-Sp1R4mZv.d.mts} +0 -0
  207. /package/dist/{git-metadata-Ce0AtSZL.mjs → git-metadata-CBKaL0v5.mjs} +0 -0
  208. /package/dist/{head-eOUCWUNy.d.mts → head-nmvOgFjd.d.mts} +0 -0
  209. /package/dist/{log-BdD_Fpms.mjs → log-ChfPKsVd.mjs} +0 -0
  210. /package/dist/{pathe.M-eThtNZ-BrPhGF_K.mjs → pathe.M-eThtNZ-CQzLbt4c.mjs} +0 -0
  211. /package/dist/{pg-CempqvEJ.mjs → pg-J2HbZIkX.mjs} +0 -0
  212. /package/dist/{providers-BJIoduK9.d.mts → providers-BNKRacMr.d.mts} +0 -0
  213. /package/dist/{providers-BwPbdHdi.mjs → providers-CJlNS3kT.mjs} +0 -0
  214. /package/dist/{proxy-M3pxItg2.mjs → proxy-D-3_D-Gl.mjs} +0 -0
  215. /package/dist/{chunk-DJd-R1mw.mjs → rolldown-runtime-DJK8HYOj.mjs} +0 -0
  216. /package/dist/{standard-schema-Cy0lfeWv.d.mts → standard-schema-DJ0HW7QP.d.mts} +0 -0
  217. /package/dist/{types-BodZGegX.d.mts → types-lLjNE9Qp.d.mts} +0 -0
@@ -1,10 +1,8 @@
1
- import { n as __exportAll } from "./chunk-DJd-R1mw.mjs";
2
- import { a as join } from "./pathe.M-eThtNZ-BrPhGF_K.mjs";
3
- import { s as import_picocolors } from "./output-DeiS4oEX.mjs";
4
- import { t as cfAccessHeaders } from "./cf-access-DKDsgwOU.mjs";
5
- import { t as isVoidInternalStaging } from "./project-CH9pdo16.mjs";
6
- import { r as getPackageDir } from "./agents-MhSzNMiC.mjs";
7
- import { mkdirSync, readFileSync, writeFileSync } from "node:fs";
1
+ import { n as __exportAll } from "./rolldown-runtime-DJK8HYOj.mjs";
2
+ import { a as join, n as dirname } from "./pathe.M-eThtNZ-CQzLbt4c.mjs";
3
+ import { r as getPackageDir, u as import_picocolors } from "./agents-Bmr5tFFb.mjs";
4
+ import { t as cfAccessHeaders } from "./cf-access-Bqw81xAf.mjs";
5
+ import { mkdirSync, readFileSync, rmSync, writeFileSync } from "node:fs";
8
6
  import { createHash, randomBytes } from "node:crypto";
9
7
  import { homedir } from "node:os";
10
8
  import { Entry } from "@napi-rs/keyring";
@@ -81,6 +79,74 @@ function isGatedHost(apiUrl) {
81
79
  }
82
80
  }
83
81
  //#endregion
82
+ //#region src/cli/project.ts
83
+ var project_exports = /* @__PURE__ */ __exportAll({
84
+ isVoidInternalStaging: () => isVoidInternalStaging,
85
+ readProjectConfig: () => readProjectConfig,
86
+ removeProjectConfig: () => removeProjectConfig,
87
+ writeProjectConfig: () => writeProjectConfig
88
+ });
89
+ const PROJECT_FILE = ".void/project.json";
90
+ function readProjectConfigFile(root) {
91
+ const filePath = join(root, PROJECT_FILE);
92
+ try {
93
+ const raw = readFileSync(filePath, "utf-8");
94
+ const config = JSON.parse(raw);
95
+ if (typeof config !== "object" || config === null || Array.isArray(config)) return null;
96
+ return config;
97
+ } catch {
98
+ return null;
99
+ }
100
+ }
101
+ /**
102
+ * Read the project config from the project root.
103
+ * Returns null if no project.json exists.
104
+ * A file containing only internal metadata is not treated as a linked project.
105
+ */
106
+ function readProjectConfig(root) {
107
+ const config = readProjectConfigFile(root);
108
+ if (!config || typeof config.projectId !== "string" || typeof config.slug !== "string") return null;
109
+ const result = {
110
+ projectId: config.projectId,
111
+ slug: config.slug
112
+ };
113
+ if (config.voidInternalStaging === true) result.voidInternalStaging = true;
114
+ return result;
115
+ }
116
+ /**
117
+ * Internal-only platform developers' staging switch.
118
+ * This intentionally lives with the project link state, not public void.json.
119
+ */
120
+ function isVoidInternalStaging(root) {
121
+ return readProjectConfigFile(root)?.voidInternalStaging === true;
122
+ }
123
+ /**
124
+ * Write the project config to the project root.
125
+ */
126
+ function writeProjectConfig(root, config) {
127
+ const filePath = join(root, PROJECT_FILE);
128
+ const existing = readProjectConfigFile(root);
129
+ const next = {
130
+ projectId: config.projectId,
131
+ slug: config.slug
132
+ };
133
+ if (config.voidInternalStaging === true || existing?.voidInternalStaging === true) next.voidInternalStaging = true;
134
+ mkdirSync(dirname(filePath), { recursive: true });
135
+ writeFileSync(filePath, JSON.stringify(next, null, 2) + "\n");
136
+ }
137
+ /**
138
+ * Remove the project config file. Returns true if removed, false if it didn't exist.
139
+ */
140
+ function removeProjectConfig(root) {
141
+ const filePath = join(root, PROJECT_FILE);
142
+ try {
143
+ rmSync(filePath);
144
+ return true;
145
+ } catch {
146
+ return false;
147
+ }
148
+ }
149
+ //#endregion
84
150
  //#region src/cli/auth.ts
85
151
  const CONFIG_DIR = join(homedir(), ".void");
86
152
  const CONFIG_PATH = join(CONFIG_DIR, "config.json");
@@ -873,6 +939,25 @@ var PlatformClient = class {
873
939
  if (!res.ok) await throwPlatformApiError("Failed to connect GitHub repository", res);
874
940
  return res.json();
875
941
  }
942
+ /**
943
+ * Start the per-repo connect-authorization round-trip used by a non-owner org
944
+ * member (Task 7 platform contract). The callback redirects back to `redirect`
945
+ * with either `?connect_grant=<signed>` (proof of per-repo access) or
946
+ * `?error=repo_not_accessible`. Mirrors {@link getGithubLinkUrl} but carries
947
+ * the installation + repo the grant is scoped to.
948
+ */
949
+ async getGithubConnectAuthorizeUrl(redirect, codeChallenge, installationId, repoFullName) {
950
+ const params = new URLSearchParams({
951
+ redirect,
952
+ code_challenge: codeChallenge,
953
+ code_challenge_method: "S256",
954
+ installationId,
955
+ repoFullName
956
+ });
957
+ const res = await fetch(`${this.baseUrl}/github/connect-authorize-url?${params}`, { headers: { ...this.authHeaders } });
958
+ if (!res.ok) await throwPlatformApiError("Failed to start GitHub connect authorization", res);
959
+ return res.json();
960
+ }
876
961
  async getGithubConnection(projectId) {
877
962
  const res = await fetch(`${this.baseUrl}/projects/${projectId}/github`, { headers: { ...this.authHeaders } });
878
963
  if (!res.ok) await throwPlatformApiError("Failed to get GitHub connection", res);
@@ -915,6 +1000,31 @@ var PlatformClient = class {
915
1000
  if (!res.ok) await throwPlatformApiError("Failed to complete GitHub link", res);
916
1001
  return res.json();
917
1002
  }
1003
+ async getGithubJoinUrl(redirect, codeChallenge) {
1004
+ const params = new URLSearchParams({
1005
+ redirect,
1006
+ code_challenge: codeChallenge,
1007
+ code_challenge_method: "S256"
1008
+ });
1009
+ const res = await fetch(`${this.baseUrl}/github/join-url?${params}`, { headers: { ...this.authHeaders } });
1010
+ if (!res.ok) await throwPlatformApiError("Failed to start GitHub join", res);
1011
+ return res.json();
1012
+ }
1013
+ async completeGithubJoin(joinCode, codeVerifier) {
1014
+ const res = await fetch(`${this.baseUrl}/github/join/complete`, {
1015
+ method: "POST",
1016
+ headers: {
1017
+ "Content-Type": "application/json",
1018
+ ...this.authHeaders
1019
+ },
1020
+ body: JSON.stringify({
1021
+ join_code: joinCode,
1022
+ code_verifier: codeVerifier
1023
+ })
1024
+ });
1025
+ if (!res.ok) await throwPlatformApiError("Failed to complete GitHub join", res);
1026
+ return res.json();
1027
+ }
918
1028
  };
919
1029
  //#endregion
920
- export { runLogin as _, isExpiredTokenError as a, createCodeChallenge as c, getSiteDomain as d, getToken as f, removeToken as g, openBrowser as h, isCliOutdatedError as i, createCodeVerifier as l, isStagingMode as m, PlatformClient as n, parsePlatformErrorBody as o, getTokenSource as p, client_exports as r, awaitBrowserCallback as s, PlatformApiError as t, getApiUrl as u, saveToken as v, ensureCloudflaredToken as y };
1030
+ export { ensureCloudflaredToken as C, writeProjectConfig as S, runLogin as _, isExpiredTokenError as a, readProjectConfig as b, createCodeChallenge as c, getSiteDomain as d, getToken as f, removeToken as g, openBrowser as h, isCliOutdatedError as i, createCodeVerifier as l, isStagingMode as m, PlatformClient as n, parsePlatformErrorBody as o, getTokenSource as p, client_exports as r, awaitBrowserCallback as s, PlatformApiError as t, getApiUrl as u, saveToken as v, removeProjectConfig as x, project_exports as y };
@@ -1,7 +1,7 @@
1
- import { n as __exportAll } from "./chunk-DJd-R1mw.mjs";
2
- import { a as join } from "./pathe.M-eThtNZ-BrPhGF_K.mjs";
3
- import { a as validateSourceDir } from "./project-paths-CCMrHYQm.mjs";
4
- import { i as isVoidAuthProvider, t as VOID_AUTH_PROVIDERS } from "./providers-BwPbdHdi.mjs";
1
+ import { n as __exportAll } from "./rolldown-runtime-DJK8HYOj.mjs";
2
+ import { a as join } from "./pathe.M-eThtNZ-CQzLbt4c.mjs";
3
+ import { a as validateSourceDir } from "./project-paths-tpdR1mJR.mjs";
4
+ import { i as isVoidAuthProvider, t as VOID_AUTH_PROVIDERS } from "./providers-CJlNS3kT.mjs";
5
5
  import { readFileSync } from "node:fs";
6
6
  //#region src/config.ts
7
7
  var config_exports = /* @__PURE__ */ __exportAll({
@@ -21,34 +21,34 @@ var config_exports = /* @__PURE__ */ __exportAll({
21
21
  resolveBindingNames: () => resolveBindingNames
22
22
  });
23
23
  const CONFIG_FILE = "void.json";
24
- const VALID_TARGETS = new Set([
24
+ const VALID_TARGETS = /* @__PURE__ */ new Set([
25
25
  "cloudflare",
26
26
  "node",
27
27
  "bun",
28
28
  "deno"
29
29
  ]);
30
- const VALID_APP_TYPES = new Set([
30
+ const VALID_APP_TYPES = /* @__PURE__ */ new Set([
31
31
  "spa",
32
32
  "static",
33
33
  "void",
34
34
  "framework"
35
35
  ]);
36
- const VALID_OUTPUTS = new Set(["server", "static"]);
36
+ const VALID_OUTPUTS = /* @__PURE__ */ new Set(["server", "static"]);
37
37
  /**
38
38
  * Allowed 3xx redirect statuses. Source of truth for the framework, the
39
39
  * `_redirects` parser (`cli/headers.ts`), and the schema.json enum. 303 is
40
40
  * included for POST→GET after-submit patterns; 304/305/306 aren't
41
41
  * cacheable-safe / are deprecated.
42
42
  */
43
- const VALID_REDIRECT_STATUSES = new Set([
43
+ const VALID_REDIRECT_STATUSES = /* @__PURE__ */ new Set([
44
44
  301,
45
45
  302,
46
46
  303,
47
47
  307,
48
48
  308
49
49
  ]);
50
- const VALID_DATABASE_VALUES = new Set(["pg"]);
51
- const VALID_SANDBOX_INSTANCE_TYPES = new Set([
50
+ const VALID_DATABASE_VALUES = /* @__PURE__ */ new Set(["pg"]);
51
+ const VALID_SANDBOX_INSTANCE_TYPES = /* @__PURE__ */ new Set([
52
52
  "dev",
53
53
  "lite",
54
54
  "basic",
@@ -1,7 +1,7 @@
1
- import { n as __exportAll } from "./chunk-DJd-R1mw.mjs";
2
- import { a as join, s as relative } from "./pathe.M-eThtNZ-BrPhGF_K.mjs";
3
- import { n as readProjectPaths } from "./project-paths-CCMrHYQm.mjs";
4
- import { r as schemaSpecifier, t as discoverSchema } from "./discover-C8N1I4tK.mjs";
1
+ import { n as __exportAll } from "./rolldown-runtime-DJK8HYOj.mjs";
2
+ import { a as join, s as relative } from "./pathe.M-eThtNZ-CQzLbt4c.mjs";
3
+ import { n as readProjectPaths } from "./project-paths-tpdR1mJR.mjs";
4
+ import { r as schemaSpecifier, t as discoverSchema } from "./discover-BuVVSAum.mjs";
5
5
  import { mkdirSync, writeFileSync } from "node:fs";
6
6
  //#region src/drizzle/config.ts
7
7
  var config_exports = /* @__PURE__ */ __exportAll({ writeDrizzleConfig: () => writeDrizzleConfig });
@@ -21,13 +21,13 @@ function writeDrizzleConfig(root, dbPath, dialect = "sqlite") {
21
21
  const config = dialect === "postgresql" ? {
22
22
  dialect: "postgresql",
23
23
  schema: schemaSpecifier(schema, root),
24
- out: `./${relative(root, paths.migrationsDir).replace(/\\/g, "/")}`,
24
+ out: `./${relative(root, paths.migrationsDir)}`,
25
25
  migrations: { prefix: "timestamp" },
26
26
  dbCredentials: { url: dbPath }
27
27
  } : {
28
28
  dialect: "sqlite",
29
29
  schema: schemaSpecifier(schema, root),
30
- out: `./${relative(root, paths.migrationsDir).replace(/\\/g, "/")}`,
30
+ out: `./${relative(root, paths.migrationsDir)}`,
31
31
  migrations: { prefix: "timestamp" },
32
32
  dbCredentials: { url: dbPath }
33
33
  };
@@ -1,13 +1,18 @@
1
- import { n as __exportAll } from "./chunk-DJd-R1mw.mjs";
2
- import { s as import_picocolors } from "./output-DeiS4oEX.mjs";
3
- import { d as getSiteDomain, t as PlatformApiError } from "./client-YIzxv2ZO.mjs";
4
- import { _ as me, c as R, i as Ee, l as Re, v as ue, x as q } from "./dist-abzUneor.mjs";
5
- import { a as writeProjectConfig } from "./project-CH9pdo16.mjs";
6
- import { n as validateProjectSlug } from "./project-slug-rX3kTOfY.mjs";
7
- import { n as inferDefaultSlug } from "./resolve-project-D4O1_fZz.mjs";
1
+ import { n as __exportAll } from "./rolldown-runtime-DJK8HYOj.mjs";
2
+ import { A as text, S as confirm, T as log, j as isCancel, k as select, u as import_picocolors, x as cancel } from "./agents-Bmr5tFFb.mjs";
3
+ import { S as writeProjectConfig, d as getSiteDomain, t as PlatformApiError } from "./client-Cj96iiBH.mjs";
4
+ import { n as inferDefaultSlug } from "./resolve-project-D2HI3TrG.mjs";
5
+ //#region src/cli/project-slug.ts
6
+ var project_slug_exports = /* @__PURE__ */ __exportAll({ validateProjectSlug: () => validateProjectSlug });
7
+ function validateProjectSlug(value) {
8
+ const slug = (value ?? "").trim();
9
+ if (slug.length === 0) return "Project slug is required.";
10
+ if (!(slug.length === 1 ? /^[a-z0-9]$/.test(slug) : /^[a-z0-9][a-z0-9-]*[a-z0-9]$/.test(slug))) return "Slug must be lowercase alphanumeric with dashes.";
11
+ }
12
+ //#endregion
8
13
  //#region src/cli/prompt.ts
9
14
  async function promptProjectSetupAction(message = "Set up a Void project:", options = {}) {
10
- const result = await Ee({
15
+ const result = await select({
11
16
  message,
12
17
  options: [{
13
18
  value: "create",
@@ -17,14 +22,14 @@ async function promptProjectSetupAction(message = "Set up a Void project:", opti
17
22
  label: "Link an existing project"
18
23
  }]]
19
24
  });
20
- if (q(result)) {
21
- me("Deploy cancelled.");
25
+ if (isCancel(result)) {
26
+ cancel("Deploy cancelled.");
22
27
  process.exit(0);
23
28
  }
24
29
  return result;
25
30
  }
26
31
  async function promptProjectSelection(projects, message = "Select a project:", root = process.cwd(), options = {}) {
27
- const result = await Ee({
32
+ const result = await select({
28
33
  message,
29
34
  options: [...options.includeCreate === false ? [] : [{
30
35
  value: "__create__",
@@ -34,16 +39,16 @@ async function promptProjectSelection(projects, message = "Select a project:", r
34
39
  label: `${p.slug} (${p.slug}.${getSiteDomain(root)})`
35
40
  }))]
36
41
  });
37
- if (q(result)) {
38
- me("Deploy cancelled.");
42
+ if (isCancel(result)) {
43
+ cancel("Deploy cancelled.");
39
44
  process.exit(0);
40
45
  }
41
46
  if (result === "__create__") return { action: "create" };
42
47
  const project = projects.find((p) => p.id === result);
43
48
  if (options.confirmExisting) {
44
- const confirmed = await ue({ message: `Linking to an existing project. Running \`void deploy\` will overwrite the current deployment of ${project.slug}.${getSiteDomain(root)}. Continue?` });
45
- if (q(confirmed) || !confirmed) {
46
- me("Project link cancelled.");
49
+ const confirmed = await confirm({ message: `Linking to an existing project. Running \`void deploy\` will overwrite the current deployment of ${project.slug}.${getSiteDomain(root)}. Continue?` });
50
+ if (isCancel(confirmed) || !confirmed) {
51
+ cancel("Project link cancelled.");
47
52
  process.exit(0);
48
53
  }
49
54
  }
@@ -53,14 +58,14 @@ async function promptProjectSelection(projects, message = "Select a project:", r
53
58
  };
54
59
  }
55
60
  async function promptProjectSlug(defaultSlug) {
56
- const result = await Re({
61
+ const result = await text({
57
62
  message: "Choose a slug for your new Void project:",
58
63
  placeholder: "my-app",
59
64
  initialValue: defaultSlug,
60
65
  validate: validateProjectSlug
61
66
  });
62
- if (q(result)) {
63
- me("Deploy cancelled.");
67
+ if (isCancel(result)) {
68
+ cancel("Deploy cancelled.");
64
69
  process.exit(0);
65
70
  }
66
71
  return result.trim();
@@ -87,14 +92,14 @@ async function createProjectWithSlugRetry(client, initialDefaultSlug, promptSlug
87
92
  const slug = await promptSlug(defaultSlug);
88
93
  if (slug === void 0) return;
89
94
  try {
90
- R.step(`Creating project ${import_picocolors.default.blue(slug)}...`);
95
+ log.step(`Creating project ${import_picocolors.default.blue(slug)}...`);
91
96
  const project = await client.createProject(slug);
92
- R.success(`Project created: ${import_picocolors.default.blue(project.slug)}`);
97
+ log.success(`Project created: ${import_picocolors.default.blue(project.slug)}`);
93
98
  return project;
94
99
  } catch (error) {
95
100
  if (error instanceof PlatformApiError && isRetryableCreateError(error)) {
96
101
  const reason = error.code || error.body || `HTTP ${error.status}`;
97
- R.error(`project: Could not create project '${slug}': ${reason}.`);
102
+ log.error(`project: Could not create project '${slug}': ${reason}.`);
98
103
  defaultSlug = slug;
99
104
  continue;
100
105
  }
@@ -121,4 +126,4 @@ function isSlugRelatedError(error) {
121
126
  return `${error.code ?? ""} ${error.body ?? ""}`.toLowerCase().includes("slug");
122
127
  }
123
128
  //#endregion
124
- export { promptProjectSetupAction as i, promptAndCreateProject as n, promptProjectSelection as r, create_project_exports as t };
129
+ export { project_slug_exports as a, promptProjectSetupAction as i, promptAndCreateProject as n, promptProjectSelection as r, create_project_exports as t };