better-supabase 0.11.0 → 0.12.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 (449) hide show
  1. package/dist/{adapter-B2WRsRIg.js → adapter-CRNH2aX_.js} +362 -253
  2. package/dist/{agents-CbUIrH-w.d.ts → agents-CGP2AQge.d.ts} +1 -1
  3. package/dist/{ai-files-DXbgWA5M.js → ai-files-ChFDkMLN.js} +12 -4
  4. package/dist/ai-sdk/agents/index.d.ts +3 -3
  5. package/dist/ai-sdk/batches/index.d.ts +1 -1
  6. package/dist/ai-sdk/embeddings/index.d.ts +2 -2
  7. package/dist/ai-sdk/files/index.d.ts +1 -1
  8. package/dist/ai-sdk/files/index.js +1 -1
  9. package/dist/ai-sdk/index.d.ts +1 -1
  10. package/dist/ai-sdk/mcp/index.d.ts +3 -3
  11. package/dist/ai-sdk/memory/index.d.ts +2 -2
  12. package/dist/{ai-tasks-BJJChl-D.d.ts → ai-tasks-ZvPnNudQ.d.ts} +1 -1
  13. package/dist/{api-keys-qnM63qjS.d.ts → api-keys-AgDXbcql.d.ts} +1 -1
  14. package/dist/{approvals-CRZtzxNt.d.ts → approvals-CyX709B-.d.ts} +1 -1
  15. package/dist/astro/index.d.ts +6 -6
  16. package/dist/astro/index.js +2 -2
  17. package/dist/{attachments-Bk3tyeUF.js → attachments-CK8D8bIV.js} +8 -2
  18. package/dist/{authorization-hooks-mLi894KH.d.ts → authorization-hooks-WDQMKIsc.d.ts} +1 -1
  19. package/dist/better-result/index.d.ts +2 -2
  20. package/dist/{bind-CTNKpBM6.d.ts → bind-Bfo40o63.d.ts} +3 -3
  21. package/dist/blocks/access-requests/index.d.ts +1 -1
  22. package/dist/blocks/agents/index.d.ts +2 -2
  23. package/dist/blocks/ai-cache/index.d.ts +1 -1
  24. package/dist/blocks/ai-chat/index.d.ts +2 -2
  25. package/dist/blocks/ai-chat/react/index.d.ts +1 -1
  26. package/dist/blocks/ai-chat/solid/index.d.ts +2 -2
  27. package/dist/blocks/ai-chat/svelte/index.d.ts +2 -2
  28. package/dist/blocks/ai-chat/vue/index.d.ts +2 -2
  29. package/dist/blocks/ai-files/index.d.ts +2 -2
  30. package/dist/blocks/ai-files/index.js +1 -1
  31. package/dist/blocks/ai-providers/index.d.ts +2 -2
  32. package/dist/blocks/ai-tasks/index.d.ts +2 -2
  33. package/dist/blocks/announcements/index.d.ts +2 -2
  34. package/dist/blocks/announcements/react/index.d.ts +1 -1
  35. package/dist/blocks/announcements/solid/index.d.ts +2 -2
  36. package/dist/blocks/announcements/svelte/index.d.ts +2 -2
  37. package/dist/blocks/announcements/vue/index.d.ts +2 -2
  38. package/dist/blocks/api-keys/index.d.ts +4 -4
  39. package/dist/blocks/api-keys/react/index.d.ts +1 -1
  40. package/dist/blocks/api-keys/react/server.d.ts +1 -1
  41. package/dist/blocks/api-keys/solid/index.d.ts +2 -2
  42. package/dist/blocks/api-keys/svelte/index.d.ts +2 -2
  43. package/dist/blocks/api-keys/vue/index.d.ts +2 -2
  44. package/dist/blocks/approvals/index.d.ts +2 -2
  45. package/dist/blocks/attachments/index.d.ts +2 -2
  46. package/dist/blocks/attachments/index.js +1 -1
  47. package/dist/blocks/audit/index.d.ts +2 -2
  48. package/dist/blocks/audit/react/index.d.ts +1 -1
  49. package/dist/blocks/audit/react/server.d.ts +1 -1
  50. package/dist/blocks/audit/solid/index.d.ts +2 -2
  51. package/dist/blocks/audit/svelte/index.d.ts +2 -2
  52. package/dist/blocks/audit/vue/index.d.ts +2 -2
  53. package/dist/blocks/billing/index.d.ts +3 -3
  54. package/dist/blocks/billing/react/index.d.ts +1 -1
  55. package/dist/blocks/billing/react/server.d.ts +1 -1
  56. package/dist/blocks/billing/solid/index.d.ts +2 -2
  57. package/dist/blocks/billing/svelte/index.d.ts +2 -2
  58. package/dist/blocks/billing/vue/index.d.ts +2 -2
  59. package/dist/blocks/bookings/index.d.ts +2 -2
  60. package/dist/blocks/bookings/react/index.d.ts +1 -1
  61. package/dist/blocks/bookings/solid/index.d.ts +2 -2
  62. package/dist/blocks/bookings/svelte/index.d.ts +2 -2
  63. package/dist/blocks/bookings/vue/index.d.ts +2 -2
  64. package/dist/blocks/bulk/index.d.ts +1 -1
  65. package/dist/blocks/calendar/index.d.ts +2 -2
  66. package/dist/blocks/calendar/react/index.d.ts +1 -1
  67. package/dist/blocks/calendar/solid/index.d.ts +2 -2
  68. package/dist/blocks/calendar/svelte/index.d.ts +2 -2
  69. package/dist/blocks/calendar/vue/index.d.ts +2 -2
  70. package/dist/blocks/catalog/index.d.ts +1 -1
  71. package/dist/blocks/collections/index.d.ts +1 -1
  72. package/dist/blocks/comments/index.d.ts +2 -2
  73. package/dist/blocks/comments/react/index.d.ts +1 -1
  74. package/dist/blocks/comments/react/server.d.ts +1 -1
  75. package/dist/blocks/comments/solid/index.d.ts +2 -2
  76. package/dist/blocks/comments/svelte/index.d.ts +2 -2
  77. package/dist/blocks/comments/vue/index.d.ts +2 -2
  78. package/dist/blocks/connectors/index.d.ts +2 -2
  79. package/dist/blocks/custom-fields/index.d.ts +1 -1
  80. package/dist/blocks/data-lifecycle/index.d.ts +2 -2
  81. package/dist/blocks/deals/index.d.ts +1 -1
  82. package/dist/blocks/documents/index.d.ts +1 -1
  83. package/dist/blocks/domains/index.d.ts +1 -1
  84. package/dist/blocks/drive/index.d.ts +2 -3
  85. package/dist/blocks/drive/index.js +14 -5
  86. package/dist/blocks/employees/index.d.ts +1 -1
  87. package/dist/blocks/engagements/index.d.ts +1 -1
  88. package/dist/blocks/entitlements/index.d.ts +3 -3
  89. package/dist/blocks/entitlements/react/index.d.ts +2 -2
  90. package/dist/blocks/entitlements/solid/index.d.ts +2 -2
  91. package/dist/blocks/entitlements/svelte/index.d.ts +2 -2
  92. package/dist/blocks/entitlements/vue/index.d.ts +2 -2
  93. package/dist/blocks/flags/index.d.ts +1 -1
  94. package/dist/blocks/forms/index.d.ts +2 -2
  95. package/dist/blocks/forms/react/index.d.ts +1 -1
  96. package/dist/blocks/forms/solid/index.d.ts +2 -2
  97. package/dist/blocks/forms/svelte/index.d.ts +2 -2
  98. package/dist/blocks/forms/vue/index.d.ts +2 -2
  99. package/dist/blocks/hiring/index.d.ts +1 -1
  100. package/dist/blocks/identities/index.d.ts +2 -2
  101. package/dist/blocks/imports/index.d.ts +1 -1
  102. package/dist/blocks/inbox/index.d.ts +2 -2
  103. package/dist/blocks/inbox/react/index.d.ts +2 -2
  104. package/dist/blocks/inbox/react/server.d.ts +2 -2
  105. package/dist/blocks/inbox/solid/index.d.ts +2 -2
  106. package/dist/blocks/inbox/svelte/index.d.ts +2 -2
  107. package/dist/blocks/inbox/vue/index.d.ts +2 -2
  108. package/dist/blocks/index.d.ts +2 -2
  109. package/dist/blocks/inventory/index.d.ts +1 -1
  110. package/dist/blocks/invoices/index.d.ts +1 -1
  111. package/dist/blocks/jobs/index.d.ts +1 -1
  112. package/dist/blocks/knowledge/index.d.ts +2 -2
  113. package/dist/blocks/leave/index.d.ts +1 -1
  114. package/dist/blocks/memory/index.d.ts +3 -3
  115. package/dist/blocks/metrics/index.d.ts +1 -1
  116. package/dist/blocks/mfa/index.d.ts +2 -2
  117. package/dist/blocks/mfa/react/index.d.ts +1 -1
  118. package/dist/blocks/mfa/react/server.d.ts +1 -1
  119. package/dist/blocks/mfa/solid/index.d.ts +2 -2
  120. package/dist/blocks/mfa/svelte/index.d.ts +2 -2
  121. package/dist/blocks/mfa/vue/index.d.ts +2 -2
  122. package/dist/blocks/notifications/index.d.ts +3 -3
  123. package/dist/blocks/notifications/react/index.d.ts +1 -1
  124. package/dist/blocks/notifications/react/server.d.ts +1 -1
  125. package/dist/blocks/notifications/solid/index.d.ts +2 -2
  126. package/dist/blocks/notifications/svelte/index.d.ts +2 -2
  127. package/dist/blocks/notifications/vue/index.d.ts +2 -2
  128. package/dist/blocks/number-sequences/index.d.ts +1 -1
  129. package/dist/blocks/oauth-server/index.d.ts +1 -1
  130. package/dist/blocks/onboarding/index.d.ts +2 -2
  131. package/dist/blocks/onboarding/react/index.d.ts +1 -1
  132. package/dist/blocks/onboarding/react/server.d.ts +1 -1
  133. package/dist/blocks/onboarding/solid/index.d.ts +2 -2
  134. package/dist/blocks/onboarding/svelte/index.d.ts +2 -2
  135. package/dist/blocks/onboarding/vue/index.d.ts +2 -2
  136. package/dist/blocks/orders/index.d.ts +1 -1
  137. package/dist/blocks/organizations/index.d.ts +2 -2
  138. package/dist/blocks/organizations/react/index.d.ts +1 -1
  139. package/dist/blocks/organizations/react/server.d.ts +1 -1
  140. package/dist/blocks/organizations/solid/index.d.ts +2 -2
  141. package/dist/blocks/organizations/svelte/index.d.ts +2 -2
  142. package/dist/blocks/organizations/vue/index.d.ts +2 -2
  143. package/dist/blocks/outbox/index.d.ts +2 -2
  144. package/dist/blocks/parties/index.d.ts +1 -1
  145. package/dist/blocks/pipelines/index.d.ts +1 -1
  146. package/dist/blocks/profiles/index.d.ts +1 -1
  147. package/dist/blocks/promotions/index.d.ts +1 -1
  148. package/dist/blocks/push/index.d.ts +2 -2
  149. package/dist/blocks/quotes/index.d.ts +1 -1
  150. package/dist/blocks/rank/index.d.ts +1 -1
  151. package/dist/blocks/reactions/index.d.ts +2 -2
  152. package/dist/blocks/reactions/react/index.d.ts +1 -1
  153. package/dist/blocks/reactions/solid/index.d.ts +2 -2
  154. package/dist/blocks/reactions/svelte/index.d.ts +2 -2
  155. package/dist/blocks/reactions/vue/index.d.ts +2 -2
  156. package/dist/blocks/relations/index.d.ts +1 -1
  157. package/dist/blocks/reminders/index.d.ts +3 -3
  158. package/dist/blocks/reviews/index.d.ts +1 -1
  159. package/dist/blocks/rules/index.d.ts +4 -4
  160. package/dist/blocks/rules/react/index.d.ts +1 -1
  161. package/dist/blocks/rules/solid/index.d.ts +2 -2
  162. package/dist/blocks/rules/svelte/index.d.ts +2 -2
  163. package/dist/blocks/rules/vue/index.d.ts +2 -2
  164. package/dist/blocks/saved-views/index.d.ts +2 -2
  165. package/dist/blocks/saved-views/react/index.d.ts +1 -1
  166. package/dist/blocks/saved-views/react/server.d.ts +1 -1
  167. package/dist/blocks/saved-views/solid/index.d.ts +2 -2
  168. package/dist/blocks/saved-views/svelte/index.d.ts +2 -2
  169. package/dist/blocks/saved-views/vue/index.d.ts +2 -2
  170. package/dist/blocks/search/index.d.ts +2 -2
  171. package/dist/blocks/search/react/index.d.ts +1 -1
  172. package/dist/blocks/search/react/server.d.ts +1 -1
  173. package/dist/blocks/search/solid/index.d.ts +2 -2
  174. package/dist/blocks/search/svelte/index.d.ts +2 -2
  175. package/dist/blocks/search/vue/index.d.ts +2 -2
  176. package/dist/blocks/service-principals/index.d.ts +1 -1
  177. package/dist/blocks/sessions/index.d.ts +2 -2
  178. package/dist/blocks/sessions/react/index.d.ts +1 -1
  179. package/dist/blocks/sessions/react/server.d.ts +1 -1
  180. package/dist/blocks/sessions/solid/index.d.ts +2 -2
  181. package/dist/blocks/sessions/svelte/index.d.ts +2 -2
  182. package/dist/blocks/sessions/vue/index.d.ts +2 -2
  183. package/dist/blocks/settings/index.d.ts +2 -2
  184. package/dist/blocks/settings/react/index.d.ts +1 -1
  185. package/dist/blocks/settings/react/server.d.ts +1 -1
  186. package/dist/blocks/settings/solid/index.d.ts +2 -2
  187. package/dist/blocks/settings/svelte/index.d.ts +2 -2
  188. package/dist/blocks/settings/vue/index.d.ts +2 -2
  189. package/dist/blocks/share-links/index.d.ts +1 -1
  190. package/dist/blocks/shared-signals/index.d.ts +2 -2
  191. package/dist/blocks/signing-keys/index.d.ts +1 -1
  192. package/dist/blocks/sla/index.d.ts +1 -1
  193. package/dist/blocks/sso/index.d.ts +2 -2
  194. package/dist/blocks/state-machine/index.d.ts +1 -1
  195. package/dist/blocks/tags/index.d.ts +2 -2
  196. package/dist/blocks/tags/react/index.d.ts +1 -1
  197. package/dist/blocks/tags/react/server.d.ts +1 -1
  198. package/dist/blocks/tags/solid/index.d.ts +2 -2
  199. package/dist/blocks/tags/svelte/index.d.ts +2 -2
  200. package/dist/blocks/tags/vue/index.d.ts +2 -2
  201. package/dist/blocks/targets/index.d.ts +1 -1
  202. package/dist/blocks/teams/index.d.ts +1 -1
  203. package/dist/blocks/templates/index.d.ts +3 -3
  204. package/dist/blocks/time-tracking/index.d.ts +1 -1
  205. package/dist/blocks/trash/index.d.ts +1 -1
  206. package/dist/blocks/undo/index.d.ts +2 -2
  207. package/dist/blocks/undo/react/index.d.ts +1 -1
  208. package/dist/blocks/undo/react/server.d.ts +1 -1
  209. package/dist/blocks/undo/solid/index.d.ts +2 -2
  210. package/dist/blocks/undo/svelte/index.d.ts +2 -2
  211. package/dist/blocks/undo/vue/index.d.ts +2 -2
  212. package/dist/blocks/usage/index.d.ts +2 -2
  213. package/dist/blocks/usage/react/index.d.ts +1 -1
  214. package/dist/blocks/usage/react/server.d.ts +1 -1
  215. package/dist/blocks/usage/solid/index.d.ts +2 -2
  216. package/dist/blocks/usage/svelte/index.d.ts +2 -2
  217. package/dist/blocks/usage/vue/index.d.ts +2 -2
  218. package/dist/blocks/vercel-marketplace/index.d.ts +1 -1
  219. package/dist/blocks/versions/index.d.ts +1 -1
  220. package/dist/blocks/waitlist/index.d.ts +1 -1
  221. package/dist/blocks/webhooks/index.d.ts +4 -4
  222. package/dist/blocks/work-items/index.d.ts +1 -1
  223. package/dist/blocks/workflow-builder/index.d.ts +4 -4
  224. package/dist/blocks/workflow-builder/react/index.d.ts +2 -2
  225. package/dist/blocks/workflow-builder/solid/index.d.ts +2 -2
  226. package/dist/blocks/workflow-builder/svelte/index.d.ts +2 -2
  227. package/dist/blocks/workflow-builder/vue/index.d.ts +2 -2
  228. package/dist/blocks/workflows/index.d.ts +2 -2
  229. package/dist/blocks/workflows/react/index.d.ts +1 -1
  230. package/dist/blocks/workflows/solid/index.d.ts +2 -2
  231. package/dist/blocks/workflows/svelte/index.d.ts +2 -2
  232. package/dist/blocks/workflows/vue/index.d.ts +2 -2
  233. package/dist/{bucket-BBSNDFNH.d.ts → bucket-BbePDVwc.d.ts} +16 -0
  234. package/dist/chat-sdk/index.d.ts +2 -2
  235. package/dist/chat-sdk/react/index.d.ts +2 -2
  236. package/dist/chat-sdk/react/server.d.ts +2 -2
  237. package/dist/cli/add-DnAyR9w_.js +1 -0
  238. package/dist/cli/{add-B5V6uokQ.js → add-TT72pQk6.js} +3 -3
  239. package/dist/cli/adopt-BuS-DC7_.js +1 -0
  240. package/dist/cli/{adopt-Ht34C3QD.js → adopt-mbB1bcIG.js} +4 -4
  241. package/dist/cli/{apply-4BmTvj2A.js → apply-CiBFOFGw.js} +15 -21
  242. package/dist/cli/bin.js +1 -1
  243. package/dist/cli/{blocks-jIvPqPtw.js → blocks-5-JGzwXX.js} +1 -1
  244. package/dist/cli/{blocks-bBI050w6.js → blocks-DeLQOlUK.js} +1 -1
  245. package/dist/cli/{cache-CVJmPGpd.js → cache-DQwgb3rg.js} +1 -1
  246. package/dist/cli/{codemod-vsknM1Ue.js → codemod-BzAMX4el.js} +2 -2
  247. package/dist/cli/{command-DLCZeHdo.js → command-dfdVhU_2.js} +16 -1
  248. package/dist/cli/{completion-CEZ-c3ja.js → completion-4lLjtI49.js} +1 -1
  249. package/dist/cli/{completion-D2BObVth.js → completion-D4InNrxw.js} +2 -2
  250. package/dist/cli/{completion-BAm8SwGQ.js → completion-zsp5s0zI.js} +2 -2
  251. package/dist/cli/{config-CynctXbc.js → config-CCyweX7Y.js} +1 -1
  252. package/dist/cli/{config-CC5DXgKX.js → config-DI6ielsx.js} +1 -1
  253. package/dist/cli/{config-C4e_RrmL.js → config-yZ55rsKZ.js} +1 -1
  254. package/dist/cli/{db-BxMRcHrY.js → db-TRymMyAW.js} +3 -3
  255. package/dist/cli/{design-edit-B-WsnhUF.js → design-edit-0U9iCTiS.js} +29 -2
  256. package/dist/cli/{doctor-D47sFjh9.js → doctor-DOfy6kjt.js} +119 -70
  257. package/dist/cli/env-Cmu99uKR.js +1 -0
  258. package/dist/cli/{env--JFvv45k.js → env-Dh5K5t2U.js} +32 -31
  259. package/dist/cli/{gen-D2E8osBE.js → gen-D3sC5jDn.js} +11 -11
  260. package/dist/cli/index.d.ts +1 -1
  261. package/dist/cli/index.js +6 -6
  262. package/dist/cli/{init-Cx7DDAdQ.js → init-DNomoycJ.js} +12 -18
  263. package/dist/cli/{introspect-Ck7aa6v0.js → introspect-kYX06Q2g.js} +3 -3
  264. package/dist/cli/{keys-6ufnWeZl.js → keys-B8dIJwwi.js} +1 -1
  265. package/dist/cli/{live-CLxJNC0r.js → live-CkV3d3yp.js} +1 -1
  266. package/dist/cli/{mcp-BVWvEoKo.js → mcp-DrxB2Wuw.js} +3 -3
  267. package/dist/cli/{metadata-BRywyPvv.js → metadata-BGkle6WM.js} +1 -1
  268. package/dist/cli/{moved-BmtFuMK3.js → moved-BMQu1YNY.js} +1 -1
  269. package/dist/cli/{parse-ksnw4phM.js → parse-QzDvMpXH.js} +1 -1
  270. package/dist/cli/{preset-B1o6KbFp.js → preset-CfIs24cc.js} +1 -1
  271. package/dist/cli/run-Bck-p0MI.js +63 -0
  272. package/dist/cli/{run-Bb8Nn8Ax.js → run-BhJKAanr.js} +2 -2
  273. package/dist/cli/{run-nX5ffQM_.js → run-DRZ10srj.js} +51 -43
  274. package/dist/cli/{scaffold-DcXr4z7M.js → scaffold-DoURlDEI.js} +1 -1
  275. package/dist/cli/{scaffold-fO-FJGoO.js → scaffold-mzy3OsN5.js} +1 -1
  276. package/dist/cli/seed-C5q4UUIL.js +1 -0
  277. package/dist/cli/{seed-BmOC6_iz.js → seed-CIdg6s7m.js} +3 -3
  278. package/dist/cli/{skills-CUx7S0bk.js → skills-D3zwIlGA.js} +1 -1
  279. package/dist/cli/{snapshot-ClgWGd-b.js → snapshot-BBKFojqM.js} +3 -3
  280. package/dist/cli/{source-args-BDiUhsH8.js → source-args-Cwo7zwvq.js} +1 -1
  281. package/dist/cli/{spec-DjHpWZJM.js → spec-DOgQUZwM.js} +1 -1
  282. package/dist/cli/{spec-CM7iyRnE.js → spec-DZeIP9ta.js} +3 -3
  283. package/dist/cli/{sql-C4ymac2h.js → sql-CL_Lbhwl.js} +1 -1
  284. package/dist/cli/{sql-ybcjbz20.js → sql-DLOvvnBV.js} +1 -1
  285. package/dist/cli/stack-env-_uWWNHWq.js +87 -0
  286. package/dist/cli/{stack-status-Cb_D79ZR.js → stack-status-_NUgd-g5.js} +41 -1
  287. package/dist/cli/{version-CUKjFbNd.js → version-B7akdvDv.js} +1 -1
  288. package/dist/client/index.d.ts +5 -5
  289. package/dist/client/native/index.d.ts +5 -5
  290. package/dist/{client-GdJH4XJM.d.ts → client-BAOZuBhz.d.ts} +1 -1
  291. package/dist/{client-B9_8yzct.d.ts → client-BJN0IMEp.d.ts} +2 -2
  292. package/dist/{client-QvuCfO4b.d.ts → client-BMcjLG0V.d.ts} +5 -5
  293. package/dist/{client-CeH7vd-g.d.ts → client-BN_fXOs7.d.ts} +1 -1
  294. package/dist/{client-CCGSn7m5.d.ts → client-BONsuFYf.d.ts} +4 -4
  295. package/dist/{client-CBQ2TV0r.d.ts → client-BPn9XhAM.d.ts} +1 -1
  296. package/dist/{client-ehjQ2tIT.d.ts → client-BtC-r4hE.d.ts} +3 -3
  297. package/dist/{client-DarDYaQj.d.ts → client-BuneNd-C.d.ts} +1 -1
  298. package/dist/{client-B_vHBwB6.d.ts → client-CHwNV8Kz.d.ts} +3 -3
  299. package/dist/{client-DbxvLC9Y.d.ts → client-CLQHsa-2.d.ts} +1 -1
  300. package/dist/{client-9ZOirdtr.d.ts → client-CMxxwT3N.d.ts} +3 -3
  301. package/dist/{client-B4a7f5ma.d.ts → client-CU7aNN_B.d.ts} +2 -2
  302. package/dist/{client-cWUWrgis.d.ts → client-CYEdJKjk.d.ts} +1 -1
  303. package/dist/{client-CNh-pjkT.d.ts → client-CYhSGlCN.d.ts} +3 -3
  304. package/dist/{client-5YAtJjyT.d.ts → client-D3gRTNSi.d.ts} +1 -1
  305. package/dist/{client-BqoYuTK3.d.ts → client-DB34f_7i.d.ts} +2 -2
  306. package/dist/{client-eCtwzCbQ.d.ts → client-DCawyopp.d.ts} +3 -3
  307. package/dist/{client-Bovn6-M9.d.ts → client-Dqa4XyJ5.d.ts} +1 -1
  308. package/dist/{client-CXTDJCIs.d.ts → client-Dr5h2r9r.d.ts} +1 -1
  309. package/dist/{client-CrZKZVbb.d.ts → client-DrTqKgvy.d.ts} +1 -1
  310. package/dist/{client-BNy-K6XT.d.ts → client-GCCRI9ge.d.ts} +1 -1
  311. package/dist/{client-DLz68Qga.d.ts → client-P6v3h7vh.d.ts} +1 -1
  312. package/dist/{client-CJT3xiuI.d.ts → client-P8l8ncxV.d.ts} +3 -3
  313. package/dist/{client-BXv09wO1.d.ts → client-kWg4OqIr.d.ts} +2 -2
  314. package/dist/{client-C3rmP3b0.d.ts → client-tvG258_1.d.ts} +4 -4
  315. package/dist/{client-Dft5Vq6m.d.ts → client-wKmX-f3r.d.ts} +1 -1
  316. package/dist/{composite-BFatHqOU.js → composite-1kPAxXto.js} +1 -1
  317. package/dist/{composite-B1Mmo4TU.d.ts → composite-DzvBL5nb.d.ts} +5 -5
  318. package/dist/{connectors-CR9FJGzV.d.ts → connectors-BwPNt-ZG.d.ts} +1 -1
  319. package/dist/{controller-BBXX1RMw.d.ts → controller-BZhiIb-N.d.ts} +1 -1
  320. package/dist/create/index.d.ts +24 -2
  321. package/dist/create/index.js +1001 -914
  322. package/dist/credentials/index.d.ts +2 -2
  323. package/dist/{define-M_r1d2AT.d.ts → define-DYZnvAbs.d.ts} +1 -1
  324. package/dist/{define-block-CPyJ95rq.d.ts → define-block-BHxLHLys.d.ts} +2 -2
  325. package/dist/edge/index.d.ts +8 -8
  326. package/dist/edge/index.js +3 -3
  327. package/dist/elysia/index.d.ts +1 -1
  328. package/dist/{embeddings-lTUwzvW4.d.ts → embeddings-CKhygw4C.d.ts} +1 -1
  329. package/dist/{ended-DQmwYosO.d.ts → ended-De6H52nX.d.ts} +1 -1
  330. package/dist/{entitlements-DgkeStXd.d.ts → entitlements-CtBGXb3B.d.ts} +2 -2
  331. package/dist/eve/index.d.ts +3 -3
  332. package/dist/eve/index.js +1 -1
  333. package/dist/{eve-C_Onyk_j.d.ts → eve-B6ru2Bt4.d.ts} +2 -2
  334. package/dist/{executor-DfdC00xr.d.ts → executor-BWgJNbGh.d.ts} +1 -1
  335. package/dist/expo/index.d.ts +3 -3
  336. package/dist/expo/index.js +3 -3
  337. package/dist/expo-sqlite/index.d.ts +1 -1
  338. package/dist/{field-errors-DmJICh93.d.ts → field-errors-Z-sgsdoN.d.ts} +6 -6
  339. package/dist/{framework-D6IFkuAg.d.ts → framework-BQhTsLX-.d.ts} +5 -5
  340. package/dist/{framework-Ch8bMmQY.js → framework-C6PKBgme.js} +1 -1
  341. package/dist/h3/index.d.ts +1 -1
  342. package/dist/h3/v1/index.d.ts +1 -1
  343. package/dist/hono/index.d.ts +8 -8
  344. package/dist/hono/index.js +2 -2
  345. package/dist/{index-DgobXyil.d.ts → index-1Vsg-7YV.d.ts} +1 -1
  346. package/dist/{index-D8yhOz_4.d.ts → index-BJLPQr2s.d.ts} +36 -3
  347. package/dist/{index-CK0Sxx57.d.ts → index-C-_fs7EI.d.ts} +7 -7
  348. package/dist/{index-F6XTTkC9.d.ts → index-CXFf-c-j.d.ts} +4 -4
  349. package/dist/{index-CEcDqDhc.d.ts → index-Cm2-g_4H.d.ts} +1 -1
  350. package/dist/{index-qCG78-Rf.d.ts → index-DTQSeHx2.d.ts} +2 -2
  351. package/dist/{index-DHReeV74.d.ts → index-Hc4tetmB.d.ts} +1 -1
  352. package/dist/{index-Bq409YZn.d.ts → index-QWTq2o31.d.ts} +1 -1
  353. package/dist/{index-Csi8jD-m.d.ts → index-XcTBR4Gb.d.ts} +1 -1
  354. package/dist/index.d.ts +2 -2
  355. package/dist/{kit-BeZX2pR_.d.ts → kit-De-EVRhw.d.ts} +3 -3
  356. package/dist/{knowledge-CRk1jOAJ.d.ts → knowledge-B5zdpDD-.d.ts} +1 -1
  357. package/dist/list/index.d.ts +1 -1
  358. package/dist/{list-query-FhFXzObg.d.ts → list-query-aXr2WkGA.d.ts} +1 -1
  359. package/dist/mcp/index.d.ts +4 -4
  360. package/dist/mcp/index.js +1 -1
  361. package/dist/mcp/sdk/index.d.ts +5 -5
  362. package/dist/mcp/sdk/index.js +1 -1
  363. package/dist/nestjs/index.d.ts +2 -2
  364. package/dist/next/index.d.ts +15 -15
  365. package/dist/next/index.js +2 -2
  366. package/dist/node/index.d.ts +2 -2
  367. package/dist/orpc/index.d.ts +5 -5
  368. package/dist/orpc/index.js +1 -1
  369. package/dist/otel/index.js +5 -5
  370. package/dist/{outbox-njgoVzFA.d.ts → outbox-B1hZ7PPY.d.ts} +1 -1
  371. package/dist/{ports-DCAcG26M.d.ts → ports-BCDIbC_U.d.ts} +1 -1
  372. package/dist/{ports-DGe1vzF2.d.ts → ports-P0A5wo_-.d.ts} +2 -2
  373. package/dist/powersync/index.d.ts +2 -2
  374. package/dist/preset/index.d.ts +2 -2
  375. package/dist/preset/index.js +2 -2
  376. package/dist/{preset-Cqwlwx6G.js → preset-Cf0T9GRt.js} +49 -6
  377. package/dist/{provider-CNs0Jx0I.d.ts → provider-DXgx5oSA.d.ts} +1 -1
  378. package/dist/{push-token-D2sDxSNN.d.ts → push-token-y1Gnz5bQ.d.ts} +1 -1
  379. package/dist/query/index.d.ts +1 -1
  380. package/dist/react/index.d.ts +7 -7
  381. package/dist/react/native/index.d.ts +1 -1
  382. package/dist/react/server.d.ts +8 -8
  383. package/dist/react/session.d.ts +2 -2
  384. package/dist/react-router/index.d.ts +5 -5
  385. package/dist/react-router/index.js +2 -2
  386. package/dist/realtime/index.d.ts +5 -5
  387. package/dist/{refusal-CufncwaN.d.ts → refusal-C7geIBRl.d.ts} +1 -1
  388. package/dist/{resolve-f8QNuYI3.js → resolve-AtncaPTU.js} +12 -5
  389. package/dist/{resolve-Bqb8TMTt.d.ts → resolve-Ceft-18-.d.ts} +6 -2
  390. package/dist/{resource-execute-ruP2L1op.d.ts → resource-execute-Bxvgmx-n.d.ts} +1 -1
  391. package/dist/{resource-types-CGr0BbL-.d.ts → resource-types-LW1i5-h3.d.ts} +2 -2
  392. package/dist/{resources-BiQpsM6O.d.ts → resources-D3_FAz_H.d.ts} +1 -1
  393. package/dist/{respond-CEBC6KUX.d.ts → respond-BSL36dQp.d.ts} +1 -1
  394. package/dist/server/index.d.ts +27 -19
  395. package/dist/server/index.js +4 -4
  396. package/dist/{server-types-BKN_R4Ws.d.ts → server-types-fLdep4gb.d.ts} +11 -9
  397. package/dist/{session-CwpfitmI.d.ts → session-DObioXpX.d.ts} +3 -3
  398. package/dist/solid/index.d.ts +7 -7
  399. package/dist/{solid-controller-Uqi5ef6z.d.ts → solid-controller-CWotGxcG.d.ts} +1 -1
  400. package/dist/solid-start/index.d.ts +5 -5
  401. package/dist/solid-start/index.js +2 -2
  402. package/dist/sql/index.d.ts +1 -1
  403. package/dist/sql/index.js +1 -1
  404. package/dist/{sql-DCfCbS2j.js → sql-CT1Jnwp8.js} +1 -1
  405. package/dist/ssr/index.d.ts +4 -4
  406. package/dist/ssr/index.js +1 -1
  407. package/dist/storage/index.d.ts +2 -2
  408. package/dist/storage/index.js +11 -0
  409. package/dist/{subject-readers-BNQzBDN9.d.ts → subject-readers-BUChuOxL.d.ts} +1 -1
  410. package/dist/{support-BAhTqI7y.js → support-C2wPYwD7.js} +1 -1
  411. package/dist/{support-view-IRnDLuGN.d.ts → support-view-Bj_lZ8Wr.d.ts} +1 -1
  412. package/dist/svelte/index.d.ts +6 -6
  413. package/dist/{svelte-controller-BQOIXWEw.d.ts → svelte-controller-sS4X66yL.d.ts} +1 -1
  414. package/dist/sveltekit/index.d.ts +6 -6
  415. package/dist/sveltekit/index.js +2 -2
  416. package/dist/{tags-AUpl4Ob9.d.ts → tags-BrGopDVG.d.ts} +1 -1
  417. package/dist/tanstack-db/index.d.ts +1 -1
  418. package/dist/tanstack-db/supabase/index.d.ts +1 -1
  419. package/dist/tanstack-start/index.d.ts +5 -5
  420. package/dist/tanstack-start/index.js +2 -2
  421. package/dist/{tenant-BNp3kBAG.d.ts → tenant-DZMLVuyQ.d.ts} +2 -2
  422. package/dist/testing/index.d.ts +13 -15
  423. package/dist/{topic-1WTkDnPd.d.ts → topic-DAY_HOX2.d.ts} +3 -3
  424. package/dist/{types-DDQ-Rsep.d.ts → types-BA1eTvy4.d.ts} +1 -1
  425. package/dist/{types-Bq64h5nY.d.ts → types-Bels39_u.d.ts} +2 -2
  426. package/dist/{types-DO9xWsGC.d.ts → types-DOC7wnh6.d.ts} +11 -2
  427. package/dist/{types-B4zhT6dq.d.ts → types-D_2rClz-.d.ts} +1 -1
  428. package/dist/upload-claim-BBFCZbBF.js +33 -0
  429. package/dist/{vault-DR2-zOjz.d.ts → vault-ClkzMGTP.d.ts} +1 -1
  430. package/dist/vercel-connect/index.d.ts +1 -1
  431. package/dist/{verify-BucYsoKq.d.ts → verify-DU4p9-Ve.d.ts} +1 -1
  432. package/dist/{version-TXpQEfh1.js → version-DSWxci83.js} +1 -1
  433. package/dist/{view-Bf7e07rQ.d.ts → view-KQhe6eNc.d.ts} +1 -1
  434. package/dist/vue/index.d.ts +7 -7
  435. package/dist/{vue-controller-Cav6Wt_r.d.ts → vue-controller-BUo1oove.d.ts} +1 -1
  436. package/dist/{watch-ry70AEm6.d.ts → watch-5btote1y.d.ts} +2 -2
  437. package/dist/{watch-topic-DWHy63ZJ.d.ts → watch-topic-C79ZW5-R.d.ts} +1 -1
  438. package/dist/workflow-sdk/builder/index.d.ts +3 -3
  439. package/dist/workflow-sdk/index.d.ts +1 -1
  440. package/dist/{workflow-sdk-DM7T3sF4.d.ts → workflow-sdk-CWdCWj7M.d.ts} +1 -1
  441. package/dist/yjs/index.d.ts +1 -1
  442. package/package.json +1 -1
  443. package/schemas/cli-commands-v1.json +15 -0
  444. package/schemas/config-v1.json +1 -1
  445. package/schemas/doctor-report-v1.json +1 -0
  446. package/dist/cli/add-DzRJEHzD.js +0 -1
  447. package/dist/cli/adopt-DDy50yz9.js +0 -1
  448. package/dist/cli/env-D-O91RK1.js +0 -1
  449. package/dist/cli/seed-C_BmN498.js +0 -1
