better-supabase 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/{adapter-CEjmtazZ.js → adapter-rmWaLNe3.js} +3 -3
- package/dist/{agents-BCNhIxVZ.d.ts → agents-ByYUSZxT.d.ts} +4 -4
- package/dist/{ai-cache-Dps7aRu1.d.ts → ai-cache-CkxtAt4P.d.ts} +4 -4
- package/dist/{ai-cache-zeUL94pB.js → ai-cache-DPiuJ-zJ.js} +2 -2
- package/dist/{ai-chat-3GBSlFR4.d.ts → ai-chat-al8b3spK.d.ts} +4 -4
- package/dist/{ai-files-D2_9YLjF.js → ai-files-BXtV3ygd.js} +5 -5
- package/dist/ai-sdk/agents/index.d.ts +6 -6
- package/dist/ai-sdk/agents/index.js +1 -1
- package/dist/ai-sdk/batches/index.d.ts +3 -3
- package/dist/ai-sdk/batches/index.js +2 -2
- package/dist/ai-sdk/cache/index.d.ts +1 -1
- package/dist/ai-sdk/cache/index.js +1 -1
- package/dist/ai-sdk/chat/index.d.ts +1 -1
- package/dist/ai-sdk/chat/index.js +1 -1
- package/dist/ai-sdk/embeddings/index.d.ts +2 -2
- package/dist/ai-sdk/files/index.d.ts +1 -1
- package/dist/ai-sdk/files/index.js +3 -3
- package/dist/ai-sdk/index.d.ts +5 -5
- package/dist/ai-sdk/mcp/index.d.ts +3 -3
- package/dist/ai-sdk/mcp/index.js +2 -2
- package/dist/ai-sdk/memory/index.d.ts +3 -3
- package/dist/ai-sdk/workflow/index.d.ts +3 -3
- package/dist/ai-sdk/workflow/index.js +1 -1
- package/dist/{ai-tasks-Ih5oHfyj.d.ts → ai-tasks-Di0gmJOX.d.ts} +5 -5
- package/dist/{announcements-BHCzraR6.js → announcements-HF7LuFw5.js} +4 -4
- package/dist/{api-TG3jE5aO.d.ts → api-XJcQON_7.d.ts} +6 -6
- package/dist/{api-keys-BEQatEUW.js → api-keys-C1IZF7p8.js} +4 -4
- package/dist/{api-keys-BYoGCM9p.d.ts → api-keys-EdSNjGIZ.d.ts} +4 -4
- package/dist/{app-tables-BGl5_U2x.js → app-tables-BRjMcWhW.js} +248 -13
- package/dist/app-tables-DVidEHOI.d.ts +35 -0
- package/dist/{approvals-a2KmioBh.d.ts → approvals-DqlPHBHI.d.ts} +4 -4
- package/dist/arazzo/index.d.ts +2 -2
- package/dist/{assistant-Bf2cA6RO.d.ts → assistant-BZyhQ8bd.d.ts} +2 -2
- package/dist/astro/index.d.ts +7 -7
- package/dist/astro/index.js +5 -5
- package/dist/asyncapi/index.d.ts +1 -1
- package/dist/{attachments-DAj2Yp95.js → attachments-C8FEBBKE.js} +5 -5
- package/dist/{audit-log-BMMuGPdP.js → audit-log-CRgiHlRh.js} +6 -6
- package/dist/{auth-reply-DUCwb8YO.js → auth-reply-B_dW4jHJ.js} +1 -1
- package/dist/{authorization-DpRfs6Wx.d.ts → authorization-CdJRoZgV.d.ts} +24 -1
- package/dist/{authorization-hooks-DkmrnDX7.d.ts → authorization-hooks-Do5djkpz.d.ts} +2 -2
- package/dist/{authorizer-DH7DjkL3.js → authorizer-dVVN05Un.js} +1 -1
- package/dist/better-result/index.d.ts +4 -4
- package/dist/better-result/index.js +1 -1
- package/dist/{bind-a7sUgvf4.d.ts → bind-DkaP_0iS.d.ts} +4 -4
- package/dist/{block-fields-ffD6Gxe4.js → block-fields-BANwJ9Y_.js} +2 -2
- package/dist/{block-helpers-C86hPEjI.d.ts → block-helpers-7pMBVsE6.d.ts} +1 -1
- package/dist/{block-helpers-CfG_MvDR.js → block-helpers-BfVCR5Fc.js} +1 -1
- package/dist/{block-hooks-BsXncUlZ.js → block-hooks-ByKlh8Qy.js} +2 -2
- package/dist/{block-hooks-BLPWD3Jt.d.ts → block-hooks-C_WaodoA.d.ts} +2 -2
- package/dist/{block-transport-DaGGXjIw.d.ts → block-transport-NbUJygA7.d.ts} +2 -2
- package/dist/blocks/access-requests/index.d.ts +5 -5
- package/dist/blocks/access-requests/index.js +5 -5
- package/dist/blocks/agents/index.d.ts +4 -4
- package/dist/blocks/agents/index.js +5 -5
- package/dist/blocks/ai-cache/index.d.ts +3 -3
- package/dist/blocks/ai-cache/index.js +2 -2
- package/dist/blocks/ai-chat/index.d.ts +5 -5
- package/dist/blocks/ai-chat/index.js +3 -3
- package/dist/blocks/ai-chat/react/index.d.ts +2 -2
- package/dist/blocks/ai-chat/react/index.js +1 -1
- package/dist/blocks/ai-chat/solid/index.d.ts +2 -2
- package/dist/blocks/ai-chat/solid/index.js +1 -1
- package/dist/blocks/ai-chat/svelte/index.d.ts +2 -2
- package/dist/blocks/ai-chat/svelte/index.js +1 -1
- package/dist/blocks/ai-chat/vue/index.d.ts +2 -2
- package/dist/blocks/ai-chat/vue/index.js +1 -1
- package/dist/blocks/ai-files/index.d.ts +3 -3
- package/dist/blocks/ai-files/index.js +2 -2
- package/dist/blocks/ai-providers/index.d.ts +4 -4
- package/dist/blocks/ai-providers/index.js +5 -5
- package/dist/blocks/ai-tasks/index.d.ts +3 -3
- package/dist/blocks/ai-tasks/index.js +6 -6
- package/dist/blocks/announcements/index.d.ts +4 -4
- package/dist/blocks/announcements/index.js +2 -2
- package/dist/blocks/announcements/react/index.d.ts +1 -1
- package/dist/blocks/announcements/react/index.js +1 -1
- package/dist/blocks/announcements/solid/index.d.ts +2 -2
- package/dist/blocks/announcements/svelte/index.d.ts +2 -2
- package/dist/blocks/announcements/vue/index.d.ts +2 -2
- package/dist/blocks/api-keys/index.d.ts +6 -6
- package/dist/blocks/api-keys/index.js +3 -3
- package/dist/blocks/api-keys/react/index.d.ts +1 -1
- package/dist/blocks/api-keys/react/index.js +2 -2
- package/dist/blocks/api-keys/react/server.d.ts +1 -1
- package/dist/blocks/api-keys/solid/index.d.ts +2 -2
- package/dist/blocks/api-keys/solid/index.js +1 -1
- package/dist/blocks/api-keys/svelte/index.d.ts +2 -2
- package/dist/blocks/api-keys/svelte/index.js +1 -1
- package/dist/blocks/api-keys/vue/index.d.ts +2 -2
- package/dist/blocks/api-keys/vue/index.js +1 -1
- package/dist/blocks/approvals/index.d.ts +4 -4
- package/dist/blocks/approvals/index.js +5 -5
- package/dist/blocks/attachments/index.d.ts +4 -4
- package/dist/blocks/attachments/index.js +2 -2
- package/dist/blocks/audit/index.d.ts +5 -5
- package/dist/blocks/audit/index.js +4 -4
- package/dist/blocks/audit/react/index.d.ts +1 -1
- package/dist/blocks/audit/react/index.js +1 -1
- package/dist/blocks/audit/react/server.d.ts +1 -1
- package/dist/blocks/audit/solid/index.d.ts +2 -2
- package/dist/blocks/audit/svelte/index.d.ts +2 -2
- package/dist/blocks/audit/vue/index.d.ts +2 -2
- package/dist/blocks/billing/index.d.ts +9 -9
- package/dist/blocks/billing/index.js +7 -7
- package/dist/blocks/billing/react/index.d.ts +1 -1
- package/dist/blocks/billing/react/index.js +1 -1
- package/dist/blocks/billing/react/server.d.ts +1 -1
- package/dist/blocks/billing/solid/index.d.ts +2 -2
- package/dist/blocks/billing/solid/index.js +1 -1
- package/dist/blocks/billing/svelte/index.d.ts +2 -2
- package/dist/blocks/billing/svelte/index.js +1 -1
- package/dist/blocks/billing/vue/index.d.ts +2 -2
- package/dist/blocks/billing/vue/index.js +1 -1
- package/dist/blocks/bookings/index.d.ts +3 -3
- package/dist/blocks/bookings/index.js +2 -2
- package/dist/blocks/bookings/react/index.d.ts +1 -1
- package/dist/blocks/bookings/react/index.js +1 -1
- package/dist/blocks/bookings/solid/index.d.ts +2 -2
- package/dist/blocks/bookings/svelte/index.d.ts +2 -2
- package/dist/blocks/bookings/vue/index.d.ts +2 -2
- package/dist/blocks/bulk/index.d.ts +9 -5
- package/dist/blocks/bulk/index.js +4 -4
- package/dist/blocks/calendar/index.d.ts +3 -3
- package/dist/blocks/calendar/index.js +2 -2
- package/dist/blocks/calendar/react/index.d.ts +1 -1
- package/dist/blocks/calendar/react/index.js +1 -1
- package/dist/blocks/calendar/solid/index.d.ts +2 -2
- package/dist/blocks/calendar/svelte/index.d.ts +2 -2
- package/dist/blocks/calendar/vue/index.d.ts +2 -2
- package/dist/blocks/catalog/index.d.ts +7 -7
- package/dist/blocks/catalog/index.js +7 -7
- package/dist/blocks/collections/index.d.ts +6 -6
- package/dist/blocks/collections/index.js +6 -6
- package/dist/blocks/comments/index.d.ts +4 -4
- package/dist/blocks/comments/index.js +3 -3
- package/dist/blocks/comments/react/index.d.ts +1 -1
- package/dist/blocks/comments/react/index.js +2 -2
- package/dist/blocks/comments/react/server.d.ts +1 -1
- package/dist/blocks/comments/solid/index.d.ts +2 -2
- package/dist/blocks/comments/solid/index.js +1 -1
- package/dist/blocks/comments/svelte/index.d.ts +2 -2
- package/dist/blocks/comments/svelte/index.js +1 -1
- package/dist/blocks/comments/vue/index.d.ts +2 -2
- package/dist/blocks/comments/vue/index.js +1 -1
- package/dist/blocks/connectors/index.d.ts +4 -4
- package/dist/blocks/connectors/index.js +6 -6
- package/dist/blocks/custom-fields/index.d.ts +4 -4
- package/dist/blocks/custom-fields/index.js +5 -5
- package/dist/blocks/data-lifecycle/index.d.ts +8 -8
- package/dist/blocks/data-lifecycle/index.js +5 -5
- package/dist/blocks/deals/index.d.ts +7 -7
- package/dist/blocks/deals/index.js +8 -8
- package/dist/blocks/documents/index.d.ts +4 -4
- package/dist/blocks/documents/index.js +3 -3
- package/dist/blocks/domains/index.d.ts +6 -6
- package/dist/blocks/domains/index.js +5 -5
- package/dist/blocks/drive/index.d.ts +7 -7
- package/dist/blocks/drive/index.js +6 -6
- package/dist/blocks/employees/index.d.ts +7 -7
- package/dist/blocks/employees/index.js +7 -7
- package/dist/blocks/engagements/index.d.ts +6 -6
- package/dist/blocks/engagements/index.js +5 -5
- package/dist/blocks/entitlements/index.d.ts +6 -6
- package/dist/blocks/entitlements/index.js +1 -1
- package/dist/blocks/entitlements/react/index.d.ts +2 -2
- package/dist/blocks/entitlements/solid/index.d.ts +2 -2
- package/dist/blocks/entitlements/svelte/index.d.ts +2 -2
- package/dist/blocks/entitlements/vue/index.d.ts +2 -2
- package/dist/blocks/flags/index.d.ts +5 -5
- package/dist/blocks/flags/index.js +6 -6
- package/dist/blocks/forms/index.d.ts +6 -6
- package/dist/blocks/forms/index.js +5 -5
- package/dist/blocks/forms/react/index.d.ts +1 -1
- package/dist/blocks/forms/solid/index.d.ts +2 -2
- package/dist/blocks/forms/svelte/index.d.ts +2 -2
- package/dist/blocks/forms/vue/index.d.ts +2 -2
- package/dist/blocks/hiring/index.d.ts +6 -6
- package/dist/blocks/hiring/index.js +6 -6
- package/dist/blocks/identities/index.d.ts +5 -5
- package/dist/blocks/identities/index.js +3 -3
- package/dist/blocks/imports/index.d.ts +74 -6
- package/dist/blocks/imports/index.js +111 -7
- package/dist/blocks/inbox/index.d.ts +5 -5
- package/dist/blocks/inbox/index.js +3 -3
- package/dist/blocks/inbox/react/index.d.ts +2 -2
- package/dist/blocks/inbox/react/server.d.ts +2 -2
- package/dist/blocks/inbox/solid/index.d.ts +2 -2
- package/dist/blocks/inbox/svelte/index.d.ts +2 -2
- package/dist/blocks/inbox/vue/index.d.ts +2 -2
- package/dist/blocks/index.d.ts +26 -7
- package/dist/blocks/index.js +4 -4
- package/dist/blocks/inventory/index.d.ts +6 -6
- package/dist/blocks/inventory/index.js +5 -5
- package/dist/blocks/invoices/index.d.ts +6 -6
- package/dist/blocks/invoices/index.js +8 -8
- package/dist/blocks/jobs/index.d.ts +6 -6
- package/dist/blocks/jobs/index.js +8 -8
- package/dist/blocks/knowledge/index.d.ts +3 -3
- package/dist/blocks/knowledge/index.js +2 -2
- package/dist/blocks/leave/index.d.ts +5 -5
- package/dist/blocks/leave/index.js +4 -4
- package/dist/blocks/memory/index.d.ts +4 -4
- package/dist/blocks/memory/index.js +5 -5
- package/dist/blocks/metrics/index.d.ts +6 -6
- package/dist/blocks/metrics/index.js +5 -5
- package/dist/blocks/mfa/index.d.ts +2 -2
- package/dist/blocks/mfa/index.js +1 -1
- package/dist/blocks/mfa/react/index.d.ts +1 -1
- package/dist/blocks/mfa/react/index.js +1 -1
- package/dist/blocks/mfa/react/server.d.ts +1 -1
- package/dist/blocks/mfa/react/server.js +1 -1
- package/dist/blocks/mfa/solid/index.d.ts +2 -2
- package/dist/blocks/mfa/solid/index.js +1 -1
- package/dist/blocks/mfa/svelte/index.d.ts +2 -2
- package/dist/blocks/mfa/svelte/index.js +1 -1
- package/dist/blocks/mfa/vue/index.d.ts +2 -2
- package/dist/blocks/mfa/vue/index.js +1 -1
- package/dist/blocks/notifications/index.d.ts +9 -9
- package/dist/blocks/notifications/index.js +9 -9
- package/dist/blocks/notifications/react/index.d.ts +1 -1
- package/dist/blocks/notifications/react/server.d.ts +1 -1
- package/dist/blocks/notifications/solid/index.d.ts +2 -2
- package/dist/blocks/notifications/svelte/index.d.ts +2 -2
- package/dist/blocks/notifications/vue/index.d.ts +2 -2
- package/dist/blocks/number-sequences/index.d.ts +10 -4
- package/dist/blocks/number-sequences/index.js +22 -11
- package/dist/blocks/oauth-server/index.d.ts +5 -5
- package/dist/blocks/oauth-server/index.js +3 -3
- package/dist/blocks/onboarding/index.d.ts +3 -3
- package/dist/blocks/onboarding/index.js +2 -2
- package/dist/blocks/onboarding/react/index.d.ts +1 -1
- package/dist/blocks/onboarding/react/index.js +1 -1
- package/dist/blocks/onboarding/react/server.d.ts +1 -1
- package/dist/blocks/onboarding/solid/index.d.ts +2 -2
- package/dist/blocks/onboarding/svelte/index.d.ts +2 -2
- package/dist/blocks/onboarding/vue/index.d.ts +2 -2
- package/dist/blocks/orders/index.d.ts +6 -6
- package/dist/blocks/orders/index.js +9 -9
- package/dist/blocks/organizations/index.d.ts +5 -5
- package/dist/blocks/organizations/index.js +4 -4
- package/dist/blocks/organizations/react/index.d.ts +1 -1
- package/dist/blocks/organizations/react/index.js +2 -2
- package/dist/blocks/organizations/react/server.d.ts +1 -1
- package/dist/blocks/organizations/solid/index.d.ts +2 -2
- package/dist/blocks/organizations/solid/index.js +1 -1
- package/dist/blocks/organizations/svelte/index.d.ts +2 -2
- package/dist/blocks/organizations/svelte/index.js +1 -1
- package/dist/blocks/organizations/vue/index.d.ts +2 -2
- package/dist/blocks/organizations/vue/index.js +1 -1
- package/dist/blocks/outbox/index.d.ts +4 -4
- package/dist/blocks/outbox/index.js +5 -5
- package/dist/blocks/parties/index.d.ts +7 -7
- package/dist/blocks/parties/index.js +4 -4
- package/dist/blocks/pipelines/index.d.ts +6 -6
- package/dist/blocks/pipelines/index.js +7 -7
- package/dist/blocks/profiles/index.d.ts +4 -4
- package/dist/blocks/profiles/index.js +5 -5
- package/dist/blocks/promotions/index.d.ts +5 -5
- package/dist/blocks/promotions/index.js +6 -6
- package/dist/blocks/push/index.d.ts +6 -6
- package/dist/blocks/push/index.js +4 -4
- package/dist/blocks/quotes/index.d.ts +6 -6
- package/dist/blocks/quotes/index.js +8 -8
- package/dist/blocks/rank/index.d.ts +4 -4
- package/dist/blocks/rank/index.js +4 -4
- package/dist/blocks/reactions/index.d.ts +4 -4
- package/dist/blocks/reactions/index.js +2 -2
- package/dist/blocks/reactions/react/index.d.ts +1 -1
- package/dist/blocks/reactions/react/index.js +1 -1
- package/dist/blocks/reactions/solid/index.d.ts +2 -2
- package/dist/blocks/reactions/solid/index.js +1 -1
- package/dist/blocks/reactions/svelte/index.d.ts +2 -2
- package/dist/blocks/reactions/svelte/index.js +1 -1
- package/dist/blocks/reactions/vue/index.d.ts +2 -2
- package/dist/blocks/reactions/vue/index.js +1 -1
- package/dist/blocks/relations/index.d.ts +5 -5
- package/dist/blocks/relations/index.js +5 -5
- package/dist/blocks/reminders/index.d.ts +7 -7
- package/dist/blocks/reminders/index.js +6 -6
- package/dist/blocks/reviews/index.d.ts +5 -5
- package/dist/blocks/reviews/index.js +5 -5
- package/dist/blocks/rules/index.d.ts +75 -9
- package/dist/blocks/rules/index.js +115 -6
- package/dist/blocks/rules/react/index.d.ts +2 -2
- package/dist/blocks/rules/react/index.js +2 -2
- package/dist/blocks/rules/solid/index.d.ts +2 -2
- package/dist/blocks/rules/solid/index.js +1 -1
- package/dist/blocks/rules/svelte/index.d.ts +2 -2
- package/dist/blocks/rules/svelte/index.js +1 -1
- package/dist/blocks/rules/vue/index.d.ts +2 -2
- package/dist/blocks/rules/vue/index.js +1 -1
- package/dist/blocks/saved-views/index.d.ts +3 -3
- package/dist/blocks/saved-views/index.js +2 -2
- package/dist/blocks/saved-views/react/index.d.ts +1 -1
- package/dist/blocks/saved-views/react/index.js +1 -1
- package/dist/blocks/saved-views/react/server.d.ts +1 -1
- package/dist/blocks/saved-views/solid/index.d.ts +2 -2
- package/dist/blocks/saved-views/solid/index.js +1 -1
- package/dist/blocks/saved-views/svelte/index.d.ts +2 -2
- package/dist/blocks/saved-views/svelte/index.js +1 -1
- package/dist/blocks/saved-views/vue/index.d.ts +2 -2
- package/dist/blocks/saved-views/vue/index.js +1 -1
- package/dist/blocks/search/index.d.ts +4 -4
- package/dist/blocks/search/index.js +3 -3
- package/dist/blocks/search/react/index.d.ts +1 -1
- package/dist/blocks/search/react/index.js +1 -1
- package/dist/blocks/search/react/server.d.ts +1 -1
- package/dist/blocks/search/solid/index.d.ts +2 -2
- package/dist/blocks/search/svelte/index.d.ts +2 -2
- package/dist/blocks/search/vue/index.d.ts +2 -2
- package/dist/blocks/service-principals/index.d.ts +5 -5
- package/dist/blocks/service-principals/index.js +5 -5
- package/dist/blocks/sessions/index.d.ts +2 -2
- package/dist/blocks/sessions/index.js +2 -2
- package/dist/blocks/sessions/react/index.d.ts +1 -1
- package/dist/blocks/sessions/react/index.js +1 -1
- package/dist/blocks/sessions/react/server.d.ts +1 -1
- package/dist/blocks/sessions/solid/index.d.ts +2 -2
- package/dist/blocks/sessions/solid/index.js +1 -1
- package/dist/blocks/sessions/svelte/index.d.ts +2 -2
- package/dist/blocks/sessions/svelte/index.js +1 -1
- package/dist/blocks/sessions/vue/index.d.ts +2 -2
- package/dist/blocks/sessions/vue/index.js +1 -1
- package/dist/blocks/settings/index.d.ts +4 -4
- package/dist/blocks/settings/index.js +3 -3
- package/dist/blocks/settings/react/index.d.ts +1 -1
- package/dist/blocks/settings/react/index.js +2 -2
- package/dist/blocks/settings/react/server.d.ts +1 -1
- package/dist/blocks/settings/solid/index.d.ts +2 -2
- package/dist/blocks/settings/solid/index.js +1 -1
- package/dist/blocks/settings/svelte/index.d.ts +2 -2
- package/dist/blocks/settings/svelte/index.js +1 -1
- package/dist/blocks/settings/vue/index.d.ts +2 -2
- package/dist/blocks/settings/vue/index.js +1 -1
- package/dist/blocks/share-links/index.d.ts +12 -5
- package/dist/blocks/share-links/index.js +9 -6
- package/dist/blocks/shared-signals/index.d.ts +7 -7
- package/dist/blocks/shared-signals/index.js +4 -4
- package/dist/blocks/signing-keys/index.d.ts +4 -4
- package/dist/blocks/signing-keys/index.js +4 -4
- package/dist/blocks/sla/index.d.ts +6 -6
- package/dist/blocks/sla/index.js +5 -5
- package/dist/blocks/sso/index.d.ts +6 -6
- package/dist/blocks/sso/index.js +4 -4
- package/dist/blocks/state-machine/index.d.ts +4 -4
- package/dist/blocks/state-machine/index.js +3 -3
- package/dist/blocks/tags/index.d.ts +3 -3
- package/dist/blocks/tags/index.js +3 -3
- package/dist/blocks/tags/react/index.d.ts +1 -1
- package/dist/blocks/tags/react/index.js +2 -2
- package/dist/blocks/tags/react/server.d.ts +1 -1
- package/dist/blocks/tags/solid/index.d.ts +2 -2
- package/dist/blocks/tags/solid/index.js +1 -1
- package/dist/blocks/tags/svelte/index.d.ts +2 -2
- package/dist/blocks/tags/svelte/index.js +1 -1
- package/dist/blocks/tags/vue/index.d.ts +2 -2
- package/dist/blocks/tags/vue/index.js +1 -1
- package/dist/blocks/targets/index.d.ts +4 -4
- package/dist/blocks/targets/index.js +5 -5
- package/dist/blocks/teams/index.d.ts +4 -4
- package/dist/blocks/teams/index.js +4 -4
- package/dist/blocks/templates/index.d.ts +7 -7
- package/dist/blocks/templates/index.js +6 -6
- package/dist/blocks/time-tracking/index.d.ts +6 -6
- package/dist/blocks/time-tracking/index.js +7 -7
- package/dist/blocks/trash/index.d.ts +5 -5
- package/dist/blocks/trash/index.js +4 -4
- package/dist/blocks/undo/index.d.ts +4 -4
- package/dist/blocks/undo/index.js +1 -1
- package/dist/blocks/undo/react/index.d.ts +1 -1
- package/dist/blocks/undo/react/server.d.ts +1 -1
- package/dist/blocks/undo/solid/index.d.ts +2 -2
- package/dist/blocks/undo/svelte/index.d.ts +2 -2
- package/dist/blocks/undo/vue/index.d.ts +2 -2
- package/dist/blocks/usage/index.d.ts +4 -4
- package/dist/blocks/usage/index.js +2 -2
- package/dist/blocks/usage/react/index.d.ts +1 -1
- package/dist/blocks/usage/react/index.js +1 -1
- package/dist/blocks/usage/react/server.d.ts +1 -1
- package/dist/blocks/usage/solid/index.d.ts +2 -2
- package/dist/blocks/usage/svelte/index.d.ts +2 -2
- package/dist/blocks/usage/vue/index.d.ts +2 -2
- package/dist/blocks/versions/index.d.ts +10 -6
- package/dist/blocks/versions/index.js +18 -13
- package/dist/blocks/waitlist/index.d.ts +5 -5
- package/dist/blocks/waitlist/index.js +5 -5
- package/dist/blocks/webhooks/index.d.ts +13 -13
- package/dist/blocks/webhooks/index.js +10 -10
- package/dist/blocks/work-items/index.d.ts +7 -7
- package/dist/blocks/work-items/index.js +5 -5
- package/dist/blocks/workflow-builder/index.d.ts +7 -7
- package/dist/blocks/workflow-builder/index.js +2 -2
- package/dist/blocks/workflow-builder/react/index.d.ts +2 -2
- package/dist/blocks/workflow-builder/react/index.js +2 -2
- package/dist/blocks/workflow-builder/solid/index.d.ts +2 -2
- package/dist/blocks/workflow-builder/svelte/index.d.ts +2 -2
- package/dist/blocks/workflow-builder/vue/index.d.ts +2 -2
- package/dist/blocks/workflows/index.d.ts +5 -5
- package/dist/blocks/workflows/index.js +1 -1
- package/dist/blocks/workflows/react/index.d.ts +2 -2
- package/dist/blocks/workflows/react/index.js +1 -1
- package/dist/blocks/workflows/solid/index.d.ts +2 -2
- package/dist/blocks/workflows/svelte/index.d.ts +2 -2
- package/dist/blocks/workflows/vue/index.d.ts +2 -2
- package/dist/{bookings-0XnhHNLM.js → bookings-EJAVAuVz.js} +4 -4
- package/dist/{build-Cx08LOT7.js → build-6jmaPAgx.js} +1 -1
- package/dist/{calendar-DcFrpSOy.js → calendar-1J1E5dLq.js} +4 -4
- package/dist/chat-sdk/index.d.ts +4 -4
- package/dist/chat-sdk/index.js +2 -2
- package/dist/chat-sdk/react/index.d.ts +2 -2
- package/dist/chat-sdk/react/server.d.ts +2 -2
- package/dist/cli/{add-Bd5M6uEZ.js → add-BhI_nXAo.js} +2 -2
- package/dist/cli/{add-B0zoJUYX.js → add-CUS0AiBh.js} +6 -6
- package/dist/cli/add-ojbcMxyp.js +1 -0
- package/dist/cli/adopt-D0ASVx2G.js +1 -0
- package/dist/cli/{adopt-CebmlHL-.js → adopt-DwcU6CJd.js} +27 -8
- package/dist/cli/{agent-CCt_aXpJ.js → agent-CCrTYK3W.js} +1 -1
- package/dist/cli/{apply-Dxk8AUNU.js → apply-DBXC0Z5I.js} +40 -10
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{blocks-Dq25D80b.js → blocks-B15ltTFn.js} +1 -1
- package/dist/cli/{blocks-Bzz326nn.js → blocks-BXeqIzWN.js} +1 -1
- package/dist/cli/{cache-Cx6qlRDR.js → cache-CPBYJAkb.js} +2 -2
- package/dist/cli/{codemod-woL4cVe0.js → codemod-CrI33UR2.js} +2 -2
- package/dist/cli/{command-CK9Cn8HV.js → command-D_HI1mp1.js} +17 -0
- package/dist/cli/{completion-CWoDmFZr.js → completion-DzYo025z.js} +2 -2
- package/dist/cli/{completion-J3dqnNoW.js → completion-En43UcyJ.js} +2 -2
- package/dist/cli/{completion-BO5UK6bG.js → completion-Vry-Wjw8.js} +1 -1
- package/dist/cli/{config-CLHpTk9Y.js → config-Bi_UBxXl.js} +40 -10
- package/dist/cli/{config-C1d-mbUA.js → config-DsqQr5z3.js} +1 -1
- package/dist/cli/{config-MuKY9kUj.js → config-DyJgo2d9.js} +1 -1
- package/dist/cli/{doctor-SGw36h1D.js → doctor-wACp5w6N.js} +44 -342
- package/dist/cli/{emit-ZAYeh4Yn.js → emit-j0zZ6NE_.js} +21 -2
- package/dist/cli/{env-CVXvJoLP.js → env-2v9JrxSr.js} +3 -3
- package/dist/cli/{env-DMw_MBe5.js → env-Cf5OTqbK.js} +92 -1
- package/dist/cli/{env-DJ4ZaJpe.js → env-Ch99nTQw.js} +1 -1
- package/dist/cli/env-DkBe35Rv.js +1 -0
- package/dist/cli/{gen-B344S1Oy.js → gen-BhquLu7l.js} +11 -11
- package/dist/cli/index.d.ts +6 -4
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-B1dL-RZL.js → init-BwLTO6XG.js} +15 -8
- package/dist/cli/{introspect-BPcFi8ow.js → introspect-B-gXAIqs.js} +3 -3
- package/dist/cli/{keys-jsxCNJdz.js → keys-hwtdwdkT.js} +1 -1
- package/dist/cli/live-BFfYoE0_.js +329 -0
- package/dist/cli/mcp-Bdm2oGmL.js +237 -0
- package/dist/cli/{metadata-CxBZo4KM.js → metadata-DikbSOE0.js} +2 -2
- package/dist/cli/migration-safety-LaGVPPuD.js +206 -0
- package/dist/cli/{module-migration-YFFdWC5X.js → module-migration-CLkZ8jpw.js} +1 -1
- package/dist/cli/{moved-D9OT_Uyy.js → moved-B7UFO_OM.js} +1 -1
- package/dist/cli/{parse-DE59XyWt.js → parse-CwV5a6dA.js} +1 -1
- package/dist/cli/{preset-DmcC4nWE.js → preset-DQ1DxMtI.js} +1 -1
- package/dist/cli/{run-CM_2g6KQ.js → run-BLJj7SuM.js} +43 -42
- package/dist/cli/{run-DaHfUUO9.js → run-DliGNdjI.js} +38 -70
- package/dist/cli/{scaffold-CFdDq36-.js → scaffold-6bv24GSP.js} +4 -4
- package/dist/cli/{scaffold-Dsjr7sOT.js → scaffold-DUz5fa-k.js} +1 -1
- package/dist/cli/{seed-DldDdXWO.js → seed-CIJaL1Ao.js} +4 -4
- package/dist/cli/seed-ClGWseBT.js +1 -0
- package/dist/cli/shared-CNcvDOLt.js +145 -0
- package/dist/cli/{skills-v34NDb2D.js → skills-CaxIQhzW.js} +1 -1
- package/dist/cli/{snapshot-DAxLi4hO.js → snapshot-Dvcx0BSl.js} +3 -3
- package/dist/cli/{source-args-0I9zylYy.js → source-args-BNhagtpw.js} +1 -1
- package/dist/cli/{spec-CaaSOYZS.js → spec-BewE6r6J.js} +5 -5
- package/dist/cli/{spec-De0cfceR.js → spec-DRDaIq8f.js} +1 -1
- package/dist/cli/{sql-DDLWwzh9.js → sql-BBkchli4.js} +5 -5
- package/dist/cli/{sql-0I1EQ3JG.js → sql-BCQt5TDs.js} +2 -2
- package/dist/cli/{stack-status-CRanl-CN.js → stack-status-LeEoCtV1.js} +1 -1
- package/dist/cli/{sync-DFx-6t5n.js → sync-CJ-ft-tl.js} +2 -2
- package/dist/cli/{topics-GJuIDwlY.js → topics-BBE1-Vrg.js} +1 -1
- package/dist/cli/{version-DNRW4DAP.js → version-D1wM9DNb.js} +1 -1
- package/dist/cli/{write-BS6F3Yvz.js → write-Dp1XlAVM.js} +24 -6
- package/dist/client/index.d.ts +5 -5
- package/dist/client/index.js +2 -2
- package/dist/client/native/index.d.ts +5 -5
- package/dist/client/native/index.js +2 -2
- package/dist/{client-BYaOGCOG.js → client-13Ii0c0P.js} +1 -1
- package/dist/{client-BxnLb9bz.d.ts → client-9zIKhf5D.d.ts} +2 -2
- package/dist/{client-PGRk3DGz.js → client-AxwF58Eo.js} +1 -1
- package/dist/{client-iDLLvGR4.d.ts → client-B0rvMvA8.d.ts} +3 -3
- package/dist/{client-ysNShuJZ.d.ts → client-B5nnqDmz.d.ts} +2 -2
- package/dist/{client-VvY0K3wr.d.ts → client-B7LCXnnY.d.ts} +5 -5
- package/dist/{client-D5CZ2a34.d.ts → client-B9H4BZJh.d.ts} +11 -11
- package/dist/{client-e-hFkLUf.d.ts → client-BLKpcAs0.d.ts} +2 -2
- package/dist/{client-DAHsEOVV.d.ts → client-BO9fQgBB.d.ts} +3 -3
- package/dist/{client-LLmgiCwJ.d.ts → client-B_r4denm.d.ts} +1 -1
- package/dist/{client-Tc47rlSe.d.ts → client-BaynD5V-.d.ts} +45 -7
- package/dist/{client-Co6BPmvr.d.ts → client-BtBkVSk2.d.ts} +3 -3
- package/dist/{client-xkSCp9hN.d.ts → client-ByGlM0YF.d.ts} +3 -3
- package/dist/{client-BAcILZOf.d.ts → client-C3dLIsJv.d.ts} +6 -6
- package/dist/{client-CFdMJ1h9.d.ts → client-C597NIlL.d.ts} +4 -4
- package/dist/{client-CoVGPi0c.js → client-CFeWXNXy.js} +2 -2
- package/dist/{client-Cmensu7l.d.ts → client-Cgxj38RS.d.ts} +6 -6
- package/dist/{client-WAdEBBrH.d.ts → client-CjyTNdt1.d.ts} +4 -4
- package/dist/{client-Cdedx_lw.js → client-CmHsfDHU.js} +5 -5
- package/dist/{client-Lx3mlvKO.d.ts → client-CpMv4-v5.d.ts} +4 -4
- package/dist/{client-DjTRlN3a.d.ts → client-CsRpAyIv.d.ts} +1 -1
- package/dist/{client-BUGIS__1.js → client-D0502FgY.js} +6 -6
- package/dist/{client-CiGjS6us.js → client-D727oIVC.js} +3 -3
- package/dist/{client-CHmjaI0j.d.ts → client-D9zBl9PT.d.ts} +6 -6
- package/dist/{client-WHeWTNVL.d.ts → client-DR_YEGnc.d.ts} +1 -1
- package/dist/{client-DIrCmOXz.d.ts → client-DZXFDaQE.d.ts} +3 -3
- package/dist/{client-hyP_nS5R.d.ts → client-Diu2lPbg.d.ts} +4 -4
- package/dist/{client-BVZtq_rQ.d.ts → client-Dk8gY9hi.d.ts} +2 -2
- package/dist/{client-B7QVIrJS.d.ts → client-Fi8CoJcs.d.ts} +10 -10
- package/dist/{client-DdfSIZ3M.d.ts → client-LVa6yC9u.d.ts} +4 -4
- package/dist/{client-ClZ0D-if.d.ts → client-WXJwUhr1.d.ts} +4 -4
- package/dist/{client-BOT2KVIp.js → client-fpvgtQKE.js} +1 -1
- package/dist/{client-C9QrWrnt.js → client-iB5axfa0.js} +2 -2
- package/dist/{client-01MAuqzW.js → client-jvtwGFy4.js} +1 -1
- package/dist/{client-CilSKXNu.js → client-kI6vCKVI.js} +1 -1
- package/dist/{client-CzI4QpG3.d.ts → client-kKdkLGPB.d.ts} +1 -1
- package/dist/{client-i8glKhxh.js → client-rp7YfOg1.js} +1 -1
- package/dist/{cloud-event-5rCEzIgK.d.ts → cloud-event-bwsBwVNG.d.ts} +1 -1
- package/dist/{codecs-YAekuQ08.js → codecs-C7E_OoiC.js} +3 -3
- package/dist/{codegen-DeoSt1mi.d.ts → codegen-2m4SKVdi.d.ts} +97 -14
- package/dist/{comments-D7sbd0xG.js → comments-N7Bi-oTW.js} +4 -4
- package/dist/commerce/index.js +3 -3
- package/dist/{compiler-BVxepAY0.d.ts → compiler-C6E3WwIi.d.ts} +2 -2
- package/dist/{compose-Djntdacs.js → compose-CO_cljl3.js} +1 -1
- package/dist/{composite-M6zPs1Xm.js → composite-CPV0thLs.js} +2 -2
- package/dist/{composite-djtGy6bz.d.ts → composite-DMMA_Whg.d.ts} +6 -6
- package/dist/config/index.d.ts +6 -6
- package/dist/config/index.js +4 -4
- package/dist/{config-C4MozTD7.js → config-C4RQDF6t.js} +4 -0
- package/dist/{config-BA1K4OPk.js → config-CkyahUjo.js} +4 -3
- package/dist/{connectors-CjD-R2ks.d.ts → connectors-CZdfZcIg.d.ts} +4 -4
- package/dist/{context-1sSWcd7_.d.ts → context-CCfX2szU.d.ts} +15 -3
- package/dist/{controller-D845qKh2.d.ts → controller-CCb9tHw_.d.ts} +1 -1
- package/dist/create/index.d.ts +597 -0
- package/dist/create/index.js +2049 -0
- package/dist/create/lite/index.d.ts +85 -0
- package/dist/create/lite/index.js +126 -0
- package/dist/create/supabase/index.d.ts +68 -0
- package/dist/create/supabase/index.js +312 -0
- package/dist/credentials/index.d.ts +4 -4
- package/dist/credentials/index.js +4 -4
- package/dist/{cron-route-CoL-By8Z.js → cron-route-BsgbJ-g4.js} +1 -1
- package/dist/{define-B2ln373W.js → define-CMcokcZz.js} +5 -5
- package/dist/{define-DxHHbNEb.d.ts → define-DXTC706J.d.ts} +6 -6
- package/dist/{define-block-CLZMEFeK.d.ts → define-block-BlHQxDIQ.d.ts} +6 -6
- package/dist/{documents-CWn2mtYf.d.ts → documents-BYM2viS0.d.ts} +3 -3
- package/dist/edge/index.d.ts +9 -9
- package/dist/edge/index.js +9 -9
- package/dist/elysia/index.d.ts +1 -1
- package/dist/elysia/index.js +1 -1
- package/dist/{embeddings-C2S14foD.d.ts → embeddings-Da0w4A_0.d.ts} +1 -1
- package/dist/{ended-nIdGCHxk.d.ts → ended-EcTtzzQJ.d.ts} +2 -2
- package/dist/{entitlements-BvU5dLpW.js → entitlements-AmYp2KHX.js} +3 -3
- package/dist/{entitlements-CbzCKalR.d.ts → entitlements-Bn7BTnbg.d.ts} +2 -2
- package/dist/env/index.d.ts +1 -1
- package/dist/env/index.js +6 -1
- package/dist/{envelope-CHYk5MXU.js → envelope--7d0Q3Se.js} +1 -1
- package/dist/{errors-PIpcoe4z.js → errors-7MqM7bbV.js} +1 -1
- package/dist/eve/index.d.ts +5 -5
- package/dist/{eve-DUF70Vgi.d.ts → eve-BcEr_hPo.d.ts} +2 -2
- package/dist/events/index.d.ts +3 -3
- package/dist/{events-CTreRrgP.d.ts → events-CtAHxPal.d.ts} +2 -2
- package/dist/{executor-DoE-5iM8.d.ts → executor-BicyP8Nl.d.ts} +1 -1
- package/dist/{executor-BINiCFNp.d.ts → executor-CHRwEYqt.d.ts} +1 -1
- package/dist/{executor-DKrZr3AC.d.ts → executor-CIxyatuB.d.ts} +2 -2
- package/dist/{executor-BXSHYyW2.js → executor-Cex-1PFp.js} +3 -3
- package/dist/{executor-BBHgjUJu.d.ts → executor-DzJQVTE2.d.ts} +1 -1
- package/dist/{executor-D1kYY5BA.js → executor-aKUo_Xyb.js} +2 -2
- package/dist/expo/index.d.ts +4 -4
- package/dist/expo/index.js +3 -3
- package/dist/expo-sqlite/index.d.ts +3 -3
- package/dist/expo-sqlite/index.js +2 -2
- package/dist/{field-errors-CWXN_h_E.d.ts → field-errors-nFnYWvB0.d.ts} +6 -6
- package/dist/{filter-evaluate-CjcFq0RT.d.ts → filter-evaluate-CEm52E5s.d.ts} +1 -1
- package/dist/{filter-query-BKmRYrTE.d.ts → filter-query-D3wOD1P_.d.ts} +1 -1
- package/dist/{flags-XAOsdNAc.js → flags-CtSrkVuW.js} +1 -1
- package/dist/{flags-D_D1jAHB.d.ts → flags-Dz5PIzFU.d.ts} +2 -2
- package/dist/flags-sdk/index.d.ts +1 -1
- package/dist/flags-sdk/index.js +2 -2
- package/dist/{options-BqO9GYig.js → form-definition-GVZTILhS.js} +13 -13
- package/dist/{framework-DG5Bv39u.d.ts → framework-C2oL4OaO.d.ts} +6 -6
- package/dist/{framework-INbjMZX1.js → framework-Cfm0IspZ.js} +1 -1
- package/dist/{gateway-Cup00l0w.d.ts → gateway-CJL6ZG17.d.ts} +3 -3
- package/dist/h3/index.d.ts +1 -1
- package/dist/h3/index.js +1 -1
- package/dist/h3/v1/index.d.ts +1 -1
- package/dist/h3/v1/index.js +1 -1
- package/dist/hono/index.d.ts +9 -9
- package/dist/hono/index.js +6 -6
- package/dist/{inbox-3ql4phyr.d.ts → inbox-BaUJgHOF.d.ts} +3 -3
- package/dist/index-8xwnaWHY.d.ts +344 -0
- package/dist/{index-BkzNUPId.d.ts → index-BurdFUXr.d.ts} +6 -6
- package/dist/{index-DygICr8c.d.ts → index-Cckxs8IE.d.ts} +2 -2
- package/dist/{index-CrZitvSC.d.ts → index-Ck4oK5vV.d.ts} +7 -7
- package/dist/{index-Ej8XQ9w9.d.ts → index-Co0YsJTk.d.ts} +2 -2
- package/dist/{index-CETRk4YO.d.ts → index-CxmVzT-3.d.ts} +5 -1
- package/dist/{index-Bvw9r94Q.d.ts → index-D1kMyNc7.d.ts} +1 -1
- package/dist/{index-BlqrGvb3.d.ts → index-DL8z_oDo.d.ts} +4 -4
- package/dist/{index-DfVXx4Ia.d.ts → index-DMONTkSf.d.ts} +2 -2
- package/dist/{index-jhqhynmh.d.ts → index-DTQbC3CW.d.ts} +1 -1
- package/dist/{index-BIi8i6BO.d.ts → index-DcijDfh1.d.ts} +3 -3
- package/dist/index-MCXVzkXs.d.ts +722 -0
- package/dist/{index-Brhm22eL.d.ts → index-gXy3R1Uq.d.ts} +1 -1
- package/dist/index.d.ts +8 -8
- package/dist/index.js +6 -6
- package/dist/{kit-D5S7KNFe.d.ts → kit-BlcEFQql.d.ts} +3 -3
- package/dist/{kit-MUK34-ZG.js → kit-gqwkVhGU.js} +3 -3
- package/dist/{knowledge-BXQ2-V0a.d.ts → knowledge-BYtgA52P.d.ts} +5 -5
- package/dist/{knowledge-CJ_Mm3ic.js → knowledge-CSNKLX-s.js} +3 -3
- package/dist/list/index.d.ts +3 -3
- package/dist/{list-query-PvP3pPGQ.d.ts → list-query-DWJIiVz_.d.ts} +4 -4
- package/dist/management-D1gG89z2.d.ts +53 -0
- package/dist/mcp/index.d.ts +41 -16
- package/dist/mcp/index.js +139 -56
- package/dist/mcp/sdk/index.d.ts +6 -6
- package/dist/mcp/sdk/index.js +2 -2
- package/dist/{options-BQ07tTYr.js → methods-7u6vSgz_.js} +4 -4
- package/dist/{money-codec-C_-K5ZUU.js → money-codec-DCGgzO26.js} +1 -1
- package/dist/nestjs/index.d.ts +2 -2
- package/dist/nestjs/index.js +1 -1
- package/dist/next/index.d.ts +16 -16
- package/dist/next/index.js +10 -10
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +1 -1
- package/dist/{onboarding-BZvLLPaY.js → onboarding-viTTNWUp.js} +2 -2
- package/dist/openapi/index.d.ts +2 -2
- package/dist/{operations-C9-UcReN.d.ts → operations-BtuQRwTJ.d.ts} +1 -1
- package/dist/{organizations-Cw7om8uk.js → organizations-Bxrm32IG.js} +4 -4
- package/dist/orpc/index.d.ts +6 -6
- package/dist/orpc/index.js +3 -3
- package/dist/otel/index.d.ts +2 -2
- package/dist/otel/index.js +5 -5
- package/dist/{outbox-BTeqjbum.d.ts → outbox-BCGHl9X6.d.ts} +4 -4
- package/dist/{plugin-CDLJRFFg.d.ts → plugin-D5OIaP93.d.ts} +2 -2
- package/dist/plugins/actor/index.d.ts +1 -1
- package/dist/plugins/rules/index.d.ts +2 -2
- package/dist/plugins/soft-delete/index.d.ts +2 -2
- package/dist/plugins/soft-delete/index.js +1 -1
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/timestamps/index.d.ts +1 -1
- package/dist/plugins/validation/index.d.ts +1 -1
- package/dist/plugins/validation/index.js +1 -1
- package/dist/{pool-CwOCsX9e.d.ts → pool-BBi4mot3.d.ts} +7 -4
- package/dist/{pool-errors-GMjlCN0d.js → pool-errors-C94tPR_G.js} +1 -1
- package/dist/{ports-Ca63W4cW.d.ts → ports-B53rB7zg.d.ts} +7 -7
- package/dist/{ports-DGK3KTDH.js → ports-Bcdppx0G.js} +2 -2
- package/dist/{ports-DAdQyjZz.d.ts → ports-Dcnuo3HT.d.ts} +1 -1
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +11 -5
- package/dist/{postgrest-Cw9Bs5gm.d.ts → postgrest-D6fEMsp4.d.ts} +1 -1
- package/dist/powersync/index.d.ts +3 -3
- package/dist/powersync/index.js +3 -3
- package/dist/powersync/react/index.d.ts +1 -1
- package/dist/powersync/react/index.js +1 -1
- package/dist/preset/index.d.ts +4 -352
- package/dist/preset/index.js +4 -564
- package/dist/preset-BBrL6_Ln.js +648 -0
- package/dist/{provider-9gBq9W6k.d.ts → provider-CQ1SrhLa.d.ts} +1 -1
- package/dist/{push-token-asrmi7-6.d.ts → push-token-CDMgWT13.d.ts} +1 -1
- package/dist/query/index.d.ts +1 -1
- package/dist/{rank-result-DS8IoLup.js → rank-result-oUF1DYBm.js} +1 -1
- package/dist/{rate-limit--QSiFA6D.js → rate-limit-ByfWNX9N.js} +5 -5
- package/dist/react/index.d.ts +7 -7
- package/dist/react/index.js +1 -1
- package/dist/react/native/index.d.ts +1 -1
- package/dist/react/server.d.ts +8 -8
- package/dist/react/server.js +1 -1
- package/dist/react/session.d.ts +2 -2
- package/dist/{react-CKXUkwPx.js → react-BcKACxsj.js} +1 -1
- package/dist/react-router/index.d.ts +6 -6
- package/dist/react-router/index.js +5 -5
- package/dist/{read-set-GEb-i0On.js → read-set-PWiJfv6S.js} +1 -1
- package/dist/realtime/index.d.ts +7 -7
- package/dist/realtime/index.js +2 -2
- package/dist/{refusal-oD3ISM9h.d.ts → refusal-Bdr1k47u.d.ts} +1 -1
- package/dist/{refusal-br4Ma9Cf.js → refusal-Ch-u9dVd.js} +2 -2
- package/dist/{resolve-w9EpHzuM.d.ts → resolve-7atr-wWr.d.ts} +2 -2
- package/dist/{resource-C8r5xGqY.js → resource-CHGOmg1O.js} +4 -4
- package/dist/{resource-B4ka8dDH.d.ts → resource-DxcgtHq6.d.ts} +1 -1
- package/dist/{resource-execute-D0yQ-8WR.d.ts → resource-execute-C45ICrN9.d.ts} +2 -2
- package/dist/{resource-types-D2vEQVXI.d.ts → resource-types-CC59gMHE.d.ts} +5 -5
- package/dist/{resources-BklF-rjz.d.ts → resources-B71O7EVQ.d.ts} +2 -2
- package/dist/{resources-BlZdLsWQ.js → resources-B7htXQeg.js} +1 -1
- package/dist/{respond-C7I8kLK_.d.ts → respond-Cdg5ibH5.d.ts} +1 -1
- package/dist/{respond-DdhZ9Wbn.js → respond-Dpx48ATq.js} +1 -1
- package/dist/{result-BlgnMB0H.js → result-COkvI9t5.js} +7 -1
- package/dist/{rules-B0-3Iosu.js → rules-4of_Fq-6.js} +31 -5
- package/dist/runtime-BOXURhEW.js +45 -0
- package/dist/{sales-lines-BAk8In-Z.js → sales-lines-CymdiwYd.js} +3 -3
- package/dist/{sales-shared-SblIgCgI.js → sales-shared-DjCuN8xG.js} +1 -1
- package/dist/{search-B6h03cAx.js → search-LbjCylX5.js} +3 -3
- package/dist/server/index.d.ts +20 -20
- package/dist/server/index.js +10 -10
- package/dist/{server-types-OohhIQb2.d.ts → server-types-fXwJoFjt.d.ts} +12 -12
- package/dist/{session-DiWHtYrO.d.ts → session-Djo5t4KQ.d.ts} +5 -5
- package/dist/{settings-BXFn9zpS.js → settings-DxXfDUmh.js} +4 -4
- package/dist/{shared-DbO3Dfms.js → shared-9B02lczf.js} +1 -1
- package/dist/{signatures-B41ApWXA.js → signatures-C9CGYZS1.js} +1 -1
- package/dist/{signers-CXt_wA9S.d.ts → signers-BjSgNAXP.d.ts} +4 -4
- package/dist/{signing-keys-Bq9mMCTh.d.ts → signing-keys-Ccr86Y2C.d.ts} +2 -2
- package/dist/solid/index.d.ts +7 -7
- package/dist/{solid-controller-DqlvYFZa.d.ts → solid-controller-CZrt1Tg6.d.ts} +1 -1
- package/dist/solid-start/index.d.ts +6 -6
- package/dist/solid-start/index.js +5 -5
- package/dist/spec/index.d.ts +2 -2
- package/dist/sql/index.d.ts +5 -709
- package/dist/sql/index.js +5 -86238
- package/dist/{sql-DJrXG-3Z.js → sql-BQshMgmB.js} +2 -2
- package/dist/sql-CgTZOQZ7.js +87439 -0
- package/dist/{sso-BN0LnMqE.d.ts → sso-B5ZoEsXE.d.ts} +3 -3
- package/dist/{sso-BDva_-4y.js → sso-CwAnve68.js} +3 -3
- package/dist/ssr/index.d.ts +4 -4
- package/dist/{standard-B5fe2gnW.js → standard-DZmwmIhV.js} +1 -1
- package/dist/{stats-D6vkb89f.js → stats-CUhqw6Ev.js} +2 -2
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.js +4 -4
- package/dist/{storage-api-Cx-1iWBd.d.ts → storage-api-B4Ib2Zpo.d.ts} +2 -2
- package/dist/streams/index.d.ts +1 -1
- package/dist/streams/index.js +2 -2
- package/dist/streams/redis/index.js +1 -1
- package/dist/{subject-readers-fxP5wu0s.d.ts → subject-readers-81xiWh4M.d.ts} +2 -2
- package/dist/{subject-readers-DiePmaYP.js → subject-readers-DDyPTIOr.js} +1 -1
- package/dist/{subjects-z8VWA_lF.d.ts → subjects-DP-fvFkk.d.ts} +8 -0
- package/dist/{support-BsKkvA92.js → support-BsqhV6jP.js} +5 -5
- package/dist/{support-view-BbcZR7Io.d.ts → support-view-CznLe4jq.d.ts} +1 -1
- package/dist/svelte/index.d.ts +6 -6
- package/dist/{svelte-controller-DxxHEHxD.d.ts → svelte-controller-DDbju9CW.d.ts} +1 -1
- package/dist/sveltekit/index.d.ts +7 -7
- package/dist/sveltekit/index.js +5 -5
- package/dist/{tags-Dw8vKkcI.d.ts → tags-7NHyD1P8.d.ts} +1 -1
- package/dist/{tags-PaG0Ns_9.js → tags-DGldvcA4.js} +5 -5
- package/dist/tanstack-db/index.d.ts +2 -2
- package/dist/tanstack-db/supabase/index.d.ts +2 -2
- package/dist/tanstack-start/index.d.ts +6 -6
- package/dist/tanstack-start/index.js +5 -5
- package/dist/{tax-D_kSCdWU.js → tax-DZDpMMRw.js} +1 -1
- package/dist/{tee-Bsisfd7t.js → tee-CdRV1tcj.js} +1 -1
- package/dist/{tenant-DdmVhsff.d.ts → tenant-DW_GmsW4.d.ts} +2 -2
- package/dist/testing/index.d.ts +23 -23
- package/dist/testing/index.js +8 -51
- package/dist/{topic-ByDz9edV.js → topic-DB-1YTMj.js} +35 -16
- package/dist/{topic-cMS7UtM1.d.ts → topic-Dgs-eSYQ.d.ts} +31 -17
- package/dist/{types-YfwpIE-d.d.ts → types-BO8lVTun.d.ts} +6 -0
- package/dist/{types-D0W4fnsc.d.ts → types-C_GN-4ed.d.ts} +4 -4
- package/dist/types-DGHfTW8_.d.ts +9 -0
- package/dist/{types-pNY_UpDs.d.ts → types-DM8q3IOr.d.ts} +3 -3
- package/dist/{types-6oiy6rIa.d.ts → types-DOaUIJxW.d.ts} +4 -4
- package/dist/{types-vaoP9S9_.d.ts → types-DZj8CZMH.d.ts} +22 -8
- package/dist/{types-CdP0z5tS.d.ts → types-P1S1cj6N.d.ts} +5 -5
- package/dist/{undo-CEGIRkPA.js → undo-0qM13zul.js} +3 -3
- package/dist/{undo-DGo0skyO.d.ts → undo-D42sPjCf.d.ts} +2 -2
- package/dist/{usage-CdlfuS3i.js → usage-BrJGPvCq.js} +2 -2
- package/dist/{usage-DM2rzczj.d.ts → usage-CnQHSM_r.d.ts} +4 -4
- package/dist/{vault-tOkPLnMB.d.ts → vault-EnOQJWjn.d.ts} +2 -2
- package/dist/vercel-connect/index.d.ts +1 -1
- package/dist/vercel-connect/index.js +1 -1
- package/dist/{verify-D63A2ALE.d.ts → verify-3NLjUIER.d.ts} +2 -2
- package/dist/{verify-EQcC3Khp.js → verify-C9D_jjsQ.js} +2 -2
- package/dist/{version-D87ZteKy.js → version-Bxj_xcUY.js} +1 -1
- package/dist/{view-Dv0A949a.d.ts → view-SuASaomx.d.ts} +1 -1
- package/dist/vue/index.d.ts +7 -7
- package/dist/{vue-controller-HPfMTDa2.d.ts → vue-controller-D_ohttBZ.d.ts} +1 -1
- package/dist/{watch-DT_B3CnJ.js → watch-Blj1mQ9n.js} +1 -1
- package/dist/{watch-DDuWYv0Y.d.ts → watch-D1wwzZ04.d.ts} +5 -5
- package/dist/{watch-topic-EFpOIIDE.d.ts → watch-topic-D-rpUg5n.d.ts} +1 -1
- package/dist/{workflow-builder-OrglbXUh.js → workflow-builder-C5DBN7yq.js} +25 -9
- package/dist/workflow-sdk/builder/index.d.ts +3 -3
- package/dist/workflow-sdk/builder/index.js +1 -1
- package/dist/workflow-sdk/index.d.ts +1 -1
- package/dist/workflow-sdk/index.js +1 -1
- package/dist/workflow-sdk/world/index.d.ts +1 -1
- package/dist/workflow-sdk/world/index.js +2 -2
- package/dist/{workflow-sdk-q8cLwW1K.d.ts → workflow-sdk-Di5pmCAu.d.ts} +3 -3
- package/dist/{workflow-sdk-BZ6qsRlY.js → workflow-sdk-vjDWlnfX.js} +1 -1
- package/dist/{workflows-DFQeXDAI.d.ts → workflows-DJXoxDZH.d.ts} +3 -3
- package/dist/{workflows-C-OvZpeg.js → workflows-DzdX28KN.js} +3 -3
- package/dist/yjs/index.d.ts +2 -2
- package/dist/yjs/index.js +2 -2
- package/package.json +27 -15
- package/schemas/config-v1.json +180 -7
- package/schemas/doctor-report-v1.json +7 -0
- package/skills/better-supabase/SKILL.md +1 -0
- package/skills/better-supabase/references/ui-recipes.md +683 -11
- package/dist/cli/add-CT6p5psO.js +0 -1
- package/dist/cli/adopt-C9jl8z0h.js +0 -1
- package/dist/cli/env-D3gZ-OHj.js +0 -1
- package/dist/cli/seed-DtRFysBe.js +0 -1
- package/dist/cli/{detect-DYDUBLU4.js → detect-BeLVeNpA.js} +1 -1
- package/dist/{client-b2_GjzzD.js → client-BGnJ5WJi.js} +1 -1
|
@@ -297,6 +297,7 @@ function url(message$1) {
|
|
|
297
297
|
}
|
|
298
298
|
};
|
|
299
299
|
}
|
|
300
|
+
const ABORT_EARLY_CONFIG = { abortEarly: true };
|
|
300
301
|
/**
|
|
301
302
|
* Returns the fallback value of the schema.
|
|
302
303
|
*
|
|
@@ -323,6 +324,19 @@ function getFallback(schema, dataset, config$1) {
|
|
|
323
324
|
function getDefault(schema, dataset, config$1) {
|
|
324
325
|
return typeof schema.default === "function" ? schema.default(dataset, config$1) : schema.default;
|
|
325
326
|
}
|
|
327
|
+
/**
|
|
328
|
+
* Checks if the input matches the schema. By using a type predicate, this
|
|
329
|
+
* function can be used as a type guard.
|
|
330
|
+
*
|
|
331
|
+
* @param schema The schema to be used.
|
|
332
|
+
* @param input The input to be tested.
|
|
333
|
+
*
|
|
334
|
+
* @returns Whether the input matches the schema.
|
|
335
|
+
*/
|
|
336
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
337
|
+
function is(schema, input) {
|
|
338
|
+
return !schema["~run"]({ value: input }, ABORT_EARLY_CONFIG).issues;
|
|
339
|
+
}
|
|
326
340
|
/* @__NO_SIDE_EFFECTS__ */
|
|
327
341
|
function array(item, message$1) {
|
|
328
342
|
return _standardSchema({
|
|
@@ -401,6 +415,21 @@ function custom(check$1, message$1) {
|
|
|
401
415
|
}
|
|
402
416
|
});
|
|
403
417
|
}
|
|
418
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
419
|
+
function exactOptional(wrapped, default_) {
|
|
420
|
+
return _standardSchema({
|
|
421
|
+
kind: "schema",
|
|
422
|
+
type: "exact_optional",
|
|
423
|
+
reference: exactOptional,
|
|
424
|
+
expects: wrapped.expects,
|
|
425
|
+
async: false,
|
|
426
|
+
wrapped,
|
|
427
|
+
default: default_,
|
|
428
|
+
"~run"(dataset, config$1) {
|
|
429
|
+
return this.wrapped["~run"](dataset, config$1);
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
}
|
|
404
433
|
/**
|
|
405
434
|
* Creates a lazy schema.
|
|
406
435
|
*
|
|
@@ -478,6 +507,68 @@ function number(message$1) {
|
|
|
478
507
|
});
|
|
479
508
|
}
|
|
480
509
|
/* @__NO_SIDE_EFFECTS__ */
|
|
510
|
+
function object(entries$1, message$1) {
|
|
511
|
+
return _standardSchema({
|
|
512
|
+
kind: "schema",
|
|
513
|
+
type: "object",
|
|
514
|
+
reference: object,
|
|
515
|
+
expects: "Object",
|
|
516
|
+
async: false,
|
|
517
|
+
entries: entries$1,
|
|
518
|
+
message: message$1,
|
|
519
|
+
"~run"(dataset, config$1) {
|
|
520
|
+
const input = dataset.value;
|
|
521
|
+
if (input && typeof input === "object") {
|
|
522
|
+
dataset.typed = true;
|
|
523
|
+
dataset.value = {};
|
|
524
|
+
for (const key in this.entries) {
|
|
525
|
+
const valueSchema = this.entries[key];
|
|
526
|
+
if (key in input || (valueSchema.type === "exact_optional" || valueSchema.type === "optional" || valueSchema.type === "nullish") && valueSchema.default !== void 0) {
|
|
527
|
+
const value$1 = key in input ? input[key] : /* @__PURE__ */ getDefault(valueSchema);
|
|
528
|
+
const valueDataset = valueSchema["~run"]({ value: value$1 }, config$1);
|
|
529
|
+
if (valueDataset.issues) {
|
|
530
|
+
const pathItem = {
|
|
531
|
+
type: "object",
|
|
532
|
+
origin: "value",
|
|
533
|
+
input,
|
|
534
|
+
key,
|
|
535
|
+
value: value$1
|
|
536
|
+
};
|
|
537
|
+
for (const issue of valueDataset.issues) {
|
|
538
|
+
if (issue.path) issue.path.unshift(pathItem);
|
|
539
|
+
else issue.path = [pathItem];
|
|
540
|
+
dataset.issues?.push(issue);
|
|
541
|
+
}
|
|
542
|
+
if (!dataset.issues) dataset.issues = valueDataset.issues;
|
|
543
|
+
if (config$1.abortEarly) {
|
|
544
|
+
dataset.typed = false;
|
|
545
|
+
break;
|
|
546
|
+
}
|
|
547
|
+
}
|
|
548
|
+
if (!valueDataset.typed) dataset.typed = false;
|
|
549
|
+
dataset.value[key] = valueDataset.value;
|
|
550
|
+
} else if (valueSchema.fallback !== void 0) dataset.value[key] = /* @__PURE__ */ getFallback(valueSchema);
|
|
551
|
+
else if (valueSchema.type !== "exact_optional" && valueSchema.type !== "optional" && valueSchema.type !== "nullish") {
|
|
552
|
+
_addIssue(this, "key", dataset, config$1, {
|
|
553
|
+
input: void 0,
|
|
554
|
+
expected: `"${key}"`,
|
|
555
|
+
path: [{
|
|
556
|
+
type: "object",
|
|
557
|
+
origin: "key",
|
|
558
|
+
input,
|
|
559
|
+
key,
|
|
560
|
+
value: input[key]
|
|
561
|
+
}]
|
|
562
|
+
});
|
|
563
|
+
if (config$1.abortEarly) break;
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
} else _addIssue(this, "type", dataset, config$1);
|
|
567
|
+
return dataset;
|
|
568
|
+
}
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
/* @__NO_SIDE_EFFECTS__ */
|
|
481
572
|
function objectWithRest(entries$1, rest, message$1) {
|
|
482
573
|
return _standardSchema({
|
|
483
574
|
kind: "schema",
|
|
@@ -993,4 +1084,4 @@ function parseEnv(env) {
|
|
|
993
1084
|
};
|
|
994
1085
|
}
|
|
995
1086
|
//#endregion
|
|
996
|
-
export {
|
|
1087
|
+
export { string as A, picklist as C, regex as D, record as E, unknown as M, safeParse as O, optional as S, rawCheck as T, minValue as _, array as a, object as b, exactOptional as c, is as d, lazy as f, minLength as g, maxValue as h, parseEnv as i, union as j, strictObject as k, getDotPath as l, maxLength as m, configEnvironment as n, boolean as o, literal as p, isCi as r, custom as s, PROCESS_ENV as t, integer as u, nullable as v, pipe as w, objectWithRest as x, number as y };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { t as PROCESS_ENV, n as configEnvironment, r as isCi, i as parseEnv } from "./env-
|
|
1
|
+
export { t as PROCESS_ENV, n as configEnvironment, r as isCi, i as parseEnv } from "./env-Cf5OTqbK.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { t as envCommand } from "./env-2v9JrxSr.js";
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { a as list, p as commandMeta, r as defineCliCommand } from "./command-
|
|
1
|
+
import { a as list, p as commandMeta, r as defineCliCommand } from "./command-D_HI1mp1.js";
|
|
2
2
|
import { i as plain } from "./style-2JfIPVMQ.js";
|
|
3
3
|
import { a as parseNames, i as failedResult, n as CliError } from "./errors-Caiz_0so.js";
|
|
4
|
-
import { a as catalogFingerprint } from "./cache-
|
|
5
|
-
import { n as runGen } from "./run-
|
|
4
|
+
import { a as catalogFingerprint } from "./cache-CPBYJAkb.js";
|
|
5
|
+
import { n as runGen } from "./run-DliGNdjI.js";
|
|
6
6
|
import { r as isGenTask, t as GEN_TASKS } from "./names-D6LrQnOv.js";
|
|
7
|
-
import { o as snapshotFile, r as openSource, t as loadSnapshot } from "./snapshot-
|
|
8
|
-
import { i as sourceFlags, n as SOURCE_ARGS, r as sourceArgs } from "./source-args-
|
|
9
|
-
import { a as runMetadataGen, n as checkMetadataFlags, t as EMITS } from "./metadata-
|
|
10
|
-
import { r as runEnv } from "./env-
|
|
11
|
-
import { c as watchLoop, o as parseInterval, r as specOptionsFromConfig, s as stampFiles, t as runSpec } from "./spec-
|
|
12
|
-
import { t as runScaffoldApi } from "./scaffold-
|
|
13
|
-
import { t as runSeed } from "./seed-
|
|
14
|
-
import { t as runSql } from "./sql-
|
|
7
|
+
import { o as snapshotFile, r as openSource, t as loadSnapshot } from "./snapshot-Dvcx0BSl.js";
|
|
8
|
+
import { i as sourceFlags, n as SOURCE_ARGS, r as sourceArgs } from "./source-args-BNhagtpw.js";
|
|
9
|
+
import { a as runMetadataGen, n as checkMetadataFlags, t as EMITS } from "./metadata-DikbSOE0.js";
|
|
10
|
+
import { r as runEnv } from "./env-2v9JrxSr.js";
|
|
11
|
+
import { c as watchLoop, o as parseInterval, r as specOptionsFromConfig, s as stampFiles, t as runSpec } from "./spec-BewE6r6J.js";
|
|
12
|
+
import { t as runScaffoldApi } from "./scaffold-6bv24GSP.js";
|
|
13
|
+
import { t as runSeed } from "./seed-CIJaL1Ao.js";
|
|
14
|
+
import { t as runSql } from "./sql-BBkchli4.js";
|
|
15
15
|
import { existsSync } from "node:fs";
|
|
16
16
|
import { resolve } from "node:path";
|
|
17
17
|
//#region src/cli/commands/gen-pipeline.ts
|
package/dist/cli/index.d.ts
CHANGED
|
@@ -424,10 +424,10 @@ export declare function renderFiles(config: ResolvedConfig, snapshot: Snapshot,
|
|
|
424
424
|
//#region src/cli/gen/blocks.d.ts
|
|
425
425
|
/**
|
|
426
426
|
* `blocks.generated.ts`: each installed block's schema, API schema and the
|
|
427
|
-
* options its TypeScript side reads, for `defineBlocks(blockConfig, ...)
|
|
428
|
-
* `undefined` when the config installs no blocks.
|
|
427
|
+
* options its TypeScript side reads, for `defineBlocks(blockConfig, ...)`,
|
|
428
|
+
* and the app table events. `undefined` when the config installs no blocks.
|
|
429
429
|
*/
|
|
430
|
-
export declare function emitBlockConfig(config: Pick<ResolvedConfig, "blocks" | "blockNames" | "output" | "sql">, options?: {
|
|
430
|
+
export declare function emitBlockConfig(config: Pick<ResolvedConfig, "appTables" | "blocks" | "blockNames" | "output" | "sql">, options?: {
|
|
431
431
|
readonly runtimeImport?: string;
|
|
432
432
|
}): GeneratedFile | undefined;
|
|
433
433
|
//#endregion
|
|
@@ -591,6 +591,8 @@ interface ColumnModel {
|
|
|
591
591
|
readonly storage: string | undefined;
|
|
592
592
|
readonly insertable: boolean;
|
|
593
593
|
readonly updatable: boolean;
|
|
594
|
+
/** `false` for an app table column with `access: "server"`. */
|
|
595
|
+
readonly selectable?: false;
|
|
594
596
|
}
|
|
595
597
|
interface RelationModel {
|
|
596
598
|
readonly name: string;
|
|
@@ -684,6 +686,6 @@ export declare function emitModule(model: Model, options: EmitOptions): string;
|
|
|
684
686
|
export declare function loadConfig(cwd: string, explicit?: string, environment?: string, path?: string | undefined): Promise<ResolvedConfig>;
|
|
685
687
|
//#endregion
|
|
686
688
|
//#region src/cli/version.d.ts
|
|
687
|
-
export declare const VERSION = "0.
|
|
689
|
+
export declare const VERSION = "0.10.0";
|
|
688
690
|
//#endregion
|
|
689
691
|
export type { Catalog, CatalogCheck, CatalogColumn, CatalogColumnGrant, CatalogEnum, CatalogForeignKey, CatalogFunction, CatalogFunctionArg, CatalogGrant, CatalogIndex, CatalogPolicy, CatalogTable, CatalogTrigger, CatalogUnique, Choice, Cli, CliArgs, CliCommand, CliCommandDef, CliContext, CliEnv, CliErrorCode, CliErrorOptions, CliIo, CliLog, CliProblem, CliProblemExtensions, CommandResult, CreateCliOptions, ExitCode, ExtrasFunction, ExtrasHook, ExtrasHookFunction, ExtrasTable, ForeignKeyAction, Format, GeneratorMetadata, IntrospectionSource, ManagementSourceOptions, NextStep, Paint, Prompter, Queryable, RunOptions, RunResult, Snapshot, SnapshotBucket, SnapshotExtras };
|
package/dist/cli/index.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { a as list, r as defineCliCommand } from "./command-
|
|
2
|
-
import { i as run, n as createCli, r as help, t as commandNames } from "./run-
|
|
3
|
-
import { t as VERSION } from "./version-
|
|
1
|
+
import { a as list, r as defineCliCommand } from "./command-D_HI1mp1.js";
|
|
2
|
+
import { i as run, n as createCli, r as help, t as commandNames } from "./run-BLJj7SuM.js";
|
|
3
|
+
import { t as VERSION } from "./version-D1wM9DNb.js";
|
|
4
4
|
import { n as CliError, t as CLI_ERRORS_URL } from "./errors-Caiz_0so.js";
|
|
5
5
|
import { t as toCatalog } from "./catalog-Di15TkM2.js";
|
|
6
|
-
import { a as buildModel, r as emitModule, t as GENERATED_HEADER } from "./emit-
|
|
7
|
-
import {
|
|
8
|
-
import { s as loadConfig } from "./config-
|
|
9
|
-
import { a as serializeSnapshot, d as managementSource, f as pgSource, i as parseSnapshot, l as introspect, t as loadSnapshot } from "./snapshot-
|
|
6
|
+
import { a as buildModel, r as emitModule, t as GENERATED_HEADER } from "./emit-j0zZ6NE_.js";
|
|
7
|
+
import { S as emitBlockConfig, n as runGen, x as renderFiles } from "./run-DliGNdjI.js";
|
|
8
|
+
import { s as loadConfig } from "./config-Bi_UBxXl.js";
|
|
9
|
+
import { a as serializeSnapshot, d as managementSource, f as pgSource, i as parseSnapshot, l as introspect, t as loadSnapshot } from "./snapshot-Dvcx0BSl.js";
|
|
10
10
|
//#region src/cli/introspect/from-catalog.ts
|
|
11
11
|
/**
|
|
12
12
|
* Builds a snapshot from catalog records: the inverse of `toCatalog`. Tests
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import { a as list, p as commandMeta, r as defineCliCommand } from "./command-
|
|
1
|
+
import { a as list, p as commandMeta, r as defineCliCommand } from "./command-D_HI1mp1.js";
|
|
2
2
|
import { i as plain } from "./style-2JfIPVMQ.js";
|
|
3
3
|
import { n as CliError } from "./errors-Caiz_0so.js";
|
|
4
4
|
import { t as TYPEGEN_VERSION } from "./typegen-version-BNBPI4Eu.js";
|
|
5
|
-
import { a as findConfig, s as loadConfig } from "./config-
|
|
5
|
+
import { a as findConfig, s as loadConfig } from "./config-Bi_UBxXl.js";
|
|
6
6
|
import { n as applyPlan, r as changeLines, s as planResult, t as PLAN_ARGS } from "./files-DDvAwTko.js";
|
|
7
|
-
import { _ as suggestedIntegrations, a as CANCELLED, c as overwrite, d as templateContextFor, f as templatePlan, g as resolveIntegrations, h as needsLib, l as packagesFor, m as baseFiles, n as blockConfigImport, o as chooseIntegrations, p as TEMPLATES, r as blocksWiringPath, s as integrationFiles, u as parseIntegrations } from "./add-
|
|
8
|
-
import { n as installCommand, t as detectProject } from "./detect-
|
|
9
|
-
import { s as enablePgDelta } from "./write-
|
|
7
|
+
import { _ as suggestedIntegrations, a as CANCELLED, c as overwrite, d as templateContextFor, f as templatePlan, g as resolveIntegrations, h as needsLib, l as packagesFor, m as baseFiles, n as blockConfigImport, o as chooseIntegrations, p as TEMPLATES, r as blocksWiringPath, s as integrationFiles, u as parseIntegrations } from "./add-CUS0AiBh.js";
|
|
8
|
+
import { n as installCommand, t as detectProject } from "./detect-BeLVeNpA.js";
|
|
9
|
+
import { s as enablePgDelta } from "./write-Dp1XlAVM.js";
|
|
10
|
+
import { n as latestMigrationVersion } from "./migration-safety-LaGVPPuD.js";
|
|
10
11
|
import { a as CONVENTION_COMPLETIONS, c as hasConventionFlags, i as CONVENTION_ARGS, l as promptConventions, n as AUTHZ_NOTE, o as conventionFlags, r as createUrlParam, s as defaultConventions, t as writeDesign, u as withConventions } from "./design-edit-B-WsnhUF.js";
|
|
11
|
-
import { t as syncModules } from "./sync-
|
|
12
|
+
import { t as syncModules } from "./sync-CJ-ft-tl.js";
|
|
12
13
|
import { existsSync } from "node:fs";
|
|
13
14
|
import { join, posix, resolve } from "node:path";
|
|
14
15
|
import { glob, readFile } from "node:fs/promises";
|
|
@@ -271,12 +272,18 @@ async function runInit(config, args, prompts, now = () => /* @__PURE__ */ new Da
|
|
|
271
272
|
let generated = posix.normalize(posix.join(project.srcDir, "lib/supabase/generated.ts"));
|
|
272
273
|
if (hasConfig) generated = inPackage ? (await loadConfig(root)).output : config.output;
|
|
273
274
|
const templateContext = templateContextFor(project, generated);
|
|
275
|
+
const migrationSince = await latestMigrationVersion(root) ?? await latestMigrationVersion(config.root);
|
|
276
|
+
const since = migrationSince === void 0 ? {} : { migrationSince };
|
|
274
277
|
const files = withDesign([
|
|
275
278
|
...baseFiles(templateContext, casing, needsLib(integrations), integrations, workflow, chosen?.value, chosen === null ? {
|
|
276
279
|
...keys.sql === void 0 ? {} : { sql: keys.sql },
|
|
277
280
|
...keys.blocks === void 0 ? {} : { blocks: keys.blocks },
|
|
278
|
-
provider: conventions.access === "provider"
|
|
279
|
-
|
|
281
|
+
provider: conventions.access === "provider",
|
|
282
|
+
...since
|
|
283
|
+
} : {
|
|
284
|
+
provider: conventions.access === "provider",
|
|
285
|
+
...since
|
|
286
|
+
}),
|
|
280
287
|
...integrationFiles(integrations, templateContext),
|
|
281
288
|
...chosen === null ? [] : [{
|
|
282
289
|
path: blocksWiringPath(templateContext),
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { p as commandMeta, r as defineCliCommand } from "./command-
|
|
1
|
+
import { p as commandMeta, r as defineCliCommand } from "./command-D_HI1mp1.js";
|
|
2
2
|
import { n as CliError } from "./errors-Caiz_0so.js";
|
|
3
3
|
import { c as serializeGenerator, s as restrictSchemas } from "./typegen--TfvOPLh.js";
|
|
4
|
-
import { a as serializeSnapshot, t as loadSnapshot } from "./snapshot-
|
|
4
|
+
import { a as serializeSnapshot, t as loadSnapshot } from "./snapshot-Dvcx0BSl.js";
|
|
5
5
|
import { n as applyPlan, o as insideRoot, s as planResult, t as PLAN_ARGS } from "./files-DDvAwTko.js";
|
|
6
|
-
import { n as SOURCE_ARGS, r as sourceArgs } from "./source-args-
|
|
6
|
+
import { n as SOURCE_ARGS, r as sourceArgs } from "./source-args-BNhagtpw.js";
|
|
7
7
|
//#region src/cli/commands/introspect.ts
|
|
8
8
|
const ARGS = {
|
|
9
9
|
out: {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { p as commandMeta, r as defineCliCommand } from "./command-
|
|
1
|
+
import { p as commandMeta, r as defineCliCommand } from "./command-D_HI1mp1.js";
|
|
2
2
|
import { t as display } from "./io-BiPX-_J1.js";
|
|
3
3
|
import { m as supabaseDir } from "./supabase-toml-DjLgBYEo.js";
|
|
4
4
|
import { n as applyPlan, r as changeLines } from "./files-DDvAwTko.js";
|
|
@@ -0,0 +1,329 @@
|
|
|
1
|
+
import { r as errorText } from "./errors-Caiz_0so.js";
|
|
2
|
+
import "./snapshot-Dvcx0BSl.js";
|
|
3
|
+
import { l as tableObject, n as exposed, s as qualified, t as catalogOf } from "./shared-CNcvDOLt.js";
|
|
4
|
+
//#region src/cli/doctor/reserved-roles.ts
|
|
5
|
+
/**
|
|
6
|
+
* supautils' `reserved_roles` on Supabase. Nobody but a superuser may alter,
|
|
7
|
+
* drop or change the memberships of these.
|
|
8
|
+
*/
|
|
9
|
+
const RESERVED_ROLES = /* @__PURE__ */ new Set([
|
|
10
|
+
"supabase_admin",
|
|
11
|
+
"supabase_auth_admin",
|
|
12
|
+
"supabase_storage_admin",
|
|
13
|
+
"supabase_functions_admin",
|
|
14
|
+
"supabase_read_only_user",
|
|
15
|
+
"supabase_realtime_admin",
|
|
16
|
+
"supabase_replication_admin",
|
|
17
|
+
"supabase_etl_admin",
|
|
18
|
+
"dashboard_user",
|
|
19
|
+
"pgbouncer"
|
|
20
|
+
]);
|
|
21
|
+
/** Reserved roles whose settings (`alter role ... set`) supautils allows changing. */
|
|
22
|
+
const SETTINGS_ONLY_ROLES = /* @__PURE__ */ new Set([
|
|
23
|
+
"authenticator",
|
|
24
|
+
"authenticated",
|
|
25
|
+
"anon",
|
|
26
|
+
"service_role"
|
|
27
|
+
]);
|
|
28
|
+
/**
|
|
29
|
+
* Roles that Supabase's own services log in as. Their statements (PostgREST's
|
|
30
|
+
* schema cache query, Auth and Storage migrations) aren't the app's.
|
|
31
|
+
*/
|
|
32
|
+
const PLATFORM_ROLES = /* @__PURE__ */ new Set([...RESERVED_ROLES, "authenticator"]);
|
|
33
|
+
/** Comments and string literals blanked, newlines kept so offsets map to lines. */
|
|
34
|
+
const sqlCode = (text) => text.replaceAll(/\/\*[\s\S]*?\*\//g, (comment) => comment.replaceAll(/[^\n]/g, " ")).replaceAll(/--[^\n]*/g, "").replaceAll(/'(?:[^']|'')*'/g, "''");
|
|
35
|
+
const roleNames = (list) => list.split(",").map((name) => name.trim().replaceAll("\"", "").toLowerCase()).filter((name) => name !== "");
|
|
36
|
+
/** Why a statement changes a reserved role, or undefined when it doesn't. */
|
|
37
|
+
function reservedRoleChange(statement) {
|
|
38
|
+
const alter = /^\s*(alter|drop)\s+(?:role|user)\s+(?:if\s+exists\s+)?("[^"]+"|\w+)\s*(\w*)/i.exec(statement);
|
|
39
|
+
if (alter) {
|
|
40
|
+
const role = roleNames(alter[2])[0];
|
|
41
|
+
const verb = alter[1].toLowerCase();
|
|
42
|
+
const next = alter[3].toLowerCase();
|
|
43
|
+
if (RESERVED_ROLES.has(role)) return `${verb}s the reserved role ${role}`;
|
|
44
|
+
if (SETTINGS_ONLY_ROLES.has(role) && (verb === "drop" || next !== "set" && next !== "reset" && next !== "in")) return `${verb}s the reserved role ${role}; only \`alter role ${role} set ...\` is allowed`;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const membership = /^\s*(grant|revoke)\s+(?![\s\S]*\bon\b)([\w",\s]+?)\s+(?:to|from)\s+([\w",\s]+?)(?:\s+with\s+\w+\s+option)?\s*$/i.exec(statement);
|
|
48
|
+
if (!membership) return;
|
|
49
|
+
const role = [...roleNames(membership[2]), ...roleNames(membership[3])].find((name) => RESERVED_ROLES.has(name));
|
|
50
|
+
return role === void 0 ? void 0 : `${membership[1].toLowerCase()}s a membership of the reserved role ${role}`;
|
|
51
|
+
}
|
|
52
|
+
/** Where a statement ends, including statements inside `do` blocks and function bodies. */
|
|
53
|
+
const STATEMENT_BOUNDARY = /;|\$\w*\$|\b(?:begin|then|else|loop)\b/gi;
|
|
54
|
+
/** Statements in schema files and migrations that supautils rejects on Supabase. */
|
|
55
|
+
function reservedRoles(context) {
|
|
56
|
+
return (context.sqlFiles ?? []).flatMap((file) => {
|
|
57
|
+
const code = sqlCode(file.text);
|
|
58
|
+
const findings = [];
|
|
59
|
+
let start = 0;
|
|
60
|
+
for (const end of [...code.matchAll(STATEMENT_BOUNDARY), void 0]) {
|
|
61
|
+
const until = end?.index ?? code.length;
|
|
62
|
+
const statement = code.slice(start, until);
|
|
63
|
+
const reason = reservedRoleChange(statement);
|
|
64
|
+
if (reason !== void 0) {
|
|
65
|
+
const at = start + statement.search(/\S/);
|
|
66
|
+
const line = code.slice(0, at).split("\n").length;
|
|
67
|
+
findings.push({
|
|
68
|
+
message: `${file.path}:${String(line)} ${reason}. supautils rejects it on Supabase, so the migration fails on a hosted project; grant privileges to your own role instead.`,
|
|
69
|
+
target: `${file.path}:${String(line)}`,
|
|
70
|
+
location: {
|
|
71
|
+
file: file.path,
|
|
72
|
+
line
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
start = until + (end?.[0].length ?? 0);
|
|
77
|
+
}
|
|
78
|
+
return findings;
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//#endregion
|
|
82
|
+
//#region src/cli/doctor/live.ts
|
|
83
|
+
/** Statements slower than this (ms, mean) with more calls than `SLOW_CALLS` are BS209. */
|
|
84
|
+
const SLOW_MEAN_MS = 50;
|
|
85
|
+
const SLOW_CALLS = 1e3;
|
|
86
|
+
/** Rows `--explain` reads, like a `findMany()` under Supabase's default `max_rows`. */
|
|
87
|
+
const EXPLAIN_LIMIT = 1e3;
|
|
88
|
+
const escape = (name) => name.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
89
|
+
const ident = (name) => `"${name.replaceAll("\"", "\"\"")}"`;
|
|
90
|
+
const literal = (text) => `'${text.replaceAll("'", "''")}'`;
|
|
91
|
+
const oneLine = (query, max = 160) => {
|
|
92
|
+
const flat = query.replaceAll(/\s+/g, " ").trim();
|
|
93
|
+
return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;
|
|
94
|
+
};
|
|
95
|
+
const plural = (count, word) => `${count} ${word}${count === 1 ? "" : "s"}`;
|
|
96
|
+
const megabytes = (bytes) => `${(bytes / 1024 / 1024).toFixed(1)} MB`;
|
|
97
|
+
/** The schema `pg_stat_statements` lives in, when the extension is installed. */
|
|
98
|
+
async function statementsView(db) {
|
|
99
|
+
const [row] = await db.query(`select n.nspname as schema from pg_extension e join pg_namespace n on n.oid = e.extnamespace where e.extname = 'pg_stat_statements'`);
|
|
100
|
+
return row ? `${ident(row.schema)}.pg_stat_statements` : void 0;
|
|
101
|
+
}
|
|
102
|
+
/** The first exposed table a statement names, to locate it in the SQL files. */
|
|
103
|
+
function tableIn(query, tables) {
|
|
104
|
+
return tables.find((table) => {
|
|
105
|
+
const schema = escape(table.schema);
|
|
106
|
+
const name = escape(table.name);
|
|
107
|
+
return new RegExp(`(?:"${schema}"|\\b${schema})\\.(?:"${name}"|${name}\\b)`).test(query);
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
const live = (context) => context.database;
|
|
111
|
+
/**
|
|
112
|
+
* Function calls and self time so far in this transaction. The view can
|
|
113
|
+
* still hold unflushed counts from earlier transactions, so callers diff two
|
|
114
|
+
* readings.
|
|
115
|
+
*/
|
|
116
|
+
async function functionTimes(db) {
|
|
117
|
+
const rows = await db.query(`select schemaname || '.' || funcname as name, calls, self_time from pg_stat_xact_user_functions`);
|
|
118
|
+
return new Map(rows.map((row) => [row.name, {
|
|
119
|
+
calls: Number(row.calls),
|
|
120
|
+
selfTime: Number(row.self_time)
|
|
121
|
+
}]));
|
|
122
|
+
}
|
|
123
|
+
/** Node types, timings and loops of an `EXPLAIN (ANALYZE, FORMAT JSON)` plan; never rows. */
|
|
124
|
+
function summarizePlan(output) {
|
|
125
|
+
const nodes = [];
|
|
126
|
+
const perRowSubPlans = [];
|
|
127
|
+
let initPlans = 0;
|
|
128
|
+
const walk = (node) => {
|
|
129
|
+
const loops = node["Actual Loops"] ?? 1;
|
|
130
|
+
const ms = (node["Actual Total Time"] ?? 0).toFixed(2);
|
|
131
|
+
const on = node["Relation Name"] ? ` on ${node["Relation Name"]}` : "";
|
|
132
|
+
const sub = node["Subplan Name"] ? `${node["Subplan Name"]}: ` : "";
|
|
133
|
+
nodes.push(`${sub}${node["Node Type"]}${on} ${ms} ms ×${loops}`);
|
|
134
|
+
if (node["Parent Relationship"] === "InitPlan") initPlans += 1;
|
|
135
|
+
if (node["Parent Relationship"] === "SubPlan" && loops > 1) perRowSubPlans.push(`${sub}${node["Node Type"]}${on} ×${loops}`);
|
|
136
|
+
for (const child of node.Plans ?? []) walk(child);
|
|
137
|
+
};
|
|
138
|
+
walk(output.Plan);
|
|
139
|
+
return {
|
|
140
|
+
nodes,
|
|
141
|
+
initPlans,
|
|
142
|
+
perRowSubPlans,
|
|
143
|
+
executionMs: output["Execution Time"] ?? 0
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
const ROLE = /^[a-z_][a-z0-9_]*$/;
|
|
147
|
+
async function explainTable(db, table, claims) {
|
|
148
|
+
const role = typeof claims["role"] === "string" ? claims["role"] : "anon";
|
|
149
|
+
if (!ROLE.test(role)) throw new Error(`Invalid role "${role}" in the claims`);
|
|
150
|
+
await db.query("begin");
|
|
151
|
+
try {
|
|
152
|
+
await db.query(`set local statement_timeout = '30s'`);
|
|
153
|
+
let tracked = true;
|
|
154
|
+
await db.query("savepoint bs_track");
|
|
155
|
+
try {
|
|
156
|
+
await db.query(`set local track_functions = 'all'`);
|
|
157
|
+
await db.query("release savepoint bs_track");
|
|
158
|
+
} catch {
|
|
159
|
+
tracked = false;
|
|
160
|
+
await db.query("rollback to savepoint bs_track");
|
|
161
|
+
}
|
|
162
|
+
await db.query(`select set_config('request.jwt.claims', ${literal(JSON.stringify(claims))}, true)`);
|
|
163
|
+
const before = tracked ? await functionTimes(db) : /* @__PURE__ */ new Map();
|
|
164
|
+
await db.query(`set local role ${ident(role)}`);
|
|
165
|
+
const [row] = await db.query(`explain (analyze, buffers, format json) select * from ${ident(table.schema)}.${ident(table.name)} limit ${EXPLAIN_LIMIT}`);
|
|
166
|
+
const raw = row?.["QUERY PLAN"];
|
|
167
|
+
const plan = typeof raw === "string" ? JSON.parse(raw) : raw;
|
|
168
|
+
if (!plan?.[0]) throw new Error("EXPLAIN returned no plan");
|
|
169
|
+
const functions = tracked ? [...await functionTimes(db)].map(([name, after]) => {
|
|
170
|
+
const start = before.get(name);
|
|
171
|
+
return {
|
|
172
|
+
name,
|
|
173
|
+
calls: after.calls - (start?.calls ?? 0),
|
|
174
|
+
selfTime: after.selfTime - (start?.selfTime ?? 0)
|
|
175
|
+
};
|
|
176
|
+
}).filter((fn) => fn.calls > 0).sort((a, b) => b.selfTime - a.selfTime) : void 0;
|
|
177
|
+
return {
|
|
178
|
+
summary: summarizePlan(plan[0]),
|
|
179
|
+
functions
|
|
180
|
+
};
|
|
181
|
+
} finally {
|
|
182
|
+
await db.query("rollback");
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function resolveTable(context, name) {
|
|
186
|
+
return name.includes(".") ? catalogOf(context).tables.find((table) => qualified(table) === name) : exposed(context).find((table) => table.name === name);
|
|
187
|
+
}
|
|
188
|
+
const LIVE_RULES = [
|
|
189
|
+
{
|
|
190
|
+
code: "BS208",
|
|
191
|
+
severity: "warning",
|
|
192
|
+
title: "Queries spill to temporary files",
|
|
193
|
+
description: "Sorts and hashes that exceed `work_mem` write temporary files, which is slow. Reads `pg_stat_database` and, when installed, the top statements from `pg_stat_statements`. When every statement that spilled ran as a Supabase service role (PostgREST's schema cache query as `authenticator`, Auth or Storage) or came from better-supabase's own catalog reads (`introspect`, `gen`, `doctor`), there is no finding.",
|
|
194
|
+
async check(context) {
|
|
195
|
+
const db = live(context);
|
|
196
|
+
if (!db || "skipped" in db) return [];
|
|
197
|
+
try {
|
|
198
|
+
const [stats] = await db.query(`select temp_files, temp_bytes, current_setting('work_mem') as work_mem from pg_stat_database where datname = current_database()`);
|
|
199
|
+
const files = Number(stats?.temp_files ?? 0);
|
|
200
|
+
if (files === 0) return [];
|
|
201
|
+
let top = "";
|
|
202
|
+
const view = await statementsView(db);
|
|
203
|
+
if (view) {
|
|
204
|
+
const spilled = await db.query(`select s.query, s.temp_blks_written, r.rolname as role from ${view} s left join pg_roles r on r.oid = s.userid where s.temp_blks_written > 0 order by s.temp_blks_written desc limit 50`).catch(() => []);
|
|
205
|
+
const statements = spilled.filter((statement) => !statement.query.startsWith("/* better-supabase */") && (statement.role === null || !PLATFORM_ROLES.has(statement.role))).slice(0, 5);
|
|
206
|
+
if (spilled.length > 0 && statements.length === 0) return [];
|
|
207
|
+
if (statements.length > 0) top = ` Top statements by temporary blocks written: ${statements.map((statement) => `${oneLine(statement.query, 100)} (${statement.temp_blks_written} blocks)`).join("; ")}.`;
|
|
208
|
+
}
|
|
209
|
+
return [{
|
|
210
|
+
message: `${files} temporary files (${megabytes(Number(stats?.temp_bytes ?? 0))}) since the statistics were reset; work_mem is ${stats?.work_mem}. Add indexes so large sorts go away, or raise work_mem for the role that runs them.${top}`,
|
|
211
|
+
target: "pg_stat_database:temp_files"
|
|
212
|
+
}];
|
|
213
|
+
} catch (cause) {
|
|
214
|
+
return [{
|
|
215
|
+
severity: "info",
|
|
216
|
+
message: `Could not read pg_stat_database (${db.describe}): ${errorText(cause)}`
|
|
217
|
+
}];
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
code: "BS209",
|
|
223
|
+
severity: "warning",
|
|
224
|
+
title: "Slow frequent statements",
|
|
225
|
+
description: `Statements from \`pg_stat_statements\` with a mean time above ${SLOW_MEAN_MS} ms and more than ${SLOW_CALLS} calls. Runs with \`--stats\`.`,
|
|
226
|
+
async check(context) {
|
|
227
|
+
if (!context.stats) return [];
|
|
228
|
+
const db = live(context);
|
|
229
|
+
if (!db) return [];
|
|
230
|
+
if ("skipped" in db) return [{
|
|
231
|
+
severity: "info",
|
|
232
|
+
message: `Skipped --stats: ${db.skipped}`
|
|
233
|
+
}];
|
|
234
|
+
try {
|
|
235
|
+
const view = await statementsView(db);
|
|
236
|
+
if (!view) return [{
|
|
237
|
+
severity: "info",
|
|
238
|
+
message: "pg_stat_statements is not installed, so --stats has nothing to read. Run `create extension pg_stat_statements with schema extensions;`."
|
|
239
|
+
}];
|
|
240
|
+
const statements = await db.query(`select queryid::text as queryid, query, calls, mean_exec_time from ${view} where calls > ${SLOW_CALLS} and mean_exec_time > ${SLOW_MEAN_MS} order by total_exec_time desc limit 20`);
|
|
241
|
+
const tables = exposed(context);
|
|
242
|
+
return statements.map((statement) => {
|
|
243
|
+
const table = tableIn(statement.query, tables);
|
|
244
|
+
return {
|
|
245
|
+
message: `${Number(statement.mean_exec_time).toFixed(1)} ms mean over ${statement.calls} calls: ${oneLine(statement.query)}`,
|
|
246
|
+
target: `pg_stat_statements:${statement.queryid}`,
|
|
247
|
+
...table ? { object: tableObject(table) } : {}
|
|
248
|
+
};
|
|
249
|
+
});
|
|
250
|
+
} catch (cause) {
|
|
251
|
+
return [{
|
|
252
|
+
severity: "info",
|
|
253
|
+
message: `Could not read pg_stat_statements (${db.describe}): ${errorText(cause)}`
|
|
254
|
+
}];
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
code: "BS225",
|
|
260
|
+
severity: "info",
|
|
261
|
+
title: "pg_stat_statements is not installed",
|
|
262
|
+
description: "`pg_stat_statements` records the time and calls of each statement, which `--stats` (BS209), BS208 and the Supabase query performance report read. Without it there is no record of which queries are slow. Needs a database; saved snapshots skip it.",
|
|
263
|
+
async check(context) {
|
|
264
|
+
const db = live(context);
|
|
265
|
+
if (!db || "skipped" in db) return [];
|
|
266
|
+
if (context.stats && context.codes?.includes("BS209")) return [];
|
|
267
|
+
try {
|
|
268
|
+
if (await statementsView(db)) return [];
|
|
269
|
+
} catch {
|
|
270
|
+
return [];
|
|
271
|
+
}
|
|
272
|
+
return [{
|
|
273
|
+
message: `pg_stat_statements is not installed on the ${db.describe}, so nothing records which statements are slow. Run \`create extension if not exists pg_stat_statements with schema extensions;\` in a migration.`,
|
|
274
|
+
target: "extension:pg_stat_statements"
|
|
275
|
+
}];
|
|
276
|
+
}
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
code: "BS212",
|
|
280
|
+
severity: "info",
|
|
281
|
+
title: "RLS plan for a table",
|
|
282
|
+
description: `\`--explain <tables>\` runs \`EXPLAIN (ANALYZE, BUFFERS)\` on \`select * from <table> limit ${EXPLAIN_LIMIT}\` as the given claims, in a transaction that is rolled back. It reports node types, timings and loops, never rows, and warns when a policy SubPlan runs once per row.`,
|
|
283
|
+
async check(context) {
|
|
284
|
+
const request = context.explain;
|
|
285
|
+
if (!request) return [];
|
|
286
|
+
const db = live(context);
|
|
287
|
+
if (!db || "skipped" in db || !db.session) return [{
|
|
288
|
+
severity: "warning",
|
|
289
|
+
message: `--explain needs a direct database connection (local stack, $DATABASE_URL, $SUPABASE_DB_URL or --db-url-stdin)${db && "skipped" in db ? `: ${db.skipped}` : "."}`
|
|
290
|
+
}];
|
|
291
|
+
const who = typeof request.claims["sub"] === "string" ? `${String(request.claims["role"] ?? "anon")} ${request.claims["sub"]}` : String(request.claims["role"] ?? "anon");
|
|
292
|
+
const findings = [];
|
|
293
|
+
for (const name of request.tables) {
|
|
294
|
+
const table = resolveTable(context, name);
|
|
295
|
+
if (!table) {
|
|
296
|
+
findings.push({
|
|
297
|
+
severity: "warning",
|
|
298
|
+
message: `--explain: no table "${name}" in the exposed schemas; qualify tables in other schemas, like better_supabase.memberships.`
|
|
299
|
+
});
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
try {
|
|
303
|
+
const { summary, functions } = await explainTable(db, table, request.claims);
|
|
304
|
+
const helpers = functions ? functions.length > 0 ? ` Function time: ${functions.map((fn) => {
|
|
305
|
+
const self = fn.selfTime;
|
|
306
|
+
const share = summary.executionMs > 0 ? Math.round(self / summary.executionMs * 100) : 0;
|
|
307
|
+
return `${fn.name} ${self.toFixed(2)} ms over ${plural(fn.calls, "call")} (${share}%)`;
|
|
308
|
+
}).join(", ")}.` : " No tracked function ran; inlined SQL functions are part of the plan." : " Function times need `track_functions`, which this role may not set; showing the plan only.";
|
|
309
|
+
const perRow = summary.perRowSubPlans.length > 0 ? ` Per-row SubPlans: ${summary.perRowSubPlans.join(", ")}; wrap the policy's function calls in \`(select ...)\` so they run once as an InitPlan.` : "";
|
|
310
|
+
findings.push({
|
|
311
|
+
...summary.perRowSubPlans.length > 0 ? { severity: "warning" } : {},
|
|
312
|
+
message: `${qualified(table)} as ${who}: ${summary.executionMs.toFixed(2)} ms, ${plural(summary.initPlans, "InitPlan")}. Plan: ${summary.nodes.join(" > ")}.${perRow}${helpers}`,
|
|
313
|
+
target: `${qualified(table)}:explain`,
|
|
314
|
+
object: tableObject(table)
|
|
315
|
+
});
|
|
316
|
+
} catch (cause) {
|
|
317
|
+
findings.push({
|
|
318
|
+
severity: "warning",
|
|
319
|
+
message: `--explain ${qualified(table)} failed: ${errorText(cause)}`,
|
|
320
|
+
target: `${qualified(table)}:explain`
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return findings;
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
];
|
|
328
|
+
//#endregion
|
|
329
|
+
export { reservedRoles as i, ident as n, literal as r, LIVE_RULES as t };
|