better-supabase 0.11.0 → 0.13.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 (1538) hide show
  1. package/README.md +1 -0
  2. package/dist/access-sql-BpOdJvfj.js +205 -0
  3. package/dist/actor-C9pwyCVz.js +150 -0
  4. package/dist/actor-CoveJgya.d.ts +106 -0
  5. package/dist/adapter-D8dW6p2A.js +2190 -0
  6. package/dist/agents-CuxuXVWv.d.ts +117 -0
  7. package/dist/ai-cache-BXMXRhkx.d.ts +82 -0
  8. package/dist/ai-cache-Byy5q6EZ.js +87 -0
  9. package/dist/ai-chat-B00sIOjY.d.ts +619 -0
  10. package/dist/ai-files-DTbIJcxQ.js +339 -0
  11. package/dist/ai-sdk/agents/index.d.ts +64 -52
  12. package/dist/ai-sdk/agents/index.js +34 -26
  13. package/dist/ai-sdk/batches/index.d.ts +16 -7
  14. package/dist/ai-sdk/batches/index.js +5 -5
  15. package/dist/ai-sdk/cache/index.d.ts +6 -3
  16. package/dist/ai-sdk/cache/index.js +1 -1
  17. package/dist/ai-sdk/chat/index.d.ts +1 -1
  18. package/dist/ai-sdk/chat/index.js +10 -10
  19. package/dist/ai-sdk/embeddings/index.d.ts +2 -2
  20. package/dist/ai-sdk/embeddings/index.js +1 -1
  21. package/dist/ai-sdk/files/index.d.ts +9 -9
  22. package/dist/ai-sdk/files/index.js +10 -10
  23. package/dist/ai-sdk/index.d.ts +25 -22
  24. package/dist/ai-sdk/index.js +11 -8
  25. package/dist/ai-sdk/mcp/index.d.ts +32 -26
  26. package/dist/ai-sdk/mcp/index.js +19 -19
  27. package/dist/ai-sdk/memory/index.d.ts +9 -9
  28. package/dist/ai-sdk/memory/index.js +5 -5
  29. package/dist/ai-sdk/react/index.d.ts +1 -1
  30. package/dist/ai-sdk/react/index.js +1 -1
  31. package/dist/ai-sdk/react/server.d.ts +5 -2
  32. package/dist/ai-sdk/react/server.js +4 -1
  33. package/dist/ai-sdk/workflow/index.d.ts +57 -36
  34. package/dist/ai-sdk/workflow/index.js +29 -23
  35. package/dist/ai-sdk/workflow/react/index.d.ts +7 -8
  36. package/dist/ai-sdk/workflow/react/index.js +7 -8
  37. package/dist/ai-sdk/workflow/react/server.d.ts +1 -1
  38. package/dist/ai-tasks-DN-AV7qB.d.ts +166 -0
  39. package/dist/announcements-DqiLxtKK.js +128 -0
  40. package/dist/api-CmcTYuFT.js +685 -0
  41. package/dist/api-DwLhJS1j.d.ts +444 -0
  42. package/dist/api-keys-Bade6Qtl.d.ts +213 -0
  43. package/dist/api-keys-CO24Ffil.js +318 -0
  44. package/dist/app-tables-0YZ9IskE.js +831 -0
  45. package/dist/app-tables-CbWUI7h_.d.ts +35 -0
  46. package/dist/approvals-C-4MOWdV.d.ts +127 -0
  47. package/dist/arazzo/index.d.ts +58 -36
  48. package/dist/arazzo/index.js +49 -41
  49. package/dist/assistant-CcP_kpu7.d.ts +157 -0
  50. package/dist/astro/index.d.ts +39 -20
  51. package/dist/astro/index.js +14 -11
  52. package/dist/asyncapi/index.d.ts +22 -16
  53. package/dist/asyncapi/index.js +23 -20
  54. package/dist/attachments-CPkGJVfk.js +270 -0
  55. package/dist/attributes-BOFl922R.js +44 -0
  56. package/dist/audit-log-5aTnl7W2.js +788 -0
  57. package/dist/auth-DyF_LRxd.js +20 -0
  58. package/dist/auth-link-B4NL84XU.d.ts +104 -0
  59. package/dist/auth-link-D3-bU6yz.js +118 -0
  60. package/dist/auth-module-CwCIY97x.js +10 -0
  61. package/dist/auth-reply-D02x5NSv.js +31 -0
  62. package/dist/authorization-CB69cvnA.d.ts +1504 -0
  63. package/dist/authorization-hooks-HXVZXxUk.d.ts +217 -0
  64. package/dist/authorizer-BVR2vPGA.js +125 -0
  65. package/dist/authorizer-DFP3gHv8.d.ts +82 -0
  66. package/dist/base64-B9Wlsdj7.js +42 -0
  67. package/dist/before-route-B23K2zYU.js +30 -0
  68. package/dist/better-result/index.d.ts +26 -18
  69. package/dist/better-result/index.js +13 -9
  70. package/dist/bind-DcXLU1ul.d.ts +76 -0
  71. package/dist/block-env-YfPmSNa1.js +32 -0
  72. package/dist/block-env-kFcaaJLM.d.ts +10 -0
  73. package/dist/block-events-BURaqwyp.js +96 -0
  74. package/dist/block-fields-Cwd4c8m-.js +139 -0
  75. package/dist/block-fields-DnXkMney.d.ts +58 -0
  76. package/dist/block-helpers-DwE32_gT.js +272 -0
  77. package/dist/block-helpers-DyA5BAW4.d.ts +43 -0
  78. package/dist/block-hooks-BadAniNI.d.ts +117 -0
  79. package/dist/block-hooks-C1r-R2r0.js +130 -0
  80. package/dist/block-transport-DBPhgF3W.d.ts +69 -0
  81. package/dist/block-transport-Ds0C2mUf.js +84 -0
  82. package/dist/blocks/access-requests/index.d.ts +21 -15
  83. package/dist/blocks/access-requests/index.js +11 -8
  84. package/dist/blocks/agents/index.d.ts +4 -4
  85. package/dist/blocks/agents/index.js +6 -6
  86. package/dist/blocks/ai-cache/index.d.ts +3 -3
  87. package/dist/blocks/ai-cache/index.js +2 -2
  88. package/dist/blocks/ai-chat/index.d.ts +10 -7
  89. package/dist/blocks/ai-chat/index.js +3 -3
  90. package/dist/blocks/ai-chat/react/index.d.ts +18 -9
  91. package/dist/blocks/ai-chat/react/index.js +8 -8
  92. package/dist/blocks/ai-chat/react/server.d.ts +12 -3
  93. package/dist/blocks/ai-chat/react/server.js +12 -3
  94. package/dist/blocks/ai-chat/solid/index.d.ts +3 -3
  95. package/dist/blocks/ai-chat/solid/index.js +2 -2
  96. package/dist/blocks/ai-chat/svelte/index.d.ts +3 -3
  97. package/dist/blocks/ai-chat/svelte/index.js +2 -2
  98. package/dist/blocks/ai-chat/vue/index.d.ts +3 -3
  99. package/dist/blocks/ai-chat/vue/index.js +2 -2
  100. package/dist/blocks/ai-files/index.d.ts +5 -5
  101. package/dist/blocks/ai-files/index.js +2 -2
  102. package/dist/blocks/ai-providers/index.d.ts +4 -4
  103. package/dist/blocks/ai-providers/index.js +8 -8
  104. package/dist/blocks/ai-tasks/index.d.ts +3 -3
  105. package/dist/blocks/ai-tasks/index.js +8 -8
  106. package/dist/blocks/announcements/index.d.ts +4 -4
  107. package/dist/blocks/announcements/index.js +4 -4
  108. package/dist/blocks/announcements/react/index.d.ts +12 -5
  109. package/dist/blocks/announcements/react/index.js +7 -7
  110. package/dist/blocks/announcements/react/server.d.ts +4 -1
  111. package/dist/blocks/announcements/react/server.js +4 -1
  112. package/dist/blocks/announcements/solid/index.d.ts +3 -3
  113. package/dist/blocks/announcements/solid/index.js +2 -2
  114. package/dist/blocks/announcements/svelte/index.d.ts +3 -3
  115. package/dist/blocks/announcements/svelte/index.js +2 -2
  116. package/dist/blocks/announcements/vue/index.d.ts +3 -3
  117. package/dist/blocks/announcements/vue/index.js +2 -2
  118. package/dist/blocks/api-keys/index.d.ts +11 -8
  119. package/dist/blocks/api-keys/index.js +7 -7
  120. package/dist/blocks/api-keys/react/index.d.ts +11 -8
  121. package/dist/blocks/api-keys/react/index.js +9 -9
  122. package/dist/blocks/api-keys/react/server.d.ts +1 -1
  123. package/dist/blocks/api-keys/solid/index.d.ts +3 -3
  124. package/dist/blocks/api-keys/solid/index.js +2 -2
  125. package/dist/blocks/api-keys/svelte/index.d.ts +3 -3
  126. package/dist/blocks/api-keys/svelte/index.js +2 -2
  127. package/dist/blocks/api-keys/vue/index.d.ts +3 -3
  128. package/dist/blocks/api-keys/vue/index.js +2 -2
  129. package/dist/blocks/approvals/index.d.ts +4 -4
  130. package/dist/blocks/approvals/index.js +11 -8
  131. package/dist/blocks/attachments/index.d.ts +4 -4
  132. package/dist/blocks/attachments/index.js +3 -3
  133. package/dist/blocks/audit/index.d.ts +14 -8
  134. package/dist/blocks/audit/index.js +9 -9
  135. package/dist/blocks/audit/react/index.d.ts +12 -7
  136. package/dist/blocks/audit/react/index.js +12 -10
  137. package/dist/blocks/audit/react/server.d.ts +1 -1
  138. package/dist/blocks/audit/solid/index.d.ts +3 -3
  139. package/dist/blocks/audit/solid/index.js +2 -2
  140. package/dist/blocks/audit/svelte/index.d.ts +3 -3
  141. package/dist/blocks/audit/svelte/index.js +2 -2
  142. package/dist/blocks/audit/vue/index.d.ts +3 -3
  143. package/dist/blocks/audit/vue/index.js +2 -2
  144. package/dist/blocks/billing/index.d.ts +83 -51
  145. package/dist/blocks/billing/index.js +30 -18
  146. package/dist/blocks/billing/react/index.d.ts +19 -9
  147. package/dist/blocks/billing/react/index.js +12 -8
  148. package/dist/blocks/billing/react/server.d.ts +5 -2
  149. package/dist/blocks/billing/react/server.js +4 -1
  150. package/dist/blocks/billing/solid/index.d.ts +3 -3
  151. package/dist/blocks/billing/solid/index.js +2 -2
  152. package/dist/blocks/billing/svelte/index.d.ts +3 -3
  153. package/dist/blocks/billing/svelte/index.js +2 -2
  154. package/dist/blocks/billing/vue/index.d.ts +3 -3
  155. package/dist/blocks/billing/vue/index.js +2 -2
  156. package/dist/blocks/bookings/index.d.ts +11 -8
  157. package/dist/blocks/bookings/index.js +3 -3
  158. package/dist/blocks/bookings/react/index.d.ts +8 -4
  159. package/dist/blocks/bookings/react/index.js +12 -8
  160. package/dist/blocks/bookings/react/server.d.ts +4 -1
  161. package/dist/blocks/bookings/react/server.js +4 -1
  162. package/dist/blocks/bookings/solid/index.d.ts +3 -3
  163. package/dist/blocks/bookings/solid/index.js +2 -2
  164. package/dist/blocks/bookings/svelte/index.d.ts +3 -3
  165. package/dist/blocks/bookings/svelte/index.js +2 -2
  166. package/dist/blocks/bookings/vue/index.d.ts +3 -3
  167. package/dist/blocks/bookings/vue/index.js +2 -2
  168. package/dist/blocks/bulk/index.d.ts +27 -12
  169. package/dist/blocks/bulk/index.js +4 -4
  170. package/dist/blocks/calendar/index.d.ts +4 -4
  171. package/dist/blocks/calendar/index.js +3 -3
  172. package/dist/blocks/calendar/react/index.d.ts +5 -5
  173. package/dist/blocks/calendar/react/index.js +8 -8
  174. package/dist/blocks/calendar/react/server.d.ts +4 -1
  175. package/dist/blocks/calendar/react/server.js +4 -1
  176. package/dist/blocks/calendar/solid/index.d.ts +3 -3
  177. package/dist/blocks/calendar/solid/index.js +2 -2
  178. package/dist/blocks/calendar/svelte/index.d.ts +3 -3
  179. package/dist/blocks/calendar/svelte/index.js +2 -2
  180. package/dist/blocks/calendar/vue/index.d.ts +3 -3
  181. package/dist/blocks/calendar/vue/index.js +2 -2
  182. package/dist/blocks/catalog/index.d.ts +48 -27
  183. package/dist/blocks/catalog/index.js +16 -13
  184. package/dist/blocks/collections/index.d.ts +26 -21
  185. package/dist/blocks/collections/index.js +10 -10
  186. package/dist/blocks/comments/index.d.ts +11 -11
  187. package/dist/blocks/comments/index.js +4 -4
  188. package/dist/blocks/comments/react/index.d.ts +13 -6
  189. package/dist/blocks/comments/react/index.js +13 -9
  190. package/dist/blocks/comments/react/server.d.ts +1 -1
  191. package/dist/blocks/comments/solid/index.d.ts +3 -3
  192. package/dist/blocks/comments/solid/index.js +2 -2
  193. package/dist/blocks/comments/svelte/index.d.ts +3 -3
  194. package/dist/blocks/comments/svelte/index.js +2 -2
  195. package/dist/blocks/comments/vue/index.d.ts +3 -3
  196. package/dist/blocks/comments/vue/index.js +2 -2
  197. package/dist/blocks/connectors/index.d.ts +4 -4
  198. package/dist/blocks/connectors/index.js +8 -8
  199. package/dist/blocks/custom-fields/index.d.ts +13 -10
  200. package/dist/blocks/custom-fields/index.js +6 -6
  201. package/dist/blocks/data-lifecycle/index.d.ts +75 -51
  202. package/dist/blocks/data-lifecycle/index.js +17 -11
  203. package/dist/blocks/deals/index.d.ts +16 -16
  204. package/dist/blocks/deals/index.js +14 -14
  205. package/dist/blocks/documents/index.d.ts +4 -4
  206. package/dist/blocks/documents/index.js +5 -5
  207. package/dist/blocks/domains/index.d.ts +35 -20
  208. package/dist/blocks/domains/index.js +9 -9
  209. package/dist/blocks/drive/index.d.ts +45 -28
  210. package/dist/blocks/drive/index.js +29 -17
  211. package/dist/blocks/employees/index.d.ts +26 -21
  212. package/dist/blocks/employees/index.js +16 -13
  213. package/dist/blocks/engagements/index.d.ts +26 -17
  214. package/dist/blocks/engagements/index.js +9 -9
  215. package/dist/blocks/entitlements/index.d.ts +20 -14
  216. package/dist/blocks/entitlements/index.js +3 -3
  217. package/dist/blocks/entitlements/react/index.d.ts +10 -7
  218. package/dist/blocks/entitlements/react/index.js +7 -7
  219. package/dist/blocks/entitlements/react/server.d.ts +4 -1
  220. package/dist/blocks/entitlements/react/server.js +4 -1
  221. package/dist/blocks/entitlements/solid/index.d.ts +3 -3
  222. package/dist/blocks/entitlements/solid/index.js +2 -2
  223. package/dist/blocks/entitlements/svelte/index.d.ts +3 -3
  224. package/dist/blocks/entitlements/svelte/index.js +2 -2
  225. package/dist/blocks/entitlements/vue/index.d.ts +3 -3
  226. package/dist/blocks/entitlements/vue/index.js +2 -2
  227. package/dist/blocks/flags/index.d.ts +20 -14
  228. package/dist/blocks/flags/index.js +9 -9
  229. package/dist/blocks/forms/index.d.ts +28 -16
  230. package/dist/blocks/forms/index.js +12 -9
  231. package/dist/blocks/forms/react/index.d.ts +9 -6
  232. package/dist/blocks/forms/react/index.js +10 -7
  233. package/dist/blocks/forms/react/server.d.ts +4 -1
  234. package/dist/blocks/forms/react/server.js +4 -1
  235. package/dist/blocks/forms/solid/index.d.ts +3 -3
  236. package/dist/blocks/forms/solid/index.js +2 -2
  237. package/dist/blocks/forms/svelte/index.d.ts +3 -3
  238. package/dist/blocks/forms/svelte/index.js +2 -2
  239. package/dist/blocks/forms/vue/index.d.ts +3 -3
  240. package/dist/blocks/forms/vue/index.js +2 -2
  241. package/dist/blocks/hiring/index.d.ts +13 -13
  242. package/dist/blocks/hiring/index.js +9 -9
  243. package/dist/blocks/identities/index.d.ts +38 -20
  244. package/dist/blocks/identities/index.js +16 -10
  245. package/dist/blocks/imports/index.d.ts +30 -25
  246. package/dist/blocks/imports/index.js +18 -18
  247. package/dist/blocks/inbox/index.d.ts +5 -5
  248. package/dist/blocks/inbox/index.js +7 -7
  249. package/dist/blocks/inbox/react/index.d.ts +2 -2
  250. package/dist/blocks/inbox/react/index.js +7 -7
  251. package/dist/blocks/inbox/react/server.d.ts +10 -4
  252. package/dist/blocks/inbox/react/server.js +8 -2
  253. package/dist/blocks/inbox/solid/index.d.ts +3 -3
  254. package/dist/blocks/inbox/solid/index.js +2 -2
  255. package/dist/blocks/inbox/svelte/index.d.ts +3 -3
  256. package/dist/blocks/inbox/svelte/index.js +2 -2
  257. package/dist/blocks/inbox/vue/index.d.ts +3 -3
  258. package/dist/blocks/inbox/vue/index.js +2 -2
  259. package/dist/blocks/index.d.ts +10 -10
  260. package/dist/blocks/index.js +41 -39
  261. package/dist/blocks/inventory/index.d.ts +36 -19
  262. package/dist/blocks/inventory/index.js +15 -9
  263. package/dist/blocks/invoices/index.d.ts +13 -13
  264. package/dist/blocks/invoices/index.js +11 -11
  265. package/dist/blocks/jobs/index.d.ts +123 -86
  266. package/dist/blocks/jobs/index.js +58 -47
  267. package/dist/blocks/knowledge/index.d.ts +3 -3
  268. package/dist/blocks/knowledge/index.js +2 -2
  269. package/dist/blocks/leave/index.d.ts +30 -15
  270. package/dist/blocks/leave/index.js +6 -6
  271. package/dist/blocks/memory/index.d.ts +4 -4
  272. package/dist/blocks/memory/index.js +7 -7
  273. package/dist/blocks/metrics/index.d.ts +36 -30
  274. package/dist/blocks/metrics/index.js +19 -19
  275. package/dist/blocks/mfa/index.d.ts +2 -2
  276. package/dist/blocks/mfa/index.js +1 -1
  277. package/dist/blocks/mfa/react/index.d.ts +7 -7
  278. package/dist/blocks/mfa/react/index.js +9 -9
  279. package/dist/blocks/mfa/react/server.d.ts +1 -1
  280. package/dist/blocks/mfa/react/server.js +1 -1
  281. package/dist/blocks/mfa/solid/index.d.ts +3 -3
  282. package/dist/blocks/mfa/solid/index.js +2 -2
  283. package/dist/blocks/mfa/svelte/index.d.ts +3 -3
  284. package/dist/blocks/mfa/svelte/index.js +2 -2
  285. package/dist/blocks/mfa/vue/index.d.ts +3 -3
  286. package/dist/blocks/mfa/vue/index.js +2 -2
  287. package/dist/blocks/notifications/index.d.ts +132 -103
  288. package/dist/blocks/notifications/index.js +61 -46
  289. package/dist/blocks/notifications/react/index.d.ts +3 -3
  290. package/dist/blocks/notifications/react/index.js +5 -5
  291. package/dist/blocks/notifications/react/server.d.ts +5 -2
  292. package/dist/blocks/notifications/react/server.js +4 -1
  293. package/dist/blocks/notifications/solid/index.d.ts +3 -3
  294. package/dist/blocks/notifications/solid/index.js +2 -2
  295. package/dist/blocks/notifications/svelte/index.d.ts +3 -3
  296. package/dist/blocks/notifications/svelte/index.js +2 -2
  297. package/dist/blocks/notifications/vue/index.d.ts +3 -3
  298. package/dist/blocks/notifications/vue/index.js +2 -2
  299. package/dist/blocks/number-sequences/index.d.ts +15 -12
  300. package/dist/blocks/number-sequences/index.js +7 -4
  301. package/dist/blocks/oauth-server/index.d.ts +42 -21
  302. package/dist/blocks/oauth-server/index.js +16 -13
  303. package/dist/blocks/onboarding/index.d.ts +3 -3
  304. package/dist/blocks/onboarding/index.js +3 -3
  305. package/dist/blocks/onboarding/react/index.d.ts +10 -5
  306. package/dist/blocks/onboarding/react/index.js +10 -8
  307. package/dist/blocks/onboarding/react/server.d.ts +5 -2
  308. package/dist/blocks/onboarding/react/server.js +4 -1
  309. package/dist/blocks/onboarding/solid/index.d.ts +3 -3
  310. package/dist/blocks/onboarding/solid/index.js +2 -2
  311. package/dist/blocks/onboarding/svelte/index.d.ts +3 -3
  312. package/dist/blocks/onboarding/svelte/index.js +2 -2
  313. package/dist/blocks/onboarding/vue/index.d.ts +3 -3
  314. package/dist/blocks/onboarding/vue/index.js +2 -2
  315. package/dist/blocks/orders/index.d.ts +57 -30
  316. package/dist/blocks/orders/index.js +26 -17
  317. package/dist/blocks/organizations/index.d.ts +5 -5
  318. package/dist/blocks/organizations/index.js +5 -27
  319. package/dist/blocks/organizations/react/index.d.ts +40 -21
  320. package/dist/blocks/organizations/react/index.js +5 -5
  321. package/dist/blocks/organizations/react/server.d.ts +13 -4
  322. package/dist/blocks/organizations/react/server.js +12 -3
  323. package/dist/blocks/organizations/solid/index.d.ts +3 -3
  324. package/dist/blocks/organizations/solid/index.js +2 -2
  325. package/dist/blocks/organizations/svelte/index.d.ts +3 -3
  326. package/dist/blocks/organizations/svelte/index.js +2 -2
  327. package/dist/blocks/organizations/vue/index.d.ts +3 -3
  328. package/dist/blocks/organizations/vue/index.js +2 -2
  329. package/dist/blocks/outbox/index.d.ts +4 -4
  330. package/dist/blocks/outbox/index.js +20 -16
  331. package/dist/blocks/parties/index.d.ts +29 -20
  332. package/dist/blocks/parties/index.js +12 -9
  333. package/dist/blocks/pipelines/index.d.ts +26 -17
  334. package/dist/blocks/pipelines/index.js +11 -11
  335. package/dist/blocks/profiles/index.d.ts +23 -14
  336. package/dist/blocks/profiles/index.js +5 -5
  337. package/dist/blocks/promotions/index.d.ts +34 -16
  338. package/dist/blocks/promotions/index.js +12 -9
  339. package/dist/blocks/push/index.d.ts +43 -25
  340. package/dist/blocks/push/index.js +16 -16
  341. package/dist/blocks/quotes/index.d.ts +15 -12
  342. package/dist/blocks/quotes/index.js +9 -9
  343. package/dist/blocks/rank/index.d.ts +12 -12
  344. package/dist/blocks/rank/index.js +3 -3
  345. package/dist/blocks/reactions/index.d.ts +4 -4
  346. package/dist/blocks/reactions/index.js +3 -3
  347. package/dist/blocks/reactions/react/index.d.ts +14 -4
  348. package/dist/blocks/reactions/react/index.js +9 -5
  349. package/dist/blocks/reactions/react/server.d.ts +4 -1
  350. package/dist/blocks/reactions/react/server.js +4 -1
  351. package/dist/blocks/reactions/solid/index.d.ts +3 -3
  352. package/dist/blocks/reactions/solid/index.js +2 -2
  353. package/dist/blocks/reactions/svelte/index.d.ts +3 -3
  354. package/dist/blocks/reactions/svelte/index.js +2 -2
  355. package/dist/blocks/reactions/vue/index.d.ts +3 -3
  356. package/dist/blocks/reactions/vue/index.js +2 -2
  357. package/dist/blocks/relations/index.d.ts +40 -23
  358. package/dist/blocks/relations/index.js +8 -9
  359. package/dist/blocks/reminders/index.d.ts +35 -26
  360. package/dist/blocks/reminders/index.js +20 -14
  361. package/dist/blocks/reviews/index.d.ts +32 -17
  362. package/dist/blocks/reviews/index.js +6 -6
  363. package/dist/blocks/rules/index.d.ts +26 -24
  364. package/dist/blocks/rules/index.js +10 -11
  365. package/dist/blocks/rules/react/index.d.ts +9 -5
  366. package/dist/blocks/rules/react/index.js +12 -8
  367. package/dist/blocks/rules/solid/index.d.ts +3 -3
  368. package/dist/blocks/rules/solid/index.js +2 -2
  369. package/dist/blocks/rules/svelte/index.d.ts +3 -3
  370. package/dist/blocks/rules/svelte/index.js +2 -2
  371. package/dist/blocks/rules/vue/index.d.ts +3 -3
  372. package/dist/blocks/rules/vue/index.js +2 -2
  373. package/dist/blocks/saved-views/index.d.ts +3 -3
  374. package/dist/blocks/saved-views/index.js +2 -2
  375. package/dist/blocks/saved-views/react/index.d.ts +14 -8
  376. package/dist/blocks/saved-views/react/index.js +11 -8
  377. package/dist/blocks/saved-views/react/server.d.ts +5 -2
  378. package/dist/blocks/saved-views/react/server.js +4 -1
  379. package/dist/blocks/saved-views/solid/index.d.ts +3 -3
  380. package/dist/blocks/saved-views/solid/index.js +2 -2
  381. package/dist/blocks/saved-views/svelte/index.d.ts +3 -3
  382. package/dist/blocks/saved-views/svelte/index.js +2 -2
  383. package/dist/blocks/saved-views/vue/index.d.ts +3 -3
  384. package/dist/blocks/saved-views/vue/index.js +2 -2
  385. package/dist/blocks/search/index.d.ts +12 -9
  386. package/dist/blocks/search/index.js +9 -9
  387. package/dist/blocks/search/react/index.d.ts +8 -5
  388. package/dist/blocks/search/react/index.js +6 -6
  389. package/dist/blocks/search/react/server.d.ts +5 -2
  390. package/dist/blocks/search/react/server.js +4 -1
  391. package/dist/blocks/search/solid/index.d.ts +3 -3
  392. package/dist/blocks/search/solid/index.js +2 -2
  393. package/dist/blocks/search/svelte/index.d.ts +3 -3
  394. package/dist/blocks/search/svelte/index.js +2 -2
  395. package/dist/blocks/search/vue/index.d.ts +3 -3
  396. package/dist/blocks/search/vue/index.js +2 -2
  397. package/dist/blocks/service-principals/index.d.ts +24 -18
  398. package/dist/blocks/service-principals/index.js +11 -8
  399. package/dist/blocks/sessions/index.d.ts +2 -2
  400. package/dist/blocks/sessions/index.js +1 -1
  401. package/dist/blocks/sessions/react/index.d.ts +10 -5
  402. package/dist/blocks/sessions/react/index.js +8 -6
  403. package/dist/blocks/sessions/react/server.d.ts +9 -3
  404. package/dist/blocks/sessions/react/server.js +8 -2
  405. package/dist/blocks/sessions/solid/index.d.ts +3 -3
  406. package/dist/blocks/sessions/solid/index.js +2 -2
  407. package/dist/blocks/sessions/svelte/index.d.ts +3 -3
  408. package/dist/blocks/sessions/svelte/index.js +2 -2
  409. package/dist/blocks/sessions/vue/index.d.ts +3 -3
  410. package/dist/blocks/sessions/vue/index.js +2 -2
  411. package/dist/blocks/settings/index.d.ts +6 -5
  412. package/dist/blocks/settings/index.js +6 -5
  413. package/dist/blocks/settings/react/index.d.ts +13 -7
  414. package/dist/blocks/settings/react/index.js +5 -5
  415. package/dist/blocks/settings/react/server.d.ts +5 -2
  416. package/dist/blocks/settings/react/server.js +4 -1
  417. package/dist/blocks/settings/solid/index.d.ts +3 -3
  418. package/dist/blocks/settings/solid/index.js +2 -2
  419. package/dist/blocks/settings/svelte/index.d.ts +3 -3
  420. package/dist/blocks/settings/svelte/index.js +2 -2
  421. package/dist/blocks/settings/vue/index.d.ts +3 -3
  422. package/dist/blocks/settings/vue/index.js +2 -2
  423. package/dist/blocks/share-links/index.d.ts +19 -13
  424. package/dist/blocks/share-links/index.js +4 -4
  425. package/dist/blocks/shared-signals/index.d.ts +82 -37
  426. package/dist/blocks/shared-signals/index.js +24 -18
  427. package/dist/blocks/signing-keys/index.d.ts +5 -5
  428. package/dist/blocks/signing-keys/index.js +15 -15
  429. package/dist/blocks/sla/index.d.ts +13 -13
  430. package/dist/blocks/sla/index.js +8 -8
  431. package/dist/blocks/sso/index.d.ts +35 -30
  432. package/dist/blocks/sso/index.js +31 -17
  433. package/dist/blocks/state-machine/index.d.ts +22 -13
  434. package/dist/blocks/state-machine/index.js +3 -3
  435. package/dist/blocks/tags/index.d.ts +3 -3
  436. package/dist/blocks/tags/index.js +3 -3
  437. package/dist/blocks/tags/react/index.d.ts +15 -7
  438. package/dist/blocks/tags/react/index.js +15 -10
  439. package/dist/blocks/tags/react/server.d.ts +1 -1
  440. package/dist/blocks/tags/solid/index.d.ts +3 -3
  441. package/dist/blocks/tags/solid/index.js +2 -2
  442. package/dist/blocks/tags/svelte/index.d.ts +3 -3
  443. package/dist/blocks/tags/svelte/index.js +2 -2
  444. package/dist/blocks/tags/vue/index.d.ts +3 -3
  445. package/dist/blocks/tags/vue/index.js +2 -2
  446. package/dist/blocks/targets/index.d.ts +13 -13
  447. package/dist/blocks/targets/index.js +7 -7
  448. package/dist/blocks/teams/index.d.ts +9 -9
  449. package/dist/blocks/teams/index.js +4 -4
  450. package/dist/blocks/templates/index.d.ts +67 -51
  451. package/dist/blocks/templates/index.js +22 -23
  452. package/dist/blocks/time-tracking/index.d.ts +32 -22
  453. package/dist/blocks/time-tracking/index.js +19 -16
  454. package/dist/blocks/trash/index.d.ts +13 -11
  455. package/dist/blocks/trash/index.js +5 -5
  456. package/dist/blocks/undo/index.d.ts +4 -4
  457. package/dist/blocks/undo/index.js +3 -3
  458. package/dist/blocks/undo/react/index.d.ts +3 -3
  459. package/dist/blocks/undo/react/index.js +4 -4
  460. package/dist/blocks/undo/react/server.d.ts +5 -2
  461. package/dist/blocks/undo/react/server.js +4 -1
  462. package/dist/blocks/undo/solid/index.d.ts +3 -3
  463. package/dist/blocks/undo/solid/index.js +2 -2
  464. package/dist/blocks/undo/svelte/index.d.ts +3 -3
  465. package/dist/blocks/undo/svelte/index.js +2 -2
  466. package/dist/blocks/undo/vue/index.d.ts +3 -3
  467. package/dist/blocks/undo/vue/index.js +2 -2
  468. package/dist/blocks/usage/index.d.ts +5 -5
  469. package/dist/blocks/usage/index.js +3 -3
  470. package/dist/blocks/usage/react/index.d.ts +12 -6
  471. package/dist/blocks/usage/react/index.js +8 -8
  472. package/dist/blocks/usage/react/server.d.ts +1 -1
  473. package/dist/blocks/usage/solid/index.d.ts +3 -3
  474. package/dist/blocks/usage/solid/index.js +2 -2
  475. package/dist/blocks/usage/svelte/index.d.ts +3 -3
  476. package/dist/blocks/usage/svelte/index.js +2 -2
  477. package/dist/blocks/usage/vue/index.d.ts +3 -3
  478. package/dist/blocks/usage/vue/index.js +2 -2
  479. package/dist/blocks/vercel-marketplace/index.d.ts +252 -17
  480. package/dist/blocks/vercel-marketplace/index.js +489 -56
  481. package/dist/blocks/versions/index.d.ts +24 -21
  482. package/dist/blocks/versions/index.js +14 -16
  483. package/dist/blocks/waitlist/index.d.ts +31 -18
  484. package/dist/blocks/waitlist/index.js +10 -7
  485. package/dist/blocks/webhooks/index.d.ts +126 -89
  486. package/dist/blocks/webhooks/index.js +71 -60
  487. package/dist/blocks/work-items/index.d.ts +18 -16
  488. package/dist/blocks/work-items/index.js +11 -12
  489. package/dist/blocks/workflow-builder/index.d.ts +15 -13
  490. package/dist/blocks/workflow-builder/index.js +10 -7
  491. package/dist/blocks/workflow-builder/react/index.d.ts +4 -4
  492. package/dist/blocks/workflow-builder/react/index.js +8 -8
  493. package/dist/blocks/workflow-builder/react/server.d.ts +8 -2
  494. package/dist/blocks/workflow-builder/react/server.js +8 -2
  495. package/dist/blocks/workflow-builder/solid/index.d.ts +3 -3
  496. package/dist/blocks/workflow-builder/solid/index.js +2 -2
  497. package/dist/blocks/workflow-builder/svelte/index.d.ts +3 -3
  498. package/dist/blocks/workflow-builder/svelte/index.js +2 -2
  499. package/dist/blocks/workflow-builder/vue/index.d.ts +3 -3
  500. package/dist/blocks/workflow-builder/vue/index.js +2 -2
  501. package/dist/blocks/workflows/index.d.ts +5 -5
  502. package/dist/blocks/workflows/index.js +4 -4
  503. package/dist/blocks/workflows/react/index.d.ts +13 -6
  504. package/dist/blocks/workflows/react/index.js +7 -7
  505. package/dist/blocks/workflows/react/server.d.ts +8 -2
  506. package/dist/blocks/workflows/react/server.js +8 -2
  507. package/dist/blocks/workflows/solid/index.d.ts +3 -3
  508. package/dist/blocks/workflows/solid/index.js +2 -2
  509. package/dist/blocks/workflows/svelte/index.d.ts +3 -3
  510. package/dist/blocks/workflows/svelte/index.js +2 -2
  511. package/dist/blocks/workflows/vue/index.d.ts +3 -3
  512. package/dist/blocks/workflows/vue/index.js +2 -2
  513. package/dist/blocks-CR3vCYhj.js +88 -0
  514. package/dist/bookings-DJflcGqs.js +184 -0
  515. package/dist/bucket-DBay-ICp.d.ts +667 -0
  516. package/dist/build-DxzJf79X.js +1839 -0
  517. package/dist/build-UqJeGtsH.js +703 -0
  518. package/dist/calendar-DvbYFkrh.js +801 -0
  519. package/dist/channel-BjvGO39m.d.ts +77 -0
  520. package/dist/channels-CfcFPuo_.js +114 -0
  521. package/dist/chat-sdk/index.d.ts +154 -78
  522. package/dist/chat-sdk/index.js +57 -39
  523. package/dist/chat-sdk/react/index.d.ts +2 -2
  524. package/dist/chat-sdk/react/server.d.ts +2 -2
  525. package/dist/claims-Bp9My7XP.js +88 -0
  526. package/dist/claims-T8TWZ53E.js +63 -0
  527. package/dist/cli/add-BRjL7LuG.js +1 -0
  528. package/dist/cli/add-Cf0uxfZ2.js +672 -0
  529. package/dist/cli/add-DPfdDRq7.js +75 -0
  530. package/dist/cli/adopt-B28iUeGg.js +1 -0
  531. package/dist/cli/adopt-C0VugVMu.js +421 -0
  532. package/dist/cli/agent-CbuPvI2x.js +185 -0
  533. package/dist/cli/apply-BlxtZPxe.js +329 -0
  534. package/dist/cli/bin.js +3 -3
  535. package/dist/cli/blocks-CHQ7K8Yz.js +1 -0
  536. package/dist/cli/blocks-D3tsq-mR.js +124 -0
  537. package/dist/cli/cache-DdgzhoaL.js +516 -0
  538. package/dist/cli/catalog-DwTUdJaQ.js +188 -0
  539. package/dist/cli/codemod-Dz4R-tVY.js +1127 -0
  540. package/dist/cli/command-33pu13LT.js +963 -0
  541. package/dist/cli/completion-6M6Hr8TL.js +211 -0
  542. package/dist/cli/completion-Bqu8yq0q.js +1 -0
  543. package/dist/cli/completion-Ddr3yqd3.js +30 -0
  544. package/dist/cli/config-2qlSTi2o.js +1503 -0
  545. package/dist/cli/config-B31tIvAl.js +42 -0
  546. package/dist/cli/config-DVksOjSr.js +1 -0
  547. package/dist/cli/config-edit-D46H0UHp.js +613 -0
  548. package/dist/cli/db-CQCLx7cx.js +78 -0
  549. package/dist/cli/db-D8iId4R8.js +473 -0
  550. package/dist/cli/design-edit-B2aBiarJ.js +205 -0
  551. package/dist/cli/detect-D9JaAX20.js +84 -0
  552. package/dist/cli/doctor-pIek4vIO.js +3897 -0
  553. package/dist/cli/emit-CJKf47Bi.js +1078 -0
  554. package/dist/cli/env-BrLZfqsL.js +143 -0
  555. package/dist/cli/env-C-Bl6Awn.js +1 -0
  556. package/dist/cli/env-DMgjB_4y.js +1114 -0
  557. package/dist/cli/env-cbCEa79W.js +1 -0
  558. package/dist/cli/errors-BTe6A15O.js +98 -0
  559. package/dist/cli/exec--Q1ZEWUW.js +463 -0
  560. package/dist/cli/files-C5JfVnj5.js +972 -0
  561. package/dist/cli/fresh-import-DzgsGHkX.js +40 -0
  562. package/dist/cli/gen-DquZzY5a.js +307 -0
  563. package/dist/cli/index.d.ts +239 -175
  564. package/dist/cli/index.js +16 -16
  565. package/dist/cli/init-Dd-UdrE0.js +397 -0
  566. package/dist/cli/introspect-IMQCji2l.js +51 -0
  567. package/dist/cli/io-DH1kcmmP.js +37 -0
  568. package/dist/cli/keys-iJs_1WT8.js +106 -0
  569. package/dist/cli/live-BfAO5YRX.js +344 -0
  570. package/dist/cli/mcp-D8Az0FNn.js +240 -0
  571. package/dist/cli/metadata-CTStQPfV.js +144 -0
  572. package/dist/cli/migration-safety-Dg1lxomi.js +305 -0
  573. package/dist/cli/module-migration-CbX-jRhV.js +606 -0
  574. package/dist/cli/moved-CdNtCf4t.js +161 -0
  575. package/dist/cli/parse-CRZLku1b.js +182 -0
  576. package/dist/cli/preset-DEvwDc7U.js +129 -0
  577. package/dist/cli/prompts-jqnr94b9.js +1140 -0
  578. package/dist/cli/redact-KGAk2Ul9.js +38 -0
  579. package/dist/cli/run-BXhJoghZ.js +1602 -0
  580. package/dist/cli/run-DdxNRTr0.js +63 -0
  581. package/dist/cli/run-dTu_PD4I.js +711 -0
  582. package/dist/cli/scaffold-Bx3bcy2R.js +901 -0
  583. package/dist/cli/scaffold-mbNAQE19.js +1 -0
  584. package/dist/cli/seed-CLseQdXQ.js +188 -0
  585. package/dist/cli/seed-DSHSUsYy.js +1 -0
  586. package/dist/cli/shared-CAdIkTR7.js +151 -0
  587. package/dist/cli/skills-Bz4INB8f.js +121 -0
  588. package/dist/cli/snapshot-GfdB9Cjl.js +350 -0
  589. package/dist/cli/source-args-Dy3j1-H-.js +59 -0
  590. package/dist/cli/spec-BfEK0_04.js +1 -0
  591. package/dist/cli/spec-DXTdodlO.js +7534 -0
  592. package/dist/cli/sql-BUhpAvrW.js +2 -0
  593. package/dist/cli/sql-CLbWk3Yb.js +332 -0
  594. package/dist/cli/stack-_F_JhllX.js +135 -0
  595. package/dist/cli/stack-env-6hS-WEmh.js +93 -0
  596. package/dist/cli/stack-status-B_Ipd_-z.js +46 -0
  597. package/dist/cli/stacks-BYlQ96WS.js +232 -0
  598. package/dist/cli/style-Bm2X5JrN.js +35 -0
  599. package/dist/cli/supabase-toml-CncmQbO0.js +1164 -0
  600. package/dist/cli/sync-BBzNO-v9.js +91 -0
  601. package/dist/cli/topics-BpdnYmWb.js +30 -0
  602. package/dist/cli/typegen-F9GEjpvD.js +502 -0
  603. package/dist/cli/validate-B3lF3-jB.js +7522 -0
  604. package/dist/cli/version-DiwcIKOL.js +4 -0
  605. package/dist/cli/write-DZKk5rSF.js +201 -0
  606. package/dist/client/index.d.ts +6 -6
  607. package/dist/client/index.js +16 -11
  608. package/dist/client/native/index.d.ts +87 -53
  609. package/dist/client/native/index.js +65 -43
  610. package/dist/client--tyFmxDT.js +52 -0
  611. package/dist/client-0qFNkNhT.js +1060 -0
  612. package/dist/client-2z1aHG57.d.ts +475 -0
  613. package/dist/client-5IVhjmtl.d.ts +74 -0
  614. package/dist/client-B3WBilR2.d.ts +69 -0
  615. package/dist/client-B4JPQgf-.d.ts +165 -0
  616. package/dist/client-BAYh7P2h.js +211 -0
  617. package/dist/client-BKGVUgo7.js +380 -0
  618. package/dist/client-BNaOcfeH.js +58 -0
  619. package/dist/client-BOuaQA0h.js +173 -0
  620. package/dist/client-BP-8vn9G.d.ts +37 -0
  621. package/dist/client-BU5Yd0yO.d.ts +103 -0
  622. package/dist/client-Bb_Pj9wL.js +137 -0
  623. package/dist/client-BkH-Vh3s.d.ts +112 -0
  624. package/dist/client-BsfsRHae.d.ts +136 -0
  625. package/dist/client-Bta7yl1C.d.ts +451 -0
  626. package/dist/client-BwKXlohx.js +121 -0
  627. package/dist/client-C1zOmnS8.js +89 -0
  628. package/dist/client-CMqO1gCn.d.ts +64 -0
  629. package/dist/client-CPirbPPi.js +85 -0
  630. package/dist/client-CQPB-VJx.d.ts +110 -0
  631. package/dist/client-CXbP_p02.d.ts +156 -0
  632. package/dist/client-C_S9avzV.d.ts +420 -0
  633. package/dist/client-Cb1g45Hc.js +99 -0
  634. package/dist/client-CebKlRU7.js +157 -0
  635. package/dist/client-Ch-dDfTB.js +437 -0
  636. package/dist/client-CuFD4o56.d.ts +111 -0
  637. package/dist/client-D2y_CfhU.d.ts +137 -0
  638. package/dist/client-DAcVF-YJ.js +134 -0
  639. package/dist/client-DCuE1rFm.js +441 -0
  640. package/dist/client-DD02cst6.d.ts +245 -0
  641. package/dist/client-DD3EcytK.js +65 -0
  642. package/dist/client-DEE57s9m.d.ts +132 -0
  643. package/dist/client-DScMvaty.js +38 -0
  644. package/dist/client-DVRFa59w.d.ts +309 -0
  645. package/dist/client-DXb1Nmr3.js +111 -0
  646. package/dist/client-DkI0oyR7.js +76 -0
  647. package/dist/client-DkQcRKhm.js +67 -0
  648. package/dist/client-DoXBX3vS.d.ts +116 -0
  649. package/dist/client-Dsuy9wfA.d.ts +59 -0
  650. package/dist/client-EQvEzUQg.d.ts +276 -0
  651. package/dist/client-G7NGXZKe.d.ts +43 -0
  652. package/dist/client-OhTiAol1.js +213 -0
  653. package/dist/client-Wt19DaEb.js +291 -0
  654. package/dist/client-Y-kaHabc.d.ts +46 -0
  655. package/dist/client-YASsOslj.js +321 -0
  656. package/dist/client-Y_HnZGF4.js +51 -0
  657. package/dist/client-_mL998Gl.js +129 -0
  658. package/dist/client-i_u1e0Kf.d.ts +144 -0
  659. package/dist/client-kRvHKAKS.js +60 -0
  660. package/dist/client-nieeGXdg.d.ts +178 -0
  661. package/dist/client-pxXoQOdC.js +40 -0
  662. package/dist/client-ysVOUgxM.d.ts +54 -0
  663. package/dist/clone-CkG0-hlI.js +33 -0
  664. package/dist/cloud-event-CidL9jiw.d.ts +64 -0
  665. package/dist/cloud-event-XsM53POL.js +63 -0
  666. package/dist/codecs-Du_zE1xu.js +358 -0
  667. package/dist/codecs-WHpM3Byy.d.ts +221 -0
  668. package/dist/codegen-DGtOsqz9.d.ts +1809 -0
  669. package/dist/comments-Ceqo9bwE.js +230 -0
  670. package/dist/commerce/index.d.ts +38 -33
  671. package/dist/commerce/index.js +38 -28
  672. package/dist/compiler-DCotQWcs.d.ts +14 -0
  673. package/dist/compose-VBQL7zIO.js +53 -0
  674. package/dist/composite-BgBzdYP-.d.ts +82 -0
  675. package/dist/composite-BgSdL5tk.js +130 -0
  676. package/dist/config/index.d.ts +6 -6
  677. package/dist/config/index.js +7 -7
  678. package/dist/config-V6HMvce5.js +3930 -0
  679. package/dist/config-xUf0dj0t.js +562 -0
  680. package/dist/connector-CKcTPJRV.d.ts +107 -0
  681. package/dist/connectors-CgWuPQks.d.ts +147 -0
  682. package/dist/context-CCz6ZgyI.js +19 -0
  683. package/dist/context-CMxVnPMY.js +9 -0
  684. package/dist/context-CrojkPNC.js +41 -0
  685. package/dist/context-DvBEhsXX.d.ts +403 -0
  686. package/dist/controller-BEliOBOv.js +79 -0
  687. package/dist/controller-lWRcKqCl.d.ts +52 -0
  688. package/dist/create/index.d.ts +309 -166
  689. package/dist/create/index.js +1376 -1156
  690. package/dist/create/lite/index.d.ts +19 -12
  691. package/dist/create/lite/index.js +10 -9
  692. package/dist/create/oauth/index.d.ts +2 -0
  693. package/dist/create/oauth/index.js +101 -0
  694. package/dist/create/supabase/index.d.ts +13 -34
  695. package/dist/create/supabase/index.js +16 -84
  696. package/dist/credentials/index.d.ts +12 -12
  697. package/dist/credentials/index.js +13 -13
  698. package/dist/cron-CI1kP-t5.js +148 -0
  699. package/dist/cron-route-BbVtwXZz.js +24 -0
  700. package/dist/csv-2rXGPNtP.js +89 -0
  701. package/dist/csv-DhHQS2x_.d.ts +28 -0
  702. package/dist/define-D0LSXmUP.d.ts +1117 -0
  703. package/dist/define-DwZ_LQVO.js +2011 -0
  704. package/dist/define-block-MyM4lH42.d.ts +281 -0
  705. package/dist/delegation-DeAJehLk.js +146 -0
  706. package/dist/delivery-Bm0jxmzI.js +29 -0
  707. package/dist/delivery-n6lZGuGx.d.ts +71 -0
  708. package/dist/documents-BijGGIjr.d.ts +99 -0
  709. package/dist/edge/index.d.ts +65 -38
  710. package/dist/edge/index.js +20 -17
  711. package/dist/elysia/index.d.ts +16 -14
  712. package/dist/elysia/index.js +11 -9
  713. package/dist/email-tt2QqiSc.d.ts +42 -0
  714. package/dist/embeddings-DRGIc8ti.js +128 -0
  715. package/dist/embeddings-Deusi99x.d.ts +78 -0
  716. package/dist/ended-D_Twxl8v.d.ts +76 -0
  717. package/dist/entitlements-CMGsO4gL.d.ts +54 -0
  718. package/dist/entitlements-_tw0V3BY.js +45 -0
  719. package/dist/env/index.d.ts +1 -1
  720. package/dist/env/index.js +16 -4
  721. package/dist/envelope-BDShQQ7-.js +90 -0
  722. package/dist/errors-Cq72lONT.js +44 -0
  723. package/dist/errors-D7u24ZJH.js +321 -0
  724. package/dist/escape-like-DuKupGUV.d.ts +15 -0
  725. package/dist/eve/index.d.ts +40 -22
  726. package/dist/eve/index.js +34 -25
  727. package/dist/eve-dWNqpd9Z.d.ts +157 -0
  728. package/dist/event-calendar-E6AI-dgg.d.ts +217 -0
  729. package/dist/event-map-CtPFhcOp.js +19 -0
  730. package/dist/events/index.d.ts +3 -3
  731. package/dist/events/index.js +10 -10
  732. package/dist/events-D6IZ5CE8.js +82 -0
  733. package/dist/events-DhGgwqQA.d.ts +842 -0
  734. package/dist/events-SqJLbb8q.js +24 -0
  735. package/dist/executor-C29668fO.d.ts +281 -0
  736. package/dist/executor-C5uyGttm.js +207 -0
  737. package/dist/executor-Cy1nk4MZ.d.ts +104 -0
  738. package/dist/executor-DK2F9Zis.js +746 -0
  739. package/dist/executor-DXfgDsKd.d.ts +37 -0
  740. package/dist/executor-D_viYkhf.d.ts +179 -0
  741. package/dist/executor-QtVn0axs.js +147 -0
  742. package/dist/expo/index.d.ts +37 -26
  743. package/dist/expo/index.js +17 -14
  744. package/dist/expo-sqlite/index.d.ts +20 -17
  745. package/dist/expo-sqlite/index.js +19 -13
  746. package/dist/field-errors-CKEqR38q.d.ts +119 -0
  747. package/dist/field-formats-BX2FqLle.d.ts +39 -0
  748. package/dist/field-formats-C6QKA3UR.js +102 -0
  749. package/dist/filter-evaluate-CRDXv0Dl.js +217 -0
  750. package/dist/filter-evaluate-CSWhzYWN.d.ts +37 -0
  751. package/dist/filter-query-C7qgRYYv.d.ts +133 -0
  752. package/dist/filter-query-D4ZSwbcJ.js +524 -0
  753. package/dist/flags-C--SBMT9.js +279 -0
  754. package/dist/flags-CJFDNAvL.d.ts +246 -0
  755. package/dist/flags-sdk/index.d.ts +13 -13
  756. package/dist/flags-sdk/index.js +18 -15
  757. package/dist/form-definition-BjeElHsB.js +311 -0
  758. package/dist/form-definition-DcVnFzl4.d.ts +95 -0
  759. package/dist/format-AYHceC2m.d.ts +79 -0
  760. package/dist/framework-BpEnOfAo.js +57 -0
  761. package/dist/framework-CMeAuJts.d.ts +41 -0
  762. package/dist/function-contract-4vfi93Y5.d.ts +27 -0
  763. package/dist/function-contract-pEmsaUIf.js +8 -0
  764. package/dist/gateway-Dar9C0uP.d.ts +115 -0
  765. package/dist/gateway-options-BlVCqgb8.d.ts +29 -0
  766. package/dist/gateway-options-Cl74B7k6.js +27 -0
  767. package/dist/graph-B4eubUQG.js +365 -0
  768. package/dist/h3/index.d.ts +19 -12
  769. package/dist/h3/index.js +15 -11
  770. package/dist/h3/v1/index.d.ts +34 -24
  771. package/dist/h3/v1/index.js +23 -19
  772. package/dist/hmac-B3CTTlfv.js +23 -0
  773. package/dist/hono/index.d.ts +54 -36
  774. package/dist/hono/index.js +18 -18
  775. package/dist/http-AkLjqOuB.js +28 -0
  776. package/dist/http-BjjojWg3.js +40 -0
  777. package/dist/http-DzbloBR-.js +141 -0
  778. package/dist/image-url-_d7xYsXK.js +84 -0
  779. package/dist/impersonation-DFfDVJHk.js +62 -0
  780. package/dist/impersonation-YTa9dZUv.d.ts +28 -0
  781. package/dist/inbox-CLsIrPXs.d.ts +417 -0
  782. package/dist/index-B5XcM3VY.d.ts +230 -0
  783. package/dist/index-B5dVVZtW.d.ts +142 -0
  784. package/dist/index-Brm8I8iZ.d.ts +232 -0
  785. package/dist/index-C7-2ZS9f.d.ts +127 -0
  786. package/dist/index-CE0p3st5.d.ts +227 -0
  787. package/dist/index-CcpGT2GI.d.ts +151 -0
  788. package/dist/index-CrAKHNJF.d.ts +287 -0
  789. package/dist/index-DLjs7j_z.d.ts +61 -0
  790. package/dist/index-DbyDZZlc.d.ts +53 -0
  791. package/dist/index-DdZcWH6q.d.ts +820 -0
  792. package/dist/index-Dh5ZFCtu.d.ts +61 -0
  793. package/dist/index-NRMMhhEi.d.ts +104 -0
  794. package/dist/index-PADpaDku.d.ts +447 -0
  795. package/dist/index-X2fkPUwb.d.ts +51 -0
  796. package/dist/index-eoAU_QaY.d.ts +357 -0
  797. package/dist/index.d.ts +34 -23
  798. package/dist/index.js +22 -18
  799. package/dist/invalidate-BLiBFbLy.d.ts +19 -0
  800. package/dist/iso4217-B-durg_y.js +176 -0
  801. package/dist/json-DaByVJpw.js +22 -0
  802. package/dist/json-schema-Bu4YCRbZ.js +551 -0
  803. package/dist/jwks-cache-DbgNmSgV.js +49 -0
  804. package/dist/jws-D0toeQlA.d.ts +66 -0
  805. package/dist/jws-DOgHJKHb.js +205 -0
  806. package/dist/kit-BeXTrlZn.js +127 -0
  807. package/dist/kit-LeQGMzLH.d.ts +94 -0
  808. package/dist/knowledge-Bx_qehoZ.js +272 -0
  809. package/dist/knowledge-CYdNJasZ.d.ts +202 -0
  810. package/dist/lint/index.d.ts +6 -6
  811. package/dist/lint/index.js +9 -6
  812. package/dist/list/index.d.ts +3 -3
  813. package/dist/list/index.js +3 -3
  814. package/dist/list-query-CuS1w2Af.js +559 -0
  815. package/dist/list-query-Dx5cAqG6.d.ts +223 -0
  816. package/dist/live-CZtRMh62.js +246 -0
  817. package/dist/management-wtecfrNf.d.ts +57 -0
  818. package/dist/mcp/index.d.ts +70 -42
  819. package/dist/mcp/index.js +53 -45
  820. package/dist/mcp/sdk/index.d.ts +37 -25
  821. package/dist/mcp/sdk/index.js +16 -13
  822. package/dist/message-Bg4TKA12.d.ts +99 -0
  823. package/dist/messages-Bd5-5ZjP.js +492 -0
  824. package/dist/metric-definition-EAYI1r2n.d.ts +69 -0
  825. package/dist/mfa-Dt8AdWht.d.ts +36 -0
  826. package/dist/model-Btl8X9cs.d.ts +326 -0
  827. package/dist/model-messages-BWyXXA4s.js +206 -0
  828. package/dist/model-messages-DrR4lZ_c.d.ts +34 -0
  829. package/dist/money-BNRdJQzA.d.ts +91 -0
  830. package/dist/money-BZl985O-.js +197 -0
  831. package/dist/money-codec-BdnIiFFX.js +41 -0
  832. package/dist/nestjs/index.d.ts +32 -17
  833. package/dist/nestjs/index.js +27 -18
  834. package/dist/next/client/index.d.ts +8 -7
  835. package/dist/next/client/index.js +8 -7
  836. package/dist/next/image/index.d.ts +8 -6
  837. package/dist/next/image/index.js +7 -5
  838. package/dist/next/index.d.ts +142 -110
  839. package/dist/next/index.js +57 -42
  840. package/dist/node/index.d.ts +3 -3
  841. package/dist/node/index.js +33 -23
  842. package/dist/node-headers-BPtMP4_V.d.ts +27 -0
  843. package/dist/nuxt/index.d.ts +7 -6
  844. package/dist/nuxt/index.js +7 -6
  845. package/dist/onboarding-DjXV4rgO.js +68 -0
  846. package/dist/openapi/index.d.ts +3 -3
  847. package/dist/openapi/index.js +10 -7
  848. package/dist/operations-Cc27HkTG.d.ts +6 -0
  849. package/dist/operations-DVHRHvv6.js +29 -0
  850. package/dist/optional-peer-C1NbBRJm.js +32 -0
  851. package/dist/options-CIf3xni7.d.ts +52 -0
  852. package/dist/organizations-R98kfFwF.js +401 -0
  853. package/dist/orpc/index.d.ts +50 -37
  854. package/dist/orpc/index.js +22 -18
  855. package/dist/otel/index.d.ts +19 -16
  856. package/dist/otel/index.js +22 -19
  857. package/dist/outbox-Bsk-HJnq.d.ts +199 -0
  858. package/dist/overlay/index.d.ts +71 -55
  859. package/dist/overlay/index.js +48 -41
  860. package/dist/payments-6uuergov.js +16 -0
  861. package/dist/pg-error-B5QLDcbG.js +26 -0
  862. package/dist/plugin-D9bYbYli.js +45 -0
  863. package/dist/plugin-DouW0Kvg.d.ts +203 -0
  864. package/dist/plugins/actor/index.d.ts +9 -6
  865. package/dist/plugins/actor/index.js +6 -6
  866. package/dist/plugins/rules/index.d.ts +15 -15
  867. package/dist/plugins/rules/index.js +12 -6
  868. package/dist/plugins/soft-delete/index.d.ts +7 -7
  869. package/dist/plugins/soft-delete/index.js +7 -7
  870. package/dist/plugins/tenant/index.d.ts +16 -11
  871. package/dist/plugins/tenant/index.js +8 -9
  872. package/dist/plugins/timestamps/index.d.ts +3 -3
  873. package/dist/plugins/timestamps/index.js +4 -4
  874. package/dist/plugins/validation/index.d.ts +4 -4
  875. package/dist/plugins/validation/index.js +4 -4
  876. package/dist/pool-Bu8zXGzI.d.ts +123 -0
  877. package/dist/pool-errors-DOZ3oDeS.js +27 -0
  878. package/dist/ports-BltcWsHf.d.ts +312 -0
  879. package/dist/ports-CM3aG3zn.js +137 -0
  880. package/dist/ports-n3ZWSS_I.d.ts +89 -0
  881. package/dist/postgres/index.d.ts +15 -15
  882. package/dist/postgres/index.js +14 -8
  883. package/dist/postgrest-DGjrW4sK.d.ts +53 -0
  884. package/dist/powersync/index.d.ts +12 -13
  885. package/dist/powersync/index.js +18 -19
  886. package/dist/powersync/react/index.d.ts +13 -12
  887. package/dist/powersync/react/index.js +15 -11
  888. package/dist/preset/index.d.ts +4 -4
  889. package/dist/preset/index.js +4 -4
  890. package/dist/preset-HNFqCWaD.js +838 -0
  891. package/dist/problem-D0KDiYPk.js +162 -0
  892. package/dist/problem-D_DEBfMn.d.ts +79 -0
  893. package/dist/provider-BhIkKBOh.js +57 -0
  894. package/dist/provider-Dmsbl8ug.d.ts +112 -0
  895. package/dist/push-token-8lvtOEv4.d.ts +24 -0
  896. package/dist/query/index.d.ts +3 -3
  897. package/dist/query/index.js +2 -2
  898. package/dist/query-DgPYlU82.js +311 -0
  899. package/dist/rank-result-C6vsw27N.js +18 -0
  900. package/dist/rank-result-DHflCNwo.d.ts +14 -0
  901. package/dist/rate-limit-B7N1ZGl6.d.ts +50 -0
  902. package/dist/rate-limit-CXpPm4_l.js +49 -0
  903. package/dist/rate-limit-CpTD_WHm.js +328 -0
  904. package/dist/ratelimit-headers-kEcXyO3H.js +62 -0
  905. package/dist/react/index.d.ts +11 -11
  906. package/dist/react/index.js +4 -4
  907. package/dist/react/native/index.d.ts +36 -21
  908. package/dist/react/native/index.js +32 -20
  909. package/dist/react/server.d.ts +50 -21
  910. package/dist/react/server.js +42 -13
  911. package/dist/react/session.d.ts +9 -7
  912. package/dist/react/session.js +7 -5
  913. package/dist/react-BKCnIuZs.js +79 -0
  914. package/dist/react-controller-CKSdtJ10.js +43 -0
  915. package/dist/react-env-CodKZgPk.js +16 -0
  916. package/dist/react-router/index.d.ts +30 -23
  917. package/dist/react-router/index.js +14 -13
  918. package/dist/react-uvu_KcVY.js +599 -0
  919. package/dist/read-set-DP6fm21F.js +316 -0
  920. package/dist/realtime/index.d.ts +7 -7
  921. package/dist/realtime/index.js +4 -4
  922. package/dist/realtime-status-BhNkb-Ow.d.ts +8 -0
  923. package/dist/realtime-status-asHvhiOh.js +11 -0
  924. package/dist/refusal-BEyNVFy7.d.ts +32 -0
  925. package/dist/refusal-Ce2p81VW.js +64 -0
  926. package/dist/resolve-D57oDWNr.d.ts +289 -0
  927. package/dist/resolve-sy3_Gz0i.js +892 -0
  928. package/dist/resource-BRRU-A7j.js +91 -0
  929. package/dist/resource-BVvIiuX_.js +469 -0
  930. package/dist/resource-DxQOPkZ5.d.ts +115 -0
  931. package/dist/resource-execute-BbjuiXwD.d.ts +15 -0
  932. package/dist/resource-schemas-up6bKOUi.js +82 -0
  933. package/dist/resource-types-NXau9LJE.d.ts +153 -0
  934. package/dist/resources-CIi7sw1T.js +64 -0
  935. package/dist/resources-CZ60Vqwq.d.ts +7 -0
  936. package/dist/respond-DjEmE_DN.js +100 -0
  937. package/dist/respond-QW-f1yio.d.ts +101 -0
  938. package/dist/result-DIT_qp4G.js +146 -0
  939. package/dist/result-mijqfoJN.d.ts +346 -0
  940. package/dist/rrule-CesB9Rxd.js +290 -0
  941. package/dist/rules-D75V7dAE.js +286 -0
  942. package/dist/run-watch-B-LoK5m1.js +53 -0
  943. package/dist/runtime-CoKxZibd.js +45 -0
  944. package/dist/sales-lines-9HsX89aO.d.ts +28 -0
  945. package/dist/sales-lines-DgXeOEar.js +41 -0
  946. package/dist/sales-shared-CjXsy0NJ.js +22 -0
  947. package/dist/search-9hoZ8rN1.js +106 -0
  948. package/dist/search-Cn_DGluL.js +9 -0
  949. package/dist/server/index.d.ts +154 -109
  950. package/dist/server/index.js +49 -40
  951. package/dist/server-types-D_cQ6OxZ.d.ts +809 -0
  952. package/dist/session-DNRYXIOU.d.ts +97 -0
  953. package/dist/settings-DzQtMwfl.js +93 -0
  954. package/dist/shared-Bf-I13Ht.js +91 -0
  955. package/dist/shared-C80IHf4B.js +60 -0
  956. package/dist/shared-CRRfQAKG.d.ts +11 -0
  957. package/dist/shared-D11SWNLx.js +17 -0
  958. package/dist/sign-in-B_QJ2u62.js +386 -0
  959. package/dist/sign-in-D54FLMQy.d.ts +55 -0
  960. package/dist/signatures-CzqfLlfV.d.ts +43 -0
  961. package/dist/signatures-D8IoN3Rw.js +145 -0
  962. package/dist/signers-BuVQKDfK.d.ts +390 -0
  963. package/dist/signing-keys-i2Rsll6L.d.ts +119 -0
  964. package/dist/solid/index.d.ts +50 -23
  965. package/dist/solid/index.js +35 -14
  966. package/dist/solid-controller-7TxGaJNy.js +33 -0
  967. package/dist/solid-controller-BnF3ovwV.d.ts +11 -0
  968. package/dist/solid-start/index.d.ts +22 -18
  969. package/dist/solid-start/index.js +9 -9
  970. package/dist/spec/index.d.ts +39 -25
  971. package/dist/spec/index.js +26 -21
  972. package/dist/spec-pins-CZ2CL8YZ.d.ts +120 -0
  973. package/dist/spec-pins-D3Tm6HJi.js +60 -0
  974. package/dist/sql/index.d.ts +5 -5
  975. package/dist/sql/index.js +5 -5
  976. package/dist/sql-CQIikLnQ.js +421 -0
  977. package/dist/sql-frpIs51D.js +89308 -0
  978. package/dist/sso-C86TPpZr.js +217 -0
  979. package/dist/sso-D_am-gBz.d.ts +161 -0
  980. package/dist/ssr/index.d.ts +4 -4
  981. package/dist/ssr/index.js +3 -3
  982. package/dist/standard-16AIDny5.d.ts +7 -0
  983. package/dist/standard-l10kE0yS.js +25 -0
  984. package/dist/stats-Bt1RyT-F.js +1147 -0
  985. package/dist/storage/index.d.ts +4 -4
  986. package/dist/storage/index.js +147 -72
  987. package/dist/store-DKqbuNvw.d.ts +83 -0
  988. package/dist/store-McN-2esd.js +69 -0
  989. package/dist/streams/index.d.ts +24 -18
  990. package/dist/streams/index.js +4 -4
  991. package/dist/streams/redis/index.d.ts +10 -7
  992. package/dist/streams/redis/index.js +9 -9
  993. package/dist/stripe/index.d.ts +5 -2
  994. package/dist/stripe/index.js +2 -2
  995. package/dist/stripe-BJUfp5jM.js +32 -0
  996. package/dist/stripe-BSEwKCni.d.ts +140 -0
  997. package/dist/subject-readers-BJzh7WF7.js +49 -0
  998. package/dist/subject-readers-Bbq1i0Ol.d.ts +21 -0
  999. package/dist/subjects-DQ2SU4cA.d.ts +77 -0
  1000. package/dist/subscribers-BvZxcd63.js +33 -0
  1001. package/dist/supabase-mcp-Dz9DgrKP.js +28 -0
  1002. package/dist/supabase-mcp-Z4vtsuoO.d.ts +46 -0
  1003. package/dist/support-CWVTM2AB.js +534 -0
  1004. package/dist/support-view-BOJJSZKv.d.ts +17 -0
  1005. package/dist/svelte/index.d.ts +32 -14
  1006. package/dist/svelte/index.js +22 -10
  1007. package/dist/svelte-controller-BmRhHvFz.js +50 -0
  1008. package/dist/svelte-controller-DXO7gsmS.d.ts +13 -0
  1009. package/dist/sveltekit/index.d.ts +45 -33
  1010. package/dist/sveltekit/index.js +18 -17
  1011. package/dist/table-schema-xqSXrjCN.js +284 -0
  1012. package/dist/tags-C_ym1yDM.js +39 -0
  1013. package/dist/tags-Co-QIHeK.js +84 -0
  1014. package/dist/tags-tbiuHHMV.d.ts +30 -0
  1015. package/dist/tanstack-db/index.d.ts +17 -11
  1016. package/dist/tanstack-db/index.js +6 -6
  1017. package/dist/tanstack-db/supabase/index.d.ts +24 -9
  1018. package/dist/tanstack-db/supabase/index.js +6 -3
  1019. package/dist/tanstack-start/index.d.ts +40 -29
  1020. package/dist/tanstack-start/index.js +33 -19
  1021. package/dist/tax-BHSCb5Rw.d.ts +280 -0
  1022. package/dist/tax-keSd-q_1.js +140 -0
  1023. package/dist/tee-1fsH3bEz.js +101 -0
  1024. package/dist/template-DXsGm_R0.js +126 -0
  1025. package/dist/temporal-DLZlWbOi.js +85 -0
  1026. package/dist/temporal-required-Dt4mcPsi.js +20 -0
  1027. package/dist/tenant-DnMqeNIM.js +27 -0
  1028. package/dist/tenant-l3H2ouv7.d.ts +17 -0
  1029. package/dist/testing/index.d.ts +484 -270
  1030. package/dist/testing/index.js +333 -196
  1031. package/dist/timing-C5NzaEgy.js +95 -0
  1032. package/dist/topic-CZvLXFND.d.ts +415 -0
  1033. package/dist/topic-Cr01EHZy.js +643 -0
  1034. package/dist/ttl-cache-Bhr9swjT.js +32 -0
  1035. package/dist/types-BTK75521.js +8 -0
  1036. package/dist/types-Bzm0OgJk.d.ts +177 -0
  1037. package/dist/types-CB5MvzuE.d.ts +624 -0
  1038. package/dist/types-DYXhFhmQ.d.ts +251 -0
  1039. package/dist/types-DmshMaXz.d.ts +421 -0
  1040. package/dist/types-EUrisY2U.d.ts +217 -0
  1041. package/dist/types-vVsLvOUJ.d.ts +700 -0
  1042. package/dist/undo-CClrTbm9.d.ts +46 -0
  1043. package/dist/undo-HHonvNeg.js +44 -0
  1044. package/dist/upload-claim-DCuklVyh.js +33 -0
  1045. package/dist/usage-BFwuH7GK.d.ts +232 -0
  1046. package/dist/usage-CJmmCGzd.js +264 -0
  1047. package/dist/user-change-CSR_prhd.js +133 -0
  1048. package/dist/variants-Bat9zU8l.js +53 -0
  1049. package/dist/vault-BQThkbws.d.ts +62 -0
  1050. package/dist/vercel-connect/index.d.ts +3 -3
  1051. package/dist/vercel-connect/index.js +8 -8
  1052. package/dist/verify-BCmBaHlN.js +130 -0
  1053. package/dist/verify-BTAEsJbF.d.ts +146 -0
  1054. package/dist/view-CKzCp8FW.d.ts +90 -0
  1055. package/dist/view-CfUd5vI9.js +108 -0
  1056. package/dist/vue/index.d.ts +51 -27
  1057. package/dist/vue/index.js +41 -20
  1058. package/dist/vue-controller-DCOtUOA_.d.ts +11 -0
  1059. package/dist/vue-controller-EzyTjqca.js +32 -0
  1060. package/dist/watch-CYeMXFtj.d.ts +92 -0
  1061. package/dist/watch-Cnd6XDnU.js +139 -0
  1062. package/dist/watch-topic-CloXeDTO.d.ts +31 -0
  1063. package/dist/watch-topic-CuaWfCuv.js +57 -0
  1064. package/dist/wire-BJhepFbv.js +66 -0
  1065. package/dist/workflow-builder-DzZNlI45.js +699 -0
  1066. package/dist/workflow-sdk/builder/index.d.ts +51 -37
  1067. package/dist/workflow-sdk/builder/index.js +30 -24
  1068. package/dist/workflow-sdk/index.d.ts +24 -15
  1069. package/dist/workflow-sdk/index.js +9 -6
  1070. package/dist/workflow-sdk/world/index.d.ts +56 -24
  1071. package/dist/workflow-sdk/world/index.js +47 -24
  1072. package/dist/workflow-sdk-BXwl1THQ.d.ts +163 -0
  1073. package/dist/workflow-sdk-CPGiFE1B.js +242 -0
  1074. package/dist/workflow-sdk-world-BOEsvWmx.js +2123 -0
  1075. package/dist/workflows-BHyYAR6c.d.ts +258 -0
  1076. package/dist/workflows-otOMN33L.js +285 -0
  1077. package/dist/yjs/index.d.ts +14 -11
  1078. package/dist/yjs/index.js +13 -13
  1079. package/package.json +7 -3
  1080. package/schemas/cli-commands-v1.json +33 -0
  1081. package/schemas/config-v1.json +10 -2
  1082. package/schemas/design-v1.json +345 -0
  1083. package/schemas/doctor-report-v1.json +6 -1
  1084. package/skills/better-supabase/SKILL.md +4 -4
  1085. package/skills/better-supabase/references/frontend.md +3 -2
  1086. package/skills/better-supabase/references/ui-recipes.md +242 -245
  1087. package/skills/better-supabase-api/references/adapters.md +3 -6
  1088. package/skills/better-supabase-api/references/expo.md +1 -0
  1089. package/skills/better-supabase-testing/SKILL.md +2 -3
  1090. package/dist/access-sql-CTJPHjCL.js +0 -201
  1091. package/dist/actor-BAhb-d1S.d.ts +0 -104
  1092. package/dist/actor-CAL8mMih.js +0 -151
  1093. package/dist/adapter-B2WRsRIg.js +0 -1998
  1094. package/dist/agents-CbUIrH-w.d.ts +0 -111
  1095. package/dist/ai-cache-BdeJKlrV.d.ts +0 -70
  1096. package/dist/ai-cache-CLninP-F.js +0 -84
  1097. package/dist/ai-chat-D-2MH1sU.d.ts +0 -608
  1098. package/dist/ai-files-DXbgWA5M.js +0 -331
  1099. package/dist/ai-tasks-BJJChl-D.d.ts +0 -157
  1100. package/dist/announcements-BNxTW5HJ.js +0 -128
  1101. package/dist/api-C43_FYDp.js +0 -680
  1102. package/dist/api-DoWK3dTw.d.ts +0 -411
  1103. package/dist/api-keys-BSXwI2jF.js +0 -318
  1104. package/dist/api-keys-qnM63qjS.d.ts +0 -205
  1105. package/dist/app-tables-BRjMcWhW.js +0 -819
  1106. package/dist/app-tables-BrMBjyuq.d.ts +0 -35
  1107. package/dist/approvals-CRZtzxNt.d.ts +0 -124
  1108. package/dist/assistant-DZsHsYIx.d.ts +0 -148
  1109. package/dist/attachments-Bk3tyeUF.js +0 -264
  1110. package/dist/attributes-D4mA7WhI.js +0 -38
  1111. package/dist/audit-log-ovUlF4Mk.js +0 -786
  1112. package/dist/auth-CdBKt0CS.js +0 -20
  1113. package/dist/auth-link-BjFPqwLz.d.ts +0 -97
  1114. package/dist/auth-link-DrDX9KOT.js +0 -114
  1115. package/dist/auth-module-DbZv2WrR.js +0 -10
  1116. package/dist/auth-reply-Daq72lY4.js +0 -31
  1117. package/dist/authorization-ClWBcXJi.d.ts +0 -1456
  1118. package/dist/authorization-hooks-mLi894KH.d.ts +0 -214
  1119. package/dist/authorizer-B3yyCVUF.js +0 -126
  1120. package/dist/authorizer-eiOjo-3l.d.ts +0 -73
  1121. package/dist/base64-D4aqdnDR.js +0 -42
  1122. package/dist/before-route-B98js9m_.js +0 -30
  1123. package/dist/bind-CTNKpBM6.d.ts +0 -70
  1124. package/dist/block-env-CBd_SoL5.js +0 -29
  1125. package/dist/block-env-Dxl7rsI0.d.ts +0 -10
  1126. package/dist/block-events-DD9Q_NUz.js +0 -96
  1127. package/dist/block-fields-Bv1hV855.js +0 -139
  1128. package/dist/block-fields-DnaDbgZS.d.ts +0 -55
  1129. package/dist/block-helpers-CjcQM1yA.d.ts +0 -37
  1130. package/dist/block-helpers-DkVZNDrj.js +0 -264
  1131. package/dist/block-hooks-C22vuIUd.js +0 -114
  1132. package/dist/block-hooks-DcPJHztl.d.ts +0 -107
  1133. package/dist/block-transport-DezJPPA0.d.ts +0 -70
  1134. package/dist/block-transport-J7ZepTq2.js +0 -85
  1135. package/dist/blocks-D2WQ63PI.js +0 -84
  1136. package/dist/bookings-DQ7P888X.js +0 -181
  1137. package/dist/bucket-BBSNDFNH.d.ts +0 -582
  1138. package/dist/build-C-D_vn0U.js +0 -694
  1139. package/dist/build-CT6SPZkI.js +0 -1815
  1140. package/dist/calendar-eqyuQAoy.js +0 -801
  1141. package/dist/channel-D-LHCY11.d.ts +0 -78
  1142. package/dist/channels-C-GCoNLd.js +0 -114
  1143. package/dist/claims-0KZVT804.js +0 -61
  1144. package/dist/claims-PqzCxaTD.js +0 -85
  1145. package/dist/cli/add-B5V6uokQ.js +0 -651
  1146. package/dist/cli/add-BcOHumvq.js +0 -75
  1147. package/dist/cli/add-DzRJEHzD.js +0 -1
  1148. package/dist/cli/adopt-DDy50yz9.js +0 -1
  1149. package/dist/cli/adopt-Ht34C3QD.js +0 -412
  1150. package/dist/cli/agent-CCrTYK3W.js +0 -176
  1151. package/dist/cli/apply-4BmTvj2A.js +0 -332
  1152. package/dist/cli/blocks-bBI050w6.js +0 -1
  1153. package/dist/cli/blocks-jIvPqPtw.js +0 -124
  1154. package/dist/cli/cache-CVJmPGpd.js +0 -507
  1155. package/dist/cli/catalog-Cm6BtquM.js +0 -188
  1156. package/dist/cli/codemod-vsknM1Ue.js +0 -985
  1157. package/dist/cli/command-DLCZeHdo.js +0 -876
  1158. package/dist/cli/completion-BAm8SwGQ.js +0 -205
  1159. package/dist/cli/completion-CEZ-c3ja.js +0 -1
  1160. package/dist/cli/completion-D2BObVth.js +0 -30
  1161. package/dist/cli/config-C4e_RrmL.js +0 -1463
  1162. package/dist/cli/config-CC5DXgKX.js +0 -39
  1163. package/dist/cli/config-CynctXbc.js +0 -1
  1164. package/dist/cli/config-edit-Ct1lXe8a.js +0 -603
  1165. package/dist/cli/db-BxMRcHrY.js +0 -90
  1166. package/dist/cli/db-DT1bGB02.js +0 -78
  1167. package/dist/cli/design-edit-B-WsnhUF.js +0 -175
  1168. package/dist/cli/detect-DQsVeBHg.js +0 -84
  1169. package/dist/cli/doctor-D47sFjh9.js +0 -3683
  1170. package/dist/cli/emit-56LAG_Px.js +0 -1067
  1171. package/dist/cli/env--JFvv45k.js +0 -142
  1172. package/dist/cli/env-B7TWPEt0.js +0 -1
  1173. package/dist/cli/env-C8R7Nf0a.js +0 -1088
  1174. package/dist/cli/env-D-O91RK1.js +0 -1
  1175. package/dist/cli/errors-Caiz_0so.js +0 -98
  1176. package/dist/cli/files-DDvAwTko.js +0 -963
  1177. package/dist/cli/fresh-import-BeYf9I3x.js +0 -40
  1178. package/dist/cli/gen-D2E8osBE.js +0 -304
  1179. package/dist/cli/init-Cx7DDAdQ.js +0 -400
  1180. package/dist/cli/introspect-Ck7aa6v0.js +0 -51
  1181. package/dist/cli/io-BiPX-_J1.js +0 -37
  1182. package/dist/cli/keys-6ufnWeZl.js +0 -106
  1183. package/dist/cli/live-CLxJNC0r.js +0 -329
  1184. package/dist/cli/mcp-BVWvEoKo.js +0 -237
  1185. package/dist/cli/metadata-BRywyPvv.js +0 -138
  1186. package/dist/cli/migration-safety-DjVpz2D6.js +0 -206
  1187. package/dist/cli/module-migration-CPhuiY8C.js +0 -592
  1188. package/dist/cli/moved-BmtFuMK3.js +0 -152
  1189. package/dist/cli/parse-ksnw4phM.js +0 -170
  1190. package/dist/cli/preset-B1o6KbFp.js +0 -129
  1191. package/dist/cli/prompts-Bvg_DBpe.js +0 -1137
  1192. package/dist/cli/redact-PjNswZOs.js +0 -35
  1193. package/dist/cli/run-Bb8Nn8Ax.js +0 -1528
  1194. package/dist/cli/run-nX5ffQM_.js +0 -686
  1195. package/dist/cli/scaffold-DcXr4z7M.js +0 -898
  1196. package/dist/cli/scaffold-fO-FJGoO.js +0 -1
  1197. package/dist/cli/seed-BmOC6_iz.js +0 -114
  1198. package/dist/cli/seed-C_BmN498.js +0 -1
  1199. package/dist/cli/shared-DKLuA1Tp.js +0 -145
  1200. package/dist/cli/skills-CUx7S0bk.js +0 -121
  1201. package/dist/cli/snapshot-ClgWGd-b.js +0 -347
  1202. package/dist/cli/source-args-BDiUhsH8.js +0 -53
  1203. package/dist/cli/spec-CM7iyRnE.js +0 -7501
  1204. package/dist/cli/spec-DjHpWZJM.js +0 -1
  1205. package/dist/cli/sql-C4ymac2h.js +0 -2
  1206. package/dist/cli/sql-ybcjbz20.js +0 -326
  1207. package/dist/cli/stack-status-Cb_D79ZR.js +0 -456
  1208. package/dist/cli/style-2JfIPVMQ.js +0 -29
  1209. package/dist/cli/supabase-toml-BC5sNVKU.js +0 -1153
  1210. package/dist/cli/sync-DBvknfOK.js +0 -88
  1211. package/dist/cli/topics-BBE1-Vrg.js +0 -30
  1212. package/dist/cli/typegen--TfvOPLh.js +0 -494
  1213. package/dist/cli/validate-BfWNKvxy.js +0 -7522
  1214. package/dist/cli/version-CUKjFbNd.js +0 -4
  1215. package/dist/cli/write-VZljwoTB.js +0 -198
  1216. package/dist/client-5YAtJjyT.d.ts +0 -68
  1217. package/dist/client-9ZOirdtr.d.ts +0 -122
  1218. package/dist/client-B4a7f5ma.d.ts +0 -277
  1219. package/dist/client-B9CqzgPO.js +0 -75
  1220. package/dist/client-B9_8yzct.d.ts +0 -34
  1221. package/dist/client-BDO6i2Oe.js +0 -128
  1222. package/dist/client-BGnJ5WJi.js +0 -438
  1223. package/dist/client-BNy-K6XT.d.ts +0 -135
  1224. package/dist/client-BXv09wO1.d.ts +0 -162
  1225. package/dist/client-B_vHBwB6.d.ts +0 -455
  1226. package/dist/client-BfgwocyT.js +0 -155
  1227. package/dist/client-Bovn6-M9.d.ts +0 -108
  1228. package/dist/client-BpS8a6Fm.js +0 -51
  1229. package/dist/client-BqoYuTK3.d.ts +0 -58
  1230. package/dist/client-BzCv4kKE.js +0 -65
  1231. package/dist/client-C-2ajnhM.js +0 -89
  1232. package/dist/client-C3rmP3b0.d.ts +0 -59
  1233. package/dist/client-C5mUEb2n.js +0 -55
  1234. package/dist/client-CBQ2TV0r.d.ts +0 -218
  1235. package/dist/client-CCGSn7m5.d.ts +0 -100
  1236. package/dist/client-CFKONrrU.js +0 -1051
  1237. package/dist/client-CHR8IBNG.js +0 -318
  1238. package/dist/client-CJT3xiuI.d.ts +0 -103
  1239. package/dist/client-CNh-pjkT.d.ts +0 -107
  1240. package/dist/client-CXTDJCIs.d.ts +0 -34
  1241. package/dist/client-C_-NZRrg.js +0 -120
  1242. package/dist/client-CcPxbHeT.js +0 -288
  1243. package/dist/client-CeH7vd-g.d.ts +0 -39
  1244. package/dist/client-CosiUrUb.js +0 -98
  1245. package/dist/client-CrZKZVbb.d.ts +0 -155
  1246. package/dist/client-D7T7OLiw.js +0 -169
  1247. package/dist/client-DLz68Qga.d.ts +0 -130
  1248. package/dist/client-DNq8xYb-.js +0 -52
  1249. package/dist/client-DarDYaQj.d.ts +0 -419
  1250. package/dist/client-DbxvLC9Y.d.ts +0 -131
  1251. package/dist/client-Dft5Vq6m.d.ts +0 -388
  1252. package/dist/client-DyfWYU8S.js +0 -84
  1253. package/dist/client-Dz1jWDA2.js +0 -209
  1254. package/dist/client-DzTtOVRR.js +0 -137
  1255. package/dist/client-Ezlbskjq.js +0 -60
  1256. package/dist/client-GdJH4XJM.d.ts +0 -101
  1257. package/dist/client-QvuCfO4b.d.ts +0 -263
  1258. package/dist/client-UnM3e32l.js +0 -133
  1259. package/dist/client-WgrPIHH-.js +0 -213
  1260. package/dist/client-ZTtSV3l8.js +0 -40
  1261. package/dist/client-arq4daO_.js +0 -104
  1262. package/dist/client-cWUWrgis.d.ts +0 -157
  1263. package/dist/client-ckXfdy1k.js +0 -38
  1264. package/dist/client-eCDPjOMo.js +0 -438
  1265. package/dist/client-eCtwzCbQ.d.ts +0 -65
  1266. package/dist/client-ehjQ2tIT.d.ts +0 -52
  1267. package/dist/client-iaFm0aVf.js +0 -67
  1268. package/dist/client-pxjbgOz6.js +0 -376
  1269. package/dist/clone-dN9XOL1K.js +0 -29
  1270. package/dist/cloud-event-CTh9Sr5w.js +0 -60
  1271. package/dist/cloud-event-DXkNoI6v.d.ts +0 -64
  1272. package/dist/codecs-D-rpDifG.js +0 -358
  1273. package/dist/codecs-RwFNK8Jh.d.ts +0 -215
  1274. package/dist/codegen-C64C0NZG.d.ts +0 -1665
  1275. package/dist/comments-CV5O8q50.js +0 -230
  1276. package/dist/compiler-D_Gjpw_O.d.ts +0 -14
  1277. package/dist/compose-CP0ss-cQ.js +0 -53
  1278. package/dist/composite-B1Mmo4TU.d.ts +0 -67
  1279. package/dist/composite-BFatHqOU.js +0 -130
  1280. package/dist/config-DHhQmmuD.js +0 -3917
  1281. package/dist/config-NQmw_wsk.js +0 -558
  1282. package/dist/connector-D9NMNkv0.d.ts +0 -107
  1283. package/dist/connectors-CR9FJGzV.d.ts +0 -141
  1284. package/dist/context-BiwgsycK.js +0 -41
  1285. package/dist/context-Cv3KlxWY.d.ts +0 -377
  1286. package/dist/context-D6ZMKc2L.js +0 -19
  1287. package/dist/context-wDKxSl9x.js +0 -9
  1288. package/dist/controller-BBXX1RMw.d.ts +0 -46
  1289. package/dist/controller-D6NyNrlZ.js +0 -79
  1290. package/dist/cron-BHdXZFsJ.js +0 -145
  1291. package/dist/cron-route-mTvWhork.js +0 -24
  1292. package/dist/csv-CVfXqaAu.js +0 -89
  1293. package/dist/csv-D3eKxV1T.d.ts +0 -28
  1294. package/dist/define-Bu1v781m.js +0 -1962
  1295. package/dist/define-M_r1d2AT.d.ts +0 -1058
  1296. package/dist/define-block-CPyJ95rq.d.ts +0 -256
  1297. package/dist/delegation-B7uNnz6z.js +0 -140
  1298. package/dist/delivery-B1mKaOen.js +0 -30
  1299. package/dist/delivery-BeHgwS3k.d.ts +0 -69
  1300. package/dist/documents-CqtVr2fg.d.ts +0 -96
  1301. package/dist/email-BcmbIWOX.d.ts +0 -42
  1302. package/dist/embeddings-CVeOoufZ.js +0 -128
  1303. package/dist/embeddings-lTUwzvW4.d.ts +0 -78
  1304. package/dist/ended-DQmwYosO.d.ts +0 -70
  1305. package/dist/entitlements-C8UvF1Rz.js +0 -45
  1306. package/dist/entitlements-DgkeStXd.d.ts +0 -53
  1307. package/dist/envelope-C4Z55LKW.js +0 -90
  1308. package/dist/errors-BV1SKTVs.js +0 -315
  1309. package/dist/errors-D3BR8iUk.js +0 -44
  1310. package/dist/escape-like-B339PlP-.d.ts +0 -15
  1311. package/dist/eve-C_Onyk_j.d.ts +0 -151
  1312. package/dist/event-calendar-DJXXMJ3x.d.ts +0 -217
  1313. package/dist/event-map-Dy2vKHai.js +0 -19
  1314. package/dist/events-P3raDX2E.d.ts +0 -800
  1315. package/dist/events-xbpHkcK9.js +0 -82
  1316. package/dist/executor-BiB0wMBA.js +0 -735
  1317. package/dist/executor-BnMC0lj3.d.ts +0 -272
  1318. package/dist/executor-CvsNcQsa.d.ts +0 -174
  1319. package/dist/executor-CxGQiQN_.js +0 -206
  1320. package/dist/executor-D1hECPGG.d.ts +0 -39
  1321. package/dist/executor-D3K3tycZ.js +0 -147
  1322. package/dist/executor-DfdC00xr.d.ts +0 -95
  1323. package/dist/field-errors-DmJICh93.d.ts +0 -113
  1324. package/dist/field-formats-Cif5gr7c.js +0 -102
  1325. package/dist/field-formats-DCvOQlOy.d.ts +0 -39
  1326. package/dist/filter-evaluate-BJcaL3o1.d.ts +0 -34
  1327. package/dist/filter-evaluate-C0ULNfS7.js +0 -214
  1328. package/dist/filter-query-B3lhckKX.js +0 -518
  1329. package/dist/filter-query-Bc_Qa8V_.d.ts +0 -121
  1330. package/dist/flags-6KK6Vqkr.d.ts +0 -230
  1331. package/dist/flags-aUR7Rod6.js +0 -279
  1332. package/dist/form-definition-GVZTILhS.js +0 -311
  1333. package/dist/form-definition-sagoefQr.d.ts +0 -95
  1334. package/dist/format-CNwSjXUU.d.ts +0 -70
  1335. package/dist/framework-Ch8bMmQY.js +0 -51
  1336. package/dist/framework-D6IFkuAg.d.ts +0 -26
  1337. package/dist/function-contract-DWqFl_QO.d.ts +0 -21
  1338. package/dist/function-contract-DmkBg19r.js +0 -5
  1339. package/dist/gateway-Bq_tWwxE.d.ts +0 -109
  1340. package/dist/gateway-options-ClvvfuuU.d.ts +0 -29
  1341. package/dist/gateway-options-DcLcWL5_.js +0 -27
  1342. package/dist/graph-Cs28bOlK.js +0 -360
  1343. package/dist/hmac-BgpThYQW.js +0 -23
  1344. package/dist/http-C7trc6uN.js +0 -25
  1345. package/dist/http-Cv4T29xh.js +0 -40
  1346. package/dist/http-DdYadv-o.js +0 -126
  1347. package/dist/image-url-pIVlO6R1.js +0 -41
  1348. package/dist/impersonation-D5chOkrO.d.ts +0 -25
  1349. package/dist/impersonation-DxU6yHJV.js +0 -62
  1350. package/dist/inbox-Du5aPwKB.d.ts +0 -400
  1351. package/dist/index-BpFYMsi0.d.ts +0 -53
  1352. package/dist/index-BpyBH5O2.d.ts +0 -227
  1353. package/dist/index-Bq409YZn.d.ts +0 -138
  1354. package/dist/index-CEcDqDhc.d.ts +0 -722
  1355. package/dist/index-CK0Sxx57.d.ts +0 -258
  1356. package/dist/index-Csi8jD-m.d.ts +0 -206
  1357. package/dist/index-CxmVzT-3.d.ts +0 -86
  1358. package/dist/index-D8yhOz_4.d.ts +0 -344
  1359. package/dist/index-DHReeV74.d.ts +0 -245
  1360. package/dist/index-DgobXyil.d.ts +0 -58
  1361. package/dist/index-F6XTTkC9.d.ts +0 -131
  1362. package/dist/index-k-rrfG1g.d.ts +0 -202
  1363. package/dist/index-qCG78-Rf.d.ts +0 -97
  1364. package/dist/index-wTnPJUhv.d.ts +0 -58
  1365. package/dist/invalidate-BBqhpxyB.d.ts +0 -19
  1366. package/dist/iso4217-A8ev-CNW.js +0 -176
  1367. package/dist/json-CEnpTHlZ.js +0 -16
  1368. package/dist/json-schema-CpYINXG8.js +0 -548
  1369. package/dist/jwks-cache-C4rA69hD.js +0 -49
  1370. package/dist/jws-35a8VhFV.d.ts +0 -60
  1371. package/dist/jws-CwBB5QAT.js +0 -193
  1372. package/dist/kit-BeZX2pR_.d.ts +0 -66
  1373. package/dist/kit-LTbHrWWD.js +0 -104
  1374. package/dist/knowledge-BbdXOJvY.js +0 -272
  1375. package/dist/knowledge-CRk1jOAJ.d.ts +0 -187
  1376. package/dist/list-query-CBXNfJt4.js +0 -549
  1377. package/dist/list-query-FhFXzObg.d.ts +0 -194
  1378. package/dist/live-DwDreq1n.js +0 -239
  1379. package/dist/management-D1gG89z2.d.ts +0 -53
  1380. package/dist/message-B0fNJgq8.d.ts +0 -93
  1381. package/dist/messages-D5nIfCCf.js +0 -493
  1382. package/dist/metric-definition-95HFoW1V.d.ts +0 -70
  1383. package/dist/mfa-YzkRjNad.d.ts +0 -30
  1384. package/dist/model-lUafmeBQ.d.ts +0 -311
  1385. package/dist/model-messages-CIdqdUtk.js +0 -206
  1386. package/dist/model-messages-D4GZllOD.d.ts +0 -34
  1387. package/dist/money-95Rff2vT.js +0 -185
  1388. package/dist/money-DFpWzQvk.d.ts +0 -76
  1389. package/dist/money-codec-C21MWw50.js +0 -41
  1390. package/dist/node-headers-AO06VhqH.d.ts +0 -24
  1391. package/dist/onboarding-Du6kCmhF.js +0 -68
  1392. package/dist/operations-CsIfMED7.js +0 -29
  1393. package/dist/operations-DQCWqkt3.d.ts +0 -6
  1394. package/dist/optional-peer-Dx8TaYXw.js +0 -29
  1395. package/dist/options-ZQzNKKBS.d.ts +0 -52
  1396. package/dist/organizations-CO2qg44D.js +0 -398
  1397. package/dist/outbox-njgoVzFA.d.ts +0 -181
  1398. package/dist/payments-CzjCdIcz.js +0 -16
  1399. package/dist/pg-error-BV_X8Isq.js +0 -26
  1400. package/dist/plugin-D-95Q0w0.d.ts +0 -190
  1401. package/dist/plugin-tfXW1-qO.js +0 -45
  1402. package/dist/pool-cM3rpOQr.d.ts +0 -117
  1403. package/dist/pool-errors-CGqvTQOC.js +0 -27
  1404. package/dist/ports-DCAcG26M.d.ts +0 -86
  1405. package/dist/ports-DGe1vzF2.d.ts +0 -285
  1406. package/dist/ports-aALjot-D.js +0 -137
  1407. package/dist/postgrest-CjnO1hbr.d.ts +0 -53
  1408. package/dist/preset-Cqwlwx6G.js +0 -648
  1409. package/dist/problem-DCDIQiTA.d.ts +0 -76
  1410. package/dist/problem-JRCohp1j.js +0 -159
  1411. package/dist/provider-C-Ti38J6.js +0 -57
  1412. package/dist/provider-CNs0Jx0I.d.ts +0 -113
  1413. package/dist/push-token-D2sDxSNN.d.ts +0 -24
  1414. package/dist/query-Ctz-qKRx.js +0 -303
  1415. package/dist/rank-result-BcYfDA0x.d.ts +0 -14
  1416. package/dist/rank-result-DtQuIvob.js +0 -18
  1417. package/dist/rate-limit-DVZ7qIzW.js +0 -49
  1418. package/dist/rate-limit-I3AncmM8.js +0 -325
  1419. package/dist/rate-limit-c6c1mB6R.d.ts +0 -41
  1420. package/dist/ratelimit-headers-Bsxx0Tj2.js +0 -62
  1421. package/dist/react-4ZqkP8da.js +0 -79
  1422. package/dist/react-DzukE6Wp.js +0 -410
  1423. package/dist/react-controller-Xn-IU44p.js +0 -40
  1424. package/dist/react-env-Cc7Vf6eb.js +0 -13
  1425. package/dist/read-set-DeesfeL_.js +0 -314
  1426. package/dist/realtime-status-D2dw1hOE.js +0 -12
  1427. package/dist/realtime-status-DcsO00Gw.d.ts +0 -8
  1428. package/dist/refusal-CFpfmjcS.js +0 -61
  1429. package/dist/refusal-CufncwaN.d.ts +0 -18
  1430. package/dist/resolve-Bqb8TMTt.d.ts +0 -266
  1431. package/dist/resolve-f8QNuYI3.js +0 -870
  1432. package/dist/resource-Bdkqi8jo.js +0 -463
  1433. package/dist/resource-DO4gbVi5.js +0 -91
  1434. package/dist/resource-DYEtc-KN.d.ts +0 -106
  1435. package/dist/resource-execute-ruP2L1op.d.ts +0 -12
  1436. package/dist/resource-schemas-BJ518zFH.js +0 -79
  1437. package/dist/resource-types-CGr0BbL-.d.ts +0 -141
  1438. package/dist/resources-BiQpsM6O.d.ts +0 -7
  1439. package/dist/resources-Ck7itNeX.js +0 -64
  1440. package/dist/respond-Bhp3G__q.js +0 -95
  1441. package/dist/respond-CEBC6KUX.d.ts +0 -93
  1442. package/dist/result-BREt7qOh.d.ts +0 -312
  1443. package/dist/result-DIeYscA3.js +0 -134
  1444. package/dist/rrule-Cw4x4Pf_.js +0 -290
  1445. package/dist/rules-BiQgmZ_U.js +0 -287
  1446. package/dist/run-watch-CQRdpy-f.js +0 -53
  1447. package/dist/runtime-BOXURhEW.js +0 -45
  1448. package/dist/sales-lines-C6gafAwg.d.ts +0 -28
  1449. package/dist/sales-lines-CQ1iC6QM.js +0 -41
  1450. package/dist/sales-shared-CDSytDEn.js +0 -22
  1451. package/dist/search-BtoWY6n_.js +0 -9
  1452. package/dist/search-ZP13UTT4.js +0 -106
  1453. package/dist/server-types-BKN_R4Ws.d.ts +0 -755
  1454. package/dist/session-CwpfitmI.d.ts +0 -95
  1455. package/dist/settings-BiHDFglz.js +0 -90
  1456. package/dist/shared-BmMcMoW9.js +0 -89
  1457. package/dist/shared-C9zvURqC.js +0 -14
  1458. package/dist/shared-D5Djh43x.js +0 -60
  1459. package/dist/shared-DDSjEGDR.d.ts +0 -11
  1460. package/dist/sign-in-BCV5S2WZ.d.ts +0 -49
  1461. package/dist/sign-in-z2BaBdps.js +0 -367
  1462. package/dist/signatures-BXlDXV3D.d.ts +0 -43
  1463. package/dist/signatures-CeIoAelK.js +0 -145
  1464. package/dist/signers-BwKV-9S6.d.ts +0 -385
  1465. package/dist/signing-keys-v2MRYkDF.d.ts +0 -105
  1466. package/dist/solid-controller-DLsmrczT.js +0 -33
  1467. package/dist/solid-controller-Uqi5ef6z.d.ts +0 -11
  1468. package/dist/spec-pins-Dqpml2dZ.d.ts +0 -84
  1469. package/dist/spec-pins-S4PymRxp.js +0 -60
  1470. package/dist/sql-BPKRNutj.js +0 -422
  1471. package/dist/sql-DCfCbS2j.js +0 -88660
  1472. package/dist/sso-BaU_6ePE.js +0 -217
  1473. package/dist/sso-Bu0mVh0V.d.ts +0 -131
  1474. package/dist/standard-B1BigegP.js +0 -25
  1475. package/dist/standard-BcUQuUgu.d.ts +0 -7
  1476. package/dist/stats-Di5VAsYU.js +0 -1128
  1477. package/dist/store-B18bIvKc.d.ts +0 -68
  1478. package/dist/store-BdH5ruDx.js +0 -66
  1479. package/dist/stripe-NVcNOhHy.d.ts +0 -140
  1480. package/dist/stripe-XZrSmDTf.js +0 -32
  1481. package/dist/subject-readers-BNQzBDN9.d.ts +0 -21
  1482. package/dist/subject-readers-BpwUFJtp.js +0 -46
  1483. package/dist/subjects-DP-fvFkk.d.ts +0 -77
  1484. package/dist/subscribers-Cq--DL1E.js +0 -34
  1485. package/dist/supabase-mcp-C6tMoEjn.d.ts +0 -43
  1486. package/dist/supabase-mcp-DomZ-amK.js +0 -28
  1487. package/dist/support-BAhTqI7y.js +0 -522
  1488. package/dist/support-view-IRnDLuGN.d.ts +0 -17
  1489. package/dist/svelte-controller-BQOIXWEw.d.ts +0 -10
  1490. package/dist/svelte-controller-CDAujo-_.js +0 -50
  1491. package/dist/table-schema-pQlER3jj.js +0 -283
  1492. package/dist/tags-AUpl4Ob9.d.ts +0 -30
  1493. package/dist/tags-B99_U9Pp.js +0 -39
  1494. package/dist/tags-BqgaxCnv.js +0 -84
  1495. package/dist/tax-DMWDUzKt.d.ts +0 -273
  1496. package/dist/tax-wm9g2mD2.js +0 -140
  1497. package/dist/tee-Cw-iJAWL.js +0 -101
  1498. package/dist/template-Dw3dTmKe.js +0 -123
  1499. package/dist/temporal-CB5Fpo5d.js +0 -79
  1500. package/dist/temporal-required-nfZ87U-0.js +0 -20
  1501. package/dist/tenant-B-fiItlJ.js +0 -27
  1502. package/dist/tenant-BNp3kBAG.d.ts +0 -17
  1503. package/dist/timing-BMCWgpdZ.js +0 -92
  1504. package/dist/topic-1WTkDnPd.d.ts +0 -387
  1505. package/dist/topic-mee21pux.js +0 -629
  1506. package/dist/ttl-Hr34gRu8.js +0 -12
  1507. package/dist/ttl-cache-XzZ-Q2eX.js +0 -29
  1508. package/dist/types-B4zhT6dq.d.ts +0 -205
  1509. package/dist/types-BEEFkNFY.d.ts +0 -564
  1510. package/dist/types-BRTSpOIh.js +0 -5
  1511. package/dist/types-Bq64h5nY.d.ts +0 -649
  1512. package/dist/types-BrpW5ixT.d.ts +0 -370
  1513. package/dist/types-DDQ-Rsep.d.ts +0 -162
  1514. package/dist/types-DO9xWsGC.d.ts +0 -240
  1515. package/dist/undo-B5LgpGLy.js +0 -44
  1516. package/dist/undo-BsdYRox7.d.ts +0 -43
  1517. package/dist/usage-C504GF55.d.ts +0 -220
  1518. package/dist/usage-DdqT13_X.js +0 -261
  1519. package/dist/user-change-XzvgafU4.js +0 -130
  1520. package/dist/vault-DR2-zOjz.d.ts +0 -50
  1521. package/dist/verify-BucYsoKq.d.ts +0 -142
  1522. package/dist/verify-DnU-uWU2.js +0 -126
  1523. package/dist/version-TXpQEfh1.js +0 -4
  1524. package/dist/view-Bf7e07rQ.d.ts +0 -90
  1525. package/dist/view-CYX1wsgp.js +0 -105
  1526. package/dist/vue-controller-C9tFzqAc.js +0 -32
  1527. package/dist/vue-controller-Cav6Wt_r.d.ts +0 -11
  1528. package/dist/watch-BAuIzC2r.js +0 -139
  1529. package/dist/watch-ry70AEm6.d.ts +0 -84
  1530. package/dist/watch-topic-DWHy63ZJ.d.ts +0 -28
  1531. package/dist/watch-topic-miuymrli.js +0 -57
  1532. package/dist/wire-BCJxCtHS.js +0 -45
  1533. package/dist/workflow-builder-CynLqc6H.js +0 -697
  1534. package/dist/workflow-sdk-DM7T3sF4.d.ts +0 -161
  1535. package/dist/workflow-sdk-QnnzIQRc.js +0 -243
  1536. package/dist/workflow-sdk-world-QzcxaaCD.js +0 -2103
  1537. package/dist/workflows-DQBCzrHC.d.ts +0 -243
  1538. package/dist/workflows-H9qJge3f.js +0 -282