@@ -1,7 +1,10 @@
1
1
  import { n as CliError } from "./errors-Caiz_0so.js";
2
2
  import { t as isRecord } from "./guards-CUlDNYZs.js";
3
3
  import { f as setPathInConfig, p as setPathInJson } from "./config-edit-Ct1lXe8a.js";
4
- import { DEFAULT_CONVENTIONS, PRESET_TENANT_NAMES, presetField, presetValueLabel, withPresetField } from "better-supabase/preset";
4
+ import { existsSync } from "node:fs";
5
+ import { resolve } from "node:path";
6
+ import { readFile } from "node:fs/promises";
7
+ import { DEFAULT_CONVENTIONS, PRESET_TENANT_NAMES, designOf, isPresetName, presetField, presetOf, presetValueLabel, readDesignFile, withPresetField } from "better-supabase/preset";
5
8
  //#region src/cli/conventions.ts
6
9
  const arg = (key, description) => ({
7
10
  type: "string",
@@ -123,6 +126,30 @@ function createUrlParam(input, name) {
123
126
  /** What `init` and `apply` print for a URL with `&authz=`. */
124
127
  const AUTHZ_NOTE = "The authorization library chosen on Create isn't part of the preset. Open Get code on Create for its setup, then set `authorization` in the config to its adapter.";
125
128
  //#endregion
129
+ //#region src/cli/preset-input.ts
130
+ /** Whether `--preset` names a design file rather than a preset or URL. */
131
+ const isDesignFilePath = (input) => input.endsWith(".json");
132
+ /**
133
+ * Reads `--preset`: a named preset, a code, a `/create` URL, or the path of
134
+ * a design file Create downloaded (relative to `root`). Throws a usage
135
+ * error naming the problem.
136
+ */
137
+ async function readPresetInput(input, root) {
138
+ try {
139
+ if (isDesignFilePath(input)) {
140
+ const path = resolve(root, input);
141
+ if (!existsSync(path)) throw new TypeError(`${input} doesn't exist. Download the design file from Create, or pass a preset name, code or URL.`);
142
+ return readDesignFile(await readFile(path, "utf-8"));
143
+ }
144
+ return {
145
+ preset: presetOf(input),
146
+ design: isPresetName(input) ? void 0 : await designOf(input)
147
+ };
148
+ } catch (error) {
149
+ throw new CliError("usage", error instanceof Error ? error.message : String(error));
150
+ }
151
+ }
152
+ //#endregion
126
153
  //#region src/cli/sql/design-edit.ts
127
154
  /** The `extraColumns` a block already has in the config, as plain strings. */
128
155
  function currentExtraColumns(config, module) {
@@ -172,4 +199,4 @@ function writeDesign(file, source, design, config) {
172
199
  };
173
200
  }
174
201
  //#endregion
175
- export { CONVENTION_COMPLETIONS as a, hasConventionFlags as c, CONVENTION_ARGS as i, promptConventions as l, AUTHZ_NOTE as n, conventionFlags as o, createUrlParam as r, defaultConventions as s, writeDesign as t, withConventions as u };
202
+ export { CONVENTION_ARGS as a, defaultConventions as c, withConventions as d, createUrlParam as i, hasConventionFlags as l, readPresetInput as n, CONVENTION_COMPLETIONS as o, AUTHZ_NOTE as r, conventionFlags as s, writeDesign as t, promptConventions as u };
@@ -1,25 +1,28 @@
1
- import { a as list, p as commandMeta, r as defineCliCommand } from "./command-DLCZeHdo.js";
1
+ import { a as list, p as commandMeta, r as defineCliCommand } from "./command-dfdVhU_2.js";
2
2
  import { i as plain } from "./style-2JfIPVMQ.js";
3
- import { t as VERSION } from "./version-CUKjFbNd.js";
3
+ import { t as VERSION } from "./version-B7akdvDv.js";
4
4
  import { n as CliError, r as errorText } from "./errors-Caiz_0so.js";
5
5
  import { a as sameText, t as display } from "./io-BiPX-_J1.js";
6
- import { t as CACHE_DIR } from "./cache-CVJmPGpd.js";
6
+ import { t as CACHE_DIR } from "./cache-DQwgb3rg.js";
7
7
  import { t as byCodePoint } from "./compare-BmIWVEui.js";
8
8
  import { h as satisfies, m as peerVersions, t as MetadataRejectedError } from "./typegen--TfvOPLh.js";
9
9
  import { t as isRecord } from "./guards-CUlDNYZs.js";
10
10
  import { c as configFor, s as notNullTag } from "./emit-56LAG_Px.js";
11
- import { _ as withoutStrings, a as METADATA_GAPS_TEXT, c as accessModule, d as RLS_RULES, f as appliesTo, g as policyHelpers, h as functionObject, l as entitlementsModule, m as functionBody, p as escape$1, s as AUTHORIZATION_RULES, u as COMMANDS$1, v as advisorRule, x as renderFiles, y as splinterTables } from "./run-Bb8Nn8Ax.js";
11
+ import { _ as withoutStrings, a as METADATA_GAPS_TEXT, c as accessModule, d as RLS_RULES, f as appliesTo, g as policyHelpers, h as functionObject, l as entitlementsModule, m as functionBody, p as escape$1, s as AUTHORIZATION_RULES, u as COMMANDS$1, v as advisorRule, x as renderFiles, y as splinterTables } from "./run-BhJKAanr.js";
12
12
  import { D as providerLabel, a as migrationModules, i as migrationHolds, r as latestMigration, t as MODULES_SUFFIX, v as migrationsDir, x as compiledReadSets, y as moduleLayoutFor } from "./module-migration-CPhuiY8C.js";
13
- import { l as stdinDatabaseUrl } from "./config-C4e_RrmL.js";
13
+ import { l as stdinDatabaseUrl } from "./config-yZ55rsKZ.js";
14
14
  import { a as findRepoRoot, c as httpHooks, d as readSupabaseToml, f as schemaPaths, h as tomlGet, i as diffEngine, l as migrationCommand, n as declarativeSchemasDir, p as sqlWorkflow, u as pgFunctionHooks } from "./supabase-toml-BC5sNVKU.js";
15
+ import { t as PROCESS_ENV } from "./env-C8R7Nf0a.js";
16
+ import { n as readStackStatus } from "./stack-status-_NUgd-g5.js";
15
17
  import { t as connect } from "./db-DT1bGB02.js";
16
- import { c as isSqliteLiteDriver, n as managementTarget, o as snapshotFile, p as request, r as openSource, s as liteDriverOf, t as loadSnapshot } from "./snapshot-ClgWGd-b.js";
18
+ import { c as isSqliteLiteDriver, n as managementTarget, o as snapshotFile, p as request, r as openSource, s as liteDriverOf, t as loadSnapshot } from "./snapshot-BBKFojqM.js";
17
19
  import { n as applyPlan, o as insideRoot, r as changeLines } from "./files-DDvAwTko.js";
18
20
  import { a as permissionCatalogKeys, i as lineOf, l as tableObject, n as exposed, o as policyObject, r as exposedSchemas, s as qualified, t as catalogOf, u as workflowOf } from "./shared-DKLuA1Tp.js";
19
21
  import { t as MIGRATION_SAFETY_RULES } from "./migration-safety-DjVpz2D6.js";
20
- import { a as sourceFlags, n as SOURCE_ARGS } from "./source-args-BDiUhsH8.js";
21
- import { i as reservedRoles, n as ident$1, r as literal$1, t as LIVE_RULES } from "./live-CLxJNC0r.js";
22
- import { i as refuseWithMetadata, r as readMetadataSnapshot } from "./metadata-BRywyPvv.js";
22
+ import { a as sourceFlags, n as SOURCE_ARGS } from "./source-args-Cwo7zwvq.js";
23
+ import { i as reservedRoles, n as ident$1, r as literal$1, t as LIVE_RULES } from "./live-CkV3d3yp.js";
24
+ import { i as staleVariables, r as stackEnvValues, t as PREFIX_NAMES } from "./stack-env-_uWWNHWq.js";
25
+ import { i as refuseWithMetadata, r as readMetadataSnapshot } from "./metadata-BGkle6WM.js";
23
26
  import { existsSync } from "node:fs";
24
27
  import { dirname, resolve } from "node:path";
25
28
  import { createHash } from "node:crypto";
@@ -27,6 +30,107 @@ import { glob, mkdir, readFile, readdir, writeFile } from "node:fs/promises";
27
30
  import { SECRET_COLUMNS, SQL_MODULES, adoptedTables, contractSignature, customContracts, dataExportPlan, excludedColumns, expiredFlagsQuery, migrationOptionUses, moduleDeprecations, moduleEventTriggers, moduleFileVersion, moduleLayout, moduleVersion, renderModules, sameModuleFile, sameTenantColumn, sameTenantTrigger, sharedRolesProblems, subjectColumns } from "better-supabase/sql";
28
31
  import { DEFAULT_ACTIVE_TENANT, tenantClaimPaths } from "better-supabase/config";
29
32
  import { defineBucket, parseSize } from "better-supabase/storage";
33
+ //#region src/cli/doctor/env.ts
34
+ const PUBLIC_PREFIXES = [
35
+ "NEXT_PUBLIC_",
36
+ "VITE_",
37
+ "PUBLIC_",
38
+ "EXPO_PUBLIC_",
39
+ "NUXT_PUBLIC_"
40
+ ];
41
+ function envEntries(file) {
42
+ return file.text.split("\n").flatMap((raw, index) => {
43
+ const match = /^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/.exec(raw);
44
+ if (!match) return [];
45
+ const value = match[2].trim().replace(/^(['"])(.*)\1$/, "$2");
46
+ return [{
47
+ key: match[1],
48
+ value,
49
+ line: index + 1
50
+ }];
51
+ });
52
+ }
53
+ const PREFIXES = [...new Set(Object.values(PREFIX_NAMES).filter((prefix) => prefix !== ""))];
54
+ /** The names `stackEnvValues` writes, with or without a browser prefix; not the CLI's own `SUPABASE_BIN` or `SUPABASE_ACCESS_TOKEN`. */
55
+ const STACK_VARIABLE = /(?:^|_)SUPABASE_(?:URL|PUBLISHABLE_KEY|SECRET_KEY|JWKS_URL|DB_URL|JWT_SECRET)$/;
56
+ const exportsStackVariable = (shell) => Object.entries(shell).some(([name, value]) => value !== void 0 && value !== "" && STACK_VARIABLE.test(name));
57
+ /**
58
+ * Reads the running stack only when the shell exports a `SUPABASE_*`
59
+ * variable, so a doctor run without one never starts `supabase status`.
60
+ */
61
+ async function loadStackEnvCheck(root, env, signal) {
62
+ const shell = env[PROCESS_ENV] ?? {};
63
+ if (!exportsStackVariable(shell)) return { skipped: "No SUPABASE_* variable is exported." };
64
+ try {
65
+ const result = await readStackStatus(root, env, { signal });
66
+ if (!result.ok) return { skipped: "The local stack is not running." };
67
+ const values = { ...stackEnvValues(result.status, "") };
68
+ if (values["SUPABASE_URL"] === void 0) return { skipped: "supabase status has no API_URL." };
69
+ for (const prefix of PREFIXES) {
70
+ values[`${prefix}SUPABASE_URL`] = values["SUPABASE_URL"];
71
+ if (values["SUPABASE_PUBLISHABLE_KEY"] !== void 0) values[`${prefix}SUPABASE_PUBLISHABLE_KEY`] = values["SUPABASE_PUBLISHABLE_KEY"];
72
+ }
73
+ return {
74
+ shell,
75
+ values
76
+ };
77
+ } catch (cause) {
78
+ return { skipped: errorText(cause) };
79
+ }
80
+ }
81
+ /** Checks on env files and the variables the shell exports (BS501 to BS503). */
82
+ const ENV_RULES = [
83
+ {
84
+ code: "BS501",
85
+ severity: "error",
86
+ title: "Secret in a browser variable",
87
+ description: "Variables with a public prefix are bundled into client code. A secret key there gives every visitor full access.",
88
+ check: (context) => context.envFiles.flatMap((file) => envEntries(file).filter((entry) => PUBLIC_PREFIXES.some((prefix) => entry.key.startsWith(prefix)) && (entry.value.startsWith("sb_secret_") || /SECRET|SERVICE_ROLE/.test(entry.key))).map((entry) => ({
89
+ message: `${entry.key} in ${file.path} is exposed to the browser but holds a secret. Rename it without the public prefix and rotate the key.`,
90
+ target: `${file.path}:${entry.key}`,
91
+ location: {
92
+ file: file.path,
93
+ line: entry.line
94
+ }
95
+ })))
96
+ },
97
+ {
98
+ code: "BS502",
99
+ severity: "warning",
100
+ title: "Env file with secrets is not ignored by git",
101
+ description: "Env files holding a secret key or database password should never be committed.",
102
+ check: (context) => {
103
+ const patterns = context.gitignore.split("\n").map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#"));
104
+ const ignored = (path) => patterns.some((pattern) => {
105
+ const source = pattern.replace(/^\//, "").replaceAll(/[.+^${}()|[\]\\]/g, "\\$&").replaceAll("*", ".*");
106
+ return new RegExp(`^${source}$`).test(path) || new RegExp(`(^|/)${source}$`).test(path);
107
+ });
108
+ return context.envFiles.flatMap((file) => {
109
+ const secret = envEntries(file).find((entry) => entry.value.startsWith("sb_secret_") || /SECRET_KEY|SERVICE_ROLE|DB_URL|DATABASE_URL/.test(entry.key));
110
+ if (!secret || ignored(file.path) || file.path.endsWith(".example")) return [];
111
+ return [{
112
+ message: `${file.path} contains ${secret.key} but isn't in .gitignore.`,
113
+ target: file.path,
114
+ location: {
115
+ file: file.path,
116
+ line: secret.line
117
+ }
118
+ }];
119
+ });
120
+ }
121
+ },
122
+ {
123
+ code: "BS503",
124
+ severity: "warning",
125
+ title: "Exported Supabase variable differs from the running stack",
126
+ description: "A SUPABASE_* variable exported in the shell has another value than the local stack, so the app talks to a stale stack (often another worktree's port). Values are redacted: host and port for URLs, a SHA-256 fingerprint for keys. Unset the variable, or start the app with `better-supabase run -- <cmd>`, which overrides it.",
127
+ check: ({ stackEnv }) => stackEnv === void 0 || "skipped" in stackEnv ? [] : staleVariables(stackEnv.shell, stackEnv.values).map((stale) => ({
128
+ target: stale.variable,
129
+ message: `${stale.message} Unset it or start the app with better-supabase run -- <cmd>.`
130
+ }))
131
+ }
132
+ ];
133
+ //#endregion
30
134
  //#region src/cli/doctor/adoption.ts
31
135
  const tagText = (notNull) => notNull === true ? "@notNull" : `@notNull(${notNull.join(", ")})`;
32
136
  const sameNotNull = (a, b) => a === true || b === true ? a === b : a !== void 0 && a.length === b.length && a.every((name) => b.includes(name));
@@ -2544,25 +2648,6 @@ function tomlLocation(context, key) {
2544
2648
  line
2545
2649
  } : void 0;
2546
2650
  }
2547
- const PUBLIC_PREFIXES = [
2548
- "NEXT_PUBLIC_",
2549
- "VITE_",
2550
- "PUBLIC_",
2551
- "EXPO_PUBLIC_",
2552
- "NUXT_PUBLIC_"
2553
- ];
2554
- function envEntries(file) {
2555
- return file.text.split("\n").flatMap((raw, index) => {
2556
- const match = /^\s*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)$/.exec(raw);
2557
- if (!match) return [];
2558
- const value = match[2].trim().replace(/^(['"])(.*)\1$/, "$2");
2559
- return [{
2560
- key: match[1],
2561
- value,
2562
- line: index + 1
2563
- }];
2564
- });
2565
- }
2566
2651
  /**
2567
2652
  * `db.x.aggregate(`, an `_sum:`/`_avg:`/`_min:`/`_max:` include or a list
2568
2653
  * with `facetCounts: true`.
@@ -2968,45 +3053,6 @@ const RULES = [
2968
3053
  target: `${qualified(table)}.${key.name}`,
2969
3054
  object: tableObject(table)
2970
3055
  })))
2971
- },
2972
- {
2973
- code: "BS501",
2974
- severity: "error",
2975
- title: "Secret in a browser variable",
2976
- description: "Variables with a public prefix are bundled into client code. A secret key there gives every visitor full access.",
2977
- check: (context) => context.envFiles.flatMap((file) => envEntries(file).filter((entry) => PUBLIC_PREFIXES.some((prefix) => entry.key.startsWith(prefix)) && (entry.value.startsWith("sb_secret_") || /SECRET|SERVICE_ROLE/.test(entry.key))).map((entry) => ({
2978
- message: `${entry.key} in ${file.path} is exposed to the browser but holds a secret. Rename it without the public prefix and rotate the key.`,
2979
- target: `${file.path}:${entry.key}`,
2980
- location: {
2981
- file: file.path,
2982
- line: entry.line
2983
- }
2984
- })))
2985
- },
2986
- {
2987
- code: "BS502",
2988
- severity: "warning",
2989
- title: "Env file with secrets is not ignored by git",
2990
- description: "Env files holding a secret key or database password should never be committed.",
2991
- check: (context) => {
2992
- const patterns = context.gitignore.split("\n").map((line) => line.trim()).filter((line) => line.length > 0 && !line.startsWith("#"));
2993
- const ignored = (path) => patterns.some((pattern) => {
2994
- const source = pattern.replace(/^\//, "").replaceAll(/[.+^${}()|[\]\\]/g, "\\$&").replaceAll("*", ".*");
2995
- return new RegExp(`^${source}$`).test(path) || new RegExp(`(^|/)${source}$`).test(path);
2996
- });
2997
- return context.envFiles.flatMap((file) => {
2998
- const secret = envEntries(file).find((entry) => entry.value.startsWith("sb_secret_") || /SECRET_KEY|SERVICE_ROLE|DB_URL|DATABASE_URL/.test(entry.key));
2999
- if (!secret || ignored(file.path) || file.path.endsWith(".example")) return [];
3000
- return [{
3001
- message: `${file.path} contains ${secret.key} but isn't in .gitignore.`,
3002
- target: file.path,
3003
- location: {
3004
- file: file.path,
3005
- line: secret.line
3006
- }
3007
- }];
3008
- });
3009
- }
3010
3056
  }
3011
3057
  ],
3012
3058
  ...RLS_RULES,
@@ -3024,7 +3070,8 @@ const RULES = [
3024
3070
  ...FLAG_RULES,
3025
3071
  ...REALTIME_RULES,
3026
3072
  ...ADOPTION_RULES,
3027
- ...MIGRATION_SAFETY_RULES
3073
+ ...MIGRATION_SAFETY_RULES,
3074
+ ...ENV_RULES
3028
3075
  ].sort((a, b) => byCodePoint(a.code, b.code));
3029
3076
  const RULE_CODES = RULES.map((rule) => rule.code);
3030
3077
  async function runRules(context, rules = RULES) {
@@ -3512,14 +3559,15 @@ async function runDoctor(config, args, env, options = {}) {
3512
3559
  ...options.advisors === void 0 ? {} : { advisors: options.advisors },
3513
3560
  ...options.database === void 0 ? {} : { database: options.database }
3514
3561
  };
3515
- const [snapshot, envFiles, [configToml, sql], gitignore, sources, readSets, peers] = await Promise.all([
3562
+ const [snapshot, envFiles, [configToml, sql], gitignore, sources, readSets, peers, stackEnv] = await Promise.all([
3516
3563
  options.snapshot ?? loadSnapshot(config, env, source, pg, opened.open),
3517
3564
  Promise.all(ENV_FILES.map((path) => readText(config.root, path))).then((files) => files.filter((file) => file !== void 0)),
3518
3565
  readSupabaseToml(config.root).then(async (toml) => [toml, await sqlFiles(config.root, toml, sqlWorkflow(config, toml))]),
3519
3566
  readText(config.root, ".gitignore"),
3520
3567
  sourceFiles(config),
3521
3568
  compiledReadSets(config).catch((cause) => ({ skipped: errorText(cause) })),
3522
- options.peers ?? peerVersions(config.root).catch(() => [])
3569
+ options.peers ?? peerVersions(config.root).catch(() => []),
3570
+ options.stackEnv ?? (rules.some((rule) => rule.code === "BS503") ? loadStackEnvCheck(config.root, env, options.signal) : void 0)
3523
3571
  ]).catch(async (cause) => {
3524
3572
  await opened.close();
3525
3573
  throw cause;
@@ -3539,6 +3587,7 @@ async function runDoctor(config, args, env, options = {}) {
3539
3587
  sources,
3540
3588
  readSets,
3541
3589
  peers,
3590
+ ...stackEnv ? { stackEnv } : {},
3542
3591
  ...live.advisors ? { advisors: live.advisors } : {},
3543
3592
  ...live.database ? { database: live.database } : {},
3544
3593
  ...stats ? { stats } : {},
@@ -0,0 +1 @@
1
+ export { n as envCommand } from "./env-Dh5K5t2U.js";
@@ -1,22 +1,24 @@
1
- import { p as commandMeta, r as defineCliCommand } from "./command-DLCZeHdo.js";
1
+ import { p as commandMeta, r as defineCliCommand } from "./command-dfdVhU_2.js";
2
2
  import { n as CliError } from "./errors-Caiz_0so.js";
3
3
  import { r as readIfExists, t as display } from "./io-BiPX-_J1.js";
4
- import { n as readStackStatus, t as parseStackStatus } from "./stack-status-Cb_D79ZR.js";
4
+ import { n as readStackStatus, t as parseStackStatus } from "./stack-status-_NUgd-g5.js";
5
5
  import { n as applyPlan, o as insideRoot, r as changeLines, s as planResult, t as PLAN_ARGS } from "./files-DDvAwTko.js";
6
6
  import { r as publicPrefix, t as detectProject } from "./detect-DQsVeBHg.js";
7
+ import { n as prefixFromFlag, r as stackEnvValues } from "./stack-env-_uWWNHWq.js";
7
8
  import { existsSync } from "node:fs";
8
9
  import { resolve } from "node:path";
9
10
  import { readFile } from "node:fs/promises";
10
11
  //#region src/cli/commands/env.ts
11
12
  const ARGS = {
12
- out: {
13
+ write: {
13
14
  type: "string",
15
+ alias: "out",
14
16
  description: "Env file to write, or - to print the variables. Defaults to env.output, then .env.local",
15
17
  valueHint: "file"
16
18
  },
17
19
  prefix: {
18
20
  type: "string",
19
- description: "Prefix for browser variables. Defaults to env.prefix, then one detected from your framework; \"none\" for no prefix",
21
+ description: "Browser variable prefix: next, vite, expo, nuxt, astro, sveltekit, a literal prefix, or \"none\". Defaults to env.prefix, then one detected from your framework",
20
22
  valueHint: "prefix"
21
23
  },
22
24
  "status-file": {
@@ -40,12 +42,22 @@ async function readStatus(config, args, env, signal) {
40
42
  if (!result.ok) throw new CliError("supabase_cli_failed", `supabase status failed (${result.code}). Is the local stack running (supabase start)?`, { suggestion: "supabase start" });
41
43
  return result.status;
42
44
  }
43
- const text = (status, ...keys) => {
44
- for (const key of keys) {
45
- const value = status[key];
46
- if (typeof value === "string" && value.length > 0) return value;
47
- }
48
- };
45
+ /** The browser prefix: `--prefix`, then `env.prefix`, then the framework's. */
46
+ async function browserPrefix(config, flag) {
47
+ const prefix = flag ?? config.env.prefix;
48
+ return prefix === void 0 ? publicPrefix(await detectProject(config.root)) : prefixFromFlag(prefix);
49
+ }
50
+ /** The running stack's variables, as `env` writes them and `run` sets them. */
51
+ async function readStackEnv(config, args, env, signal) {
52
+ const status = await readStatus(config, args, env, signal);
53
+ const prefix = await browserPrefix(config, args.prefix);
54
+ const values = stackEnvValues(status, prefix);
55
+ if (!values) throw new CliError("supabase_cli_failed", "supabase status has no API_URL or publishable key. Is the stack running?", { suggestion: "supabase start" });
56
+ return {
57
+ status,
58
+ values
59
+ };
60
+ }
49
61
  /** Replaces `KEY=` lines in place and appends the rest under a header. */
50
62
  function mergeEnv(current, values) {
51
63
  const pending = new Map(Object.entries(values));
@@ -65,32 +77,20 @@ function mergeEnv(current, values) {
65
77
  }
66
78
  async function runEnv(config, args, env, signal) {
67
79
  const status = await readStatus(config, args, env, signal);
68
- const project = await detectProject(config.root);
69
- const prefixFlag = args.prefix ?? config.env.prefix;
70
- const prefix = prefixFlag === void 0 ? publicPrefix(project) : prefixFlag === "none" ? "" : prefixFlag;
71
- const url = text(status, "API_URL");
72
- const publishableKey = text(status, "PUBLISHABLE_KEY", "ANON_KEY");
73
- const secretKey = text(status, "SECRET_KEY", "SERVICE_ROLE_KEY");
74
- if (!url || !publishableKey) return {
80
+ const prefix = await browserPrefix(config, args.prefix);
81
+ const values = stackEnvValues(status, prefix);
82
+ if (!values) return {
75
83
  code: 1,
76
84
  error: "supabase status has no API_URL or publishable key. Is the stack running?"
77
85
  };
78
- const values = {
79
- [`${prefix}SUPABASE_URL`]: url,
80
- [`${prefix}SUPABASE_PUBLISHABLE_KEY`]: publishableKey
81
- };
82
- if (secretKey) values["SUPABASE_SECRET_KEY"] = secretKey;
83
- const dbUrl = text(status, "DB_URL");
84
- if (dbUrl) values["SUPABASE_DB_URL"] = dbUrl;
85
- const jwtSecret = text(status, "JWT_SECRET");
86
- if (jwtSecret) values["SUPABASE_JWT_SECRET"] = jwtSecret;
87
- if (args.out === "-") return {
86
+ const write = args.write;
87
+ if (write === "-") return {
88
88
  code: 0,
89
89
  output: Object.entries(values).map(([key, value]) => `${key}=${value}`).join("\n"),
90
90
  data: { values }
91
91
  };
92
- const out = args.out ?? config.env.output;
93
- const path = insideRoot(config.root, out, args.out ? "--out" : "env.output");
92
+ const out = write ?? config.env.output;
93
+ const path = insideRoot(config.root, out, write ? "--write" : "env.output");
94
94
  const current = await readIfExists(path) ?? "";
95
95
  const file = display(config.root, out);
96
96
  const plan = {
@@ -110,7 +110,8 @@ async function runEnv(config, args, env, signal) {
110
110
  keys: Object.keys(values)
111
111
  } });
112
112
  const warnings = [];
113
- if (!text(status, "PUBLISHABLE_KEY")) warnings.push("This Supabase CLI prints only legacy JWT keys. Upgrade it to get sb_publishable_/sb_secret_ keys.");
113
+ const publishable = status["PUBLISHABLE_KEY"];
114
+ if (typeof publishable !== "string" || publishable.length === 0) warnings.push("This Supabase CLI prints only legacy JWT keys. Upgrade it to get sb_publishable_/sb_secret_ keys.");
114
115
  const gitignore = resolve(config.root, ".gitignore");
115
116
  if (!(existsSync(gitignore) && (await readFile(gitignore, "utf-8")).split("\n").some((line) => [
116
117
  out,
@@ -139,4 +140,4 @@ const envCommand = defineCliCommand({
139
140
  run: (args, { config, env, signal }) => runEnv(config, args, env, signal)
140
141
  });
141
142
  //#endregion
142
- export { mergeEnv as n, runEnv as r, envCommand as t };
143
+ export { runEnv as a, readStackEnv as i, envCommand as n, mergeEnv as r, browserPrefix as t };
@@ -1,17 +1,17 @@
1
- import { a as list, p as commandMeta, r as defineCliCommand } from "./command-DLCZeHdo.js";
1
+ import { a as list, p as commandMeta, r as defineCliCommand } from "./command-dfdVhU_2.js";
2
2
  import { i as plain } from "./style-2JfIPVMQ.js";
3
3
  import { a as parseNames, i as failedResult, n as CliError } from "./errors-Caiz_0so.js";
4
- import { a as catalogFingerprint } from "./cache-CVJmPGpd.js";
5
- import { n as runGen } from "./run-Bb8Nn8Ax.js";
4
+ import { a as catalogFingerprint } from "./cache-DQwgb3rg.js";
5
+ import { n as runGen } from "./run-BhJKAanr.js";
6
6
  import { r as isGenTask, t as GEN_TASKS } from "./names-D6LrQnOv.js";
7
- import { o as snapshotFile, r as openSource, t as loadSnapshot } from "./snapshot-ClgWGd-b.js";
8
- import { a as sourceFlags, i as sourceArgs, n as SOURCE_ARGS } from "./source-args-BDiUhsH8.js";
9
- import { a as runMetadataGen, n as checkMetadataFlags, t as EMITS } from "./metadata-BRywyPvv.js";
10
- import { r as runEnv } from "./env--JFvv45k.js";
11
- import { c as watchLoop, o as parseInterval, r as specOptionsFromConfig, s as stampFiles, t as runSpec } from "./spec-CM7iyRnE.js";
12
- import { t as runScaffoldApi } from "./scaffold-DcXr4z7M.js";
13
- import { t as runSeed } from "./seed-BmOC6_iz.js";
14
- import { t as runSql } from "./sql-ybcjbz20.js";
7
+ import { o as snapshotFile, r as openSource, t as loadSnapshot } from "./snapshot-BBKFojqM.js";
8
+ import { a as sourceFlags, i as sourceArgs, n as SOURCE_ARGS } from "./source-args-Cwo7zwvq.js";
9
+ import { a as runMetadataGen, n as checkMetadataFlags, t as EMITS } from "./metadata-BGkle6WM.js";
10
+ import { a as runEnv } from "./env-Dh5K5t2U.js";
11
+ import { c as watchLoop, o as parseInterval, r as specOptionsFromConfig, s as stampFiles, t as runSpec } from "./spec-DZeIP9ta.js";
12
+ import { t as runScaffoldApi } from "./scaffold-DoURlDEI.js";
13
+ import { t as runSeed } from "./seed-CIdg6s7m.js";
14
+ import { t as runSql } from "./sql-DLOvvnBV.js";
15
15
  import { existsSync } from "node:fs";
16
16
  import { resolve } from "node:path";
17
17
  //#region src/cli/commands/gen-pipeline.ts
@@ -688,6 +688,6 @@ export declare function emitModule(model: Model, options: EmitOptions): string;
688
688
  export declare function loadConfig(cwd: string, explicit?: string, environment?: string, path?: string | undefined): Promise<ResolvedConfig>;
689
689
  //#endregion
690
690
  //#region src/cli/version.d.ts
691
- export declare const VERSION = "0.11.0";
691
+ export declare const VERSION = "0.12.0";
692
692
  //#endregion
693
693
  export type { Catalog, CatalogCheck, CatalogColumn, CatalogColumnGrant, CatalogEnum, CatalogForeignKey, CatalogFunction, CatalogFunctionArg, CatalogGrant, CatalogIndex, CatalogPolicy, CatalogTable, CatalogTrigger, CatalogUnique, Choice, Cli, CliArgs, CliCommand, CliCommandDef, CliContext, CliEnv, CliErrorCode, CliErrorOptions, CliIo, CliLog, CliProblem, CliProblemExtensions, CommandResult, CreateCliOptions, ExitCode, ExtrasFunction, ExtrasHook, ExtrasHookFunction, ExtrasTable, ForeignKeyAction, Format, GeneratorMetadata, IntrospectionSource, ManagementSourceOptions, NextStep, Paint, Prompter, Queryable, RunOptions, RunResult, Snapshot, SnapshotBucket, SnapshotExtras };
package/dist/cli/index.js CHANGED
@@ -1,12 +1,12 @@
1
- import { a as list, r as defineCliCommand } from "./command-DLCZeHdo.js";
2
- import { i as run, n as createCli, r as help, t as commandNames } from "./run-nX5ffQM_.js";
3
- import { t as VERSION } from "./version-CUKjFbNd.js";
1
+ import { a as list, r as defineCliCommand } from "./command-dfdVhU_2.js";
2
+ import { i as run, n as createCli, r as help, t as commandNames } from "./run-DRZ10srj.js";
3
+ import { t as VERSION } from "./version-B7akdvDv.js";
4
4
  import { n as CliError, t as CLI_ERRORS_URL } from "./errors-Caiz_0so.js";
5
5
  import { t as toCatalog } from "./catalog-Cm6BtquM.js";
6
6
  import { a as buildModel, r as emitModule, t as GENERATED_HEADER } from "./emit-56LAG_Px.js";
7
- import { S as emitBlockConfig, n as runGen, x as renderFiles } from "./run-Bb8Nn8Ax.js";
8
- import { s as loadConfig } from "./config-C4e_RrmL.js";
9
- import { a as serializeSnapshot, d as managementSource, f as pgSource, i as parseSnapshot, l as introspect, t as loadSnapshot } from "./snapshot-ClgWGd-b.js";
7
+ import { S as emitBlockConfig, n as runGen, x as renderFiles } from "./run-BhJKAanr.js";
8
+ import { s as loadConfig } from "./config-yZ55rsKZ.js";
9
+ import { a as serializeSnapshot, d as managementSource, f as pgSource, i as parseSnapshot, l as introspect, t as loadSnapshot } from "./snapshot-BBKFojqM.js";
10
10
  //#region src/cli/introspect/from-catalog.ts
11
11
  /**
12
12
  * Builds a snapshot from catalog records: the inverse of `toCatalog`. Tests
@@ -1,19 +1,19 @@
1
- import { a as list, p as commandMeta, r as defineCliCommand } from "./command-DLCZeHdo.js";
1
+ import { a as list, p as commandMeta, r as defineCliCommand } from "./command-dfdVhU_2.js";
2
2
  import { i as plain } from "./style-2JfIPVMQ.js";
3
3
  import { n as CliError } from "./errors-Caiz_0so.js";
4
4
  import { t as TYPEGEN_VERSION } from "./typegen-version-BNBPI4Eu.js";
5
- import { a as findConfig, s as loadConfig } from "./config-C4e_RrmL.js";
5
+ import { a as findConfig, s as loadConfig } from "./config-yZ55rsKZ.js";
6
6
  import { n as applyPlan, r as changeLines, s as planResult, t as PLAN_ARGS } from "./files-DDvAwTko.js";
7
- import { _ as suggestedIntegrations, a as CANCELLED, c as overwrite, d as templateContextFor, f as templatePlan, g as resolveIntegrations, h as needsLib, l as packagesFor, m as baseFiles, n as blockConfigImport, o as chooseIntegrations, p as TEMPLATES, r as blocksWiringPath, s as integrationFiles, u as parseIntegrations } from "./add-B5V6uokQ.js";
7
+ import { _ as suggestedIntegrations, a as CANCELLED, c as overwrite, d as templateContextFor, f as templatePlan, g as resolveIntegrations, h as needsLib, l as packagesFor, m as baseFiles, n as blockConfigImport, o as chooseIntegrations, p as TEMPLATES, r as blocksWiringPath, s as integrationFiles, u as parseIntegrations } from "./add-TT72pQk6.js";
8
8
  import { n as installCommand, t as detectProject } from "./detect-DQsVeBHg.js";
9
9
  import { s as enablePgDelta } from "./write-VZljwoTB.js";
10
10
  import { n as latestMigrationVersion } from "./migration-safety-DjVpz2D6.js";
11
- import { a as CONVENTION_COMPLETIONS, c as hasConventionFlags, i as CONVENTION_ARGS, l as promptConventions, n as AUTHZ_NOTE, o as conventionFlags, r as createUrlParam, s as defaultConventions, t as writeDesign, u as withConventions } from "./design-edit-B-WsnhUF.js";
11
+ import { a as CONVENTION_ARGS, c as defaultConventions, d as withConventions, i as createUrlParam, l as hasConventionFlags, n as readPresetInput, o as CONVENTION_COMPLETIONS, r as AUTHZ_NOTE, s as conventionFlags, t as writeDesign, u as promptConventions } from "./design-edit-0U9iCTiS.js";
12
12
  import { t as syncModules } from "./sync-DBvknfOK.js";
13
13
  import { existsSync } from "node:fs";
14
14
  import { join, posix, resolve } from "node:path";
15
15
  import { glob, readFile } from "node:fs/promises";
16
- import { PRESETS, PRESET_NAMES, conventionConfig, designConfig, designOf, encodePreset, glueCommand, integrationsForFramework, isPresetName, presetBlocksSource, presetGlue, presetOf, resolvePreset } from "better-supabase/preset";
16
+ import { PRESETS, PRESET_NAMES, conventionConfig, designConfig, encodePreset, glueCommand, integrationsForFramework, isPresetName, presetBlocksSource, presetGlue, resolvePreset } from "better-supabase/preset";
17
17
  import { resolveConfig } from "better-supabase/config";
18
18
  //#region src/cli/project/workspace.ts
19
19
  const unquote = (value) => value.replace(/\s+#.*$/, "").trim().replace(/^(["'])(.*)\1$/, "$2");
@@ -120,8 +120,8 @@ const INIT_ARGS = {
120
120
  },
121
121
  preset: {
122
122
  type: "string",
123
- description: "A named preset, a code from /create or its URL: the config starts from it, and init writes its modules and lib/blocks.ts",
124
- valueHint: "name|code|url"
123
+ description: "A named preset, a code from /create, its URL or a downloaded design file: the config starts from it, and init writes its modules and lib/blocks.ts",
124
+ valueHint: "name|code|url|file"
125
125
  },
126
126
  lite: {
127
127
  type: "boolean",
@@ -175,7 +175,7 @@ async function initTarget(cwd, pkg, prompts) {
175
175
  return dir === void 0 ? CANCELLED : { dir };
176
176
  }
177
177
  /** The preset `--preset` names, or the one the person picks; `null` for none. */
178
- async function chosenPreset(args, flags, prompts) {
178
+ async function chosenPreset(args, flags, prompts, root) {
179
179
  let value = args.preset;
180
180
  if (value === void 0 && prompts && !hasConventionFlags(flags) && args.integration === void 0) {
181
181
  const picked = await prompts.select("Preset", [{
@@ -191,15 +191,9 @@ async function chosenPreset(args, flags, prompts) {
191
191
  if (picked !== "none") value = picked;
192
192
  }
193
193
  if (value === void 0) return null;
194
- let preset;
195
- let design;
196
- try {
197
- preset = presetOf(value);
198
- design = isPresetName(value) ? void 0 : await designOf(value);
199
- } catch (error) {
200
- throw new CliError("usage", error instanceof Error ? error.message : String(error));
201
- }
202
- preset = withConventions(preset, flags);
194
+ const input = await readPresetInput(value, root);
195
+ const design = input.design;
196
+ const preset = withConventions(input.preset, flags);
203
197
  const resolved = resolvePreset(preset);
204
198
  if (resolved.conflicts.length > 0) throw new CliError("usage", `The preset can't install: ${resolved.conflicts.map((conflict) => `${conflict.block ?? conflict.field ?? ""} (${conflict.reason})`).join("; ")}.`);
205
199
  if (design !== void 0) try {
@@ -233,7 +227,7 @@ function withDesign(files, design) {
233
227
  }
234
228
  async function runInit(config, args, prompts, now = () => /* @__PURE__ */ new Date()) {
235
229
  const flags = conventionFlags(args);
236
- const chosen = await chosenPreset(args, flags, prompts);
230
+ const chosen = await chosenPreset(args, flags, prompts, config.root);
237
231
  if (chosen !== null && "code" in chosen) return chosen;
238
232
  let conventions = chosen?.resolved.preset;
239
233
  conventions ??= prompts && !hasConventionFlags(flags) ? await promptConventions(prompts) : defaultConventions(flags);
@@ -1,9 +1,9 @@
1
- import { p as commandMeta, r as defineCliCommand } from "./command-DLCZeHdo.js";
1
+ import { p as commandMeta, r as defineCliCommand } from "./command-dfdVhU_2.js";
2
2
  import { n as CliError } from "./errors-Caiz_0so.js";
3
3
  import { c as serializeGenerator, s as restrictSchemas } from "./typegen--TfvOPLh.js";
4
- import { a as serializeSnapshot, t as loadSnapshot } from "./snapshot-ClgWGd-b.js";
4
+ import { a as serializeSnapshot, t as loadSnapshot } from "./snapshot-BBKFojqM.js";
5
5
  import { n as applyPlan, o as insideRoot, s as planResult, t as PLAN_ARGS } from "./files-DDvAwTko.js";
6
- import { i as sourceArgs, n as SOURCE_ARGS } from "./source-args-BDiUhsH8.js";
6
+ import { i as sourceArgs, n as SOURCE_ARGS } from "./source-args-Cwo7zwvq.js";
7
7
  //#region src/cli/commands/introspect.ts
8
8
  const ARGS = {
9
9
  out: {
@@ -1,4 +1,4 @@
1
- import { p as commandMeta, r as defineCliCommand } from "./command-DLCZeHdo.js";
1
+ import { p as commandMeta, r as defineCliCommand } from "./command-dfdVhU_2.js";
2
2
  import { t as display } from "./io-BiPX-_J1.js";
3
3
  import { m as supabaseDir } from "./supabase-toml-BC5sNVKU.js";
4
4
  import { n as applyPlan, r as changeLines } from "./files-DDvAwTko.js";
@@ -1,5 +1,5 @@
1
1
  import { r as errorText } from "./errors-Caiz_0so.js";
2
- import "./snapshot-ClgWGd-b.js";
2
+ import "./snapshot-BBKFojqM.js";
3
3
  import { l as tableObject, n as exposed, s as qualified, t as catalogOf } from "./shared-DKLuA1Tp.js";
4
4
  //#region src/cli/doctor/reserved-roles.ts
5
5
  /**
@@ -1,6 +1,6 @@
1
- import { p as commandMeta, r as defineCliCommand } from "./command-DLCZeHdo.js";
2
- import { a as envelope, i as run } from "./run-nX5ffQM_.js";
3
- import { t as VERSION } from "./version-CUKjFbNd.js";
1
+ import { p as commandMeta, r as defineCliCommand } from "./command-dfdVhU_2.js";
2
+ import { a as envelope, i as run } from "./run-DRZ10srj.js";
3
+ import { t as VERSION } from "./version-B7akdvDv.js";
4
4
  import { n as CliError } from "./errors-Caiz_0so.js";
5
5
  import { n as consentToken } from "./agent-CCrTYK3W.js";
6
6
  import { A as string$1, E as record, M as unknown, O as safeParse, S as optional, a as array, b as object, d as is, o as boolean, t as PROCESS_ENV } from "./env-C8R7Nf0a.js";
@@ -2,7 +2,7 @@ import { n as CliError, r as errorText } from "./errors-Caiz_0so.js";
2
2
  import { i as readStdin } from "./io-BiPX-_J1.js";
3
3
  import { a as parseMetadataDocument, t as MetadataRejectedError } from "./typegen--TfvOPLh.js";
4
4
  import { i as metaPaths } from "./emit-56LAG_Px.js";
5
- import { b as render, i as generationNotices, n as runGen, o as fromMetadata, r as UNFORMATTED, t as refuseRowConditionedBuckets } from "./run-Bb8Nn8Ax.js";
5
+ import { b as render, i as generationNotices, n as runGen, o as fromMetadata, r as UNFORMATTED, t as refuseRowConditionedBuckets } from "./run-BhJKAanr.js";
6
6
  import { basename, join, relative, resolve, sep } from "node:path";
7
7
  import { readFile } from "node:fs/promises";
8
8
  import { jsonSchema, standardSchema, valibot, zod } from "better-supabase/config";
@@ -1,5 +1,5 @@
1
1
  import { n as CliError } from "./errors-Caiz_0so.js";
2
- import { s as positionalIndex } from "./parse-ksnw4phM.js";
2
+ import { s as positionalIndex } from "./parse-QzDvMpXH.js";
3
3
  //#region src/cli/core/moved.ts
4
4
  /** Commands renamed in 0.9, longest prefix first. */
5
5
  const MOVED_COMMANDS = [
@@ -1,5 +1,5 @@
1
1
  import { r as __toESM } from "./rolldown-runtime-kJ_i4yPo.js";
2
- import { t as GLOBAL_ARGS } from "./command-DLCZeHdo.js";
2
+ import { t as GLOBAL_ARGS } from "./command-dfdVhU_2.js";
3
3
  import { n as CliError } from "./errors-Caiz_0so.js";
4
4
  //#region src/cli/core/parse.ts
5
5
  /** Global options that take a value, so a command name is never the token after them. */
@@ -1,4 +1,4 @@
1
- import { p as commandMeta, r as defineCliCommand } from "./command-DLCZeHdo.js";
1
+ import { p as commandMeta, r as defineCliCommand } from "./command-dfdVhU_2.js";
2
2
  import { n as CliError } from "./errors-Caiz_0so.js";
3
3
  import { PRESET_FIELDS, decodePreset, encodePreset, isPresetCode, listNames, presetConfig, presetOf, resolvePreset } from "better-supabase/preset";
4
4
  //#region src/cli/commands/preset.ts