void 0.27.0 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/README.md +3 -1
  2. package/dist/{account-cmd-l-FM7Ioq.mjs → account-cmd-BTcUzv9L.mjs} +6 -6
  3. package/dist/{agents-B_pX_HmQ.mjs → agents-CuNtT0D_.mjs} +5 -2
  4. package/dist/{application-analysis-DKy02UY0.mjs → application-analysis-AB_YYWgH.mjs} +118 -135
  5. package/dist/{application-routing-DQyUh_5S.mjs → application-routing-L7V-TFhZ.mjs} +1 -2
  6. package/dist/atomic-write-Dq6R0BPN.mjs +18 -0
  7. package/dist/{auth-Dn2vw-SG.mjs → auth-B6iOCjKI.mjs} +23 -56
  8. package/dist/auth-Cbqi1iVX.mjs +1 -0
  9. package/dist/{auth-link-vz9Z2kmG.mjs → auth-link-DUJuvRx5.mjs} +11 -11
  10. package/dist/{auth-migrations-BwHgeEsD.mjs → auth-migrations-Cgs0k6lS.mjs} +28 -5
  11. package/dist/{auth-router-DvsCUVw4.mjs → auth-router-CIxiMG7i.mjs} +5 -5
  12. package/dist/base64-DVrOndmI.mjs +16 -0
  13. package/dist/{better-auth-shared-CPvWD3nG.d.mts → better-auth-shared-B74NJIus.d.mts} +8 -13
  14. package/dist/{better-auth-shared-DPpj8zxc.mjs → better-auth-shared-CMXlZG7W.mjs} +56 -68
  15. package/dist/{build-cmd-D6we0VjO.mjs → build-cmd-BkIv25PA.mjs} +6 -6
  16. package/dist/{cache-CZRdzKx1.mjs → cache-Ctzfig-W.mjs} +6 -6
  17. package/dist/{cancel-deploy-CQ3NnMvf.mjs → cancel-deploy-CD9o-SsC.mjs} +5 -5
  18. package/dist/{cf-access-TWNzXltp.mjs → cf-access-BM9G0lhO.mjs} +4 -3
  19. package/dist/{cf-access-BcIBSKqG.mjs → cf-access-CWP4avfP.mjs} +3 -7
  20. package/dist/cf-build-output-BU3hqdHu.mjs +1 -0
  21. package/dist/{cf-build-output-DjvB_872.mjs → cf-build-output-Bc8i3dzE.mjs} +2 -2
  22. package/dist/cf-user-agent-ChjQp2MU.mjs +33 -0
  23. package/dist/cli/cli.mjs +199 -312
  24. package/dist/cli/cloudflare-operation-process.mjs +41 -15
  25. package/dist/cli/env-schema-probe.d.mts +7 -44
  26. package/dist/cli/env-schema-probe.mjs +14 -80
  27. package/dist/client-B60PwCC4.mjs +1 -0
  28. package/dist/{client-DlDJuY0s.mjs → client-DM9Kcf4e.mjs} +161 -415
  29. package/dist/{cloudflare-auth-CuxfF6OA.mjs → cloudflare-auth-CqFBDo52.mjs} +12 -39
  30. package/dist/{cloudflare-cmd-lHqNlJGW.mjs → cloudflare-cmd-BIAF_BIY.mjs} +7 -6
  31. package/dist/{cloudflare-config-BmhBv3HV.mjs → cloudflare-config-DV60XFFK.mjs} +16 -28
  32. package/dist/{cloudflare-connect-2G3rL2rP.mjs → cloudflare-connect-WjwnVOJA.mjs} +4 -4
  33. package/dist/{cloudflare-operations-CwI1bChl.mjs → cloudflare-operations-B42EZeJy.mjs} +26 -34
  34. package/dist/cloudflare-operations-CrSUFRzJ.mjs +1 -0
  35. package/dist/{cloudflare-process-2-TfIEzB.mjs → cloudflare-process-CeDWJRhj.mjs} +12 -7
  36. package/dist/collect-Cae8A7Zr.mjs +1 -0
  37. package/dist/{collect-DiTn9yr6.mjs → collect-xjffdCdk.mjs} +1 -1
  38. package/dist/{config-CSa15FvD.d.mts → config-7qoq2p9v.d.mts} +2 -2
  39. package/dist/{config-CLYAosnQ.mjs → config-BEm9vRvS.mjs} +11 -5
  40. package/dist/{config-DiowPT80.mjs → config-Bx_1SpnO.mjs} +87 -177
  41. package/dist/{config-DPByhVck.mjs → config-D0GY5ItR.mjs} +1 -1
  42. package/dist/config-QrJWu0IX.mjs +1 -0
  43. package/dist/config-entry.d.mts +1 -1
  44. package/dist/{connect-BfPBHHm-.mjs → connect-CKtk-EZe.mjs} +9 -9
  45. package/dist/create-project-B-ewF_Af.mjs +1 -0
  46. package/dist/{create-project-BdXEFKal.mjs → create-project-yInGo72M.mjs} +8 -8
  47. package/dist/database-provider.mjs +1 -2
  48. package/dist/{db-Xs80hcaA.mjs → db-7I_gfdVq.mjs} +177 -268
  49. package/dist/db-types-Bb4WBWIs.mjs +49 -0
  50. package/dist/{delete-d2vuou3j.mjs → delete-Cy-M1u-r.mjs} +6 -6
  51. package/dist/deploy-9lgfhrXS.mjs +2 -0
  52. package/dist/deploy-BYYlnsiy.mjs +6164 -0
  53. package/dist/deploy-managed-static-Ca4TFdmx.mjs +1595 -0
  54. package/dist/deploy-transport-DWlWBe6M.mjs +180 -0
  55. package/dist/deploy.d.mts +10 -0
  56. package/dist/deploy.mjs +82 -0
  57. package/dist/dev-inbox-Rd6j_8vM.mjs +217 -0
  58. package/dist/discover-ClzFSwns.mjs +1 -0
  59. package/dist/{discover-CkCYv9T_.mjs → discover-D2PGT63u.mjs} +2 -2
  60. package/dist/dispatch-DrTTk8Xg.mjs +431 -0
  61. package/dist/{dist-D3m88sjf.mjs → dist-BVdsO7Py.mjs} +5 -6
  62. package/dist/dist-CfgIkieS.mjs +1 -0
  63. package/dist/{dist-BVqXeR_h.mjs → dist-ipQi0Q8y.mjs} +2 -3
  64. package/dist/{domain-BsDUBAvt.mjs → domain-CZGxPv9u.mjs} +8 -23
  65. package/dist/{dotenv-BfU6eqFt.mjs → dotenv-CNazY3-w.mjs} +4 -16
  66. package/dist/edge.mjs +1 -2
  67. package/dist/{email-d_Aux1vM.mjs → email-BcjSyAL0.mjs} +4 -20
  68. package/dist/{email-_lGAHOhp.mjs → email-DzyNVuoU.mjs} +100 -192
  69. package/dist/email-cloudflare-DfG6UEMm.mjs +1096 -0
  70. package/dist/email-protocol-D9nTvhCp.mjs +82 -0
  71. package/dist/{entry-CMAkqBmU.mjs → entry-ehmBvs5w.mjs} +2 -2
  72. package/dist/{env-DMA3cXZt.mjs → env-0jrMQJI_.mjs} +6 -14
  73. package/dist/{env-BxocywBB.mjs → env-BJjULvL0.mjs} +2 -2
  74. package/dist/{env-C74QepDE.mjs → env-Nx3yf50r.mjs} +9 -9
  75. package/dist/{env-public-DR7ZM6d-.d.mts → env-public-CCdykygU.d.mts} +6 -23
  76. package/dist/{env-raw-jZpP5n47.mjs → env-raw-D74P4ebM.mjs} +15 -21
  77. package/dist/{env-types-CwXgeMgL.mjs → env-types-DS2_y4X8.mjs} +2 -2
  78. package/dist/env-validation-BT7z-qpQ.mjs +1 -0
  79. package/dist/env-validation-DYxjz_Wo.mjs +488 -0
  80. package/dist/{gen-DtkQhvQg.mjs → gen-CufHEf42.mjs} +132 -254
  81. package/dist/gen-sXyp5DFO.mjs +1 -0
  82. package/dist/generate-ClI89brV.mjs +1 -0
  83. package/dist/{generate-GDbL7sUr.mjs → generate-Dat0UTry.mjs} +38 -4
  84. package/dist/generated-wrangler-config-DeWj5F9Y.mjs +18 -0
  85. package/dist/{github-cmd-DaDdBbSS.mjs → github-cmd-FU8EjFyU.mjs} +28 -72
  86. package/dist/{handler-BHAn2fZJ.mjs → handler-BZ1t7-Rv.mjs} +2 -2
  87. package/dist/{handler-CNAwjRcW.d.mts → handler-_PqY82xe.d.mts} +1 -1
  88. package/dist/{headers-DlfR78Nu.mjs → headers-Di1FsD3e.mjs} +26 -81
  89. package/dist/{help-0bTe_lID.mjs → help-BT2hovNI.mjs} +26 -14
  90. package/dist/help-i2YGGnTH.mjs +1 -0
  91. package/dist/{inbound-PfQDLXc5.mjs → inbound-BuTfm11U.mjs} +71 -222
  92. package/dist/{inbound-CH5Mksyy.d.mts → inbound-brj2-TM5.d.mts} +19 -58
  93. package/dist/index.d.mts +2 -18
  94. package/dist/index.mjs +714 -762
  95. package/dist/{info-PYWwkWyt.mjs → info-l249eUdH.mjs} +5 -5
  96. package/dist/{init-DaBGmaXC.mjs → init-D0A6M64Q.mjs} +229 -392
  97. package/dist/isr-config-fZaJJ8t7.mjs +165 -0
  98. package/dist/{link-C6fjafep.mjs → link-WMoJFf4i.mjs} +9 -9
  99. package/dist/{list-BTFBlqKl.mjs → list-CQ2EQEHL.mjs} +7 -18
  100. package/dist/{live-CgQuTpqD.mjs → live-BcHoTDFe.mjs} +19 -17
  101. package/dist/{live-Du8jXwOW.d.mts → live-DJONVlQK.d.mts} +1 -1
  102. package/dist/load-user-env-DD5qveNU.mjs +49 -0
  103. package/dist/{local-d1-ga5O_idV.mjs → local-d1-BxvQYEFi.mjs} +6 -6
  104. package/dist/{login-GKcNUmtI.mjs → login-C2T1oVG-.mjs} +12 -12
  105. package/dist/login-XD844Xs-.mjs +1 -0
  106. package/dist/{logs-BiMSULmc.mjs → logs-DnC1d7xB.mjs} +6 -6
  107. package/dist/{migrate-NLsjBbuM.mjs → migrate-BDIprOYd.mjs} +70 -22
  108. package/dist/migrate-BRwU-blY.mjs +1 -0
  109. package/dist/migration-handler-Cg0Y4EPu.mjs +470 -0
  110. package/dist/{migration-handler-DM4clYj5.d.mts → migration-handler-CwlEQUoo.d.mts} +17 -26
  111. package/dist/{mime-DxCznlJq.mjs → mime-srOklVVv.mjs} +92 -395
  112. package/dist/mysql-migration-sql-BIS5vbNk.mjs +241 -0
  113. package/dist/nitro.d.mts +30 -0
  114. package/dist/nitro.mjs +88 -0
  115. package/dist/{node-DJicPvPj.mjs → node-cPadMgUO.mjs} +9 -25
  116. package/dist/{operator-args-DOBhIaIg.mjs → operator-args-UnE8Y2eK.mjs} +27 -26
  117. package/dist/{operator-auth-BEZ_u0Cz.mjs → operator-auth-Cr2zCc-J.mjs} +2 -2
  118. package/dist/{operator-client-DbDv4vtE.mjs → operator-client-C-ROjk1I.mjs} +4 -4
  119. package/dist/operator-cmd-D6gnZsnK.mjs +1 -0
  120. package/dist/{operator-cmd-BT4hgavL.mjs → operator-cmd-DHieWtFp.mjs} +8 -8
  121. package/dist/{output-C50ag2r3.mjs → output-Ba6ZbrzY.mjs} +37 -6
  122. package/dist/{package-json-DXfiT1jV.mjs → package-json-BjYqR-So.mjs} +1 -1
  123. package/dist/pages/client.d.mts +1 -1
  124. package/dist/pages/client.mjs +91 -5
  125. package/dist/pages/head.mjs +1 -2
  126. package/dist/pages/index.d.mts +1 -2
  127. package/dist/pages/index.mjs +6 -6
  128. package/dist/pages/islands-plugin.mjs +5 -83
  129. package/dist/pages/prefetch.mjs +1 -2
  130. package/dist/pages/protocol.d.mts +2 -2
  131. package/dist/pages/protocol.mjs +1 -1
  132. package/dist/pages/serialize.mjs +1 -2
  133. package/dist/plan-CKX_jWnD.mjs +1 -0
  134. package/dist/platform-args-B0HeTh0C.mjs +1 -0
  135. package/dist/{platform-args-DUeXY9Om.mjs → platform-args-CaCL_1Ch.mjs} +43 -60
  136. package/dist/{platform-auth-config-CkSx3usH.mjs → platform-auth-config-Z16-I8nT.mjs} +11 -12
  137. package/dist/{platform-auth-protection-BJimB_p9.mjs → platform-auth-protection-BXwZiJSF.mjs} +37 -27
  138. package/dist/{platform-auth-recovery-BU6izFAU.mjs → platform-auth-recovery-CXjfqyOv.mjs} +9 -10
  139. package/dist/{platform-cmd-BbY1dWiM.mjs → platform-cmd-DaAOiWTl.mjs} +16 -16
  140. package/dist/platform-cmd-PT4YwMLM.mjs +1 -0
  141. package/dist/{platform-discovery-DIYz8V63.mjs → platform-discovery-CHhNs8Nn.mjs} +1 -1
  142. package/dist/{platform-domain-CHVS6cV0.mjs → platform-domain-CxpvUeo0.mjs} +6 -6
  143. package/dist/{platform-lifecycle-DzCwqhFq.mjs → platform-lifecycle-DBiS0cJd.mjs} +1693 -2120
  144. package/dist/platform-lifecycle-u9pMOvxC.mjs +1 -0
  145. package/dist/{platform-management-CuuVDhyt.mjs → platform-management-DhEFdQAf.mjs} +696 -130
  146. package/dist/platform-management-DvBS83rC.mjs +1 -0
  147. package/dist/{platform-plans-config-CN-heS4q.mjs → platform-plans-config-BWn1S2Rv.mjs} +16 -12
  148. package/dist/{platform-recovery-CskSJgLh.mjs → platform-recovery-BUGOB4RC.mjs} +6 -9
  149. package/dist/{platform-registry-Cjv2Qf0r.mjs → platform-registry-B9mWX9LO.mjs} +13 -18
  150. package/dist/{platform-setup-BBxRxmFC.mjs → platform-setup-YvN9VQXV.mjs} +21 -28
  151. package/dist/{plugin-inference-BlQbOL0P.mjs → plugin-inference-DsARdQKE.mjs} +18 -33
  152. package/dist/prepare-CYT6tAzD.mjs +1 -0
  153. package/dist/{prepare-Do96654b.mjs → prepare-DEB5SeVJ.mjs} +12 -13
  154. package/dist/{prepare-Dq9hTIbo.mjs → prepare-PQCgsny0.mjs} +4 -4
  155. package/dist/{prerender-render-Ct20jftc.mjs → prerender-render-Bfsumdkv.mjs} +8 -2
  156. package/dist/prerender-render.d.mts +2 -0
  157. package/dist/prerender-render.mjs +1 -2
  158. package/dist/{project-cmd-DaoRrn-8.mjs → project-cmd-DVatD8Ev.mjs} +20 -20
  159. package/dist/{project-paths-GgcMozYz.mjs → project-paths-DMvEeSau.mjs} +9 -14
  160. package/dist/{project-BAm2aB6Q.mjs → project-rqDnVsJN.mjs} +8 -4
  161. package/dist/project-slug-6cyz8E7k.mjs +1 -0
  162. package/dist/{project-team-Q_lCA7Io.mjs → project-team-DJrWEAG1.mjs} +7 -7
  163. package/dist/{project-token-BArgK9o1.mjs → project-token-CBgLBuL6.mjs} +6 -6
  164. package/dist/{project-tsconfig-CVJhNMxs.mjs → project-tsconfig-bveqhlYA.mjs} +3 -5
  165. package/dist/project-zdB3fs9G.mjs +1 -0
  166. package/dist/{project-zero-trust-KO9Hu2Pq.mjs → project-zero-trust-92gLtZ25.mjs} +6 -6
  167. package/dist/{protocol-BPZaNqBo.d.mts → protocol-4H7V_3Os.d.mts} +1 -1
  168. package/dist/{protocol-CfaUwNs8.mjs → protocol-RNP0u7UY.mjs} +9 -3
  169. package/dist/{provision-BfaLiWbj.mjs → provision-BnSSkiED.mjs} +119 -866
  170. package/dist/{requests-C7Oeoh5u.mjs → requests-7W1Pygt2.mjs} +5 -5
  171. package/dist/resolve-project-PnhzMtY6.mjs +1 -0
  172. package/dist/resolve-project-WpwkCB_c.mjs +48 -0
  173. package/dist/{rollback-DVAtrLAl.mjs → rollback-BcASVnwP.mjs} +8 -18
  174. package/dist/{route-types-CbtsIeFn.mjs → route-types-BZi26DVS.mjs} +9 -91
  175. package/dist/routing-assets-VkrKIbxE.mjs +139 -0
  176. package/dist/{runner-DMBKSrRk.mjs → runner-CabsQ-iM.mjs} +22 -34
  177. package/dist/runner-So9mYfcm.mjs +1 -0
  178. package/dist/runner-mysql-BhRaONkO.mjs +146 -0
  179. package/dist/runner-mysql-DWwE8jKi.mjs +1 -0
  180. package/dist/{runner-pg-DV8p_zjA.mjs → runner-pg-BRemq_GX.mjs} +3 -3
  181. package/dist/runner-pg-_Xncr3H5.mjs +1 -0
  182. package/dist/runtime/ai.mjs +23 -25
  183. package/dist/runtime/auth-client-react.mjs +1 -2
  184. package/dist/runtime/auth-client-solid.mjs +1 -2
  185. package/dist/runtime/auth-client-svelte.mjs +1 -2
  186. package/dist/runtime/auth-client-vue.mjs +1 -2
  187. package/dist/runtime/auth-client.mjs +1 -2
  188. package/dist/runtime/auth.mjs +1 -2
  189. package/dist/runtime/better-auth-mysql.d.mts +2 -5
  190. package/dist/runtime/better-auth-mysql.mjs +9 -31
  191. package/dist/runtime/better-auth-pg.d.mts +2 -5
  192. package/dist/runtime/better-auth-pg.mjs +6 -32
  193. package/dist/runtime/better-auth.d.mts +2 -4
  194. package/dist/runtime/better-auth.mjs +9 -19
  195. package/dist/runtime/db.mjs +6 -2
  196. package/dist/runtime/durable.d.mts +18 -1
  197. package/dist/runtime/durable.mjs +26 -2
  198. package/dist/runtime/email/testing.d.mts +1 -1
  199. package/dist/runtime/email/testing.mjs +9 -23
  200. package/dist/runtime/email-protocol.d.mts +12 -0
  201. package/dist/runtime/email-protocol.mjs +1 -70
  202. package/dist/runtime/email.d.mts +1 -1
  203. package/dist/runtime/email.mjs +79 -221
  204. package/dist/runtime/env-public.d.mts +1 -1
  205. package/dist/runtime/env-public.mjs +12 -38
  206. package/dist/runtime/env.d.mts +1 -12
  207. package/dist/runtime/env.mjs +1 -2
  208. package/dist/runtime/handler.d.mts +1 -1
  209. package/dist/runtime/handler.mjs +1 -1
  210. package/dist/runtime/isr.mjs +1 -1
  211. package/dist/runtime/kv.mjs +1 -1
  212. package/dist/runtime/limits.mjs +1 -2
  213. package/dist/runtime/live-client.d.mts +3 -2
  214. package/dist/runtime/live-server.d.mts +2 -1
  215. package/dist/runtime/live-server.mjs +1 -16
  216. package/dist/runtime/live.d.mts +1 -1
  217. package/dist/runtime/live.mjs +1 -2
  218. package/dist/runtime/log.d.mts +2 -1
  219. package/dist/runtime/migration-handler-mysql.d.mts +2 -2
  220. package/dist/runtime/migration-handler-mysql.mjs +39 -8
  221. package/dist/runtime/migration-handler-pg.d.mts +2 -2
  222. package/dist/runtime/migration-handler-pg.mjs +1 -1
  223. package/dist/runtime/migration-handler.d.mts +2 -2
  224. package/dist/runtime/migration-handler.mjs +1 -470
  225. package/dist/runtime/queues.mjs +1 -1
  226. package/dist/runtime/remote/binding-handler.mjs +62 -62
  227. package/dist/runtime/remote/index.mjs +16 -77
  228. package/dist/runtime/response.mjs +1 -2
  229. package/dist/runtime/route-url.mjs +1 -2
  230. package/dist/runtime/routing.d.mts +3 -5
  231. package/dist/runtime/routing.mjs +82 -218
  232. package/dist/runtime/sandbox-container.d.mts +2 -2
  233. package/dist/runtime/sandbox-container.mjs +1 -2
  234. package/dist/runtime/sandbox.d.mts +2 -2
  235. package/dist/runtime/sandbox.mjs +13 -6
  236. package/dist/runtime/seed.d.mts +2 -1
  237. package/dist/runtime/sse.mjs +1 -2
  238. package/dist/runtime/storage.mjs +1 -1
  239. package/dist/runtime/validator.d.mts +1 -1
  240. package/dist/runtime/validator.mjs +1 -2
  241. package/dist/runtime/ws-server.d.mts +4 -4
  242. package/dist/runtime/ws-server.mjs +6 -28
  243. package/dist/runtime/ws.d.mts +1 -1
  244. package/dist/{sandbox-container-Bo0eiFKz.d.mts → sandbox-container-ChQRum-j.d.mts} +3 -1
  245. package/dist/{sandbox-container-C6ItmVuN.mjs → sandbox-container-a9LRUtii.mjs} +13 -2
  246. package/dist/{sandbox-C5LFoJMf.d.mts → sandbox-q3waMc2T.d.mts} +1 -1
  247. package/dist/{scan-C3uDzz6J.mjs → scan-C0BMdmEd.mjs} +84 -7
  248. package/dist/{secret-BvtB7IjY.mjs → secret-bg73f1Ge.mjs} +63 -81
  249. package/dist/{serialize-BPvnNQuA.mjs → serialize-BtQyaYoC.mjs} +10 -4
  250. package/dist/{skills-BgVMvQdy.mjs → skills-C_yRTg0g.mjs} +3 -3
  251. package/dist/{subcommand-prompt-BSlnD1fI.mjs → subcommand-prompt-Bm3ZlYgA.mjs} +39 -44
  252. package/dist/sveltekit.d.mts +2 -1
  253. package/dist/sveltekit.mjs +1 -1
  254. package/dist/validate-BQFdf0Pi.mjs +1 -0
  255. package/dist/{validate-C9qJArv7.mjs → validate-CheZGRE7.mjs} +4 -8
  256. package/dist/version-metadata-DIrqEHQo.mjs +73 -0
  257. package/dist/{wrangler-D9KTuqnv.mjs → wrangler-BYs07Rxy.mjs} +119 -378
  258. package/dist/wrapper-CwhpNWtH.mjs +663 -0
  259. package/dist/{ws-CChrrAU-.d.mts → ws-aKVYB-fA.d.mts} +1 -1
  260. package/dist/yarn-pnp-DLbEFMT0.mjs +92 -0
  261. package/docs/guide/ai.md +8 -2
  262. package/docs/guide/auth.md +2 -0
  263. package/docs/guide/database/mysql.md +14 -3
  264. package/docs/guide/database/postgresql.md +2 -0
  265. package/docs/guide/database.md +3 -5
  266. package/docs/guide/durable-state.md +32 -4
  267. package/docs/guide/platform/administration/access.md +4 -0
  268. package/docs/guide/platform/administration/connected-apps.md +55 -0
  269. package/docs/guide/platform/installation/credentials.md +21 -3
  270. package/docs/guide/platform/installation/domains.md +1 -1
  271. package/docs/guide/platform/installation/maintenance.md +38 -1
  272. package/docs/guide/platform/installation/prerequisites.md +6 -2
  273. package/docs/guide/platform/installation/setup.md +23 -1
  274. package/docs/guide/platform/installation/uninstall.md +6 -1
  275. package/docs/guide/quickstart.md +2 -0
  276. package/docs/guide/sandboxes.md +3 -1
  277. package/docs/guide/self-hosted-platform.md +1 -1
  278. package/docs/integrations/cloudflare.md +2 -2
  279. package/docs/integrations/frameworks/analog.md +3 -11
  280. package/docs/integrations/frameworks/nuxt.md +7 -10
  281. package/docs/integrations/nodejs-bun-deno.md +2 -0
  282. package/docs/reference/api/deploy.md +23 -0
  283. package/docs/reference/api/pages.md +2 -0
  284. package/docs/reference/api.md +3 -1
  285. package/docs/reference/cli/database.md +9 -3
  286. package/docs/reference/cli/platform-installation.md +19 -7
  287. package/docs/reference/cli/setup.md +2 -0
  288. package/docs/reference/config.md +2 -0
  289. package/package.json +39 -36
  290. package/sandbox.Dockerfile +1 -1
  291. package/skills/void/SKILL.md +2 -1
  292. package/dist/auth-LMJcNESe.mjs +0 -2
  293. package/dist/cf-build-output-H9a97vME.mjs +0 -2
  294. package/dist/cf-user-agent-lKblH3zU.mjs +0 -17
  295. package/dist/client-tso2OfcG.mjs +0 -2
  296. package/dist/cloudflare-operations-BlYLlowZ.mjs +0 -2
  297. package/dist/collect-DLyFDiKW.mjs +0 -2
  298. package/dist/config-5r-YpMC-.mjs +0 -2
  299. package/dist/config-B_ggY-IO.mjs +0 -89
  300. package/dist/config-BtSFvXZx.mjs +0 -2
  301. package/dist/config-write-AHGesphx.mjs +0 -61
  302. package/dist/create-project-qFDC45zg.mjs +0 -2
  303. package/dist/deploy-Bqe1PYBw.mjs +0 -10458
  304. package/dist/deploy-VsWsVQkw.mjs +0 -2
  305. package/dist/dev-inbox-CK-UuPob.mjs +0 -297
  306. package/dist/discover-EDUf6JJw.mjs +0 -2
  307. package/dist/dist-Bx1z6Eva.mjs +0 -2
  308. package/dist/dist-_UUlL6bg.mjs +0 -2
  309. package/dist/env-validation-CrVNjsPm.mjs +0 -2
  310. package/dist/env-validation-Dxdx_5wo.mjs +0 -951
  311. package/dist/gen-dA9hW7AV.mjs +0 -2
  312. package/dist/head-client-DzmJGN4C.mjs +0 -90
  313. package/dist/help-DfQYVfGY.mjs +0 -2
  314. package/dist/login-mx_ydhmp.mjs +0 -2
  315. package/dist/migrate-BHp07yJE.mjs +0 -2
  316. package/dist/operator-cmd-CwBB-1yb.mjs +0 -2
  317. package/dist/pages/head-client.d.mts +0 -13
  318. package/dist/pages/head-client.mjs +0 -2
  319. package/dist/plan-CH2G51je.mjs +0 -2
  320. package/dist/platform-args-D4E1PjVw.mjs +0 -2
  321. package/dist/platform-cmd-BbmJiq5O.mjs +0 -2
  322. package/dist/platform-lifecycle-ByAlpkhV.mjs +0 -2
  323. package/dist/platform-management-CBOT4BSM.mjs +0 -2
  324. package/dist/prepare-DRUV-g3X.mjs +0 -2
  325. package/dist/project-DedqCp59.mjs +0 -2
  326. package/dist/project-slug-DofjTFd-.mjs +0 -2
  327. package/dist/provision-Wu9ZBk9L.mjs +0 -2
  328. package/dist/resolve-project-BIeYs9Cw.mjs +0 -2
  329. package/dist/resolve-project-CP8rZs_p.mjs +0 -28
  330. package/dist/runner-9wjsSZx-.mjs +0 -2
  331. package/dist/runner-mysql-CEzKtmFb.mjs +0 -54
  332. package/dist/runner-mysql-CkFqZ6CE.mjs +0 -2
  333. package/dist/runner-pg-BGYRFdRp.mjs +0 -2
  334. package/dist/runtime/env-helpers.d.mts +0 -2
  335. package/dist/runtime/env-helpers.mjs +0 -2
  336. package/dist/validate-BJr9LfXy.mjs +0 -2
  337. package/dist/yarn-pnp-CUX_iTPA.mjs +0 -188