@@ -1,8 +1,8 @@
1
- import { c as PRESET_CATALOG, i as presetOf, s as resolvePreset } from "../config-DHhQmmuD.js";
2
- import { a as appDefaultError, c as appReservedColumns, o as appIdentifierError, p as isAppDefault, s as appNameLengthError, x as APP_ON_DELETE_ACTIONS } from "../app-tables-BRjMcWhW.js";
3
- import { o as resolveConfig } from "../config-NQmw_wsk.js";
4
- import { c as designConfig, n as diffDesigns } from "../preset-Cqwlwx6G.js";
5
- import { E as SQL_MODULES, i as moduleLayout, m as renderModules } from "../sql-DCfCbS2j.js";
1
+ import { c as PRESET_CATALOG, i as presetOf, s as resolvePreset, v as encodePreset } from "../config-V6HMvce5.js";
2
+ import { a as appDefaultError, c as appReservedColumns, o as appIdentifierError, p as isAppDefault, s as appNameLengthError, x as APP_ON_DELETE_ACTIONS } from "../app-tables-0YZ9IskE.js";
3
+ import { o as resolveConfig } from "../config-xUf0dj0t.js";
4
+ import { _ as encodeDesign, a as DesignParseError, b as parseDesign, h as designOf, n as diffDesigns, o as DesignTooLongError, u as designConfig, y as jsonPointer } from "../preset-HNFqCWaD.js";
5
+ import { D as SQL_MODULES, h as renderModules, i as moduleLayout } from "../sql-frpIs51D.js";
6
6
  //#region src/create/column-keys.ts
