better-supabase 0.5.0 → 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 +299 -41
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/actor-CQTlc1Hh.d.ts +43 -0
- 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-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
- 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-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
- package/dist/cli/{introspect--H7oGmcd.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-BKR2W_79.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-BDJuO0UR.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-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
- 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-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-DUxU4oHe.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-DcqaTBHx.js +148 -0
- 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-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
- 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-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
- package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
- package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-D8iqWMr-.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 -21
- package/dist/server/index.js +46 -14
- package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
- 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 +330 -194
- package/dist/sql/index.js +34901 -6489
- 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-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
- package/dist/{support-view-Da5peKFg.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 +343 -37
- package/dist/testing/index.js +1186 -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-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
- 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 +470 -29
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +21 -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 +62 -18
- 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-BJc9vdyu.js +0 -2
- package/dist/cli/gen-C2osRcr5.js +0 -2204
- package/dist/cli/read-sets-BfMQcKy8.js +0 -289
- package/dist/cli/sql-DzPbfngx.js +0 -348
- 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/impersonation-VfaGc4Q_.js +0 -41
- package/dist/index-BGdgBPdf.d.ts +0 -161
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dxn2a5cw.d.ts +0 -50
- 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/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-Csx2sRjg.js +0 -655
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-DT-OhSxD.d.ts +0 -88
- 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 -100
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { a as evaluateCondition, c as topologicalOrder, i as durationMs, l as validateGraph, n as conditionOf, t as approved } from "./graph-BGyLLFLX.js";
|
|
2
|
+
//#region src/blocks/workflow-builder/executor.ts
|
|
3
|
+
/** The hook token of an approval node. */
|
|
4
|
+
const approvalToken = (runKey, node) => `${runKey}:${node}`;
|
|
5
|
+
const active = (edge, ran) => {
|
|
6
|
+
const outcome = ran.get(edge.source);
|
|
7
|
+
if (outcome === void 0) return false;
|
|
8
|
+
return edge.branch === void 0 || String(outcome) === edge.branch;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Runs `graph` in dependency order: a node runs when the trigger reaches it
|
|
12
|
+
* through edges whose sources ran (and, from a condition or an approval,
|
|
13
|
+
* took the edge's branch). Returns each node's output by id. It only calls
|
|
14
|
+
* `runtime`, so it is deterministic and runs inside a `"use workflow"`
|
|
15
|
+
* function as the static executor.
|
|
16
|
+
*/
|
|
17
|
+
async function executeGraph(graph, input, runtime) {
|
|
18
|
+
const errors = validateGraph(graph);
|
|
19
|
+
if (errors.length > 0) throw new TypeError(`workflow-builder: ${errors.join("; ")}`);
|
|
20
|
+
const order = topologicalOrder(graph) ?? [];
|
|
21
|
+
const incoming = /* @__PURE__ */ new Map();
|
|
22
|
+
for (const edge of graph.edges) incoming.set(edge.target, [...incoming.get(edge.target) ?? [], edge]);
|
|
23
|
+
const results = {};
|
|
24
|
+
const ran = /* @__PURE__ */ new Map();
|
|
25
|
+
for (const node of order) {
|
|
26
|
+
if (node.kind !== "trigger") {
|
|
27
|
+
if (!(incoming.get(node.id) ?? []).some((edge) => active(edge, ran))) continue;
|
|
28
|
+
}
|
|
29
|
+
const { output, outcome } = await runNode(node, input, results, runtime);
|
|
30
|
+
results[node.id] = output;
|
|
31
|
+
ran.set(node.id, outcome);
|
|
32
|
+
}
|
|
33
|
+
return results;
|
|
34
|
+
}
|
|
35
|
+
async function runNode(node, input, results, runtime) {
|
|
36
|
+
switch (node.kind) {
|
|
37
|
+
case "trigger": return {
|
|
38
|
+
output: input,
|
|
39
|
+
outcome: true
|
|
40
|
+
};
|
|
41
|
+
case "step": return {
|
|
42
|
+
output: await runtime.step({
|
|
43
|
+
node: node.id,
|
|
44
|
+
step: node.step ?? "",
|
|
45
|
+
config: node.config ?? {},
|
|
46
|
+
input,
|
|
47
|
+
results: { ...results },
|
|
48
|
+
runKey: runtime.runKey
|
|
49
|
+
}) ?? null,
|
|
50
|
+
outcome: true
|
|
51
|
+
};
|
|
52
|
+
case "sleep":
|
|
53
|
+
await runtime.sleep(durationMs(node.config?.["duration"]) ?? 0);
|
|
54
|
+
return {
|
|
55
|
+
output: null,
|
|
56
|
+
outcome: true
|
|
57
|
+
};
|
|
58
|
+
case "approval": {
|
|
59
|
+
const payload = await runtime.approval(approvalToken(runtime.runKey, node.id), node.id);
|
|
60
|
+
return {
|
|
61
|
+
output: payload ?? null,
|
|
62
|
+
outcome: approved(payload)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
case "condition": {
|
|
66
|
+
const condition = conditionOf(node);
|
|
67
|
+
const outcome = condition !== void 0 && evaluateCondition(condition, {
|
|
68
|
+
input,
|
|
69
|
+
results
|
|
70
|
+
});
|
|
71
|
+
return {
|
|
72
|
+
output: outcome,
|
|
73
|
+
outcome
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
default: {
|
|
77
|
+
const unknown = node.kind;
|
|
78
|
+
throw new TypeError(`workflow-builder: unknown node kind ${String(unknown)}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//#endregion
|
|
83
|
+
export { executeGraph as n, approvalToken as t };
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
import { T as RawDbError } from "./result-D7y2fT87.js";
|
|
2
|
+
import { R as TableMeta } from "./types-6BdhkmZe.js";
|
|
3
|
+
import { r as Executor, v as Operation } from "./executor-DvsBbNBS.js";
|
|
4
|
+
//#region src/compile/sqlite.d.ts
|
|
5
|
+
/** A value SQLite binds: booleans become `0`/`1`, objects JSON text. */
|
|
6
|
+
type SqliteValue = string | number | bigint | null;
|
|
7
|
+
interface SqliteQuery {
|
|
8
|
+
readonly text: string;
|
|
9
|
+
readonly params: readonly SqliteValue[];
|
|
10
|
+
}
|
|
11
|
+
/** How the executor turns a returned SQLite value back into its PostgREST shape. */
|
|
12
|
+
type SqliteDecode = "boolean" | "json" | "timestamptz" | "raw";
|
|
13
|
+
interface SqliteColumn {
|
|
14
|
+
/** Key in the returned row. */
|
|
15
|
+
readonly alias: string;
|
|
16
|
+
readonly decode: SqliteDecode;
|
|
17
|
+
}
|
|
18
|
+
/** Primary key values of the rows a write touches, in key column order. */
|
|
19
|
+
type SqliteKeys = readonly (readonly SqliteValue[])[];
|
|
20
|
+
/** A read: the rows, a count, or both. */
|
|
21
|
+
interface SqliteSelectPlan {
|
|
22
|
+
readonly kind: "select";
|
|
23
|
+
readonly rows: SqliteQuery | undefined;
|
|
24
|
+
readonly count: SqliteQuery | undefined;
|
|
25
|
+
readonly columns: readonly SqliteColumn[];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* An insert as one statement per row. PowerSync tables are views with
|
|
29
|
+
* `INSTEAD OF` triggers, which take neither `RETURNING` nor `ON CONFLICT`,
|
|
30
|
+
* so the executor checks for a conflicting row itself and reads the
|
|
31
|
+
* written rows back by key.
|
|
32
|
+
*/
|
|
33
|
+
interface SqliteInsertPlan {
|
|
34
|
+
readonly kind: "insert";
|
|
35
|
+
readonly rows: readonly {
|
|
36
|
+
readonly key: readonly SqliteValue[];
|
|
37
|
+
/** The row's tenant; an upsert never updates another tenant's row. */
|
|
38
|
+
readonly tenant: SqliteValue | undefined;
|
|
39
|
+
readonly insert: SqliteQuery;
|
|
40
|
+
/** Finds a row that conflicts on the `onConflict` columns. */
|
|
41
|
+
readonly existing: SqliteQuery | undefined;
|
|
42
|
+
/** Updates the conflicting row (`onConflict.action: 'update'`), by its key. */
|
|
43
|
+
readonly update: ((key: readonly SqliteValue[]) => SqliteQuery) | undefined;
|
|
44
|
+
}[];
|
|
45
|
+
readonly conflict: "update" | "ignore" | undefined;
|
|
46
|
+
readonly returning: SqliteReturning | undefined;
|
|
47
|
+
}
|
|
48
|
+
/** An update or delete: select the keys, then write by key. */
|
|
49
|
+
interface SqliteKeyedPlan {
|
|
50
|
+
readonly kind: "update" | "delete";
|
|
51
|
+
readonly keys: SqliteQuery;
|
|
52
|
+
readonly apply: (keys: SqliteKeys) => SqliteQuery;
|
|
53
|
+
readonly returning: SqliteReturning | undefined;
|
|
54
|
+
/** More selected keys than this fails with `max_affected` before any write. */
|
|
55
|
+
readonly maxAffected?: number;
|
|
56
|
+
}
|
|
57
|
+
interface SqliteReturning {
|
|
58
|
+
readonly read: (keys: SqliteKeys) => SqliteQuery;
|
|
59
|
+
readonly columns: readonly SqliteColumn[];
|
|
60
|
+
}
|
|
61
|
+
type SqlitePlan = {
|
|
62
|
+
readonly kind: "never";
|
|
63
|
+
} | SqliteSelectPlan | SqliteInsertPlan | SqliteKeyedPlan;
|
|
64
|
+
interface SqliteCompilerOptions {
|
|
65
|
+
/**
|
|
66
|
+
* The SQLite table or view for a table. Defaults to its database name
|
|
67
|
+
* without the schema, which is how PowerSync names its views.
|
|
68
|
+
*/
|
|
69
|
+
readonly tableName?: (table: TableMeta) => string;
|
|
70
|
+
}
|
|
71
|
+
declare function quoteSqliteIdent(name: string): string;
|
|
72
|
+
/** A JavaScript value as a SQLite parameter. */
|
|
73
|
+
declare function sqliteValue(value: unknown): SqliteValue;
|
|
74
|
+
/**
|
|
75
|
+
* A LIKE pattern (backslash escapes) as a GLOB pattern, which SQLite
|
|
76
|
+
* matches case-sensitively, like Postgres `like`.
|
|
77
|
+
*/
|
|
78
|
+
declare function likeToGlob(pattern: string): string;
|
|
79
|
+
/**
|
|
80
|
+
* Compiles IR operations for SQLite (PowerSync's local database). Reads
|
|
81
|
+
* become one statement; writes become steps the executor runs in a write
|
|
82
|
+
* transaction. Throws a `DbException` with kind `unsupported` for what
|
|
83
|
+
* SQLite can't express, before anything runs.
|
|
84
|
+
*/
|
|
85
|
+
declare function compileSqlite(op: Operation, options?: SqliteCompilerOptions): SqlitePlan;
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region src/powersync/executor.d.ts
|
|
88
|
+
/** What a PowerSync database, transaction or lock context can run. */
|
|
89
|
+
interface SqliteContextLike {
|
|
90
|
+
getAll<T>(sql: string, parameters?: unknown[]): Promise<T[]>;
|
|
91
|
+
execute(sql: string, parameters?: unknown[]): Promise<unknown>;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The part of `PowerSyncDatabase` (`@powersync/react-native`,
|
|
95
|
+
* `@powersync/web`, `@powersync/node`) the executor uses. Typed by shape,
|
|
96
|
+
* so better-supabase doesn't depend on PowerSync.
|
|
97
|
+
*/
|
|
98
|
+
interface PowerSyncDatabaseLike extends SqliteContextLike {
|
|
99
|
+
writeTransaction<T>(callback: (tx: SqliteContextLike) => Promise<T>): Promise<T>;
|
|
100
|
+
/** Runs a list's rows and its count on one snapshot when present. */
|
|
101
|
+
readTransaction?<T>(callback: (tx: SqliteContextLike) => Promise<T>): Promise<T>;
|
|
102
|
+
onChange?(handler: {
|
|
103
|
+
onChange: (event: {
|
|
104
|
+
changedTables: string[];
|
|
105
|
+
}) => Promise<void> | void;
|
|
106
|
+
}, options?: {
|
|
107
|
+
tables?: string[];
|
|
108
|
+
throttleMs?: number;
|
|
109
|
+
signal?: AbortSignal;
|
|
110
|
+
}): () => void;
|
|
111
|
+
}
|
|
112
|
+
interface PowerSyncExecutorOptions extends SqliteCompilerOptions {
|
|
113
|
+
/**
|
|
114
|
+
* A primary key for an insert that leaves it out. PowerSync tables key on
|
|
115
|
+
* a text `id` that the client creates. Defaults to
|
|
116
|
+
* `crypto.randomUUID()`, else SQLite's `uuid()` (PowerSync registers it).
|
|
117
|
+
*/
|
|
118
|
+
readonly newId?: (table: TableMeta) => string | Promise<string>;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* A SQLite constraint error in the shape `mapDbError` reads from Postgres:
|
|
122
|
+
* its SQLSTATE, and the columns in Postgres's `Key (...)` detail format.
|
|
123
|
+
*/
|
|
124
|
+
declare function fromSqliteError(cause: unknown): RawDbError | undefined;
|
|
125
|
+
/**
|
|
126
|
+
* Timestamp text as PostgREST sends it (`2026-01-02T10:00:00.5+00:00`), from
|
|
127
|
+
* whatever the sync wrote (`2026-01-02 10:00:00.500000Z`).
|
|
128
|
+
*/
|
|
129
|
+
declare function postgrestTimestamp(value: string): string;
|
|
130
|
+
/**
|
|
131
|
+
* Runs repository operations on PowerSync's local SQLite database, so the
|
|
132
|
+
* same repositories and list definitions work offline on native. Reads
|
|
133
|
+
* return rows in the PostgREST shape (booleans, parsed JSON, ISO
|
|
134
|
+
* timestamps); writes go through PowerSync's upload queue. What SQLite
|
|
135
|
+
* can't express (includes, full-text search, function sources) returns a
|
|
136
|
+
* `DbError` of kind `unsupported` without running anything.
|
|
137
|
+
* `maxAffected` is checked against the selected keys before any write; a
|
|
138
|
+
* call's `timeout` and `signal` are checked before the statements start,
|
|
139
|
+
* and `retry` does nothing here. A `bigint` beyond `Number.MAX_SAFE_INTEGER`
|
|
140
|
+
* comes back as its decimal string instead of a rounded number.
|
|
141
|
+
*
|
|
142
|
+
* ```ts
|
|
143
|
+
* const db = betterSupabase.connect(powersyncExecutor(powersync));
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
declare function powersyncExecutor(db: PowerSyncDatabaseLike, options?: PowerSyncExecutorOptions): Executor;
|
|
147
|
+
//#endregion
|
|
148
|
+
export { SqliteValue as _, postgrestTimestamp as a, quoteSqliteIdent as b, SqliteCompilerOptions as c, SqliteKeyedPlan as d, SqliteKeys as f, SqliteSelectPlan as g, SqliteReturning as h, fromSqliteError as i, SqliteDecode as l, SqliteQuery as m, PowerSyncExecutorOptions as n, powersyncExecutor as o, SqlitePlan as p, SqliteContextLike as r, SqliteColumn as s, PowerSyncDatabaseLike as t, SqliteInsertPlan as u, compileSqlite as v, sqliteValue as x, likeToGlob as y };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { T as WorkflowGraph } from "./types-BI-0Sl2v.js";
|
|
2
|
+
//#region src/blocks/workflow-builder/executor.d.ts
|
|
3
|
+
/** What a step node passes to the engine's step: plain data, so it serializes. */
|
|
4
|
+
interface GraphStepCall {
|
|
5
|
+
/** The node id, which `workflow_node_runs` keys on. */
|
|
6
|
+
readonly node: string;
|
|
7
|
+
/** The library step's name. */
|
|
8
|
+
readonly step: string;
|
|
9
|
+
readonly config: Readonly<Record<string, unknown>>;
|
|
10
|
+
/** The trigger's input. */
|
|
11
|
+
readonly input: unknown;
|
|
12
|
+
/** The outputs of the nodes that ran before it, by node id. */
|
|
13
|
+
readonly results: Readonly<Record<string, unknown>>;
|
|
14
|
+
/** The run's key; approval hooks use `<runKey>:<node>` as their token. */
|
|
15
|
+
readonly runKey: string;
|
|
16
|
+
}
|
|
17
|
+
/** What the engine does for each kind of node. */
|
|
18
|
+
interface GraphRuntime {
|
|
19
|
+
readonly runKey: string;
|
|
20
|
+
step(call: GraphStepCall): PromiseLike<unknown>;
|
|
21
|
+
sleep(ms: number): PromiseLike<unknown>;
|
|
22
|
+
/** Waits for the approval hook with `token` and returns its payload. */
|
|
23
|
+
approval(token: string, node: string): PromiseLike<unknown>;
|
|
24
|
+
}
|
|
25
|
+
/** The hook token of an approval node. */
|
|
26
|
+
declare const approvalToken: (runKey: string, node: string) => string;
|
|
27
|
+
/**
|
|
28
|
+
* Runs `graph` in dependency order: a node runs when the trigger reaches it
|
|
29
|
+
* through edges whose sources ran (and, from a condition or an approval,
|
|
30
|
+
* took the edge's branch). Returns each node's output by id. It only calls
|
|
31
|
+
* `runtime`, so it is deterministic and runs inside a `"use workflow"`
|
|
32
|
+
* function as the static executor.
|
|
33
|
+
*/
|
|
34
|
+
declare function executeGraph(graph: WorkflowGraph, input: unknown, runtime: GraphRuntime): Promise<Record<string, unknown>>;
|
|
35
|
+
//#endregion
|
|
36
|
+
export { executeGraph as i, GraphStepCall as n, approvalToken as r, GraphRuntime as t };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { T as RawDbError } from "./result-D7y2fT87.js";
|
|
2
|
+
import { r as Executor } from "./executor-DvsBbNBS.js";
|
|
2
3
|
//#region src/postgres/executor.d.ts
|
|
3
4
|
/**
|
|
4
5
|
* Anything that runs parameterized SQL: `ctx.postgres` from
|
|
@@ -18,6 +19,11 @@ declare function fromPgError(error: unknown): RawDbError | undefined;
|
|
|
18
19
|
* Executes repository operations as SQL on a direct Postgres connection.
|
|
19
20
|
* Rows have the same shape as over PostgREST. RLS applies when the client
|
|
20
21
|
* runs as the caller (`ctx.postgres`, `createPostgres().asUser()`).
|
|
22
|
+
*
|
|
23
|
+
* `maxAffected` fails the statement itself, so its writes roll back.
|
|
24
|
+
* A call's `timeout` is checked before the statement starts; set
|
|
25
|
+
* `statement_timeout` on the connection to bound a running statement.
|
|
26
|
+
* `retry` does nothing here.
|
|
21
27
|
*/
|
|
22
28
|
declare function postgresExecutor(client: SqlClient): Executor;
|
|
23
29
|
//#endregion
|
|
@@ -1,5 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as isPlainObject } from "./clone-BfgmLU90.js";
|
|
2
|
+
import { c as mapDbError, n as dbError, t as MAX_AFFECTED_MARKER, u as withMaxAffected } from "./errors-B11Duf73.js";
|
|
3
|
+
import { n as invalidRequest } from "./build-BXIzE6Xv.js";
|
|
2
4
|
import { t as lookupOf } from "./lookup-BaP5bI27.js";
|
|
5
|
+
import { a as ok, r as err, s as toDbError } from "./result-DzUbqgdW.js";
|
|
6
|
+
import { n as simplifyOrFalse } from "./simplify-DDO0j0LI.js";
|
|
3
7
|
//#region src/compile/sql.ts
|
|
4
8
|
const MAX_PARAMS = 65535;
|
|
5
9
|
const MAX_PAIRS = 50;
|
|
@@ -28,7 +32,7 @@ function rowComparison(condition) {
|
|
|
28
32
|
const terms = index === 0 ? [item] : item.kind === "and" ? item.items : [];
|
|
29
33
|
if (terms.length !== index + 1) return null;
|
|
30
34
|
const step = terms[index];
|
|
31
|
-
if (step.kind !== "column" || step.op !== "gt" && step.op !== "lt") return null;
|
|
35
|
+
if (step.kind !== "column" || step.path || step.op !== "gt" && step.op !== "lt") return null;
|
|
32
36
|
for (const [at, term] of terms.slice(0, index).entries()) {
|
|
33
37
|
const prev = steps[at];
|
|
34
38
|
if (term.kind !== "column" || term.op !== "eq" || term.column !== prev.column || !Object.is(term.value, prev.value)) return null;
|
|
@@ -86,7 +90,7 @@ var SqlCompiler = class {
|
|
|
86
90
|
}
|
|
87
91
|
}
|
|
88
92
|
columnCondition(condition, table, alias) {
|
|
89
|
-
const column = this.column(alias, condition.column);
|
|
93
|
+
const column = condition.path ? `(${this.column(alias, condition.column)} #>> ${this.param(condition.path, "text[]")})` : this.column(alias, condition.column);
|
|
90
94
|
const { value } = condition;
|
|
91
95
|
switch (condition.op) {
|
|
92
96
|
case "eq": return `${column} = ${this.param(value)}`;
|
|
@@ -97,6 +101,8 @@ var SqlCompiler = class {
|
|
|
97
101
|
case "lte": return `${column} <= ${this.param(value)}`;
|
|
98
102
|
case "like": return `${column} like ${this.param(value)}`;
|
|
99
103
|
case "ilike": return `${column} ilike ${this.param(value)}`;
|
|
104
|
+
case "match": return `${column} ~ ${this.param(value)}`;
|
|
105
|
+
case "imatch": return `${column} ~* ${this.param(value)}`;
|
|
100
106
|
case "in":
|
|
101
107
|
if (!Array.isArray(value)) invalidRequest("\"in\" needs an array");
|
|
102
108
|
return `${column} = any(${this.param(value)})`;
|
|
@@ -109,7 +115,7 @@ var SqlCompiler = class {
|
|
|
109
115
|
case "containedBy":
|
|
110
116
|
case "overlaps": {
|
|
111
117
|
const operator = condition.op === "contains" ? "@>" : condition.op === "containedBy" ? "<@" : "&&";
|
|
112
|
-
return Array.isArray(value) ? `${column} ${operator} ${this.param(value)}` : `${column} ${operator} ${this.param(JSON.stringify(value), "jsonb")}`;
|
|
118
|
+
return Array.isArray(value) && !condition.json ? `${column} ${operator} ${this.param(value)}` : `${column} ${operator} ${this.param(JSON.stringify(value), "jsonb")}`;
|
|
113
119
|
}
|
|
114
120
|
case "fts": {
|
|
115
121
|
const config = condition.config ? `${this.param(condition.config, "regconfig")}, ` : "";
|
|
@@ -127,12 +133,26 @@ var SqlCompiler = class {
|
|
|
127
133
|
return `${this.column(targetAlias, dbColumn(target, reference))} = ${this.column(sourceAlias, dbColumn(source, column))}`;
|
|
128
134
|
}).join(" and ");
|
|
129
135
|
}
|
|
130
|
-
orderBy(terms, alias) {
|
|
136
|
+
orderBy(terms, alias, table) {
|
|
131
137
|
return terms.map((term) => {
|
|
132
138
|
const nulls = term.nulls ? ` nulls ${term.nulls}` : "";
|
|
133
|
-
return `${this.
|
|
139
|
+
return `${this.sortKey(term, alias, table)} ${term.direction}${nulls}`;
|
|
134
140
|
}).join(", ");
|
|
135
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* A column, an aggregate of the group, or the column of a to-one
|
|
144
|
+
* relation's row as a scalar subquery.
|
|
145
|
+
*/
|
|
146
|
+
sortKey(term, alias, table) {
|
|
147
|
+
if (term.aggregate === "count") return "count(*)";
|
|
148
|
+
if (term.aggregate) return `${term.aggregate}(${this.column(alias, term.column)})`;
|
|
149
|
+
const { relation } = term;
|
|
150
|
+
if (!relation) return this.column(alias, term.column);
|
|
151
|
+
if (!table) invalidRequest("A relation sort needs the root table");
|
|
152
|
+
const target = this.alias();
|
|
153
|
+
const join = this.join(relation.relation, table, alias, relation.target, target);
|
|
154
|
+
return `(select ${this.column(target, term.column)} from ${tableRef(relation.target)} as ${target} where ${join} limit 1)`;
|
|
155
|
+
}
|
|
136
156
|
/** `json_build_object('alias', t0."col", ...)` for a selection. */
|
|
137
157
|
rowExpression(selection, table, alias) {
|
|
138
158
|
const pairs = selection.columns.map((entry) => `'${entry.alias.replaceAll("'", "''")}', ${this.column(alias, entry.column)}${entry.cast ? `::${entry.cast}` : ""}`);
|
|
@@ -221,7 +241,7 @@ function compileSql(op) {
|
|
|
221
241
|
} : void 0;
|
|
222
242
|
return {
|
|
223
243
|
rows: {
|
|
224
|
-
text: `select ${compiler.rowExpression(op.selection, op.table, alias)} as row from ${from}${filter}${op.selection.aggregate && op.selection.columns.length > 0 ? ` group by ${op.selection.columns.map((entry) => compiler.column(alias, entry.column)).join(", ")}` : ""}${op.orderBy.length > 0 ? ` order by ${compiler.orderBy(op.orderBy, alias)}` : ""}${op.limit === void 0 ? "" : ` limit ${integer(op.limit)}`}${op.offset === void 0 ? "" : ` offset ${integer(op.offset)}`}`,
|
|
244
|
+
text: `select ${compiler.rowExpression(op.selection, op.table, alias)} as row from ${from}${filter}${op.selection.aggregate && op.selection.columns.length > 0 ? ` group by ${op.selection.columns.map((entry) => compiler.column(alias, entry.column)).join(", ")}` : ""}${op.orderBy.length > 0 ? ` order by ${compiler.orderBy(op.orderBy, alias, op.table)}` : ""}${op.limit === void 0 ? "" : ` limit ${integer(op.limit)}`}${op.offset === void 0 ? "" : ` offset ${integer(op.offset)}`}`,
|
|
225
245
|
params: compiler.params
|
|
226
246
|
},
|
|
227
247
|
count: countQuery,
|
|
@@ -259,7 +279,7 @@ function compileSql(op) {
|
|
|
259
279
|
};
|
|
260
280
|
const entries = Object.entries(op.set);
|
|
261
281
|
if (entries.length === 0) invalidRequest(`Update on "${op.table.key}" sets no columns`);
|
|
262
|
-
return mutation(`update ${from} set ${entries.map(([column, value]) => `${quoteIdent(column)} = ${compiler.param(value)}`).join(", ")}${whereClause([simple.condition ? compiler.condition(simple.condition, op.table, alias) : void 0])}${returningRows(compiler, op, alias)}`, op.returning !== void 0, compiler.params);
|
|
282
|
+
return mutation(`update ${from} set ${entries.map(([column, value]) => `${quoteIdent(column)} = ${compiler.param(value)}`).join(", ")}${whereClause([simple.condition ? compiler.condition(simple.condition, op.table, alias) : void 0])}${returningRows(compiler, op, alias)}`, op.returning !== void 0, compiler.params, maxAffectedOf(op));
|
|
263
283
|
}
|
|
264
284
|
case "delete": {
|
|
265
285
|
const simple = simplifyOrFalse(op.where);
|
|
@@ -268,7 +288,7 @@ function compileSql(op) {
|
|
|
268
288
|
count: void 0,
|
|
269
289
|
never: true
|
|
270
290
|
};
|
|
271
|
-
return mutation(`delete from ${from}${whereClause([simple.condition ? compiler.condition(simple.condition, op.table, alias) : void 0])}${returningRows(compiler, op, alias)}`, op.returning !== void 0, compiler.params);
|
|
291
|
+
return mutation(`delete from ${from}${whereClause([simple.condition ? compiler.condition(simple.condition, op.table, alias) : void 0])}${returningRows(compiler, op, alias)}`, op.returning !== void 0, compiler.params, maxAffectedOf(op));
|
|
272
292
|
}
|
|
273
293
|
default: return op;
|
|
274
294
|
}
|
|
@@ -302,7 +322,40 @@ function tenantGuard(op, alias) {
|
|
|
302
322
|
if (column === void 0) return "";
|
|
303
323
|
return ` where ${alias}.${quoteIdent(column)} = excluded.${quoteIdent(column)}`;
|
|
304
324
|
}
|
|
305
|
-
function
|
|
325
|
+
function maxAffectedOf(op) {
|
|
326
|
+
if (op.maxAffected === void 0) return void 0;
|
|
327
|
+
if (!Number.isInteger(op.maxAffected) || op.maxAffected < 0) invalidRequest(`"maxAffected" must be a non-negative integer, got ${op.maxAffected}`, op.table.key);
|
|
328
|
+
return op.maxAffected;
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* The statement's row count, or a cast error naming it when it is above
|
|
332
|
+
* `max`. The cast depends on `count(*)`, so the planner can't fold it into
|
|
333
|
+
* an error for every call; the failed statement rolls its writes back. A
|
|
334
|
+
* query returning rows must use the count (`where c.n >= 0`), or Postgres
|
|
335
|
+
* drops the unused column and never runs the check.
|
|
336
|
+
*/
|
|
337
|
+
function guardedCount(max) {
|
|
338
|
+
return `case when count(*) > ${max} then ('${MAX_AFFECTED_MARKER}:' || count(*))::int else count(*)::int end`;
|
|
339
|
+
}
|
|
340
|
+
function mutation(statement, returning, params, maxAffected) {
|
|
341
|
+
if (maxAffected !== void 0) {
|
|
342
|
+
const guard = guardedCount(maxAffected);
|
|
343
|
+
return returning ? {
|
|
344
|
+
rows: {
|
|
345
|
+
text: `with m as (${statement}), c as (select ${guard} as n from m) select m.row from m cross join c where c.n >= 0`,
|
|
346
|
+
params
|
|
347
|
+
},
|
|
348
|
+
count: void 0,
|
|
349
|
+
never: false
|
|
350
|
+
} : {
|
|
351
|
+
rows: void 0,
|
|
352
|
+
count: {
|
|
353
|
+
text: `with m as (${statement}) select ${guard} as count from m`,
|
|
354
|
+
params
|
|
355
|
+
},
|
|
356
|
+
never: false
|
|
357
|
+
};
|
|
358
|
+
}
|
|
306
359
|
if (returning) return {
|
|
307
360
|
rows: {
|
|
308
361
|
text: statement,
|
|
@@ -321,4 +374,150 @@ function mutation(statement, returning, params) {
|
|
|
321
374
|
};
|
|
322
375
|
}
|
|
323
376
|
//#endregion
|
|
324
|
-
|
|
377
|
+
//#region src/postgres/executor.ts
|
|
378
|
+
function isPgError(value) {
|
|
379
|
+
return typeof value === "object" && value !== null && typeof value.code === "string";
|
|
380
|
+
}
|
|
381
|
+
/** node-postgres error fields to the shape `mapDbError` reads. */
|
|
382
|
+
function fromPgError(error) {
|
|
383
|
+
if (!isPgError(error)) return void 0;
|
|
384
|
+
const raw = {};
|
|
385
|
+
if (error.code !== void 0) raw.code = error.code;
|
|
386
|
+
if (error.message !== void 0) raw.message = error.message;
|
|
387
|
+
if (error.detail !== void 0) raw.details = error.detail;
|
|
388
|
+
if (error.hint !== void 0) raw.hint = error.hint;
|
|
389
|
+
if (error.constraint !== void 0) raw.constraint = error.constraint;
|
|
390
|
+
if (error.column !== void 0) raw.column = error.column;
|
|
391
|
+
if (error.table !== void 0) raw.table = error.table;
|
|
392
|
+
return raw;
|
|
393
|
+
}
|
|
394
|
+
async function run(client, plan, op) {
|
|
395
|
+
const rows = plan.rows ? (await client.queryRaw(plan.rows.text, [...plan.rows.params])).map((entry) => entry.row) : [];
|
|
396
|
+
let count = null;
|
|
397
|
+
if (plan.count) {
|
|
398
|
+
const [first] = await client.queryRaw(plan.count.text, [...plan.count.params]);
|
|
399
|
+
count = first?.count ?? 0;
|
|
400
|
+
} else if (op.kind !== "select") count = rows.length;
|
|
401
|
+
for (const next of plan.chunks ?? []) {
|
|
402
|
+
const more = await run(client, next, op);
|
|
403
|
+
rows.push(...more.rows);
|
|
404
|
+
count = (count ?? 0) + (more.count ?? 0);
|
|
405
|
+
}
|
|
406
|
+
return {
|
|
407
|
+
rows,
|
|
408
|
+
count
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
/**
|
|
412
|
+
* Executes repository operations as SQL on a direct Postgres connection.
|
|
413
|
+
* Rows have the same shape as over PostgREST. RLS applies when the client
|
|
414
|
+
* runs as the caller (`ctx.postgres`, `createPostgres().asUser()`).
|
|
415
|
+
*
|
|
416
|
+
* `maxAffected` fails the statement itself, so its writes roll back.
|
|
417
|
+
* A call's `timeout` is checked before the statement starts; set
|
|
418
|
+
* `statement_timeout` on the connection to bound a running statement.
|
|
419
|
+
* `retry` does nothing here.
|
|
420
|
+
*/
|
|
421
|
+
function postgresExecutor(client) {
|
|
422
|
+
return {
|
|
423
|
+
name: "postgres",
|
|
424
|
+
functionSources: true,
|
|
425
|
+
execute: (op, context) => executeOn(client, op, context),
|
|
426
|
+
rpc: (name, args, context) => callFunction(client, name, args, context),
|
|
427
|
+
async batch(ops, context) {
|
|
428
|
+
if (!client.transaction) return Promise.all(ops.map((op) => executeOn(client, op, context)));
|
|
429
|
+
try {
|
|
430
|
+
return await client.transaction(async (scoped) => {
|
|
431
|
+
const results = [];
|
|
432
|
+
for (const op of ops) {
|
|
433
|
+
const result = await executeOn(scoped, op, context);
|
|
434
|
+
if (!result.ok) throw new BatchFailed();
|
|
435
|
+
results.push(result);
|
|
436
|
+
}
|
|
437
|
+
return results;
|
|
438
|
+
});
|
|
439
|
+
} catch (cause) {
|
|
440
|
+
if (!(cause instanceof BatchFailed)) throw cause;
|
|
441
|
+
return Promise.all(ops.map((op) => executeOn(client, op, context)));
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
var BatchFailed = class extends Error {};
|
|
447
|
+
async function executeOn(client, op, context) {
|
|
448
|
+
let plan;
|
|
449
|
+
try {
|
|
450
|
+
plan = compileSql(op);
|
|
451
|
+
} catch (cause) {
|
|
452
|
+
return err(toDbError(cause));
|
|
453
|
+
}
|
|
454
|
+
if (plan.never) return ok({
|
|
455
|
+
rows: [],
|
|
456
|
+
count: 0
|
|
457
|
+
});
|
|
458
|
+
if (context.signal?.aborted) return err(dbError("aborted", "The request was aborted"));
|
|
459
|
+
let result;
|
|
460
|
+
try {
|
|
461
|
+
result = plan.chunks && client.transaction ? await client.transaction((scoped) => run(scoped, plan, op)) : await run(client, plan, op);
|
|
462
|
+
} catch (cause) {
|
|
463
|
+
const raw = fromPgError(cause);
|
|
464
|
+
const error = raw ? mapDbError(raw, context.errorMappers) : toDbError(cause);
|
|
465
|
+
return err(withMaxAffected(error, op.kind === "update" || op.kind === "delete" ? op.maxAffected : void 0));
|
|
466
|
+
}
|
|
467
|
+
if (op.kind === "select" && op.single) {
|
|
468
|
+
if (result.rows.length > 1) return err(dbError("multiple_rows", `Expected one ${op.table.key} row`));
|
|
469
|
+
if (result.rows.length === 0 && op.single === "one") return err(dbError("not_found", `No ${op.table.key} row matched`));
|
|
470
|
+
}
|
|
471
|
+
return ok(result);
|
|
472
|
+
}
|
|
473
|
+
const JSON_TYPES = /* @__PURE__ */ new Set(["json", "jsonb"]);
|
|
474
|
+
async function signatureOf(client, name, context) {
|
|
475
|
+
const fn = context.function;
|
|
476
|
+
if (fn) return {
|
|
477
|
+
returnsSet: fn.returnsSet,
|
|
478
|
+
returnsVoid: fn.returns === "void",
|
|
479
|
+
json: new Set(fn.args.filter((arg) => JSON_TYPES.has(arg.type)).map((arg) => arg.name))
|
|
480
|
+
};
|
|
481
|
+
const [found] = await client.queryRaw("select p.proretset as returns_set, p.prorettype = 'pg_catalog.void'::pg_catalog.regtype as returns_void from pg_catalog.pg_proc p join pg_catalog.pg_namespace n on n.oid = p.pronamespace where n.nspname = $1 and p.proname = $2 limit 1", [context.schema, name]);
|
|
482
|
+
return found ? {
|
|
483
|
+
returnsSet: found.returns_set,
|
|
484
|
+
returnsVoid: found.returns_void,
|
|
485
|
+
json: /* @__PURE__ */ new Set()
|
|
486
|
+
} : void 0;
|
|
487
|
+
}
|
|
488
|
+
function argValue(value, json) {
|
|
489
|
+
if (value === null) return null;
|
|
490
|
+
if (json) return JSON.stringify(value);
|
|
491
|
+
if (typeof value === "bigint") return value.toString();
|
|
492
|
+
if (Array.isArray(value)) return value.map((item) => argValue(item, false));
|
|
493
|
+
if (isPlainObject(value)) return JSON.stringify(value);
|
|
494
|
+
if (typeof value === "object" && !(value instanceof Date) && !(value instanceof Uint8Array)) return String(value);
|
|
495
|
+
return value;
|
|
496
|
+
}
|
|
497
|
+
async function callFunction(client, name, args, context) {
|
|
498
|
+
if (context.signal?.aborted) return err(dbError("aborted", "The request was aborted"));
|
|
499
|
+
try {
|
|
500
|
+
const signature = await signatureOf(client, name, context);
|
|
501
|
+
if (!signature) return err(mapDbError({
|
|
502
|
+
code: "PGRST202",
|
|
503
|
+
message: `Could not find the function ${context.schema}.${name} in the database`
|
|
504
|
+
}, context.errorMappers));
|
|
505
|
+
const params = [];
|
|
506
|
+
const named = Object.entries(args).filter(([, value]) => value !== void 0).map(([key, value]) => {
|
|
507
|
+
params.push(argValue(value, signature.json.has(key)));
|
|
508
|
+
return `${quoteIdent(key)} => $${String(params.length)}`;
|
|
509
|
+
});
|
|
510
|
+
const call = `${quoteIdent(context.schema)}.${quoteIdent(name)}(${named.join(", ")})`;
|
|
511
|
+
if (signature.returnsVoid) {
|
|
512
|
+
await client.queryRaw(`select ${call}`, params);
|
|
513
|
+
return ok(null);
|
|
514
|
+
}
|
|
515
|
+
const values = (await client.queryRaw(`select to_json(bs_call) as value from ${call} as bs_call`, params)).map((row) => row.value);
|
|
516
|
+
return ok(signature.returnsSet ? values : values[0] ?? null);
|
|
517
|
+
} catch (cause) {
|
|
518
|
+
const raw = fromPgError(cause);
|
|
519
|
+
return err(raw ? mapDbError(raw, context.errorMappers) : toDbError(cause));
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
//#endregion
|
|
523
|
+
export { quoteIdent as i, postgresExecutor as n, compileSql as r, fromPgError as t };
|