@@ -1,9 +1,19 @@
1
1
  import { n as __toESM } from "./rolldown-runtime-DXIUcv95.mjs";
2
2
  import { t as require_picocolors } from "./picocolors-BTps1_gs.mjs";
3
- import { B as note$1, H as outro, L as log, P as isCI, nt as settings, q as spinner } from "./dist-D3m88sjf.mjs";
3
+ import { B as note$1, H as outro, L as log, P as isCI, nt as settings, q as spinner } from "./dist-BVdsO7Py.mjs";
4
4
  import { stripVTControlCharacters } from "node:util";
5
+ import terminalLink from "terminal-link";
5
6
  //#region src/cli/output.ts
6
7
  var import_picocolors = /* @__PURE__ */ __toESM(require_picocolors(), 1);
8
+ /** Keep the destination visible when the terminal cannot render a named hyperlink. */
9
+ function formatLink(text, url) {
10
+ return terminalLink(text, sanitizeTerminalText(url), { fallback: (label, href) => label === href ? label : `${label}: ${href}` });
11
+ }
12
+ /** Link a displayed URL without duplicating it in unsupported terminals or redirected output. */
13
+ function formatUrl(url) {
14
+ const text = sanitizeTerminalText(url);
15
+ return formatLink(text, text);
16
+ }
7
17
  /** Complete an action with the same spacing, checkmark, and color on every target. */
