better-supabase 0.8.0 → 0.10.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 (1392) hide show
  1. package/README.md +147 -83
  2. package/bin/better-supabase.js +14 -2
  3. package/dist/access-sql-DUSSMaC3.js +201 -0
  4. package/dist/actor-BAhb-d1S.d.ts +104 -0
  5. package/dist/actor-KHDOKGb1.js +151 -0
  6. package/dist/adapter-rmWaLNe3.js +1984 -0
  7. package/dist/agents-ByYUSZxT.d.ts +111 -0
  8. package/dist/ai-cache-CkxtAt4P.d.ts +70 -0
  9. package/dist/ai-cache-DPiuJ-zJ.js +84 -0
  10. package/dist/ai-chat-al8b3spK.d.ts +608 -0
  11. package/dist/ai-files-BXtV3ygd.js +331 -0
  12. package/dist/ai-sdk/agents/index.d.ts +154 -10
  13. package/dist/ai-sdk/agents/index.js +172 -17
  14. package/dist/ai-sdk/batches/index.d.ts +4 -4
  15. package/dist/ai-sdk/batches/index.js +5 -5
  16. package/dist/ai-sdk/cache/index.d.ts +2 -2
  17. package/dist/ai-sdk/cache/index.js +1 -1
  18. package/dist/ai-sdk/chat/index.d.ts +1 -1
  19. package/dist/ai-sdk/chat/index.js +7 -6
  20. package/dist/ai-sdk/embeddings/index.d.ts +3 -3
  21. package/dist/ai-sdk/embeddings/index.js +1 -2
  22. package/dist/ai-sdk/files/index.d.ts +2 -2
  23. package/dist/ai-sdk/files/index.js +4 -4
  24. package/dist/ai-sdk/index.d.ts +7 -6
  25. package/dist/ai-sdk/index.js +4 -3
  26. package/dist/ai-sdk/mcp/index.d.ts +4 -4
  27. package/dist/ai-sdk/mcp/index.js +6 -6
  28. package/dist/ai-sdk/memory/index.d.ts +5 -2
  29. package/dist/ai-sdk/memory/index.js +2 -2
  30. package/dist/ai-sdk/react/index.js +1 -2
  31. package/dist/ai-sdk/workflow/index.d.ts +5 -4
  32. package/dist/ai-sdk/workflow/index.js +8 -8
  33. package/dist/ai-tasks-Di0gmJOX.d.ts +157 -0
  34. package/dist/announcements-HF7LuFw5.js +128 -0
  35. package/dist/api-CFjuYKFY.js +680 -0
  36. package/dist/api-XJcQON_7.d.ts +411 -0
  37. package/dist/api-keys-C1IZF7p8.js +318 -0
  38. package/dist/api-keys-EdSNjGIZ.d.ts +205 -0
  39. package/dist/app-tables-BRjMcWhW.js +819 -0
  40. package/dist/app-tables-DVidEHOI.d.ts +35 -0
  41. package/dist/approvals-DqlPHBHI.d.ts +124 -0
  42. package/dist/arazzo/index.d.ts +5 -5
  43. package/dist/arazzo/index.js +6 -6
  44. package/dist/assistant-BZyhQ8bd.d.ts +148 -0
  45. package/dist/astro/index.d.ts +9 -8
  46. package/dist/astro/index.js +10 -7
  47. package/dist/asyncapi/index.d.ts +4 -4
  48. package/dist/asyncapi/index.js +6 -6
  49. package/dist/attachments-C8FEBBKE.js +264 -0
  50. package/dist/attributes-D4mA7WhI.js +38 -0
  51. package/dist/audit-log-CRgiHlRh.js +786 -0
  52. package/dist/auth-CdBKt0CS.js +20 -0
  53. package/dist/auth-reply-B_dW4jHJ.js +31 -0
  54. package/dist/auth-reply-Dj124sbX.d.ts +11 -0
  55. package/dist/authorization-CdJRoZgV.d.ts +1435 -0
  56. package/dist/authorization-hooks-Do5djkpz.d.ts +214 -0
  57. package/dist/authorizer-dVVN05Un.js +126 -0
  58. package/dist/base64-BmeCBgGo.js +42 -0
  59. package/dist/batch-limit-DKVQDz4o.js +5 -0
  60. package/dist/before-route-B98js9m_.js +30 -0
  61. package/dist/better-result/index.d.ts +5 -5
  62. package/dist/better-result/index.js +1 -1
  63. package/dist/bind-DkaP_0iS.d.ts +70 -0
  64. package/dist/block-env-CBd_SoL5.js +29 -0
  65. package/dist/block-env-Dxl7rsI0.d.ts +10 -0
  66. package/dist/block-events-DD9Q_NUz.js +96 -0
  67. package/dist/block-fields-5UA84ZUg.d.ts +55 -0
  68. package/dist/block-fields-BANwJ9Y_.js +139 -0
  69. package/dist/block-helpers-7pMBVsE6.d.ts +37 -0
  70. package/dist/block-helpers-BfVCR5Fc.js +264 -0
  71. package/dist/block-hooks-ByKlh8Qy.js +114 -0
  72. package/dist/block-hooks-C_WaodoA.d.ts +107 -0
  73. package/dist/block-transport-G4t1umrR.js +85 -0
  74. package/dist/block-transport-NbUJygA7.d.ts +70 -0
  75. package/dist/blocks/access-requests/index.d.ts +98 -0
  76. package/dist/blocks/access-requests/index.js +99 -0
  77. package/dist/blocks/agents/index.d.ts +21 -3
  78. package/dist/blocks/agents/index.js +64 -18
  79. package/dist/blocks/ai-cache/index.d.ts +7 -2
  80. package/dist/blocks/ai-cache/index.js +15 -3
  81. package/dist/blocks/ai-chat/index.d.ts +22 -3
  82. package/dist/blocks/ai-chat/index.js +29 -3
  83. package/dist/blocks/ai-chat/react/index.d.ts +12 -46
  84. package/dist/blocks/ai-chat/react/index.js +43 -335
  85. package/dist/blocks/ai-chat/solid/index.d.ts +34 -0
  86. package/dist/blocks/ai-chat/solid/index.js +41 -0
  87. package/dist/blocks/ai-chat/svelte/index.d.ts +34 -0
  88. package/dist/blocks/ai-chat/svelte/index.js +41 -0
  89. package/dist/blocks/ai-chat/vue/index.d.ts +34 -0
  90. package/dist/blocks/ai-chat/vue/index.js +41 -0
  91. package/dist/blocks/ai-files/index.d.ts +10 -3
  92. package/dist/blocks/ai-files/index.js +16 -3
  93. package/dist/blocks/ai-providers/index.d.ts +18 -3
  94. package/dist/blocks/ai-providers/index.js +40 -15
  95. package/dist/blocks/ai-tasks/index.d.ts +9 -2
  96. package/dist/blocks/ai-tasks/index.js +70 -21
  97. package/dist/blocks/announcements/index.d.ts +18 -3
  98. package/dist/blocks/announcements/index.js +27 -3
  99. package/dist/blocks/announcements/react/index.d.ts +4 -14
  100. package/dist/blocks/announcements/react/index.js +22 -70
  101. package/dist/blocks/announcements/solid/index.d.ts +13 -0
  102. package/dist/blocks/announcements/solid/index.js +14 -0
  103. package/dist/blocks/announcements/svelte/index.d.ts +13 -0
  104. package/dist/blocks/announcements/svelte/index.js +14 -0
  105. package/dist/blocks/announcements/vue/index.d.ts +13 -0
  106. package/dist/blocks/announcements/vue/index.js +14 -0
  107. package/dist/blocks/api-keys/index.d.ts +24 -7
  108. package/dist/blocks/api-keys/index.js +29 -294
  109. package/dist/blocks/api-keys/react/index.d.ts +29 -0
  110. package/dist/blocks/api-keys/react/index.js +43 -0
  111. package/dist/blocks/api-keys/react/server.d.ts +7 -0
  112. package/dist/blocks/api-keys/react/server.js +7 -0
  113. package/dist/blocks/api-keys/solid/index.d.ts +13 -0
  114. package/dist/blocks/api-keys/solid/index.js +14 -0
  115. package/dist/blocks/api-keys/svelte/index.d.ts +13 -0
  116. package/dist/blocks/api-keys/svelte/index.js +14 -0
  117. package/dist/blocks/api-keys/vue/index.d.ts +13 -0
  118. package/dist/blocks/api-keys/vue/index.js +14 -0
  119. package/dist/blocks/approvals/index.d.ts +22 -0
  120. package/dist/blocks/approvals/index.js +189 -0
  121. package/dist/blocks/attachments/index.d.ts +18 -227
  122. package/dist/blocks/attachments/index.js +26 -242
  123. package/dist/blocks/audit/index.d.ts +72 -365
  124. package/dist/blocks/audit/index.js +91 -714
  125. package/dist/blocks/audit/react/index.d.ts +26 -0
  126. package/dist/blocks/audit/react/index.js +44 -0
  127. package/dist/blocks/audit/react/server.d.ts +7 -0
  128. package/dist/blocks/audit/react/server.js +7 -0
  129. package/dist/blocks/audit/solid/index.d.ts +13 -0
  130. package/dist/blocks/audit/solid/index.js +14 -0
  131. package/dist/blocks/audit/svelte/index.d.ts +13 -0
  132. package/dist/blocks/audit/svelte/index.js +14 -0
  133. package/dist/blocks/audit/vue/index.d.ts +13 -0
  134. package/dist/blocks/audit/vue/index.js +14 -0
  135. package/dist/blocks/billing/index.d.ts +37 -12
  136. package/dist/blocks/billing/index.js +43 -12
  137. package/dist/blocks/billing/react/index.d.ts +34 -0
  138. package/dist/blocks/billing/react/index.js +36 -0
  139. package/dist/blocks/billing/react/server.d.ts +7 -0
  140. package/dist/blocks/billing/react/server.js +7 -0
  141. package/dist/blocks/billing/solid/index.d.ts +15 -0
  142. package/dist/blocks/billing/solid/index.js +14 -0
  143. package/dist/blocks/billing/svelte/index.d.ts +15 -0
  144. package/dist/blocks/billing/svelte/index.js +14 -0
  145. package/dist/blocks/billing/vue/index.d.ts +15 -0
  146. package/dist/blocks/billing/vue/index.js +14 -0
  147. package/dist/blocks/bookings/index.d.ts +36 -0
  148. package/dist/blocks/bookings/index.js +28 -0
  149. package/dist/blocks/bookings/react/index.d.ts +31 -0
  150. package/dist/blocks/bookings/react/index.js +59 -0
  151. package/dist/blocks/bookings/react/server.d.ts +6 -0
  152. package/dist/blocks/bookings/react/server.js +7 -0
  153. package/dist/blocks/bookings/solid/index.d.ts +13 -0
  154. package/dist/blocks/bookings/solid/index.js +14 -0
  155. package/dist/blocks/bookings/svelte/index.d.ts +13 -0
  156. package/dist/blocks/bookings/svelte/index.js +14 -0
  157. package/dist/blocks/bookings/vue/index.d.ts +13 -0
  158. package/dist/blocks/bookings/vue/index.js +14 -0
  159. package/dist/blocks/bulk/index.d.ts +146 -0
  160. package/dist/blocks/bulk/index.js +154 -0
  161. package/dist/blocks/calendar/index.d.ts +20 -0
  162. package/dist/blocks/calendar/index.js +33 -0
  163. package/dist/blocks/calendar/react/index.d.ts +26 -0
  164. package/dist/blocks/calendar/react/index.js +58 -0
  165. package/dist/blocks/calendar/react/server.d.ts +6 -0
  166. package/dist/blocks/calendar/react/server.js +7 -0
  167. package/dist/blocks/calendar/solid/index.d.ts +13 -0
  168. package/dist/blocks/calendar/solid/index.js +14 -0
  169. package/dist/blocks/calendar/svelte/index.d.ts +13 -0
  170. package/dist/blocks/calendar/svelte/index.js +14 -0
  171. package/dist/blocks/calendar/vue/index.d.ts +13 -0
  172. package/dist/blocks/calendar/vue/index.js +14 -0
  173. package/dist/blocks/catalog/index.d.ts +224 -0
  174. package/dist/blocks/catalog/index.js +292 -0
  175. package/dist/blocks/collections/index.d.ts +184 -0
  176. package/dist/blocks/collections/index.js +208 -0
  177. package/dist/blocks/comments/index.d.ts +19 -166
  178. package/dist/blocks/comments/index.js +26 -207
  179. package/dist/blocks/comments/react/index.d.ts +27 -0
  180. package/dist/blocks/comments/react/index.js +45 -0
  181. package/dist/blocks/comments/react/server.d.ts +7 -0
  182. package/dist/blocks/comments/react/server.js +7 -0
  183. package/dist/blocks/comments/solid/index.d.ts +13 -0
  184. package/dist/blocks/comments/solid/index.js +14 -0
  185. package/dist/blocks/comments/svelte/index.d.ts +13 -0
  186. package/dist/blocks/comments/svelte/index.js +14 -0
  187. package/dist/blocks/comments/vue/index.d.ts +13 -0
  188. package/dist/blocks/comments/vue/index.js +14 -0
  189. package/dist/blocks/connectors/index.d.ts +21 -3
  190. package/dist/blocks/connectors/index.js +53 -18
  191. package/dist/blocks/custom-fields/index.d.ts +62 -0
  192. package/dist/blocks/custom-fields/index.js +85 -0
  193. package/dist/blocks/data-lifecycle/index.d.ts +114 -9
  194. package/dist/blocks/data-lifecycle/index.js +98 -12
  195. package/dist/blocks/deals/index.d.ts +262 -0
  196. package/dist/blocks/deals/index.js +380 -0
  197. package/dist/blocks/documents/index.d.ts +17 -0
  198. package/dist/blocks/documents/index.js +118 -0
  199. package/dist/blocks/domains/index.d.ts +117 -0
  200. package/dist/blocks/domains/index.js +118 -0
  201. package/dist/blocks/drive/index.d.ts +296 -0
  202. package/dist/blocks/drive/index.js +483 -0
  203. package/dist/blocks/employees/index.d.ts +205 -0
  204. package/dist/blocks/employees/index.js +289 -0
  205. package/dist/blocks/engagements/index.d.ts +125 -0
  206. package/dist/blocks/engagements/index.js +143 -0
  207. package/dist/blocks/entitlements/index.d.ts +40 -4
  208. package/dist/blocks/entitlements/index.js +14 -24
  209. package/dist/blocks/entitlements/react/index.d.ts +24 -0
  210. package/dist/blocks/entitlements/react/index.js +35 -0
  211. package/dist/blocks/entitlements/react/server.d.ts +6 -0
  212. package/dist/blocks/entitlements/react/server.js +7 -0
  213. package/dist/blocks/entitlements/solid/index.d.ts +13 -0
  214. package/dist/blocks/entitlements/solid/index.js +14 -0
  215. package/dist/blocks/entitlements/svelte/index.d.ts +13 -0
  216. package/dist/blocks/entitlements/svelte/index.js +14 -0
  217. package/dist/blocks/entitlements/vue/index.d.ts +13 -0
  218. package/dist/blocks/entitlements/vue/index.js +14 -0
  219. package/dist/blocks/flags/index.d.ts +61 -187
  220. package/dist/blocks/flags/index.js +65 -253
  221. package/dist/blocks/forms/index.d.ts +302 -0
  222. package/dist/blocks/forms/index.js +341 -0
  223. package/dist/blocks/forms/react/index.d.ts +16 -0
  224. package/dist/blocks/forms/react/index.js +25 -0
  225. package/dist/blocks/forms/react/server.d.ts +6 -0
  226. package/dist/blocks/forms/react/server.js +7 -0
  227. package/dist/blocks/forms/solid/index.d.ts +13 -0
  228. package/dist/blocks/forms/solid/index.js +14 -0
  229. package/dist/blocks/forms/svelte/index.d.ts +13 -0
  230. package/dist/blocks/forms/svelte/index.js +14 -0
  231. package/dist/blocks/forms/vue/index.d.ts +13 -0
  232. package/dist/blocks/forms/vue/index.js +14 -0
  233. package/dist/blocks/hiring/index.d.ts +154 -0
  234. package/dist/blocks/hiring/index.js +180 -0
  235. package/dist/blocks/identities/index.d.ts +83 -0
  236. package/dist/blocks/identities/index.js +103 -0
  237. package/dist/blocks/imports/index.d.ts +159 -0
  238. package/dist/blocks/imports/index.js +227 -0
  239. package/dist/blocks/inbox/index.d.ts +22 -3
  240. package/dist/blocks/inbox/index.js +77 -4
  241. package/dist/blocks/inbox/react/index.d.ts +3 -2
  242. package/dist/blocks/inbox/react/index.js +55 -199
  243. package/dist/blocks/inbox/react/server.d.ts +2 -1
  244. package/dist/blocks/inbox/solid/index.d.ts +27 -0
  245. package/dist/blocks/inbox/solid/index.js +32 -0
  246. package/dist/blocks/inbox/svelte/index.d.ts +27 -0
  247. package/dist/blocks/inbox/svelte/index.js +32 -0
  248. package/dist/blocks/inbox/vue/index.d.ts +27 -0
  249. package/dist/blocks/inbox/vue/index.js +32 -0
  250. package/dist/blocks/index.d.ts +25 -61
  251. package/dist/blocks/index.js +192 -56
  252. package/dist/blocks/inventory/index.d.ts +181 -0
  253. package/dist/blocks/inventory/index.js +219 -0
  254. package/dist/blocks/invoices/index.d.ts +154 -0
  255. package/dist/blocks/invoices/index.js +216 -0
  256. package/dist/blocks/jobs/index.d.ts +156 -33
  257. package/dist/blocks/jobs/index.js +675 -261
  258. package/dist/blocks/knowledge/index.d.ts +10 -3
  259. package/dist/blocks/knowledge/index.js +17 -3
  260. package/dist/blocks/leave/index.d.ts +241 -0
  261. package/dist/blocks/leave/index.js +209 -0
  262. package/dist/blocks/memory/index.d.ts +9 -4
  263. package/dist/blocks/memory/index.js +48 -12
  264. package/dist/blocks/metrics/index.d.ts +174 -0
  265. package/dist/blocks/metrics/index.js +217 -0
  266. package/dist/blocks/mfa/index.d.ts +7 -0
  267. package/dist/blocks/mfa/index.js +12 -0
  268. package/dist/blocks/mfa/react/index.d.ts +30 -0
  269. package/dist/blocks/mfa/react/index.js +45 -0
  270. package/dist/blocks/mfa/react/server.d.ts +9 -0
  271. package/dist/blocks/mfa/react/server.js +12 -0
  272. package/dist/blocks/mfa/solid/index.d.ts +20 -0
  273. package/dist/blocks/mfa/solid/index.js +23 -0
  274. package/dist/blocks/mfa/svelte/index.d.ts +20 -0
  275. package/dist/blocks/mfa/svelte/index.js +23 -0
  276. package/dist/blocks/mfa/vue/index.d.ts +20 -0
  277. package/dist/blocks/mfa/vue/index.js +23 -0
  278. package/dist/blocks/notifications/index.d.ts +342 -25
  279. package/dist/blocks/notifications/index.js +733 -104
  280. package/dist/blocks/notifications/react/index.d.ts +7 -32
  281. package/dist/blocks/notifications/react/index.js +23 -49
  282. package/dist/blocks/notifications/react/server.d.ts +2 -1
  283. package/dist/blocks/notifications/solid/index.d.ts +13 -0
  284. package/dist/blocks/notifications/solid/index.js +14 -0
  285. package/dist/blocks/notifications/svelte/index.d.ts +13 -0
  286. package/dist/blocks/notifications/svelte/index.js +14 -0
  287. package/dist/blocks/notifications/vue/index.d.ts +13 -0
  288. package/dist/blocks/notifications/vue/index.js +14 -0
  289. package/dist/blocks/number-sequences/index.d.ts +45 -0
  290. package/dist/blocks/number-sequences/index.js +49 -0
  291. package/dist/blocks/oauth-server/index.d.ts +228 -0
  292. package/dist/blocks/oauth-server/index.js +309 -0
  293. package/dist/blocks/onboarding/index.d.ts +8 -3
  294. package/dist/blocks/onboarding/index.js +17 -63
  295. package/dist/blocks/onboarding/react/index.d.ts +3 -12
  296. package/dist/blocks/onboarding/react/index.js +18 -60
  297. package/dist/blocks/onboarding/react/server.d.ts +2 -2
  298. package/dist/blocks/onboarding/react/server.js +2 -2
  299. package/dist/blocks/onboarding/solid/index.d.ts +13 -0
  300. package/dist/blocks/onboarding/solid/index.js +14 -0
  301. package/dist/blocks/onboarding/svelte/index.d.ts +13 -0
  302. package/dist/blocks/onboarding/svelte/index.js +14 -0
  303. package/dist/blocks/onboarding/vue/index.d.ts +13 -0
  304. package/dist/blocks/onboarding/vue/index.js +14 -0
  305. package/dist/blocks/orders/index.d.ts +264 -0
  306. package/dist/blocks/orders/index.js +589 -0
  307. package/dist/blocks/organizations/index.d.ts +31 -238
  308. package/dist/blocks/organizations/index.js +49 -392
  309. package/dist/blocks/organizations/react/index.d.ts +108 -0
  310. package/dist/blocks/organizations/react/index.js +113 -0
  311. package/dist/blocks/organizations/react/server.d.ts +11 -0
  312. package/dist/blocks/organizations/react/server.js +15 -0
  313. package/dist/blocks/organizations/solid/index.d.ts +34 -0
  314. package/dist/blocks/organizations/solid/index.js +32 -0
  315. package/dist/blocks/organizations/svelte/index.d.ts +34 -0
  316. package/dist/blocks/organizations/svelte/index.js +32 -0
  317. package/dist/blocks/organizations/vue/index.d.ts +34 -0
  318. package/dist/blocks/organizations/vue/index.js +32 -0
  319. package/dist/blocks/outbox/index.d.ts +12 -3
  320. package/dist/blocks/outbox/index.js +85 -46
  321. package/dist/blocks/parties/index.d.ts +181 -0
  322. package/dist/blocks/parties/index.js +258 -0
  323. package/dist/blocks/pipelines/index.d.ts +189 -0
  324. package/dist/blocks/pipelines/index.js +204 -0
  325. package/dist/blocks/profiles/index.d.ts +13 -8
  326. package/dist/blocks/profiles/index.js +19 -6
  327. package/dist/blocks/promotions/index.d.ts +125 -0
  328. package/dist/blocks/promotions/index.js +123 -0
  329. package/dist/blocks/push/index.d.ts +48 -28
  330. package/dist/blocks/push/index.js +45 -16
  331. package/dist/blocks/quotes/index.d.ts +152 -0
  332. package/dist/blocks/quotes/index.js +209 -0
  333. package/dist/blocks/rank/index.d.ts +71 -0
  334. package/dist/blocks/rank/index.js +53 -0
  335. package/dist/blocks/reactions/index.d.ts +18 -0
  336. package/dist/blocks/reactions/index.js +26 -0
  337. package/dist/blocks/reactions/react/index.d.ts +23 -0
  338. package/dist/blocks/reactions/react/index.js +46 -0
  339. package/dist/blocks/reactions/react/server.d.ts +6 -0
  340. package/dist/blocks/reactions/react/server.js +7 -0
  341. package/dist/blocks/reactions/solid/index.d.ts +13 -0
  342. package/dist/blocks/reactions/solid/index.js +14 -0
  343. package/dist/blocks/reactions/svelte/index.d.ts +13 -0
  344. package/dist/blocks/reactions/svelte/index.js +14 -0
  345. package/dist/blocks/reactions/vue/index.d.ts +13 -0
  346. package/dist/blocks/reactions/vue/index.js +14 -0
  347. package/dist/blocks/relations/index.d.ts +180 -0
  348. package/dist/blocks/relations/index.js +254 -0
  349. package/dist/blocks/reminders/index.d.ts +177 -0
  350. package/dist/blocks/reminders/index.js +171 -0
  351. package/dist/blocks/reviews/index.d.ts +148 -0
  352. package/dist/blocks/reviews/index.js +139 -0
  353. package/dist/blocks/rules/index.d.ts +169 -0
  354. package/dist/blocks/rules/index.js +163 -0
  355. package/dist/blocks/rules/react/index.d.ts +34 -0
  356. package/dist/blocks/rules/react/index.js +55 -0
  357. package/dist/blocks/rules/react/server.d.ts +6 -0
  358. package/dist/blocks/rules/react/server.js +7 -0
  359. package/dist/blocks/rules/solid/index.d.ts +13 -0
  360. package/dist/blocks/rules/solid/index.js +14 -0
  361. package/dist/blocks/rules/svelte/index.d.ts +13 -0
  362. package/dist/blocks/rules/svelte/index.js +14 -0
  363. package/dist/blocks/rules/vue/index.d.ts +13 -0
  364. package/dist/blocks/rules/vue/index.js +14 -0
  365. package/dist/blocks/saved-views/index.d.ts +17 -0
  366. package/dist/blocks/saved-views/index.js +29 -0
  367. package/dist/blocks/saved-views/react/index.d.ts +34 -0
  368. package/dist/blocks/saved-views/react/index.js +57 -0
  369. package/dist/blocks/saved-views/react/server.d.ts +7 -0
  370. package/dist/blocks/saved-views/react/server.js +7 -0
  371. package/dist/blocks/saved-views/solid/index.d.ts +13 -0
  372. package/dist/blocks/saved-views/solid/index.js +14 -0
  373. package/dist/blocks/saved-views/svelte/index.d.ts +13 -0
  374. package/dist/blocks/saved-views/svelte/index.js +14 -0
  375. package/dist/blocks/saved-views/vue/index.d.ts +13 -0
  376. package/dist/blocks/saved-views/vue/index.js +14 -0
  377. package/dist/blocks/search/index.d.ts +31 -0
  378. package/dist/blocks/search/index.js +61 -0
  379. package/dist/blocks/search/react/index.d.ts +36 -0
  380. package/dist/blocks/search/react/index.js +49 -0
  381. package/dist/blocks/search/react/server.d.ts +7 -0
  382. package/dist/blocks/search/react/server.js +8 -0
  383. package/dist/blocks/search/solid/index.d.ts +13 -0
  384. package/dist/blocks/search/solid/index.js +14 -0
  385. package/dist/blocks/search/svelte/index.d.ts +13 -0
  386. package/dist/blocks/search/svelte/index.js +14 -0
  387. package/dist/blocks/search/vue/index.d.ts +13 -0
  388. package/dist/blocks/search/vue/index.js +14 -0
  389. package/dist/blocks/service-principals/index.d.ts +126 -0
  390. package/dist/blocks/service-principals/index.js +107 -0
  391. package/dist/blocks/sessions/index.d.ts +7 -0
  392. package/dist/blocks/sessions/index.js +14 -0
  393. package/dist/blocks/sessions/react/index.d.ts +31 -0
  394. package/dist/blocks/sessions/react/index.js +51 -0
  395. package/dist/blocks/sessions/react/server.d.ts +9 -0
  396. package/dist/blocks/sessions/react/server.js +11 -0
  397. package/dist/blocks/sessions/solid/index.d.ts +20 -0
  398. package/dist/blocks/sessions/solid/index.js +23 -0
  399. package/dist/blocks/sessions/svelte/index.d.ts +20 -0
  400. package/dist/blocks/sessions/svelte/index.js +23 -0
  401. package/dist/blocks/sessions/vue/index.d.ts +20 -0
  402. package/dist/blocks/sessions/vue/index.js +23 -0
  403. package/dist/blocks/settings/index.d.ts +20 -86
  404. package/dist/blocks/settings/index.js +28 -102
  405. package/dist/blocks/settings/react/index.d.ts +25 -0
  406. package/dist/blocks/settings/react/index.js +37 -0
  407. package/dist/blocks/settings/react/server.d.ts +7 -0
  408. package/dist/blocks/settings/react/server.js +7 -0
  409. package/dist/blocks/settings/solid/index.d.ts +13 -0
  410. package/dist/blocks/settings/solid/index.js +14 -0
  411. package/dist/blocks/settings/svelte/index.d.ts +13 -0
  412. package/dist/blocks/settings/svelte/index.js +14 -0
  413. package/dist/blocks/settings/vue/index.d.ts +13 -0
  414. package/dist/blocks/settings/vue/index.js +14 -0
  415. package/dist/blocks/share-links/index.d.ts +106 -0
  416. package/dist/blocks/share-links/index.js +102 -0
  417. package/dist/blocks/shared-signals/index.d.ts +395 -0
  418. package/dist/blocks/shared-signals/index.js +880 -0
  419. package/dist/blocks/signing-keys/index.d.ts +29 -0
  420. package/dist/blocks/signing-keys/index.js +161 -0
  421. package/dist/blocks/sla/index.d.ts +114 -0
  422. package/dist/blocks/sla/index.js +122 -0
  423. package/dist/blocks/sso/index.d.ts +169 -147
  424. package/dist/blocks/sso/index.js +258 -321
  425. package/dist/blocks/state-machine/index.d.ts +105 -0
  426. package/dist/blocks/state-machine/index.js +116 -0
  427. package/dist/blocks/tags/index.d.ts +20 -0
  428. package/dist/blocks/tags/index.js +28 -0
  429. package/dist/blocks/tags/react/index.d.ts +28 -0
  430. package/dist/blocks/tags/react/index.js +47 -0
  431. package/dist/blocks/tags/react/server.d.ts +7 -0
  432. package/dist/blocks/tags/react/server.js +7 -0
  433. package/dist/blocks/tags/solid/index.d.ts +13 -0
  434. package/dist/blocks/tags/solid/index.js +14 -0
  435. package/dist/blocks/tags/svelte/index.d.ts +13 -0
  436. package/dist/blocks/tags/svelte/index.js +14 -0
  437. package/dist/blocks/tags/vue/index.d.ts +13 -0
  438. package/dist/blocks/tags/vue/index.js +14 -0
  439. package/dist/blocks/targets/index.d.ts +82 -0
  440. package/dist/blocks/targets/index.js +73 -0
  441. package/dist/blocks/teams/index.d.ts +61 -0
  442. package/dist/blocks/teams/index.js +83 -0
  443. package/dist/blocks/templates/index.d.ts +362 -0
  444. package/dist/blocks/templates/index.js +483 -0
  445. package/dist/blocks/time-tracking/index.d.ts +250 -0
  446. package/dist/blocks/time-tracking/index.js +317 -0
  447. package/dist/blocks/trash/index.d.ts +78 -0
  448. package/dist/blocks/trash/index.js +79 -0
  449. package/dist/blocks/undo/index.d.ts +9 -0
  450. package/dist/blocks/undo/index.js +14 -0
  451. package/dist/blocks/undo/react/index.d.ts +17 -0
  452. package/dist/blocks/undo/react/index.js +24 -0
  453. package/dist/blocks/undo/react/server.d.ts +7 -0
  454. package/dist/blocks/undo/react/server.js +7 -0
  455. package/dist/blocks/undo/solid/index.d.ts +13 -0
  456. package/dist/blocks/undo/solid/index.js +14 -0
  457. package/dist/blocks/undo/svelte/index.d.ts +13 -0
  458. package/dist/blocks/undo/svelte/index.js +14 -0
  459. package/dist/blocks/undo/vue/index.d.ts +13 -0
  460. package/dist/blocks/undo/vue/index.js +14 -0
  461. package/dist/blocks/usage/index.d.ts +10 -4
  462. package/dist/blocks/usage/index.js +16 -233
  463. package/dist/blocks/usage/react/index.d.ts +23 -0
  464. package/dist/blocks/usage/react/index.js +38 -0
  465. package/dist/blocks/usage/react/server.d.ts +7 -0
  466. package/dist/blocks/usage/react/server.js +7 -0
  467. package/dist/blocks/usage/solid/index.d.ts +13 -0
  468. package/dist/blocks/usage/solid/index.js +14 -0
  469. package/dist/blocks/usage/svelte/index.d.ts +13 -0
  470. package/dist/blocks/usage/svelte/index.js +14 -0
  471. package/dist/blocks/usage/vue/index.d.ts +13 -0
  472. package/dist/blocks/usage/vue/index.js +14 -0
  473. package/dist/blocks/versions/index.d.ts +169 -0
  474. package/dist/blocks/versions/index.js +288 -0
  475. package/dist/blocks/waitlist/index.d.ts +57 -19
  476. package/dist/blocks/waitlist/index.js +46 -12
  477. package/dist/blocks/webhooks/index.d.ts +269 -137
  478. package/dist/blocks/webhooks/index.js +752 -179
  479. package/dist/blocks/work-items/index.d.ts +208 -0
  480. package/dist/blocks/work-items/index.js +305 -0
  481. package/dist/blocks/workflow-builder/index.d.ts +26 -6
  482. package/dist/blocks/workflow-builder/index.js +30 -5
  483. package/dist/blocks/workflow-builder/react/index.d.ts +4 -19
  484. package/dist/blocks/workflow-builder/react/index.js +45 -89
  485. package/dist/blocks/workflow-builder/solid/index.d.ts +20 -0
  486. package/dist/blocks/workflow-builder/solid/index.js +23 -0
  487. package/dist/blocks/workflow-builder/svelte/index.d.ts +20 -0
  488. package/dist/blocks/workflow-builder/svelte/index.js +23 -0
  489. package/dist/blocks/workflow-builder/vue/index.d.ts +20 -0
  490. package/dist/blocks/workflow-builder/vue/index.js +23 -0
  491. package/dist/blocks/workflows/index.d.ts +20 -3
  492. package/dist/blocks/workflows/index.js +27 -3
  493. package/dist/blocks/workflows/react/index.d.ts +5 -20
  494. package/dist/blocks/workflows/react/index.js +41 -113
  495. package/dist/blocks/workflows/solid/index.d.ts +20 -0
  496. package/dist/blocks/workflows/solid/index.js +23 -0
  497. package/dist/blocks/workflows/svelte/index.d.ts +20 -0
  498. package/dist/blocks/workflows/svelte/index.js +23 -0
  499. package/dist/blocks/workflows/vue/index.d.ts +20 -0
  500. package/dist/blocks/workflows/vue/index.js +23 -0
  501. package/dist/blocks-D2WQ63PI.js +84 -0
  502. package/dist/bookings-EJAVAuVz.js +181 -0
  503. package/dist/build-6jmaPAgx.js +689 -0
  504. package/dist/build-Cm0T5MVG.js +1815 -0
  505. package/dist/calendar-1J1E5dLq.js +801 -0
  506. package/dist/channel-D-LHCY11.d.ts +78 -0
  507. package/dist/channels-C-GCoNLd.js +114 -0
  508. package/dist/chat-sdk/index.d.ts +131 -7
  509. package/dist/chat-sdk/index.js +154 -6
  510. package/dist/chat-sdk/react/index.d.ts +2 -1
  511. package/dist/chat-sdk/react/index.js +1 -2
  512. package/dist/chat-sdk/react/server.d.ts +2 -1
  513. package/dist/chat-sdk/react/server.js +1 -2
  514. package/dist/cli/add-BhI_nXAo.js +75 -0
  515. package/dist/cli/add-CUS0AiBh.js +651 -0
  516. package/dist/cli/add-ojbcMxyp.js +1 -0
  517. package/dist/cli/adopt-D0ASVx2G.js +1 -0
  518. package/dist/cli/adopt-DwcU6CJd.js +412 -0
  519. package/dist/cli/agent-CCrTYK3W.js +176 -0
  520. package/dist/cli/apply-DBXC0Z5I.js +332 -0
  521. package/dist/cli/bin.js +40 -20
  522. package/dist/cli/blocks-B15ltTFn.js +124 -0
  523. package/dist/cli/blocks-BXeqIzWN.js +1 -0
  524. package/dist/cli/cache-CPBYJAkb.js +502 -0
  525. package/dist/cli/catalog-Di15TkM2.js +187 -0
  526. package/dist/cli/codemod-CrI33UR2.js +985 -0
  527. package/dist/cli/command-D_HI1mp1.js +853 -0
  528. package/dist/cli/completion-DzYo025z.js +205 -0
  529. package/dist/cli/completion-En43UcyJ.js +30 -0
  530. package/dist/cli/completion-Vry-Wjw8.js +1 -0
  531. package/dist/cli/config-Bi_UBxXl.js +1451 -0
  532. package/dist/cli/config-DsqQr5z3.js +1 -0
  533. package/dist/cli/config-DyJgo2d9.js +39 -0
  534. package/dist/cli/config-edit-Ct1lXe8a.js +603 -0
  535. package/dist/cli/db-DT1bGB02.js +78 -0
  536. package/dist/cli/design-edit-B-WsnhUF.js +175 -0
  537. package/dist/cli/detect-BeLVeNpA.js +84 -0
  538. package/dist/cli/dist-D_VbPAMR.js +129 -0
  539. package/dist/cli/dist-DuiMMRbJ.js +1112 -0
  540. package/dist/cli/doctor-wACp5w6N.js +3508 -0
  541. package/dist/cli/emit-j0zZ6NE_.js +1061 -0
  542. package/dist/cli/env-2v9JrxSr.js +142 -0
  543. package/dist/cli/env-Cf5OTqbK.js +1087 -0
  544. package/dist/cli/env-Ch99nTQw.js +1 -0
  545. package/dist/cli/env-DkBe35Rv.js +1 -0
  546. package/dist/cli/errors-Caiz_0so.js +98 -0
  547. package/dist/cli/fastest-levenshtein-dhRRvrM2.js +120 -0
  548. package/dist/cli/files-DDvAwTko.js +963 -0
  549. package/dist/cli/gen-BhquLu7l.js +304 -0
  550. package/dist/cli/guards-CUlDNYZs.js +8 -0
  551. package/dist/cli/index.d.ts +260 -129
  552. package/dist/cli/index.js +13 -10
  553. package/dist/cli/init-BwLTO6XG.js +400 -0
  554. package/dist/cli/introspect-B-gXAIqs.js +51 -0
  555. package/dist/cli/io-BiPX-_J1.js +37 -0
  556. package/dist/cli/jsonc-C8M0EhHB.js +1 -0
  557. package/dist/cli/keys-hwtdwdkT.js +106 -0
  558. package/dist/cli/live-BFfYoE0_.js +329 -0
  559. package/dist/cli/mcp-Bdm2oGmL.js +237 -0
  560. package/dist/cli/metadata-DikbSOE0.js +138 -0
  561. package/dist/cli/migration-safety-LaGVPPuD.js +206 -0
  562. package/dist/cli/module-migration-CLkZ8jpw.js +592 -0
  563. package/dist/cli/moved-B7UFO_OM.js +152 -0
  564. package/dist/cli/parse-CwV5a6dA.js +170 -0
  565. package/dist/cli/preset-DQ1DxMtI.js +129 -0
  566. package/dist/cli/prompts-Bvg_DBpe.js +1137 -0
  567. package/dist/cli/redact-PjNswZOs.js +35 -0
  568. package/dist/cli/rolldown-runtime-kJ_i4yPo.js +26 -0
  569. package/dist/cli/run-BLJj7SuM.js +685 -0
  570. package/dist/cli/run-DliGNdjI.js +1507 -0
  571. package/dist/cli/scaffold-6bv24GSP.js +898 -0
  572. package/dist/cli/scaffold-DUz5fa-k.js +1 -0
  573. package/dist/cli/seed-CIJaL1Ao.js +113 -0
  574. package/dist/cli/seed-ClGWseBT.js +1 -0
  575. package/dist/cli/shared-CNcvDOLt.js +145 -0
  576. package/dist/cli/shell-Btv_4Yhe.js +10 -0
  577. package/dist/cli/skills-CaxIQhzW.js +121 -0
  578. package/dist/cli/snapshot-Dvcx0BSl.js +347 -0
  579. package/dist/cli/source-args-BNhagtpw.js +47 -0
  580. package/dist/cli/spec-BewE6r6J.js +7501 -0
  581. package/dist/cli/spec-DRDaIq8f.js +1 -0
  582. package/dist/cli/sql-BBkchli4.js +326 -0
  583. package/dist/cli/sql-BCQt5TDs.js +2 -0
  584. package/dist/cli/stack-status-LeEoCtV1.js +456 -0
  585. package/dist/cli/style-2JfIPVMQ.js +29 -0
  586. package/dist/cli/supabase-toml-DjLgBYEo.js +1153 -0
  587. package/dist/cli/sync-CJ-ft-tl.js +88 -0
  588. package/dist/cli/topics-BBE1-Vrg.js +30 -0
  589. package/dist/cli/trace-VbdO6bcN.js +7 -0
  590. package/dist/cli/typegen--TfvOPLh.js +494 -0
  591. package/dist/cli/typegen-version-BNBPI4Eu.js +9 -0
  592. package/dist/cli/validate-BfWNKvxy.js +7522 -0
  593. package/dist/cli/version-D1wM9DNb.js +4 -0
  594. package/dist/cli/write-Dp1XlAVM.js +198 -0
  595. package/dist/client/index.d.ts +7 -4
  596. package/dist/client/index.js +152 -6
  597. package/dist/client/native/index.d.ts +71 -4
  598. package/dist/client/native/index.js +65 -6
  599. package/dist/client-13Ii0c0P.js +84 -0
  600. package/dist/client-9zIKhf5D.d.ts +58 -0
  601. package/dist/client-AxwF58Eo.js +98 -0
  602. package/dist/client-B0rvMvA8.d.ts +52 -0
  603. package/dist/client-B5nnqDmz.d.ts +39 -0
  604. package/dist/client-B7LCXnnY.d.ts +59 -0
  605. package/dist/client-B9CqzgPO.js +75 -0
  606. package/dist/client-B9H4BZJh.d.ts +455 -0
  607. package/dist/client-BGnJ5WJi.js +438 -0
  608. package/dist/client-BLKpcAs0.d.ts +34 -0
  609. package/dist/client-BO9fQgBB.d.ts +155 -0
  610. package/dist/client-B_r4denm.d.ts +135 -0
  611. package/dist/client-BaynD5V-.d.ts +388 -0
  612. package/dist/client-BfgwocyT.js +155 -0
  613. package/dist/client-BpS8a6Fm.js +51 -0
  614. package/dist/client-BtBkVSk2.d.ts +108 -0
  615. package/dist/client-ByGlM0YF.d.ts +101 -0
  616. package/dist/client-BzCv4kKE.js +65 -0
  617. package/dist/client-C-2ajnhM.js +89 -0
  618. package/dist/client-C3dLIsJv.d.ts +122 -0
  619. package/dist/client-C597NIlL.d.ts +277 -0
  620. package/dist/client-C5mUEb2n.js +55 -0
  621. package/dist/client-CFeWXNXy.js +133 -0
  622. package/dist/client-CWs3X4g1.js +120 -0
  623. package/dist/client-Cgxj38RS.d.ts +419 -0
  624. package/dist/client-CjyTNdt1.d.ts +65 -0
  625. package/dist/client-CmHsfDHU.js +438 -0
  626. package/dist/client-CpMv4-v5.d.ts +100 -0
  627. package/dist/client-CsRpAyIv.d.ts +68 -0
  628. package/dist/client-CvITjt-9.js +310 -0
  629. package/dist/client-D0502FgY.js +1051 -0
  630. package/dist/client-D727oIVC.js +169 -0
  631. package/dist/client-D9zBl9PT.d.ts +103 -0
  632. package/dist/client-DG7FwgZD.js +104 -0
  633. package/dist/client-DNq8xYb-.js +52 -0
  634. package/dist/client-DR_YEGnc.d.ts +130 -0
  635. package/dist/client-DZXFDaQE.d.ts +157 -0
  636. package/dist/client-Diu2lPbg.d.ts +218 -0
  637. package/dist/client-Dk8gY9hi.d.ts +34 -0
  638. package/dist/client-Ezlbskjq.js +60 -0
  639. package/dist/client-Fi8CoJcs.d.ts +263 -0
  640. package/dist/client-LVa6yC9u.d.ts +107 -0
  641. package/dist/client-WXJwUhr1.d.ts +162 -0
  642. package/dist/client-WgrPIHH-.js +213 -0
  643. package/dist/client-ZTtSV3l8.js +40 -0
  644. package/dist/client-ckXfdy1k.js +38 -0
  645. package/dist/client-fpvgtQKE.js +128 -0
  646. package/dist/client-iB5axfa0.js +209 -0
  647. package/dist/client-jvtwGFy4.js +137 -0
  648. package/dist/client-kI6vCKVI.js +288 -0
  649. package/dist/client-kKdkLGPB.d.ts +131 -0
  650. package/dist/client-pxjbgOz6.js +376 -0
  651. package/dist/client-rp7YfOg1.js +67 -0
  652. package/dist/cloud-event-bwsBwVNG.d.ts +64 -0
  653. package/dist/codecs-Bm46sVxr.d.ts +215 -0
  654. package/dist/codecs-C7E_OoiC.js +358 -0
  655. package/dist/codegen-2m4SKVdi.d.ts +1654 -0
  656. package/dist/comments-N7Bi-oTW.js +230 -0
  657. package/dist/commerce/index.d.ts +211 -0
  658. package/dist/commerce/index.js +517 -0
  659. package/dist/compiler-C6E3WwIi.d.ts +14 -0
  660. package/dist/compose-CO_cljl3.js +53 -0
  661. package/dist/composite-CPV0thLs.js +130 -0
  662. package/dist/composite-DMMA_Whg.d.ts +67 -0
  663. package/dist/config/index.d.ts +7 -5
  664. package/dist/config/index.js +7 -4
  665. package/dist/config-C4RQDF6t.js +3896 -0
  666. package/dist/config-CkyahUjo.js +558 -0
  667. package/dist/connector-Cp8CqssJ.d.ts +107 -0
  668. package/dist/connectors-CZdfZcIg.d.ts +141 -0
  669. package/dist/context-B8_p3MXo.js +11 -0
  670. package/dist/context-BDDgjoxz.js +41 -0
  671. package/dist/context-C-bHOtoD.js +5 -0
  672. package/dist/context-CCfX2szU.d.ts +377 -0
  673. package/dist/context-D6ZMKc2L.js +19 -0
  674. package/dist/context-wDKxSl9x.js +9 -0
  675. package/dist/controller-CCb9tHw_.d.ts +46 -0
  676. package/dist/controller-D6NyNrlZ.js +79 -0
  677. package/dist/create/index.d.ts +597 -0
  678. package/dist/create/index.js +2049 -0
  679. package/dist/create/lite/index.d.ts +85 -0
  680. package/dist/create/lite/index.js +126 -0
  681. package/dist/create/supabase/index.d.ts +68 -0
  682. package/dist/create/supabase/index.js +312 -0
  683. package/dist/credentials/index.d.ts +15 -5
  684. package/dist/credentials/index.js +16 -8
  685. package/dist/cron-CUaKTjWC.js +145 -0
  686. package/dist/cron-route-BsgbJ-g4.js +24 -0
  687. package/dist/csv-CVfXqaAu.js +89 -0
  688. package/dist/csv-D3eKxV1T.d.ts +28 -0
  689. package/dist/define-CMcokcZz.js +1896 -0
  690. package/dist/define-DXTC706J.d.ts +1005 -0
  691. package/dist/define-block-B6Gjs57G.js +52 -0
  692. package/dist/define-block-BlHQxDIQ.d.ts +256 -0
  693. package/dist/delegation-Dt8hMJWu.js +140 -0
  694. package/dist/delivery-B1mKaOen.js +30 -0
  695. package/dist/delivery-BeHgwS3k.d.ts +69 -0
  696. package/dist/documents-BYM2viS0.d.ts +96 -0
  697. package/dist/edge/index.d.ts +16 -14
  698. package/dist/edge/index.js +24 -18
  699. package/dist/elysia/index.d.ts +1 -1
  700. package/dist/elysia/index.js +2 -2
  701. package/dist/email-BcmbIWOX.d.ts +42 -0
  702. package/dist/embeddings-CVeOoufZ.js +128 -0
  703. package/dist/embeddings-Da0w4A_0.d.ts +78 -0
  704. package/dist/ended-EcTtzzQJ.d.ts +70 -0
  705. package/dist/entitlements-AmYp2KHX.js +45 -0
  706. package/dist/entitlements-Bn7BTnbg.d.ts +53 -0
  707. package/dist/env/index.d.ts +1 -1
  708. package/dist/env/index.js +9 -4
  709. package/dist/envelope--7d0Q3Se.js +90 -0
  710. package/dist/errors-7MqM7bbV.js +44 -0
  711. package/dist/errors-8i6tSICm.js +301 -0
  712. package/dist/escape-like-AUEPn-C5.d.ts +15 -0
  713. package/dist/eve/index.d.ts +5 -5
  714. package/dist/eve/index.js +9 -9
  715. package/dist/eve-BcEr_hPo.d.ts +151 -0
  716. package/dist/event-calendar-DJXXMJ3x.d.ts +217 -0
  717. package/dist/event-map-Dy2vKHai.js +19 -0
  718. package/dist/events/index.d.ts +4 -4
  719. package/dist/events/index.js +10 -7
  720. package/dist/events-CtAHxPal.d.ts +800 -0
  721. package/dist/events-xbpHkcK9.js +82 -0
  722. package/dist/executor-BicyP8Nl.d.ts +272 -0
  723. package/dist/executor-CHRwEYqt.d.ts +95 -0
  724. package/dist/executor-CIxyatuB.d.ts +174 -0
  725. package/dist/executor-Cex-1PFp.js +735 -0
  726. package/dist/executor-D3K3tycZ.js +147 -0
  727. package/dist/executor-DzJQVTE2.d.ts +39 -0
  728. package/dist/executor-aKUo_Xyb.js +206 -0
  729. package/dist/expo/index.d.ts +4 -4
  730. package/dist/expo/index.js +6 -6
  731. package/dist/expo-sqlite/index.d.ts +3 -3
  732. package/dist/expo-sqlite/index.js +2 -2
  733. package/dist/field-errors-nFnYWvB0.d.ts +113 -0
  734. package/dist/field-formats-Cif5gr7c.js +102 -0
  735. package/dist/field-formats-DCvOQlOy.d.ts +39 -0
  736. package/dist/filter-evaluate-C0ULNfS7.js +214 -0
  737. package/dist/filter-evaluate-CEm52E5s.d.ts +34 -0
  738. package/dist/filter-query-B3lhckKX.js +518 -0
  739. package/dist/filter-query-D3wOD1P_.d.ts +121 -0
  740. package/dist/flags-CtSrkVuW.js +279 -0
  741. package/dist/flags-Dz5PIzFU.d.ts +230 -0
  742. package/dist/flags-sdk/index.d.ts +143 -0
  743. package/dist/flags-sdk/index.js +175 -0
  744. package/dist/form-definition-GVZTILhS.js +311 -0
  745. package/dist/form-definition-sagoefQr.d.ts +95 -0
  746. package/dist/format-CNwSjXUU.d.ts +70 -0
  747. package/dist/framework-C2oL4OaO.d.ts +26 -0
  748. package/dist/framework-Cfm0IspZ.js +51 -0
  749. package/dist/function-contract-B4c0XuTU.d.ts +21 -0
  750. package/dist/function-contract-DmkBg19r.js +5 -0
  751. package/dist/gateway-CJL6ZG17.d.ts +109 -0
  752. package/dist/gateway-options-ClvvfuuU.d.ts +29 -0
  753. package/dist/gateway-options-DcLcWL5_.js +27 -0
  754. package/dist/graph-Cs28bOlK.js +360 -0
  755. package/dist/groups-CxonH3u5.js +16 -0
  756. package/dist/h3/index.d.ts +7 -3
  757. package/dist/h3/index.js +3 -3
  758. package/dist/h3/v1/index.d.ts +1 -1
  759. package/dist/h3/v1/index.js +2 -2
  760. package/dist/hono/index.d.ts +24 -10
  761. package/dist/hono/index.js +50 -22
  762. package/dist/http-BF-V0CUF.js +25 -0
  763. package/dist/impersonation-CDeCzZP6.js +62 -0
  764. package/dist/impersonation-D5chOkrO.d.ts +25 -0
  765. package/dist/inbox-BaUJgHOF.d.ts +400 -0
  766. package/dist/index-8xwnaWHY.d.ts +344 -0
  767. package/dist/index-BurdFUXr.d.ts +131 -0
  768. package/dist/index-Cckxs8IE.d.ts +206 -0
  769. package/dist/index-Ck4oK5vV.d.ts +258 -0
  770. package/dist/index-Co0YsJTk.d.ts +58 -0
  771. package/dist/index-CxmVzT-3.d.ts +86 -0
  772. package/dist/index-D1kMyNc7.d.ts +245 -0
  773. package/dist/index-DL8z_oDo.d.ts +227 -0
  774. package/dist/index-DMONTkSf.d.ts +202 -0
  775. package/dist/index-DTQbC3CW.d.ts +58 -0
  776. package/dist/index-DcijDfh1.d.ts +97 -0
  777. package/dist/index-MCXVzkXs.d.ts +722 -0
  778. package/dist/index-gXy3R1Uq.d.ts +138 -0
  779. package/dist/index.d.ts +15 -15
  780. package/dist/index.js +15 -14
  781. package/dist/iso4217-A8ev-CNW.js +176 -0
  782. package/dist/json-schema-CpYINXG8.js +548 -0
  783. package/dist/jws-35a8VhFV.d.ts +60 -0
  784. package/dist/jws-milwSg7E.js +191 -0
  785. package/dist/kit-BlcEFQql.d.ts +66 -0
  786. package/dist/kit-gqwkVhGU.js +104 -0
  787. package/dist/knowledge-BYtgA52P.d.ts +187 -0
  788. package/dist/knowledge-CSNKLX-s.js +272 -0
  789. package/dist/lint/index.js +9 -9
  790. package/dist/list/index.d.ts +4 -2
  791. package/dist/list/index.js +4 -2
  792. package/dist/list-query-CBXNfJt4.js +549 -0
  793. package/dist/list-query-DWJIiVz_.d.ts +194 -0
  794. package/dist/live-DwDreq1n.js +239 -0
  795. package/dist/management-D1gG89z2.d.ts +53 -0
  796. package/dist/mcp/index.d.ts +59 -17
  797. package/dist/mcp/index.js +202 -98
  798. package/dist/mcp/sdk/index.d.ts +6 -6
  799. package/dist/mcp/sdk/index.js +7 -7
  800. package/dist/messages-Cx4ttLJJ.js +493 -0
  801. package/dist/methods-7u6vSgz_.js +11 -0
  802. package/dist/metric-definition-95HFoW1V.d.ts +70 -0
  803. package/dist/metric-definition-BjxVn4R5.js +117 -0
  804. package/dist/mfa-DtflCXEt.d.ts +30 -0
  805. package/dist/model-lUafmeBQ.d.ts +311 -0
  806. package/dist/model-messages-CTu-6kBu.js +206 -0
  807. package/dist/money-95Rff2vT.js +185 -0
  808. package/dist/money-DFpWzQvk.d.ts +76 -0
  809. package/dist/money-codec-DCGgzO26.js +41 -0
  810. package/dist/nestjs/index.d.ts +2 -2
  811. package/dist/nestjs/index.js +2 -2
  812. package/dist/next/index.d.ts +26 -16
  813. package/dist/next/index.js +17 -16
  814. package/dist/node/index.d.ts +2 -2
  815. package/dist/node/index.js +3 -3
  816. package/dist/nuxt/index.d.ts +2 -2
  817. package/dist/nuxt/index.js +3 -2
  818. package/dist/onboarding-viTTNWUp.js +68 -0
  819. package/dist/openapi/index.d.ts +3 -3
  820. package/dist/openapi/index.js +2 -2
  821. package/dist/operations-BtuQRwTJ.d.ts +6 -0
  822. package/dist/operations-CsIfMED7.js +29 -0
  823. package/dist/optional-peer-Dx8TaYXw.js +29 -0
  824. package/dist/options-B0FcEKtH.js +5 -0
  825. package/dist/options-B5BU2Yg7.js +11 -0
  826. package/dist/options-B5woz53h.js +5 -0
  827. package/dist/options-B7EJaOX-.js +5 -0
  828. package/dist/options-B9q8CROT.js +9 -0
  829. package/dist/options-BA6jV6py.js +10 -0
  830. package/dist/options-BAW2ZlZ8.js +8 -0
  831. package/dist/options-BMjcVuaI.js +82 -0
  832. package/dist/options-BOOEzor9.js +5 -0
  833. package/dist/options-BZsoPJGX.js +5 -0
  834. package/dist/options-BesyRBnM.js +16 -0
  835. package/dist/options-Bf96aVk5.js +10 -0
  836. package/dist/options-BlOPivzq.js +8 -0
  837. package/dist/options-Blg8lAkz.js +9 -0
  838. package/dist/options-Bn4cu0gt.js +5 -0
  839. package/dist/options-BnoJOwXK.js +8 -0
  840. package/dist/options-Bp7sgKvl.js +30 -0
  841. package/dist/options-BxcFLL1G.js +8 -0
  842. package/dist/options-C1HR4UZd.js +13 -0
  843. package/dist/options-C239TLRF.js +14 -0
  844. package/dist/options-C2HesT4A.js +9 -0
  845. package/dist/options-C3EzJATk.js +10 -0
  846. package/dist/options-C3hZ1fbC.js +10 -0
  847. package/dist/options-C6rEL6U5.js +8 -0
  848. package/dist/options-CAzVf-1T.js +8 -0
  849. package/dist/options-CGKSUFUq.js +5 -0
  850. package/dist/options-CGjGE8xS.js +12 -0
  851. package/dist/options-CK5WiFwG.js +11 -0
  852. package/dist/options-CN7PHkhU.js +8 -0
  853. package/dist/options-CTZNpb2n.js +5 -0
  854. package/dist/options-CUqQ9pm7.js +9 -0
  855. package/dist/options-CVSWgZpY.js +8 -0
  856. package/dist/options-CXFz0xxS.js +8 -0
  857. package/dist/options-CZk_fbbg.js +9 -0
  858. package/dist/options-C_pb1Nd3.js +5 -0
  859. package/dist/options-CbSOj53r.d.ts +52 -0
  860. package/dist/options-ChD15QxJ.js +9 -0
  861. package/dist/options-CkScQRJR.js +12 -0
  862. package/dist/options-CljDnQt2.js +25 -0
  863. package/dist/options-CmraJhd9.js +5 -0
  864. package/dist/options-CoX6VKGb.js +8 -0
  865. package/dist/options-CrC78Tee.js +5 -0
  866. package/dist/options-Ctac2R0Q.js +11 -0
  867. package/dist/options-CyD7OObW.js +17 -0
  868. package/dist/options-D1blDihM.js +9 -0
  869. package/dist/options-D2Gd6VfS.js +8 -0
  870. package/dist/options-D2d1fFuw.js +11 -0
  871. package/dist/options-D40CQzji.js +8 -0
  872. package/dist/options-D7f2VKzj.js +25 -0
  873. package/dist/options-DARkpk2P.js +8 -0
  874. package/dist/options-DCduTMST.js +17 -0
  875. package/dist/options-DDzggjN7.js +8 -0
  876. package/dist/options-DMR68VAC.js +5 -0
  877. package/dist/options-DNKyN5uq.js +20 -0
  878. package/dist/options-DTDxFT6J.js +13 -0
  879. package/dist/options-DWpz3V3F.js +8 -0
  880. package/dist/options-DXqcJyOP.js +10 -0
  881. package/dist/options-DYBQ973I.js +8 -0
  882. package/dist/options-Dh4wu9Ks.js +15 -0
  883. package/dist/options-Dmg1Da9P.js +25 -0
  884. package/dist/options-DsUgamiy.js +5 -0
  885. package/dist/options-EsUh744F.js +13 -0
  886. package/dist/options-Fz6xqu-b.js +5 -0
  887. package/dist/options-HSv8R6h5.js +13 -0
  888. package/dist/options-I8zVkB_y.js +8 -0
  889. package/dist/options-MHhjOoWz.js +5 -0
  890. package/dist/options-MLxMkd5B.js +11 -0
  891. package/dist/options-OJ5zmgr8.js +10 -0
  892. package/dist/options-QKP9FFcK.js +8 -0
  893. package/dist/options-SViK_2x2.js +12 -0
  894. package/dist/options-XgfTctbI.js +5 -0
  895. package/dist/options-_9arpsX9.js +11 -0
  896. package/dist/options-eBPsk4WI.js +11 -0
  897. package/dist/options-kLKILdIu.js +10 -0
  898. package/dist/options-n22NK3PL.js +8 -0
  899. package/dist/options-oeAq4Ho5.js +12 -0
  900. package/dist/options-qU8vgxhO.js +18 -0
  901. package/dist/options-vXMBEWSH.js +5 -0
  902. package/dist/options-wFnK3qWl.js +9 -0
  903. package/dist/options-xVAy3UsV.js +9 -0
  904. package/dist/organizations-Bxrm32IG.js +398 -0
  905. package/dist/orpc/index.d.ts +26 -10
  906. package/dist/orpc/index.js +54 -33
  907. package/dist/otel/index.d.ts +3 -3
  908. package/dist/otel/index.js +42 -7
  909. package/dist/outbox-BCGHl9X6.d.ts +181 -0
  910. package/dist/overlay/index.d.ts +1 -1
  911. package/dist/overlay/index.js +3 -3
  912. package/dist/payments-h45bswA-.js +16 -0
  913. package/dist/pg-error-BV_X8Isq.js +26 -0
  914. package/dist/plugin-D5OIaP93.d.ts +190 -0
  915. package/dist/plugins/actor/index.d.ts +1 -1
  916. package/dist/plugins/actor/index.js +1 -1
  917. package/dist/plugins/rules/index.d.ts +2 -2
  918. package/dist/plugins/rules/index.js +2 -2
  919. package/dist/plugins/soft-delete/index.d.ts +3 -3
  920. package/dist/plugins/soft-delete/index.js +4 -4
  921. package/dist/plugins/tenant/index.d.ts +4 -3
  922. package/dist/plugins/tenant/index.js +3 -3
  923. package/dist/plugins/timestamps/index.d.ts +1 -1
  924. package/dist/plugins/timestamps/index.js +1 -1
  925. package/dist/plugins/validation/index.d.ts +2 -2
  926. package/dist/plugins/validation/index.js +3 -3
  927. package/dist/pool-BBi4mot3.d.ts +117 -0
  928. package/dist/pool-errors-C94tPR_G.js +27 -0
  929. package/dist/ports-B53rB7zg.d.ts +285 -0
  930. package/dist/ports-Bcdppx0G.js +133 -0
  931. package/dist/ports-Dcnuo3HT.d.ts +86 -0
  932. package/dist/postgres/index.d.ts +28 -6
  933. package/dist/postgres/index.js +62 -25
  934. package/dist/postgrest-D6fEMsp4.d.ts +53 -0
  935. package/dist/powersync/index.d.ts +4 -4
  936. package/dist/powersync/index.js +4 -4
  937. package/dist/powersync/react/index.d.ts +8 -3
  938. package/dist/powersync/react/index.js +11 -3
  939. package/dist/preset/index.d.ts +4 -0
  940. package/dist/preset/index.js +4 -0
  941. package/dist/preset-BBrL6_Ln.js +648 -0
  942. package/dist/problem-CEjyhV5T.d.ts +76 -0
  943. package/dist/problem-pIiL3WbE.js +159 -0
  944. package/dist/provider-CQ1SrhLa.d.ts +113 -0
  945. package/dist/provider-DKh2xFZb.js +57 -0
  946. package/dist/push-token-CDMgWT13.d.ts +24 -0
  947. package/dist/push-token-D6REHMMw.js +16 -0
  948. package/dist/query/index.d.ts +2 -2
  949. package/dist/range-DwpWe8e7.js +7 -0
  950. package/dist/range-p5V4rBhZ.d.ts +8 -0
  951. package/dist/rank-keys-DcPMt_Jk.js +60 -0
  952. package/dist/rank-result-Dngpt2n5.d.ts +14 -0
  953. package/dist/rank-result-oUF1DYBm.js +18 -0
  954. package/dist/rate-limit-BtbddDnE.js +49 -0
  955. package/dist/rate-limit-ByfWNX9N.js +325 -0
  956. package/dist/rate-limit-C88MEAOm.d.ts +41 -0
  957. package/dist/ratelimit-headers-Bsxx0Tj2.js +62 -0
  958. package/dist/react/index.d.ts +9 -9
  959. package/dist/react/index.js +3 -4
  960. package/dist/react/native/index.d.ts +1 -1
  961. package/dist/react/native/index.js +2 -2
  962. package/dist/react/server.d.ts +10 -10
  963. package/dist/react/server.js +3 -3
  964. package/dist/react/session.d.ts +2 -2
  965. package/dist/react-BcKACxsj.js +410 -0
  966. package/dist/react-controller-Xn-IU44p.js +40 -0
  967. package/dist/react-env-Cc7Vf6eb.js +13 -0
  968. package/dist/react-router/index.d.ts +6 -6
  969. package/dist/react-router/index.js +7 -7
  970. package/dist/read-set-PWiJfv6S.js +314 -0
  971. package/dist/realtime/index.d.ts +8 -4
  972. package/dist/realtime/index.js +5 -327
  973. package/dist/realtime-status-D2dw1hOE.js +12 -0
  974. package/dist/realtime-status-DcsO00Gw.d.ts +8 -0
  975. package/dist/refusal-Bdr1k47u.d.ts +18 -0
  976. package/dist/refusal-Ch-u9dVd.js +61 -0
  977. package/dist/replicas-BvIL4_jL.js +94 -0
  978. package/dist/resolve-7atr-wWr.d.ts +266 -0
  979. package/dist/resolve-CAR9oaKW.js +869 -0
  980. package/dist/resource-CHGOmg1O.js +463 -0
  981. package/dist/resource-DO4gbVi5.js +91 -0
  982. package/dist/resource-DxcgtHq6.d.ts +106 -0
  983. package/dist/resource-execute-C45ICrN9.d.ts +12 -0
  984. package/dist/resource-types-CC59gMHE.d.ts +141 -0
  985. package/dist/resources-B71O7EVQ.d.ts +7 -0
  986. package/dist/resources-B7htXQeg.js +64 -0
  987. package/dist/respond-Cdg5ibH5.d.ts +93 -0
  988. package/dist/respond-Dpx48ATq.js +95 -0
  989. package/dist/result-COkvI9t5.js +134 -0
  990. package/dist/result-Cj3yWhjH.d.ts +298 -0
  991. package/dist/rrule-zBh3CA1r.js +290 -0
  992. package/dist/rules-4of_Fq-6.js +287 -0
  993. package/dist/run-watch-CQRdpy-f.js +53 -0
  994. package/dist/runtime-BOXURhEW.js +45 -0
  995. package/dist/sales-lines-C6gafAwg.d.ts +28 -0
  996. package/dist/sales-lines-CymdiwYd.js +41 -0
  997. package/dist/sales-shared-DAAGwQwN.d.ts +8 -0
  998. package/dist/sales-shared-DjCuN8xG.js +22 -0
  999. package/dist/scope-DgWjuXUw.js +90 -0
  1000. package/dist/search-BtoWY6n_.js +9 -0
  1001. package/dist/search-LbjCylX5.js +106 -0
  1002. package/dist/server/index.d.ts +157 -51
  1003. package/dist/server/index.js +295 -20
  1004. package/dist/server-types-fXwJoFjt.d.ts +737 -0
  1005. package/dist/session-Djo5t4KQ.d.ts +95 -0
  1006. package/dist/settings-DxXfDUmh.js +90 -0
  1007. package/dist/shared-9B02lczf.js +14 -0
  1008. package/dist/shared-BmMcMoW9.js +89 -0
  1009. package/dist/shared-as0EG51f.js +60 -0
  1010. package/dist/sign-in-D0xN6E_l.js +360 -0
  1011. package/dist/signatures-BMdJ7neI.d.ts +43 -0
  1012. package/dist/signatures-C9CGYZS1.js +145 -0
  1013. package/dist/signers-BjSgNAXP.d.ts +385 -0
  1014. package/dist/signing-keys-Ccr86Y2C.d.ts +90 -0
  1015. package/dist/solid/index.d.ts +8 -8
  1016. package/dist/solid/index.js +3 -8
  1017. package/dist/solid-controller-CZrt1Tg6.d.ts +11 -0
  1018. package/dist/solid-controller-DLsmrczT.js +33 -0
  1019. package/dist/solid-start/index.d.ts +8 -12
  1020. package/dist/solid-start/index.js +8 -7
  1021. package/dist/spec/index.d.ts +25 -5
  1022. package/dist/spec/index.js +37 -4
  1023. package/dist/spec-pins-Dqpml2dZ.d.ts +84 -0
  1024. package/dist/spec-pins-S4PymRxp.js +60 -0
  1025. package/dist/sql/index.d.ts +5 -548
  1026. package/dist/sql/index.js +5 -38398
  1027. package/dist/sql-BQshMgmB.js +422 -0
  1028. package/dist/sql-CgTZOQZ7.js +87439 -0
  1029. package/dist/sso-B5ZoEsXE.d.ts +131 -0
  1030. package/dist/sso-CwAnve68.js +217 -0
  1031. package/dist/ssr/index.d.ts +5 -6
  1032. package/dist/ssr/index.js +4 -4
  1033. package/dist/standard-C3_AAF3g.d.ts +7 -0
  1034. package/dist/standard-DZmwmIhV.js +25 -0
  1035. package/dist/stats-CUhqw6Ev.js +1128 -0
  1036. package/dist/storage/index.d.ts +3 -3
  1037. package/dist/storage/index.js +14 -10
  1038. package/dist/storage-api-B4Ib2Zpo.d.ts +582 -0
  1039. package/dist/store-B5qYKsTh.d.ts +68 -0
  1040. package/dist/streams/index.d.ts +4 -4
  1041. package/dist/streams/index.js +4 -4
  1042. package/dist/streams/redis/index.d.ts +1 -1
  1043. package/dist/streams/redis/index.js +4 -4
  1044. package/dist/stripe/index.d.ts +16 -0
  1045. package/dist/stripe/index.js +14 -0
  1046. package/dist/stripe-NVcNOhHy.d.ts +140 -0
  1047. package/dist/stripe-XZrSmDTf.js +32 -0
  1048. package/dist/subject-readers-81xiWh4M.d.ts +21 -0
  1049. package/dist/subject-readers-DDyPTIOr.js +46 -0
  1050. package/dist/subjects-DP-fvFkk.d.ts +77 -0
  1051. package/dist/subscribers-Cq--DL1E.js +34 -0
  1052. package/dist/supabase-mcp-DomZ-amK.js +28 -0
  1053. package/dist/support-BsqhV6jP.js +522 -0
  1054. package/dist/support-view-CznLe4jq.d.ts +17 -0
  1055. package/dist/svelte/index.d.ts +7 -7
  1056. package/dist/svelte/index.js +2 -2
  1057. package/dist/svelte-controller-CDAujo-_.js +50 -0
  1058. package/dist/svelte-controller-DDbju9CW.d.ts +10 -0
  1059. package/dist/sveltekit/index.d.ts +11 -13
  1060. package/dist/sveltekit/index.js +9 -9
  1061. package/dist/table-schema-pQlER3jj.js +283 -0
  1062. package/dist/tags-7NHyD1P8.d.ts +30 -0
  1063. package/dist/tags-DGldvcA4.js +84 -0
  1064. package/dist/tanstack-db/index.d.ts +2 -2
  1065. package/dist/tanstack-db/index.js +1 -1
  1066. package/dist/tanstack-db/supabase/index.d.ts +5 -6
  1067. package/dist/tanstack-db/supabase/index.js +180 -9
  1068. package/dist/tanstack-start/index.d.ts +7 -7
  1069. package/dist/tanstack-start/index.js +6 -6
  1070. package/dist/tax-DDZUB_oc.d.ts +273 -0
  1071. package/dist/tax-DZDpMMRw.js +140 -0
  1072. package/dist/tee-CdRV1tcj.js +101 -0
  1073. package/dist/template-DdgYjIZ5.js +123 -0
  1074. package/dist/temporal-CB5Fpo5d.js +79 -0
  1075. package/dist/temporal-required-DqRzr7i0.js +20 -0
  1076. package/dist/tenant-B-fiItlJ.js +27 -0
  1077. package/dist/tenant-DW_GmsW4.d.ts +17 -0
  1078. package/dist/tenant-naming-Bsj3Uvap.js +27 -0
  1079. package/dist/testing/index.d.ts +235 -32
  1080. package/dist/testing/index.js +1133 -76
  1081. package/dist/timing-BMCWgpdZ.js +92 -0
  1082. package/dist/topic-DB-1YTMj.js +561 -0
  1083. package/dist/topic-Dgs-eSYQ.d.ts +373 -0
  1084. package/dist/types-BO8lVTun.d.ts +363 -0
  1085. package/dist/types-C_GN-4ed.d.ts +162 -0
  1086. package/dist/types-DGHfTW8_.d.ts +9 -0
  1087. package/dist/types-DM8q3IOr.d.ts +240 -0
  1088. package/dist/types-DOaUIJxW.d.ts +205 -0
  1089. package/dist/types-DZj8CZMH.d.ts +649 -0
  1090. package/dist/types-P1S1cj6N.d.ts +564 -0
  1091. package/dist/types-R6syp1el.js +29 -0
  1092. package/dist/undo-0qM13zul.js +44 -0
  1093. package/dist/undo-D42sPjCf.d.ts +43 -0
  1094. package/dist/usage-BrJGPvCq.js +250 -0
  1095. package/dist/usage-CnQHSM_r.d.ts +202 -0
  1096. package/dist/vault-EnOQJWjn.d.ts +50 -0
  1097. package/dist/vercel-connect/index.d.ts +1 -1
  1098. package/dist/vercel-connect/index.js +4 -4
  1099. package/dist/verify-3NLjUIER.d.ts +142 -0
  1100. package/dist/verify-C9D_jjsQ.js +126 -0
  1101. package/dist/version-Bxj_xcUY.js +4 -0
  1102. package/dist/view-DZ63nqwt.js +105 -0
  1103. package/dist/view-SuASaomx.d.ts +90 -0
  1104. package/dist/vue/index.d.ts +8 -8
  1105. package/dist/vue/index.js +3 -16
  1106. package/dist/vue-controller-C9tFzqAc.js +32 -0
  1107. package/dist/vue-controller-D_ohttBZ.d.ts +11 -0
  1108. package/dist/watch-Blj1mQ9n.js +139 -0
  1109. package/dist/watch-D1wwzZ04.d.ts +84 -0
  1110. package/dist/watch-topic-D-rpUg5n.d.ts +28 -0
  1111. package/dist/watch-topic-miuymrli.js +57 -0
  1112. package/dist/wire-DEY0ajW9.js +45 -0
  1113. package/dist/workflow-builder-C5DBN7yq.js +697 -0
  1114. package/dist/workflow-sdk/builder/index.d.ts +46 -15
  1115. package/dist/workflow-sdk/builder/index.js +69 -21
  1116. package/dist/workflow-sdk/index.d.ts +75 -2
  1117. package/dist/workflow-sdk/index.js +83 -3
  1118. package/dist/workflow-sdk/world/index.d.ts +29 -4
  1119. package/dist/workflow-sdk/world/index.js +137 -59
  1120. package/dist/workflow-sdk-Di5pmCAu.d.ts +161 -0
  1121. package/dist/workflow-sdk-vjDWlnfX.js +243 -0
  1122. package/dist/workflow-sdk-world-DPMdBfzn.js +2103 -0
  1123. package/dist/workflows-DJXoxDZH.d.ts +243 -0
  1124. package/dist/workflows-DzdX28KN.js +282 -0
  1125. package/dist/yjs/index.d.ts +67 -0
  1126. package/dist/yjs/index.js +212 -0
  1127. package/package.json +800 -46
  1128. package/schemas/cli-commands-v1.json +220 -0
  1129. package/schemas/cli-result-v1.json +138 -0
  1130. package/schemas/config-v1.json +4503 -909
  1131. package/schemas/doctor-report-v1.json +30 -0
  1132. package/schemas/snapshot-v2.json +271 -0
  1133. package/skills/better-supabase/SKILL.md +12 -4
  1134. package/skills/better-supabase/references/plugins.md +2 -2
  1135. package/skills/better-supabase/references/ui-recipes.md +19324 -0
  1136. package/skills/better-supabase-api/SKILL.md +14 -14
  1137. package/skills/better-supabase-api/references/adapters.md +12 -2
  1138. package/skills/better-supabase-api/references/ai.md +4 -4
  1139. package/skills/better-supabase-api/references/expo.md +1 -1
  1140. package/skills/better-supabase-api/references/powersync.md +1 -1
  1141. package/skills/better-supabase-api/references/streams-credentials.md +8 -5
  1142. package/skills/better-supabase-auth/SKILL.md +18 -11
  1143. package/skills/better-supabase-auth/references/authorization-providers.md +5 -5
  1144. package/skills/better-supabase-testing/SKILL.md +2 -2
  1145. package/testing/act-cases.json +370 -0
  1146. package/dist/access-sql-CrSbK1q-.js +0 -181
  1147. package/dist/actor-CQTlc1Hh.d.ts +0 -43
  1148. package/dist/adapter-CN45ibbV.js +0 -1691
  1149. package/dist/agents-BY_LQXtQ.d.ts +0 -94
  1150. package/dist/ai-cache-Dfgk8nBT.js +0 -81
  1151. package/dist/ai-cache-DrUMMgp6.d.ts +0 -64
  1152. package/dist/ai-chat-CVLRWbtS.js +0 -744
  1153. package/dist/ai-chat-DXkMy74O.d.ts +0 -590
  1154. package/dist/ai-files-CioLu5du.js +0 -320
  1155. package/dist/ai-tasks-BRQ6iQLc.d.ts +0 -131
  1156. package/dist/announcements-Bouy0Ski.d.ts +0 -72
  1157. package/dist/announcements-p_BFofiR.js +0 -107
  1158. package/dist/api-Dnf2q-Ht.d.ts +0 -370
  1159. package/dist/api-DtHFC037.js +0 -676
  1160. package/dist/api-keys-C8BlF3L2.d.ts +0 -156
  1161. package/dist/assistant-DBlFDZsi.d.ts +0 -147
  1162. package/dist/attributes-5dYul0u0.js +0 -13
  1163. package/dist/authorization-BFCqamMs.d.ts +0 -172
  1164. package/dist/authorizer-ayxUDXXP.js +0 -126
  1165. package/dist/base64-D2gsioCY.js +0 -42
  1166. package/dist/before-route-CnR0C0Jr.js +0 -30
  1167. package/dist/bind-ButSzrHe.js +0 -97
  1168. package/dist/bind-CQ5mPyX1.d.ts +0 -62
  1169. package/dist/block-events-DTxU5tfr.js +0 -91
  1170. package/dist/block-fields-CroxUuF2.js +0 -49
  1171. package/dist/block-fields-D1pfrcIY.d.ts +0 -31
  1172. package/dist/block-helpers-C0Xj8War.d.ts +0 -37
  1173. package/dist/block-helpers-Cy3pB96I.js +0 -222
  1174. package/dist/block-hooks-BPNMIlLl.js +0 -114
  1175. package/dist/block-hooks-DaOVC7SC.d.ts +0 -107
  1176. package/dist/block-transport-bAKh-dGc.js +0 -85
  1177. package/dist/block-transport-inD4fFq-.d.ts +0 -70
  1178. package/dist/build-hPwk3_X5.js +0 -1296
  1179. package/dist/build-meLuYGri.js +0 -689
  1180. package/dist/channel-_2Mx1Oyu.d.ts +0 -70
  1181. package/dist/channels-CkgQ_X60.js +0 -114
  1182. package/dist/cli/add-1dc5wM5k.js +0 -69
  1183. package/dist/cli/bin.d.ts +0 -1
  1184. package/dist/cli/cache-CIfA-jBV.js +0 -483
  1185. package/dist/cli/codemod-JVlTQQG2.js +0 -491
  1186. package/dist/cli/command-DV-StG1x.js +0 -507
  1187. package/dist/cli/config-C2Pz2_4A.js +0 -52
  1188. package/dist/cli/config-DpbF8ML3.js +0 -2
  1189. package/dist/cli/config-M-WzL9O2.js +0 -1175
  1190. package/dist/cli/db-BkcfOlyB.js +0 -53
  1191. package/dist/cli/diff-D1jGdb3Y.js +0 -752
  1192. package/dist/cli/dist-DBPdlPYK.js +0 -1112
  1193. package/dist/cli/dist-DRAVaE6w.js +0 -842
  1194. package/dist/cli/dist-DreZ24Sz.js +0 -129
  1195. package/dist/cli/doctor-VcDtuusV.js +0 -3686
  1196. package/dist/cli/emit-BHHfwUoT.js +0 -1136
  1197. package/dist/cli/env-B--LMhEe.js +0 -514
  1198. package/dist/cli/env-vzBG90Um.js +0 -2
  1199. package/dist/cli/env-zHJtMIBo.js +0 -116
  1200. package/dist/cli/errors-CqTLXe2M.js +0 -72
  1201. package/dist/cli/fastest-levenshtein-CF7BCi9l.js +0 -120
  1202. package/dist/cli/files-BVupXPIC.js +0 -34
  1203. package/dist/cli/gen-DmVj3u4L.js +0 -322
  1204. package/dist/cli/glue-C1UE8gQN.js +0 -468
  1205. package/dist/cli/init-CVZ3s5kl.js +0 -258
  1206. package/dist/cli/introspect-BToGNfm-.js +0 -81
  1207. package/dist/cli/io-CFzJVJ68.js +0 -37
  1208. package/dist/cli/jsonc-BUniUpOk.js +0 -2
  1209. package/dist/cli/keys-CJhtIxJ3.js +0 -85
  1210. package/dist/cli/metadata-DSRKCaf-.js +0 -133
  1211. package/dist/cli/openapi-DWa4Ir1q.js +0 -60
  1212. package/dist/cli/project-DZRaBaY7.js +0 -75
  1213. package/dist/cli/prompts-BdeVmVpg.js +0 -2
  1214. package/dist/cli/prompts-DZJB1nTw.js +0 -1142
  1215. package/dist/cli/read-sets-DjJrm8Wj.js +0 -223
  1216. package/dist/cli/rolldown-runtime-CMFfr-1z.js +0 -26
  1217. package/dist/cli/run-DA6_lg3w.js +0 -389
  1218. package/dist/cli/run-DuN1MX-7.js +0 -705
  1219. package/dist/cli/scaffold-5DenHSxF.js +0 -292
  1220. package/dist/cli/scaffold-CwQUMFRb.js +0 -2
  1221. package/dist/cli/seed-CzBmrGON.js +0 -96
  1222. package/dist/cli/seed-DOmit9Hq.js +0 -2
  1223. package/dist/cli/skills-CnO8QFS7.js +0 -139
  1224. package/dist/cli/snapshot-Bstk6ulj.js +0 -287
  1225. package/dist/cli/source-args-BYfq6imV.js +0 -31
  1226. package/dist/cli/spec-CzosTYm3.js +0 -7438
  1227. package/dist/cli/spec-T_0Bcyw7.js +0 -2
  1228. package/dist/cli/sql-BKOOQAX3.js +0 -517
  1229. package/dist/cli/sql-DJrNDxQm.js +0 -3
  1230. package/dist/cli/sql-layout-D6cphHT3.js +0 -69
  1231. package/dist/cli/style-CB3vxgh0.js +0 -29
  1232. package/dist/cli/supabase-toml-B-bIukQF.js +0 -1095
  1233. package/dist/cli/typegen-Demi5-VQ.js +0 -486
  1234. package/dist/cli/typegen-version-DeFbtzYI.js +0 -8
  1235. package/dist/cli/validate-Ca13ktgz.js +0 -7522
  1236. package/dist/cli/version-B4k0aUxS.js +0 -4
  1237. package/dist/client-wxeTQFtB.js +0 -310
  1238. package/dist/cloud-event-Dune0KI7.d.ts +0 -64
  1239. package/dist/compiler-V1qvcST1.d.ts +0 -14
  1240. package/dist/compose-BHej1acw.js +0 -53
  1241. package/dist/composite-CWAJTRBF.d.ts +0 -146
  1242. package/dist/composite-zTe0TCqj.js +0 -130
  1243. package/dist/config-DlKvtt95.js +0 -540
  1244. package/dist/connector-CySQEFcW.d.ts +0 -107
  1245. package/dist/connectors--PGhmiu0.d.ts +0 -120
  1246. package/dist/context-DsV2SueA.d.ts +0 -246
  1247. package/dist/context-nPDvQ-Zl.js +0 -41
  1248. package/dist/cron-D25Ukpxy.js +0 -145
  1249. package/dist/cron-route-D2AN9SA1.js +0 -24
  1250. package/dist/csv-BZnHA1Py.js +0 -25
  1251. package/dist/define-CFQcvM20.js +0 -1949
  1252. package/dist/define-DmcfoNXB.d.ts +0 -1005
  1253. package/dist/embeddings-4ZvFzjsU.js +0 -127
  1254. package/dist/embeddings-B4vhS-dY.d.ts +0 -68
  1255. package/dist/ended-CcvcRqEd.d.ts +0 -69
  1256. package/dist/entitlements-BYFf0Cdh.js +0 -24
  1257. package/dist/entitlements-Ds8qoYZ-.d.ts +0 -51
  1258. package/dist/envelope-DqnYGRw7.js +0 -47
  1259. package/dist/errors-2M6CKMP4.js +0 -271
  1260. package/dist/errors-rZ7VIqp6.js +0 -44
  1261. package/dist/escape-like-DDWoHzh_.d.ts +0 -15
  1262. package/dist/eve-CoAIcCkq.d.ts +0 -151
  1263. package/dist/events-D1BOCll8.d.ts +0 -551
  1264. package/dist/executor-B-fD7DLt.js +0 -735
  1265. package/dist/executor-B_Hfobee.js +0 -162
  1266. package/dist/executor-C-R4pucm.js +0 -83
  1267. package/dist/executor-CpxLPCiz.d.ts +0 -36
  1268. package/dist/executor-DfEtf0cq.d.ts +0 -164
  1269. package/dist/executor-Drzu3dBK.d.ts +0 -261
  1270. package/dist/executor-ngjKL_Pe.d.ts +0 -30
  1271. package/dist/field-errors-DIe9XYWL.d.ts +0 -109
  1272. package/dist/format-DTXdu8ya.d.ts +0 -70
  1273. package/dist/framework-148t1m3C.d.ts +0 -25
  1274. package/dist/framework-3ey3QmrO.js +0 -51
  1275. package/dist/function-contract-BcZenXMO.d.ts +0 -8
  1276. package/dist/gateway-S9vicgeo.d.ts +0 -130
  1277. package/dist/graph-BGyLLFLX.js +0 -265
  1278. package/dist/hooks-Bhza9Hnr.js +0 -277
  1279. package/dist/http-sbmBe5d2.js +0 -25
  1280. package/dist/impersonation-DcqaTBHx.js +0 -148
  1281. package/dist/inbox-Cd1KCEBL.d.ts +0 -384
  1282. package/dist/index-B72Rvv_j.d.ts +0 -89
  1283. package/dist/index-BCHR4Ucl.d.ts +0 -300
  1284. package/dist/index-BUK7jUzR.d.ts +0 -82
  1285. package/dist/index-Ba1SI-uO.d.ts +0 -1331
  1286. package/dist/index-BfxOaOYs.d.ts +0 -245
  1287. package/dist/index-CicIyqOe.d.ts +0 -55
  1288. package/dist/index-D69h4QqD.d.ts +0 -74
  1289. package/dist/index-DG2SUXDQ.d.ts +0 -58
  1290. package/dist/index-DoNVLHOU.d.ts +0 -206
  1291. package/dist/index-R274XFlg.d.ts +0 -138
  1292. package/dist/index-_4R4b01v.d.ts +0 -257
  1293. package/dist/json-schema-CT4tvrkA.js +0 -548
  1294. package/dist/kit-BhHr9T9v.js +0 -104
  1295. package/dist/kit-W99LCPBS.d.ts +0 -66
  1296. package/dist/knowledge-CAReFpRA.d.ts +0 -176
  1297. package/dist/knowledge-DnHtb64A.js +0 -256
  1298. package/dist/list-query-D3JQeEL7.d.ts +0 -164
  1299. package/dist/list-query-gl808ac1.js +0 -459
  1300. package/dist/live-CTAZQkwl.js +0 -257
  1301. package/dist/messages-CJoHHCWT.js +0 -514
  1302. package/dist/mfa-SZc9YYyb.d.ts +0 -54
  1303. package/dist/model-OgBxvk3N.d.ts +0 -300
  1304. package/dist/model-messages-Cxw_Up4f.js +0 -206
  1305. package/dist/modules-DksjZyMW.js +0 -77
  1306. package/dist/modules-DpPwzC7E.d.ts +0 -192
  1307. package/dist/onboarding-LZvlK1P4.d.ts +0 -62
  1308. package/dist/optional-peer-D1pi-skw.js +0 -24
  1309. package/dist/outbox-DZfAvfzC.d.ts +0 -161
  1310. package/dist/plugin-CPK2HsbY.d.ts +0 -190
  1311. package/dist/pool-gkhbGp2E.d.ts +0 -89
  1312. package/dist/postgrest-BUqLag2Q.d.ts +0 -53
  1313. package/dist/problem-CJvFeGu7.js +0 -126
  1314. package/dist/problem-TvGdxO1t.d.ts +0 -73
  1315. package/dist/provider-DxRTex4x.js +0 -57
  1316. package/dist/provider-ib9wzUDz.d.ts +0 -113
  1317. package/dist/rate-limit-Bw7HgmFj.js +0 -260
  1318. package/dist/react-Bmpo59D7.js +0 -409
  1319. package/dist/react-topic-seAWjL3_.js +0 -38
  1320. package/dist/read-set-DAeWhqPf.js +0 -314
  1321. package/dist/refusal-CFI8-5nf.d.ts +0 -18
  1322. package/dist/refusal-K78A1Vmq.js +0 -61
  1323. package/dist/replicas-CwrYp5Zj.js +0 -94
  1324. package/dist/resolve-Bvgf3ut_.js +0 -786
  1325. package/dist/resolve-MxXVWyhd.d.ts +0 -173
  1326. package/dist/resource--vTrBe6I.d.ts +0 -103
  1327. package/dist/resource-BqNqlYg9.js +0 -91
  1328. package/dist/resource-DA811u_4.js +0 -463
  1329. package/dist/resource-execute-rbKvuCsY.d.ts +0 -12
  1330. package/dist/resource-types-CqB6GWGT.d.ts +0 -141
  1331. package/dist/resources-BVYPnuLo.js +0 -56
  1332. package/dist/resources-DZSk8tXJ.d.ts +0 -7
  1333. package/dist/respond-Cw-zanCm.d.ts +0 -93
  1334. package/dist/respond-volM3ByS.js +0 -91
  1335. package/dist/result-BchM1XZn.d.ts +0 -288
  1336. package/dist/result-DEqHCMKP.js +0 -128
  1337. package/dist/scope-CDHcS7dE.js +0 -90
  1338. package/dist/search-CUWCRYKL.js +0 -9
  1339. package/dist/server-types-CrAmZ8jv.d.ts +0 -614
  1340. package/dist/session-ChiXDZdZ.d.ts +0 -72
  1341. package/dist/shared-CBxosKK3.js +0 -75
  1342. package/dist/shared-DHjhfRdV.js +0 -60
  1343. package/dist/shared-DTneRoxi.js +0 -14
  1344. package/dist/sign-in-D_yoP0PF.js +0 -86
  1345. package/dist/signatures-BRS_p3WD.d.ts +0 -34
  1346. package/dist/signatures-DsWv_bYR.js +0 -103
  1347. package/dist/signers-cpdmZYrv.d.ts +0 -166
  1348. package/dist/spec-pins-CwzDY25w.d.ts +0 -44
  1349. package/dist/spec-pins-DsLfUH7l.js +0 -40
  1350. package/dist/sql-CwuqaQ4Y.js +0 -388
  1351. package/dist/standard-DkzZUneg.js +0 -25
  1352. package/dist/standard-lmkbOtPB.d.ts +0 -7
  1353. package/dist/stats-DhU78Ctf.js +0 -1127
  1354. package/dist/storage-api-CB7Zl1Ci.d.ts +0 -582
  1355. package/dist/store-DsIYEBnv.d.ts +0 -68
  1356. package/dist/stripe-D04h-QBT.d.ts +0 -136
  1357. package/dist/stripe-v-Y2lmop.js +0 -32
  1358. package/dist/supabase-mcp-Cpn5A4i-.js +0 -28
  1359. package/dist/support-D1pFFouF.js +0 -350
  1360. package/dist/support-view-scqMgtOo.d.ts +0 -17
  1361. package/dist/table-schema-htM_SbCW.js +0 -286
  1362. package/dist/tags-BO9LjtWG.d.ts +0 -30
  1363. package/dist/tee-Cb98Vn3b.js +0 -101
  1364. package/dist/template-lPVh-EwW.js +0 -123
  1365. package/dist/temporal-BJGitm-h.js +0 -79
  1366. package/dist/temporal-required-BtynQtM-.js +0 -20
  1367. package/dist/tenant-CM368LXb.d.ts +0 -17
  1368. package/dist/tenant-I1TEZ_BX.js +0 -27
  1369. package/dist/timing-CyTQPubY.js +0 -92
  1370. package/dist/types-6cYK9pbJ.js +0 -29
  1371. package/dist/types-Bb_4-vdW.d.ts +0 -220
  1372. package/dist/types-CD6yCDx3.d.ts +0 -359
  1373. package/dist/types-CbOUc5IH.d.ts +0 -156
  1374. package/dist/types-CoE5Zwy4.d.ts +0 -348
  1375. package/dist/types-DSJ3-m9X.d.ts +0 -192
  1376. package/dist/types-D__3EN0q.d.ts +0 -425
  1377. package/dist/usage-D0NNUFfr.d.ts +0 -177
  1378. package/dist/vault-BpmApxxW.d.ts +0 -50
  1379. package/dist/verify-C91Wyp40.d.ts +0 -142
  1380. package/dist/verify-CJbYfADA.js +0 -124
  1381. package/dist/version-Cq8gfDbd.js +0 -4
  1382. package/dist/view-D5ryq3gz.js +0 -99
  1383. package/dist/view-TpXEUcVN.d.ts +0 -87
  1384. package/dist/watch-BcvtAHOd.js +0 -122
  1385. package/dist/watch-COzRWvVN.d.ts +0 -74
  1386. package/dist/wire-Df3EWkG8.js +0 -45
  1387. package/dist/workflow-builder-CHqHpAVt.js +0 -399
  1388. package/dist/workflow-sdk-C2WJ_G2O.js +0 -173
  1389. package/dist/workflow-sdk-DTZyrvNo.d.ts +0 -98
  1390. package/dist/workflow-sdk-world-CMV1ahFW.js +0 -1399
  1391. package/dist/workflows-CcpCBfIe.d.ts +0 -185
  1392. package/dist/workflows-IvxzG2cl.js +0 -217
