better-supabase 0.5.1 → 0.6.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 (536) hide show
  1. package/README.md +187 -46
  2. package/dist/access-sql-B0dF-SoF.js +181 -0
  3. package/dist/{actor-DaJjqD5R.d.ts → actor-CQTlc1Hh.d.ts} +1 -1
  4. package/dist/adapter-Bc1o3zyy.js +1106 -0
  5. package/dist/agents-CVHGd7It.d.ts +94 -0
  6. package/dist/ai-cache-CBWs1W0k.js +80 -0
  7. package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
  8. package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
  9. package/dist/ai-chat-B24UI962.js +743 -0
  10. package/dist/ai-files-CSPNswUY.js +319 -0
  11. package/dist/ai-sdk/agents/index.d.ts +74 -0
  12. package/dist/ai-sdk/agents/index.js +159 -0
  13. package/dist/ai-sdk/batches/index.d.ts +74 -0
  14. package/dist/ai-sdk/batches/index.js +180 -0
  15. package/dist/ai-sdk/cache/index.d.ts +38 -0
  16. package/dist/ai-sdk/cache/index.js +127 -0
  17. package/dist/ai-sdk/chat/index.d.ts +2 -0
  18. package/dist/ai-sdk/chat/index.js +246 -0
  19. package/dist/ai-sdk/embeddings/index.d.ts +3 -0
  20. package/dist/ai-sdk/embeddings/index.js +2 -0
  21. package/dist/ai-sdk/files/index.d.ts +61 -0
  22. package/dist/ai-sdk/files/index.js +111 -0
  23. package/dist/ai-sdk/index.d.ts +145 -0
  24. package/dist/ai-sdk/index.js +174 -0
  25. package/dist/ai-sdk/mcp/index.d.ts +102 -0
  26. package/dist/ai-sdk/mcp/index.js +362 -0
  27. package/dist/ai-sdk/memory/index.d.ts +67 -0
  28. package/dist/ai-sdk/memory/index.js +175 -0
  29. package/dist/ai-sdk/react/index.d.ts +2 -0
  30. package/dist/ai-sdk/react/index.js +3 -0
  31. package/dist/ai-sdk/react/server.d.ts +6 -0
  32. package/dist/ai-sdk/react/server.js +7 -0
  33. package/dist/ai-sdk/workflow/index.d.ts +249 -0
  34. package/dist/ai-sdk/workflow/index.js +575 -0
  35. package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
  36. package/dist/ai-sdk/workflow/react/index.js +66 -0
  37. package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
  38. package/dist/ai-sdk/workflow/react/server.js +12 -0
  39. package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
  40. package/dist/announcements-CiyOs-xP.js +107 -0
  41. package/dist/announcements-ZRGnScWI.d.ts +72 -0
  42. package/dist/api-keys-rCGtKaZA.d.ts +156 -0
  43. package/dist/assistant-DwdpDH1q.d.ts +147 -0
  44. package/dist/astro/index.d.ts +86 -0
  45. package/dist/astro/index.js +93 -0
  46. package/dist/attributes-5dYul0u0.js +13 -0
  47. package/dist/auth-link-BjFPqwLz.d.ts +97 -0
  48. package/dist/auth-link-DrDX9KOT.js +114 -0
  49. package/dist/authorization-BFCqamMs.d.ts +172 -0
  50. package/dist/before-route-CnR0C0Jr.js +30 -0
  51. package/dist/bind-Bu_ZNa3W.d.ts +62 -0
  52. package/dist/bind-l4kAvYSv.js +97 -0
  53. package/dist/block-events-CrT8r7Fe.js +76 -0
  54. package/dist/block-fields-GFkxl4dP.js +49 -0
  55. package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
  56. package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
  57. package/dist/block-helpers-DWHxHsEQ.js +190 -0
  58. package/dist/block-hooks-BmjMyXTa.js +114 -0
  59. package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
  60. package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
  61. package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
  62. package/dist/blocks/agents/index.d.ts +3 -0
  63. package/dist/blocks/agents/index.js +123 -0
  64. package/dist/blocks/ai-cache/index.d.ts +3 -0
  65. package/dist/blocks/ai-cache/index.js +3 -0
  66. package/dist/blocks/ai-chat/index.d.ts +31 -0
  67. package/dist/blocks/ai-chat/index.js +5 -0
  68. package/dist/blocks/ai-chat/react/index.d.ts +77 -0
  69. package/dist/blocks/ai-chat/react/index.js +387 -0
  70. package/dist/blocks/ai-chat/react/server.d.ts +16 -0
  71. package/dist/blocks/ai-chat/react/server.js +14 -0
  72. package/dist/blocks/ai-files/index.d.ts +14 -0
  73. package/dist/blocks/ai-files/index.js +3 -0
  74. package/dist/blocks/ai-providers/index.d.ts +7 -0
  75. package/dist/blocks/ai-providers/index.js +211 -0
  76. package/dist/blocks/ai-tasks/index.d.ts +3 -0
  77. package/dist/blocks/ai-tasks/index.js +203 -0
  78. package/dist/blocks/announcements/index.d.ts +3 -0
  79. package/dist/blocks/announcements/index.js +3 -0
  80. package/dist/blocks/announcements/react/index.d.ts +31 -0
  81. package/dist/blocks/announcements/react/index.js +86 -0
  82. package/dist/blocks/announcements/react/server.d.ts +6 -0
  83. package/dist/blocks/announcements/react/server.js +7 -0
  84. package/dist/blocks/api-keys/index.d.ts +35 -0
  85. package/dist/blocks/api-keys/index.js +334 -0
  86. package/dist/blocks/attachments/index.d.ts +210 -0
  87. package/dist/blocks/attachments/index.js +222 -0
  88. package/dist/blocks/audit/index.d.ts +366 -0
  89. package/dist/blocks/audit/index.js +714 -0
  90. package/dist/blocks/billing/index.d.ts +265 -0
  91. package/dist/blocks/billing/index.js +400 -0
  92. package/dist/blocks/comments/index.d.ts +200 -0
  93. package/dist/blocks/comments/index.js +207 -0
  94. package/dist/blocks/connectors/index.d.ts +3 -0
  95. package/dist/blocks/connectors/index.js +164 -0
  96. package/dist/blocks/data-lifecycle/index.d.ts +251 -0
  97. package/dist/blocks/data-lifecycle/index.js +353 -0
  98. package/dist/blocks/entitlements/index.d.ts +14 -0
  99. package/dist/blocks/entitlements/index.js +25 -0
  100. package/dist/blocks/flags/index.d.ts +226 -0
  101. package/dist/blocks/flags/index.js +282 -0
  102. package/dist/blocks/inbox/index.d.ts +6 -0
  103. package/dist/blocks/inbox/index.js +499 -0
  104. package/dist/blocks/inbox/react/index.d.ts +2 -0
  105. package/dist/blocks/inbox/react/index.js +225 -0
  106. package/dist/blocks/inbox/react/server.d.ts +10 -0
  107. package/dist/blocks/inbox/react/server.js +12 -0
  108. package/dist/blocks/index.d.ts +65 -0
  109. package/dist/blocks/index.js +77 -0
  110. package/dist/blocks/jobs/index.d.ts +297 -0
  111. package/dist/blocks/jobs/index.js +1051 -0
  112. package/dist/blocks/knowledge/index.d.ts +3 -0
  113. package/dist/blocks/knowledge/index.js +3 -0
  114. package/dist/blocks/memory/index.d.ts +8 -0
  115. package/dist/blocks/memory/index.js +289 -0
  116. package/dist/blocks/notifications/index.d.ts +297 -0
  117. package/dist/blocks/notifications/index.js +425 -0
  118. package/dist/blocks/notifications/react/index.d.ts +44 -0
  119. package/dist/blocks/notifications/react/index.js +67 -0
  120. package/dist/blocks/notifications/react/server.d.ts +6 -0
  121. package/dist/blocks/notifications/react/server.js +7 -0
  122. package/dist/blocks/onboarding/index.d.ts +3 -0
  123. package/dist/blocks/onboarding/index.js +64 -0
  124. package/dist/blocks/onboarding/react/index.d.ts +28 -0
  125. package/dist/blocks/onboarding/react/index.js +78 -0
  126. package/dist/blocks/onboarding/react/server.d.ts +7 -0
  127. package/dist/blocks/onboarding/react/server.js +7 -0
  128. package/dist/blocks/organizations/index.d.ts +241 -0
  129. package/dist/blocks/organizations/index.js +400 -0
  130. package/dist/blocks/outbox/index.d.ts +3 -0
  131. package/dist/blocks/outbox/index.js +266 -0
  132. package/dist/blocks/profiles/index.d.ts +40 -0
  133. package/dist/blocks/profiles/index.js +28 -0
  134. package/dist/blocks/push/index.d.ts +185 -0
  135. package/dist/blocks/push/index.js +258 -0
  136. package/dist/blocks/settings/index.d.ts +89 -0
  137. package/dist/blocks/settings/index.js +104 -0
  138. package/dist/blocks/sso/index.d.ts +198 -0
  139. package/dist/blocks/sso/index.js +1297 -0
  140. package/dist/blocks/usage/index.d.ts +4 -0
  141. package/dist/blocks/usage/index.js +233 -0
  142. package/dist/blocks/waitlist/index.d.ts +117 -0
  143. package/dist/blocks/waitlist/index.js +132 -0
  144. package/dist/blocks/webhooks/index.d.ts +304 -0
  145. package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
  146. package/dist/blocks/workflow-builder/index.d.ts +21 -0
  147. package/dist/blocks/workflow-builder/index.js +5 -0
  148. package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
  149. package/dist/blocks/workflow-builder/react/index.js +119 -0
  150. package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
  151. package/dist/blocks/workflow-builder/react/server.js +11 -0
  152. package/dist/blocks/workflows/index.d.ts +3 -0
  153. package/dist/blocks/workflows/index.js +3 -0
  154. package/dist/blocks/workflows/react/index.d.ts +47 -0
  155. package/dist/blocks/workflows/react/index.js +137 -0
  156. package/dist/blocks/workflows/react/server.d.ts +8 -0
  157. package/dist/blocks/workflows/react/server.js +11 -0
  158. package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
  159. package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
  160. package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
  161. package/dist/channels-CkgQ_X60.js +114 -0
  162. package/dist/chat-sdk/index.d.ts +303 -0
  163. package/dist/chat-sdk/index.js +733 -0
  164. package/dist/chat-sdk/react/index.d.ts +2 -0
  165. package/dist/chat-sdk/react/index.js +3 -0
  166. package/dist/chat-sdk/react/server.d.ts +3 -0
  167. package/dist/chat-sdk/react/server.js +2 -0
  168. package/dist/claims-DDBQT6BK.js +61 -0
  169. package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
  170. package/dist/cli/bin.js +1 -1
  171. package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
  172. package/dist/cli/config-B9HkL8nF.js +2 -0
  173. package/dist/cli/config-DU7EJImt.js +49 -0
  174. package/dist/cli/config-NiPxAmUF.js +1077 -0
  175. package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
  176. package/dist/cli/{doctor-C_A-KEAz.js → doctor-B4JOm_ox.js} +991 -317
  177. package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
  178. package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
  179. package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
  180. package/dist/cli/gen-BGLb_zou.js +3100 -0
  181. package/dist/cli/gen-DAH8FM2W.js +2 -0
  182. package/dist/cli/index.d.ts +44 -5
  183. package/dist/cli/index.js +7 -7
  184. package/dist/cli/{init-DMa6M7hV.js → init-BIIwclPg.js} +242 -27
  185. package/dist/cli/{introspect-BKlaIu_M.js → introspect-DNUTuNvb.js} +5 -5
  186. package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
  187. package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
  188. package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
  189. package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
  190. package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
  191. package/dist/cli/read-sets-CETOSFx4.js +223 -0
  192. package/dist/cli/{run-Bo_NLT5n.js → run-DNWxHynX.js} +33 -23
  193. package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
  194. package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
  195. package/dist/cli/sql-D0GUtUPp.js +536 -0
  196. package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
  197. package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
  198. package/dist/cli/{version-BCtlgDQx.js → version-hr88OZG0.js} +1 -1
  199. package/dist/client/index.d.ts +3 -2
  200. package/dist/client/index.js +11 -71
  201. package/dist/client/native/index.d.ts +228 -0
  202. package/dist/client/native/index.js +361 -0
  203. package/dist/client-CI0Z2zWX.js +277 -0
  204. package/dist/cloud-event-BnmD5fb9.js +46 -0
  205. package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
  206. package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
  207. package/dist/compose-BIBNgAnq.js +53 -0
  208. package/dist/composite-Bt1YK3Ke.d.ts +146 -0
  209. package/dist/composite-DhE66P5u.js +130 -0
  210. package/dist/config/index.d.ts +6 -4
  211. package/dist/config/index.js +5 -5
  212. package/dist/{config-Bv7gvfzC.d.ts → config-D44Y7PAv.d.ts} +406 -214
  213. package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
  214. package/dist/connector-Dv8kK0MO.d.ts +107 -0
  215. package/dist/connectors-hkLCwyEz.d.ts +120 -0
  216. package/dist/context-BCrWe7ow.d.ts +237 -0
  217. package/dist/credentials/index.d.ts +31 -0
  218. package/dist/credentials/index.js +168 -0
  219. package/dist/cron-DVPUg5k3.js +145 -0
  220. package/dist/csv-CPAzEmB6.js +25 -0
  221. package/dist/db-exception-CnWcYPxL.js +15 -0
  222. package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
  223. package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
  224. package/dist/edge/index.d.ts +69 -11
  225. package/dist/edge/index.js +191 -75
  226. package/dist/elysia/index.d.ts +59 -0
  227. package/dist/elysia/index.js +62 -0
  228. package/dist/embeddings-4ZvFzjsU.js +127 -0
  229. package/dist/embeddings-C9KGQnXt.d.ts +68 -0
  230. package/dist/{refresh-CFPX0Qft.d.ts → ended-jLfvw8h-.d.ts} +20 -2
  231. package/dist/{entitlements-BiJZ4t49.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
  232. package/dist/entitlements-DRl6ZJUm.js +24 -0
  233. package/dist/envelope-DqnYGRw7.js +47 -0
  234. package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
  235. package/dist/errors-DLjJHPLK.js +44 -0
  236. package/dist/escape-like-DHfx6jRr.js +7 -0
  237. package/dist/escape-like-ImTK0ps_.d.ts +15 -0
  238. package/dist/eve/index.d.ts +220 -0
  239. package/dist/eve/index.js +504 -0
  240. package/dist/eve-gT2Fpjut.d.ts +151 -0
  241. package/dist/events/index.d.ts +4 -3
  242. package/dist/events/index.js +9 -50
  243. package/dist/events-DWDhx77e.d.ts +549 -0
  244. package/dist/executor-Bq28caBo.js +718 -0
  245. package/dist/executor-C-R4pucm.js +83 -0
  246. package/dist/executor-CaWigTyR.d.ts +148 -0
  247. package/dist/executor-D14tGopJ.d.ts +36 -0
  248. package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
  249. package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
  250. package/dist/executor-DvsBbNBS.d.ts +261 -0
  251. package/dist/expo/index.d.ts +79 -0
  252. package/dist/expo/index.js +129 -0
  253. package/dist/expo-sqlite/index.d.ts +58 -0
  254. package/dist/expo-sqlite/index.js +104 -0
  255. package/dist/field-errors-BFOa7WhB.d.ts +99 -0
  256. package/dist/field-errors-VF1yb8yI.js +13 -0
  257. package/dist/framework-CONDyPYx.js +51 -0
  258. package/dist/framework-DuVb4Xa8.d.ts +25 -0
  259. package/dist/gateway-C1ssRHnf.d.ts +130 -0
  260. package/dist/graph-BGyLLFLX.js +265 -0
  261. package/dist/h3/index.d.ts +59 -0
  262. package/dist/h3/index.js +55 -0
  263. package/dist/h3/v1/index.d.ts +63 -0
  264. package/dist/h3/v1/index.js +49 -0
  265. package/dist/history-BZih6SFP.js +64 -0
  266. package/dist/hono/index.d.ts +56 -7
  267. package/dist/hono/index.js +97 -45
  268. package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
  269. package/dist/http-Cv4T29xh.js +40 -0
  270. package/dist/http-DdYadv-o.js +126 -0
  271. package/dist/image-url-pIVlO6R1.js +41 -0
  272. package/dist/{impersonation-BgSHAYLf.js → impersonation-DcqaTBHx.js} +21 -6
  273. package/dist/inbox-i7E1ppo6.d.ts +384 -0
  274. package/dist/index-ACiNPN4Z.d.ts +74 -0
  275. package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
  276. package/dist/index-BkWT_uBO.d.ts +51 -0
  277. package/dist/index-BpFYMsi0.d.ts +53 -0
  278. package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
  279. package/dist/index-CaxrMD1A.d.ts +1 -0
  280. package/dist/index-ClmjK_o-.d.ts +55 -0
  281. package/dist/index-CtuakVRc.d.ts +267 -0
  282. package/dist/index-D48jVS-N.d.ts +246 -0
  283. package/dist/index-DDrYaUcq.d.ts +138 -0
  284. package/dist/index-DQh4VCc9.d.ts +98 -0
  285. package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
  286. package/dist/index.d.ts +65 -18
  287. package/dist/index.js +42 -14
  288. package/dist/invalidate-BBqhpxyB.d.ts +19 -0
  289. package/dist/json-CEnpTHlZ.js +16 -0
  290. package/dist/json-schema-CvER4kgT.js +502 -0
  291. package/dist/keys-4MnkWTTh.js +35 -0
  292. package/dist/kit-B5tid-q5.d.ts +60 -0
  293. package/dist/kit-Fm-Fv7q5.js +78 -0
  294. package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
  295. package/dist/knowledge-CDmiMLew.js +255 -0
  296. package/dist/lint/index.d.ts +1 -1
  297. package/dist/lint/index.js +37 -0
  298. package/dist/list/index.d.ts +3 -2
  299. package/dist/list/index.js +1 -444
  300. package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
  301. package/dist/list-query-gl808ac1.js +459 -0
  302. package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
  303. package/dist/logger-DWVYUmwi.d.ts +18 -0
  304. package/dist/mcp/index.d.ts +38 -11
  305. package/dist/mcp/index.js +82 -46
  306. package/dist/mcp/sdk/index.d.ts +105 -0
  307. package/dist/mcp/sdk/index.js +126 -0
  308. package/dist/message-CaKlqdsX.js +219 -0
  309. package/dist/message-CfDoR0Y6.d.ts +94 -0
  310. package/dist/messages-B9-5887d.js +715 -0
  311. package/dist/messages-DYP0sUTe.d.ts +59 -0
  312. package/dist/mfa-Daak8ukG.d.ts +54 -0
  313. package/dist/modules-DpPwzC7E.d.ts +192 -0
  314. package/dist/modules-dxrVK3ID.js +228 -0
  315. package/dist/nestjs/index.d.ts +68 -0
  316. package/dist/nestjs/index.js +164 -0
  317. package/dist/next/client/index.d.ts +35 -0
  318. package/dist/next/client/index.js +36 -0
  319. package/dist/next/image/index.js +3 -24
  320. package/dist/next/index.d.ts +150 -51
  321. package/dist/next/index.js +261 -107
  322. package/dist/node/index.d.ts +4 -0
  323. package/dist/node/index.js +210 -0
  324. package/dist/node-headers-AO06VhqH.d.ts +24 -0
  325. package/dist/node-headers-C71zNQHe.js +55 -0
  326. package/dist/nuxt/index.d.ts +60 -0
  327. package/dist/nuxt/index.js +64 -0
  328. package/dist/onboarding-BZGHYJks.d.ts +62 -0
  329. package/dist/openapi/index.d.ts +1 -1
  330. package/dist/openapi/index.js +3 -3
  331. package/dist/orpc/index.d.ts +70 -11
  332. package/dist/orpc/index.js +73 -24
  333. package/dist/otel/index.d.ts +7 -7
  334. package/dist/otel/index.js +87 -57
  335. package/dist/outbox-Cq7pPYvl.d.ts +161 -0
  336. package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
  337. package/dist/plugin-tfXW1-qO.js +45 -0
  338. package/dist/plugins/actor/index.d.ts +2 -2
  339. package/dist/plugins/actor/index.js +3 -3
  340. package/dist/plugins/rules/index.d.ts +11 -4
  341. package/dist/plugins/rules/index.js +40 -13
  342. package/dist/plugins/soft-delete/index.d.ts +5 -4
  343. package/dist/plugins/soft-delete/index.js +10 -5
  344. package/dist/plugins/tenant/index.d.ts +2 -2
  345. package/dist/plugins/tenant/index.js +18 -11
  346. package/dist/plugins/timestamps/index.d.ts +5 -3
  347. package/dist/plugins/timestamps/index.js +6 -4
  348. package/dist/plugins/validation/index.d.ts +2 -2
  349. package/dist/plugins/validation/index.js +10 -6
  350. package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
  351. package/dist/postgres/index.d.ts +4 -4
  352. package/dist/postgres/index.js +1 -2
  353. package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
  354. package/dist/powersync/index.d.ts +43 -0
  355. package/dist/powersync/index.js +199 -0
  356. package/dist/powersync/react/index.d.ts +87 -0
  357. package/dist/powersync/react/index.js +108 -0
  358. package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
  359. package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
  360. package/dist/provider-BH5UWZJ6.d.ts +113 -0
  361. package/dist/provider-Di3sRutW.js +57 -0
  362. package/dist/query/index.d.ts +4 -2
  363. package/dist/query/index.js +4 -3
  364. package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
  365. package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
  366. package/dist/react/index.d.ts +11 -7
  367. package/dist/react/index.js +7 -3
  368. package/dist/react/native/index.d.ts +116 -0
  369. package/dist/react/native/index.js +130 -0
  370. package/dist/react/server.d.ts +28 -10
  371. package/dist/react/server.js +22 -5
  372. package/dist/react/session.d.ts +2 -2
  373. package/dist/react-4ZqkP8da.js +79 -0
  374. package/dist/react-F80mF4-t.js +409 -0
  375. package/dist/react-router/index.d.ts +83 -0
  376. package/dist/react-router/index.js +89 -0
  377. package/dist/react-topic-seAWjL3_.js +38 -0
  378. package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
  379. package/dist/realtime/index.d.ts +4 -5
  380. package/dist/realtime/index.js +144 -82
  381. package/dist/refusal-CeJWxmkH.js +61 -0
  382. package/dist/refusal-D1rgbzNq.d.ts +15 -0
  383. package/dist/replicas-CwrYp5Zj.js +94 -0
  384. package/dist/{view-Bn6HNKUe.js → resolve-D_IcnvFd.js} +248 -240
  385. package/dist/{impersonation-BmePsuxz.d.ts → resolve-KW8nCeL6.d.ts} +29 -69
  386. package/dist/{resource-mqfJW4YF.js → resource-BsvzCMlX.js} +4 -4
  387. package/dist/{resource-DNRFP7KR.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
  388. package/dist/respond-BUgsXNgk.js +91 -0
  389. package/dist/respond-DoBijysA.d.ts +93 -0
  390. package/dist/result-D7y2fT87.d.ts +282 -0
  391. package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
  392. package/dist/run-state-CPo-1X2B.d.ts +12 -0
  393. package/dist/run-state-CgBKzYMW.js +13 -0
  394. package/dist/search-CUWCRYKL.js +9 -0
  395. package/dist/server/index.d.ts +143 -22
  396. package/dist/server/index.js +46 -14
  397. package/dist/{respond-BR1fJWOB.d.ts → server-CeVeeXwz.d.ts} +224 -85
  398. package/dist/session-ChiXDZdZ.d.ts +72 -0
  399. package/dist/shared-CBxosKK3.js +75 -0
  400. package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
  401. package/dist/shared-DDSjEGDR.d.ts +11 -0
  402. package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
  403. package/dist/sign-in-Cb1mwv6X.js +86 -0
  404. package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
  405. package/dist/simplify-DDO0j0LI.js +83 -0
  406. package/dist/solid/index.d.ts +131 -0
  407. package/dist/solid/index.js +344 -0
  408. package/dist/solid-start/index.d.ts +75 -0
  409. package/dist/solid-start/index.js +58 -0
  410. package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
  411. package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
  412. package/dist/sql/index.d.ts +313 -212
  413. package/dist/sql/index.js +34872 -6579
  414. package/dist/ssr/index.d.ts +6 -5
  415. package/dist/ssr/index.js +3 -3
  416. package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
  417. package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
  418. package/dist/stats-D_AD9GGu.js +1123 -0
  419. package/dist/storage/index.d.ts +5 -5
  420. package/dist/storage/index.js +1027 -368
  421. package/dist/store-BdH5ruDx.js +66 -0
  422. package/dist/store-CGjgWu5n.d.ts +68 -0
  423. package/dist/streams/index.d.ts +76 -0
  424. package/dist/streams/index.js +77 -0
  425. package/dist/streams/redis/index.d.ts +52 -0
  426. package/dist/streams/redis/index.js +185 -0
  427. package/dist/stripe-BMj5LtsT.js +38 -0
  428. package/dist/stripe-D04h-QBT.d.ts +136 -0
  429. package/dist/{support-wHnK6zp-.js → support-BivNqSpK.js} +32 -11
  430. package/dist/{support-view-B8SlToQX.d.ts → support-view-33Oi07TT.d.ts} +1 -1
  431. package/dist/svelte/index.d.ts +114 -0
  432. package/dist/svelte/index.js +344 -0
  433. package/dist/sveltekit/index.d.ts +116 -0
  434. package/dist/sveltekit/index.js +106 -0
  435. package/dist/tags-B99_U9Pp.js +39 -0
  436. package/dist/tags-Cx-LnIQP.d.ts +30 -0
  437. package/dist/tanstack-db/index.d.ts +71 -0
  438. package/dist/tanstack-db/index.js +72 -0
  439. package/dist/tanstack-start/index.d.ts +75 -0
  440. package/dist/tanstack-start/index.js +95 -0
  441. package/dist/tee-CoEppCER.js +101 -0
  442. package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
  443. package/dist/template-CwO38Do8.d.ts +6 -0
  444. package/dist/temporal-BJGitm-h.js +79 -0
  445. package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
  446. package/dist/tenant-I1TEZ_BX.js +27 -0
  447. package/dist/tenant-icPeuUBN.d.ts +17 -0
  448. package/dist/testing/index.d.ts +315 -41
  449. package/dist/testing/index.js +1046 -79
  450. package/dist/timing-CyTQPubY.js +92 -0
  451. package/dist/ttl-Hr34gRu8.js +12 -0
  452. package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
  453. package/dist/types-BI-0Sl2v.d.ts +359 -0
  454. package/dist/types-C05bxW-W.d.ts +220 -0
  455. package/dist/types-DGs5L0VN.d.ts +192 -0
  456. package/dist/types-TaiEeBGA.d.ts +156 -0
  457. package/dist/usage-CrvrL2vw.d.ts +177 -0
  458. package/dist/user-change-XzvgafU4.js +130 -0
  459. package/dist/vault-CSO7ss5C.d.ts +50 -0
  460. package/dist/vercel-connect/index.d.ts +47 -0
  461. package/dist/vercel-connect/index.js +119 -0
  462. package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
  463. package/dist/verify-DPuWngD4.d.ts +172 -0
  464. package/dist/{version-DOYTYwHP.js → version-Bvv6aLjZ.js} +1 -1
  465. package/dist/view-BeFcRV6G.js +99 -0
  466. package/dist/{view-CbgObAeb.d.ts → view-DbxLNu8L.d.ts} +22 -5
  467. package/dist/vue/index.d.ts +141 -0
  468. package/dist/vue/index.js +362 -0
  469. package/dist/watch-DI34G86j.d.ts +60 -0
  470. package/dist/watch-Xuxrvxq-.js +122 -0
  471. package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
  472. package/dist/workflow-builder-DJ1oHn8g.js +398 -0
  473. package/dist/workflow-sdk/builder/index.d.ts +85 -0
  474. package/dist/workflow-sdk/builder/index.js +250 -0
  475. package/dist/workflow-sdk/index.d.ts +14 -0
  476. package/dist/workflow-sdk/index.js +3 -0
  477. package/dist/workflow-sdk/world/index.d.ts +107 -0
  478. package/dist/workflow-sdk/world/index.js +702 -0
  479. package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
  480. package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
  481. package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
  482. package/dist/workflows-B0j9WKPu.d.ts +185 -0
  483. package/dist/workflows-wu1WWBn7.js +216 -0
  484. package/package.json +461 -20
  485. package/schemas/ai-message-v1.json +258 -0
  486. package/schemas/config-v1.json +1074 -140
  487. package/schemas/doctor-report-v1.json +20 -1
  488. package/schemas/snapshot-v2.json +8 -0
  489. package/skills/better-supabase/SKILL.md +41 -12
  490. package/skills/better-supabase/references/frontend.md +96 -0
  491. package/skills/better-supabase/references/plugins.md +10 -6
  492. package/skills/better-supabase/references/troubleshooting.md +2 -1
  493. package/skills/better-supabase-api/SKILL.md +76 -22
  494. package/skills/better-supabase-api/references/adapters.md +207 -0
  495. package/skills/better-supabase-api/references/ai.md +125 -0
  496. package/skills/better-supabase-api/references/expo.md +65 -0
  497. package/skills/better-supabase-api/references/powersync.md +35 -0
  498. package/skills/better-supabase-api/references/streams-credentials.md +105 -0
  499. package/skills/better-supabase-auth/SKILL.md +47 -11
  500. package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
  501. package/skills/better-supabase-testing/SKILL.md +3 -1
  502. package/dist/cli/config-dtoekM0v.js +0 -2
  503. package/dist/cli/gen-CIdSQZad.js +0 -2
  504. package/dist/cli/gen-CjElD1Vw.js +0 -2241
  505. package/dist/cli/read-sets-VQcPgxU9.js +0 -436
  506. package/dist/cli/sql-CVx-1O8G.js +0 -373
  507. package/dist/entitlements-CTEBm7IB.js +0 -20
  508. package/dist/events-aIO7vsIk.d.ts +0 -230
  509. package/dist/executor-BunPOO-k.d.ts +0 -402
  510. package/dist/executor-XycESQPH.js +0 -94
  511. package/dist/index-CWMDdEr4.d.ts +0 -50
  512. package/dist/index-DOESKG27.d.ts +0 -100
  513. package/dist/index-DmXSxbLi.d.ts +0 -62
  514. package/dist/index-Dp2VDwog.d.ts +0 -161
  515. package/dist/jobs/index.d.ts +0 -226
  516. package/dist/jobs/index.js +0 -1007
  517. package/dist/json-schema-m1fiwKgN.js +0 -208
  518. package/dist/kit-events-CTFDfSwb.js +0 -60
  519. package/dist/kit-transport-B82k1djG.d.ts +0 -33
  520. package/dist/kits-CGLLrNPd.js +0 -157
  521. package/dist/mfa-Cu96oJdw.d.ts +0 -30
  522. package/dist/notifications/index.d.ts +0 -162
  523. package/dist/notifications/index.js +0 -264
  524. package/dist/orgs/index.d.ts +0 -132
  525. package/dist/orgs/index.js +0 -245
  526. package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
  527. package/dist/permdock-sql-DgOfeixi.js +0 -51
  528. package/dist/plugin-DwARMuQp.js +0 -59
  529. package/dist/server-B1mZ7CgQ.js +0 -660
  530. package/dist/stats-Bqob3WqT.js +0 -592
  531. package/dist/support-CEPwlw2G.d.ts +0 -89
  532. package/dist/template-mbvlysOo.d.ts +0 -6
  533. package/dist/temporal-CVlIV2DZ.js +0 -40
  534. package/dist/user-change-CHFEUro1.js +0 -49
  535. package/dist/webhooks/index.d.ts +0 -285
  536. package/skills/better-supabase-auth/references/permdock.md +0 -122
@@ -1,8 +1,10 @@
1
1
  import { n as isPlainObject } from "./clone-BfgmLU90.js";
2
- import { n as dbError, t as DbException } from "./errors-DtwXa6b8.js";
2
+ import { t as DbException } from "./db-exception-CnWcYPxL.js";
3
+ import { n as dbError } from "./errors-B11Duf73.js";
3
4
  import { t as lookupOf } from "./lookup-BaP5bI27.js";
5
+ import { t as escapeLike } from "./escape-like-DHfx6jRr.js";
4
6
  import { i as or, r as not, t as and } from "./types-6cYK9pbJ.js";
5
- import { r as encodeValue } from "./wire-D2dT86vi.js";
7
+ import { i as encodeValue } from "./wire-DtZQ4sdE.js";
6
8
  //#region src/schema/define.ts
7
9
  /**
8
10
  * Binds generated model types to runtime metadata. Called from the generated
@@ -53,6 +55,8 @@ const NUMERIC_TYPES = /* @__PURE__ */ new Set([
53
55
  function invalidRequest(message, table) {
54
56
  throw new DbException(dbError("invalid_request", message, table ? { table } : {}));
55
57
  }
58
+ /** A regconfig name, optionally schema-qualified; PostgREST puts it in the operator unquoted. */
59
+ const TEXT_SEARCH_CONFIG = /^[A-Za-z_]\w*(\.[A-Za-z_]\w*)?$/;
56
60
  const FIELD_OPS = /* @__PURE__ */ new Set([
57
61
  "eq",
58
62
  "neq",
@@ -66,6 +70,8 @@ const FIELD_OPS = /* @__PURE__ */ new Set([
66
70
  "lte",
67
71
  "like",
68
72
  "ilike",
73
+ "match",
74
+ "imatch",
69
75
  "contains",
70
76
  "startsWith",
71
77
  "endsWith",
@@ -84,11 +90,30 @@ function writable(meta, mode) {
84
90
  if (meta.generated || meta.identity === "always") return false;
85
91
  return mode === "insert" ? meta.insertable !== false : meta.updatable !== false;
86
92
  }
87
- /** Escapes LIKE wildcards so user input matches literally. */
88
- function escapeLike(value) {
89
- return value.replaceAll(/[\\%_]/g, (char) => `\\${char}`);
93
+ /** A json key PostgREST accepts in an arrow path, or an array index. */
94
+ const JSON_KEY = /^[\w$]+$/;
95
+ /** Path filters compare text (`->>`), so numbers and booleans become strings. */
96
+ function text(value) {
97
+ return typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" ? String(value) : value;
98
+ }
99
+ /**
100
+ * `in` over a list: `null` never equals anything in SQL, so a list with
101
+ * `null` also matches the rows where the column is null.
102
+ */
103
+ function inList(values, make) {
104
+ const present = values.filter((value) => value !== null);
105
+ if (present.length === values.length) return make("in", values);
106
+ const isNull = make("is", null);
107
+ return present.length === 0 ? isNull : or(make("in", present), isNull);
108
+ }
109
+ /** A primary key value; `null` and `undefined` match no row, so they are a caller error. */
110
+ function keyValue(table, name, value) {
111
+ if (value === null || value === void 0) invalidRequest(`"${name}" of a ${table.key} key is ${String(value)}; pass the row's key`, table.key);
112
+ return value;
90
113
  }
91
114
  const builders = /* @__PURE__ */ new WeakMap();
115
+ /** Column lists remembered per table; reads with generated lists stay bounded. */
116
+ const SELECTION_CACHE_SIZE = 256;
92
117
  /** The shared builder for a schema; a builder holds no per-call state. */
93
118
  function builderFor(meta) {
94
119
  let builder = builders.get(meta);
@@ -102,6 +127,7 @@ var IrBuilder = class {
102
127
  meta;
103
128
  /** Every column of a table, the selection of reads without `select`. */
104
129
  #allColumns = /* @__PURE__ */ new WeakMap();
130
+ #selections = /* @__PURE__ */ new WeakMap();
105
131
  constructor(meta) {
106
132
  this.meta = meta;
107
133
  }
@@ -179,6 +205,7 @@ var IrBuilder = class {
179
205
  op: "is",
180
206
  value: null
181
207
  };
208
+ if (isPlainObject(value) && Array.isArray(value["path"])) return this.pathFilter(table, name, column, value);
182
209
  if (!isOpsObject(value)) return {
183
210
  kind: "column",
184
211
  column,
@@ -195,6 +222,56 @@ var IrBuilder = class {
195
222
  items: []
196
223
  };
197
224
  }
225
+ /** `{ path: ["a", "b"], eq: "x" }` on a json column: compares the text at the path. */
226
+ pathFilter(table, name, column, input) {
227
+ if (!table.columns[name]?.json) invalidRequest(`"path" needs a json column; "${name}" on "${table.key}" is not one`, table.key);
228
+ const path = input["path"];
229
+ if (!Array.isArray(path) || path.length === 0 || !path.every((key) => typeof key === "string" && JSON_KEY.test(key))) invalidRequest(`"path" on "${name}" must be a non-empty list of keys made of letters, digits and _`, table.key);
230
+ const keys = path;
231
+ const at = (op, value) => ({
232
+ kind: "column",
233
+ column,
234
+ op,
235
+ value,
236
+ path: keys
237
+ });
238
+ const items = [];
239
+ for (const [op, operand] of Object.entries(input)) {
240
+ if (op === "path" || operand === void 0) continue;
241
+ switch (op) {
242
+ case "eq":
243
+ items.push(operand === null ? at("is", null) : at("eq", text(operand)));
244
+ break;
245
+ case "neq":
246
+ items.push(operand === null ? not(at("is", null)) : at("neq", text(operand)));
247
+ break;
248
+ case "in":
249
+ case "notIn": {
250
+ if (!Array.isArray(operand)) invalidRequest(`"${op}" on "${name}" needs an array`, table.key);
251
+ const condition = inList(operand.map(text), at);
252
+ items.push(op === "in" ? condition : not(condition));
253
+ break;
254
+ }
255
+ case "isNull":
256
+ items.push(operand ? at("is", null) : not(at("is", null)));
257
+ break;
258
+ case "gt":
259
+ case "gte":
260
+ case "lt":
261
+ case "lte":
262
+ case "like":
263
+ case "ilike":
264
+ case "match":
265
+ case "imatch":
266
+ items.push(at(op, text(operand)));
267
+ break;
268
+ default: invalidRequest(`Unknown operator "${op}" on a path of "${name}"`, table.key);
269
+ }
270
+ }
271
+ const condition = and(...items);
272
+ if (!condition) invalidRequest(`"path" on "${name}" needs an operator`, table.key);
273
+ return condition;
274
+ }
198
275
  fieldOp(table, name, column, op, operand) {
199
276
  const col = (kind, value) => ({
200
277
  kind: "column",
@@ -203,13 +280,20 @@ var IrBuilder = class {
203
280
  value: encodeValue(value)
204
281
  });
205
282
  const meta = table.columns[name];
283
+ const containment = (kind, value) => meta?.json ? {
284
+ kind: "column",
285
+ column,
286
+ op: kind,
287
+ value: encodeValue(value),
288
+ json: true
289
+ } : col(kind, value);
206
290
  switch (op) {
207
291
  case "eq": return operand === null ? col("is", null) : col("eq", operand);
208
292
  case "neq": return operand === null ? not(col("is", null)) : col("neq", operand);
209
293
  case "in":
210
294
  case "notIn": {
211
295
  if (!Array.isArray(operand)) invalidRequest(`"${op}" on "${name}" needs an array`, table.key);
212
- const condition = col("in", operand);
296
+ const condition = inList(operand, col);
213
297
  return op === "in" ? condition : not(condition);
214
298
  }
215
299
  case "isNull": return operand ? col("is", null) : not(col("is", null));
@@ -222,15 +306,18 @@ var IrBuilder = class {
222
306
  case "lt":
223
307
  case "lte":
224
308
  case "like":
225
- case "ilike": return col(op, operand);
309
+ case "ilike":
310
+ case "match":
311
+ case "imatch": return col(op, operand);
226
312
  case "contains":
227
- if (meta?.json || meta?.array) return col("contains", operand);
313
+ if (meta?.json || meta?.array) return containment("contains", operand);
228
314
  return col("ilike", `%${escapeLike(String(operand))}%`);
229
315
  case "startsWith": return col("like", `${escapeLike(String(operand))}%`);
230
316
  case "endsWith": return col("like", `%${escapeLike(String(operand))}`);
231
317
  case "search": {
232
318
  if (typeof operand === "string") return col("fts", operand);
233
319
  const { query, config } = operand;
320
+ if (config && !TEXT_SEARCH_CONFIG.test(config)) invalidRequest(`"search" on "${name}" needs a text search configuration name, such as "english"`, table.key);
234
321
  return config ? {
235
322
  kind: "column",
236
323
  column,
@@ -239,25 +326,26 @@ var IrBuilder = class {
239
326
  config
240
327
  } : col("fts", query);
241
328
  }
242
- case "hasEvery": return col("contains", operand);
243
- case "has": return col("contains", [operand]);
244
- case "hasSome": return col("overlaps", operand);
245
- case "containedBy": return col("containedBy", operand);
329
+ case "hasEvery": return containment("contains", operand);
330
+ case "has": return containment("contains", [operand]);
331
+ case "hasSome":
332
+ if (meta?.json) invalidRequest(`"hasSome" on json column "${name}" has no PostgREST operator; use OR with "has"`, table.key);
333
+ return col("overlaps", operand);
334
+ case "containedBy": return containment("containedBy", operand);
246
335
  default: return invalidRequest(`Unknown operator "${op}" on "${name}"`, table.key);
247
336
  }
248
337
  }
249
338
  selection(table, select, include) {
339
+ if (include === void 0) return this.#columnsOnly(table, select);
250
340
  const columns = select?.map((alias) => this.selectColumn(table, alias)) ?? this.allColumns(table);
251
341
  const includes = [];
252
- if (include !== void 0) {
253
- if (!isPlainObject(include)) invalidRequest(`"include" on "${table.key}" must be an object`, table.key);
254
- for (const [name, value] of Object.entries(include)) {
255
- if (value === void 0 || value === false) continue;
256
- const fn = AGGREGATE_KEYS[name];
257
- if (name === "_count") includes.push(...this.counts(table, value));
258
- else if (fn) includes.push(...this.relationAggregates(table, fn, value));
259
- else includes.push(this.include(table, name, value));
260
- }
342
+ if (!isPlainObject(include)) invalidRequest(`"include" on "${table.key}" must be an object`, table.key);
343
+ for (const [name, value] of Object.entries(include)) {
344
+ if (value === void 0 || value === false) continue;
345
+ const fn = AGGREGATE_KEYS[name];
346
+ if (name === "_count") includes.push(...this.counts(table, value));
347
+ else if (fn) includes.push(...this.relationAggregates(table, fn, value));
348
+ else includes.push(this.include(table, name, value));
261
349
  }
262
350
  return {
263
351
  columns,
@@ -265,6 +353,28 @@ var IrBuilder = class {
265
353
  };
266
354
  }
267
355
  /**
356
+ * A selection without includes, shared per table and column list so the
357
+ * caches keyed on a selection (decoding, rules) hit across calls.
358
+ */
359
+ #columnsOnly(table, select) {
360
+ let byList = this.#selections.get(table);
361
+ if (!byList) {
362
+ byList = /* @__PURE__ */ new Map();
363
+ this.#selections.set(table, byList);
364
+ }
365
+ const key = select === void 0 ? "*" : `:${select.join(",")}`;
366
+ let selection = byList.get(key);
367
+ if (!selection) {
368
+ selection = {
369
+ columns: select?.map((alias) => this.selectColumn(table, alias)) ?? this.allColumns(table),
370
+ includes: []
371
+ };
372
+ if (byList.size >= SELECTION_CACHE_SIZE) byList.clear();
373
+ byList.set(key, selection);
374
+ }
375
+ return selection;
376
+ }
377
+ /**
268
378
  * `db.x.aggregate(args)`: the grouping columns, `_count` and the measures
269
379
  * of each group.
270
380
  */
@@ -405,12 +515,16 @@ var IrBuilder = class {
405
515
  target,
406
516
  selection: this.selection(target, args["select"], args["include"]),
407
517
  where: this.where(target, args["where"]),
408
- orderBy: this.orderBy(target, args["orderBy"]),
518
+ orderBy: this.orderBy(target, args["orderBy"], "include"),
409
519
  limit: typeof args["limit"] === "number" ? args["limit"] : void 0,
410
520
  required: args["required"] === true
411
521
  };
412
522
  }
413
- orderBy(table, input) {
523
+ /**
524
+ * Sort terms. On the root table, a to-one relation key sorts by the related
525
+ * row's columns: `{ organization: { name: "asc" } }`.
526
+ */
527
+ orderBy(table, input, scope = "root") {
414
528
  if (input === void 0) return [];
415
529
  const list = Array.isArray(input) ? input : [input];
416
530
  const terms = [];
@@ -418,27 +532,93 @@ var IrBuilder = class {
418
532
  if (!isPlainObject(item)) invalidRequest(`"orderBy" on "${table.key}" must be an object`, table.key);
419
533
  for (const [name, spec] of Object.entries(item)) {
420
534
  if (spec === void 0) continue;
421
- const column = this.column(table, name);
422
- if (spec === "asc" || spec === "desc") terms.push({
423
- column,
424
- direction: spec
535
+ if (!(name in table.columns) && name in table.relations) {
536
+ terms.push(...this.relationOrder(table, name, spec, scope));
537
+ continue;
538
+ }
539
+ terms.push(this.sortTerm(table, name, this.column(table, name), spec));
540
+ }
541
+ }
542
+ return terms;
543
+ }
544
+ /**
545
+ * Sort terms for `db.x.aggregate(args)`: `groupBy` columns of `grouped`,
546
+ * `{ _count: "desc" }` and measures such as `{ _sum: { amount: "desc" } }`.
547
+ */
548
+ aggregateOrderBy(table, input, grouped) {
549
+ if (input === void 0) return [];
550
+ const list = Array.isArray(input) ? input : [input];
551
+ const columns = new Set(grouped.columns.map((entry) => entry.column));
552
+ const terms = [];
553
+ for (const item of list) {
554
+ if (!isPlainObject(item)) invalidRequest(`"orderBy" on "${table.key}" must be an object`, table.key);
555
+ for (const [name, spec] of Object.entries(item)) {
556
+ if (spec === void 0) continue;
557
+ if (Object.hasOwn(table.columns, name) || Object.hasOwn(table.relations, name)) terms.push(...this.groupOrder(table, name, spec, columns));
558
+ else if (name === "_count") terms.push({
559
+ ...this.sortTerm(table, name, "*", spec),
560
+ aggregate: "count"
425
561
  });
426
- else if (isPlainObject(spec)) {
427
- const direction = spec["direction"] === "desc" ? "desc" : "asc";
428
- const nulls = spec["nulls"];
429
- terms.push(nulls === "first" || nulls === "last" ? {
430
- column,
431
- direction,
432
- nulls
433
- } : {
434
- column,
435
- direction
436
- });
437
- } else invalidRequest(`Invalid sort for "${name}" on "${table.key}"`, table.key);
562
+ else terms.push(...this.measureOrder(table, name, spec));
438
563
  }
439
564
  }
440
565
  return terms;
441
566
  }
567
+ /** A sort on a column, which an aggregate allows only for `groupBy` columns. */
568
+ groupOrder(table, name, spec, grouped) {
569
+ const terms = this.orderBy(table, { [name]: spec });
570
+ const loose = terms.find((term) => term.relation !== void 0 || !grouped.has(term.column));
571
+ if (loose) invalidRequest(`aggregate on "${table.key}" can only sort by groupBy columns, _count and measures, not "${loose.column}"`, table.key);
572
+ return terms;
573
+ }
574
+ /** `_sum: { amount: "desc" }` in an aggregate's `orderBy`. */
575
+ measureOrder(table, key, spec) {
576
+ const fn = Object.hasOwn(AGGREGATE_KEYS, key) ? AGGREGATE_KEYS[key] : void 0;
577
+ if (fn === void 0) invalidRequest(`Unknown column "${key}" on "${table.key}"`, table.key);
578
+ if (!isPlainObject(spec)) invalidRequest(`"orderBy.${key}" on "${table.key}" must map columns to a direction`, table.key);
579
+ const terms = [];
580
+ for (const [alias, direction] of Object.entries(spec)) {
581
+ if (direction === void 0) continue;
582
+ const { column } = this.measure(table, fn, alias, alias);
583
+ terms.push({
584
+ ...this.sortTerm(table, `${key}.${alias}`, column, direction),
585
+ aggregate: fn
586
+ });
587
+ }
588
+ return terms;
589
+ }
590
+ /** One sort term from `"asc"`, `"desc"` or `{ direction, nulls }`. */
591
+ sortTerm(table, name, column, spec) {
592
+ if (spec === "asc" || spec === "desc") return {
593
+ column,
594
+ direction: spec
595
+ };
596
+ if (!isPlainObject(spec)) invalidRequest(`Invalid sort for "${name}" on "${table.key}"`, table.key);
597
+ const direction = spec["direction"] === "desc" ? "desc" : "asc";
598
+ const nulls = spec["nulls"];
599
+ return nulls === "first" || nulls === "last" ? {
600
+ column,
601
+ direction,
602
+ nulls
603
+ } : {
604
+ column,
605
+ direction
606
+ };
607
+ }
608
+ relationOrder(table, name, spec, scope) {
609
+ if (scope !== "root") invalidRequest(scope === "include" ? `"orderBy" inside an include can't sort by the relation "${name}"` : `"orderBy" sorts by one level of relations; "${name}" on "${table.key}" is a second`, table.key);
610
+ const { relation, target } = relationMeta(this.meta, table, name);
611
+ if (relation.kind !== "one") invalidRequest(`"orderBy" on "${name}" needs a to-one relation; "${name}" on "${table.key}" is to-many`, table.key);
612
+ if (!isPlainObject(spec)) invalidRequest(`"orderBy.${name}" on "${table.key}" must map columns of "${target.key}" to a direction`, table.key);
613
+ return this.orderBy(target, spec, "relation").map((term) => ({
614
+ ...term,
615
+ relation: {
616
+ name,
617
+ relation,
618
+ target
619
+ }
620
+ }));
621
+ }
442
622
  /**
443
623
  * Maps an app-cased row to database column names. Rejects columns the
444
624
  * database won't accept for `mode`: generated columns, `identity always`
@@ -490,7 +670,7 @@ var IrBuilder = class {
490
670
  kind: "column",
491
671
  column: this.column(table, name),
492
672
  op: "eq",
493
- value: encodeValue(value)
673
+ value: encodeValue(keyValue(table, name, value))
494
674
  };
495
675
  }
496
676
  if (!isPlainObject(id)) invalidRequest(`Table "${table.key}" has a composite key; pass { ${pk.join(", ")} }`, table.key);
@@ -500,92 +680,10 @@ var IrBuilder = class {
500
680
  kind: "column",
501
681
  column: this.column(table, name),
502
682
  op: "eq",
503
- value: encodeValue(id[name])
683
+ value: encodeValue(keyValue(table, name, id[name]))
504
684
  }))
505
685
  };
506
686
  }
507
687
  };
508
688
  //#endregion
509
- //#region src/ir/simplify.ts
510
- /**
511
- * Folds constant conditions. `true` means "no filter", `false` means "matches
512
- * nothing", so executors can skip the request entirely.
513
- */
514
- function simplify(condition) {
515
- if (condition === void 0) return true;
516
- switch (condition.kind) {
517
- case "and": {
518
- const items = [];
519
- for (const item of condition.items) {
520
- const simple = simplify(item);
521
- if (simple === false) return false;
522
- if (simple !== true) items.push(simple);
523
- }
524
- if (items.length === 0) return true;
525
- return items.length === 1 && items[0] ? items[0] : {
526
- kind: "and",
527
- items
528
- };
529
- }
530
- case "or": {
531
- const items = [];
532
- for (const item of condition.items) {
533
- const simple = simplify(item);
534
- if (simple === true) return true;
535
- if (simple !== false) items.push(simple);
536
- }
537
- if (items.length === 0) return false;
538
- return items.length === 1 && items[0] ? items[0] : {
539
- kind: "or",
540
- items
541
- };
542
- }
543
- case "not": {
544
- const inner = simplify(condition.item);
545
- if (typeof inner === "boolean") return !inner;
546
- if (inner.kind === "not") return inner.item;
547
- return {
548
- kind: "not",
549
- item: inner
550
- };
551
- }
552
- case "relation": {
553
- const where = simplify(condition.where);
554
- if (where === true) {
555
- if (condition.quantifier === "every") return true;
556
- return {
557
- ...condition,
558
- where: void 0
559
- };
560
- }
561
- if (where === false) {
562
- if (condition.quantifier === "some") return false;
563
- if (condition.quantifier === "none") return true;
564
- return {
565
- ...condition,
566
- quantifier: "none",
567
- where: void 0
568
- };
569
- }
570
- return {
571
- ...condition,
572
- where
573
- };
574
- }
575
- case "column":
576
- if (condition.op === "in" && Array.isArray(condition.value) && condition.value.length === 0) return false;
577
- return condition;
578
- default: return condition;
579
- }
580
- }
581
- /** Returns the condition, or `undefined` when it folds to `true`. */
582
- function simplifyOrFalse(condition) {
583
- const simple = simplify(condition);
584
- if (simple === false) return { never: true };
585
- return {
586
- never: false,
587
- condition: simple === true ? void 0 : simple
588
- };
589
- }
590
- //#endregion
591
- export { invalidRequest as a, escapeLike as i, simplifyOrFalse as n, defineSchema as o, builderFor as r, tableMeta as s, simplify as t };
689
+ export { tableMeta as i, invalidRequest as n, defineSchema as r, builderFor as t };
@@ -1,5 +1,5 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- //#region src/notifications/types.d.ts
2
+ //#region src/blocks/notifications/types.d.ts
3
3
  /** A subject a notification is about, e.g. `{ type: 'task', id: '42' }`. */
4
4
  interface NotificationSubject {
5
5
  readonly type: string;
@@ -31,7 +31,7 @@ interface RenderedText {
31
31
  readonly body?: string;
32
32
  }
33
33
  //#endregion
34
- //#region src/notifications/channel.d.ts
34
+ //#region src/blocks/notifications/channel.d.ts
35
35
  /** One pending delivery a channel sends: the notification and who gets it. */
36
36
  interface NotificationMessage {
37
37
  readonly deliveryId: string;
@@ -0,0 +1,114 @@
1
+ import { i as refreshRealtimeAuth } from "./live-CTAZQkwl.js";
2
+ import { REALTIME_SUBSCRIBE_STATES } from "@supabase/supabase-js";
3
+ //#region src/realtime/channels.ts
4
+ const topicChannels = /* @__PURE__ */ new WeakMap();
5
+ /**
6
+ * One channel per topic and client, shared by every `subscribe()` on it:
7
+ * supabase-js hands back the open channel for a topic, so a second join or
8
+ * an early `removeChannel` would break the first subscription.
9
+ */
10
+ function joinTopic(client, topic, isPrivate, self, presence, subscriber) {
11
+ let byTopic = topicChannels.get(client);
12
+ if (!byTopic) {
13
+ byTopic = /* @__PURE__ */ new Map();
14
+ topicChannels.set(client, byTopic);
15
+ }
16
+ const topics = byTopic;
17
+ let shared = topics.get(topic);
18
+ if (shared && shared.self !== self) throw new TypeError(`better-supabase: "${topic}" is already subscribed with self: ${String(shared.self)}; every subscription on a topic needs the same \`self\``);
19
+ if (shared && shared.presence !== presence) throw new TypeError(`better-supabase: "${topic}" is already subscribed ${shared.presence ? "with" : "without"} presence; every topic definition for it needs the same \`presence\``);
20
+ if (!shared) {
21
+ const channel = client.channel(topic, { config: {
22
+ private: isPrivate,
23
+ broadcast: { self }
24
+ } });
25
+ const subscribers = /* @__PURE__ */ new Set();
26
+ const status = (next, error) => {
27
+ for (const each of subscribers) each.onStatus?.(next, error);
28
+ };
29
+ channel.on("broadcast", { event: "*" }, (raw) => {
30
+ const message = {
31
+ event: raw.event,
32
+ payload: raw["payload"],
33
+ topic
34
+ };
35
+ for (const each of subscribers) each.receive(message);
36
+ });
37
+ if (presence) channel.on("presence", { event: "sync" }, () => {
38
+ entry.synced = true;
39
+ const state = channel.presenceState();
40
+ for (const each of subscribers) each.sync?.(state);
41
+ });
42
+ const evict = () => {
43
+ if (topics.get(topic) !== entry) return;
44
+ topics.delete(topic);
45
+ client.removeChannel(channel);
46
+ };
47
+ const ready = (async () => {
48
+ await (isPrivate ? refreshRealtimeAuth(client) : void 0);
49
+ if (subscribers.size === 0) return;
50
+ await new Promise((resolve, reject) => {
51
+ channel.subscribe((state, error) => {
52
+ if (topics.get(topic) !== entry) return;
53
+ switch (state) {
54
+ case REALTIME_SUBSCRIBE_STATES.SUBSCRIBED:
55
+ entry.subscribed = true;
56
+ status("subscribed");
57
+ resolve();
58
+ return;
59
+ case REALTIME_SUBSCRIBE_STATES.CLOSED:
60
+ entry.subscribed = false;
61
+ status("closed");
62
+ resolve();
63
+ return;
64
+ case REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR:
65
+ case REALTIME_SUBSCRIBE_STATES.TIMED_OUT: {
66
+ const failure = error ?? /* @__PURE__ */ new Error(`Realtime ${state.toLowerCase()} on ${topic}`);
67
+ status("error", failure);
68
+ reject(failure);
69
+ if (!entry.subscribed) evict();
70
+ return;
71
+ }
72
+ default: reject(/* @__PURE__ */ new Error(`Unknown realtime status ${String(state)}`));
73
+ }
74
+ });
75
+ });
76
+ })();
77
+ ready.catch(() => void 0);
78
+ const entry = {
79
+ channel,
80
+ self,
81
+ presence,
82
+ subscribers,
83
+ ready,
84
+ subscribed: false,
85
+ synced: false,
86
+ tracker: void 0
87
+ };
88
+ shared = entry;
89
+ topics.set(topic, entry);
90
+ }
91
+ const current = shared;
92
+ current.subscribers.add(subscriber);
93
+ subscriber.onStatus?.("joining");
94
+ if (current.subscribed) subscriber.onStatus?.("subscribed");
95
+ if (current.synced) subscriber.sync?.(current.channel.presenceState());
96
+ return {
97
+ shared: current,
98
+ leave: async () => {
99
+ current.subscribers.delete(subscriber);
100
+ if (current.subscribers.size > 0) {
101
+ if (current.tracker === subscriber) {
102
+ current.tracker = void 0;
103
+ await current.channel.untrack();
104
+ }
105
+ return;
106
+ }
107
+ if (topics.get(topic) !== current) return;
108
+ topics.delete(topic);
109
+ await client.removeChannel(current.channel);
110
+ }
111
+ };
112
+ }
113
+ //#endregion
114
+ export { joinTopic as t };