7
7
  /** The most options a select takes, and the longest option. */
8
8
  const MAX_OPTIONS = 100;
@@ -55,8 +55,8 @@ function fitsBound(type, value) {
55
55
  }
56
56
  /**
57
57
  * A column without the keys its type can't take: a format of another type,
58
- * options outside text and text[], bounds that don't apply, an identity
59
- * outside integer and bigint, and a default an identity or the type refuses.
58
+ * options outside text and text[], bounds that don't apply, an identity outside
59
+ * integer and bigint, and a default an identity or the type refuses.
60
60
  */
61
61
  function fitted(column) {
62
62
  const { format, options, min, max, identity, default: fallback, nullable, ...rest } = column;
@@ -80,7 +80,10 @@ function optionError(options, option) {
80
80
  if (options.includes(option)) return `${option} is already an option.`;
81
81
  if (options.length >= MAX_OPTIONS) return `A select takes at most ${MAX_OPTIONS} options.`;
82
82
  }
83
- /** Why `value` can't be a bound of `column`, or `undefined` when it can (an empty value clears it). */
83
+ /**
84
+ * Why `value` can't be a bound of `column`, or `undefined` when it can (an
85
+ * empty value clears it).
86
+ */
84
87
  function boundError(column, side, value) {
85
88
  const trimmed = value.trim();
86
89
  if (trimmed === "") return;
@@ -99,7 +102,10 @@ function withBounds(column, bounds) {
99
102
  if (bounds.max !== void 0) next.max = bounds.max;
100
103
  return next;
101
104
  }
102
- /** What the canvas shows for a column that is more than its type, such as an email or a select. */
105
+ /**
106
+ * What the canvas shows for a column that is more than its type, such as an
107
+ * email or a select.
108
+ */
103
109
  function columnLabel(column) {
104
110
  if (column.identity === true) return "autonumber";
105
111
  if (column.options !== void 0) return column.type === "text[]" ? "multi-select" : "select";
@@ -107,6 +113,109 @@ function columnLabel(column) {
107
113
  return column.format === void 0 ? void 0 : FORMAT_LABELS[column.format];
108
114
  }
109
115
  //#endregion
116
+ //#region src/create/design-scope.ts
117
+ const AUTH_USERS$1 = "auth.users";
118
+ /**
119
+ * The column that scopes an app table's rows, or `null` for `scope: "none"` and
120
+ * unscoped presets.
121
+ */
122
+ function scopeColumnOf(table, preset) {
123
+ const scope = table.scope ?? "inherit";
124
+ if (scope === "none") return null;
125
+ if (scope === "inherit" && preset.scope === "tenant") return {
126
+ name: `${preset.tenantName}_id`,
127
+ type: preset.idType,
128
+ nullable: false,
129
+ default: null,
130
+ unique: false
131
+ };
132
+ if (scope === "user" || preset.scope === "user") return {
133
+ name: "user_id",
134
+ type: "uuid",
135
+ nullable: false,
136
+ default: "auth.uid()",
137
+ unique: false
138
+ };
139
+ return null;
140
+ }
141
+ //#endregion
142
+ //#region src/create/design-subject.ts
143
+ /**
144
+ * The columns `subject` adds: `rank` for manual order and `deleted_at` for
145
+ * trash.
146
+ */
147
+ function subjectColumns(subject) {
148
+ const columns = [];
149
+ if (subject?.rank !== void 0) columns.push({
150
+ name: "rank",
151
+ type: "text",
152
+ nullable: false,
153
+ default: "'V'",
154
+ unique: false
155
+ });
156
+ if (subject?.softDelete === true) columns.push({
157
+ name: "deleted_at",
158
+ type: "timestamptz",
159
+ nullable: true,
160
+ default: null,
161
+ unique: false
162
+ });
163
+ return columns;
164
+ }
165
+ /** The subject with the columns it names renamed or dropped by `edit`. */
166
+ function subjectColumnsEdited(subject, edit) {
167
+ const { title, search, rank, versions, ...rest } = subject;
168
+ const next = { ...rest };
169
+ const [nextTitle] = title === void 0 ? [] : edit([title]);
170
+ if (nextTitle !== void 0) next.title = nextTitle;
171
+ if (search !== void 0) {
172
+ const nextSearch = {};
173
+ const [searchTitle] = search.title === void 0 ? [] : edit([search.title]);
174
+ const body = edit(search.body ?? []);
175
+ if (searchTitle !== void 0) nextSearch.title = searchTitle;
176
+ if (body.length > 0) nextSearch.body = body;
177
+ next.search = nextSearch;
178
+ }
179
+ if (versions === true) next.versions = true;
180
+ else if (versions !== void 0) {
181
+ const { columns, ...options } = versions;
182
+ const kept = columns === void 0 ? void 0 : edit(columns);
183
+ next.versions = kept === void 0 || kept.length === 0 ? options : {
184
+ ...options,
185
+ columns: kept
186
+ };
187
+ }
188
+ if (rank === true) next.rank = true;
189
+ else if (rank !== void 0) {
190
+ const [group] = rank.group === void 0 ? [] : edit([rank.group]);
191
+ next.rank = group === void 0 ? true : { group };
192
+ }
193
+ return next;
194
+ }
195
+ const SUBJECT_TYPE = /^[a-z][a-z0-9_]*$/u;
196
+ /**
197
+ * Why `type` can't be the subject type of the app table `table`, or `undefined`
198
+ * when it can.
199
+ */
200
+ function subjectTypeError(design, table, type) {
201
+ if (!SUBJECT_TYPE.test(type)) return "Use lowercase letters, digits and underscores, starting with a letter.";
202
+ const owner = Object.entries(design.appTables ?? {}).find(([name, each]) => name !== table && each.subject?.type === type)?.[0];
203
+ return owner === void 0 ? void 0 : `${owner} already has the subject type ${type}.`;
204
+ }
205
+ /**
206
+ * App table events with `edit` applied to the payload columns, dropping an
207
+ * empty list.
208
+ */
209
+ function eventsColumnsEdited(events, edit) {
210
+ if (events === true) return true;
211
+ const { include, ...rest } = events;
212
+ const kept = include === void 0 ? [] : edit(include);
213
+ return kept.length === 0 ? rest : {
214
+ ...rest,
215
+ include: kept
216
+ };
217
+ }
218
+ //#endregion
110
219
  //#region src/create/design-computed.ts
111
220
  /** The aggregates a rollup takes (`APP_ROLLUP_AGGREGATES`). */
112
221
  const ROLLUP_AGGREGATES = [
@@ -134,7 +243,10 @@ function isRollupAggregate(value) {
134
243
  function readableColumns(table) {
135
244
  return [...Object.entries(table.columns ?? {}).map(([name, column]) => [name, column.type]), ...table.timestamps === false ? [] : [["created_at", "timestamptz"], ["updated_at", "timestamptz"]]];
136
245
  }
137
- /** The columns `aggregate` can read: numbers for sum and avg, ordered types for min and max, none for count. */
246
+ /**
247
+ * The columns `aggregate` can read: numbers for sum and avg, ordered types for
248
+ * min and max, none for count.
249
+ */
138
250
  function rollupColumns(child, aggregate) {
139
251
  if (aggregate === "count") return [];
140
252
  const fits = aggregate === "sum" || aggregate === "avg" ? NUMBERS : ORDERED;
@@ -144,14 +256,20 @@ function rollupColumns(child, aggregate) {
144
256
  function filterColumns(child) {
145
257
  return Object.entries(child.columns ?? {}).flatMap(([name, column]) => column.type === "text" && column.options !== void 0 ? [[name, column.options]] : []);
146
258
  }
147
- /** Each app table column that references `parent`, as `{ table, via }`: what a rollup on `parent` can aggregate. */
259
+ /**
260
+ * Each app table column that references `parent`, as `{ table, via }`: what a
261
+ * rollup on `parent` can aggregate.
262
+ */
148
263
  function rollupSources(tables, parent) {
149
264
  return Object.entries(tables).flatMap(([table, config]) => Object.entries(config.columns ?? {}).filter(([, column]) => column.references !== void 0 && column.references.block === void 0 && column.references.table === parent).map(([via]) => ({
150
265
  table,
151
266
  via
152
267
  })));
153
268
  }
154
- /** Each column of `name` that references another app table, with that table: what a lookup can follow. */
269
+ /**
270
+ * Each column of `name` that references another app table, with that table:
271
+ * what a lookup can follow.
272
+ */
155
273
  function lookupSources(tables, name) {
156
274
  return Object.entries(tables[name]?.columns ?? {}).flatMap(([via, column]) => column.references !== void 0 && column.references.block === void 0 && Object.hasOwn(tables, column.references.table) ? [{
157
275
  via,
@@ -183,7 +301,10 @@ function withComputed(table, rollups, lookups) {
183
301
  if (lookups !== void 0 && Object.keys(lookups).length > 0) next.lookups = lookups;
184
302
  return next;
185
303
  }
186
- /** `table` with a rollup or lookup set under `name`, replacing `previous` in its place. */
304
+ /**
305
+ * `table` with a rollup or lookup set under `name`, replacing `previous` in its
306
+ * place.
307
+ */
187
308
  function tableWithComputed(table, name, computed, previous) {
188
309
  const placed = (record, value) => {
189
310
  const entries = Object.entries(record ?? {});
@@ -198,9 +319,9 @@ function tableWithoutComputed(table, name) {
198
319
  }
199
320
  /**
200
321
  * The tables with every rollup and lookup that no longer fits dropped: one
201
- * whose table, link or column was deleted or retyped, or whose name a
202
- * column now uses. `sql sync` would refuse them, and the design code would
203
- * not encode.
322
+ * whose table, link or column was deleted or retyped, or whose name a column
323
+ * now uses. `sql sync` would refuse them, and the design code would not
324
+ * encode.
204
325
  */
205
326
  function prunedComputed(tables) {
206
327
  return Object.fromEntries(Object.entries(tables).map(([name, table]) => {
@@ -219,7 +340,10 @@ function computedTableRenamed(tables, from, to) {
219
340
  } : rollup]))
220
341
  }]));
221
342
  }
222
- /** The rollup fitted to a new source or aggregate: a column the aggregate can read, and a filter the child still has. */
343
+ /**
344
+ * The rollup fitted to a new source or aggregate: a column the aggregate can
345
+ * read, and a filter the child still has.
346
+ */
223
347
  function fittedRollup(tables, rollup) {
224
348
  const child = tables[rollup.table] ?? {};
225
349
  const columns = rollupColumns(child, rollup.aggregate);
@@ -249,8 +373,8 @@ function rollupRenamed(rollup, swap) {
249
373
  }
250
374
  /**
251
375
  * Every rollup and lookup that reads `table.from`, reading `table.to`. The
252
- * tables already have the column renamed, so a lookup finds its target
253
- * through the renamed link.
376
+ * tables already have the column renamed, so a lookup finds its target through
377
+ * the renamed link.
254
378
  */
255
379
  function computedColumnRenamed(tables, table, from, to) {
256
380
  const swap = (column) => column === from ? to : column;
@@ -289,74 +413,6 @@ function computedRows(table) {
289
413
  })];
290
414
  }
291
415
  //#endregion
292
- //#region src/create/design-subject.ts
293
- /** The columns `subject` adds: `rank` for manual order and `deleted_at` for trash. */
294
- function subjectColumns(subject) {
295
- const columns = [];
296
- if (subject?.rank !== void 0) columns.push({
297
- name: "rank",
298
- type: "text",
299
- nullable: false,
300
- default: "'V'",
301
- unique: false
302
- });
303
- if (subject?.softDelete === true) columns.push({
304
- name: "deleted_at",
305
- type: "timestamptz",
306
- nullable: true,
307
- default: null,
308
- unique: false
309
- });
310
- return columns;
311
- }
312
- /** The subject with the columns it names renamed or dropped by `edit`. */
313
- function subjectColumnsEdited(subject, edit) {
314
- const { title, search, rank, versions, ...rest } = subject;
315
- const next = { ...rest };
316
- const [nextTitle] = title === void 0 ? [] : edit([title]);
317
- if (nextTitle !== void 0) next.title = nextTitle;
318
- if (search !== void 0) {
319
- const nextSearch = {};
320
- const [searchTitle] = search.title === void 0 ? [] : edit([search.title]);
321
- const body = edit(search.body ?? []);
322
- if (searchTitle !== void 0) nextSearch.title = searchTitle;
323
- if (body.length > 0) nextSearch.body = body;
324
- next.search = nextSearch;
325
- }
326
- if (versions === true) next.versions = true;
327
- else if (versions !== void 0) {
328
- const { columns, ...options } = versions;
329
- const kept = columns === void 0 ? void 0 : edit(columns);
330
- next.versions = kept === void 0 || kept.length === 0 ? options : {
331
- ...options,
332
- columns: kept
333
- };
334
- }
335
- if (rank === true) next.rank = true;
336
- else if (rank !== void 0) {
337
- const [group] = rank.group === void 0 ? [] : edit([rank.group]);
338
- next.rank = group === void 0 ? true : { group };
339
- }
340
- return next;
341
- }
342
- const SUBJECT_TYPE = /^[a-z][a-z0-9_]*$/u;
343
- /** Why `type` can't be the subject type of the app table `table`, or `undefined` when it can. */
344
- function subjectTypeError(design, table, type) {
345
- if (!SUBJECT_TYPE.test(type)) return "Use lowercase letters, digits and underscores, starting with a letter.";
346
- const owner = Object.entries(design.appTables ?? {}).find(([name, each]) => name !== table && each.subject?.type === type)?.[0];
347
- return owner === void 0 ? void 0 : `${owner} already has the subject type ${type}.`;
348
- }
349
- /** App table events with `edit` applied to the payload columns, dropping an empty list. */
350
- function eventsColumnsEdited(events, edit) {
351
- if (events === true) return true;
352
- const { include, ...rest } = events;
353
- const kept = include === void 0 ? [] : edit(include);
354
- return kept.length === 0 ? rest : {
355
- ...rest,
356
- include: kept
357
- };
358
- }
359
- //#endregion
360
416
  //#region src/create/design.ts
361
417
  const EMPTY_DESIGN = {};
362
418
  /** The schema app tables go in. */
@@ -378,26 +434,6 @@ function isAppTable(table) {
378
434
  function isEmptyDesign(design) {
379
435
  return Object.keys(design.appTables ?? {}).length === 0 && Object.keys(design.extraColumns ?? {}).length === 0 && Object.keys(design.positions ?? {}).length === 0;
380
436
  }
381
- /** The column that scopes an app table's rows, or `null` for `scope: "none"` and unscoped presets. */
382
- function scopeColumnOf(table, preset) {
383
- const scope = table.scope ?? "inherit";
384
- if (scope === "none") return null;
385
- if (scope === "inherit" && preset.scope === "tenant") return {
386
- name: `${preset.tenantName}_id`,
387
- type: preset.idType,
388
- nullable: false,
389
- default: null,
390
- unique: false
391
- };
392
- if (scope === "user" || preset.scope === "user") return {
393
- name: "user_id",
394
- type: "uuid",
395
- nullable: false,
396
- default: "auth.uid()",
397
- unique: false
398
- };
399
- return null;
400
- }
401
437
  /** Why `name` can't name an app table or column, by the library's rules. */
402
438
  function identifierError(name) {
403
439
  return appIdentifierError(name);
@@ -421,8 +457,8 @@ function columnError(table, name, preset) {
421
457
  if (appReservedColumns(preset.tenantName).includes(name)) return `${name} is a column every app table can get from its scope. Choose another name.`;
422
458
  }
423
459
  /**
424
- * Why `value` can't be the default of `column` (its type, options and
425
- * bounds), or `undefined` when it can or is empty.
460
+ * Why `value` can't be the default of `column` (its type, options and bounds),
461
+ * or `undefined` when it can or is empty.
426
462
  */
427
463
  function defaultError(column, value) {
428
464
  const trimmed = value.trim();
@@ -473,8 +509,8 @@ function addTable(design, name, table = {}, position) {
473
509
  });
474
510
  }
475
511
  /**
476
- * Removes an app table, every app table column that references it (and
477
- * those columns from key sets), and the rollups and lookups that read it.
512
+ * Removes an app table, every app table column that references it (and those
513
+ * columns from key sets), and the rollups and lookups that read it.
478
514
  */
479
515
  function deleteTable(design, name) {
480
516
  const rest = omitKey(design.appTables, name);
@@ -534,8 +570,8 @@ function updateTable(design, name, patch) {
534
570
  });
535
571
  }
536
572
  /**
537
- * Sets an app table's id type and retypes the app table columns that
538
- * reference it, since a key has the type of the id it points at.
573
+ * Sets an app table's id type and retypes the app table columns that reference
574
+ * it, since a key has the type of the id it points at.
539
575
  */
540
576
  function setTableId(design, name, id) {
541
577
  const next = updateTable(design, name, { id: id === "uuid" ? void 0 : id });
@@ -544,7 +580,10 @@ function setTableId(design, name, id) {
544
580
  columns: Object.fromEntries(Object.entries(table.columns ?? {}).map(([column, config]) => [column, config.references?.block === void 0 && config.references?.table === name ? retyped(config, id) : config]))
545
581
  }])));
546
582
  }
547
- /** A table's composite key sets with `edit` applied to each, dropping empty sets and an empty list. */
583
+ /**
584
+ * A table's composite key sets with `edit` applied to each, dropping empty sets
585
+ * and an empty list.
586
+ */
548
587
  function withKeySets(table, edit) {
549
588
  const { unique, indexes, ...rest } = table;
550
589
  const sets = (list) => {
@@ -604,7 +643,10 @@ function deleteColumn(design, table, name) {
604
643
  }, (columns) => columns.filter((column) => column !== name))
605
644
  });
606
645
  }
607
- /** Sets an extra column on a block table (`blocks.<module>.options.extraColumns`). */
646
+ /**
647
+ * Sets an extra column on a block table
648
+ * (`blocks.<module>.options.extraColumns`).
649
+ */
608
650
  function setExtraColumn(design, module, name, type) {
609
651
  return {
610
652
  ...design,
@@ -682,8 +724,10 @@ function singular(name) {
682
724
  for (const [ending, replacement] of SINGULAR_ENDINGS) if (ending.test(name)) return name.replace(ending, replacement);
683
725
  return name;
684
726
  }
685
- const AUTH_USERS$1 = "auth.users";
686
- /** The column types a foreign key can point at, from the target's primary key type. */
727
+ /**
728
+ * The column types a foreign key can point at, from the target's primary key
729
+ * type.
730
+ */
687
731
  function referenceType(type) {
688
732
  const normal = type.toLowerCase();
689
733
  switch (normal) {
@@ -700,12 +744,11 @@ function referenceType(type) {
700
744
  }
701
745
  }
702
746
  /**
703
- * Adds a foreign key column from an app table to `target`. Only app tables
704
- * get new columns. A self reference gets `parent_id`, and a second
705
- * reference to the same table gets a role name (`owner_id`, `<target>_2_id`)
706
- * the user can rename. A target without a single-column primary key, and
707
- * the tenant table the scope column already references, are refused with a
708
- * message.
747
+ * Adds a foreign key column from an app table to `target`. Only app tables get
748
+ * new columns. A self reference gets `parent_id`, and a second reference to the
749
+ * same table gets a role name (`owner_id`, `<target>_2_id`) the user can
750
+ * rename. A target without a single-column primary key, and the tenant table
751
+ * the scope column already references, are refused with a message.
709
752
  */
710
753
  function connect(design, data, preset, connection) {
711
754
  const source = data.tables.find((table) => table.id === connection.source);
@@ -740,9 +783,9 @@ function referenceColumn(table, base, roles, preset) {
740
783
  ].find((candidate) => columnError(table, candidate, preset) === void 0);
741
784
  }
742
785
  /**
743
- * Adds a key to `targetId` on the app table `name` in the design, which can
744
- * be a table the schema doesn't have yet: `<target>_id`, `parent_id` for a
745
- * self reference, or a free role name when that column is taken.
786
+ * Adds a key to `targetId` on the app table `name` in the design, which can be
787
+ * a table the schema doesn't have yet: `<target>_id`, `parent_id` for a self
788
+ * reference, or a free role name when that column is taken.
746
789
  */
747
790
  function referenceFrom(design, data, preset, name, targetId) {
748
791
  const table = design.appTables?.[name];
@@ -750,8 +793,8 @@ function referenceFrom(design, data, preset, name, targetId) {
750
793
  ok: false,
751
794
  error: `${name} is not in the design.`
752
795
  };
753
- const target = targetId === AUTH_USERS$1 ? void 0 : data.tables.find((each) => each.id === targetId);
754
- if (targetId !== AUTH_USERS$1 && target === void 0) return {
796
+ const target = targetId === "auth.users" ? void 0 : data.tables.find((each) => each.id === targetId);
797
+ if (targetId !== "auth.users" && target === void 0) return {
755
798
  ok: false,
756
799
  error: "That table is not in the schema."
757
800
  };
@@ -786,114 +829,32 @@ function referenceFrom(design, data, preset, name, targetId) {
786
829
  })
787
830
  };
788
831
  }
832
+ function appColumn(name, column) {
833
+ const label = columnLabel(column);
834
+ const schemaColumn = {
835
+ name,
836
+ type: column.type,
837
+ nullable: column.identity === true ? false : column.nullable ?? true,
838
+ default: column.identity === true ? "identity" : column.default ?? null,
839
+ unique: column.unique ?? false
840
+ };
841
+ return label === void 0 ? schemaColumn : {
842
+ ...schemaColumn,
843
+ label
844
+ };
845
+ }
846
+ const TIMESTAMP = {
847
+ type: "timestamptz",
848
+ nullable: false,
849
+ default: "now()",
850
+ unique: false
851
+ };
789
852
  /**
790
- * What would stop `sql sync` from writing the design: a table name a block
791
- * already uses, a reference to a table the preset no longer installs, a
792
- * set-null delete on a required column, a composite key on a column the
793
- * table doesn't have, and extra columns for a block that is gone or no
794
- * longer takes them.
853
+ * The id of the table a reference points at, or `undefined` when it is not in
854
+ * the schema.
795
855
  */
796
- function designIssues(design, data, preset) {
797
- const issues = [];
798
- const names = new Set(data.tables.filter((table) => !isAppTable(table)).map((table) => table.name));
799
- const logical = new Set(Object.values(data.blockTables).map((each) => `${each.block}.${each.table}`));
800
- const modules = new Set(data.tables.filter((table) => data.extraColumns.includes(table.id)).map((table) => table.module));
801
- const subjectTypes = /* @__PURE__ */ new Map();
802
- for (const [name, table] of Object.entries(design.appTables ?? {})) {
803
- const type = table.subject?.type;
804
- if (type !== void 0 && !subjectTypes.has(type)) subjectTypes.set(type, name);
805
- }
806
- for (const [name, table] of Object.entries(design.appTables ?? {})) {
807
- const invalid = identifierError(name);
808
- if (invalid !== void 0) issues.push({
809
- table: name,
810
- message: `The name ${name} is invalid. ${invalid}`
811
- });
812
- if (names.has(name)) issues.push({
813
- table: name,
814
- message: `A block already creates a ${name} table. Rename this one.`
815
- });
816
- const long = appNameLengthError(name, table);
817
- if (long !== void 0) issues.push({
818
- table: name,
819
- message: `${long}.`
820
- });
821
- const type = table.subject?.type;
822
- if (type !== void 0 && subjectTypes.get(type) !== name) issues.push({
823
- table: name,
824
- message: `${subjectTypes.get(type)} already has the subject type ${type}. Choose another.`
825
- });
826
- for (const [column, config] of Object.entries(table.columns ?? {})) {
827
- const fallback = config.default === void 0 ? void 0 : defaultError(config, config.default);
828
- if (fallback !== void 0) issues.push({
829
- table: name,
830
- message: `${name}.${column}: ${fallback}`
831
- });
832
- if (lockedWithoutDefault(config)) issues.push({
833
- table: name,
834
- message: `${name}.${column} is required, and signed-in users can't write it, so give it a default.`
835
- });
836
- }
837
- for (const column of subjectColumns(table.subject)) if (Object.hasOwn(table.columns ?? {}, column.name)) issues.push({
838
- table: name,
839
- message: `${name}.${column.name} clashes with the column its record features add. Rename it.`
840
- });
841
- const known = /* @__PURE__ */ new Set([
842
- "id",
843
- ...Object.keys(table.columns ?? {}),
844
- ...table.timestamps === false ? [] : ["created_at", "updated_at"]
845
- ]);
846
- const scope = scopeColumnOf(table, preset);
847
- if (scope !== null) known.add(scope.name);
848
- for (const [key, sets] of [["unique key", table.unique], ["index", table.indexes]]) for (const columns of sets ?? []) {
849
- const gone = columns.filter((column) => !known.has(column));
850
- if (gone.length > 0) issues.push({
851
- table: name,
852
- message: `The ${key} on ${columns.join(", ")} names ${gone.join(", ")}, which ${name} doesn't have.`
853
- });
854
- }
855
- for (const [column, config] of Object.entries(table.columns ?? {})) {
856
- const reference = config.references;
857
- if (reference === void 0) continue;
858
- if (reference.block === void 0 ? reference.table !== AUTH_USERS$1 && design.appTables?.[reference.table] === void 0 : !logical.has(`${reference.block}.${reference.table}`)) issues.push({
859
- table: name,
860
- message: `${name}.${column} references ${reference.block === void 0 ? reference.table : `${reference.block}.${reference.table}`}, which the preset does not install.`
861
- });
862
- if (reference.onDelete === "set null" && config.nullable === false) issues.push({
863
- table: name,
864
- message: `${name}.${column} is required, so deleting the row it references can't set it to null.`
865
- });
866
- }
867
- }
868
- for (const block of Object.keys(design.extraColumns ?? {})) if (!modules.has(block)) issues.push({
869
- table: block,
870
- message: `The extra columns for ${block} have no table: the block is not installed or takes no extra columns.`
871
- });
872
- return issues;
873
- }
874
- function appColumn(name, column) {
875
- const label = columnLabel(column);
876
- const schemaColumn = {
877
- name,
878
- type: column.type,
879
- nullable: column.identity === true ? false : column.nullable ?? true,
880
- default: column.identity === true ? "identity" : column.default ?? null,
881
- unique: column.unique ?? false
882
- };
883
- return label === void 0 ? schemaColumn : {
884
- ...schemaColumn,
885
- label
886
- };
887
- }
888
- const TIMESTAMP = {
889
- type: "timestamptz",
890
- nullable: false,
891
- default: "now()",
892
- unique: false
893
- };
894
- /** The id of the table a reference points at, or `undefined` when it is not in the schema. */
895
856
  function referencedId(reference, data) {
896
- if (reference.block === void 0) return reference.table === AUTH_USERS$1 ? AUTH_USERS$1 : appTableId(reference.table);
857
+ if (reference.block === void 0) return reference.table === "auth.users" ? AUTH_USERS$1 : appTableId(reference.table);
897
858
  return Object.entries(data.blockTables).find(([, each]) => each.block === reference.block && each.table === reference.table)?.[0];
898
859
  }
899
860
  function foreignKey(column, to, onDelete = "no action") {
@@ -963,8 +924,8 @@ function extraColumnsOf(design, table, data) {
963
924
  return data.extraColumns.includes(table.id) ? design.extraColumns?.[table.module] ?? {} : {};
964
925
  }
965
926
  /**
966
- * The schema with the design applied: app tables added, extra columns
967
- * appended to the block tables that accept them.
927
+ * The schema with the design applied: app tables added, extra columns appended
928
+ * to the block tables that accept them.
968
929
  */
969
930
  function withDesign(data, design, preset) {
970
931
  const tables = data.tables.map((table) => {
@@ -993,1030 +954,1289 @@ function withDesign(data, design, preset) {
993
954
  };
994
955
  }
995
956
  //#endregion
996
- //#region src/create/column-kinds.ts
997
- /** The groups of the column type picker, in the order it shows them. */
998
- const KIND_GROUPS = [
999
- "Text",
1000
- "Number",
1001
- "Date and time",
1002
- "Choice",
1003
- "Relation",
1004
- "Other"
1005
- ];
1006
- const USERS$1 = "auth.users";
1007
- /** The first options a new select gets, for the user to rename. */
1008
- const STARTER_OPTIONS = ["Option A", "Option B"];
1009
- const COLUMN_KINDS = [
1010
- {
1011
- id: "text",
1012
- label: "Text",
1013
- group: "Text",
1014
- short: "text",
1015
- column: { type: "text" }
1016
- },
1017
- {
1018
- id: "long_text",
1019
- label: "Long text",
1020
- group: "Text",
1021
- short: "long text",
1022
- column: {
1023
- type: "text",
1024
- format: "long_text"
1025
- }
1026
- },
1027
- {
1028
- id: "email",
1029
- label: "Email",
1030
- group: "Text",
1031
- short: "email",
1032
- column: {
1033
- type: "text",
1034
- format: "email"
1035
- }
1036
- },
1037
- {
1038
- id: "url",
1039
- label: "URL",
1040
- group: "Text",
1041
- short: "url",
1042
- column: {
1043
- type: "text",
1044
- format: "url"
957
+ //#region src/create/design-issues.ts
958
+ /**
959
+ * What would stop `sql sync` from writing the design: a table name a block
960
+ * already uses, a reference to a table the preset no longer installs, a
961
+ * set-null delete on a required column, a composite key on a column the table
962
+ * doesn't have, and extra columns for a block that is gone or no longer takes
963
+ * them.
964
+ */
965
+ function designIssues(design, data, preset) {
966
+ const issues = [];
967
+ const names = new Set(data.tables.filter((table) => !isAppTable(table)).map((table) => table.name));
968
+ const logical = new Set(Object.values(data.blockTables).map((each) => `${each.block}.${each.table}`));
969
+ const modules = new Set(data.tables.filter((table) => data.extraColumns.includes(table.id)).map((table) => table.module));
970
+ const subjectTypes = /* @__PURE__ */ new Map();
971
+ for (const [name, table] of Object.entries(design.appTables ?? {})) {
972
+ const type = table.subject?.type;
973
+ if (type !== void 0 && !subjectTypes.has(type)) subjectTypes.set(type, name);
974
+ }
975
+ for (const [name, table] of Object.entries(design.appTables ?? {})) {
976
+ const invalid = identifierError(name);
977
+ if (invalid !== void 0) issues.push({
978
+ code: "invalid_name",
979
+ path: jsonPointer("appTables", name),
980
+ table: name,
981
+ message: `The name ${name} is invalid. ${invalid}`
982
+ });
983
+ if (names.has(name)) issues.push({
984
+ code: "table_name_taken",
985
+ path: jsonPointer("appTables", name),
986
+ table: name,
987
+ message: `A block already creates a ${name} table. Rename this one.`
988
+ });
989
+ const long = appNameLengthError(name, table);
990
+ if (long !== void 0) issues.push({
991
+ code: "name_too_long",
992
+ path: jsonPointer("appTables", name),
993
+ table: name,
994
+ message: `${long}.`
995
+ });
996
+ const type = table.subject?.type;
997
+ if (type !== void 0 && subjectTypes.get(type) !== name) issues.push({
998
+ code: "subject_type_taken",
999
+ path: jsonPointer("appTables", name, "subject", "type"),
1000
+ table: name,
1001
+ message: `${subjectTypes.get(type)} already has the subject type ${type}. Choose another.`
1002
+ });
1003
+ for (const [column, config] of Object.entries(table.columns ?? {})) {
1004
+ const fallback = config.default === void 0 ? void 0 : defaultError(config, config.default);
1005
+ if (fallback !== void 0) issues.push({
1006
+ code: "invalid_default",
1007
+ path: jsonPointer("appTables", name, "columns", column, "default"),
1008
+ table: name,
1009
+ message: `${name}.${column}: ${fallback}`
1010
+ });
1011
+ if (lockedWithoutDefault(config)) issues.push({
1012
+ code: "default_required",
1013
+ path: jsonPointer("appTables", name, "columns", column),
1014
+ table: name,
1015
+ message: `${name}.${column} is required, and signed-in users can't write it, so give it a default.`
1016
+ });
1045
1017
  }
1046
- },
1047
- {
1048
- id: "phone",
1049
- label: "Phone",
1050
- group: "Text",
1051
- short: "phone",
1052
- column: {
1053
- type: "text",
1054
- format: "phone"
1018
+ for (const column of subjectColumns(table.subject)) if (Object.hasOwn(table.columns ?? {}, column.name)) issues.push({
1019
+ code: "column_clash",
1020
+ path: jsonPointer("appTables", name, "columns", column.name),
1021
+ table: name,
1022
+ message: `${name}.${column.name} clashes with the column its record features add. Rename it.`
1023
+ });
1024
+ const known = /* @__PURE__ */ new Set([
1025
+ "id",
1026
+ ...Object.keys(table.columns ?? {}),
1027
+ ...table.timestamps === false ? [] : ["created_at", "updated_at"]
1028
+ ]);
1029
+ const scope = scopeColumnOf(table, preset);
1030
+ if (scope !== null) known.add(scope.name);
1031
+ for (const [key, field, sets] of [[
1032
+ "unique key",
1033
+ "unique",
1034
+ table.unique
1035
+ ], [
1036
+ "index",
1037
+ "indexes",
1038
+ table.indexes
1039
+ ]]) for (const [index, columns] of (sets ?? []).entries()) {
1040
+ const gone = columns.filter((column) => !known.has(column));
1041
+ if (gone.length > 0) issues.push({
1042
+ code: "unknown_column",
1043
+ path: jsonPointer("appTables", name, field, index),
1044
+ table: name,
1045
+ message: `The ${key} on ${columns.join(", ")} names ${gone.join(", ")}, which ${name} doesn't have.`
1046
+ });
1055
1047
  }
1056
- },
1057
- {
1058
- id: "color",
1059
- label: "Color",
1060
- group: "Text",
1061
- short: "color",
1062
- column: {
1063
- type: "text",
1064
- format: "color"
1048
+ for (const [column, config] of Object.entries(table.columns ?? {})) {
1049
+ const reference = config.references;
1050
+ if (reference === void 0) continue;
1051
+ if (reference.block === void 0 ? reference.table !== "auth.users" && design.appTables?.[reference.table] === void 0 : !logical.has(`${reference.block}.${reference.table}`)) issues.push({
1052
+ code: "missing_reference",
1053
+ path: jsonPointer("appTables", name, "columns", column, "references"),
1054
+ table: name,
1055
+ message: `${name}.${column} references ${reference.block === void 0 ? reference.table : `${reference.block}.${reference.table}`}, which the preset does not install.`
1056
+ });
1057
+ if (reference.onDelete === "set null" && config.nullable === false) issues.push({
1058
+ code: "set_null_required",
1059
+ path: jsonPointer("appTables", name, "columns", column, "references", "onDelete"),
1060
+ table: name,
1061
+ message: `${name}.${column} is required, so deleting the row it references can't set it to null.`
1062
+ });
1065
1063
  }
1066
- },
1067
- {
1068
- id: "integer",
1069
- label: "Whole number",
1070
- group: "Number",
1071
- short: "integer",
1072
- column: { type: "integer" }
1073
- },
1074
- {
1075
- id: "bigint",
1076
- label: "Large whole number",
1077
- group: "Number",
1078
- short: "bigint",
1079
- column: { type: "bigint" }
1080
- },
1081
- {
1082
- id: "numeric",
1083
- label: "Decimal",
1084
- group: "Number",
1085
- short: "numeric",
1086
- column: { type: "numeric" }
1087
- },
1088
- {
1089
- id: "rating",
1090
- label: "Rating",
1091
- group: "Number",
1092
- short: "rating",
1093
- column: {
1094
- type: "integer",
1095
- format: "rating"
1064
+ }
1065
+ for (const block of Object.keys(design.extraColumns ?? {})) if (!modules.has(block)) issues.push({
1066
+ code: "block_not_installed",
1067
+ path: jsonPointer("extraColumns", block),
1068
+ table: block,
1069
+ message: `The extra columns for ${block} have no table: the block is not installed or takes no extra columns.`
1070
+ });
1071
+ return issues;
1072
+ }
1073
+ //#endregion
1074
+ //#region src/create/preview-provider.ts
1075
+ /**
1076
+ * A stand-in for the app's authorization provider, so `/create` can render the
1077
+ * SQL and the diagram for `access: "provider"`. Its templates call functions in
1078
+ * a `provider` schema that no real project has: the preview says so next to the
1079
+ * output.
1080
+ */
1081
+ function previewAccessProvider(preset) {
1082
+ return {
1083
+ name: "your authorization provider",
1084
+ scope: preset.tenantName,
1085
+ idType: preset.idType,
1086
+ functions: {
1087
+ idsWith: "provider.ids_with('{scope}', {permission})",
1088
+ idsWithFor: "provider.ids_with_for({user}, '{scope}', {permission})",
1089
+ isPlatform: "provider.is_platform({permission})",
1090
+ isPlatformFor: "provider.is_platform_for({user}, {permission})",
1091
+ memberIds: "provider.member_ids('{scope}')",
1092
+ memberIdsFor: "provider.member_ids_for({user}, '{scope}')"
1096
1093
  }
1097
- },
1098
- {
1099
- id: "percent",
1100
- label: "Percent",
1101
- group: "Number",
1102
- short: "percent",
1103
- column: {
1104
- type: "numeric",
1105
- format: "percent"
1106
- }
1107
- },
1108
- {
1109
- id: "currency",
1110
- label: "Currency",
1111
- group: "Number",
1112
- short: "money",
1113
- column: {
1114
- type: "bigint",
1115
- format: "currency"
1116
- }
1117
- },
1118
- {
1119
- id: "autonumber",
1120
- label: "Autonumber",
1121
- group: "Number",
1122
- short: "autonumber",
1123
- column: {
1124
- type: "bigint",
1125
- identity: true
1126
- }
1127
- },
1128
- {
1129
- id: "date",
1130
- label: "Date",
1131
- group: "Date and time",
1132
- short: "date",
1133
- column: { type: "date" }
1134
- },
1135
- {
1136
- id: "timestamptz",
1137
- label: "Date and time",
1138
- group: "Date and time",
1139
- short: "timestamptz",
1140
- column: { type: "timestamptz" }
1141
- },
1142
- {
1143
- id: "boolean",
1144
- label: "Yes or no",
1145
- group: "Choice",
1146
- short: "boolean",
1147
- column: { type: "boolean" }
1148
- },
1149
- {
1150
- id: "single_select",
1151
- label: "Single select",
1152
- group: "Choice",
1153
- short: "select",
1154
- column: {
1155
- type: "text",
1156
- options: STARTER_OPTIONS
1157
- }
1158
- },
1159
- {
1160
- id: "multi_select",
1161
- label: "Multi-select",
1162
- group: "Choice",
1163
- short: "multi-select",
1164
- column: {
1165
- type: "text[]",
1166
- options: STARTER_OPTIONS
1167
- }
1168
- },
1169
- {
1170
- id: "person",
1171
- label: "Person",
1172
- group: "Relation",
1173
- short: "person",
1174
- column: {
1175
- type: "uuid",
1176
- nullable: true,
1177
- references: {
1178
- table: USERS$1,
1179
- onDelete: "set null"
1180
- }
1181
- }
1182
- },
1183
- {
1184
- id: "reference",
1185
- label: "Link to a table",
1186
- group: "Relation",
1187
- short: "link",
1188
- column: { type: "uuid" },
1189
- drawn: true
1190
- },
1191
- {
1192
- id: "uuid",
1193
- label: "UUID",
1194
- group: "Other",
1195
- short: "uuid",
1196
- column: { type: "uuid" }
1197
- },
1198
- {
1199
- id: "jsonb",
1200
- label: "JSON",
1201
- group: "Other",
1202
- short: "jsonb",
1203
- column: { type: "jsonb" }
1204
- },
1205
- {
1206
- id: "text_list",
1207
- label: "List of text",
1208
- group: "Other",
1209
- short: "text[]",
1210
- column: { type: "text[]" }
1211
- }
1212
- ];
1213
- const BY_ID = new Map(COLUMN_KINDS.map((kind) => [kind.id, kind]));
1214
- const BY_FORMAT = new Map(COLUMN_KINDS.filter((kind) => kind.column.format !== void 0).map((kind) => [kind.column.format, kind]));
1215
- const PLAIN = {
1216
- text: "text",
1217
- uuid: "uuid",
1218
- integer: "integer",
1219
- bigint: "bigint",
1220
- numeric: "numeric",
1221
- boolean: "boolean",
1222
- timestamptz: "timestamptz",
1223
- date: "date",
1224
- jsonb: "jsonb",
1225
- "text[]": "text_list"
1226
- };
1227
- function kindById(id) {
1228
- return BY_ID.get(id);
1229
- }
1230
- /** The kind a column's identity, reference or options make it, before its format and type. */
1231
- function structuralKind(column) {
1232
- if (column.identity === true) return "autonumber";
1233
- if (column.references !== void 0) return column.references.block === void 0 && column.references.table === USERS$1 ? "person" : "reference";
1234
- if (column.options === void 0) return;
1235
- return column.type === "text[]" ? "multi_select" : "single_select";
1236
- }
1237
- /** The picker choice a column reads as. */
1238
- function kindOf(column) {
1239
- const id = structuralKind(column);
1240
- return (id === void 0 ? void 0 : BY_ID.get(id)) ?? (column.format === void 0 ? void 0 : BY_FORMAT.get(column.format)) ?? BY_ID.get(PLAIN[column.type]);
1241
- }
1242
- /**
1243
- * `column` as `kind`: the kind's keys, with the column's name-independent
1244
- * settings (required, unique, comment, a default and bounds that still fit)
1245
- * kept, and a select's options kept when it turns into the other select.
1246
- */
1247
- function withKind(column, kind) {
1248
- const { format: _format, options, identity: _identity, references: _references, min, max, ...rest } = column;
1249
- const kept = kind.column.options === void 0 || options === void 0 ? kind.column : {
1250
- ...kind.column,
1251
- options
1252
- };
1253
- return fitted(withBounds({
1254
- ...rest,
1255
- ...kept
1256
- }, column.type === kind.column.type ? {
1257
- min,
1258
- max
1259
- } : {}));
1260
- }
1261
- /** The money columns of `name`: `<stem>_minor` and `<stem>_currency`. */
1262
- function moneyColumns(name) {
1263
- const stem = name.replace(/_minor$/u, "");
1264
- return {
1265
- minor: `${stem}_minor`,
1266
- currency: `${stem}_currency`
1267
1094
  };
1268
1095
  }
1269
1096
  /**
1270
- * Sets an app table column to `kind`. Currency keeps money as two columns:
1271
- * the column becomes `<name>_minor` (unless the name is taken) and a
1272
- * `<name>_currency` text column of 3 characters joins it. Returns the
1273
- * column's name after the change.
1097
+ * The files `sql sync` writes for a config with only this preset and its
1098
+ * `/create` design (app tables and extra columns). With `access: "provider"`
1099
+ * the access functions come from `previewAccessProvider`.
1274
1100
  */
1275
- function setColumnKind(design, table, name, kind) {
1276
- const columns = design.appTables?.[table]?.columns ?? {};
1277
- const column = columns[name];
1278
- if (column === void 0) return {
1279
- design,
1280
- name
1281
- };
1282
- const next = withKind(column, kind);
1283
- if (kind.id !== "currency") return {
1284
- design: setColumn(design, table, name, next),
1285
- name
1286
- };
1287
- const { minor, currency } = moneyColumns(name);
1288
- const renamed = minor === name || columns[minor] === void 0 ? minor : name;
1289
- const moved = setColumn(renameColumn(design, table, name, renamed), table, renamed, next);
1290
- if (columns[currency] !== void 0) return {
1291
- design: moved,
1292
- name: renamed
1293
- };
1294
- return {
1295
- design: setColumn(moved, table, currency, next.nullable === false ? {
1296
- type: "text",
1297
- nullable: false,
1298
- min: 3,
1299
- max: 3
1300
- } : {
1301
- type: "text",
1302
- min: 3,
1303
- max: 3
1304
- }),
1305
- name: renamed
1306
- };
1101
+ function previewFiles(code, design = {}) {
1102
+ const preset = presetOf(code);
1103
+ const config = resolveConfig(Object.keys(design).length === 0 ? { preset: code } : designConfig(resolvePreset(preset), design), "/");
1104
+ const provider = preset.access === "provider" ? previewAccessProvider(preset) : void 0;
1105
+ return renderModules(config.blockNames, moduleLayout(config, config.sql.testsDir, [], void 0, provider)).map((file) => ({
1106
+ path: file.path,
1107
+ module: file.module,
1108
+ contents: file.contents
1109
+ }));
1307
1110
  }
1308
1111
  //#endregion
1309
- //#region src/create/deploy.ts
1310
- /** The name the deploy gives its migration in `supabase_migrations`. */
1311
- const MIGRATION_NAME = "better_supabase_blocks";
1112
+ //#region src/create/schema-meta.ts
1113
+ const AUTH_USERS = "auth.users";
1312
1114
  /**
1313
- * Why this preset can't be deployed, or `undefined` when it can. With
1314
- * `access: "provider"` the preview renders a stand-in provider whose
1315
- * functions no real project has.
1115
+ * The tenant name the module defaults use, which a preset's tenant name
1116
+ * replaces.
1316
1117
  */
1317
- function deployBlocker(preset) {
1318
- return preset.access === "provider" ? "Bring your own authorization provider: its SQL comes from the provider, so deploy it with the CLI." : void 0;
1118
+ const DEFAULT_TENANT = "organization";
1119
+ /**
1120
+ * Finds the parsed table for a module's logical table by its default name, or
1121
+ * by that name with the tenant renamed (`organizations` is `workspaces` for the
1122
+ * `workspace` tenant).
1123
+ */
1124
+ function indexTables(tables, tenantName) {
1125
+ const byName = new Map(tables.map((table) => [`${table.module}:${table.name}`, table]));
1126
+ return (module, name) => byName.get(`${module}:${name}`) ?? byName.get(`${module}:${name.replaceAll(DEFAULT_TENANT, tenantName)}`);
1127
+ }
1128
+ function moduleTables(module) {
1129
+ return Object.entries(SQL_MODULES[module]?.names?.tables ?? {});
1319
1130
  }
1320
1131
  /**
1321
- * The SQL of one migration for the rendered files: every schema file, then
1322
- * every data file, each in render order, which is the order `sql sync` and
1323
- * `sql data` apply them. pgTAP tests stay out.
1132
+ * The table the tenant columns point at: the target most foreign keys on a
1133
+ * tenant column share. `null` when no table has a tenant foreign key.
1324
1134
  */
1325
- function deployQuery(files) {
1326
- const schema = files.filter((file) => file.path.includes("/schemas/"));
1327
- const data = files.filter((file) => file.path.includes("/better-supabase-data/"));
1328
- return [...schema, ...data].map((file) => `-- ${file.path}\n${file.contents.trim()}\n`).join("\n");
1135
+ function tenantTable(tables) {
1136
+ const counts = /* @__PURE__ */ new Map();
1137
+ for (const table of tables) for (const key of table.foreignKeys) if (table.tenantColumn !== null && key.columns.length === 1 && key.columns[0] === table.tenantColumn) {
1138
+ const to = `${key.target.schema}.${key.target.table}`;
1139
+ counts.set(to, (counts.get(to) ?? 0) + 1);
1140
+ }
1141
+ let best = null;
1142
+ let most = 0;
1143
+ for (const [id, count] of counts) if (count > most) {
1144
+ best = id;
1145
+ most = count;
1146
+ }
1147
+ return best;
1329
1148
  }
1330
- /** A database password for a new project: 32 base64url characters. */
1331
- function generatePassword() {
1332
- const bytes = crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(24));
1333
- let binary = "";
1334
- for (const byte of bytes) binary += String.fromCodePoint(byte);
1335
- return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/u, "");
1149
+ /**
1150
+ * The physical column a logical lifecycle column maps to. A tenant name renames
1151
+ * `organization_id`, so a default name the table lacks falls back to the
1152
+ * table's tenant column.
1153
+ */
1154
+ function physicalColumn(table, name, tenant) {
1155
+ if (name === void 0) return;
1156
+ if (table.columns.some((column) => column.name === name)) return name;
1157
+ return tenant && table.tenantColumn !== null ? table.tenantColumn : void 0;
1336
1158
  }
1337
- /** The project name the dialog suggests: the preset's name, or `my-app`. */
1338
- function suggestedProjectName(named) {
1339
- return named === void 0 ? "my-app" : `my-${named}-app`;
1340
- }
1341
- const DASHBOARD = "https://supabase.com/dashboard";
1342
- function dashboardUrl(ref, page = "") {
1343
- return `${DASHBOARD}/project/${encodeURIComponent(ref)}${page}`;
1344
- }
1345
- //#endregion
1346
- //#region src/create/design-history.ts
1347
- /** How many steps Undo can go back. */
1348
- const HISTORY_LIMIT = 50;
1349
- function initialHistory(value) {
1350
- return {
1351
- past: [],
1352
- present: value,
1353
- future: [],
1354
- dragStart: null
1355
- };
1356
- }
1357
- function record(history, previous, next) {
1358
- return {
1359
- past: [...history.past, previous].slice(-50),
1360
- present: next,
1361
- future: [],
1362
- dragStart: null
1363
- };
1159
+ function hasForeignKey(table, column) {
1160
+ return table.foreignKeys.some((key) => key.columns.length === 1 && key.columns[0] === column);
1364
1161
  }
1365
1162
  /**
1366
- * An undo history. `drag` updates the value without a step while the
1367
- * pointer moves; `commitDrag` records the whole drag as one step. `amend`
1368
- * replaces the value in the current step, so a follow-up such as placing a
1369
- * dropped block stays part of the step that added it. `reset` replaces the
1370
- * value and clears the history, as loading a link does.
1163
+ * The soft references in the tables: lifecycle tenant and user columns without
1164
+ * a foreign key, and `regclass` columns, which name any table.
1371
1165
  */
1372
- function undoHistory(current, action) {
1373
- switch (action.type) {
1374
- case "apply": return action.value === current.present ? current : record(current, current.dragStart ?? current.present, action.value);
1375
- case "drag": return {
1376
- ...current,
1377
- present: action.value,
1378
- dragStart: current.dragStart ?? current.present
1379
- };
1380
- case "commitDrag": return current.dragStart === null ? current : record(current, current.dragStart, current.present);
1381
- case "amend": return {
1382
- ...current,
1383
- present: action.value
1384
- };
1385
- case "undo": {
1386
- const previous = current.past.at(-1);
1387
- return previous === void 0 ? current : {
1388
- past: current.past.slice(0, -1),
1389
- present: previous,
1390
- future: [current.present, ...current.future],
1391
- dragStart: null
1392
- };
1393
- }
1394
- case "redo": {
1395
- const [next, ...future] = current.future;
1396
- return next === void 0 ? current : {
1397
- past: [...current.past, current.present].slice(-50),
1398
- present: next,
1399
- future,
1400
- dragStart: null
1401
- };
1166
+ function softReferences(tables, tenantName = DEFAULT_TENANT) {
1167
+ const lookup = indexTables(tables, tenantName);
1168
+ const tenantTo = tenantTable(tables);
1169
+ const refs = [];
1170
+ const seen = /* @__PURE__ */ new Set();
1171
+ const add = (ref) => {
1172
+ const key = `${ref.from}.${ref.column}`;
1173
+ if (!seen.has(key)) {
1174
+ seen.add(key);
1175
+ refs.push(ref);
1402
1176
  }
1403
- case "reset": return initialHistory(action.value);
1404
- default: return action;
1177
+ };
1178
+ for (const block of new Set(tables.map((table) => table.module))) for (const [, spec] of moduleTables(block)) {
1179
+ const table = lookup(block, spec.name);
1180
+ const lifecycle = spec.lifecycle;
1181
+ if (table === void 0 || lifecycle === void 0) continue;
1182
+ const tenant = physicalColumn(table, lifecycle.tenant === void 0 ? void 0 : spec.columns[lifecycle.tenant], true);
1183
+ if (tenant !== void 0 && tenantTo !== null && tenantTo !== table.id && !hasForeignKey(table, tenant)) add({
1184
+ from: table.id,
1185
+ column: tenant,
1186
+ to: tenantTo,
1187
+ kind: "tenant"
1188
+ });
1189
+ const user = physicalColumn(table, lifecycle.user === void 0 ? void 0 : spec.columns[lifecycle.user], false);
1190
+ if (user !== void 0 && !hasForeignKey(table, user)) add({
1191
+ from: table.id,
1192
+ column: user,
1193
+ to: AUTH_USERS,
1194
+ kind: "user"
1195
+ });
1405
1196
  }
1197
+ for (const table of tables) for (const column of table.columns) if (column.type.toLowerCase() === "regclass") add({
1198
+ from: table.id,
1199
+ column: column.name,
1200
+ to: null,
1201
+ kind: "any"
1202
+ });
1203
+ return refs;
1204
+ }
1205
+ const MANIFEST_BY_MODULE = new Map(PRESET_CATALOG.blocks.map((block) => [block.name, block.manifest]));
1206
+ const EXTRA_TABLE_BY_MODULE = new Map(PRESET_CATALOG.blocks.flatMap((block) => block.extraColumns === void 0 ? [] : [[block.name, block.extraColumns]]));
1207
+ /** Each table's module and logical table name. */
1208
+ function blockTables(tables, lookup) {
1209
+ return Object.fromEntries(tables.flatMap((table) => {
1210
+ const logical = moduleTables(table.module).find(([, spec]) => lookup(table.module, spec.name) === table)?.[0];
1211
+ return logical === void 0 ? [] : [[table.id, {
1212
+ block: table.module,
1213
+ table: logical
1214
+ }]];
1215
+ }));
1216
+ }
1217
+ /** The table ids `blocks.<module>.options.extraColumns` adds columns to. */
1218
+ function extraColumnTables(tables, lookup) {
1219
+ const installed = new Set(tables.map((table) => table.module));
1220
+ return [...EXTRA_TABLE_BY_MODULE].flatMap(([module, logical]) => {
1221
+ const spec = SQL_MODULES[module]?.names?.tables[logical];
1222
+ const table = !installed.has(module) || spec === void 0 ? void 0 : lookup(module, spec.name);
1223
+ return table === void 0 ? [] : [table.id];
1224
+ });
1406
1225
  }
1407
- //#endregion
1408
- //#region src/create/preview-provider.ts
1409
1226
  /**
1410
- * A stand-in for the app's authorization provider, so `/create` can render
1411
- * the SQL and the diagram for `access: "provider"`. Its templates call
1412
- * functions in a `provider` schema that no real project has: the preview
1413
- * says so next to the output.
1227
+ * The tables plus the soft references, manifests and extra-column tables the
1228
+ * canvas draws.
1414
1229
  */
1415
- function previewAccessProvider(preset) {
1230
+ function schemaData(tables, tenantName = DEFAULT_TENANT) {
1231
+ const lookup = indexTables(tables, tenantName);
1416
1232
  return {
1417
- name: "your authorization provider",
1418
- scope: preset.tenantName,
1419
- idType: preset.idType,
1420
- functions: {
1421
- idsWith: "provider.ids_with('{scope}', {permission})",
1422
- idsWithFor: "provider.ids_with_for({user}, '{scope}', {permission})",
1423
- isPlatform: "provider.is_platform({permission})",
1424
- isPlatformFor: "provider.is_platform_for({user}, {permission})",
1425
- memberIds: "provider.member_ids('{scope}')",
1426
- memberIdsFor: "provider.member_ids_for({user}, '{scope}')"
1427
- }
1233
+ tables,
1234
+ softRefs: softReferences(tables, tenantName),
1235
+ manifests: Object.fromEntries(tables.map((table) => [table.id, MANIFEST_BY_MODULE.get(table.module) ?? table.module])),
1236
+ extraColumns: extraColumnTables(tables, lookup),
1237
+ blockTables: blockTables(tables, lookup),
1238
+ tenantTable: tenantTable(tables)
1428
1239
  };
1429
1240
  }
1241
+ //#endregion
1242
+ //#region src/create/schema.ts
1430
1243
  /**
1431
- * The files `sql sync` writes for a config with only this preset and its
1432
- * `/create` design (app tables and extra columns). With
1433
- * `access: "provider"` the access functions come from
1434
- * `previewAccessProvider`.
1244
+ * The columns a diagram shows before a table is expanded: keys, tenant and soft
1245
+ * references.
1435
1246
  */
1436
- function previewFiles(code, design = {}) {
1437
- const preset = presetOf(code);
1438
- const config = resolveConfig(Object.keys(design).length === 0 ? { preset: code } : designConfig(resolvePreset(preset), design), "/");
1439
- const provider = preset.access === "provider" ? previewAccessProvider(preset) : void 0;
1440
- return renderModules(config.blockNames, moduleLayout(config, config.sql.testsDir, [], void 0, provider)).map((file) => ({
1441
- path: file.path,
1442
- module: file.module,
1443
- contents: file.contents
1444
- }));
1445
- }
1446
- //#endregion
1447
- //#region src/create/sample-rows.ts
1448
- const SAMPLE_ROW_COUNT = 8;
1449
- /** The columns of `table` a `viewer` can't select: `access: "server"` ones for a member. */
1450
- function hiddenColumns(table, viewer) {
1451
- if (viewer === "server") return [];
1452
- return Object.entries(table?.columns ?? {}).filter(([, column]) => column.access === "server").map(([key]) => key);
1453
- }
1454
- const USERS = "auth.users";
1455
- const PEOPLE = [
1456
- "Ada Lovelace",
1457
- "Grace Hopper",
1458
- "Alan Turing",
1459
- "Katherine Johnson",
1460
- "Edsger Dijkstra",
1461
- "Barbara Liskov",
1462
- "Donald Knuth",
1463
- "Frances Allen"
1464
- ];
1465
- const SENTENCES = [
1466
- "A short note that explains the row.",
1467
- "Longer text, such as a description or the body of a post.",
1468
- "Written by the team and edited later.",
1469
- "Kept for reference."
1470
- ];
1471
- const COLORS = [
1472
- "#2563eb",
1473
- "#16a34a",
1474
- "#d97706",
1475
- "#dc2626",
1476
- "#7c3aed"
1477
- ];
1478
- const TITLE_COLUMNS = [
1479
- "name",
1480
- "title",
1481
- "label",
1482
- "subject"
1483
- ];
1484
- function capitalized(value) {
1485
- return `${value.charAt(0).toUpperCase()}${value.slice(1)}`.replaceAll("_", " ");
1486
- }
1487
- /** The column a table's rows are named by: its subject title, then a likely name column. */
1488
- function titleColumnOf(table) {
1489
- const text = new Set(Object.entries(table.columns ?? {}).filter(([, column]) => column.type === "text" && column.format === void 0).map(([key]) => key));
1490
- return table.subject?.title ?? TITLE_COLUMNS.find((key) => text.has(key));
1247
+ function keyColumnsOf(table, softColumns = /* @__PURE__ */ new Set()) {
1248
+ const keys = /* @__PURE__ */ new Set([
1249
+ ...table.primaryKey,
1250
+ ...table.foreignKeys.flatMap((key) => key.columns),
1251
+ ...table.tenantColumn === null ? [] : [table.tenantColumn],
1252
+ ...softColumns
1253
+ ]);
1254
+ return table.columns.filter((column) => keys.has(column.name));
1491
1255
  }
1492
- /** The name of row `index` of `table`, so a reference shows the row it points at. */
1493
- function rowTitle(table, index) {
1494
- return `${capitalized(singular(table))} ${String(index + 1)}`;
1256
+ /**
1257
+ * The column the tenant blocks key rows by, from the preset's tenant name;
1258
+ * `null` without tenants.
1259
+ */
1260
+ function tenantColumnOf(preset) {
1261
+ return preset.scope === "tenant" ? `${preset.tenantName}_id` : null;
1495
1262
  }
1496
- function pad(value) {
1497
- return String(value).padStart(2, "0");
1263
+ /**
1264
+ * Every module's file creates this table to record the installed modules. It
1265
+ * holds no app data, so the diagram leaves it out.
1266
+ */
1267
+ const BOOKKEEPING_TABLES = /* @__PURE__ */ new Set(["better_supabase.modules"]);
1268
+ const IDENT = String.raw`(?:"(?:[^"]|"")+"|[A-Za-z_][A-Za-z0-9_$]*)`;
1269
+ const QNAME = String.raw`${IDENT}(?:\s*\.\s*${IDENT})?`;
1270
+ const CREATE_TABLE = /\bcreate\s+(?:(?:global\s+|local\s+)?(?:temp|temporary)\s+|unlogged\s+)?table\b/giu;
1271
+ const CREATE_HEAD = new RegExp(String.raw`^create\s+(?:(?:global\s+|local\s+)?(?:temp|temporary)\s+|unlogged\s+)?table\s+(?:if\s+not\s+exists\s+)?(${QNAME})\s*\(`, "iu");
1272
+ const ALTER_TABLE = new RegExp(String.raw`\balter\s+table\s+(?:if\s+exists\s+)?(?:only\s+)?(${QNAME})\s+([^;]*);`, "giu");
1273
+ const REFERENCES = new RegExp(String.raw`\breferences\s+(${QNAME})\s*(?:\(([^)]*)\))?`, "iu");
1274
+ const LEADING_IDENT = new RegExp(String.raw`^(${IDENT})\s*`, "u");
1275
+ const CONSTRAINT_NAME = new RegExp(String.raw`^constraint\s+${IDENT}\s+`, "iu");
1276
+ /** Words that end a column's type in its definition. */
1277
+ const TYPE_END = /\s+(?:not\b|null\b|primary\b|references\b|default\b|generated\b|unique\b|check\b|constraint\b|collate\b)/iu;
1278
+ function unquote(ident) {
1279
+ const trimmed = ident.trim();
1280
+ return trimmed.startsWith("\"") ? trimmed.slice(1, -1).replaceAll("\"\"", "\"") : trimmed.toLowerCase();
1498
1281
  }
1499
- /** A date `days` after 5 January 2026, as `YYYY-MM-DD`. */
1500
- function dayAfter(days) {
1501
- const date = new Date(Date.UTC(2026, 0, 5 + days));
1502
- return `${String(date.getUTCFullYear())}-${pad(date.getUTCMonth() + 1)}-${pad(date.getUTCDate())}`;
1282
+ function qualified(name) {
1283
+ const [first = "", second] = (name.match(new RegExp(IDENT, "gu")) ?? []).map((each) => unquote(each));
1284
+ return second === void 0 ? {
1285
+ schema: "public",
1286
+ table: first
1287
+ } : {
1288
+ schema: first,
1289
+ table: second
1290
+ };
1503
1291
  }
1504
- function numberIn(column, index, step) {
1505
- const value = (column.min ?? 0) + index * step;
1506
- return column.max === void 0 ? value : Math.min(value, column.max);
1292
+ function identList(list) {
1293
+ return (list ?? "").split(",").map((each) => each.trim()).filter((each) => each !== "").map((each) => unquote(each));
1507
1294
  }
1508
- function formatted(column, index, slug) {
1509
- switch (column.format) {
1510
- case void 0: return;
1511
- case "email": return `${(PEOPLE[index % PEOPLE.length] ?? "user").split(" ")[0]?.toLowerCase() ?? "user"}@example.com`;
1512
- case "url": return `https://example.com/${slug}/${String(index + 1)}`;
1513
- case "phone": return `+1 555 01${pad(index + 10)}`;
1514
- case "long_text": return SENTENCES[index % SENTENCES.length] ?? "";
1515
- case "color": return COLORS[index % COLORS.length] ?? "#000000";
1516
- case "rating": {
1517
- const min = column.min ?? 1;
1518
- const max = column.max ?? 5;
1519
- return String(min + index % (max - min + 1));
1520
- }
1521
- case "percent": return String(index * 17 % 101);
1522
- case "currency": return ((index + 1) * 1250 / 100).toFixed(2);
1523
- default: return column.format;
1295
+ /**
1296
+ * The SQL with comments removed and the inside of every single-quoted string
1297
+ * blanked, so a `create table` inside a string or a comment is not read and the
1298
+ * offsets still match the original text.
1299
+ */
1300
+ function codeOnly(sql) {
1301
+ let out = "";
1302
+ let index = 0;
1303
+ while (index < sql.length) {
1304
+ const char = sql[index];
1305
+ const next = sql[index + 1];
1306
+ if (char === "-" && next === "-") {
1307
+ const end = sql.indexOf("\n", index);
1308
+ const stop = end === -1 ? sql.length : end;
1309
+ out += " ".repeat(stop - index);
1310
+ index = stop;
1311
+ } else if (char === "/" && next === "*") {
1312
+ const end = sql.indexOf("*/", index + 2);
1313
+ const stop = end === -1 ? sql.length : end + 2;
1314
+ out += sql.slice(index, stop).replaceAll(/[^\n]/gu, " ");
1315
+ index = stop;
1316
+ } else if (char === "'") {
1317
+ let stop = index + 1;
1318
+ while (stop < sql.length) if (sql[stop] === "'" && sql[stop + 1] === "'") stop += 2;
1319
+ else if (sql[stop] === "'") break;
1320
+ else stop += 1;
1321
+ out += `'${sql.slice(index + 1, stop).replaceAll(/[^\n]/gu, " ")}'`;
1322
+ index = stop + 1;
1323
+ } else {
1324
+ out += char;
1325
+ index += 1;
1326
+ }
1524
1327
  }
1328
+ return out;
1525
1329
  }
1526
- function referenceValue(column, index) {
1527
- const reference = column.references;
1528
- if (reference === void 0) return;
1529
- if (reference.block === void 0 && reference.table === USERS) return PEOPLE[index % PEOPLE.length] ?? "";
1530
- return rowTitle(reference.table, index % 3);
1531
- }
1532
- function typedValue(column, index, slug) {
1533
- switch (column.type) {
1534
- case "text": return `${capitalized(slug)} ${String(index + 1)}`;
1535
- case "uuid": return `00000000-0000-4000-8000-${String(index + 1).padStart(12, "0")}`;
1536
- case "integer":
1537
- case "bigint": return String(column.identity === true ? index + 1 : numberIn(column, index, 3));
1538
- case "numeric": return numberIn(column, index, 2.5).toFixed(2);
1539
- case "boolean": return String(index % 2 === 0);
1540
- case "timestamptz": return `${dayAfter(index * 2)} ${pad(9 + index % 8)}:00`;
1541
- case "date": return dayAfter(index * 3);
1542
- case "jsonb": return "{}";
1543
- case "text[]": return "{}";
1544
- default: return column.type;
1330
+ /**
1331
+ * The text between the `(` at `open` and its matching `)`, or undefined when it
1332
+ * never closes.
1333
+ */
1334
+ function balanced(text, open) {
1335
+ let depth = 0;
1336
+ for (let index = open; index < text.length; index += 1) if (text[index] === "(") depth += 1;
1337
+ else if (text[index] === ")") {
1338
+ depth -= 1;
1339
+ if (depth === 0) return text.slice(open + 1, index);
1545
1340
  }
1546
1341
  }
1547
- function cell(table, key, column, index, title) {
1548
- if (key === title) return rowTitle(table, index);
1549
- if (column.nullable !== false && index % 4 === 3) return null;
1550
- if (column.options !== void 0 && column.options.length > 0) return column.options[index % column.options.length] ?? null;
1551
- return referenceValue(column, index) ?? formatted(column, index, key) ?? typedValue(column, index, key);
1552
- }
1553
1342
  /**
1554
- * Deterministic sample rows for app table `name`, from its columns' types,
1555
- * formats, options, bounds and references. A reference shows the name of the
1556
- * row it points at, so rows of related tables line up. A `member` viewer
1557
- * doesn't get the columns `hiddenColumns` lists.
1343
+ * The comma-separated elements of `text` at depth 0, with `original` sliced at
1344
+ * the same offsets.
1558
1345
  */
1559
- function sampleRows(design, name, count = 8, viewer = "server") {
1560
- const table = design.appTables?.[name];
1561
- if (table === void 0) return {
1562
- columns: [],
1563
- rows: []
1346
+ function splitTopLevel(text, original = text) {
1347
+ const parts = [];
1348
+ let depth = 0;
1349
+ let start = 0;
1350
+ const push = (end) => {
1351
+ const code = text.slice(start, end);
1352
+ const lead = code.length - code.trimStart().length;
1353
+ const trimmed = code.trim();
1354
+ if (trimmed !== "") parts.push({
1355
+ code: trimmed,
1356
+ original: original.slice(start + lead, start + lead + trimmed.length)
1357
+ });
1564
1358
  };
1565
- const hidden = new Set(hiddenColumns(table, viewer));
1566
- const entries = Object.entries(table.columns ?? {}).filter(([key]) => !hidden.has(key));
1567
- const title = titleColumnOf(table);
1359
+ for (let index = 0; index < text.length; index += 1) {
1360
+ const char = text[index];
1361
+ if (char === "(") depth += 1;
1362
+ else if (char === ")") depth -= 1;
1363
+ else if (char === "," && depth === 0) {
1364
+ push(index);
1365
+ start = index + 1;
1366
+ }
1367
+ }
1368
+ push(text.length);
1369
+ return parts;
1370
+ }
1371
+ function lineOf(text, offset) {
1372
+ return text.slice(0, offset).split("\n").length;
1373
+ }
1374
+ function target(match) {
1375
+ const { schema, table } = qualified(match[1] ?? "");
1568
1376
  return {
1569
- columns: entries.map(([key]) => key),
1570
- rows: Array.from({ length: count }, (_, index) => Object.fromEntries(entries.map(([key, column]) => [key, cell(name, key, column, index, title)])))
1377
+ schema,
1378
+ table,
1379
+ columns: identList(match[2])
1571
1380
  };
1572
1381
  }
1573
- //#endregion
1574
- //#region src/create/schema-meta.ts
1575
- const AUTH_USERS = "auth.users";
1576
- /** The tenant name the module defaults use, which a preset's tenant name replaces. */
1577
- const DEFAULT_TENANT = "organization";
1382
+ const ON_DELETE = /\bon\s+delete\s+(cascade|restrict|set\s+null|set\s+default|no\s+action)\b/iu;
1383
+ /** The `on delete` action of a reference, `no action` when it names none. */
1384
+ function onDeleteOf(text) {
1385
+ return (ON_DELETE.exec(text)?.[1] ?? "no action").toLowerCase().replaceAll(/\s+/gu, " ");
1386
+ }
1387
+ /** Words that end a column's default expression at the top level. */
1388
+ const DEFAULT_END = /^(?:not\s+null|null|primary\s+key|references|unique|check|constraint|generated|collate)\b/iu;
1578
1389
  /**
1579
- * Finds the parsed table for a module's logical table by its default name,
1580
- * or by that name with the tenant renamed (`organizations` is `workspaces`
1581
- * for the `workspace` tenant).
1390
+ * The `default` expression of a column definition. `definition` is the code
1391
+ * with strings blanked and `original` the same text as written, so a keyword
1392
+ * inside a string never ends the expression.
1582
1393
  */
1583
- function indexTables(tables, tenantName) {
1584
- const byName = new Map(tables.map((table) => [`${table.module}:${table.name}`, table]));
1585
- return (module, name) => byName.get(`${module}:${name}`) ?? byName.get(`${module}:${name.replaceAll(DEFAULT_TENANT, tenantName)}`);
1394
+ function defaultOf(definition, original) {
1395
+ const start = /\bdefault\s+/iu.exec(definition);
1396
+ if (start === null) return null;
1397
+ const from = start.index + start[0].length;
1398
+ let depth = 0;
1399
+ let end = definition.length;
1400
+ for (let index = from; index < definition.length; index += 1) {
1401
+ const char = definition[index];
1402
+ if (char === "(") depth += 1;
1403
+ else if (char === ")") depth -= 1;
1404
+ else if (depth === 0 && /\s/u.test(char ?? "") && DEFAULT_END.test(definition.slice(index).trimStart())) {
1405
+ end = index;
1406
+ break;
1407
+ }
1408
+ }
1409
+ return original.slice(from, end).trim();
1586
1410
  }
1587
- function moduleTables(module) {
1588
- return Object.entries(SQL_MODULES[module]?.names?.tables ?? {});
1411
+ /** Adds a column definition (`"name" type ...`) to the draft. */
1412
+ function addColumn(draft, definition, original = definition) {
1413
+ const head = definition.match(LEADING_IDENT);
1414
+ if (head === null) return;
1415
+ const name = unquote(head[1] ?? "");
1416
+ const rest = definition.slice(head[0].length);
1417
+ const typeEnd = rest.search(TYPE_END);
1418
+ const type = (typeEnd === -1 ? rest : rest.slice(0, typeEnd)).trim();
1419
+ if (draft.columns.some((column) => column.name === name)) return;
1420
+ const primary = /\bprimary\s+key\b/iu.test(rest);
1421
+ draft.columns.push({
1422
+ name,
1423
+ type,
1424
+ nullable: !primary && !/\bnot\s+null\b/iu.test(rest),
1425
+ default: defaultOf(definition, original),
1426
+ unique: /\bunique\b/iu.test(rest)
1427
+ });
1428
+ if (primary) draft.primaryKey = [name];
1429
+ const references = rest.match(REFERENCES);
1430
+ if (references !== null) draft.foreignKeys.push({
1431
+ columns: [name],
1432
+ target: target(references),
1433
+ onDelete: onDeleteOf(rest)
1434
+ });
1589
1435
  }
1590
1436
  /**
1591
- * The table the tenant columns point at: the target most foreign keys on a
1592
- * tenant column share. `null` when no table has a tenant foreign key.
1437
+ * Adds a table constraint (`primary key (...)`, `foreign key (...) references
1438
+ * ...`). Returns false when the element is not a constraint.
1593
1439
  */
1594
- function tenantTable(tables) {
1595
- const counts = /* @__PURE__ */ new Map();
1596
- for (const table of tables) for (const key of table.foreignKeys) if (table.tenantColumn !== null && key.columns.length === 1 && key.columns[0] === table.tenantColumn) {
1597
- const to = `${key.target.schema}.${key.target.table}`;
1598
- counts.set(to, (counts.get(to) ?? 0) + 1);
1440
+ function addConstraint(draft, element) {
1441
+ const body = element.replace(CONSTRAINT_NAME, "");
1442
+ const named = body !== element;
1443
+ const primary = /^primary\s+key\s*\(([^)]*)\)/iu.exec(body);
1444
+ if (primary !== null) {
1445
+ draft.primaryKey = identList(primary[1]);
1446
+ return true;
1599
1447
  }
1600
- let best = null;
1601
- let most = 0;
1602
- for (const [id, count] of counts) if (count > most) {
1603
- best = id;
1604
- most = count;
1448
+ const foreign = /^foreign\s+key\s*\(([^)]*)\)\s*([\s\S]*)$/iu.exec(body);
1449
+ if (foreign !== null) {
1450
+ const references = (foreign[2] ?? "").match(REFERENCES);
1451
+ if (references !== null) draft.foreignKeys.push({
1452
+ columns: identList(foreign[1]),
1453
+ target: target(references),
1454
+ onDelete: onDeleteOf(foreign[2] ?? "")
1455
+ });
1456
+ return true;
1605
1457
  }
1606
- return best;
1607
- }
1608
- /**
1609
- * The physical column a logical lifecycle column maps to. A tenant name
1610
- * renames `organization_id`, so a default name the table lacks falls back to
1611
- * the table's tenant column.
1612
- */
1613
- function physicalColumn(table, name, tenant) {
1614
- if (name === void 0) return;
1615
- if (table.columns.some((column) => column.name === name)) return name;
1616
- return tenant && table.tenantColumn !== null ? table.tenantColumn : void 0;
1458
+ return named || /^(?:unique|check|exclude)\b/iu.test(body);
1617
1459
  }
1618
- function hasForeignKey(table, column) {
1619
- return table.foreignKeys.some((key) => key.columns.length === 1 && key.columns[0] === column);
1460
+ function finish(draft, tenantColumn) {
1461
+ const tenant = tenantColumn !== null && draft.columns.some((column) => column.name === tenantColumn) ? tenantColumn : null;
1462
+ const primary = new Set(draft.primaryKey);
1463
+ return {
1464
+ id: `${draft.schema}.${draft.name}`,
1465
+ schema: draft.schema,
1466
+ name: draft.name,
1467
+ module: draft.module,
1468
+ primaryKey: draft.primaryKey,
1469
+ foreignKeys: draft.foreignKeys,
1470
+ tenantColumn: tenant,
1471
+ columns: draft.columns.map((column) => primary.has(column.name) ? {
1472
+ ...column,
1473
+ nullable: false
1474
+ } : column)
1475
+ };
1620
1476
  }
1621
1477
  /**
1622
- * The soft references in the tables: lifecycle tenant and user columns
1623
- * without a foreign key, and `regclass` columns, which name any table.
1478
+ * The tables in rendered module SQL: every `create table`, plus the columns and
1479
+ * foreign keys later `alter table ... add` statements give them. A `create
1480
+ * table` it can't read throws with the file and line, so a new SQL shape fails
1481
+ * the tests instead of dropping a table from the diagram.
1624
1482
  */
1625
- function softReferences(tables, tenantName = DEFAULT_TENANT) {
1626
- const lookup = indexTables(tables, tenantName);
1627
- const tenantTo = tenantTable(tables);
1628
- const refs = [];
1629
- const seen = /* @__PURE__ */ new Set();
1630
- const add = (ref) => {
1631
- const key = `${ref.from}.${ref.column}`;
1632
- if (!seen.has(key)) {
1633
- seen.add(key);
1634
- refs.push(ref);
1635
- }
1636
- };
1637
- for (const block of new Set(tables.map((table) => table.module))) for (const [, spec] of moduleTables(block)) {
1638
- const table = lookup(block, spec.name);
1639
- const lifecycle = spec.lifecycle;
1640
- if (table === void 0 || lifecycle === void 0) continue;
1641
- const tenant = physicalColumn(table, lifecycle.tenant === void 0 ? void 0 : spec.columns[lifecycle.tenant], true);
1642
- if (tenant !== void 0 && tenantTo !== null && tenantTo !== table.id && !hasForeignKey(table, tenant)) add({
1643
- from: table.id,
1644
- column: tenant,
1645
- to: tenantTo,
1646
- kind: "tenant"
1647
- });
1648
- const user = physicalColumn(table, lifecycle.user === void 0 ? void 0 : spec.columns[lifecycle.user], false);
1649
- if (user !== void 0 && !hasForeignKey(table, user)) add({
1650
- from: table.id,
1651
- column: user,
1652
- to: AUTH_USERS,
1653
- kind: "user"
1654
- });
1655
- }
1656
- for (const table of tables) for (const column of table.columns) if (column.type.toLowerCase() === "regclass") add({
1657
- from: table.id,
1658
- column: column.name,
1659
- to: null,
1660
- kind: "any"
1661
- });
1662
- return refs;
1663
- }
1664
- const MANIFEST_BY_MODULE = new Map(PRESET_CATALOG.blocks.map((block) => [block.name, block.manifest]));
1665
- const EXTRA_TABLE_BY_MODULE = new Map(PRESET_CATALOG.blocks.flatMap((block) => block.extraColumns === void 0 ? [] : [[block.name, block.extraColumns]]));
1666
- /** Each table's module and logical table name. */
1667
- function blockTables(tables, lookup) {
1668
- return Object.fromEntries(tables.flatMap((table) => {
1669
- const logical = moduleTables(table.module).find(([, spec]) => lookup(table.module, spec.name) === table)?.[0];
1670
- return logical === void 0 ? [] : [[table.id, {
1671
- block: table.module,
1672
- table: logical
1673
- }]];
1483
+ function parseSchema(files, options = {}) {
1484
+ const drafts = /* @__PURE__ */ new Map();
1485
+ const code = files.map((file) => ({
1486
+ file,
1487
+ text: codeOnly(file.contents)
1674
1488
  }));
1489
+ for (const { file, text } of code) for (const match of text.matchAll(CREATE_TABLE)) {
1490
+ const offset = match.index;
1491
+ const head = text.slice(offset).match(CREATE_HEAD);
1492
+ const open = head === null ? -1 : offset + head[0].length - 1;
1493
+ const body = open === -1 ? void 0 : balanced(text, open);
1494
+ const original = body === void 0 ? "" : file.contents.slice(open + 1, open + 1 + body.length);
1495
+ if (head === null || body === void 0) throw new Error(`parseSchema can't read the create table at ${file.path}:${lineOf(text, offset)}.`);
1496
+ const { schema, table } = qualified(head[1] ?? "");
1497
+ const id = `${schema}.${table}`;
1498
+ if (drafts.has(id)) continue;
1499
+ const draft = {
1500
+ schema,
1501
+ name: table,
1502
+ module: file.module,
1503
+ columns: [],
1504
+ primaryKey: [],
1505
+ foreignKeys: []
1506
+ };
1507
+ for (const element of splitTopLevel(body, original)) if (!addConstraint(draft, element.code)) addColumn(draft, element.code, element.original);
1508
+ drafts.set(id, draft);
1509
+ }
1510
+ for (const { file, text } of code) for (const match of text.matchAll(ALTER_TABLE)) {
1511
+ const { schema, table } = qualified(match[1] ?? "");
1512
+ const draft = drafts.get(`${schema}.${table}`);
1513
+ if (draft === void 0) continue;
1514
+ const actions = match[2] ?? "";
1515
+ const start = match.index + match[0].lastIndexOf(actions);
1516
+ const original = file.contents.slice(start, start + actions.length);
1517
+ for (const action of splitTopLevel(actions, original)) {
1518
+ const column = /^add\s+column\s+(?:if\s+not\s+exists\s+)?/iu.exec(action.code);
1519
+ if (column !== null) addColumn(draft, action.code.slice(column[0].length), action.original.slice(column[0].length));
1520
+ else if (/^add\s+/iu.test(action.code)) addConstraint(draft, action.code.replace(/^add\s+/iu, ""));
1521
+ }
1522
+ }
1523
+ const tenantColumn = options.tenantColumn ?? null;
1524
+ return [...drafts.entries()].filter(([id]) => !BOOKKEEPING_TABLES.has(id)).map(([, draft]) => finish(draft, tenantColumn));
1675
1525
  }
1676
- /** The table ids `blocks.<module>.options.extraColumns` adds columns to. */
1677
- function extraColumnTables(tables, lookup) {
1678
- const installed = new Set(tables.map((table) => table.module));
1679
- return [...EXTRA_TABLE_BY_MODULE].flatMap(([module, logical]) => {
1680
- const spec = SQL_MODULES[module]?.names?.tables[logical];
1681
- const table = !installed.has(module) || spec === void 0 ? void 0 : lookup(module, spec.name);
1682
- return table === void 0 ? [] : [table.id];
1683
- });
1526
+ /**
1527
+ * The statements that shape one table, as written: its `create table` and the
1528
+ * `alter table` statements after it. Empty when no file creates it.
1529
+ */
1530
+ function tableStatements(files, id) {
1531
+ const statements = [];
1532
+ for (const file of files) {
1533
+ const text = codeOnly(file.contents);
1534
+ for (const match of text.matchAll(CREATE_TABLE)) {
1535
+ const head = text.slice(match.index).match(CREATE_HEAD);
1536
+ if (head === null) continue;
1537
+ const { schema, table } = qualified(head[1] ?? "");
1538
+ const open = match.index + head[0].length - 1;
1539
+ const body = balanced(text, open);
1540
+ if (`${schema}.${table}` !== id || body === void 0) continue;
1541
+ const end = text.indexOf(";", open + body.length + 1);
1542
+ statements.push(file.contents.slice(match.index, end === -1 ? text.length : end + 1));
1543
+ }
1544
+ for (const match of text.matchAll(ALTER_TABLE)) {
1545
+ const { schema, table } = qualified(match[1] ?? "");
1546
+ if (`${schema}.${table}` === id) statements.push(file.contents.slice(match.index, match.index + match[0].length));
1547
+ }
1548
+ }
1549
+ return statements;
1684
1550
  }
1685
- /** The tables plus the soft references, manifests and extra-column tables the canvas draws. */
1686
- function schemaData(tables, tenantName = DEFAULT_TENANT) {
1687
- const lookup = indexTables(tables, tenantName);
1551
+ /**
1552
+ * The foreign keys between tables, one per pair, with the targets outside the
1553
+ * schema named by id.
1554
+ */
1555
+ function schemaRelations(tables) {
1556
+ const seen = /* @__PURE__ */ new Set();
1557
+ return tables.flatMap((table) => table.foreignKeys.flatMap((key) => {
1558
+ const to = `${key.target.schema}.${key.target.table}`;
1559
+ const pair = `${table.id}>${to}`;
1560
+ if (to === table.id || seen.has(pair)) return [];
1561
+ seen.add(pair);
1562
+ return [{
1563
+ from: table.id,
1564
+ to
1565
+ }];
1566
+ }));
1567
+ }
1568
+ //#endregion
1569
+ //#region src/create/check.ts
1570
+ const messageOf = (error) => error instanceof Error ? error.message : String(error);
1571
+ /** The issue for a design that failed to parse, with its code and path. */
1572
+ function parseIssue(error) {
1573
+ const { code, path } = error instanceof DesignParseError ? error : {
1574
+ code: "invalid_design",
1575
+ path: ""
1576
+ };
1688
1577
  return {
1689
- tables,
1690
- softRefs: softReferences(tables, tenantName),
1691
- manifests: Object.fromEntries(tables.map((table) => [table.id, MANIFEST_BY_MODULE.get(table.module) ?? table.module])),
1692
- extraColumns: extraColumnTables(tables, lookup),
1693
- blockTables: blockTables(tables, lookup),
1694
- tenantTable: tenantTable(tables)
1578
+ code,
1579
+ path,
1580
+ table: tableAt(path),
1581
+ message: messageOf(error)
1695
1582
  };
1696
1583
  }
1697
- //#endregion
1698
- //#region src/create/schema.ts
1699
- /** The columns a diagram shows before a table is expanded: keys, tenant and soft references. */
1700
- function keyColumnsOf(table, softColumns = /* @__PURE__ */ new Set()) {
1701
- const keys = /* @__PURE__ */ new Set([
1702
- ...table.primaryKey,
1703
- ...table.foreignKeys.flatMap((key) => key.columns),
1704
- ...table.tenantColumn === null ? [] : [table.tenantColumn],
1705
- ...softColumns
1706
- ]);
1707
- return table.columns.filter((column) => keys.has(column.name));
1584
+ /** The app table or block module a design path is in, or `design`. */
1585
+ function tableAt(path) {
1586
+ const [, key, name] = path.split("/");
1587
+ return (key === "appTables" || key === "extraColumns") && name !== void 0 ? name.replaceAll("~1", "/").replaceAll("~0", "~") : "design";
1708
1588
  }
1709
- /** The column the tenant blocks key rows by, from the preset's tenant name; `null` without tenants. */
1710
- function tenantColumnOf(preset) {
1711
- return preset.scope === "tenant" ? `${preset.tenantName}_id` : null;
1589
+ async function designFrom(input) {
1590
+ if (typeof input !== "string") return parseDesign(input);
1591
+ const design = await designOf(input);
1592
+ if (design === void 0) throw new DesignParseError("invalid_code", "", `design: "${input.slice(0, 40)}" is neither a design code nor a /create URL with &design=`);
1593
+ return design;
1594
+ }
1595
+ /**
1596
+ * Checks a design against a preset with every rule the canvas and `sql sync`
1597
+ * apply, so a server, an MCP tool and the canvas share one answer. `input` is a
1598
+ * design object, a design code or a `/create` URL with `&design=`. It never
1599
+ * throws for a bad design or preset: each problem is an issue.
1600
+ */
1601
+ async function checkDesign(input, preset) {
1602
+ let design;
1603
+ try {
1604
+ design = await designFrom(input);
1605
+ } catch (error) {
1606
+ return {
1607
+ ok: false,
1608
+ issues: [parseIssue(error)]
1609
+ };
1610
+ }
1611
+ let resolvedPreset;
1612
+ try {
1613
+ resolvedPreset = presetOf(preset);
1614
+ } catch (error) {
1615
+ return {
1616
+ ok: false,
1617
+ issues: [{
1618
+ code: "invalid_preset",
1619
+ path: "",
1620
+ table: "preset",
1621
+ message: messageOf(error)
1622
+ }]
1623
+ };
1624
+ }
1625
+ const resolved = resolvePreset(resolvedPreset);
1626
+ if (resolved.conflicts.length > 0) return {
1627
+ ok: false,
1628
+ issues: resolved.conflicts.map((conflict) => ({
1629
+ code: "preset_conflict",
1630
+ path: "",
1631
+ table: "preset",
1632
+ message: `${conflict.block ?? conflict.field ?? "preset"}: ${conflict.reason}`
1633
+ }))
1634
+ };
1635
+ try {
1636
+ designConfig(resolved, design);
1637
+ } catch (error) {
1638
+ return {
1639
+ ok: false,
1640
+ issues: [parseIssue(error)]
1641
+ };
1642
+ }
1643
+ const data = schemaData(parseSchema(previewFiles(encodePreset(resolvedPreset)), { tenantColumn: tenantColumnOf(resolvedPreset) }), resolvedPreset.tenantName);
1644
+ const issues = designIssues(design, data, resolvedPreset);
1645
+ if (issues.length > 0) return {
1646
+ ok: false,
1647
+ issues
1648
+ };
1649
+ try {
1650
+ return {
1651
+ ok: true,
1652
+ design,
1653
+ fitsUrl: true,
1654
+ code: await encodeDesign(design)
1655
+ };
1656
+ } catch (error) {
1657
+ if (error instanceof DesignTooLongError) return {
1658
+ ok: true,
1659
+ design,
1660
+ fitsUrl: false,
1661
+ code: null
1662
+ };
1663
+ return {
1664
+ ok: false,
1665
+ issues: [parseIssue(error)]
1666
+ };
1667
+ }
1668
+ }
1669
+ //#endregion
1670
+ //#region src/create/column-kinds.ts
1671
+ /** The groups of the column type picker, in the order it shows them. */
1672
+ const KIND_GROUPS = [
1673
+ "Text",
1674
+ "Number",
1675
+ "Date and time",
1676
+ "Choice",
1677
+ "Relation",
1678
+ "Other"
1679
+ ];
1680
+ const USERS$1 = "auth.users";
1681
+ /** The first options a new select gets, for the user to rename. */
1682
+ const STARTER_OPTIONS = ["Option A", "Option B"];
1683
+ const COLUMN_KINDS = [
1684
+ {
1685
+ id: "text",
1686
+ label: "Text",
1687
+ group: "Text",
1688
+ short: "text",
1689
+ column: { type: "text" }
1690
+ },
1691
+ {
1692
+ id: "long_text",
1693
+ label: "Long text",
1694
+ group: "Text",
1695
+ short: "long text",
1696
+ column: {
1697
+ type: "text",
1698
+ format: "long_text"
1699
+ }
1700
+ },
1701
+ {
1702
+ id: "email",
1703
+ label: "Email",
1704
+ group: "Text",
1705
+ short: "email",
1706
+ column: {
1707
+ type: "text",
1708
+ format: "email"
1709
+ }
1710
+ },
1711
+ {
1712
+ id: "url",
1713
+ label: "URL",
1714
+ group: "Text",
1715
+ short: "url",
1716
+ column: {
1717
+ type: "text",
1718
+ format: "url"
1719
+ }
1720
+ },
1721
+ {
1722
+ id: "phone",
1723
+ label: "Phone",
1724
+ group: "Text",
1725
+ short: "phone",
1726
+ column: {
1727
+ type: "text",
1728
+ format: "phone"
1729
+ }
1730
+ },
1731
+ {
1732
+ id: "color",
1733
+ label: "Color",
1734
+ group: "Text",
1735
+ short: "color",
1736
+ column: {
1737
+ type: "text",
1738
+ format: "color"
1739
+ }
1740
+ },
1741
+ {
1742
+ id: "integer",
1743
+ label: "Whole number",
1744
+ group: "Number",
1745
+ short: "integer",
1746
+ column: { type: "integer" }
1747
+ },
1748
+ {
1749
+ id: "bigint",
1750
+ label: "Large whole number",
1751
+ group: "Number",
1752
+ short: "bigint",
1753
+ column: { type: "bigint" }
1754
+ },
1755
+ {
1756
+ id: "numeric",
1757
+ label: "Decimal",
1758
+ group: "Number",
1759
+ short: "numeric",
1760
+ column: { type: "numeric" }
1761
+ },
1762
+ {
1763
+ id: "rating",
1764
+ label: "Rating",
1765
+ group: "Number",
1766
+ short: "rating",
1767
+ column: {
1768
+ type: "integer",
1769
+ format: "rating"
1770
+ }
1771
+ },
1772
+ {
1773
+ id: "percent",
1774
+ label: "Percent",
1775
+ group: "Number",
1776
+ short: "percent",
1777
+ column: {
1778
+ type: "numeric",
1779
+ format: "percent"
1780
+ }
1781
+ },
1782
+ {
1783
+ id: "currency",
1784
+ label: "Currency",
1785
+ group: "Number",
1786
+ short: "money",
1787
+ column: {
1788
+ type: "bigint",
1789
+ format: "currency"
1790
+ }
1791
+ },
1792
+ {
1793
+ id: "autonumber",
1794
+ label: "Autonumber",
1795
+ group: "Number",
1796
+ short: "autonumber",
1797
+ column: {
1798
+ type: "bigint",
1799
+ identity: true
1800
+ }
1801
+ },
1802
+ {
1803
+ id: "date",
1804
+ label: "Date",
1805
+ group: "Date and time",
1806
+ short: "date",
1807
+ column: { type: "date" }
1808
+ },
1809
+ {
1810
+ id: "timestamptz",
1811
+ label: "Date and time",
1812
+ group: "Date and time",
1813
+ short: "timestamptz",
1814
+ column: { type: "timestamptz" }
1815
+ },
1816
+ {
1817
+ id: "boolean",
1818
+ label: "Yes or no",
1819
+ group: "Choice",
1820
+ short: "boolean",
1821
+ column: { type: "boolean" }
1822
+ },
1823
+ {
1824
+ id: "single_select",
1825
+ label: "Single select",
1826
+ group: "Choice",
1827
+ short: "select",
1828
+ column: {
1829
+ type: "text",
1830
+ options: STARTER_OPTIONS
1831
+ }
1832
+ },
1833
+ {
1834
+ id: "multi_select",
1835
+ label: "Multi-select",
1836
+ group: "Choice",
1837
+ short: "multi-select",
1838
+ column: {
1839
+ type: "text[]",
1840
+ options: STARTER_OPTIONS
1841
+ }
1842
+ },
1843
+ {
1844
+ id: "person",
1845
+ label: "Person",
1846
+ group: "Relation",
1847
+ short: "person",
1848
+ column: {
1849
+ type: "uuid",
1850
+ nullable: true,
1851
+ references: {
1852
+ table: USERS$1,
1853
+ onDelete: "set null"
1854
+ }
1855
+ }
1856
+ },
1857
+ {
1858
+ id: "reference",
1859
+ label: "Link to a table",
1860
+ group: "Relation",
1861
+ short: "link",
1862
+ column: { type: "uuid" },
1863
+ drawn: true
1864
+ },
1865
+ {
1866
+ id: "uuid",
1867
+ label: "UUID",
1868
+ group: "Other",
1869
+ short: "uuid",
1870
+ column: { type: "uuid" }
1871
+ },
1872
+ {
1873
+ id: "jsonb",
1874
+ label: "JSON",
1875
+ group: "Other",
1876
+ short: "jsonb",
1877
+ column: { type: "jsonb" }
1878
+ },
1879
+ {
1880
+ id: "text_list",
1881
+ label: "List of text",
1882
+ group: "Other",
1883
+ short: "text[]",
1884
+ column: { type: "text[]" }
1885
+ }
1886
+ ];
1887
+ const BY_ID = new Map(COLUMN_KINDS.map((kind) => [kind.id, kind]));
1888
+ const BY_FORMAT = new Map(COLUMN_KINDS.filter((kind) => kind.column.format !== void 0).map((kind) => [kind.column.format, kind]));
1889
+ const PLAIN = {
1890
+ text: "text",
1891
+ uuid: "uuid",
1892
+ integer: "integer",
1893
+ bigint: "bigint",
1894
+ numeric: "numeric",
1895
+ boolean: "boolean",
1896
+ timestamptz: "timestamptz",
1897
+ date: "date",
1898
+ jsonb: "jsonb",
1899
+ "text[]": "text_list"
1900
+ };
1901
+ function kindById(id) {
1902
+ return BY_ID.get(id);
1712
1903
  }
1713
1904
  /**
1714
- * Every module's file creates this table to record the installed modules.
1715
- * It holds no app data, so the diagram leaves it out.
1905
+ * The kind a column's identity, reference or options make it, before its format
1906
+ * and type.
1716
1907
  */
1717
- const BOOKKEEPING_TABLES = /* @__PURE__ */ new Set(["better_supabase.modules"]);
1718
- const IDENT = String.raw`(?:"(?:[^"]|"")+"|[A-Za-z_][A-Za-z0-9_$]*)`;
1719
- const QNAME = String.raw`${IDENT}(?:\s*\.\s*${IDENT})?`;
1720
- const CREATE_TABLE = /\bcreate\s+(?:(?:global\s+|local\s+)?(?:temp|temporary)\s+|unlogged\s+)?table\b/giu;
1721
- const CREATE_HEAD = new RegExp(String.raw`^create\s+(?:(?:global\s+|local\s+)?(?:temp|temporary)\s+|unlogged\s+)?table\s+(?:if\s+not\s+exists\s+)?(${QNAME})\s*\(`, "iu");
1722
- const ALTER_TABLE = new RegExp(String.raw`\balter\s+table\s+(?:if\s+exists\s+)?(?:only\s+)?(${QNAME})\s+([^;]*);`, "giu");
1723
- const REFERENCES = new RegExp(String.raw`\breferences\s+(${QNAME})\s*(?:\(([^)]*)\))?`, "iu");
1724
- const LEADING_IDENT = new RegExp(String.raw`^(${IDENT})\s*`, "u");
1725
- const CONSTRAINT_NAME = new RegExp(String.raw`^constraint\s+${IDENT}\s+`, "iu");
1726
- /** Words that end a column's type in its definition. */
1727
- const TYPE_END = /\s+(?:not\b|null\b|primary\b|references\b|default\b|generated\b|unique\b|check\b|constraint\b|collate\b)/iu;
1728
- function unquote(ident) {
1729
- const trimmed = ident.trim();
1730
- return trimmed.startsWith("\"") ? trimmed.slice(1, -1).replaceAll("\"\"", "\"") : trimmed.toLowerCase();
1731
- }
1732
- function qualified(name) {
1733
- const [first = "", second] = (name.match(new RegExp(IDENT, "gu")) ?? []).map((each) => unquote(each));
1734
- return second === void 0 ? {
1735
- schema: "public",
1736
- table: first
1737
- } : {
1738
- schema: first,
1739
- table: second
1740
- };
1908
+ function structuralKind(column) {
1909
+ if (column.identity === true) return "autonumber";
1910
+ if (column.references !== void 0) return column.references.block === void 0 && column.references.table === USERS$1 ? "person" : "reference";
1911
+ if (column.options === void 0) return;
1912
+ return column.type === "text[]" ? "multi_select" : "single_select";
1741
1913
  }
1742
- function identList(list) {
1743
- return (list ?? "").split(",").map((each) => each.trim()).filter((each) => each !== "").map((each) => unquote(each));
1914
+ /** The picker choice a column reads as. */
1915
+ function kindOf(column) {
1916
+ const id = structuralKind(column);
1917
+ return (id === void 0 ? void 0 : BY_ID.get(id)) ?? (column.format === void 0 ? void 0 : BY_FORMAT.get(column.format)) ?? BY_ID.get(PLAIN[column.type]);
1744
1918
  }
1745
1919
  /**
1746
- * The SQL with comments removed and the inside of every single-quoted string
1747
- * blanked, so a `create table` inside a string or a comment is not read and
1748
- * the offsets still match the original text.
1920
+ * `column` as `kind`: the kind's keys, with the column's name-independent
1921
+ * settings (required, unique, comment, a default and bounds that still fit)
1922
+ * kept, and a select's options kept when it turns into the other select.
1749
1923
  */
1750
- function codeOnly(sql) {
1751
- let out = "";
1752
- let index = 0;
1753
- while (index < sql.length) {
1754
- const char = sql[index];
1755
- const next = sql[index + 1];
1756
- if (char === "-" && next === "-") {
1757
- const end = sql.indexOf("\n", index);
1758
- const stop = end === -1 ? sql.length : end;
1759
- out += " ".repeat(stop - index);
1760
- index = stop;
1761
- } else if (char === "/" && next === "*") {
1762
- const end = sql.indexOf("*/", index + 2);
1763
- const stop = end === -1 ? sql.length : end + 2;
1764
- out += sql.slice(index, stop).replaceAll(/[^\n]/gu, " ");
1765
- index = stop;
1766
- } else if (char === "'") {
1767
- let stop = index + 1;
1768
- while (stop < sql.length) if (sql[stop] === "'" && sql[stop + 1] === "'") stop += 2;
1769
- else if (sql[stop] === "'") break;
1770
- else stop += 1;
1771
- out += `'${sql.slice(index + 1, stop).replaceAll(/[^\n]/gu, " ")}'`;
1772
- index = stop + 1;
1773
- } else {
1774
- out += char;
1775
- index += 1;
1776
- }
1777
- }
1778
- return out;
1779
- }
1780
- /** The text between the `(` at `open` and its matching `)`, or undefined when it never closes. */
1781
- function balanced(text, open) {
1782
- let depth = 0;
1783
- for (let index = open; index < text.length; index += 1) if (text[index] === "(") depth += 1;
1784
- else if (text[index] === ")") {
1785
- depth -= 1;
1786
- if (depth === 0) return text.slice(open + 1, index);
1787
- }
1788
- }
1789
- /** The comma-separated elements of `text` at depth 0, with `original` sliced at the same offsets. */
1790
- function splitTopLevel(text, original = text) {
1791
- const parts = [];
1792
- let depth = 0;
1793
- let start = 0;
1794
- const push = (end) => {
1795
- const code = text.slice(start, end);
1796
- const lead = code.length - code.trimStart().length;
1797
- const trimmed = code.trim();
1798
- if (trimmed !== "") parts.push({
1799
- code: trimmed,
1800
- original: original.slice(start + lead, start + lead + trimmed.length)
1801
- });
1924
+ function withKind(column, kind) {
1925
+ const { format: _format, options, identity: _identity, references: _references, min, max, ...rest } = column;
1926
+ const kept = kind.column.options === void 0 || options === void 0 ? kind.column : {
1927
+ ...kind.column,
1928
+ options
1802
1929
  };
1803
- for (let index = 0; index < text.length; index += 1) {
1804
- const char = text[index];
1805
- if (char === "(") depth += 1;
1806
- else if (char === ")") depth -= 1;
1807
- else if (char === "," && depth === 0) {
1808
- push(index);
1809
- start = index + 1;
1810
- }
1811
- }
1812
- push(text.length);
1813
- return parts;
1814
- }
1815
- function lineOf(text, offset) {
1816
- return text.slice(0, offset).split("\n").length;
1930
+ return fitted(withBounds({
1931
+ ...rest,
1932
+ ...kept
1933
+ }, column.type === kind.column.type ? {
1934
+ min,
1935
+ max
1936
+ } : {}));
1817
1937
  }
1818
- function target(match) {
1819
- const { schema, table } = qualified(match[1] ?? "");
1938
+ /** The money columns of `name`: `<stem>_minor` and `<stem>_currency`. */
1939
+ function moneyColumns(name) {
1940
+ const stem = name.replace(/_minor$/u, "");
1820
1941
  return {
1821
- schema,
1822
- table,
1823
- columns: identList(match[2])
1942
+ minor: `${stem}_minor`,
1943
+ currency: `${stem}_currency`
1824
1944
  };
1825
1945
  }
1826
- const ON_DELETE = /\bon\s+delete\s+(cascade|restrict|set\s+null|set\s+default|no\s+action)\b/iu;
1827
- /** The `on delete` action of a reference, `no action` when it names none. */
1828
- function onDeleteOf(text) {
1829
- return (ON_DELETE.exec(text)?.[1] ?? "no action").toLowerCase().replaceAll(/\s+/gu, " ");
1946
+ /**
1947
+ * Sets an app table column to `kind`. Currency keeps money as two columns: the
1948
+ * column becomes `<name>_minor` (unless the name is taken) and a
1949
+ * `<name>_currency` text column of 3 characters joins it. Returns the column's
1950
+ * name after the change.
1951
+ */
1952
+ function setColumnKind(design, table, name, kind) {
1953
+ const columns = design.appTables?.[table]?.columns ?? {};
1954
+ const column = columns[name];
1955
+ if (column === void 0) return {
1956
+ design,
1957
+ name
1958
+ };
1959
+ const next = withKind(column, kind);
1960
+ if (kind.id !== "currency") return {
1961
+ design: setColumn(design, table, name, next),
1962
+ name
1963
+ };
1964
+ const { minor, currency } = moneyColumns(name);
1965
+ const renamed = minor === name || columns[minor] === void 0 ? minor : name;
1966
+ const moved = setColumn(renameColumn(design, table, name, renamed), table, renamed, next);
1967
+ if (columns[currency] !== void 0) return {
1968
+ design: moved,
1969
+ name: renamed
1970
+ };
1971
+ return {
1972
+ design: setColumn(moved, table, currency, next.nullable === false ? {
1973
+ type: "text",
1974
+ nullable: false,
1975
+ min: 3,
1976
+ max: 3
1977
+ } : {
1978
+ type: "text",
1979
+ min: 3,
1980
+ max: 3
1981
+ }),
1982
+ name: renamed
1983
+ };
1830
1984
  }
1831
- /** Words that end a column's default expression at the top level. */
1832
- const DEFAULT_END = /^(?:not\s+null|null|primary\s+key|references|unique|check|constraint|generated|collate)\b/iu;
1985
+ //#endregion
1986
+ //#region src/create/deploy.ts
1987
+ /** The name the deploy gives its migration in `supabase_migrations`. */
1988
+ const MIGRATION_NAME = "better_supabase_blocks";
1833
1989
  /**
1834
- * The `default` expression of a column definition. `definition` is the code
1835
- * with strings blanked and `original` the same text as written, so a keyword
1836
- * inside a string never ends the expression.
1990
+ * Why this preset can't be deployed, or `undefined` when it can. With `access:
1991
+ * "provider"` the preview renders a stand-in provider whose functions no real
1992
+ * project has.
1837
1993
  */
1838
- function defaultOf(definition, original) {
1839
- const start = /\bdefault\s+/iu.exec(definition);
1840
- if (start === null) return null;
1841
- const from = start.index + start[0].length;
1842
- let depth = 0;
1843
- let end = definition.length;
1844
- for (let index = from; index < definition.length; index += 1) {
1845
- const char = definition[index];
1846
- if (char === "(") depth += 1;
1847
- else if (char === ")") depth -= 1;
1848
- else if (depth === 0 && /\s/u.test(char ?? "") && DEFAULT_END.test(definition.slice(index).trimStart())) {
1849
- end = index;
1850
- break;
1851
- }
1852
- }
1853
- return original.slice(from, end).trim();
1994
+ function deployBlocker(preset) {
1995
+ return preset.access === "provider" ? "Bring your own authorization provider: its SQL comes from the provider, so deploy it with the CLI." : void 0;
1854
1996
  }
1855
- /** Adds a column definition (`"name" type ...`) to the draft. */
1856
- function addColumn(draft, definition, original = definition) {
1857
- const head = definition.match(LEADING_IDENT);
1858
- if (head === null) return;
1859
- const name = unquote(head[1] ?? "");
1860
- const rest = definition.slice(head[0].length);
1861
- const typeEnd = rest.search(TYPE_END);
1862
- const type = (typeEnd === -1 ? rest : rest.slice(0, typeEnd)).trim();
1863
- if (draft.columns.some((column) => column.name === name)) return;
1864
- const primary = /\bprimary\s+key\b/iu.test(rest);
1865
- draft.columns.push({
1866
- name,
1867
- type,
1868
- nullable: !primary && !/\bnot\s+null\b/iu.test(rest),
1869
- default: defaultOf(definition, original),
1870
- unique: /\bunique\b/iu.test(rest)
1871
- });
1872
- if (primary) draft.primaryKey = [name];
1873
- const references = rest.match(REFERENCES);
1874
- if (references !== null) draft.foreignKeys.push({
1875
- columns: [name],
1876
- target: target(references),
1877
- onDelete: onDeleteOf(rest)
1878
- });
1997
+ /** A new deploy id: a random UUID. */
1998
+ function newDeployId() {
1999
+ return crypto.randomUUID();
1879
2000
  }
2001
+ const DEPLOY_ID = /^[\w-]{1,64}$/u;
1880
2002
  /**
1881
- * Adds a table constraint (`primary key (...)`, `foreign key (...)
1882
- * references ...`). Returns false when the element is not a constraint.
2003
+ * The SQL of one migration for the rendered files: every schema file, then
2004
+ * every data file, each in render order, which is the order `sql sync` and `sql
2005
+ * data` apply them. pgTAP tests stay out. Throws a `TypeError` when `id` holds
2006
+ * anything but letters, digits, `_` and `-`.
1883
2007
  */
1884
- function addConstraint(draft, element) {
1885
- const body = element.replace(CONSTRAINT_NAME, "");
1886
- const named = body !== element;
1887
- const primary = /^primary\s+key\s*\(([^)]*)\)/iu.exec(body);
1888
- if (primary !== null) {
1889
- draft.primaryKey = identList(primary[1]);
1890
- return true;
1891
- }
1892
- const foreign = /^foreign\s+key\s*\(([^)]*)\)\s*([\s\S]*)$/iu.exec(body);
1893
- if (foreign !== null) {
1894
- const references = (foreign[2] ?? "").match(REFERENCES);
1895
- if (references !== null) draft.foreignKeys.push({
1896
- columns: identList(foreign[1]),
1897
- target: target(references),
1898
- onDelete: onDeleteOf(foreign[2] ?? "")
1899
- });
1900
- return true;
1901
- }
1902
- return named || /^(?:unique|check|exclude)\b/iu.test(body);
2008
+ function deployQuery(files, options = {}) {
2009
+ const { id } = options;
2010
+ if (id !== void 0 && !DEPLOY_ID.test(id)) throw new TypeError("A deploy id holds 1 to 64 letters, digits, '_' or '-'.");
2011
+ const schema = files.filter((file) => file.path.includes("/schemas/"));
2012
+ const data = files.filter((file) => file.path.includes("/better-supabase-data/"));
2013
+ const body = [...schema, ...data].map((file) => `-- ${file.path}\n${file.contents.trim()}\n`).join("\n");
2014
+ return id === void 0 ? body : `-- better-supabase deploy ${id}\n\n${body}`;
2015
+ }
2016
+ /** A database password for a new project: 32 base64url characters. */
2017
+ function generatePassword() {
2018
+ const bytes = crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(24));
2019
+ let binary = "";
2020
+ for (const byte of bytes) binary += String.fromCodePoint(byte);
2021
+ return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/[=]+$/u, "");
2022
+ }
2023
+ /** The project name the dialog suggests: the preset's name, or `my-app`. */
2024
+ function suggestedProjectName(named) {
2025
+ return named === void 0 ? "my-app" : `my-${named}-app`;
2026
+ }
2027
+ const DASHBOARD = "https://supabase.com/dashboard";
2028
+ function dashboardUrl(ref, page = "") {
2029
+ return `${DASHBOARD}/project/${encodeURIComponent(ref)}${page}`;
1903
2030
  }
1904
- function finish(draft, tenantColumn) {
1905
- const tenant = tenantColumn !== null && draft.columns.some((column) => column.name === tenantColumn) ? tenantColumn : null;
1906
- const primary = new Set(draft.primaryKey);
2031
+ //#endregion
2032
+ //#region src/create/design-history.ts
2033
+ /** How many steps Undo can go back. */
2034
+ const HISTORY_LIMIT = 50;
2035
+ function initialHistory(value) {
1907
2036
  return {
1908
- id: `${draft.schema}.${draft.name}`,
1909
- schema: draft.schema,
1910
- name: draft.name,
1911
- module: draft.module,
1912
- primaryKey: draft.primaryKey,
1913
- foreignKeys: draft.foreignKeys,
1914
- tenantColumn: tenant,
1915
- columns: draft.columns.map((column) => primary.has(column.name) ? {
1916
- ...column,
1917
- nullable: false
1918
- } : column)
2037
+ past: [],
2038
+ present: value,
2039
+ future: [],
2040
+ dragStart: null
2041
+ };
2042
+ }
2043
+ function record(history, previous, next) {
2044
+ return {
2045
+ past: [...history.past, previous].slice(-50),
2046
+ present: next,
2047
+ future: [],
2048
+ dragStart: null
1919
2049
  };
1920
2050
  }
1921
2051
  /**
1922
- * The tables in rendered module SQL: every `create table`, plus the columns
1923
- * and foreign keys later `alter table ... add` statements give them. A
1924
- * `create table` it can't read throws with the file and line, so a new SQL
1925
- * shape fails the tests instead of dropping a table from the diagram.
2052
+ * An undo history. `drag` updates the value without a step while the pointer
2053
+ * moves; `commitDrag` records the whole drag as one step. `amend` replaces the
2054
+ * value in the current step, so a follow-up such as placing a dropped block
2055
+ * stays part of the step that added it. `reset` replaces the value and clears
2056
+ * the history, as loading a link does.
1926
2057
  */
1927
- function parseSchema(files, options = {}) {
1928
- const drafts = /* @__PURE__ */ new Map();
1929
- const code = files.map((file) => ({
1930
- file,
1931
- text: codeOnly(file.contents)
1932
- }));
1933
- for (const { file, text } of code) for (const match of text.matchAll(CREATE_TABLE)) {
1934
- const offset = match.index;
1935
- const head = text.slice(offset).match(CREATE_HEAD);
1936
- const open = head === null ? -1 : offset + head[0].length - 1;
1937
- const body = open === -1 ? void 0 : balanced(text, open);
1938
- const original = body === void 0 ? "" : file.contents.slice(open + 1, open + 1 + body.length);
1939
- if (head === null || body === void 0) throw new Error(`parseSchema can't read the create table at ${file.path}:${lineOf(text, offset)}.`);
1940
- const { schema, table } = qualified(head[1] ?? "");
1941
- const id = `${schema}.${table}`;
1942
- if (drafts.has(id)) continue;
1943
- const draft = {
1944
- schema,
1945
- name: table,
1946
- module: file.module,
1947
- columns: [],
1948
- primaryKey: [],
1949
- foreignKeys: []
2058
+ function undoHistory(current, action) {
2059
+ switch (action.type) {
2060
+ case "apply": return action.value === current.present ? current : record(current, current.dragStart ?? current.present, action.value);
2061
+ case "drag": return {
2062
+ ...current,
2063
+ present: action.value,
2064
+ dragStart: current.dragStart ?? current.present
1950
2065
  };
1951
- for (const element of splitTopLevel(body, original)) if (!addConstraint(draft, element.code)) addColumn(draft, element.code, element.original);
1952
- drafts.set(id, draft);
1953
- }
1954
- for (const { file, text } of code) for (const match of text.matchAll(ALTER_TABLE)) {
1955
- const { schema, table } = qualified(match[1] ?? "");
1956
- const draft = drafts.get(`${schema}.${table}`);
1957
- if (draft === void 0) continue;
1958
- const actions = match[2] ?? "";
1959
- const start = match.index + match[0].lastIndexOf(actions);
1960
- const original = file.contents.slice(start, start + actions.length);
1961
- for (const action of splitTopLevel(actions, original)) {
1962
- const column = /^add\s+column\s+(?:if\s+not\s+exists\s+)?/iu.exec(action.code);
1963
- if (column !== null) addColumn(draft, action.code.slice(column[0].length), action.original.slice(column[0].length));
1964
- else if (/^add\s+/iu.test(action.code)) addConstraint(draft, action.code.replace(/^add\s+/iu, ""));
2066
+ case "commitDrag": return current.dragStart === null ? current : record(current, current.dragStart, current.present);
2067
+ case "amend": return {
2068
+ ...current,
2069
+ present: action.value
2070
+ };
2071
+ case "undo": {
2072
+ const previous = current.past.at(-1);
2073
+ return previous === void 0 ? current : {
2074
+ past: current.past.slice(0, -1),
2075
+ present: previous,
2076
+ future: [current.present, ...current.future],
2077
+ dragStart: null
2078
+ };
2079
+ }
2080
+ case "redo": {
2081
+ const [next, ...future] = current.future;
2082
+ return next === void 0 ? current : {
2083
+ past: [...current.past, current.present].slice(-50),
2084
+ present: next,
2085
+ future,
2086
+ dragStart: null
2087
+ };
1965
2088
  }
2089
+ case "reset": return initialHistory(action.value);
2090
+ default: return action;
1966
2091
  }
1967
- const tenantColumn = options.tenantColumn ?? null;
1968
- return [...drafts.entries()].filter(([id]) => !BOOKKEEPING_TABLES.has(id)).map(([, draft]) => finish(draft, tenantColumn));
1969
2092
  }
2093
+ //#endregion
2094
+ //#region src/create/sample-rows.ts
2095
+ const SAMPLE_ROW_COUNT = 8;
1970
2096
  /**
1971
- * The statements that shape one table, as written: its `create table` and
1972
- * the `alter table` statements after it. Empty when no file creates it.
2097
+ * The columns of `table` a `viewer` can't select: `access: "server"` ones for a
2098
+ * member.
1973
2099
  */
1974
- function tableStatements(files, id) {
1975
- const statements = [];
1976
- for (const file of files) {
1977
- const text = codeOnly(file.contents);
1978
- for (const match of text.matchAll(CREATE_TABLE)) {
1979
- const head = text.slice(match.index).match(CREATE_HEAD);
1980
- if (head === null) continue;
1981
- const { schema, table } = qualified(head[1] ?? "");
1982
- const open = match.index + head[0].length - 1;
1983
- const body = balanced(text, open);
1984
- if (`${schema}.${table}` !== id || body === void 0) continue;
1985
- const end = text.indexOf(";", open + body.length + 1);
1986
- statements.push(file.contents.slice(match.index, end === -1 ? text.length : end + 1));
1987
- }
1988
- for (const match of text.matchAll(ALTER_TABLE)) {
1989
- const { schema, table } = qualified(match[1] ?? "");
1990
- if (`${schema}.${table}` === id) statements.push(file.contents.slice(match.index, match.index + match[0].length));
2100
+ function hiddenColumns(table, viewer) {
2101
+ if (viewer === "server") return [];
2102
+ return Object.entries(table?.columns ?? {}).filter(([, column]) => column.access === "server").map(([key]) => key);
2103
+ }
2104
+ const USERS = "auth.users";
2105
+ const PEOPLE = [
2106
+ "Ada Lovelace",
2107
+ "Grace Hopper",
2108
+ "Alan Turing",
2109
+ "Katherine Johnson",
2110
+ "Edsger Dijkstra",
2111
+ "Barbara Liskov",
2112
+ "Donald Knuth",
2113
+ "Frances Allen"
2114
+ ];
2115
+ const SENTENCES = [
2116
+ "A short note that explains the row.",
2117
+ "Longer text, such as a description or the body of a post.",
2118
+ "Written by the team and edited later.",
2119
+ "Kept for reference."
2120
+ ];
2121
+ const COLORS = [
2122
+ "#2563eb",
2123
+ "#16a34a",
2124
+ "#d97706",
2125
+ "#dc2626",
2126
+ "#7c3aed"
2127
+ ];
2128
+ const TITLE_COLUMNS = [
2129
+ "name",
2130
+ "title",
2131
+ "label",
2132
+ "subject"
2133
+ ];
2134
+ function capitalized(value) {
2135
+ return `${value.charAt(0).toUpperCase()}${value.slice(1)}`.replaceAll("_", " ");
2136
+ }
2137
+ /**
2138
+ * The column a table's rows are named by: its subject title, then a likely name
2139
+ * column.
2140
+ */
2141
+ function titleColumnOf(table) {
2142
+ const text = new Set(Object.entries(table.columns ?? {}).filter(([, column]) => column.type === "text" && column.format === void 0).map(([key]) => key));
2143
+ return table.subject?.title ?? TITLE_COLUMNS.find((key) => text.has(key));
2144
+ }
2145
+ /**
2146
+ * The name of row `index` of `table`, so a reference shows the row it points
2147
+ * at.
2148
+ */
2149
+ function rowTitle(table, index) {
2150
+ return `${capitalized(singular(table))} ${String(index + 1)}`;
2151
+ }
2152
+ function pad(value) {
2153
+ return String(value).padStart(2, "0");
2154
+ }
2155
+ /** A date `days` after 5 January 2026, as `YYYY-MM-DD`. */
2156
+ function dayAfter(days) {
2157
+ const date = new Date(Date.UTC(2026, 0, 5 + days));
2158
+ return `${String(date.getUTCFullYear())}-${pad(date.getUTCMonth() + 1)}-${pad(date.getUTCDate())}`;
2159
+ }
2160
+ function numberIn(column, index, step) {
2161
+ const value = (column.min ?? 0) + index * step;
2162
+ return column.max === void 0 ? value : Math.min(value, column.max);
2163
+ }
2164
+ function formatted(column, index, slug) {
2165
+ switch (column.format) {
2166
+ case void 0: return;
2167
+ case "email": return `${(PEOPLE[index % PEOPLE.length] ?? "user").split(" ")[0]?.toLowerCase() ?? "user"}@example.com`;
2168
+ case "url": return `https://example.com/${slug}/${String(index + 1)}`;
2169
+ case "phone": return `+1 555 01${pad(index + 10)}`;
2170
+ case "long_text": return SENTENCES[index % SENTENCES.length] ?? "";
2171
+ case "color": return COLORS[index % COLORS.length] ?? "#000000";
2172
+ case "rating": {
2173
+ const min = column.min ?? 1;
2174
+ const max = column.max ?? 5;
2175
+ return String(min + index % (max - min + 1));
1991
2176
  }
2177
+ case "percent": return String(index * 17 % 101);
2178
+ case "currency": return ((index + 1) * 1250 / 100).toFixed(2);
2179
+ default: return column.format;
1992
2180
  }
1993
- return statements;
1994
2181
  }
1995
- /** The foreign keys between tables, one per pair, with the targets outside the schema named by id. */
1996
- function schemaRelations(tables) {
1997
- const seen = /* @__PURE__ */ new Set();
1998
- return tables.flatMap((table) => table.foreignKeys.flatMap((key) => {
1999
- const to = `${key.target.schema}.${key.target.table}`;
2000
- const pair = `${table.id}>${to}`;
2001
- if (to === table.id || seen.has(pair)) return [];
2002
- seen.add(pair);
2003
- return [{
2004
- from: table.id,
2005
- to
2006
- }];
2007
- }));
2182
+ function referenceValue(column, index) {
2183
+ const reference = column.references;
2184
+ if (reference === void 0) return;
2185
+ if (reference.block === void 0 && reference.table === USERS) return PEOPLE[index % PEOPLE.length] ?? "";
2186
+ return rowTitle(reference.table, index % 3);
2187
+ }
2188
+ function typedValue(column, index, slug) {
2189
+ switch (column.type) {
2190
+ case "text": return `${capitalized(slug)} ${String(index + 1)}`;
2191
+ case "uuid": return `00000000-0000-4000-8000-${String(index + 1).padStart(12, "0")}`;
2192
+ case "integer":
2193
+ case "bigint": return String(column.identity === true ? index + 1 : numberIn(column, index, 3));
2194
+ case "numeric": return numberIn(column, index, 2.5).toFixed(2);
2195
+ case "boolean": return String(index % 2 === 0);
2196
+ case "timestamptz": return `${dayAfter(index * 2)} ${pad(9 + index % 8)}:00`;
2197
+ case "date": return dayAfter(index * 3);
2198
+ case "jsonb": return "{}";
2199
+ case "text[]": return "{}";
2200
+ default: return column.type;
2201
+ }
2202
+ }
2203
+ function cell(table, key, column, index, title) {
2204
+ if (key === title) return rowTitle(table, index);
2205
+ if (column.nullable !== false && index % 4 === 3) return null;
2206
+ if (column.options !== void 0 && column.options.length > 0) return column.options[index % column.options.length] ?? null;
2207
+ return referenceValue(column, index) ?? formatted(column, index, key) ?? typedValue(column, index, key);
2208
+ }
2209
+ /**
2210
+ * Deterministic sample rows for app table `name`, from its columns' types,
2211
+ * formats, options, bounds and references. A reference shows the name of the
2212
+ * row it points at, so rows of related tables line up. A `member` viewer
2213
+ * doesn't get the columns `hiddenColumns` lists.
2214
+ */
2215
+ function sampleRows(design, name, count = 8, viewer = "server") {
2216
+ const table = design.appTables?.[name];
2217
+ if (table === void 0) return {
2218
+ columns: [],
2219
+ rows: []
2220
+ };
2221
+ const hidden = new Set(hiddenColumns(table, viewer));
2222
+ const entries = Object.entries(table.columns ?? {}).filter(([key]) => !hidden.has(key));
2223
+ const title = titleColumnOf(table);
2224
+ return {
2225
+ columns: entries.map(([key]) => key),
2226
+ rows: Array.from({ length: count }, (_, index) => Object.fromEntries(entries.map(([key, column]) => [key, cell(name, key, column, index, title)])))
2227
+ };
2008
2228
  }
2009
2229
  //#endregion
2010
2230
  //#region src/create/migration.ts
2011
2231
  /** The module whose file holds the app's own tables. */
2012
2232
  const APP_TABLES_MODULE = "app-tables";
2013
2233
  /**
2014
- * The migration that takes a project deployed from `base` to `next`, for
2015
- * added tables and added columns only. The rendered app-table SQL is
2016
- * idempotent (`create table if not exists`, `add column if not exists`,
2017
- * `drop policy if exists`), so the migration is the re-rendered file.
2018
- * Anything else, such as a rename, a retype, a changed default or a change
2019
- * outside `appTables`, is refused so a deploy never guesses.
2234
+ * The migration that takes a project deployed from `base` to `next`, for added
2235
+ * tables and added columns only. The rendered app-table SQL is idempotent
2236
+ * (`create table if not exists`, `add column if not exists`, `drop policy if
2237
+ * exists`), so the migration is the re-rendered file. Anything else, such as a
2238
+ * rename, a retype, a changed default or a change outside `appTables`, is
2239
+ * refused so a deploy never guesses.
2020
2240
  */
2021
2241
  function migrationBetween(code, base, next) {
2022
2242
  const changes = diffDesigns(base, next);
@@ -2046,4 +2266,4 @@ function migrationBetween(code, base, next) {
2046
2266
  };
2047
2267
  }
2048
2268
  //#endregion
2049
- export { APP_MODULE, COLUMN_KINDS, EMPTY_DESIGN, HISTORY_LIMIT, KIND_GROUPS, MIGRATION_NAME, APP_ON_DELETE_ACTIONS as ON_DELETE_ACTIONS, ROLLUP_AGGREGATES, SAMPLE_ROW_COUNT, addTable, appTableId, boundError, columnError, columnLabel, computedColumnRenamed, computedRows, computedTableRenamed, connect, dashboardUrl, defaultError, deleteColumn, deleteExtraColumn, deleteTable, deployBlocker, deployQuery, designIssues, duplicateTable, editTable, eventsColumnsEdited, filterColumns, fitted, fittedRollup, freeTableName, generatePassword, hiddenColumns, identifierError, initialHistory, isAppTable, isEmptyDesign, isRollupAggregate, keyColumnsOf, kindById, kindOf, lockedWithoutDefault, lookupSources, migrationBetween, moveTables, optionError, parseSchema, previewAccessProvider, previewFiles, prunedComputed, readableColumns, referenceFrom, renameColumn, renameTable, rollupColumns, rollupSources, sampleRows, schemaData, schemaRelations, setColumn, setColumnKind, setExtraColumn, setTableId, singular, subjectColumns, subjectColumnsEdited, subjectTypeError, suggestedProjectName, tableStatements, tableWithComputed, tableWithoutComputed, takesBounds, tenantColumnOf, tidy, undoHistory, updateTable, userConnection, withBounds, withDesign, withKind };
2269
+ export { APP_MODULE, COLUMN_KINDS, EMPTY_DESIGN, HISTORY_LIMIT, KIND_GROUPS, MIGRATION_NAME, APP_ON_DELETE_ACTIONS as ON_DELETE_ACTIONS, ROLLUP_AGGREGATES, SAMPLE_ROW_COUNT, addTable, appTableId, boundError, checkDesign, columnError, columnLabel, computedColumnRenamed, computedRows, computedTableRenamed, connect, dashboardUrl, defaultError, deleteColumn, deleteExtraColumn, deleteTable, deployBlocker, deployQuery, designIssues, duplicateTable, editTable, eventsColumnsEdited, filterColumns, fitted, fittedRollup, freeTableName, generatePassword, hiddenColumns, identifierError, initialHistory, isAppTable, isEmptyDesign, isRollupAggregate, keyColumnsOf, kindById, kindOf, lockedWithoutDefault, lookupSources, migrationBetween, moveTables, newDeployId, optionError, parseSchema, previewAccessProvider, previewFiles, prunedComputed, readableColumns, referenceFrom, renameColumn, renameTable, rollupColumns, rollupSources, sampleRows, schemaData, schemaRelations, setColumn, setColumnKind, setExtraColumn, setTableId, singular, subjectColumns, subjectColumnsEdited, subjectTypeError, suggestedProjectName, tableStatements, tableWithComputed, tableWithoutComputed, takesBounds, tenantColumnOf, tidy, undoHistory, updateTable, userConnection, withBounds, withDesign, withKind };