@@ -0,0 +1,2049 @@
1
+ import { c as PRESET_CATALOG, i as presetOf, s as resolvePreset } from "../config-C4RQDF6t.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-CkyahUjo.js";
4
+ import { c as designConfig, n as diffDesigns } from "../preset-BBrL6_Ln.js";
5
+ import { E as SQL_MODULES, i as moduleLayout, m as renderModules } from "../sql-CgTZOQZ7.js";
6
+ //#region src/create/column-keys.ts
7
+ /** The most options a select takes, and the longest option. */
8
+ const MAX_OPTIONS = 100;
9
+ const MAX_OPTION = 100;
10
+ const AUTH_USERS$2 = "auth.users";
11
+ /** The column types each format fits, as `appTables` checks them. */
12
+ const FORMAT_TYPES = {
13
+ email: ["text"],
14
+ url: ["text"],
15
+ phone: ["text"],
16
+ long_text: ["text"],
17
+ color: ["text"],
18
+ rating: ["integer", "bigint"],
19
+ percent: ["integer", "numeric"],
20
+ currency: ["bigint"]
21
+ };
22
+ const FORMAT_LABELS = {
23
+ email: "email",
24
+ url: "url",
25
+ phone: "phone",
26
+ long_text: "long text",
27
+ color: "color",
28
+ rating: "rating",
29
+ percent: "percent",
30
+ currency: "money"
31
+ };
32
+ const NUMBER_TYPES = /* @__PURE__ */ new Set([
33
+ "integer",
34
+ "bigint",
35
+ "numeric"
36
+ ]);
37
+ const CONTROL = /\p{Cc}/u;
38
+ /**
39
+ * Whether a column signed-in users can't write is required with no default,
40
+ * which `appTables` refuses: nobody but the server could insert a row.
41
+ */
42
+ function lockedWithoutDefault(column) {
43
+ return column.access !== void 0 && column.nullable === false && column.default === void 0 && column.identity !== true;
44
+ }
45
+ /** Whether `min` and `max` apply to a `type` column, as a value or a length. */
46
+ function takesBounds(type) {
47
+ return type === "text" || NUMBER_TYPES.has(type);
48
+ }
49
+ /** Whether a bound of a `type` column has to be a whole number. */
50
+ function wholeBounds(type) {
51
+ return type !== "numeric";
52
+ }
53
+ function fitsBound(type, value) {
54
+ return value !== void 0 && takesBounds(type) && (!wholeBounds(type) || Number.isInteger(value)) && (type !== "text" || value >= 0);
55
+ }
56
+ /**
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.
60
+ */
61
+ function fitted(column) {
62
+ const { format, options, min, max, identity, default: fallback, nullable, ...rest } = column;
63
+ const { type } = column;
64
+ const counted = identity === true && (type === "integer" || type === "bigint");
65
+ const next = { ...rest };
66
+ if (nullable !== void 0 && !(counted && nullable)) next.nullable = nullable;
67
+ if (fallback !== void 0 && !counted && isAppDefault(type, fallback)) next.default = fallback;
68
+ if (format !== void 0 && FORMAT_TYPES[format].includes(type)) next.format = format;
69
+ if (options !== void 0 && (type === "text" || type === "text[]")) next.options = options;
70
+ if (fitsBound(type, min)) next.min = min;
71
+ if (fitsBound(type, max)) next.max = max;
72
+ if (counted) next.identity = true;
73
+ return next;
74
+ }
75
+ /** Why `option` can't join a select's `options`, or `undefined` when it can. */
76
+ function optionError(options, option) {
77
+ if (option === "") return "Enter an option.";
78
+ if (option.length > MAX_OPTION) return `Use at most ${MAX_OPTION} characters.`;
79
+ if (CONTROL.test(option)) return "Leave out line breaks and tabs.";
80
+ if (options.includes(option)) return `${option} is already an option.`;
81
+ if (options.length >= MAX_OPTIONS) return `A select takes at most ${MAX_OPTIONS} options.`;
82
+ }
83
+ /** Why `value` can't be a bound of `column`, or `undefined` when it can (an empty value clears it). */
84
+ function boundError(column, side, value) {
85
+ const trimmed = value.trim();
86
+ if (trimmed === "") return;
87
+ const number = Number(trimmed);
88
+ if (!Number.isFinite(number)) return "Enter a number.";
89
+ if (column.type === "text" && (!Number.isInteger(number) || number < 0)) return "A length is a whole number of 0 or more.";
90
+ if (wholeBounds(column.type) && !Number.isInteger(number)) return `A ${column.type} bound is a whole number.`;
91
+ if (side === "min" && column.max !== void 0 && number > column.max) return `Keep it at or below the largest value, ${column.max}.`;
92
+ if (side === "max" && column.min !== void 0 && number < column.min) return `Keep it at or above the smallest value, ${column.min}.`;
93
+ }
94
+ /** `column` with its bounds replaced; a bound left out is removed. */
95
+ function withBounds(column, bounds) {
96
+ const { min: _min, max: _max, ...rest } = column;
97
+ const next = { ...rest };
98
+ if (bounds.min !== void 0) next.min = bounds.min;
99
+ if (bounds.max !== void 0) next.max = bounds.max;
100
+ return next;
101
+ }
102
+ /** What the canvas shows for a column that is more than its type, such as an email or a select. */
103
+ function columnLabel(column) {
104
+ if (column.identity === true) return "autonumber";
105
+ if (column.options !== void 0) return column.type === "text[]" ? "multi-select" : "select";
106
+ if (column.references?.block === void 0 && column.references?.table === AUTH_USERS$2) return "person";
107
+ return column.format === void 0 ? void 0 : FORMAT_LABELS[column.format];
108
+ }
109
+ //#endregion
110
+ //#region src/create/design-computed.ts
111
+ /** The aggregates a rollup takes (`APP_ROLLUP_AGGREGATES`). */
112
+ const ROLLUP_AGGREGATES = [
113
+ "count",
114
+ "sum",
115
+ "min",
116
+ "max",
117
+ "avg"
118
+ ];
119
+ const NUMBERS = /* @__PURE__ */ new Set([
120
+ "integer",
121
+ "bigint",
122
+ "numeric"
123
+ ]);
124
+ const ORDERED = /* @__PURE__ */ new Set([
125
+ ...NUMBERS,
126
+ "date",
127
+ "timestamptz",
128
+ "text"
129
+ ]);
130
+ function isRollupAggregate(value) {
131
+ return ROLLUP_AGGREGATES.some((each) => each === value);
132
+ }
133
+ /** The columns of `table` a rollup or lookup can read, with their types. */
134
+ function readableColumns(table) {
135
+ return [...Object.entries(table.columns ?? {}).map(([name, column]) => [name, column.type]), ...table.timestamps === false ? [] : [["created_at", "timestamptz"], ["updated_at", "timestamptz"]]];
136
+ }
137
+ /** The columns `aggregate` can read: numbers for sum and avg, ordered types for min and max, none for count. */
138
+ function rollupColumns(child, aggregate) {
139
+ if (aggregate === "count") return [];
140
+ const fits = aggregate === "sum" || aggregate === "avg" ? NUMBERS : ORDERED;
141
+ return readableColumns(child).filter(([, type]) => fits.has(type)).map(([name]) => name);
142
+ }
143
+ /** The select columns of `child` (text with options) a rollup can filter on. */
144
+ function filterColumns(child) {
145
+ return Object.entries(child.columns ?? {}).flatMap(([name, column]) => column.type === "text" && column.options !== void 0 ? [[name, column.options]] : []);
146
+ }
147
+ /** Each app table column that references `parent`, as `{ table, via }`: what a rollup on `parent` can aggregate. */
148
+ function rollupSources(tables, parent) {
149
+ 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
+ table,
151
+ via
152
+ })));
153
+ }
154
+ /** Each column of `name` that references another app table, with that table: what a lookup can follow. */
155
+ function lookupSources(tables, name) {
156
+ 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
+ via,
158
+ target: column.references.table
159
+ }] : []);
160
+ }
161
+ function rollupValid(tables, parent, rollup) {
162
+ const child = tables[rollup.table];
163
+ if (child === void 0 || !rollupSources(tables, parent).some((each) => each.table === rollup.table && each.via === rollup.via)) return false;
164
+ const column = rollup.aggregate === "count" ? rollup.column === void 0 : rollup.column !== void 0 && rollupColumns(child, rollup.aggregate).includes(rollup.column);
165
+ const where = rollup.where === void 0 || filterColumns(child).some(([name, options]) => name === rollup.where?.column && options.includes(rollup.where.equals));
166
+ return column && where;
167
+ }
168
+ function lookupValid(tables, name, lookup) {
169
+ const source = lookupSources(tables, name).find((each) => each.via === lookup.via);
170
+ const target = source === void 0 ? void 0 : tables[source.target];
171
+ return target !== void 0 && readableColumns(target).some(([column]) => column === lookup.column);
172
+ }
173
+ function kept(record, keep) {
174
+ if (record === void 0) return;
175
+ const entries = Object.entries(record).filter(([name, value]) => keep(name, value));
176
+ return entries.length === 0 ? void 0 : Object.fromEntries(entries);
177
+ }
178
+ /** `table` with its rollups and lookups replaced, leaving out an empty set. */
179
+ function withComputed(table, rollups, lookups) {
180
+ const { rollups: _rollups, lookups: _lookups, ...rest } = table;
181
+ const next = { ...rest };
182
+ if (rollups !== void 0 && Object.keys(rollups).length > 0) next.rollups = rollups;
183
+ if (lookups !== void 0 && Object.keys(lookups).length > 0) next.lookups = lookups;
184
+ return next;
185
+ }
186
+ /** `table` with a rollup or lookup set under `name`, replacing `previous` in its place. */
187
+ function tableWithComputed(table, name, computed, previous) {
188
+ const placed = (record, value) => {
189
+ const entries = Object.entries(record ?? {});
190
+ const added = [name, value];
191
+ return Object.fromEntries(entries.some(([each]) => each === previous) ? entries.map(([each, config]) => each === previous ? added : [each, config]) : [...entries, added]);
192
+ };
193
+ return "rollup" in computed ? withComputed(table, placed(table.rollups, computed.rollup), table.lookups) : withComputed(table, table.rollups, placed(table.lookups, computed.lookup));
194
+ }
195
+ /** `table` without the rollup or lookup `name`. */
196
+ function tableWithoutComputed(table, name) {
197
+ return withComputed(table, kept(table.rollups, (each) => each !== name), kept(table.lookups, (each) => each !== name));
198
+ }
199
+ /**
200
+ * 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.
204
+ */
205
+ function prunedComputed(tables) {
206
+ return Object.fromEntries(Object.entries(tables).map(([name, table]) => {
207
+ const own = new Set(Object.keys(table.columns ?? {}));
208
+ const rollups = kept(table.rollups, (column, rollup) => !own.has(column) && rollupValid(tables, name, rollup));
209
+ return [name, withComputed(table, rollups, kept(table.lookups, (column, lookup) => !own.has(column) && rollups?.[column] === void 0 && lookupValid(tables, name, lookup)))];
210
+ }));
211
+ }
212
+ /** The rollups that aggregate `from`, pointed at `to`. */
213
+ function computedTableRenamed(tables, from, to) {
214
+ return Object.fromEntries(Object.entries(tables).map(([name, table]) => [name, table.rollups === void 0 ? table : {
215
+ ...table,
216
+ rollups: Object.fromEntries(Object.entries(table.rollups).map(([column, rollup]) => [column, rollup.table === from ? {
217
+ ...rollup,
218
+ table: to
219
+ } : rollup]))
220
+ }]));
221
+ }
222
+ /** The rollup fitted to a new source or aggregate: a column the aggregate can read, and a filter the child still has. */
223
+ function fittedRollup(tables, rollup) {
224
+ const child = tables[rollup.table] ?? {};
225
+ const columns = rollupColumns(child, rollup.aggregate);
226
+ const aggregate = rollup.aggregate !== "count" && columns.length === 0 ? "count" : rollup.aggregate;
227
+ const column = aggregate === "count" ? void 0 : rollup.column !== void 0 && columns.includes(rollup.column) ? rollup.column : columns[0];
228
+ const where = rollup.where !== void 0 && filterColumns(child).some(([name, options]) => name === rollup.where?.column && options.includes(rollup.where.equals)) ? rollup.where : void 0;
229
+ const next = {
230
+ table: rollup.table,
231
+ via: rollup.via,
232
+ aggregate
233
+ };
234
+ if (column !== void 0) next.column = column;
235
+ if (where !== void 0) next.where = where;
236
+ return next;
237
+ }
238
+ function rollupRenamed(rollup, swap) {
239
+ const next = {
240
+ ...rollup,
241
+ via: swap(rollup.via)
242
+ };
243
+ if (rollup.column !== void 0) next.column = swap(rollup.column);
244
+ if (rollup.where !== void 0) next.where = {
245
+ ...rollup.where,
246
+ column: swap(rollup.where.column)
247
+ };
248
+ return next;
249
+ }
250
+ /**
251
+ * 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.
254
+ */
255
+ function computedColumnRenamed(tables, table, from, to) {
256
+ const swap = (column) => column === from ? to : column;
257
+ const lookupTarget = (owner, via) => {
258
+ const reference = tables[owner]?.columns?.[via]?.references;
259
+ return reference?.block === void 0 ? reference?.table : void 0;
260
+ };
261
+ return Object.fromEntries(Object.entries(tables).map(([name, config]) => {
262
+ return [name, withComputed(config, config.rollups === void 0 ? void 0 : Object.fromEntries(Object.entries(config.rollups).map(([column, rollup]) => [column, rollup.table === table ? rollupRenamed(rollup, swap) : rollup])), config.lookups === void 0 ? void 0 : Object.fromEntries(Object.entries(config.lookups).map(([column, lookup]) => {
263
+ const via = name === table ? swap(lookup.via) : lookup.via;
264
+ return [column, {
265
+ via,
266
+ column: lookupTarget(name, via) === table ? swap(lookup.column) : lookup.column
267
+ }];
268
+ })))];
269
+ }));
270
+ }
271
+ function rollupSummary(rollup) {
272
+ const what = rollup.aggregate === "count" ? `count of ${rollup.table}` : `${rollup.aggregate} of ${rollup.table}.${rollup.column ?? ""}`;
273
+ return rollup.where === void 0 ? what : `${what} where ${rollup.where.column} = ${rollup.where.equals}`;
274
+ }
275
+ /** The rollups and lookups of an app table, in the view's column order. */
276
+ function computedRows(table) {
277
+ return [...Object.entries(table.rollups ?? {}).map(([name, rollup]) => ({
278
+ name,
279
+ kind: "rollup",
280
+ summary: rollupSummary(rollup),
281
+ label: rollup.aggregate
282
+ })), ...Object.entries(table.lookups ?? {}).map(([name, lookup]) => {
283
+ return {
284
+ name,
285
+ kind: "lookup",
286
+ summary: `${table.columns?.[lookup.via]?.references?.table ?? lookup.via}.${lookup.column} through ${lookup.via}`,
287
+ label: "lookup"
288
+ };
289
+ })];
290
+ }
291
+ //#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
+ //#region src/create/design.ts
361
+ const EMPTY_DESIGN = {};
362
+ /** The schema app tables go in. */
363
+ const APP_SCHEMA = "public";
364
+ /** The module name app tables carry in the diagram. */
365
+ const APP_MODULE = "app-tables";
366
+ /** Column names every app table creates itself. */
367
+ const IMPLICIT_COLUMNS = /* @__PURE__ */ new Set([
368
+ "id",
369
+ "created_at",
370
+ "updated_at"
371
+ ]);
372
+ function appTableId(name) {
373
+ return `${APP_SCHEMA}.${name}`;
374
+ }
375
+ function isAppTable(table) {
376
+ return table.module === APP_MODULE;
377
+ }
378
+ function isEmptyDesign(design) {
379
+ return Object.keys(design.appTables ?? {}).length === 0 && Object.keys(design.extraColumns ?? {}).length === 0 && Object.keys(design.positions ?? {}).length === 0;
380
+ }
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
+ /** Why `name` can't name an app table or column, by the library's rules. */
402
+ function identifierError(name) {
403
+ return appIdentifierError(name);
404
+ }
405
+ /** The names of an app table's columns, its implicit ones included. */
406
+ function columnNamesOf(table, preset) {
407
+ const scope = scopeColumnOf(table, preset);
408
+ return [
409
+ "id",
410
+ ...scope === null ? [] : [scope.name],
411
+ ...Object.keys(table.columns ?? {}),
412
+ ...table.timestamps === false ? [] : ["created_at", "updated_at"],
413
+ ...computedRows(table).map((row) => row.name)
414
+ ];
415
+ }
416
+ /** Why a column can't be added to an app table, or `undefined` when it can. */
417
+ function columnError(table, name, preset) {
418
+ const invalid = identifierError(name);
419
+ if (invalid !== void 0) return invalid;
420
+ if (IMPLICIT_COLUMNS.has(name) || columnNamesOf(table, preset).includes(name)) return `The table already has a ${name} column.`;
421
+ if (appReservedColumns(preset.tenantName).includes(name)) return `${name} is a column every app table can get from its scope. Choose another name.`;
422
+ }
423
+ /**
424
+ * Why `value` can't be the default of `column` (its type, options and
425
+ * bounds), or `undefined` when it can or is empty.
426
+ */
427
+ function defaultError(column, value) {
428
+ const trimmed = value.trim();
429
+ return trimmed === "" ? void 0 : appDefaultError(column, trimmed);
430
+ }
431
+ /** A column with its type changed, dropping the keys the new type can't take. */
432
+ function retyped(column, type) {
433
+ return fitted({
434
+ ...column,
435
+ type
436
+ });
437
+ }
438
+ /** A free app table name: `base`, then `base_2`, `base_3` and so on. */
439
+ function freeTableName(design, taken, base = "items") {
440
+ const used = (name) => taken.has(appTableId(name)) || design.appTables?.[name] !== void 0;
441
+ if (!used(base)) return base;
442
+ let index = 2;
443
+ while (used(`${base}_${index}`)) index += 1;
444
+ return `${base}_${index}`;
445
+ }
446
+ function withAppTables(design, appTables) {
447
+ const { appTables: _drop, ...rest } = design;
448
+ return Object.keys(appTables).length === 0 ? rest : {
449
+ ...rest,
450
+ appTables: prunedComputed(appTables)
451
+ };
452
+ }
453
+ function withPositions(design, positions) {
454
+ const { positions: _drop, ...rest } = design;
455
+ return Object.keys(positions).length === 0 ? rest : {
456
+ ...rest,
457
+ positions
458
+ };
459
+ }
460
+ function omitKey(record, key) {
461
+ const { [key]: _drop, ...rest } = record ?? {};
462
+ return rest;
463
+ }
464
+ /** Adds an app table, placed at `position` when given. */
465
+ function addTable(design, name, table = {}, position) {
466
+ const next = withAppTables(design, {
467
+ ...design.appTables,
468
+ [name]: table
469
+ });
470
+ return position === void 0 ? next : withPositions(next, {
471
+ ...next.positions,
472
+ [appTableId(name)]: position
473
+ });
474
+ }
475
+ /**
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.
478
+ */
479
+ function deleteTable(design, name) {
480
+ const rest = omitKey(design.appTables, name);
481
+ return withPositions(withAppTables(design, Object.fromEntries(Object.entries(rest).map(([key, table]) => {
482
+ const dropped = new Set(Object.entries(table.columns ?? {}).filter(([, column]) => column.references?.block === void 0 && column.references?.table === name).map(([column]) => column));
483
+ return [key, dropped.size === 0 ? table : withKeySets({
484
+ ...table,
485
+ columns: Object.fromEntries(Object.entries(table.columns ?? {}).filter(([column]) => !dropped.has(column)))
486
+ }, (columns) => columns.filter((column) => !dropped.has(column)))];
487
+ }))), omitKey(design.positions, appTableId(name)));
488
+ }
489
+ /** Renames an app table and the references to it. */
490
+ function renameTable(design, from, to) {
491
+ if (from === to || design.appTables?.[from] === void 0) return design;
492
+ const appTables = Object.fromEntries(Object.entries(design.appTables).map(([key, table]) => [key === from ? to : key, {
493
+ ...table,
494
+ columns: Object.fromEntries(Object.entries(table.columns ?? {}).map(([name, column]) => [name, column.references?.block === void 0 && column.references?.table === from ? {
495
+ ...column,
496
+ references: {
497
+ ...column.references,
498
+ table: to
499
+ }
500
+ } : column]))
501
+ }]));
502
+ const position = design.positions?.[appTableId(from)];
503
+ const positions = omitKey(design.positions, appTableId(from));
504
+ return withPositions(withAppTables(design, computedTableRenamed(appTables, from, to)), position === void 0 ? positions : {
505
+ ...positions,
506
+ [appTableId(to)]: position
507
+ });
508
+ }
509
+ const TABLE_PATCH_KEYS = [
510
+ "scope",
511
+ "timestamps",
512
+ "id",
513
+ "unique",
514
+ "indexes",
515
+ "comment",
516
+ "subject",
517
+ "events"
518
+ ];
519
+ function patchKey(next, patch, key) {
520
+ if (!(key in patch)) return;
521
+ const value = patch[key];
522
+ if (value === void 0) delete next[key];
523
+ else next[key] = value;
524
+ }
525
+ /** Updates an app table's options; a key set to `undefined` is removed. */
526
+ function updateTable(design, name, patch) {
527
+ const table = design.appTables?.[name];
528
+ if (table === void 0) return design;
529
+ const next = { ...table };
530
+ for (const key of TABLE_PATCH_KEYS) patchKey(next, patch, key);
531
+ return withAppTables(design, {
532
+ ...design.appTables,
533
+ [name]: next
534
+ });
535
+ }
536
+ /**
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.
539
+ */
540
+ function setTableId(design, name, id) {
541
+ const next = updateTable(design, name, { id: id === "uuid" ? void 0 : id });
542
+ return withAppTables(next, Object.fromEntries(Object.entries(next.appTables ?? {}).map(([key, table]) => [key, {
543
+ ...table,
544
+ 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
+ }])));
546
+ }
547
+ /** A table's composite key sets with `edit` applied to each, dropping empty sets and an empty list. */
548
+ function withKeySets(table, edit) {
549
+ const { unique, indexes, ...rest } = table;
550
+ const sets = (list) => {
551
+ const next = (list ?? []).map(edit).filter((columns) => columns.length > 0);
552
+ return next.length === 0 ? void 0 : next;
553
+ };
554
+ const next = { ...rest };
555
+ const nextUnique = sets(unique);
556
+ if (rest.subject !== void 0) next.subject = subjectColumnsEdited(rest.subject, edit);
557
+ if (rest.events !== void 0) next.events = eventsColumnsEdited(rest.events, edit);
558
+ const nextIndexes = sets(indexes);
559
+ if (nextUnique !== void 0) next.unique = nextUnique;
560
+ if (nextIndexes !== void 0) next.indexes = nextIndexes;
561
+ return next;
562
+ }
563
+ /** Sets (adds or replaces) an app table column. */
564
+ function setColumn(design, table, name, column) {
565
+ const current = design.appTables?.[table];
566
+ return current === void 0 ? design : withAppTables(design, {
567
+ ...design.appTables,
568
+ [table]: {
569
+ ...current,
570
+ columns: {
571
+ ...current.columns,
572
+ [name]: column
573
+ }
574
+ }
575
+ });
576
+ }
577
+ /** Renames an app table column, keeping its place. */
578
+ function renameColumn(design, table, from, to) {
579
+ const current = design.appTables?.[table];
580
+ if (current === void 0 || from === to) return design;
581
+ return withAppTables(design, computedColumnRenamed({
582
+ ...design.appTables,
583
+ [table]: withKeySets({
584
+ ...current,
585
+ columns: Object.fromEntries(Object.entries(current.columns ?? {}).map(([name, column]) => [name === from ? to : name, column]))
586
+ }, (columns) => columns.map((column) => column === from ? to : column))
587
+ }, table, from, to));
588
+ }
589
+ /** Replaces an app table with `edit` applied to it, such as `tableWithComputed`. */
590
+ function editTable(design, table, edit) {
591
+ const current = design.appTables?.[table];
592
+ return current === void 0 ? design : withAppTables(design, {
593
+ ...design.appTables,
594
+ [table]: edit(current)
595
+ });
596
+ }
597
+ function deleteColumn(design, table, name) {
598
+ const current = design.appTables?.[table];
599
+ return current === void 0 ? design : withAppTables(design, {
600
+ ...design.appTables,
601
+ [table]: withKeySets({
602
+ ...current,
603
+ columns: omitKey(current.columns, name)
604
+ }, (columns) => columns.filter((column) => column !== name))
605
+ });
606
+ }
607
+ /** Sets an extra column on a block table (`blocks.<module>.options.extraColumns`). */
608
+ function setExtraColumn(design, module, name, type) {
609
+ return {
610
+ ...design,
611
+ extraColumns: {
612
+ ...design.extraColumns,
613
+ [module]: {
614
+ ...design.extraColumns?.[module],
615
+ [name]: type
616
+ }
617
+ }
618
+ };
619
+ }
620
+ function deleteExtraColumn(design, module, name) {
621
+ const columns = omitKey(design.extraColumns?.[module], name);
622
+ const { extraColumns: _drop, ...rest } = design;
623
+ const extraColumns = Object.keys(columns).length === 0 ? omitKey(design.extraColumns, module) : {
624
+ ...design.extraColumns,
625
+ [module]: columns
626
+ };
627
+ return Object.keys(extraColumns).length === 0 ? rest : {
628
+ ...rest,
629
+ extraColumns
630
+ };
631
+ }
632
+ /** Copies an app table under a free name, next to the original. */
633
+ function duplicateTable(design, name, taken) {
634
+ const table = design.appTables?.[name];
635
+ if (table === void 0) return {
636
+ design,
637
+ name
638
+ };
639
+ const copy = freeTableName(design, taken, `${name}_copy`);
640
+ const position = design.positions?.[appTableId(name)];
641
+ return {
642
+ design: addTable(design, copy, table.subject === void 0 ? table : {
643
+ ...table,
644
+ subject: {
645
+ ...table.subject,
646
+ type: singular(copy)
647
+ }
648
+ }, position === void 0 ? void 0 : [position[0] + 40, position[1] + 40]),
649
+ name: copy
650
+ };
651
+ }
652
+ /** Moves tables (table id to its new top-left corner). */
653
+ function moveTables(design, moves) {
654
+ return withPositions(design, {
655
+ ...design.positions,
656
+ ...moves
657
+ });
658
+ }
659
+ /**
660
+ * The app table column behind a foreign key from `tableId`, when the canvas
661
+ * added it, or `undefined` when a block or the preset owns the key.
662
+ */
663
+ function userConnection(design, tableId, column) {
664
+ const name = Object.keys(design.appTables ?? {}).find((each) => appTableId(each) === tableId);
665
+ if (name === void 0 || column === null) return;
666
+ return design.appTables?.[name]?.columns?.[column]?.references === void 0 ? void 0 : {
667
+ table: name,
668
+ column
669
+ };
670
+ }
671
+ /** Drops every saved position, so the automatic layout places every table again. */
672
+ function tidy(design) {
673
+ return withPositions(design, {});
674
+ }
675
+ const SINGULAR_ENDINGS = [
676
+ [/ies$/u, "y"],
677
+ [/(ss|us)$/u, "$1"],
678
+ [/s$/u, ""]
679
+ ];
680
+ /** A naive English singular for a table name: `organizations` to `organization`. */
681
+ function singular(name) {
682
+ for (const [ending, replacement] of SINGULAR_ENDINGS) if (ending.test(name)) return name.replace(ending, replacement);
683
+ return name;
684
+ }
685
+ const AUTH_USERS$1 = "auth.users";
686
+ /** The column types a foreign key can point at, from the target's primary key type. */
687
+ function referenceType(type) {
688
+ const normal = type.toLowerCase();
689
+ switch (normal) {
690
+ case "uuid":
691
+ case "text":
692
+ case "bigint":
693
+ case "integer": return normal;
694
+ case "int8":
695
+ case "bigserial": return "bigint";
696
+ case "int":
697
+ case "int4":
698
+ case "serial": return "integer";
699
+ default: return;
700
+ }
701
+ }
702
+ /**
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.
709
+ */
710
+ function connect(design, data, preset, connection) {
711
+ const source = data.tables.find((table) => table.id === connection.source);
712
+ if (source === void 0 || !isAppTable(source)) return {
713
+ ok: false,
714
+ error: "Block tables only accept connections. Drag from an app table."
715
+ };
716
+ if (design.appTables?.[source.name] === void 0) return {
717
+ ok: false,
718
+ error: `${source.name} is not in the design.`
719
+ };
720
+ if (source.tenantColumn !== null && connection.target === data.tenantTable) return {
721
+ ok: false,
722
+ error: `${source.name} already references ${connection.target} through ${source.tenantColumn}.`
723
+ };
724
+ return referenceFrom(design, data, preset, source.name, connection.target);
725
+ }
726
+ /** Second references to `auth.users`, in the order they are offered. */
727
+ const USER_ROLES = [
728
+ "owner_id",
729
+ "assignee_id",
730
+ "reviewer_id",
731
+ "approver_id"
732
+ ];
733
+ /** The first column name for a reference that the table can still take. */
734
+ function referenceColumn(table, base, roles, preset) {
735
+ const stem = base.replace(/_id$/u, "");
736
+ return [
737
+ base,
738
+ ...roles,
739
+ ...Array.from({ length: 8 }, (_, index) => `${stem}_${index + 2}_id`)
740
+ ].find((candidate) => columnError(table, candidate, preset) === void 0);
741
+ }
742
+ /**
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.
746
+ */
747
+ function referenceFrom(design, data, preset, name, targetId) {
748
+ const table = design.appTables?.[name];
749
+ if (table === void 0) return {
750
+ ok: false,
751
+ error: `${name} is not in the design.`
752
+ };
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 {
755
+ ok: false,
756
+ error: "That table is not in the schema."
757
+ };
758
+ const keyType = target === void 0 ? "uuid" : target.primaryKey.length === 1 ? target.columns.find((column) => column.name === target.primaryKey[0])?.type : void 0;
759
+ const type = keyType === void 0 ? void 0 : referenceType(keyType);
760
+ if (type === void 0) return {
761
+ ok: false,
762
+ error: `${targetId} has no single uuid, text or integer key to reference.`
763
+ };
764
+ const references = target === void 0 ? { table: AUTH_USERS$1 } : isAppTable(target) ? { table: target.name } : data.blockTables[target.id];
765
+ if (references === void 0) return {
766
+ ok: false,
767
+ error: `${targetId} can't be referenced from an app table.`
768
+ };
769
+ const self = targetId === appTableId(name);
770
+ const user = target === void 0;
771
+ const column = referenceColumn(table, self ? "parent_id" : `${singular(user ? "user" : target.name)}_id`, user ? USER_ROLES : [], preset);
772
+ if (column === void 0) return {
773
+ ok: false,
774
+ error: `${name} already has every column name a reference to ${targetId} gets. Rename one first.`
775
+ };
776
+ return {
777
+ ok: true,
778
+ column,
779
+ design: setColumn(design, name, column, {
780
+ type,
781
+ nullable: true,
782
+ references: {
783
+ ...references,
784
+ onDelete: self || user ? "set null" : "cascade"
785
+ }
786
+ })
787
+ };
788
+ }
789
+ /**
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.
795
+ */
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
+ function referencedId(reference, data) {
896
+ if (reference.block === void 0) return reference.table === AUTH_USERS$1 ? AUTH_USERS$1 : appTableId(reference.table);
897
+ return Object.entries(data.blockTables).find(([, each]) => each.block === reference.block && each.table === reference.table)?.[0];
898
+ }
899
+ function foreignKey(column, to, onDelete = "no action") {
900
+ const [schema = "", target = ""] = to.split(".");
901
+ return {
902
+ columns: [column],
903
+ target: {
904
+ schema,
905
+ table: target,
906
+ columns: []
907
+ },
908
+ onDelete
909
+ };
910
+ }
911
+ /** An app table as the diagram reads it. */
912
+ function appSchemaTable(name, table, data, preset) {
913
+ const scope = scopeColumnOf(table, preset);
914
+ const scopeTo = scope === null ? void 0 : scope.name === "user_id" ? AUTH_USERS$1 : data.tenantTable ?? void 0;
915
+ const columns = [
916
+ table.id === "bigint" ? {
917
+ name: "id",
918
+ type: "bigint",
919
+ nullable: false,
920
+ default: "identity",
921
+ unique: false
922
+ } : {
923
+ name: "id",
924
+ type: "uuid",
925
+ nullable: false,
926
+ default: "gen_random_uuid()",
927
+ unique: false
928
+ },
929
+ ...scope === null ? [] : [scope],
930
+ ...Object.entries(table.columns ?? {}).map(([key, column]) => appColumn(key, column)),
931
+ ...subjectColumns(table.subject),
932
+ ...table.timestamps === false ? [] : [{
933
+ name: "created_at",
934
+ ...TIMESTAMP
935
+ }, {
936
+ name: "updated_at",
937
+ ...TIMESTAMP
938
+ }]
939
+ ];
940
+ const scopeKeys = scope === null || scopeTo === void 0 ? [] : [foreignKey(scope.name, scopeTo, "cascade")];
941
+ const columnKeys = Object.entries(table.columns ?? {}).flatMap(([key, column]) => {
942
+ const to = column.references === void 0 ? void 0 : referencedId(column.references, data);
943
+ return to === void 0 ? [] : [foreignKey(key, to, column.references?.onDelete)];
944
+ });
945
+ const schemaTable = {
946
+ id: appTableId(name),
947
+ schema: APP_SCHEMA,
948
+ name,
949
+ module: APP_MODULE,
950
+ primaryKey: ["id"],
951
+ foreignKeys: [...scopeKeys, ...columnKeys],
952
+ tenantColumn: scope !== null && scope.name !== "user_id" ? scope.name : null,
953
+ columns
954
+ };
955
+ const computed = computedRows(table);
956
+ return computed.length === 0 ? schemaTable : {
957
+ ...schemaTable,
958
+ computed
959
+ };
960
+ }
961
+ /** The extra column names a block table got from the design. */
962
+ function extraColumnsOf(design, table, data) {
963
+ return data.extraColumns.includes(table.id) ? design.extraColumns?.[table.module] ?? {} : {};
964
+ }
965
+ /**
966
+ * The schema with the design applied: app tables added, extra columns
967
+ * appended to the block tables that accept them.
968
+ */
969
+ function withDesign(data, design, preset) {
970
+ const tables = data.tables.map((table) => {
971
+ const extra = extraColumnsOf(design, table, data);
972
+ const names = new Set(table.columns.map((column) => column.name));
973
+ const added = Object.entries(extra).filter(([name]) => !names.has(name)).map(([name, type]) => ({
974
+ name,
975
+ type,
976
+ nullable: !/\bnot\s+null\b/iu.test(type),
977
+ default: null,
978
+ unique: false
979
+ }));
980
+ return added.length === 0 ? table : {
981
+ ...table,
982
+ columns: [...table.columns, ...added]
983
+ };
984
+ });
985
+ const appTables = Object.entries(design.appTables ?? {}).map(([name, table]) => appSchemaTable(name, table, data, preset));
986
+ return {
987
+ ...data,
988
+ tables: [...tables, ...appTables],
989
+ manifests: {
990
+ ...data.manifests,
991
+ ...Object.fromEntries(appTables.map((table) => [table.id, APP_MODULE]))
992
+ }
993
+ };
994
+ }
995
+ //#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"
1045
+ }
1046
+ },
1047
+ {
1048
+ id: "phone",
1049
+ label: "Phone",
1050
+ group: "Text",
1051
+ short: "phone",
1052
+ column: {
1053
+ type: "text",
1054
+ format: "phone"
1055
+ }
1056
+ },
1057
+ {
1058
+ id: "color",
1059
+ label: "Color",
1060
+ group: "Text",
1061
+ short: "color",
1062
+ column: {
1063
+ type: "text",
1064
+ format: "color"
1065
+ }
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"
1096
+ }
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
+ };
1268
+ }
1269
+ /**
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.
1274
+ */
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
+ };
1307
+ }
1308
+ //#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";
1312
+ /**
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.
1316
+ */
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;
1319
+ }
1320
+ /**
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.
1324
+ */
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");
1329
+ }
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, "");
1336
+ }
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
+ };
1364
+ }
1365
+ /**
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.
1371
+ */
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
+ };
1402
+ }
1403
+ case "reset": return initialHistory(action.value);
1404
+ default: return action;
1405
+ }
1406
+ }
1407
+ //#endregion
1408
+ //#region src/create/preview-provider.ts
1409
+ /**
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.
1414
+ */
1415
+ function previewAccessProvider(preset) {
1416
+ 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
+ }
1428
+ };
1429
+ }
1430
+ /**
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`.
1435
+ */
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));
1491
+ }
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)}`;
1495
+ }
1496
+ function pad(value) {
1497
+ return String(value).padStart(2, "0");
1498
+ }
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())}`;
1503
+ }
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);
1507
+ }
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;
1524
+ }
1525
+ }
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;
1545
+ }
1546
+ }
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
+ /**
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.
1558
+ */
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: []
1564
+ };
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);
1568
+ 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)])))
1571
+ };
1572
+ }
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";
1578
+ /**
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).
1582
+ */
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)}`);
1586
+ }
1587
+ function moduleTables(module) {
1588
+ return Object.entries(SQL_MODULES[module]?.names?.tables ?? {});
1589
+ }
1590
+ /**
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.
1593
+ */
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);
1599
+ }
1600
+ let best = null;
1601
+ let most = 0;
1602
+ for (const [id, count] of counts) if (count > most) {
1603
+ best = id;
1604
+ most = count;
1605
+ }
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;
1617
+ }
1618
+ function hasForeignKey(table, column) {
1619
+ return table.foreignKeys.some((key) => key.columns.length === 1 && key.columns[0] === column);
1620
+ }
1621
+ /**
1622
+ * The soft references in the tables: lifecycle tenant and user columns
1623
+ * without a foreign key, and `regclass` columns, which name any table.
1624
+ */
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
+ }]];
1674
+ }));
1675
+ }
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
+ });
1684
+ }
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);
1688
+ 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)
1695
+ };
1696
+ }
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));
1708
+ }
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;
1712
+ }
1713
+ /**
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.
1716
+ */
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
+ };
1741
+ }
1742
+ function identList(list) {
1743
+ return (list ?? "").split(",").map((each) => each.trim()).filter((each) => each !== "").map((each) => unquote(each));
1744
+ }
1745
+ /**
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.
1749
+ */
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
+ });
1802
+ };
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;
1817
+ }
1818
+ function target(match) {
1819
+ const { schema, table } = qualified(match[1] ?? "");
1820
+ return {
1821
+ schema,
1822
+ table,
1823
+ columns: identList(match[2])
1824
+ };
1825
+ }
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, " ");
1830
+ }
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;
1833
+ /**
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.
1837
+ */
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();
1854
+ }
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
+ });
1879
+ }
1880
+ /**
1881
+ * Adds a table constraint (`primary key (...)`, `foreign key (...)
1882
+ * references ...`). Returns false when the element is not a constraint.
1883
+ */
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);
1903
+ }
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);
1907
+ 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)
1919
+ };
1920
+ }
1921
+ /**
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.
1926
+ */
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: []
1950
+ };
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, ""));
1965
+ }
1966
+ }
1967
+ const tenantColumn = options.tenantColumn ?? null;
1968
+ return [...drafts.entries()].filter(([id]) => !BOOKKEEPING_TABLES.has(id)).map(([, draft]) => finish(draft, tenantColumn));
1969
+ }
1970
+ /**
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.
1973
+ */
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));
1991
+ }
1992
+ }
1993
+ return statements;
1994
+ }
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
+ }));
2008
+ }
2009
+ //#endregion
2010
+ //#region src/create/migration.ts
2011
+ /** The module whose file holds the app's own tables. */
2012
+ const APP_TABLES_MODULE = "app-tables";
2013
+ /**
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.
2020
+ */
2021
+ function migrationBetween(code, base, next) {
2022
+ const changes = diffDesigns(base, next);
2023
+ const breaking = changes.filter((change) => change.breaking);
2024
+ if (breaking.length > 0) return {
2025
+ ok: false,
2026
+ reason: "breaking",
2027
+ changes: breaking
2028
+ };
2029
+ const unsupported = changes.filter((change) => change.kind !== "table.added" && change.kind !== "column.added");
2030
+ if (unsupported.length > 0) return {
2031
+ ok: false,
2032
+ reason: "unsupported",
2033
+ changes: unsupported
2034
+ };
2035
+ const before = new Map(previewFiles(code, base).map((file) => [file.path, file.contents]));
2036
+ const differing = previewFiles(code, next).filter((file) => before.get(file.path) !== file.contents);
2037
+ if (differing.some((file) => file.module !== APP_TABLES_MODULE)) return {
2038
+ ok: false,
2039
+ reason: "unsupported",
2040
+ changes
2041
+ };
2042
+ return {
2043
+ ok: true,
2044
+ sql: differing.map((file) => `-- ${file.path}\n${file.contents.trim()}\n`).join("\n"),
2045
+ changes
2046
+ };
2047
+ }
2048
+ //#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 };