8
18
  function printSuccess(message) {
9
19
  outro(`\n${import_picocolors.default.green(`✓ ${stripVTControlCharacters(message)}`)}`, { withGuide: false });
@@ -68,17 +78,26 @@ const MIN_NOTE_COLUMNS = 6;
68
78
  */
69
79
  function note(...args) {
70
80
  const [message, title, opts] = args;
81
+ const plainTitle = title && sanitizeTerminalText(stripVTControlCharacters(title));
82
+ const urlTitle = plainTitle && /^https?:\/\/\S+$/.test(plainTitle) ? plainTitle : void 0;
83
+ const boxedTitle = urlTitle ? ` ${urlTitle} ` : title;
71
84
  const output = opts?.output ?? process.stdout;
72
85
  const columns = output.columns;
73
- if (typeof columns !== "number" || columns >= MIN_NOTE_COLUMNS) {
86
+ const needsWidthFallback = typeof columns === "number" && columns < MIN_NOTE_COLUMNS;
87
+ if (!urlTitle && !needsWidthFallback) {
74
88
  note$1(...args);
75
89
  return;
76
90
  }
91
+ let header = true;
77
92
  const sized = {
78
- columns: columns > 0 ? MIN_NOTE_COLUMNS : 80,
79
- write: (chunk) => output.write(chunk)
93
+ columns: needsWidthFallback ? columns > 0 ? MIN_NOTE_COLUMNS : 80 : columns,
94
+ write(chunk) {
95
+ if (header && urlTitle) chunk = chunk.replace(` ${urlTitle} `, ` ${formatUrl(urlTitle)} `);
96
+ header = false;
97
+ return output.write(chunk);
98
+ }
80
99
  };
81
- note$1(message, title, {
100
+ note$1(message, boxedTitle, {
82
101
  ...opts,
83
102
  output: sized
84
103
  });
@@ -114,6 +133,18 @@ function ensureUtc(s) {
114
133
  if (s.lastIndexOf("-") > 9) return s;
115
134
  return s + "Z";
116
135
  }
136
+ function formatRelativeTime(iso) {
137
+ const diffMs = Date.now() - new Date(ensureUtc(iso)).getTime();
138
+ if (diffMs < 6e4) return "just now";
139
+ const minutes = Math.floor(diffMs / 6e4);
140
+ if (minutes < 60) return `${minutes}m ago`;
141
+ const hours = Math.floor(minutes / 60);
142
+ if (hours < 24) return `${hours}h ago`;
143
+ return `${Math.floor(hours / 24)}d ago`;
144
+ }
145
+ function getErrorMessage(error) {
146
+ return error instanceof Error ? error.message : String(error);
147
+ }
117
148
  /**
118
149
  * Stack frames of an error a Worker reported, one line per frame. The log or
119
150
  * exception line already shows `Name: message`, so a leading copy of that
@@ -128,4 +159,4 @@ function errorStackFrames(error) {
128
159
  return frames.trimEnd() ? frames.trimEnd().split("\n") : [];
129
160
  }
130
161
  //#endregion
131
- export { ensureUtc as a, helpLine as c, printSuccess as d, sanitizeTerminalText as f, dim as i, import_picocolors as l, tablePrefix as m, cliCommandName as n, errorStackFrames as o, sectionTitle as p, createSpinner as r, formatCount as s, categoryTitle as t, note as u };
162
+ export { tablePrefix as _, errorStackFrames as a, formatRelativeTime as c, helpLine as d, import_picocolors as f, sectionTitle as g, sanitizeTerminalText as h, dim as i, formatUrl as l, printSuccess as m, cliCommandName as n, formatCount as o, note as p, createSpinner as r, formatLink as s, categoryTitle as t, getErrorMessage as u };
@@ -1,4 +1,4 @@
1
- import { a as join, n as dirname } from "./dist-BVqXeR_h.mjs";
1
+ import { a as join, n as dirname } from "./dist-ipQi0Q8y.mjs";
2
2
  import { existsSync, readFileSync } from "node:fs";
3
3
  //#region src/shared/package-json.ts
4
4
  const DEFAULT_DEPENDENCY_FIELDS = ["dependencies", "devDependencies"];
@@ -1,5 +1,5 @@
1
1
  import { t as interpolateRouteParams } from "../route-url-BgPja1GS.mjs";
2
- import { t as PageObject } from "../protocol-BPZaNqBo.mjs";
2
+ import { t as PageObject } from "../protocol-4H7V_3Os.mjs";
3
3
  import { n as CacheForInput, r as CacheForResult } from "../prefetch-Ce6la4EI.mjs";
4
4
  import { UsageLimitData } from "@void/edge";
5
5
  import { ActionUrl, ResolveActionBody, ResolveActionParams } from "void/routes";
@@ -1,5 +1,4 @@
1
1
  import { t as interpolateRouteParams } from "../route-url-BjGv_KKY.mjs";
2
- import { n as initClientHead, t as applyClientHead } from "../head-client-DzmJGN4C.mjs";
3
2
  import { n as parseCacheFor, t as PrefetchCache } from "../prefetch-Bsc_Pb6c.mjs";
4
3
  import { readUsageLimit } from "@void/edge";
5
4
  //#region src/pages/action-result.ts
@@ -60,6 +59,95 @@ async function createActionErrorFromResponse(response, url) {
60
59
  });
61
60
  }
62
61
  //#endregion
62
+ //#region src/pages/head-client.ts
63
+ const ATTR = "data-void-head";
64
+ function elementDescriptorSignature(descriptor) {
65
+ const attrs = Object.entries(descriptor.attrs).sort(([a], [b]) => a.localeCompare(b));
66
+ return `${encodeURIComponent(descriptor.tag)}:${attrs.map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`).join("&")}`;
67
+ }
68
+ function elementSignature(el) {
69
+ const attrs = {};
70
+ for (const attr of Array.from(el.attributes)) if (attr.name !== ATTR) attrs[attr.name] = attr.value;
71
+ return elementDescriptorSignature({
72
+ tag: el.tagName.toLowerCase(),
73
+ attrs
74
+ });
75
+ }
76
+ function createHeadElement(descriptor) {
77
+ const el = document.createElement(descriptor.tag);
78
+ for (const [key, value] of Object.entries(descriptor.attrs)) el.setAttribute(key, value);
79
+ el.setAttribute(ATTR, "");
80
+ return el;
81
+ }
82
+ function collectDesiredHeadElements(head) {
83
+ const desired = [];
84
+ if (head.meta) for (const entry of head.meta) {
85
+ const attrs = {};
86
+ if (entry.charset) attrs.charset = entry.charset;
87
+ if (entry.name) attrs.name = entry.name;
88
+ if (entry.property) attrs.property = entry.property;
89
+ if (entry.content !== void 0) attrs.content = entry.content;
90
+ desired.push({
91
+ tag: "meta",
92
+ attrs
93
+ });
94
+ }
95
+ if (head.link) for (const entry of head.link) {
96
+ const attrs = {};
97
+ for (const [key, value] of Object.entries(entry)) if (value != null) attrs[key] = value;
98
+ desired.push({
99
+ tag: "link",
100
+ attrs
101
+ });
102
+ }
103
+ return desired;
104
+ }
105
+ /**
106
+ * Mark SSR-rendered head tags so they are cleaned up on the first SPA navigation.
107
+ * Call once after hydration with the initial page's head descriptor.
108
+ */
109
+ function initClientHead(head) {
110
+ if (!head) return;
111
+ if (head.meta) for (const entry of head.meta) {
112
+ const selector = entry.charset ? "meta[charset]" : entry.property ? `meta[property="${entry.property}"]` : entry.name ? `meta[name="${entry.name}"]` : null;
113
+ if (!selector) continue;
114
+ const el = document.head.querySelector(selector);
115
+ if (el) el.setAttribute(ATTR, "");
116
+ }
117
+ if (head.link) for (const entry of head.link) {
118
+ const el = document.head.querySelector(`link[rel="${entry.rel}"][href="${entry.href}"]`);
119
+ if (el) el.setAttribute(ATTR, "");
120
+ }
121
+ }
122
+ /**
123
+ * Apply head changes on SPA navigation.
124
+ * Preserves existing managed tags when their final attributes are unchanged.
125
+ */
126
+ function applyClientHead(head) {
127
+ const existing = /* @__PURE__ */ new Map();
128
+ for (const el of document.head.querySelectorAll(`[${ATTR}]`)) {
129
+ const signature = elementSignature(el);
130
+ const elements = existing.get(signature);
131
+ if (elements) elements.push(el);
132
+ else existing.set(signature, [el]);
133
+ }
134
+ const desiredElements = [];
135
+ for (const descriptor of head ? collectDesiredHeadElements(head) : []) {
136
+ const signature = elementDescriptorSignature(descriptor);
137
+ const elements = existing.get(signature);
138
+ const preserved = elements?.shift();
139
+ if (elements && elements.length === 0) existing.delete(signature);
140
+ desiredElements.push(preserved ?? createHeadElement(descriptor));
141
+ }
142
+ for (const elements of existing.values()) for (const el of elements) el.remove();
143
+ let cursor = document.head.querySelector(`[${ATTR}]`);
144
+ for (const el of desiredElements) {
145
+ if (el !== cursor) document.head.insertBefore(el, cursor);
146
+ cursor = el.nextSibling;
147
+ }
148
+ if (head?.title !== void 0) document.title = head.title;
149
+ }
150
+ //#endregion
63
151
  //#region src/pages/scroll-restoration.ts
64
152
  const STORAGE_PREFIX = "void:scroll:";
65
153
  function readKey(state) {
@@ -573,7 +661,6 @@ async function createPageNavigationEngine(config) {
573
661
  buffer += decoder.decode(value, { stream: true });
574
662
  processLines();
575
663
  }
576
- if (buffer.trim()) processLines();
577
664
  } catch (e) {
578
665
  if (!(e instanceof Error) || e.name !== "AbortError") deferredRegistry.rejectPending("Stream closed before resolution");
579
666
  }
@@ -1047,7 +1134,7 @@ async function createVoidRouter(config) {
1047
1134
  }
1048
1135
  }
1049
1136
  }
1050
- const rawRouter = {
1137
+ const router = {
1051
1138
  _hoverDelay: engine._hoverDelay,
1052
1139
  get url() {
1053
1140
  return toUrl(routeUrl);
@@ -1065,7 +1152,7 @@ async function createVoidRouter(config) {
1065
1152
  return applyNavigationResource(engine.prepareVisit(normalizeUrl(url), options));
1066
1153
  },
1067
1154
  refresh(options = {}) {
1068
- return rawRouter.visit(window.location.pathname + window.location.search, {
1155
+ return router.visit(window.location.pathname + window.location.search, {
1069
1156
  preserveState: true,
1070
1157
  preserveScroll: true,
1071
1158
  ...options
@@ -1081,7 +1168,6 @@ async function createVoidRouter(config) {
1081
1168
  engine.flushAll();
1082
1169
  }
1083
1170
  };
1084
- const router = createRouterFacade(rawRouter, () => routeUrl, () => routeParams);
1085
1171
  engine.setPopStateHandler((url, options) => {
1086
1172
  router.visit(url, options);
1087
1173
  });
@@ -1,2 +1 @@
1
- import { i as resolveHead, n as renderHeadToString, r as renderHtmlAttrs, t as renderBodyAttrs } from "../head-D2VF4ApL.mjs";
2
- export { renderBodyAttrs, renderHeadToString, renderHtmlAttrs, resolveHead };
1
+ export { t as renderBodyAttrs, n as renderHeadToString, r as renderHtmlAttrs, i as resolveHead } from "../head-D2VF4ApL.mjs";
@@ -1,5 +1,5 @@
1
1
  import { a as renderHtmlAttrs, i as renderHeadToString, n as HeadDescriptor, o as resolveHead, r as renderBodyAttrs, t as HeadConfig } from "../head-C8K_iGe6.mjs";
2
- import "../config-CSa15FvD.mjs";
2
+ import "../config-7qoq2p9v.mjs";
3
3
  import { i as PageDefinition, n as LayoutDefinition, o as PageScanResult, r as NamedLayoutDefinition } from "../types-BAp5AEBU.mjs";
4
4
  import { t as serializePageData } from "../serialize-CfSwWfF2.mjs";
5
5
  //#region src/project-paths.d.ts
@@ -17,7 +17,6 @@ type ProjectPaths = {
17
17
  migrationsDir: string;
18
18
  schemaFile: string;
19
19
  schemaDir: string;
20
- srcDir: string;
21
20
  ssrDir: string;
22
21
  sourceRelative: (path: string) => string;
23
22
  authConfigCandidates: ReadonlyArray<string>;
@@ -1,10 +1,10 @@
1
- import { a as join } from "../dist-BVqXeR_h.mjs";
2
- import { r as resolvePagesDir } from "../project-paths-GgcMozYz.mjs";
3
- import { m as readConfig } from "../config-DiowPT80.mjs";
4
- import { a as resolveNamedLayout, i as resolveLayoutIds, n as resolveEffectiveLayoutChain, o as toLayoutId, r as resolveLayoutChain, t as scanPages } from "../scan-C3uDzz6J.mjs";
5
- import { i as parseRedirectsFile } from "../headers-DlfR78Nu.mjs";
1
+ import { a as join } from "../dist-ipQi0Q8y.mjs";
2
+ import { r as resolvePagesDir } from "../project-paths-DMvEeSau.mjs";
3
+ import { d as readConfig } from "../config-Bx_1SpnO.mjs";
4
+ import { a as resolveNamedLayout, i as resolveLayoutIds, n as resolveEffectiveLayoutChain, o as toLayoutId, r as resolveLayoutChain, t as scanPages } from "../scan-C0BMdmEd.mjs";
5
+ import { r as parseRedirectsFile } from "../headers-Di1FsD3e.mjs";
6
6
  import { i as resolveHead, n as renderHeadToString, r as renderHtmlAttrs, t as renderBodyAttrs } from "../head-D2VF4ApL.mjs";
7
- import { t as serializePageData } from "../serialize-BPvnNQuA.mjs";
7
+ import { t as serializePageData } from "../serialize-BtQyaYoC.mjs";
8
8
  //#region src/pages/manifest.ts
9
9
  /**
10
10
  * Generates the component import map and layout tree as code strings.
@@ -1,86 +1,7 @@
1
- import { n as dirname, u as resolve } from "../dist-BVqXeR_h.mjs";
2
- import { n as isIdentifier, r as isLiteral } from "../ast-CPGPjb0V.mjs";
3
- import { n as resolveEffectiveLayoutChain, t as scanPages } from "../scan-C3uDzz6J.mjs";
4
- import { t as MagicString } from "../dist-Cegxq8gs.mjs";
1
+ import { c as resolve, n as dirname } from "../dist-ipQi0Q8y.mjs";
2
+ import { c as findIslandImports, l as findStaticCssImports, n as resolveEffectiveLayoutChain, s as editIslandSource, t as scanPages } from "../scan-C0BMdmEd.mjs";
5
3
  import { existsSync, readFileSync, readdirSync } from "node:fs";
6
- import { normalizePath, parseSync } from "vite";
7
- //#region src/pages/island-imports.ts
8
- /** The whole JS/TS module, or each `<script>` block of a Vue/Svelte SFC with its offset in the file. */
9
- function scriptBlocks(code, filename) {
10
- if (!/\.(?:vue|svelte)$/.test(filename)) return [{
11
- source: code,
12
- offset: 0,
13
- filename
14
- }];
15
- const scriptFilename = filename.replace(/\.(?:vue|svelte)$/, ".ts");
16
- return [...code.matchAll(/<script\b[^>]*>([\s\S]*?)<\/script\s*>/gi)].map((match) => {
17
- const source = match[1];
18
- return {
19
- source,
20
- offset: match.index + match[0].indexOf(source),
21
- filename: scriptFilename
22
- };
23
- });
24
- }
25
- /** Collect stylesheet imports from authored modules without treating dynamic imports or text as dependencies. */
26
- function findStaticCssImports(code, filename) {
27
- if (!code.includes("import")) return [];
28
- const imports = [];
29
- for (const script of scriptBlocks(code, filename)) {
30
- if (!script.source.includes("import")) continue;
31
- const program = parseSync(script.filename, script.source).program;
32
- for (const node of program.body ?? []) {
33
- const source = node.source;
34
- if (node.type !== "ImportDeclaration" || !isLiteral(source) || typeof source.value !== "string" || !/\.(?:css|scss|sass|less|styl|stylus|pcss|postcss)$/.test(source.value) || node.start === void 0 || node.end === void 0) continue;
35
- imports.push({
36
- statement: script.source.slice(node.start, node.end),
37
- specifier: source.value
38
- });
39
- }
40
- }
41
- return imports;
42
- }
43
- function editIslandSource(code, edits, options) {
44
- const ms = new MagicString(code);
45
- for (const edit of edits) ms.overwrite(edit.start, edit.end, edit.text);
46
- for (const insertion of options?.insert ?? []) ms.appendLeft(insertion.offset, insertion.text);
47
- if (options?.prepend) ms.prepend(options.prepend);
48
- if (options?.append) ms.append(options.append);
49
- return {
50
- code: ms.toString(),
51
- map: ms.generateMap({ hires: true })
52
- };
53
- }
54
- /** Read island import attributes from JS/TS, or script blocks inside an SFC. */
55
- function findIslandImports(code, filename) {
56
- if (!code.includes("import") || !code.includes("island")) return [];
57
- const imports = [];
58
- for (const script of scriptBlocks(code, filename)) {
59
- if (!script.source.includes("island")) continue;
60
- const program = parseSync(script.filename, script.source).program;
61
- for (const node of program.body ?? []) {
62
- if (node.type !== "ImportDeclaration") continue;
63
- const specifiers = node.specifiers;
64
- const attributes = node.attributes;
65
- const first = specifiers?.[0];
66
- const attribute = attributes?.[0];
67
- const key = attribute?.key;
68
- const value = attribute?.value;
69
- const source = node.source;
70
- if (specifiers?.length !== 1 || first?.type !== "ImportDefaultSpecifier" || !isIdentifier(first.local) || attributes?.length !== 1 || !isIdentifier(key) || key.name !== "island" || !isLiteral(value) || typeof value.value !== "string" || !isLiteral(source) || typeof source.value !== "string" || source.start === void 0 || source.end === void 0 || node.start === void 0 || node.end === void 0) continue;
71
- imports.push({
72
- start: script.offset + node.start,
73
- end: script.offset + node.end,
74
- importName: first.local.name,
75
- specifierRaw: script.source.slice(source.start, source.end),
76
- specifier: source.value,
77
- hydrate: value.value
78
- });
79
- }
80
- }
81
- return imports;
82
- }
83
- //#endregion
4
+ import { normalizePath } from "vite";
84
5
  //#region src/pages/islands-plugin.ts
85
6
  const ISLANDS_RENDERER_ID = "virtual:void-islands-renderer";
86
7
  const ISLANDS_CLIENT_ENTRY_ID = "virtual:void-islands-client";
@@ -138,7 +59,8 @@ function rewriteCssImportForVirtualModule(matchedLine, specifier, sourceFilePath
138
59
  }
139
60
  /** Extract CSS import statements from a file and return them as @import rules. */
140
61
  function extractCssImports(filePath) {
141
- return findStaticCssImports(readFileSync(filePath, "utf-8"), filePath).map(({ specifier }) => `@import ${JSON.stringify(specifier)};`).join("\n");
62
+ const code = readFileSync(filePath, "utf-8");
63
+ return findStaticCssImports(code, filePath).map(({ specifier }) => `@import ${JSON.stringify(specifier)};`).join("\n");
142
64
  }
143
65
  /** Compute which island pages need client-side JavaScript. */
144
66
  function computePagesNeedingClientJS(pageScan, pagesDir, resolvedConfig) {
@@ -1,2 +1 @@
1
- import { n as parseCacheFor, t as PrefetchCache } from "../prefetch-Bsc_Pb6c.mjs";
2
- export { PrefetchCache, parseCacheFor };
1
+ export { t as PrefetchCache, n as parseCacheFor } from "../prefetch-Bsc_Pb6c.mjs";
@@ -1,3 +1,3 @@
1
- import { w as ValidationError } from "../handler-CNAwjRcW.mjs";
2
- import { a as handlePageMutation, i as handlePageGet, n as PageRenderResult, o as safeJsonStringify, r as flattenValidationErrors, t as PageObject } from "../protocol-BPZaNqBo.mjs";
1
+ import { w as ValidationError } from "../handler-_PqY82xe.mjs";
2
+ import { a as handlePageMutation, i as handlePageGet, n as PageRenderResult, o as safeJsonStringify, r as flattenValidationErrors, t as PageObject } from "../protocol-4H7V_3Os.mjs";
3
3
  export { PageObject, PageRenderResult, ValidationError, flattenValidationErrors, handlePageGet, handlePageMutation, safeJsonStringify };
@@ -1,3 +1,3 @@
1
1
  import { t as ValidationError } from "../validation-error-Dg9Recn1.mjs";
2
- import { i as safeJsonStringify, n as handlePageGet, r as handlePageMutation, t as flattenValidationErrors } from "../protocol-CfaUwNs8.mjs";
2
+ import { i as safeJsonStringify, n as handlePageGet, r as handlePageMutation, t as flattenValidationErrors } from "../protocol-RNP0u7UY.mjs";
3
3
  export { ValidationError, flattenValidationErrors, handlePageGet, handlePageMutation, safeJsonStringify };
@@ -1,2 +1 @@
1
- import { t as serializePageData } from "../serialize-BPvnNQuA.mjs";
2
- export { serializePageData };
1
+ export { t as serializePageData } from "../serialize-BtQyaYoC.mjs";
@@ -0,0 +1 @@
1
+ export { n as buildMigrationPlanBundle } from "./plan-BhLO2p4w.mjs";
@@ -0,0 +1 @@
1
+ export { t as parsePlatformArgs } from "./platform-args-CaCL_1Ch.mjs";
@@ -1,4 +1,4 @@
1
- import { n as operatorGroups, r as parseOperatorArgs } from "./operator-args-DOBhIaIg.mjs";
1
+ import { n as operatorGroups, r as parseOperatorArgs } from "./operator-args-UnE8Y2eK.mjs";
2
2
  import { PLATFORM_LOGIN_KINDS, normalizePlatformDashboardUrl, parsePlatformLoginId } from "@void/platform";
3
3
  import { parsePlatformPlanId } from "@void/platform/plans";
4
4
  //#region src/cli/platform-config-args.ts
@@ -18,38 +18,14 @@ const PLATFORM_AUTH_ACTIONS = [
18
18
  ];
19
19
  function parsePlatformConfigArgs(args) {
20
20
  if (args.length && args[0] !== "auth") throw new Error("platform: Usage: void platform config auth [command] [options].");
21
- const positional = [];
22
- const flags = /* @__PURE__ */ new Set();
23
- const values = /* @__PURE__ */ new Map();
24
- const valueFlags = [
21
+ const { positional, flags, values } = parseConfigFlags(args, "auth", [
25
22
  "connection",
26
23
  "installation",
27
24
  "id",
28
25
  "file",
29
26
  "client-secret-env",
30
27
  "test-id"
31
- ];
32
- for (let index = 1; index < args.length; index++) {
33
- const arg = args[index];
34
- if (!arg.startsWith("-")) {
35
- positional.push(arg);
36
- continue;
37
- }
38
- const name = arg.slice(2);
39
- if (!arg.startsWith("--") || ![
40
- "json",
41
- "plan",
42
- "yes"
43
- ].includes(name) && !valueFlags.includes(name)) throw new Error(`platform: Unknown config auth flag ${arg}.`);
44
- if (flags.has(name) || values.has(name)) throw new Error(`platform: Duplicate flag ${arg}.`);
45
- if (!valueFlags.includes(name)) {
46
- flags.add(name);
47
- continue;
48
- }
49
- const value = args[++index];
50
- if (!value || value.startsWith("-")) throw new Error(`platform: ${arg} requires a value.`);
51
- values.set(name, value);
52
- }
28
+ ]);
53
29
  const [action = "", target = "", ...extra] = positional;
54
30
  if (extra.length || action && !PLATFORM_AUTH_ACTIONS.includes(action)) throw new Error(`platform: Usage: void platform config auth <${PLATFORM_AUTH_ACTIONS.join("|")}>.`);
55
31
  const needsTarget = action && action !== "list" && action !== "initialize" && action !== "admission";
@@ -97,30 +73,11 @@ function parsePlatformConfigArgs(args) {
97
73
  yes: flags.has("yes")
98
74
  };
99
75
  }
100
- //#endregion
101
- //#region src/cli/platform-plans-args.ts
102
- const PLATFORM_PLAN_ACTIONS = [
103
- "show",
104
- "add",
105
- "set",
106
- "reset",
107
- "archive",
108
- "restore",
109
- "remove",
110
- "default",
111
- "sync"
112
- ];
113
- function parsePlatformPlansArgs(args) {
76
+ /** Parses `config <group>` flags: --json, --plan, --yes, and the given value flags. */
77
+ function parseConfigFlags(args, group, valueFlags) {
114
78
  const positional = [];
115
79
  const flags = /* @__PURE__ */ new Set();
116
80
  const values = /* @__PURE__ */ new Map();
117
- const valueFlags = [
118
- "connection",
119
- "file",
120
- "name",
121
- "copy",
122
- "replacement"
123
- ];
124
81
  for (let index = 1; index < args.length; index++) {
125
82
  const arg = args[index];
126
83
  if (!arg.startsWith("-")) {
@@ -132,7 +89,7 @@ function parsePlatformPlansArgs(args) {
132
89
  "json",
133
90
  "plan",
134
91
  "yes"
135
- ].includes(name) && !valueFlags.includes(name)) throw new Error(`platform: Unknown config plans flag ${arg}.`);
92
+ ].includes(name) && !valueFlags.includes(name)) throw new Error(`platform: Unknown config ${group} flag ${arg}.`);
136
93
  if (flags.has(name) || values.has(name)) throw new Error(`platform: Duplicate flag ${arg}.`);
137
94
  if (!valueFlags.includes(name)) {
138
95
  flags.add(name);
@@ -142,6 +99,33 @@ function parsePlatformPlansArgs(args) {
142
99
  if (!value || value.startsWith("-")) throw new Error(`platform: ${arg} requires a value.`);
143
100
  values.set(name, value);
144
101
  }
102
+ return {
103
+ positional,
104
+ flags,
105
+ values
106
+ };
107
+ }
108
+ //#endregion
109
+ //#region src/cli/platform-plans-args.ts
110
+ const PLATFORM_PLAN_ACTIONS = [
111
+ "show",
112
+ "add",
113
+ "set",
114
+ "reset",
115
+ "archive",
116
+ "restore",
117
+ "remove",
118
+ "default",
119
+ "sync"
120
+ ];
121
+ function parsePlatformPlansArgs(args) {
122
+ const { positional, flags, values } = parseConfigFlags(args, "plans", [
123
+ "connection",
124
+ "file",
125
+ "name",
126
+ "copy",
127
+ "replacement"
128
+ ]);
145
129
  const [action = "", target = "", ...extra] = positional;
146
130
  if (extra.length || action && !PLATFORM_PLAN_ACTIONS.includes(action)) throw new Error(`platform: Usage: void platform config plans [${PLATFORM_PLAN_ACTIONS.join("|")}] [plan-id] [options].`);
147
131
  const needsTarget = action && action !== "show" && action !== "sync";
@@ -228,7 +212,7 @@ const platformSubcommands = [
228
212
  {
229
213
  name: "repair",
230
214
  arg: "[id]",
231
- description: "Reconcile a platform or configure its dashboard origin"
215
+ description: "Reconcile a platform, its dashboard origin, or unfinished login setup"
232
216
  },
233
217
  {
234
218
  name: "disable",
@@ -271,6 +255,7 @@ function parseLifecycleSelector(rest, subcommand) {
271
255
  const positional = [];
272
256
  let runtime = "";
273
257
  let fromRuntime = "";
258
+ let authConfig;
274
259
  let dashboardUrl;
275
260
  for (let index = 0; index < rest.length; index++) {
276
261
  const arg = rest[index];
@@ -283,6 +268,10 @@ function parseLifecycleSelector(rest, subcommand) {
283
268
  const [value, next] = readValue(rest, index, arg);
284
269
  dashboardUrl = normalizePlatformDashboardUrl(value);
285
270
  index = next;
271
+ } else if (arg === "--auth-config" && subcommand === "repair") {
272
+ const [value, next] = readValue(rest, index, arg);
273
+ authConfig = value;
274
+ index = next;
286
275
  } else if (arg === "--from-runtime" && subcommand === "rollback") {
287
276
  const [value, next] = readValue(rest, index, arg);
288
277
  fromRuntime = value;
@@ -295,6 +284,7 @@ function parseLifecycleSelector(rest, subcommand) {
295
284
  ...parsed,
296
285
  runtime,
297
286
  fromRuntime,
287
+ ...authConfig !== void 0 ? { authConfig } : {},
298
288
  ...dashboardUrl !== void 0 ? { dashboardUrl } : {}
299
289
  };
300
290
  }
@@ -362,21 +352,13 @@ function parsePlatformArgs(args) {
362
352
  if (rest.length > 0) throw new Error(`platform: Unexpected argument '${rest[0]}'.`);
363
353
  return { subcommand };
364
354
  }
365
- if (subcommand === "use") {
355
+ if (subcommand === "use" || subcommand === "status") {
366
356
  const { selector } = parseSelector(rest, subcommand);
367
357
  return {
368
358
  subcommand,
369
359
  selector
370
360
  };
371
361
  }
372
- if (subcommand === "status") {
373
- const { selector, plan } = parseSelector(rest, subcommand);
374
- if (plan) throw new Error("platform: Unknown flag '--plan'.");
375
- return {
376
- subcommand,
377
- selector
378
- };
379
- }
380
362
  if (subcommand === "discover") {
381
363
  let account = "";
382
364
  let selector = "";
@@ -396,7 +378,7 @@ function parsePlatformArgs(args) {
396
378
  };
397
379
  }
398
380
  if (subcommand === "upgrade" || subcommand === "rollback" || subcommand === "repair" || subcommand === "disable" || subcommand === "enable") {
399
- const { selector, plan, runtime, fromRuntime, yes, dashboardUrl } = parseLifecycleSelector(rest, subcommand);
381
+ const { selector, plan, runtime, fromRuntime, yes, authConfig, dashboardUrl } = parseLifecycleSelector(rest, subcommand);
400
382
  return subcommand === "rollback" ? {
401
383
  subcommand,
402
384
  selector,
@@ -410,6 +392,7 @@ function parsePlatformArgs(args) {
410
392
  plan,
411
393
  runtime,
412
394
  yes,
395
+ ...authConfig !== void 0 ? { authConfig } : {},
413
396
  ...dashboardUrl !== void 0 ? { dashboardUrl } : {}
414
397
  };
415
398
  }
@@ -1,13 +1,12 @@
1
- import { u as openBrowser } from "./auth-Dn2vw-SG.mjs";
2
- import { A as confirm, K as select, U as password, X as text, z as multiselect } from "./dist-D3m88sjf.mjs";
3
- import { d as printSuccess } from "./output-C50ag2r3.mjs";
4
- import { n as OperatorClient } from "./operator-client-DbDv4vtE.mjs";
5
- import { a as resolveOperatorOrigin, r as readOperatorToken } from "./operator-auth-BEZ_u0Cz.mjs";
6
- import { i as humanLines } from "./operator-cmd-BT4hgavL.mjs";
7
- import { o as platformPromptAnswer } from "./platform-setup-BBxRxmFC.mjs";
1
+ import { u as openBrowser } from "./auth-B6iOCjKI.mjs";
2
+ import { A as confirm, K as select, U as password, X as text, z as multiselect } from "./dist-BVdsO7Py.mjs";
3
+ import { l as formatUrl, m as printSuccess } from "./output-Ba6ZbrzY.mjs";
4
+ import { n as OperatorClient } from "./operator-client-C-ROjk1I.mjs";
5
+ import { a as resolveOperatorOrigin, r as readOperatorToken } from "./operator-auth-Cr2zCc-J.mjs";
6
+ import { i as humanLines } from "./operator-cmd-DHieWtFp.mjs";
7
+ import { o as platformPromptAnswer } from "./platform-setup-YvN9VQXV.mjs";
8
8
  import { parsePlatformAdmissionPolicy, parsePlatformLoginConfiguration } from "@void/platform";
9
9
  import { stripVTControlCharacters } from "node:util";
10
- import { execFile } from "node:child_process";
11
10
  import { setTimeout } from "node:timers/promises";
12
11
  import { readFile } from "node:fs/promises";
13
12
  //#region src/cli/platform-auth-config.ts
@@ -46,8 +45,8 @@ async function waitForPlatformLoginTest(client, launch, signal) {
46
45
  if (url.origin !== client.origin || url.pathname !== "/auth/test" || url.username || url.password || url.hash) throw new Error("platform: The login test belongs to a different platform.");
47
46
  const expiry = Date.parse(launch.expiresAt);
48
47
  if (!Number.isFinite(expiry) || expiry > Date.now() + 66e4) throw new Error("platform: Invalid login test expiry.");
49
- console.log(`Complete the login test in your browser: ${url.href}`);
50
- openBrowser(url.href, execFile);
48
+ console.log(`Complete the login test in your browser: ${formatUrl(url.href)}`);
49
+ openBrowser(url.href);
51
50
  while (Date.now() < expiry) {
52
51
  signal?.throwIfAborted();
53
52
  const result = await client.request(`/config/auth/tests/${encodeURIComponent(launch.id)}`, { signal });
@@ -143,11 +142,11 @@ async function configurationInput(args, existing) {
143
142
  }
144
143
  async function runPlatformAuthConfig(args) {
145
144
  if (args.action === "recover") {
146
- const { runPlatformAuthRecovery } = await import("./platform-auth-recovery-BU6izFAU.mjs");
145
+ const { runPlatformAuthRecovery } = await import("./platform-auth-recovery-CXjfqyOv.mjs");
147
146
  return runPlatformAuthRecovery(args);
148
147
  }
149
148
  if (args.action === "protection") {
150
- const { runPlatformProtectionConfig } = await import("./platform-auth-protection-BJimB_p9.mjs");
149
+ const { runPlatformProtectionConfig } = await import("./platform-auth-protection-BXwZiJSF.mjs");
151
150
  return runPlatformProtectionConfig(args);
152
151
  }
153
152
  const origin = resolveOperatorOrigin(args.connection);