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.
- package/README.md +187 -46
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/{actor-DaJjqD5R.d.ts → actor-CQTlc1Hh.d.ts} +1 -1
- package/dist/adapter-Bc1o3zyy.js +1106 -0
- package/dist/agents-CVHGd7It.d.ts +94 -0
- package/dist/ai-cache-CBWs1W0k.js +80 -0
- package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
- package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
- package/dist/ai-chat-B24UI962.js +743 -0
- package/dist/ai-files-CSPNswUY.js +319 -0
- package/dist/ai-sdk/agents/index.d.ts +74 -0
- package/dist/ai-sdk/agents/index.js +159 -0
- package/dist/ai-sdk/batches/index.d.ts +74 -0
- package/dist/ai-sdk/batches/index.js +180 -0
- package/dist/ai-sdk/cache/index.d.ts +38 -0
- package/dist/ai-sdk/cache/index.js +127 -0
- package/dist/ai-sdk/chat/index.d.ts +2 -0
- package/dist/ai-sdk/chat/index.js +246 -0
- package/dist/ai-sdk/embeddings/index.d.ts +3 -0
- package/dist/ai-sdk/embeddings/index.js +2 -0
- package/dist/ai-sdk/files/index.d.ts +61 -0
- package/dist/ai-sdk/files/index.js +111 -0
- package/dist/ai-sdk/index.d.ts +145 -0
- package/dist/ai-sdk/index.js +174 -0
- package/dist/ai-sdk/mcp/index.d.ts +102 -0
- package/dist/ai-sdk/mcp/index.js +362 -0
- package/dist/ai-sdk/memory/index.d.ts +67 -0
- package/dist/ai-sdk/memory/index.js +175 -0
- package/dist/ai-sdk/react/index.d.ts +2 -0
- package/dist/ai-sdk/react/index.js +3 -0
- package/dist/ai-sdk/react/server.d.ts +6 -0
- package/dist/ai-sdk/react/server.js +7 -0
- package/dist/ai-sdk/workflow/index.d.ts +249 -0
- package/dist/ai-sdk/workflow/index.js +575 -0
- package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
- package/dist/ai-sdk/workflow/react/index.js +66 -0
- package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
- package/dist/ai-sdk/workflow/react/server.js +12 -0
- package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
- package/dist/announcements-CiyOs-xP.js +107 -0
- package/dist/announcements-ZRGnScWI.d.ts +72 -0
- package/dist/api-keys-rCGtKaZA.d.ts +156 -0
- package/dist/assistant-DwdpDH1q.d.ts +147 -0
- package/dist/astro/index.d.ts +86 -0
- package/dist/astro/index.js +93 -0
- package/dist/attributes-5dYul0u0.js +13 -0
- package/dist/auth-link-BjFPqwLz.d.ts +97 -0
- package/dist/auth-link-DrDX9KOT.js +114 -0
- package/dist/authorization-BFCqamMs.d.ts +172 -0
- package/dist/before-route-CnR0C0Jr.js +30 -0
- package/dist/bind-Bu_ZNa3W.d.ts +62 -0
- package/dist/bind-l4kAvYSv.js +97 -0
- package/dist/block-events-CrT8r7Fe.js +76 -0
- package/dist/block-fields-GFkxl4dP.js +49 -0
- package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
- package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
- package/dist/block-helpers-DWHxHsEQ.js +190 -0
- package/dist/block-hooks-BmjMyXTa.js +114 -0
- package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
- package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
- package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
- package/dist/blocks/agents/index.d.ts +3 -0
- package/dist/blocks/agents/index.js +123 -0
- package/dist/blocks/ai-cache/index.d.ts +3 -0
- package/dist/blocks/ai-cache/index.js +3 -0
- package/dist/blocks/ai-chat/index.d.ts +31 -0
- package/dist/blocks/ai-chat/index.js +5 -0
- package/dist/blocks/ai-chat/react/index.d.ts +77 -0
- package/dist/blocks/ai-chat/react/index.js +387 -0
- package/dist/blocks/ai-chat/react/server.d.ts +16 -0
- package/dist/blocks/ai-chat/react/server.js +14 -0
- package/dist/blocks/ai-files/index.d.ts +14 -0
- package/dist/blocks/ai-files/index.js +3 -0
- package/dist/blocks/ai-providers/index.d.ts +7 -0
- package/dist/blocks/ai-providers/index.js +211 -0
- package/dist/blocks/ai-tasks/index.d.ts +3 -0
- package/dist/blocks/ai-tasks/index.js +203 -0
- package/dist/blocks/announcements/index.d.ts +3 -0
- package/dist/blocks/announcements/index.js +3 -0
- package/dist/blocks/announcements/react/index.d.ts +31 -0
- package/dist/blocks/announcements/react/index.js +86 -0
- package/dist/blocks/announcements/react/server.d.ts +6 -0
- package/dist/blocks/announcements/react/server.js +7 -0
- package/dist/blocks/api-keys/index.d.ts +35 -0
- package/dist/blocks/api-keys/index.js +334 -0
- package/dist/blocks/attachments/index.d.ts +210 -0
- package/dist/blocks/attachments/index.js +222 -0
- package/dist/blocks/audit/index.d.ts +366 -0
- package/dist/blocks/audit/index.js +714 -0
- package/dist/blocks/billing/index.d.ts +265 -0
- package/dist/blocks/billing/index.js +400 -0
- package/dist/blocks/comments/index.d.ts +200 -0
- package/dist/blocks/comments/index.js +207 -0
- package/dist/blocks/connectors/index.d.ts +3 -0
- package/dist/blocks/connectors/index.js +164 -0
- package/dist/blocks/data-lifecycle/index.d.ts +251 -0
- package/dist/blocks/data-lifecycle/index.js +353 -0
- package/dist/blocks/entitlements/index.d.ts +14 -0
- package/dist/blocks/entitlements/index.js +25 -0
- package/dist/blocks/flags/index.d.ts +226 -0
- package/dist/blocks/flags/index.js +282 -0
- package/dist/blocks/inbox/index.d.ts +6 -0
- package/dist/blocks/inbox/index.js +499 -0
- package/dist/blocks/inbox/react/index.d.ts +2 -0
- package/dist/blocks/inbox/react/index.js +225 -0
- package/dist/blocks/inbox/react/server.d.ts +10 -0
- package/dist/blocks/inbox/react/server.js +12 -0
- package/dist/blocks/index.d.ts +65 -0
- package/dist/blocks/index.js +77 -0
- package/dist/blocks/jobs/index.d.ts +297 -0
- package/dist/blocks/jobs/index.js +1051 -0
- package/dist/blocks/knowledge/index.d.ts +3 -0
- package/dist/blocks/knowledge/index.js +3 -0
- package/dist/blocks/memory/index.d.ts +8 -0
- package/dist/blocks/memory/index.js +289 -0
- package/dist/blocks/notifications/index.d.ts +297 -0
- package/dist/blocks/notifications/index.js +425 -0
- package/dist/blocks/notifications/react/index.d.ts +44 -0
- package/dist/blocks/notifications/react/index.js +67 -0
- package/dist/blocks/notifications/react/server.d.ts +6 -0
- package/dist/blocks/notifications/react/server.js +7 -0
- package/dist/blocks/onboarding/index.d.ts +3 -0
- package/dist/blocks/onboarding/index.js +64 -0
- package/dist/blocks/onboarding/react/index.d.ts +28 -0
- package/dist/blocks/onboarding/react/index.js +78 -0
- package/dist/blocks/onboarding/react/server.d.ts +7 -0
- package/dist/blocks/onboarding/react/server.js +7 -0
- package/dist/blocks/organizations/index.d.ts +241 -0
- package/dist/blocks/organizations/index.js +400 -0
- package/dist/blocks/outbox/index.d.ts +3 -0
- package/dist/blocks/outbox/index.js +266 -0
- package/dist/blocks/profiles/index.d.ts +40 -0
- package/dist/blocks/profiles/index.js +28 -0
- package/dist/blocks/push/index.d.ts +185 -0
- package/dist/blocks/push/index.js +258 -0
- package/dist/blocks/settings/index.d.ts +89 -0
- package/dist/blocks/settings/index.js +104 -0
- package/dist/blocks/sso/index.d.ts +198 -0
- package/dist/blocks/sso/index.js +1297 -0
- package/dist/blocks/usage/index.d.ts +4 -0
- package/dist/blocks/usage/index.js +233 -0
- package/dist/blocks/waitlist/index.d.ts +117 -0
- package/dist/blocks/waitlist/index.js +132 -0
- package/dist/blocks/webhooks/index.d.ts +304 -0
- package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
- package/dist/blocks/workflow-builder/index.d.ts +21 -0
- package/dist/blocks/workflow-builder/index.js +5 -0
- package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
- package/dist/blocks/workflow-builder/react/index.js +119 -0
- package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
- package/dist/blocks/workflow-builder/react/server.js +11 -0
- package/dist/blocks/workflows/index.d.ts +3 -0
- package/dist/blocks/workflows/index.js +3 -0
- package/dist/blocks/workflows/react/index.d.ts +47 -0
- package/dist/blocks/workflows/react/index.js +137 -0
- package/dist/blocks/workflows/react/server.d.ts +8 -0
- package/dist/blocks/workflows/react/server.js +11 -0
- package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
- package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
- package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
- package/dist/channels-CkgQ_X60.js +114 -0
- package/dist/chat-sdk/index.d.ts +303 -0
- package/dist/chat-sdk/index.js +733 -0
- package/dist/chat-sdk/react/index.d.ts +2 -0
- package/dist/chat-sdk/react/index.js +3 -0
- package/dist/chat-sdk/react/server.d.ts +3 -0
- package/dist/chat-sdk/react/server.js +2 -0
- package/dist/claims-DDBQT6BK.js +61 -0
- package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
- package/dist/cli/config-B9HkL8nF.js +2 -0
- package/dist/cli/config-DU7EJImt.js +49 -0
- package/dist/cli/config-NiPxAmUF.js +1077 -0
- package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
- package/dist/cli/{doctor-C_A-KEAz.js → doctor-B4JOm_ox.js} +991 -317
- package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
- package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
- package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
- package/dist/cli/gen-BGLb_zou.js +3100 -0
- package/dist/cli/gen-DAH8FM2W.js +2 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-DMa6M7hV.js → init-BIIwclPg.js} +242 -27
- package/dist/cli/{introspect-BKlaIu_M.js → introspect-DNUTuNvb.js} +5 -5
- package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
- package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
- package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
- package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
- package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
- package/dist/cli/read-sets-CETOSFx4.js +223 -0
- package/dist/cli/{run-Bo_NLT5n.js → run-DNWxHynX.js} +33 -23
- package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
- package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
- package/dist/cli/sql-D0GUtUPp.js +536 -0
- package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
- package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
- package/dist/cli/{version-BCtlgDQx.js → version-hr88OZG0.js} +1 -1
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.js +11 -71
- package/dist/client/native/index.d.ts +228 -0
- package/dist/client/native/index.js +361 -0
- package/dist/client-CI0Z2zWX.js +277 -0
- package/dist/cloud-event-BnmD5fb9.js +46 -0
- package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
- package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
- package/dist/compose-BIBNgAnq.js +53 -0
- package/dist/composite-Bt1YK3Ke.d.ts +146 -0
- package/dist/composite-DhE66P5u.js +130 -0
- package/dist/config/index.d.ts +6 -4
- package/dist/config/index.js +5 -5
- package/dist/{config-Bv7gvfzC.d.ts → config-D44Y7PAv.d.ts} +406 -214
- package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
- package/dist/connector-Dv8kK0MO.d.ts +107 -0
- package/dist/connectors-hkLCwyEz.d.ts +120 -0
- package/dist/context-BCrWe7ow.d.ts +237 -0
- package/dist/credentials/index.d.ts +31 -0
- package/dist/credentials/index.js +168 -0
- package/dist/cron-DVPUg5k3.js +145 -0
- package/dist/csv-CPAzEmB6.js +25 -0
- package/dist/db-exception-CnWcYPxL.js +15 -0
- package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
- package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
- package/dist/edge/index.d.ts +69 -11
- package/dist/edge/index.js +191 -75
- package/dist/elysia/index.d.ts +59 -0
- package/dist/elysia/index.js +62 -0
- package/dist/embeddings-4ZvFzjsU.js +127 -0
- package/dist/embeddings-C9KGQnXt.d.ts +68 -0
- package/dist/{refresh-CFPX0Qft.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-BiJZ4t49.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
- package/dist/entitlements-DRl6ZJUm.js +24 -0
- package/dist/envelope-DqnYGRw7.js +47 -0
- package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
- package/dist/errors-DLjJHPLK.js +44 -0
- package/dist/escape-like-DHfx6jRr.js +7 -0
- package/dist/escape-like-ImTK0ps_.d.ts +15 -0
- package/dist/eve/index.d.ts +220 -0
- package/dist/eve/index.js +504 -0
- package/dist/eve-gT2Fpjut.d.ts +151 -0
- package/dist/events/index.d.ts +4 -3
- package/dist/events/index.js +9 -50
- package/dist/events-DWDhx77e.d.ts +549 -0
- package/dist/executor-Bq28caBo.js +718 -0
- package/dist/executor-C-R4pucm.js +83 -0
- package/dist/executor-CaWigTyR.d.ts +148 -0
- package/dist/executor-D14tGopJ.d.ts +36 -0
- package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
- package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
- package/dist/executor-DvsBbNBS.d.ts +261 -0
- package/dist/expo/index.d.ts +79 -0
- package/dist/expo/index.js +129 -0
- package/dist/expo-sqlite/index.d.ts +58 -0
- package/dist/expo-sqlite/index.js +104 -0
- package/dist/field-errors-BFOa7WhB.d.ts +99 -0
- package/dist/field-errors-VF1yb8yI.js +13 -0
- package/dist/framework-CONDyPYx.js +51 -0
- package/dist/framework-DuVb4Xa8.d.ts +25 -0
- package/dist/gateway-C1ssRHnf.d.ts +130 -0
- package/dist/graph-BGyLLFLX.js +265 -0
- package/dist/h3/index.d.ts +59 -0
- package/dist/h3/index.js +55 -0
- package/dist/h3/v1/index.d.ts +63 -0
- package/dist/h3/v1/index.js +49 -0
- package/dist/history-BZih6SFP.js +64 -0
- package/dist/hono/index.d.ts +56 -7
- package/dist/hono/index.js +97 -45
- package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
- package/dist/http-Cv4T29xh.js +40 -0
- package/dist/http-DdYadv-o.js +126 -0
- package/dist/image-url-pIVlO6R1.js +41 -0
- package/dist/{impersonation-BgSHAYLf.js → impersonation-DcqaTBHx.js} +21 -6
- package/dist/inbox-i7E1ppo6.d.ts +384 -0
- package/dist/index-ACiNPN4Z.d.ts +74 -0
- package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
- package/dist/index-BkWT_uBO.d.ts +51 -0
- package/dist/index-BpFYMsi0.d.ts +53 -0
- package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-ClmjK_o-.d.ts +55 -0
- package/dist/index-CtuakVRc.d.ts +267 -0
- package/dist/index-D48jVS-N.d.ts +246 -0
- package/dist/index-DDrYaUcq.d.ts +138 -0
- package/dist/index-DQh4VCc9.d.ts +98 -0
- package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
- package/dist/index.d.ts +65 -18
- package/dist/index.js +42 -14
- package/dist/invalidate-BBqhpxyB.d.ts +19 -0
- package/dist/json-CEnpTHlZ.js +16 -0
- package/dist/json-schema-CvER4kgT.js +502 -0
- package/dist/keys-4MnkWTTh.js +35 -0
- package/dist/kit-B5tid-q5.d.ts +60 -0
- package/dist/kit-Fm-Fv7q5.js +78 -0
- package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
- package/dist/knowledge-CDmiMLew.js +255 -0
- package/dist/lint/index.d.ts +1 -1
- package/dist/lint/index.js +37 -0
- package/dist/list/index.d.ts +3 -2
- package/dist/list/index.js +1 -444
- package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
- package/dist/list-query-gl808ac1.js +459 -0
- package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
- package/dist/logger-DWVYUmwi.d.ts +18 -0
- package/dist/mcp/index.d.ts +38 -11
- package/dist/mcp/index.js +82 -46
- package/dist/mcp/sdk/index.d.ts +105 -0
- package/dist/mcp/sdk/index.js +126 -0
- package/dist/message-CaKlqdsX.js +219 -0
- package/dist/message-CfDoR0Y6.d.ts +94 -0
- package/dist/messages-B9-5887d.js +715 -0
- package/dist/messages-DYP0sUTe.d.ts +59 -0
- package/dist/mfa-Daak8ukG.d.ts +54 -0
- package/dist/modules-DpPwzC7E.d.ts +192 -0
- package/dist/modules-dxrVK3ID.js +228 -0
- package/dist/nestjs/index.d.ts +68 -0
- package/dist/nestjs/index.js +164 -0
- package/dist/next/client/index.d.ts +35 -0
- package/dist/next/client/index.js +36 -0
- package/dist/next/image/index.js +3 -24
- package/dist/next/index.d.ts +150 -51
- package/dist/next/index.js +261 -107
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.js +210 -0
- package/dist/node-headers-AO06VhqH.d.ts +24 -0
- package/dist/node-headers-C71zNQHe.js +55 -0
- package/dist/nuxt/index.d.ts +60 -0
- package/dist/nuxt/index.js +64 -0
- package/dist/onboarding-BZGHYJks.d.ts +62 -0
- package/dist/openapi/index.d.ts +1 -1
- package/dist/openapi/index.js +3 -3
- package/dist/orpc/index.d.ts +70 -11
- package/dist/orpc/index.js +73 -24
- package/dist/otel/index.d.ts +7 -7
- package/dist/otel/index.js +87 -57
- package/dist/outbox-Cq7pPYvl.d.ts +161 -0
- package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
- package/dist/plugin-tfXW1-qO.js +45 -0
- package/dist/plugins/actor/index.d.ts +2 -2
- package/dist/plugins/actor/index.js +3 -3
- package/dist/plugins/rules/index.d.ts +11 -4
- package/dist/plugins/rules/index.js +40 -13
- package/dist/plugins/soft-delete/index.d.ts +5 -4
- package/dist/plugins/soft-delete/index.js +10 -5
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/tenant/index.js +18 -11
- package/dist/plugins/timestamps/index.d.ts +5 -3
- package/dist/plugins/timestamps/index.js +6 -4
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +10 -6
- package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +1 -2
- package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
- package/dist/powersync/index.d.ts +43 -0
- package/dist/powersync/index.js +199 -0
- package/dist/powersync/react/index.d.ts +87 -0
- package/dist/powersync/react/index.js +108 -0
- package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
- package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
- package/dist/provider-BH5UWZJ6.d.ts +113 -0
- package/dist/provider-Di3sRutW.js +57 -0
- package/dist/query/index.d.ts +4 -2
- package/dist/query/index.js +4 -3
- package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
- package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
- package/dist/react/index.d.ts +11 -7
- package/dist/react/index.js +7 -3
- package/dist/react/native/index.d.ts +116 -0
- package/dist/react/native/index.js +130 -0
- package/dist/react/server.d.ts +28 -10
- package/dist/react/server.js +22 -5
- package/dist/react/session.d.ts +2 -2
- package/dist/react-4ZqkP8da.js +79 -0
- package/dist/react-F80mF4-t.js +409 -0
- package/dist/react-router/index.d.ts +83 -0
- package/dist/react-router/index.js +89 -0
- package/dist/react-topic-seAWjL3_.js +38 -0
- package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
- package/dist/realtime/index.d.ts +4 -5
- package/dist/realtime/index.js +144 -82
- package/dist/refusal-CeJWxmkH.js +61 -0
- package/dist/refusal-D1rgbzNq.d.ts +15 -0
- package/dist/replicas-CwrYp5Zj.js +94 -0
- package/dist/{view-Bn6HNKUe.js → resolve-D_IcnvFd.js} +248 -240
- package/dist/{impersonation-BmePsuxz.d.ts → resolve-KW8nCeL6.d.ts} +29 -69
- package/dist/{resource-mqfJW4YF.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-DNRFP7KR.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
- package/dist/respond-BUgsXNgk.js +91 -0
- package/dist/respond-DoBijysA.d.ts +93 -0
- package/dist/result-D7y2fT87.d.ts +282 -0
- package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
- package/dist/run-state-CPo-1X2B.d.ts +12 -0
- package/dist/run-state-CgBKzYMW.js +13 -0
- package/dist/search-CUWCRYKL.js +9 -0
- package/dist/server/index.d.ts +143 -22
- package/dist/server/index.js +46 -14
- package/dist/{respond-BR1fJWOB.d.ts → server-CeVeeXwz.d.ts} +224 -85
- package/dist/session-ChiXDZdZ.d.ts +72 -0
- package/dist/shared-CBxosKK3.js +75 -0
- package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
- package/dist/shared-DDSjEGDR.d.ts +11 -0
- package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
- package/dist/sign-in-Cb1mwv6X.js +86 -0
- package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
- package/dist/simplify-DDO0j0LI.js +83 -0
- package/dist/solid/index.d.ts +131 -0
- package/dist/solid/index.js +344 -0
- package/dist/solid-start/index.d.ts +75 -0
- package/dist/solid-start/index.js +58 -0
- package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
- package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
- package/dist/sql/index.d.ts +313 -212
- package/dist/sql/index.js +34872 -6579
- package/dist/ssr/index.d.ts +6 -5
- package/dist/ssr/index.js +3 -3
- package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
- package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
- package/dist/stats-D_AD9GGu.js +1123 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.js +1027 -368
- package/dist/store-BdH5ruDx.js +66 -0
- package/dist/store-CGjgWu5n.d.ts +68 -0
- package/dist/streams/index.d.ts +76 -0
- package/dist/streams/index.js +77 -0
- package/dist/streams/redis/index.d.ts +52 -0
- package/dist/streams/redis/index.js +185 -0
- package/dist/stripe-BMj5LtsT.js +38 -0
- package/dist/stripe-D04h-QBT.d.ts +136 -0
- package/dist/{support-wHnK6zp-.js → support-BivNqSpK.js} +32 -11
- package/dist/{support-view-B8SlToQX.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/svelte/index.d.ts +114 -0
- package/dist/svelte/index.js +344 -0
- package/dist/sveltekit/index.d.ts +116 -0
- package/dist/sveltekit/index.js +106 -0
- package/dist/tags-B99_U9Pp.js +39 -0
- package/dist/tags-Cx-LnIQP.d.ts +30 -0
- package/dist/tanstack-db/index.d.ts +71 -0
- package/dist/tanstack-db/index.js +72 -0
- package/dist/tanstack-start/index.d.ts +75 -0
- package/dist/tanstack-start/index.js +95 -0
- package/dist/tee-CoEppCER.js +101 -0
- package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
- package/dist/template-CwO38Do8.d.ts +6 -0
- package/dist/temporal-BJGitm-h.js +79 -0
- package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
- package/dist/tenant-I1TEZ_BX.js +27 -0
- package/dist/tenant-icPeuUBN.d.ts +17 -0
- package/dist/testing/index.d.ts +315 -41
- package/dist/testing/index.js +1046 -79
- package/dist/timing-CyTQPubY.js +92 -0
- package/dist/ttl-Hr34gRu8.js +12 -0
- package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
- package/dist/types-BI-0Sl2v.d.ts +359 -0
- package/dist/types-C05bxW-W.d.ts +220 -0
- package/dist/types-DGs5L0VN.d.ts +192 -0
- package/dist/types-TaiEeBGA.d.ts +156 -0
- package/dist/usage-CrvrL2vw.d.ts +177 -0
- package/dist/user-change-XzvgafU4.js +130 -0
- package/dist/vault-CSO7ss5C.d.ts +50 -0
- package/dist/vercel-connect/index.d.ts +47 -0
- package/dist/vercel-connect/index.js +119 -0
- package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
- package/dist/verify-DPuWngD4.d.ts +172 -0
- package/dist/{version-DOYTYwHP.js → version-Bvv6aLjZ.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-CbgObAeb.d.ts → view-DbxLNu8L.d.ts} +22 -5
- package/dist/vue/index.d.ts +141 -0
- package/dist/vue/index.js +362 -0
- package/dist/watch-DI34G86j.d.ts +60 -0
- package/dist/watch-Xuxrvxq-.js +122 -0
- package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
- package/dist/workflow-builder-DJ1oHn8g.js +398 -0
- package/dist/workflow-sdk/builder/index.d.ts +85 -0
- package/dist/workflow-sdk/builder/index.js +250 -0
- package/dist/workflow-sdk/index.d.ts +14 -0
- package/dist/workflow-sdk/index.js +3 -0
- package/dist/workflow-sdk/world/index.d.ts +107 -0
- package/dist/workflow-sdk/world/index.js +702 -0
- package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
- package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
- package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
- package/dist/workflows-B0j9WKPu.d.ts +185 -0
- package/dist/workflows-wu1WWBn7.js +216 -0
- package/package.json +461 -20
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +20 -1
- package/schemas/snapshot-v2.json +8 -0
- package/skills/better-supabase/SKILL.md +41 -12
- package/skills/better-supabase/references/frontend.md +96 -0
- package/skills/better-supabase/references/plugins.md +10 -6
- package/skills/better-supabase/references/troubleshooting.md +2 -1
- package/skills/better-supabase-api/SKILL.md +76 -22
- package/skills/better-supabase-api/references/adapters.md +207 -0
- package/skills/better-supabase-api/references/ai.md +125 -0
- package/skills/better-supabase-api/references/expo.md +65 -0
- package/skills/better-supabase-api/references/powersync.md +35 -0
- package/skills/better-supabase-api/references/streams-credentials.md +105 -0
- package/skills/better-supabase-auth/SKILL.md +47 -11
- package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
- package/skills/better-supabase-testing/SKILL.md +3 -1
- package/dist/cli/config-dtoekM0v.js +0 -2
- package/dist/cli/gen-CIdSQZad.js +0 -2
- package/dist/cli/gen-CjElD1Vw.js +0 -2241
- package/dist/cli/read-sets-VQcPgxU9.js +0 -436
- package/dist/cli/sql-CVx-1O8G.js +0 -373
- package/dist/entitlements-CTEBm7IB.js +0 -20
- package/dist/events-aIO7vsIk.d.ts +0 -230
- package/dist/executor-BunPOO-k.d.ts +0 -402
- package/dist/executor-XycESQPH.js +0 -94
- package/dist/index-CWMDdEr4.d.ts +0 -50
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dp2VDwog.d.ts +0 -161
- package/dist/jobs/index.d.ts +0 -226
- package/dist/jobs/index.js +0 -1007
- package/dist/json-schema-m1fiwKgN.js +0 -208
- package/dist/kit-events-CTFDfSwb.js +0 -60
- package/dist/kit-transport-B82k1djG.d.ts +0 -33
- package/dist/kits-CGLLrNPd.js +0 -157
- package/dist/mfa-Cu96oJdw.d.ts +0 -30
- package/dist/notifications/index.d.ts +0 -162
- package/dist/notifications/index.js +0 -264
- package/dist/orgs/index.d.ts +0 -132
- package/dist/orgs/index.js +0 -245
- package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
- package/dist/permdock-sql-DgOfeixi.js +0 -51
- package/dist/plugin-DwARMuQp.js +0 -59
- package/dist/server-B1mZ7CgQ.js +0 -660
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-CEPwlw2G.d.ts +0 -89
- package/dist/template-mbvlysOo.d.ts +0 -6
- package/dist/temporal-CVlIV2DZ.js +0 -40
- package/dist/user-change-CHFEUro1.js +0 -49
- package/dist/webhooks/index.d.ts +0 -285
- 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 {
|
|
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 {
|
|
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
|
-
/**
|
|
88
|
-
|
|
89
|
-
|
|
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 =
|
|
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":
|
|
309
|
+
case "ilike":
|
|
310
|
+
case "match":
|
|
311
|
+
case "imatch": return col(op, operand);
|
|
226
312
|
case "contains":
|
|
227
|
-
if (meta?.json || meta?.array) return
|
|
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
|
|
243
|
-
case "has": return
|
|
244
|
-
case "hasSome":
|
|
245
|
-
|
|
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
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
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
|
-
|
|
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
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
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
|
|
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
|
-
|
|
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 };
|