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
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { a as AnyModels, i as AnyFunctions } from "../types-6BdhkmZe.js";
|
|
2
|
+
import { t as BetterSupabase } from "../define-CJJkkr1-.js";
|
|
3
|
+
import { t as BetterServer } from "../server-CeVeeXwz.js";
|
|
4
|
+
import { a as AuthorizedContext, c as Unwrapped, i as AuthorizeOptions, n as ActionParsed, o as BlockActionOptions, r as ActionResult, s as BlockRequireOptions } from "../kit-B5tid-q5.js";
|
|
5
|
+
import { t as RefusalRedirects } from "../refusal-D1rgbzNq.js";
|
|
6
|
+
import { n as FrameworkOptions, t as FrameworkLocals } from "../framework-DuVb4Xa8.js";
|
|
7
|
+
import { t as Validated } from "../shared-DDSjEGDR.js";
|
|
8
|
+
import { i as tagFor } from "../tags-Cx-LnIQP.js";
|
|
9
|
+
import { AnyEntry, Contributions } from "@supabase/middleware";
|
|
10
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
11
|
+
//#region src/bridges/sveltekit.d.ts
|
|
12
|
+
/** The part of SvelteKit's `RequestEvent` the bridge reads and writes. */
|
|
13
|
+
interface SvelteKitEvent<Locals extends object> {
|
|
14
|
+
readonly request: Request;
|
|
15
|
+
readonly locals: Locals;
|
|
16
|
+
readonly platform?: {
|
|
17
|
+
readonly env?: unknown;
|
|
18
|
+
} | undefined;
|
|
19
|
+
}
|
|
20
|
+
/** SvelteKit's `Handle`, typed structurally so the package does not import `@sveltejs/kit`. */
|
|
21
|
+
type SvelteKitHandle<Locals extends object> = (input: {
|
|
22
|
+
readonly event: SvelteKitEvent<Locals>;
|
|
23
|
+
readonly resolve: (event: SvelteKitEvent<Locals>) => Response | Promise<Response>;
|
|
24
|
+
}) => Promise<Response>;
|
|
25
|
+
/**
|
|
26
|
+
* Runs an entry array as a SvelteKit `handle` hook. Every contributed key
|
|
27
|
+
* lands on `event.locals`, so loads, actions and endpoints read
|
|
28
|
+
* `locals.db`; `event.platform.env` (Cloudflare) seeds `getEnv`. Declare
|
|
29
|
+
* the keys in `App.Locals` with `BetterSupabaseContributions`.
|
|
30
|
+
*
|
|
31
|
+
* ```ts title="src/hooks.server.ts"
|
|
32
|
+
* export const handle = toSvelteKit([withBetterSupabase(server)])
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* Compose it with other hooks through SvelteKit's `sequence`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function toSvelteKit<const Entries extends readonly AnyEntry[]>(entries: Entries & Validated<Entries>): SvelteKitHandle<Partial<Contributions<Entries>>>;
|
|
38
|
+
//#endregion
|
|
39
|
+
//#region src/sveltekit/create.d.ts
|
|
40
|
+
/** SvelteKit's `fail()` result, typed structurally. */
|
|
41
|
+
interface SvelteKitFailure<T> {
|
|
42
|
+
readonly status: number;
|
|
43
|
+
readonly data: T;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* `error`, `redirect` and `fail` from `@sveltejs/kit`. Pass them so refused
|
|
47
|
+
* callers get SvelteKit's own errors and redirects, and failed form actions
|
|
48
|
+
* a `fail()` with the status.
|
|
49
|
+
*/
|
|
50
|
+
interface SvelteKitHelpers {
|
|
51
|
+
error(status: number, body: {
|
|
52
|
+
readonly message: string;
|
|
53
|
+
}): never;
|
|
54
|
+
redirect(status: 303, location: string): never;
|
|
55
|
+
fail(status: number, data: Record<string, unknown>): SvelteKitFailure<unknown>;
|
|
56
|
+
}
|
|
57
|
+
interface SvelteKitOptions extends FrameworkOptions {
|
|
58
|
+
/** `{ error, redirect, fail }` from `@sveltejs/kit`. */
|
|
59
|
+
readonly kit?: SvelteKitHelpers;
|
|
60
|
+
}
|
|
61
|
+
/** The part of a SvelteKit `RequestEvent` the guards read. */
|
|
62
|
+
interface SvelteKitRequestEvent<Locals extends object = object> {
|
|
63
|
+
readonly request: Request;
|
|
64
|
+
readonly locals: Locals;
|
|
65
|
+
}
|
|
66
|
+
/** A load's `depends`, typed structurally. */
|
|
67
|
+
interface SvelteKitDepends {
|
|
68
|
+
depends(...deps: `${string}:${string}`[]): void;
|
|
69
|
+
}
|
|
70
|
+
/** What `handleError` returns: SvelteKit's `App.Error` with a code. */
|
|
71
|
+
interface SvelteKitAppError {
|
|
72
|
+
readonly message: string;
|
|
73
|
+
readonly code?: string;
|
|
74
|
+
}
|
|
75
|
+
interface BetterSvelteKit<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> extends BetterServer<M, F, E, C, P> {
|
|
76
|
+
/** The keys on `event.locals`, for `App.Locals`. Type only: `undefined` at runtime. */
|
|
77
|
+
readonly Locals: FrameworkLocals<M, F, E, C, P>;
|
|
78
|
+
/**
|
|
79
|
+
* The `handle` hook: verifies the caller, refreshes the session cookie on
|
|
80
|
+
* navigations and form posts, and puts `db`, `bs`, `auth`, `tenant` and
|
|
81
|
+
* the serializable `session` on `event.locals`.
|
|
82
|
+
*/
|
|
83
|
+
readonly handle: SvelteKitHandle<Partial<FrameworkLocals<M, F, E, C, P>>>;
|
|
84
|
+
/**
|
|
85
|
+
* The caller in a `load` or endpoint, or a refusal: a redirect to
|
|
86
|
+
* `signIn` or `mfa` when configured, else SvelteKit's `error()`.
|
|
87
|
+
*
|
|
88
|
+
* ```ts
|
|
89
|
+
* export const load = async (event) => {
|
|
90
|
+
* const { db, tenant } = await bs.require(event, { requireTenant: true });
|
|
91
|
+
* return { customers: await db.customers.findMany().orThrow() };
|
|
92
|
+
* };
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
require<R extends boolean = false>(event: SvelteKitRequestEvent, options?: BlockRequireOptions<C, P, R>): Promise<FrameworkLocals<M, F, E, C, P> & AuthorizedContext<C, P, R>>;
|
|
96
|
+
/**
|
|
97
|
+
* A form action returning an `ActionResult`: validates the form with
|
|
98
|
+
* `input`, runs the guard and `authorize`, and on failure answers with
|
|
99
|
+
* `fail(status, result)` when `kit` is set, so `form.error` is a `DbError`.
|
|
100
|
+
*/
|
|
101
|
+
action<S extends StandardSchemaV1 | undefined, T, R extends boolean = false>(options: BlockActionOptions<S, C, P, R>, fn: (input: ActionParsed<S>, ctx: FrameworkLocals<M, F, E, C, P> & AuthorizedContext<C, P, R>, event: SvelteKitRequestEvent) => T): (event: SvelteKitRequestEvent) => Promise<ActionResult<Unwrapped<Awaited<T>>> | SvelteKitFailure<ActionResult<never>>>;
|
|
102
|
+
/**
|
|
103
|
+
* `handleError` for `hooks.server.ts`: `DbError`s keep their message and
|
|
104
|
+
* kind as `code`; other errors become a generic message unless
|
|
105
|
+
* `exposeErrors` is on.
|
|
106
|
+
*/
|
|
107
|
+
handleError(input: {
|
|
108
|
+
readonly error: unknown;
|
|
109
|
+
}): SvelteKitAppError;
|
|
110
|
+
/** Registers `bs:<table>` dependencies, so `invalidate(tagFor(table))` reruns the load. */
|
|
111
|
+
depends(load: SvelteKitDepends, ...tables: readonly string[]): void;
|
|
112
|
+
}
|
|
113
|
+
/** SvelteKit integration: a `handle` hook, guarded loads and form actions. */
|
|
114
|
+
export declare function createSvelteKit<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options?: SvelteKitOptions): BetterSvelteKit<M, F, E, C, P>;
|
|
115
|
+
//#endregion
|
|
116
|
+
export { type ActionResult, type AuthorizeOptions, type AuthorizedContext, type BetterSvelteKit, type BlockActionOptions, type BlockRequireOptions, type FrameworkLocals, type FrameworkOptions, type RefusalRedirects, type SvelteKitAppError, type SvelteKitDepends, type SvelteKitEvent, type SvelteKitFailure, type SvelteKitHandle, type SvelteKitHelpers, type SvelteKitOptions, type SvelteKitRequestEvent, tagFor };
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { t as DbException } from "../db-exception-CnWcYPxL.js";
|
|
2
|
+
import { r as dbErrorOf } from "../errors-B11Duf73.js";
|
|
3
|
+
import { o as toProblem } from "../problem-BreOl8b8.js";
|
|
4
|
+
import { c as extendServer, n as flushEvents, s as createServer } from "../adapter-Bc1o3zyy.js";
|
|
5
|
+
import { t as defaultExpose } from "../respond-BUgsXNgk.js";
|
|
6
|
+
import { r as tagFor } from "../tags-B99_U9Pp.js";
|
|
7
|
+
import { i as requireCaller, o as runAction } from "../kit-Fm-Fv7q5.js";
|
|
8
|
+
import { n as bufferInPlace, t as around } from "../shared-CBxosKK3.js";
|
|
9
|
+
import { a as platformWaitUntil, i as localsOf, n as actionInput, r as frameworkEntry } from "../framework-CONDyPYx.js";
|
|
10
|
+
import { i as refusalTarget } from "../refusal-CeJWxmkH.js";
|
|
11
|
+
//#region src/bridges/sveltekit.ts
|
|
12
|
+
/**
|
|
13
|
+
* Runs an entry array as a SvelteKit `handle` hook. Every contributed key
|
|
14
|
+
* lands on `event.locals`, so loads, actions and endpoints read
|
|
15
|
+
* `locals.db`; `event.platform.env` (Cloudflare) seeds `getEnv`. Declare
|
|
16
|
+
* the keys in `App.Locals` with `BetterSupabaseContributions`.
|
|
17
|
+
*
|
|
18
|
+
* ```ts title="src/hooks.server.ts"
|
|
19
|
+
* export const handle = toSvelteKit([withBetterSupabase(server)])
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* Compose it with other hooks through SvelteKit's `sequence`.
|
|
23
|
+
*/
|
|
24
|
+
function toSvelteKit(entries) {
|
|
25
|
+
const run = around(entries);
|
|
26
|
+
return ({ event, resolve }) => {
|
|
27
|
+
bufferInPlace(event.request);
|
|
28
|
+
return run(event.request, event.platform?.env, async (contributions) => {
|
|
29
|
+
Object.assign(event.locals, contributions);
|
|
30
|
+
return resolve(event);
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region src/sveltekit/create.ts
|
|
36
|
+
/** SvelteKit integration: a `handle` hook, guarded loads and form actions. */
|
|
37
|
+
function createSvelteKit(betterSupabase, options = {}) {
|
|
38
|
+
const server = createServer(betterSupabase, options);
|
|
39
|
+
const expose = options.exposeErrors ?? defaultExpose();
|
|
40
|
+
const run = around([frameworkEntry(server, options, expose)]);
|
|
41
|
+
const localsFrom = (event) => {
|
|
42
|
+
const locals = event.locals;
|
|
43
|
+
if (!locals.bs) throw new TypeError("better-supabase: no context on event.locals; export handle = bs.handle from hooks.server.ts");
|
|
44
|
+
return locals;
|
|
45
|
+
};
|
|
46
|
+
const refuse = (error, request) => {
|
|
47
|
+
const target = refusalTarget(error, request, options);
|
|
48
|
+
if (options.kit) {
|
|
49
|
+
if (target) options.kit.redirect(303, target.pathname + target.search);
|
|
50
|
+
options.kit.error(error.status, { message: toProblem(error, { expose }).detail ?? error.message });
|
|
51
|
+
}
|
|
52
|
+
throw new DbException(error);
|
|
53
|
+
};
|
|
54
|
+
const handle = ({ event, resolve }) => {
|
|
55
|
+
bufferInPlace(event.request);
|
|
56
|
+
const platform = event.platform;
|
|
57
|
+
const env = event.platform?.env;
|
|
58
|
+
return run(event.request, env, async (contributions) => {
|
|
59
|
+
Object.assign(event.locals, localsOf(contributions));
|
|
60
|
+
const response = await resolve(event);
|
|
61
|
+
flushEvents(server, options.waitUntil ?? platformWaitUntil(platform));
|
|
62
|
+
return response;
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
return extendServer(server, {
|
|
66
|
+
Locals: void 0,
|
|
67
|
+
handle,
|
|
68
|
+
require: async (event, requireOptions = {}) => {
|
|
69
|
+
const locals = localsFrom(event);
|
|
70
|
+
const caller = await requireCaller(locals.bs.auth, requireOptions, locals.tenant);
|
|
71
|
+
if ("kind" in caller) return refuse(caller, event.request);
|
|
72
|
+
return {
|
|
73
|
+
...locals,
|
|
74
|
+
...caller
|
|
75
|
+
};
|
|
76
|
+
},
|
|
77
|
+
action(actionOptions, fn) {
|
|
78
|
+
return async (event) => {
|
|
79
|
+
const locals = localsFrom(event);
|
|
80
|
+
const input = await actionInput(event.request);
|
|
81
|
+
const result = await runAction(locals.bs.auth, actionOptions, input, locals.tenant, (parsed, caller) => fn(parsed, {
|
|
82
|
+
...locals,
|
|
83
|
+
...caller
|
|
84
|
+
}, event));
|
|
85
|
+
if (!result.ok && options.kit) return options.kit.fail(result.error.status, result);
|
|
86
|
+
return result;
|
|
87
|
+
};
|
|
88
|
+
},
|
|
89
|
+
handleError({ error }) {
|
|
90
|
+
const found = dbErrorOf(error);
|
|
91
|
+
if (found) {
|
|
92
|
+
const problem = toProblem(found, { expose });
|
|
93
|
+
return {
|
|
94
|
+
message: problem.detail ?? problem.title,
|
|
95
|
+
code: found.kind
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return { message: expose && error instanceof Error ? error.message : "Internal Error" };
|
|
99
|
+
},
|
|
100
|
+
depends(load, ...tables) {
|
|
101
|
+
for (const table of tables) load.depends(`bs:${table}`);
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
//#endregion
|
|
106
|
+
export { createSvelteKit, tagFor, toSvelteKit };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//#region src/core/tags.ts
|
|
2
|
+
/**
|
|
3
|
+
* `bs:<table>`, `bs:<table>:<id>`, or `bs:<table>@<tenant>` for a read
|
|
4
|
+
* scoped to one tenant. Mutations invalidate the table tag, the tag of their
|
|
5
|
+
* tenant (`bs:<table>@*` without one) and the tags of the changed rows.
|
|
6
|
+
*/
|
|
7
|
+
function tagFor(table, id, options = {}) {
|
|
8
|
+
if (id !== void 0) return `bs:${table}:${String(id)}`;
|
|
9
|
+
return options.tenant === void 0 ? `bs:${table}` : `bs:${table}@${options.tenant}`;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The tags a mutation invalidates: `bs:<table>` for every table in the
|
|
13
|
+
* target, the tenant's `bs:<table>@<tenant>` (every tenant's `bs:<table>@*`
|
|
14
|
+
* when the mutation has no tenant) and `bs:<table>:<id>` per changed row.
|
|
15
|
+
*/
|
|
16
|
+
function cacheTagsOf(target) {
|
|
17
|
+
const tenant = { tenant: target.tenant ?? "*" };
|
|
18
|
+
const tags = [];
|
|
19
|
+
for (const table of target.tables) tags.push(tagFor(table), tagFor(table, void 0, tenant));
|
|
20
|
+
for (const id of target.ids) tags.push(tagFor(target.table, id));
|
|
21
|
+
return tags;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A `CacheAdapter` for any tag-based cache: it hands `invalidate` the tags
|
|
25
|
+
* from `cacheTagsOf`, e.g. a CDN purge by tag, SvelteKit's `invalidate`, or
|
|
26
|
+
* a Redis set of keys per tag. Tag your reads with `tagFor`.
|
|
27
|
+
*
|
|
28
|
+
* ```ts
|
|
29
|
+
* betterSupabase.cache(tagCache((tags) => purgeCdn(tags), 'cdn'))
|
|
30
|
+
* ```
|
|
31
|
+
*/
|
|
32
|
+
function tagCache(invalidate, name = "tags") {
|
|
33
|
+
return {
|
|
34
|
+
name,
|
|
35
|
+
invalidate: (target) => invalidate(cacheTagsOf(target))
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
export { tagCache as n, tagFor as r, cacheTagsOf as t };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { d as CacheTarget, u as CacheAdapter } from "./define-CJJkkr1-.js";
|
|
2
|
+
//#region src/core/tags.d.ts
|
|
3
|
+
interface TagOptions {
|
|
4
|
+
/** The tenant the read is scoped to; `"*"` is every tenant's reads. */
|
|
5
|
+
readonly tenant?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* `bs:<table>`, `bs:<table>:<id>`, or `bs:<table>@<tenant>` for a read
|
|
9
|
+
* scoped to one tenant. Mutations invalidate the table tag, the tag of their
|
|
10
|
+
* tenant (`bs:<table>@*` without one) and the tags of the changed rows.
|
|
11
|
+
*/
|
|
12
|
+
declare function tagFor(table: string, id?: string | number, options?: TagOptions): string;
|
|
13
|
+
/**
|
|
14
|
+
* The tags a mutation invalidates: `bs:<table>` for every table in the
|
|
15
|
+
* target, the tenant's `bs:<table>@<tenant>` (every tenant's `bs:<table>@*`
|
|
16
|
+
* when the mutation has no tenant) and `bs:<table>:<id>` per changed row.
|
|
17
|
+
*/
|
|
18
|
+
declare function cacheTagsOf(target: CacheTarget): string[];
|
|
19
|
+
/**
|
|
20
|
+
* A `CacheAdapter` for any tag-based cache: it hands `invalidate` the tags
|
|
21
|
+
* from `cacheTagsOf`, e.g. a CDN purge by tag, SvelteKit's `invalidate`, or
|
|
22
|
+
* a Redis set of keys per tag. Tag your reads with `tagFor`.
|
|
23
|
+
*
|
|
24
|
+
* ```ts
|
|
25
|
+
* betterSupabase.cache(tagCache((tags) => purgeCdn(tags), 'cdn'))
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
declare function tagCache(invalidate: (tags: readonly string[]) => void | Promise<void>, name?: string): CacheAdapter;
|
|
29
|
+
//#endregion
|
|
30
|
+
export { tagFor as i, cacheTagsOf as n, tagCache as r, TagOptions as t };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { L as TableKey, a as AnyModels, i as AnyFunctions } from "../types-6BdhkmZe.js";
|
|
2
|
+
import { b as Db, t as BetterSupabase } from "../define-CJJkkr1-.js";
|
|
3
|
+
import { t as BetterQueryMeta } from "../invalidate-BBqhpxyB.js";
|
|
4
|
+
import { QueryClient, SkipToken } from "@tanstack/query-core";
|
|
5
|
+
//#region src/tanstack-db/collection.d.ts
|
|
6
|
+
/** The query a collection loads: `queries.<table>.findMany(args)` from `better-supabase/query`. */
|
|
7
|
+
interface CollectionQuery<Row> {
|
|
8
|
+
readonly queryKey: readonly unknown[];
|
|
9
|
+
readonly queryFn: ((context: {
|
|
10
|
+
readonly signal: AbortSignal;
|
|
11
|
+
}) => Promise<Row[]>) | SkipToken;
|
|
12
|
+
readonly meta?: BetterQueryMeta;
|
|
13
|
+
}
|
|
14
|
+
/** The fields of a TanStack DB pending mutation the handlers read. */
|
|
15
|
+
interface PendingMutationLike<Row> {
|
|
16
|
+
readonly original: unknown;
|
|
17
|
+
readonly modified: Row;
|
|
18
|
+
readonly changes: Partial<Row>;
|
|
19
|
+
}
|
|
20
|
+
/** The handler argument TanStack DB passes to `onInsert`, `onUpdate` and `onDelete`. */
|
|
21
|
+
interface MutationParamsLike<Row> {
|
|
22
|
+
readonly transaction: {
|
|
23
|
+
readonly mutations: readonly PendingMutationLike<Row>[];
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
type CollectionMutationHandler<Row> = (params: MutationParamsLike<Row>) => Promise<void>;
|
|
27
|
+
interface CollectionOptions<Row> {
|
|
28
|
+
readonly query: CollectionQuery<Row>;
|
|
29
|
+
readonly queryClient: QueryClient;
|
|
30
|
+
/** The collection id. Defaults to the table key. */
|
|
31
|
+
readonly id?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Options for `queryCollectionOptions()` from `@tanstack/query-db-collection`.
|
|
35
|
+
* Typed by shape, so better-supabase doesn't depend on TanStack DB.
|
|
36
|
+
*/
|
|
37
|
+
interface CollectionConfig<Row> {
|
|
38
|
+
readonly id: string;
|
|
39
|
+
readonly queryKey: readonly unknown[];
|
|
40
|
+
readonly queryFn: (context: {
|
|
41
|
+
readonly signal: AbortSignal;
|
|
42
|
+
}) => Promise<Row[]>;
|
|
43
|
+
readonly meta?: BetterQueryMeta;
|
|
44
|
+
readonly queryClient: QueryClient;
|
|
45
|
+
readonly getKey: (row: Row) => string | number;
|
|
46
|
+
readonly onInsert: CollectionMutationHandler<Row>;
|
|
47
|
+
readonly onUpdate: CollectionMutationHandler<Row>;
|
|
48
|
+
readonly onDelete: CollectionMutationHandler<Row>;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A TanStack DB query collection for one table: it loads the rows with
|
|
52
|
+
* `query`, keys them by the table's primary key, and sends inserts, updates
|
|
53
|
+
* and deletes through the table's repository, so RLS, hooks, events and
|
|
54
|
+
* plugins apply. After a write the collection refetches its query; with
|
|
55
|
+
* `invalidateOnMutation(betterSupabase, queryClient)`, every other query
|
|
56
|
+
* that read the table refetches too.
|
|
57
|
+
*
|
|
58
|
+
* ```ts
|
|
59
|
+
* const customers = createCollection(
|
|
60
|
+
* queryCollectionOptions(
|
|
61
|
+
* collectionOptions(betterSupabase, db, "customers", {
|
|
62
|
+
* query: queries.customers.findMany({ where: { status: "active" } }),
|
|
63
|
+
* queryClient,
|
|
64
|
+
* }),
|
|
65
|
+
* ),
|
|
66
|
+
* );
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
export declare function collectionOptions<M extends AnyModels, D, F extends AnyFunctions, E, T extends TableKey<M>, Row extends object>(betterSupabase: BetterSupabase<M, D, F, E>, db: Db<M, F, E, unknown> | (() => Db<M, F, E, unknown>), table: T, options: CollectionOptions<Row>): CollectionConfig<Row>;
|
|
70
|
+
//#endregion
|
|
71
|
+
export type { CollectionConfig, CollectionMutationHandler, CollectionOptions, CollectionQuery, MutationParamsLike, PendingMutationLike };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { t as DbException } from "../db-exception-CnWcYPxL.js";
|
|
2
|
+
//#region src/tanstack-db/collection.ts
|
|
3
|
+
function field(row, name) {
|
|
4
|
+
if (typeof row !== "object" || row === null || !(name in row)) return void 0;
|
|
5
|
+
return Object.getOwnPropertyDescriptor(row, name)?.value;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* A TanStack DB query collection for one table: it loads the rows with
|
|
9
|
+
* `query`, keys them by the table's primary key, and sends inserts, updates
|
|
10
|
+
* and deletes through the table's repository, so RLS, hooks, events and
|
|
11
|
+
* plugins apply. After a write the collection refetches its query; with
|
|
12
|
+
* `invalidateOnMutation(betterSupabase, queryClient)`, every other query
|
|
13
|
+
* that read the table refetches too.
|
|
14
|
+
*
|
|
15
|
+
* ```ts
|
|
16
|
+
* const customers = createCollection(
|
|
17
|
+
* queryCollectionOptions(
|
|
18
|
+
* collectionOptions(betterSupabase, db, "customers", {
|
|
19
|
+
* query: queries.customers.findMany({ where: { status: "active" } }),
|
|
20
|
+
* queryClient,
|
|
21
|
+
* }),
|
|
22
|
+
* ),
|
|
23
|
+
* );
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
function collectionOptions(betterSupabase, db, table, options) {
|
|
27
|
+
const { query, queryClient } = options;
|
|
28
|
+
const queryFn = query.queryFn;
|
|
29
|
+
if (typeof queryFn !== "function") throw new TypeError(`better-supabase: the "${table}" collection needs a query that runs, not skipToken`);
|
|
30
|
+
const primaryKey = betterSupabase.meta.tables[table]?.primaryKey ?? [];
|
|
31
|
+
const [single] = primaryKey;
|
|
32
|
+
if (single === void 0) throw new TypeError(`better-supabase: the "${table}" collection needs a table with a primary key`);
|
|
33
|
+
const composite = primaryKey.length > 1;
|
|
34
|
+
const idOf = (row) => composite ? Object.fromEntries(primaryKey.map((name) => [name, field(row, name)])) : field(row, single);
|
|
35
|
+
const write = (method) => {
|
|
36
|
+
const fn = (typeof db === "function" ? db() : db)[table]?.[method];
|
|
37
|
+
if (!fn) throw new TypeError(`better-supabase: ${table}.${method} is not available`);
|
|
38
|
+
return fn;
|
|
39
|
+
};
|
|
40
|
+
const orThrow = async (result) => {
|
|
41
|
+
const settled = await result;
|
|
42
|
+
if (!settled.ok) throw new DbException(settled.error);
|
|
43
|
+
};
|
|
44
|
+
return {
|
|
45
|
+
id: options.id ?? table,
|
|
46
|
+
queryKey: query.queryKey,
|
|
47
|
+
queryFn,
|
|
48
|
+
...query.meta ? { meta: query.meta } : {},
|
|
49
|
+
queryClient,
|
|
50
|
+
getKey: (row) => {
|
|
51
|
+
if (!composite) {
|
|
52
|
+
const id = field(row, single);
|
|
53
|
+
return typeof id === "number" ? id : String(id);
|
|
54
|
+
}
|
|
55
|
+
return JSON.stringify(primaryKey.map((name) => field(row, name)));
|
|
56
|
+
},
|
|
57
|
+
onInsert: async ({ transaction }) => {
|
|
58
|
+
const create = write("create");
|
|
59
|
+
for (const mutation of transaction.mutations) await orThrow(create(mutation.modified, { returning: false }));
|
|
60
|
+
},
|
|
61
|
+
onUpdate: async ({ transaction }) => {
|
|
62
|
+
const update = write("update");
|
|
63
|
+
for (const mutation of transaction.mutations) await orThrow(update(idOf(mutation.original), mutation.changes, { returning: false }));
|
|
64
|
+
},
|
|
65
|
+
onDelete: async ({ transaction }) => {
|
|
66
|
+
const remove = write("delete");
|
|
67
|
+
for (const mutation of transaction.mutations) await orThrow(remove(idOf(mutation.original)));
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
export { collectionOptions };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { a as AnyModels, i as AnyFunctions } from "../types-6BdhkmZe.js";
|
|
2
|
+
import { t as BetterSupabase } from "../define-CJJkkr1-.js";
|
|
3
|
+
import { t as BetterServer } from "../server-CeVeeXwz.js";
|
|
4
|
+
import { a as AuthorizedContext, c as Unwrapped, i as AuthorizeOptions, n as ActionParsed, o as BlockActionOptions, r as ActionResult, s as BlockRequireOptions } from "../kit-B5tid-q5.js";
|
|
5
|
+
import { t as RefusalRedirects } from "../refusal-D1rgbzNq.js";
|
|
6
|
+
import { n as FrameworkOptions, t as FrameworkLocals } from "../framework-DuVb4Xa8.js";
|
|
7
|
+
import { t as Validated } from "../shared-DDSjEGDR.js";
|
|
8
|
+
import { AnyEntry, Contributions } from "@supabase/middleware";
|
|
9
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
10
|
+
//#region src/bridges/tanstack-start.d.ts
|
|
11
|
+
/** The arguments TanStack Start passes to a `.server()` callback. */
|
|
12
|
+
interface TanStackStartServerArgs<Context, Result> {
|
|
13
|
+
readonly request: Request;
|
|
14
|
+
readonly next: (options: {
|
|
15
|
+
readonly context: Context;
|
|
16
|
+
}) => Promise<Result>;
|
|
17
|
+
}
|
|
18
|
+
interface ToTanStackStartOptions {
|
|
19
|
+
/** The host's env object for `getEnv`, read per request. */
|
|
20
|
+
readonly env?: (request: Request) => unknown;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Runs an entry array as the `.server()` callback of a TanStack Start
|
|
24
|
+
* middleware. Every contributed key lands on `context`. On request
|
|
25
|
+
* middleware the response passes back through the entries, so refreshed
|
|
26
|
+
* session cookies reach it; on server function middleware the context still
|
|
27
|
+
* flows, and a short circuit (a 401 from the guard) is thrown as a
|
|
28
|
+
* `Response`, which TanStack Start sends.
|
|
29
|
+
*
|
|
30
|
+
* ```ts title="src/start.ts"
|
|
31
|
+
* const supabase = createMiddleware().server(toTanStackStart([withBetterSupabase(server)]))
|
|
32
|
+
* export const startInstance = createStart(() => ({ requestMiddleware: [supabase] }))
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function toTanStackStart<const Entries extends readonly AnyEntry[]>(entries: Entries & Validated<Entries>, options?: ToTanStackStartOptions): <Result extends object>(args: TanStackStartServerArgs<Contributions<Entries>, Result>) => Promise<Result>;
|
|
36
|
+
//#endregion
|
|
37
|
+
//#region src/tanstack-start/create.d.ts
|
|
38
|
+
interface TanStackStartOptions extends FrameworkOptions {
|
|
39
|
+
/** The host's env object for `getEnv`, read per request. */
|
|
40
|
+
readonly platformEnv?: (request: Request) => unknown;
|
|
41
|
+
}
|
|
42
|
+
/** What a server function handler receives. */
|
|
43
|
+
interface TanStackStartHandlerArgs<Data, Context> {
|
|
44
|
+
readonly data: Data;
|
|
45
|
+
readonly context: Context;
|
|
46
|
+
}
|
|
47
|
+
interface BetterTanStackStart<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> extends BetterServer<M, F, E, C, P> {
|
|
48
|
+
/**
|
|
49
|
+
* The `.server()` callback of a request middleware: verifies the caller,
|
|
50
|
+
* refreshes the session cookie on navigations and form posts, and puts
|
|
51
|
+
* `db`, `bs`, `auth`, `tenant` and the serializable `session` on `context`.
|
|
52
|
+
*
|
|
53
|
+
* ```ts title="src/start.ts"
|
|
54
|
+
* const supabase = createMiddleware().server(bs.middleware)
|
|
55
|
+
* export const startInstance = createStart(() => ({ requestMiddleware: [supabase] }))
|
|
56
|
+
* ```
|
|
57
|
+
*/
|
|
58
|
+
readonly middleware: <Result extends object>(args: TanStackStartServerArgs<FrameworkLocals<M, F, E, C, P>, Result>) => Promise<Result>;
|
|
59
|
+
/**
|
|
60
|
+
* The caller in a server function or route handler, or a thrown
|
|
61
|
+
* refusal: a redirect to `signIn` or `mfa` when configured, else a
|
|
62
|
+
* Problem Details response, which TanStack Start sends.
|
|
63
|
+
*/
|
|
64
|
+
require<R extends boolean = false>(context: FrameworkLocals<M, F, E, C, P>, options?: BlockRequireOptions<C, P, R>): Promise<FrameworkLocals<M, F, E, C, P> & AuthorizedContext<C, P, R>>;
|
|
65
|
+
/**
|
|
66
|
+
* A `createServerFn().handler()` returning an `ActionResult`, for
|
|
67
|
+
* `useAction`. Pass the same schema to `.inputValidator()` to type `data`
|
|
68
|
+
* on the client; `input` validates it again on the server.
|
|
69
|
+
*/
|
|
70
|
+
action<S extends StandardSchemaV1 | undefined, T, R extends boolean = false>(options: BlockActionOptions<S, C, P, R>, fn: (input: ActionParsed<S>, ctx: FrameworkLocals<M, F, E, C, P> & AuthorizedContext<C, P, R>) => T): <Data>(args: TanStackStartHandlerArgs<Data, FrameworkLocals<M, F, E, C, P>>) => Promise<ActionResult<Unwrapped<Awaited<T>>>>;
|
|
71
|
+
}
|
|
72
|
+
/** TanStack Start integration: request middleware, guards and server function actions. */
|
|
73
|
+
export declare function createTanStackStart<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options?: TanStackStartOptions): BetterTanStackStart<M, F, E, C, P>;
|
|
74
|
+
//#endregion
|
|
75
|
+
export type { ActionResult, AuthorizeOptions, AuthorizedContext, BetterTanStackStart, BlockActionOptions, BlockRequireOptions, FrameworkLocals, FrameworkOptions, RefusalRedirects, TanStackStartHandlerArgs, TanStackStartOptions, TanStackStartServerArgs, ToTanStackStartOptions };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { c as extendServer, n as flushEvents, s as createServer } from "../adapter-Bc1o3zyy.js";
|
|
2
|
+
import { t as defaultExpose } from "../respond-BUgsXNgk.js";
|
|
3
|
+
import { i as requireCaller, o as runAction } from "../kit-Fm-Fv7q5.js";
|
|
4
|
+
import { n as bufferInPlace, t as around } from "../shared-CBxosKK3.js";
|
|
5
|
+
import { i as localsOf, r as frameworkEntry } from "../framework-CONDyPYx.js";
|
|
6
|
+
import { r as refusalResponse } from "../refusal-CeJWxmkH.js";
|
|
7
|
+
//#region src/bridges/tanstack-start.ts
|
|
8
|
+
/** The `response` of a request middleware's `next()` result; server function results have none. */
|
|
9
|
+
function responseOf(result) {
|
|
10
|
+
return "response" in result && result.response instanceof Response ? result.response : void 0;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Runs an entry array as the `.server()` callback of a TanStack Start
|
|
14
|
+
* middleware. Every contributed key lands on `context`. On request
|
|
15
|
+
* middleware the response passes back through the entries, so refreshed
|
|
16
|
+
* session cookies reach it; on server function middleware the context still
|
|
17
|
+
* flows, and a short circuit (a 401 from the guard) is thrown as a
|
|
18
|
+
* `Response`, which TanStack Start sends.
|
|
19
|
+
*
|
|
20
|
+
* ```ts title="src/start.ts"
|
|
21
|
+
* const supabase = createMiddleware().server(toTanStackStart([withBetterSupabase(server)]))
|
|
22
|
+
* export const startInstance = createStart(() => ({ requestMiddleware: [supabase] }))
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
function toTanStackStart(entries, options = {}) {
|
|
26
|
+
return tanStackStartServer(around(entries), options.env, (contributions) => contributions);
|
|
27
|
+
}
|
|
28
|
+
/** The `.server()` callback over a folded pipeline, with the context `toContext` builds. */
|
|
29
|
+
function tanStackStartServer(run, env, toContext) {
|
|
30
|
+
return async ({ request, next }) => {
|
|
31
|
+
bufferInPlace(request);
|
|
32
|
+
const downstream = {};
|
|
33
|
+
const response = await run(request, env?.(request), async (contributions) => {
|
|
34
|
+
const result = await next({ context: toContext(contributions, request) });
|
|
35
|
+
downstream.result = result;
|
|
36
|
+
return responseOf(result) ?? new Response(null, { status: 204 });
|
|
37
|
+
});
|
|
38
|
+
const { result } = downstream;
|
|
39
|
+
if (result === void 0) throw response;
|
|
40
|
+
if (responseOf(result) === void 0) return result;
|
|
41
|
+
return {
|
|
42
|
+
...result,
|
|
43
|
+
response
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
//#endregion
|
|
48
|
+
//#region src/tanstack-start/create.ts
|
|
49
|
+
/** TanStack Start integration: request middleware, guards and server function actions. */
|
|
50
|
+
function createTanStackStart(betterSupabase, options = {}) {
|
|
51
|
+
const server = createServer(betterSupabase, options);
|
|
52
|
+
const expose = options.exposeErrors ?? defaultExpose();
|
|
53
|
+
const requests = /* @__PURE__ */ new WeakMap();
|
|
54
|
+
const served = tanStackStartServer(around([frameworkEntry(server, options, expose)]), options.platformEnv, (contributions, request) => {
|
|
55
|
+
const locals = localsOf(contributions);
|
|
56
|
+
requests.set(locals, request);
|
|
57
|
+
return locals;
|
|
58
|
+
});
|
|
59
|
+
const scopeOf = (context) => {
|
|
60
|
+
if (typeof context !== "object" || !("bs" in context)) throw new TypeError("better-supabase: no context; add bs.middleware to the request middleware in src/start.ts");
|
|
61
|
+
return context;
|
|
62
|
+
};
|
|
63
|
+
return extendServer(server, {
|
|
64
|
+
async middleware(args) {
|
|
65
|
+
try {
|
|
66
|
+
return await served(args);
|
|
67
|
+
} finally {
|
|
68
|
+
flushEvents(server, options.waitUntil);
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
require: async (context, requireOptions = {}) => {
|
|
72
|
+
const scope = scopeOf(context);
|
|
73
|
+
const caller = await requireCaller(scope.bs.auth, requireOptions, scope.tenant);
|
|
74
|
+
if ("kind" in caller) {
|
|
75
|
+
const request = requests.get(scope) ?? new Request("http://localhost/");
|
|
76
|
+
throw refusalResponse(caller, request, options, expose);
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
...scope,
|
|
80
|
+
...caller
|
|
81
|
+
};
|
|
82
|
+
},
|
|
83
|
+
action(actionOptions, fn) {
|
|
84
|
+
return async ({ data, context }) => {
|
|
85
|
+
const scope = scopeOf(context);
|
|
86
|
+
return await runAction(scope.bs.auth, actionOptions, data, scope.tenant, (parsed, caller) => fn(parsed, {
|
|
87
|
+
...scope,
|
|
88
|
+
...caller
|
|
89
|
+
}));
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
export { createTanStackStart, toTanStackStart };
|