better-supabase 0.14.0 → 0.15.1
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 +67 -377
- package/dist/access-sql-B-MkVARa.js +207 -0
- package/dist/actor-go7p9-CJ.js +150 -0
- package/dist/adapter-Dyks1lX1.js +2299 -0
- package/dist/agents-CMIB3802.d.ts +117 -0
- package/dist/ai-cache-2LGgaT7F.d.ts +82 -0
- package/dist/ai-cache-Cu8j6aQQ.js +87 -0
- package/dist/ai-chat-BCaKsvLW.d.ts +619 -0
- package/dist/ai-files-CgFCRsnU.js +339 -0
- package/dist/ai-schedules-D_Hz-ik5.d.ts +166 -0
- package/dist/ai-sdk/agents/index.d.ts +6 -6
- package/dist/ai-sdk/agents/index.js +2 -2
- package/dist/ai-sdk/batches/index.d.ts +5 -5
- package/dist/ai-sdk/batches/index.js +4 -4
- package/dist/ai-sdk/cache/index.d.ts +3 -3
- package/dist/ai-sdk/cache/index.js +2 -2
- package/dist/ai-sdk/chat/index.d.ts +1 -1
- package/dist/ai-sdk/chat/index.js +5 -5
- package/dist/ai-sdk/embeddings/index.d.ts +2 -2
- package/dist/ai-sdk/files/index.d.ts +2 -2
- package/dist/ai-sdk/files/index.js +5 -5
- package/dist/ai-sdk/index.d.ts +10 -10
- package/dist/ai-sdk/index.js +3 -3
- package/dist/ai-sdk/mcp/index.d.ts +4 -4
- package/dist/ai-sdk/mcp/index.js +6 -6
- package/dist/ai-sdk/memory/index.d.ts +3 -3
- package/dist/ai-sdk/memory/index.js +1 -1
- package/dist/ai-sdk/workflow/index.d.ts +4 -4
- package/dist/ai-sdk/workflow/index.js +7 -7
- package/dist/api-DxAPqMrE.d.ts +495 -0
- package/dist/api-keys-D5k63K6y.d.ts +213 -0
- package/dist/app-tables-CbCFSXLG.d.ts +28 -0
- package/dist/app-tables-D29Rahtg.js +16350 -0
- package/dist/approvals-Dh9dUXrN.d.ts +129 -0
- package/dist/assistant-ndGdOBax.d.ts +157 -0
- package/dist/astro/index.d.ts +12 -12
- package/dist/astro/index.js +8 -8
- package/dist/attachments-aJYgdYtB.js +369 -0
- package/dist/attributes-Bzf51_nc.js +47 -0
- package/dist/auth-reply-tlXB2FQ9.js +31 -0
- package/dist/authorization-HZdJCaVm.d.ts +3595 -0
- package/dist/authorization-hooks-D_pwXlBs.d.ts +221 -0
- package/dist/authorizer-B6X09otb.d.ts +118 -0
- package/dist/authorizer-BGhXaDmo.js +172 -0
- package/dist/automation-D41DXyvT.js +75 -0
- package/dist/automations-BYsz43AG.js +314 -0
- package/dist/automations-Bc2ue55V.js +26 -0
- package/dist/automations-CD1XlL2W.js +33 -0
- package/dist/automations-CIwRq7zm.js +30 -0
- package/dist/availability-vguUvEK2.d.ts +226 -0
- package/dist/better-result/index.d.ts +20 -30
- package/dist/better-result/index.js +2 -2
- package/dist/bind-h5jre2K0.d.ts +104 -0
- package/dist/block-authors-BDV3y1SP.js +14 -0
- package/dist/block-env-BrfRvPrj.d.ts +32 -0
- package/dist/block-fields-BE7pInWZ.d.ts +58 -0
- package/dist/block-fields-DE_FgpOU.js +139 -0
- package/dist/block-helpers-CRpAHrp_.d.ts +62 -0
- package/dist/block-helpers-CtBdjgO4.js +353 -0
- package/dist/block-hooks-BfxX3682.js +130 -0
- package/dist/block-hooks-DZN2w69m.d.ts +117 -0
- package/dist/block-method-C9hWdHom.js +21 -0
- package/dist/block-method-CiVa2G-J.d.ts +14 -0
- package/dist/block-subjects-BhDKK_j7.js +55 -0
- package/dist/block-subjects-CphkQPxp.d.ts +6 -0
- package/dist/block-tenant-DHp7subc.js +14 -0
- package/dist/block-transport-DWZSJrwN.d.ts +69 -0
- package/dist/blocks/access-requests/index.d.ts +8 -8
- package/dist/blocks/access-requests/index.js +6 -6
- package/dist/blocks/activities/index.d.ts +215 -0
- package/dist/blocks/activities/index.js +414 -0
- 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 +3 -3
- package/dist/blocks/ai-chat/index.d.ts +119 -6
- package/dist/blocks/ai-chat/index.js +1067 -5
- package/dist/blocks/ai-files/index.d.ts +5 -5
- package/dist/blocks/ai-files/index.js +3 -3
- package/dist/blocks/ai-keys/index.d.ts +22 -0
- package/dist/blocks/ai-keys/index.js +236 -0
- package/dist/blocks/ai-schedules/index.d.ts +10 -0
- package/dist/blocks/ai-schedules/index.js +258 -0
- package/dist/blocks/announcements/index.d.ts +134 -5
- package/dist/blocks/announcements/index.js +179 -4
- package/dist/blocks/api-keys/index.d.ts +69 -8
- package/dist/blocks/api-keys/index.js +417 -7
- package/dist/blocks/approvals/index.d.ts +4 -4
- package/dist/blocks/approvals/index.js +10 -10
- package/dist/blocks/assets/index.d.ts +11 -13
- package/dist/blocks/assets/index.js +10 -10
- package/dist/blocks/assignment/index.d.ts +8 -8
- package/dist/blocks/assignment/index.js +5 -5
- package/dist/blocks/attachments/index.d.ts +97 -12
- package/dist/blocks/attachments/index.js +279 -47
- package/dist/blocks/audit/index.d.ts +476 -7
- package/dist/blocks/audit/index.js +863 -6
- package/dist/blocks/automations/index.d.ts +524 -0
- package/dist/blocks/automations/index.js +553 -0
- package/dist/blocks/billable-time/index.d.ts +22 -24
- package/dist/blocks/billable-time/index.js +13 -13
- package/dist/blocks/billing/index.d.ts +82 -11
- package/dist/blocks/billing/index.js +93 -9
- package/dist/blocks/bookings/index.d.ts +49 -7
- package/dist/blocks/bookings/index.js +419 -4
- package/dist/blocks/bulk/index.d.ts +6 -6
- package/dist/blocks/bulk/index.js +4 -4
- package/dist/blocks/calendar/index.d.ts +180 -7
- package/dist/blocks/calendar/index.js +1073 -5
- package/dist/blocks/catalog/index.d.ts +128 -13
- package/dist/blocks/catalog/index.js +149 -13
- package/dist/blocks/channels/index.d.ts +15 -13
- package/dist/blocks/channels/index.js +12 -13
- package/dist/blocks/collections/index.d.ts +16 -16
- package/dist/blocks/collections/index.js +8 -8
- package/dist/blocks/comments/index.d.ts +231 -14
- package/dist/blocks/comments/index.js +260 -13
- package/dist/blocks/compliance/index.d.ts +325 -0
- package/dist/blocks/compliance/index.js +410 -0
- package/dist/blocks/connectors/index.d.ts +4 -4
- package/dist/blocks/connectors/index.js +8 -8
- package/dist/blocks/contacts/index.d.ts +182 -0
- package/dist/blocks/contacts/index.js +358 -0
- package/dist/blocks/content/index.d.ts +188 -0
- package/dist/blocks/content/index.js +219 -0
- package/dist/blocks/contracts/index.d.ts +16 -18
- package/dist/blocks/contracts/index.js +24 -24
- package/dist/blocks/courses/index.d.ts +17 -17
- package/dist/blocks/courses/index.js +13 -13
- package/dist/blocks/created-by/index.d.ts +27 -0
- package/dist/blocks/created-by/index.js +14 -0
- package/dist/blocks/custom-fields/index.d.ts +11 -11
- package/dist/blocks/custom-fields/index.js +7 -7
- package/dist/blocks/data-lifecycle/index.d.ts +9 -9
- package/dist/blocks/data-lifecycle/index.js +7 -7
- package/dist/blocks/deals/index.d.ts +10 -10
- package/dist/blocks/deals/index.js +11 -11
- package/dist/blocks/dispatch/index.d.ts +20 -22
- package/dist/blocks/dispatch/index.js +17 -17
- package/dist/blocks/documents/index.d.ts +4 -4
- package/dist/blocks/documents/index.js +4 -4
- package/dist/blocks/domains/index.d.ts +7 -7
- package/dist/blocks/domains/index.js +6 -6
- package/dist/blocks/donations/index.d.ts +27 -29
- package/dist/blocks/donations/index.js +36 -28
- package/dist/blocks/drive/index.d.ts +10 -10
- package/dist/blocks/drive/index.js +8 -8
- package/dist/blocks/employees/index.d.ts +204 -7
- package/dist/blocks/employees/index.js +36 -10
- package/dist/blocks/enrichment/index.d.ts +7 -7
- package/dist/blocks/enrichment/index.js +14 -6
- package/dist/blocks/enrollments/index.d.ts +14 -16
- package/dist/blocks/enrollments/index.js +10 -10
- package/dist/blocks/entitlements/index.d.ts +48 -8
- package/dist/blocks/entitlements/index.js +62 -4
- package/dist/blocks/expenses/index.d.ts +8 -8
- package/dist/blocks/expenses/index.js +11 -11
- package/dist/blocks/field-history/index.d.ts +5 -5
- package/dist/blocks/field-history/index.js +3 -5
- package/dist/blocks/flags/index.d.ts +17 -13
- package/dist/blocks/flags/index.js +7 -7
- package/dist/blocks/forecasts/index.d.ts +7 -7
- package/dist/blocks/forecasts/index.js +7 -7
- package/dist/blocks/forms/index.d.ts +144 -12
- package/dist/blocks/forms/index.js +385 -7
- package/dist/blocks/goals/index.d.ts +82 -0
- package/dist/blocks/goals/index.js +72 -0
- package/dist/blocks/guests/index.d.ts +19 -21
- package/dist/blocks/guests/index.js +12 -12
- package/dist/blocks/hiring/index.d.ts +20 -10
- package/dist/blocks/hiring/index.js +10 -9
- package/dist/blocks/identities/index.d.ts +7 -7
- package/dist/blocks/identities/index.js +4 -4
- package/dist/blocks/imports/index.d.ts +8 -8
- package/dist/blocks/imports/index.js +6 -6
- package/dist/blocks/inbox/index.d.ts +137 -8
- package/dist/blocks/inbox/index.js +290 -56
- package/dist/blocks/incidents/index.d.ts +8 -8
- package/dist/blocks/incidents/index.js +7 -7
- package/dist/blocks/index.d.ts +37 -18
- package/dist/blocks/index.js +40 -19
- package/dist/blocks/inventory/index.d.ts +10 -10
- package/dist/blocks/inventory/index.js +6 -6
- package/dist/blocks/invoices/index.d.ts +11 -11
- package/dist/blocks/invoices/index.js +8 -8
- package/dist/blocks/knowledge/index.d.ts +3 -3
- package/dist/blocks/knowledge/index.js +4 -4
- package/dist/blocks/lead-scoring/index.d.ts +11 -11
- package/dist/blocks/lead-scoring/index.js +7 -7
- package/dist/blocks/leases/index.d.ts +16 -73
- package/dist/blocks/leases/index.js +29 -104
- package/dist/blocks/leave/index.d.ts +8 -8
- package/dist/blocks/leave/index.js +5 -5
- package/dist/blocks/ledger/index.d.ts +11 -13
- package/dist/blocks/ledger/index.js +10 -10
- package/dist/blocks/mail-sync/index.d.ts +6 -6
- package/dist/blocks/mail-sync/index.js +18 -10
- package/dist/blocks/memberships/index.d.ts +67 -0
- package/dist/blocks/memberships/index.js +14 -0
- package/dist/blocks/memory/index.d.ts +4 -4
- package/dist/blocks/memory/index.js +8 -8
- package/dist/blocks/messaging/index.d.ts +113 -13
- package/dist/blocks/messaging/index.js +579 -8
- package/dist/blocks/metrics/index.d.ts +7 -7
- package/dist/blocks/metrics/index.js +6 -6
- package/dist/blocks/mfa/index.d.ts +145 -3
- package/dist/blocks/mfa/index.js +211 -2
- package/dist/blocks/moderation/index.d.ts +13 -15
- package/dist/blocks/moderation/index.js +10 -10
- package/dist/blocks/notifications/index.d.ts +67 -15
- package/dist/blocks/notifications/index.js +62 -13
- package/dist/blocks/numbering/index.d.ts +45 -0
- package/dist/blocks/numbering/index.js +49 -0
- package/dist/blocks/oauth-server/index.d.ts +6 -6
- package/dist/blocks/oauth-server/index.js +6 -6
- package/dist/blocks/onboarding/index.d.ts +112 -4
- package/dist/blocks/onboarding/index.js +107 -4
- package/dist/blocks/orders/index.d.ts +35 -14
- package/dist/blocks/orders/index.js +49 -12
- package/dist/blocks/organizations/index.d.ts +452 -6
- package/dist/blocks/organizations/index.js +689 -5
- package/dist/blocks/outbox/index.d.ts +4 -4
- package/dist/blocks/outbox/index.js +19 -6
- package/dist/blocks/passes/index.d.ts +19 -21
- package/dist/blocks/passes/index.js +17 -17
- package/dist/blocks/permissions/index.d.ts +92 -0
- package/dist/blocks/permissions/index.js +127 -0
- package/dist/blocks/pipelines/index.d.ts +15 -15
- package/dist/blocks/pipelines/index.js +12 -12
- package/dist/blocks/posts/index.d.ts +9 -9
- package/dist/blocks/posts/index.js +8 -8
- package/dist/blocks/profiles/index.d.ts +7 -7
- package/dist/blocks/profiles/index.js +5 -5
- package/dist/blocks/promotions/index.d.ts +9 -9
- package/dist/blocks/promotions/index.js +7 -7
- package/dist/blocks/push/index.d.ts +9 -9
- package/dist/blocks/push/index.js +4 -4
- package/dist/blocks/queue/index.d.ts +562 -0
- package/dist/blocks/queue/index.js +1407 -0
- package/dist/blocks/quotes/index.d.ts +29 -14
- package/dist/blocks/quotes/index.js +14 -13
- package/dist/blocks/rank/index.d.ts +7 -7
- package/dist/blocks/rank/index.js +4 -4
- package/dist/blocks/reactions/index.d.ts +154 -5
- package/dist/blocks/reactions/index.js +168 -4
- package/dist/blocks/relations/index.d.ts +36 -38
- package/dist/blocks/relations/index.js +18 -18
- package/dist/blocks/reminders/index.d.ts +16 -16
- package/dist/blocks/reminders/index.js +14 -14
- package/dist/blocks/reviews/index.d.ts +8 -8
- package/dist/blocks/reviews/index.js +6 -6
- package/dist/blocks/saved-views/index.d.ts +311 -4
- package/dist/blocks/saved-views/index.js +437 -2
- package/dist/blocks/scores/index.d.ts +8 -10
- package/dist/blocks/scores/index.js +10 -10
- package/dist/blocks/search/index.d.ts +168 -5
- package/dist/blocks/search/index.js +277 -5
- package/dist/blocks/security-events/index.d.ts +440 -0
- package/dist/blocks/security-events/index.js +885 -0
- package/dist/blocks/segments/index.d.ts +13 -13
- package/dist/blocks/segments/index.js +7 -7
- package/dist/blocks/sequences/index.d.ts +13 -13
- package/dist/blocks/sequences/index.js +16 -10
- package/dist/blocks/service-accounts/index.d.ts +132 -0
- package/dist/blocks/service-accounts/index.js +109 -0
- package/dist/blocks/sessions/index.d.ts +138 -3
- package/dist/blocks/sessions/index.js +173 -2
- package/dist/blocks/settings/index.d.ts +181 -5
- package/dist/blocks/settings/index.js +226 -4
- package/dist/blocks/share-links/index.d.ts +20 -22
- package/dist/blocks/share-links/index.js +16 -16
- package/dist/blocks/shipments/index.d.ts +23 -25
- package/dist/blocks/shipments/index.js +30 -22
- package/dist/blocks/signatures/index.d.ts +9 -9
- package/dist/blocks/signatures/index.js +5 -5
- package/dist/blocks/signing-keys/index.d.ts +4 -4
- package/dist/blocks/signing-keys/index.js +3 -3
- package/dist/blocks/sla/index.d.ts +20 -22
- package/dist/blocks/sla/index.js +22 -16
- package/dist/blocks/sso/index.d.ts +7 -7
- package/dist/blocks/sso/index.js +4 -4
- package/dist/blocks/state-machine/index.d.ts +14 -14
- package/dist/blocks/state-machine/index.js +4 -4
- package/dist/blocks/subjects/index.d.ts +41 -7
- package/dist/blocks/subjects/index.js +187 -5
- package/dist/blocks/tags/index.d.ts +146 -13
- package/dist/blocks/tags/index.js +229 -14
- package/dist/blocks/tasks/index.d.ts +346 -0
- package/dist/blocks/tasks/index.js +626 -0
- package/dist/blocks/teams/index.d.ts +7 -7
- package/dist/blocks/teams/index.js +4 -4
- package/dist/blocks/templates/index.d.ts +18 -18
- package/dist/blocks/templates/index.js +10 -10
- package/dist/blocks/time-tracking/index.d.ts +16 -16
- package/dist/blocks/time-tracking/index.js +13 -13
- package/dist/blocks/timeline/index.d.ts +116 -0
- package/dist/blocks/timeline/index.js +164 -0
- package/dist/blocks/trash/index.d.ts +47 -9
- package/dist/blocks/trash/index.js +9 -7
- package/dist/blocks/undo/index.d.ts +48 -5
- package/dist/blocks/undo/index.js +60 -4
- package/dist/blocks/updated-at/index.d.ts +20 -0
- package/dist/blocks/updated-at/index.js +14 -0
- package/dist/blocks/usage/index.d.ts +39 -5
- package/dist/blocks/usage/index.js +301 -4
- package/dist/blocks/vercel-marketplace/index.d.ts +7 -7
- package/dist/blocks/vercel-marketplace/index.js +8 -8
- package/dist/blocks/versions/index.d.ts +20 -22
- package/dist/blocks/versions/index.js +16 -16
- package/dist/blocks/waitlist/index.d.ts +9 -9
- package/dist/blocks/waitlist/index.js +5 -5
- package/dist/blocks/webhooks/index.d.ts +21 -21
- package/dist/blocks/webhooks/index.js +16 -16
- package/dist/blocks/workflow-editor/index.d.ts +99 -0
- package/dist/blocks/workflow-editor/index.js +744 -0
- package/dist/blocks/workflows/index.d.ts +72 -6
- package/dist/blocks/workflows/index.js +379 -4
- package/dist/bookings-Dox2rced.d.ts +290 -0
- package/dist/bucket-CiNi8sIw.d.ts +666 -0
- package/dist/build-BFC8nFiL.js +797 -0
- package/dist/build-QitPVzzO.js +2073 -0
- package/dist/carrier-KzeYXVrW.d.ts +169 -0
- package/dist/chat-sdk/index.d.ts +8 -8
- package/dist/chat-sdk/index.js +3 -3
- package/dist/claims-DTy6R6my.js +63 -0
- package/dist/cli/add-C04vkBk9.js +99 -0
- package/dist/cli/add-CUH0rORo.js +1 -0
- package/dist/cli/add-DNOL9PDu.js +1257 -0
- package/dist/cli/args-UEwg0l-N.js +27 -0
- package/dist/cli/backfill-VFzf-TJP.js +293 -0
- package/dist/cli/bin.js +1 -1
- package/dist/cli/blocks-Bn7WUca5.js +1 -0
- package/dist/cli/blocks-Cb7mILFU.js +156 -0
- package/dist/cli/cache-DkplpIGe.js +607 -0
- package/dist/cli/codemod-BbaE5dL_.js +2435 -0
- package/dist/cli/codemod-block-renames-BuSaTE_G.js +239 -0
- package/dist/cli/command-CQ61x6gN.js +941 -0
- package/dist/cli/completion-2Y3D_eNu.js +211 -0
- package/dist/cli/completion-BwI0_Ap5.js +30 -0
- package/dist/cli/completion-Dlu5AdUW.js +1 -0
- package/dist/cli/config-9t5ec_N7.js +1642 -0
- package/dist/cli/config-CBqkQjjN.js +1 -0
- package/dist/cli/config-CPux9Wa7.js +47 -0
- package/dist/cli/config-edit-CrWfk8s3.js +621 -0
- package/dist/cli/config-group-C8tjut39.js +391 -0
- package/dist/cli/content-mapper-Cdx6arxu.js +182 -0
- package/dist/cli/db-DrBI_HNv.js +223 -0
- package/dist/cli/detect-D9JaAX20.js +84 -0
- package/dist/cli/dist-D_VbPAMR.js +129 -0
- package/dist/cli/doctor-C-VO-QQ2.js +4576 -0
- package/dist/cli/env-BBl5L8Bf.js +143 -0
- package/dist/cli/env-CAU1nknN.js +1 -0
- package/dist/cli/files-CX71yBm8.js +1010 -0
- package/dist/cli/gen-yRHOHW1b.js +387 -0
- package/dist/cli/in-stack-diff-DQTW53Vf.js +257 -0
- package/dist/cli/index.d.ts +43 -8
- package/dist/cli/index.js +8 -8
- package/dist/cli/init-BOw0SX65.js +440 -0
- package/dist/cli/keys-DGEpMbeB.js +106 -0
- package/dist/cli/legacy-prefix-DkTA3Rhx.js +141 -0
- package/dist/cli/live-Lmg-hYyO.js +341 -0
- package/dist/cli/mcp-DQ1zR2eA.js +249 -0
- package/dist/cli/metadata-CZaxkv21.js +150 -0
- package/dist/cli/migration-safety-BbhLu2fo.js +928 -0
- package/dist/cli/module-migration-DOn6EmNz.js +523 -0
- package/dist/cli/moved-CsfDQcyk.js +254 -0
- package/dist/cli/orphans-BAboqyVM.js +28 -0
- package/dist/cli/parse-B9Iv_-Pf.js +182 -0
- package/dist/cli/preset-BwmIfFnh.js +101 -0
- package/dist/cli/print-D_xf8PPj.js +67 -0
- package/dist/cli/remove-BY_TOTRj.js +239 -0
- package/dist/cli/render-lJmHr0y9.js +2170 -0
- package/dist/cli/run-BJ6IMs_H.js +1440 -0
- package/dist/cli/run-BXx6D1aR.js +63 -0
- package/dist/cli/run-DkB0fhc9.js +702 -0
- package/dist/cli/seed-Cz8PcXeT.js +188 -0
- package/dist/cli/seed-D6XijwbR.js +1 -0
- package/dist/cli/shared-Bh-6IqJS.js +151 -0
- package/dist/cli/skills-toUan_OV.js +121 -0
- package/dist/cli/snapshot-Bzcigm7T.js +729 -0
- package/dist/cli/source-WoLdcQzN.js +320 -0
- package/dist/cli/source-args-IpJRJO5t.js +59 -0
- package/dist/cli/spec-BF_dpwzW.js +1 -0
- package/dist/cli/spec-CZMiLhv_.js +7530 -0
- package/dist/cli/sql-layout-rFP0oq1N.js +247 -0
- package/dist/cli/stack-CWEHdO0b.js +135 -0
- package/dist/cli/sync-mANmYYoL.js +320 -0
- package/dist/cli/upgrade-B0Q9wMs-.js +270 -0
- package/dist/cli/upgrade-BrNLt92u.js +41 -0
- package/dist/cli/version-CyavsyGA.js +4 -0
- package/dist/client/index.d.ts +8 -7
- package/dist/client/index.js +9 -7
- package/dist/client/native/index.d.ts +6 -6
- package/dist/client/native/index.js +3 -3
- package/dist/client-BAEbEA7t.js +287 -0
- package/dist/cloud-event-CzZTJkXv.d.ts +64 -0
- package/dist/codecs-CMWlhHZ0.d.ts +222 -0
- package/dist/codecs-TylXqU_I.js +358 -0
- package/dist/commerce/index.d.ts +3 -3
- package/dist/commerce/index.js +6 -6
- package/dist/compiler-D3UmE7ao.d.ts +14 -0
- package/dist/compose-DKW0Tr3e.js +53 -0
- package/dist/composite-B3TIjId4.js +130 -0
- package/dist/composite-BZYXlVBN.d.ts +82 -0
- package/dist/config/index.d.ts +6 -7
- package/dist/config/index.js +6 -6
- package/dist/config-CcehOvbz.js +1698 -0
- package/dist/config-DWGgUQCh.js +1108 -0
- package/dist/connectors-Fud4amxp.d.ts +147 -0
- package/dist/context-DBicfUNz.js +41 -0
- package/dist/context-TGX2eDS5.d.ts +4151 -0
- package/dist/controller-BNZKd6bJ.js +73 -0
- package/dist/controller-DyPPMFSw.d.ts +52 -0
- package/dist/conversion-Dq1S7xzE.js +77 -0
- package/dist/conversion-O-kyhXcC.d.ts +86 -0
- package/dist/create/index.d.ts +19 -21
- package/dist/create/index.js +21 -22
- package/dist/create/lite/index.d.ts +2 -2
- package/dist/create/supabase/index.d.ts +2 -2
- package/dist/create/supabase/index.js +2 -2
- package/dist/create-blocks-Bu4H5TXw.js +352 -0
- package/dist/credentials/index.d.ts +5 -5
- package/dist/credentials/index.js +6 -6
- package/dist/cron-CgHTKwYG.js +148 -0
- package/dist/cron-route-UU9i5i9J.js +24 -0
- package/dist/data-engine-BWoz9lED.d.ts +273 -0
- package/dist/data-engine-D1BkmBoR.js +173 -0
- package/dist/data-hooks-tgF1Ct0F.js +280 -0
- package/dist/db-blocks-DJGbjIPz.js +62 -0
- package/dist/deal-forecast-Bv52QMyX.js +39 -0
- package/dist/define-DFBnQyYg.d.ts +1255 -0
- package/dist/define-DlUeKHce.js +2011 -0
- package/dist/define-block-BGqOO8B3.js +64 -0
- package/dist/define-block-DvvcM54N.d.ts +1657 -0
- package/dist/delegation-C7eWP2r8.d.ts +14 -0
- package/dist/delegation-DGOIiT8k.js +153 -0
- package/dist/documents-Cup1rpjF.d.ts +152 -0
- package/dist/edge/index.d.ts +20 -20
- package/dist/edge/index.js +14 -14
- package/dist/elysia/index.d.ts +1 -1
- package/dist/elysia/index.js +1 -1
- package/dist/embeddings-D_RsS6ow.d.ts +78 -0
- package/dist/ended-gUsMZVNg.d.ts +26 -0
- package/dist/entitlements-BnhDBxLW.d.ts +54 -0
- package/dist/entitlements-NZAE_vLj.js +45 -0
- package/dist/entity-naming-Dtyq5sKE.js +131 -0
- package/dist/entity-schema-BDv6w-OQ.js +39 -0
- package/dist/envelope-DEI2iX-d.js +90 -0
- package/dist/errors-BVFgt8BZ.js +328 -0
- package/dist/errors-CyxMxzlu.js +44 -0
- package/dist/escape-like-PReMbEEU.d.ts +30 -0
- package/dist/eve/index.d.ts +5 -5
- package/dist/eve/index.js +3 -3
- package/dist/eve-B7jxYPCw.d.ts +157 -0
- package/dist/event-calendar-DCufbihU.d.ts +65 -0
- package/dist/events/index.d.ts +3 -4
- package/dist/events-vcqenSYU.d.ts +852 -0
- package/dist/executor-3qcMhg6R.js +207 -0
- package/dist/executor-BQ7dYw4E.js +843 -0
- package/dist/executor-Bi056Cnj.d.ts +104 -0
- package/dist/executor-CVIn6JHa.d.ts +174 -0
- package/dist/executor-D3gB-9si.js +486 -0
- package/dist/executor-hGjrop3A.d.ts +37 -0
- package/dist/expo/index.d.ts +12 -11
- package/dist/expo/index.js +11 -10
- package/dist/extension-B-lajjex.js +58 -0
- package/dist/extension-B0EjCYhO.js +61 -0
- package/dist/extension-DeAd_MqI.js +121 -0
- package/dist/extension-DzCc0IOd.js +103 -0
- package/dist/extension-shared-Djm8mGHD.js +60 -0
- package/dist/field-errors-DYtg1mwv.d.ts +216 -0
- package/dist/field-formats-CAFNkKSN.d.ts +38 -0
- package/dist/fields-B0zaJAO3.js +107 -0
- package/dist/fields-C3q2ypnO.d.ts +78 -0
- package/dist/filter-evaluate-CPxeae5X.d.ts +37 -0
- package/dist/filter-evaluate-w1XOIUOL.js +217 -0
- package/dist/filter-query-BXLs72G9.d.ts +133 -0
- package/dist/filter-query-DMoKo82_.js +566 -0
- package/dist/flags-BOdA_ETQ.js +279 -0
- package/dist/flags-C01PLMJ-.d.ts +246 -0
- package/dist/flags-sdk/index.d.ts +1 -1
- package/dist/flags-sdk/index.js +2 -2
- package/dist/format-u-65igKI.d.ts +79 -0
- package/dist/framework-BozTXRzt.js +58 -0
- package/dist/framework-h5lP_5yj.d.ts +47 -0
- package/dist/function-contract-DxFNOmsm.d.ts +27 -0
- package/dist/gateway-DzI687yd.d.ts +115 -0
- package/dist/h3/index.d.ts +2 -4
- package/dist/h3/index.js +2 -4
- package/dist/h3/v1/index.d.ts +2 -3
- package/dist/h3/v1/index.js +2 -3
- package/dist/hono/index.d.ts +27 -21
- package/dist/hono/index.js +22 -20
- package/dist/http-7-UvHjQe.js +28 -0
- package/dist/impersonation-DM3oWNoD.js +62 -0
- package/dist/inbox-NDKwSk_H.d.ts +321 -0
- package/dist/index-Ab4UeEn_.d.ts +633 -0
- package/dist/index-B4gcStOz.d.ts +158 -0
- package/dist/index-BAHGLvGD.d.ts +262 -0
- package/dist/index-BfK6olKm.d.ts +546 -0
- package/dist/index-BfkltrGJ.d.ts +588 -0
- package/dist/index-BxYOB1Oc.d.ts +149 -0
- package/dist/index-CG9rA8H8.d.ts +407 -0
- package/dist/index-DN9mfmhA.d.ts +188 -0
- package/dist/index-Do2ChN_y.d.ts +287 -0
- package/dist/index.d.ts +39 -17
- package/dist/index.js +94 -16
- package/dist/instances-BHjCZoF8.js +277 -0
- package/dist/invalidate-DMp4eqfF.d.ts +21 -0
- package/dist/json-schema-Ca6gYbEP.js +888 -0
- package/dist/jwks-cache-DEsKI0hJ.js +49 -0
- package/dist/kit-5l-o8RxL.js +133 -0
- package/dist/kit-DOwKpSkA.d.ts +94 -0
- package/dist/knowledge-BGbtxMP9.js +300 -0
- package/dist/knowledge-F1IhRI4Q.d.ts +217 -0
- package/dist/lint/index.d.ts +94 -11
- package/dist/lint/index.js +268 -26
- package/dist/list/index.d.ts +4 -4
- package/dist/list/index.js +3 -3
- package/dist/list-query-BDVutLFr.d.ts +222 -0
- package/dist/list-query-BKy2zBaT.js +559 -0
- package/dist/live-C21DgbsD.js +275 -0
- package/dist/mapper/bin.js +380 -0
- package/dist/mcp/index.d.ts +8 -8
- package/dist/mcp/index.js +11 -11
- package/dist/mcp/sdk/index.d.ts +10 -10
- package/dist/mcp/sdk/index.js +11 -11
- package/dist/messages-D4XWuRTj.js +492 -0
- package/dist/messaging-C_Pr9tGx.d.ts +297 -0
- package/dist/methods-B3o7BFOW.js +11 -0
- package/dist/mfa-oIOYTpvc.d.ts +36 -0
- package/dist/model-hwpvole9.d.ts +340 -0
- package/dist/model-messages-CKG0zwdF.js +206 -0
- package/dist/money-codec-BzddguAQ.js +41 -0
- package/dist/nestjs/index.d.ts +3 -3
- package/dist/nestjs/index.js +2 -2
- package/dist/next/index.d.ts +244 -205
- package/dist/next/index.js +288 -197
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +6 -8
- package/dist/operations-CSc_IsHO.d.ts +6 -0
- package/dist/options-0qvUckqt.js +9 -0
- package/dist/options-1GgseJq5.js +10 -0
- package/dist/options-21s0dpnX.js +9 -0
- package/dist/options-B-cxGmRA.js +5 -0
- package/dist/options-B0EJULm5.js +5 -0
- package/dist/options-B2swWnJW.js +9 -0
- package/dist/options-BMGClqoa.js +11 -0
- package/dist/options-BQIYfx9F.js +9 -0
- package/dist/options-BVg58avP.js +5 -0
- package/dist/options-BbnPv6p7.js +12 -0
- package/dist/options-BfLmA375.js +5 -0
- package/dist/options-BlncUmIc.js +9 -0
- package/dist/options-BlzSfWxC.d.ts +10 -0
- package/dist/options-BnZS7IK-.js +9 -0
- package/dist/options-Bt0bYMLl.js +24 -0
- package/dist/options-BvtnxHfK.js +24 -0
- package/dist/options-C-dQHH5-.js +8 -0
- package/dist/options-C3RgtOLo.js +5 -0
- package/dist/options-CE93HOYi.d.ts +7 -0
- package/dist/options-CM6-18FQ.d.ts +13 -0
- package/dist/options-CPK2nQER.js +5 -0
- package/dist/options-CRz8Ht_4.js +9 -0
- package/dist/options-CW9wTqOk.js +11 -0
- package/dist/options-Cl9Ag2Pt.js +8 -0
- package/dist/options-Cp0HyUEk.js +9 -0
- package/dist/options-Cqq2jUww.js +10 -0
- package/dist/options-CsGl5BLH.d.ts +52 -0
- package/dist/options-CtUUU71w.js +20 -0
- package/dist/options-CvD9vNvx.js +9 -0
- package/dist/options-CyAhRKKm.d.ts +14 -0
- package/dist/options-D0G06Zm9.js +8 -0
- package/dist/options-D6as77gU.d.ts +16 -0
- package/dist/options-DChZoVfs.d.ts +11 -0
- package/dist/options-DINdgVih.d.ts +9 -0
- package/dist/options-DPgdAXO5.js +11 -0
- package/dist/options-DWVYM8P0.d.ts +17 -0
- package/dist/options-DWbA9buW.js +9 -0
- package/dist/options-DXnBN2E7.js +8 -0
- package/dist/options-D_bBVCXg.js +5 -0
- package/dist/options-DcOx8_3X.d.ts +19 -0
- package/dist/options-DeNejBtq.js +8 -0
- package/dist/options-DgQo80Xh.js +5 -0
- package/dist/options-DplE18Ko.d.ts +12 -0
- package/dist/options-HLwOuF2H.js +10 -0
- package/dist/options-KV84gAxl.js +10 -0
- package/dist/options-Li1Dyu88.d.ts +10 -0
- package/dist/options-Q1Bzgqpr.js +5 -0
- package/dist/options-_F-enoBs.d.ts +26 -0
- package/dist/options-c5WCsky5.js +21 -0
- package/dist/options-nFzfgtA6.js +5 -0
- package/dist/options-pOVWwbAK.d.ts +10 -0
- package/dist/options-y_-AkVCs.d.ts +15 -0
- package/dist/orpc/index.d.ts +69 -71
- package/dist/orpc/index.js +161 -27
- package/dist/otel/index.d.ts +3 -3
- package/dist/otel/index.js +6 -6
- package/dist/outbox-HxjZTfF6.d.ts +199 -0
- package/dist/payments-BXvabJOw.js +16 -0
- package/dist/payments-BYcN34Fp.d.ts +114 -0
- package/dist/permissions-controller-BMsqIE5T.js +34 -0
- package/dist/plugin-AKwwe2gF.js +48 -0
- package/dist/pool-CrtT4dg-.d.ts +123 -0
- package/dist/pool-errors-JUBcGrre.js +27 -0
- package/dist/ports-CpdiQv1D.d.ts +89 -0
- package/dist/ports-DOhtuw3c.js +152 -0
- package/dist/postgres/index.d.ts +5 -5
- package/dist/postgres/index.js +3 -3
- package/dist/postgrest-executor-BFW4oWte.js +1064 -0
- package/dist/postgrest-z-T0l23T.d.ts +53 -0
- package/dist/powersync/index.d.ts +106 -7
- package/dist/powersync/index.js +123 -7
- package/dist/preset/index.d.ts +4 -4
- package/dist/preset/index.js +4 -4
- package/dist/preset-CsHnIBJF.js +875 -0
- package/dist/problem-Bf0cJ7tk.js +162 -0
- package/dist/problem-DNwN8iGz.d.ts +79 -0
- package/dist/provider-B6g7rBZX.js +57 -0
- package/dist/provider-CqwEOLCA.d.ts +112 -0
- package/dist/push-token-B3m3pWAv.d.ts +24 -0
- package/dist/queries-BWYYS9um.js +239 -0
- package/dist/query/index.d.ts +4 -4
- package/dist/query/index.js +114 -48
- package/dist/rank-result-BBJIK-k_.js +18 -0
- package/dist/rank-result-Bwe7igy-.d.ts +14 -0
- package/dist/rate-limit-BWKGlhTM.js +49 -0
- package/dist/rate-limit-Bztf32cl.d.ts +50 -0
- package/dist/rate-limit-o44SYkVY.js +327 -0
- package/dist/react/index.d.ts +10 -9
- package/dist/react/index.js +5 -5
- package/dist/react/native/index.d.ts +1 -1
- package/dist/react/native/index.js +2 -3
- package/dist/react/server.d.ts +47 -15
- package/dist/react/server.js +46 -11
- package/dist/react/session.d.ts +3 -3
- package/dist/react-BuDYI62C.js +979 -0
- package/dist/react-router/index.d.ts +13 -10
- package/dist/react-router/index.js +10 -10
- package/dist/read-set-BnKnofIj.js +199 -0
- package/dist/realtime/index.d.ts +7 -7
- package/dist/realtime/index.js +4 -4
- package/dist/record-bindings-DkBJpC5A.js +26 -0
- package/dist/record-form-DB_5Ue_B.d.ts +82 -0
- package/dist/record-type-DRbnlj5q.js +221 -0
- package/dist/recordings-BBSJt_YV.d.ts +119 -0
- package/dist/records/index.d.ts +28 -28
- package/dist/records/index.js +22 -23
- package/dist/refresh-DT_ICaK-.d.ts +54 -0
- package/dist/refusal-ByBZcm0V.js +64 -0
- package/dist/refusal-CSntB_x8.d.ts +32 -0
- package/dist/replicas-Dyoh3CEg.js +94 -0
- package/dist/resolve-B0mW2m7f.js +932 -0
- package/dist/resolve-CXX6DHv3.d.ts +288 -0
- package/dist/resource-D8pzB5Qf.d.ts +123 -0
- package/dist/resource-DV2GC2dB.js +520 -0
- package/dist/resource-DvgXqZB_.js +105 -0
- package/dist/resource-execute-CzHuDsil.d.ts +15 -0
- package/dist/resource-types-DnKiH4G2.d.ts +157 -0
- package/dist/resources-B9cQxhjw.d.ts +7 -0
- package/dist/resources-C02l_YBJ.js +64 -0
- package/dist/respond-C3CcOZlA.js +100 -0
- package/dist/respond-Dn1_YhC1.d.ts +106 -0
- package/dist/result-DZeA5KS6.d.ts +351 -0
- package/dist/result-ntFBW2p2.js +146 -0
- package/dist/rows-BDLZStp4.js +80 -0
- package/dist/rows-Bm6sskji.js +39 -0
- package/dist/rrule-79K2c3Nr.js +290 -0
- package/dist/run-state-BMCD_1Lt.d.ts +13 -0
- package/dist/sales-lines-Bk4mbLH1.d.ts +37 -0
- package/dist/sales-lines-D-sf9PIB.js +43 -0
- package/dist/sales-shared-DXGFJP4g.js +22 -0
- package/dist/schemas-l2aF78zQ.js +216 -0
- package/dist/scores-B2BiNuVJ.d.ts +174 -0
- package/dist/scores-CRp3vvQU.js +177 -0
- package/dist/server/index.d.ts +104 -42
- package/dist/server/index.js +99 -30
- package/dist/server-types-7QPzW2bF.d.ts +946 -0
- package/dist/session-CfBCJGgc.d.ts +99 -0
- package/dist/shared-C47zAh2A.js +17 -0
- package/dist/sign-in-B64114O4.js +608 -0
- package/dist/sign-in-BAjR49fq.d.ts +24 -0
- package/dist/sign-in-BsIaNx2C.js +392 -0
- package/dist/signatures-CNcoq392.js +145 -0
- package/dist/signatures-Dkx9OE8j.d.ts +43 -0
- package/dist/signers-BAEzvTJ0.d.ts +390 -0
- package/dist/signing-keys-BNDUxpQL.d.ts +119 -0
- package/dist/signing-keys-wGKh4vtt.js +164 -0
- package/dist/solid/index.d.ts +52 -18
- package/dist/solid/index.js +69 -11
- package/dist/solid-start/index.d.ts +11 -11
- package/dist/solid-start/index.js +8 -8
- package/dist/spec/index.d.ts +691 -10
- package/dist/spec/index.js +2487 -5
- package/dist/spec-DTWkHzYZ.js +124 -0
- package/dist/spec-pins-C1Vm8OBl.js +61 -0
- package/dist/spec-pins-DIx95afw.d.ts +125 -0
- package/dist/sql/index.d.ts +5 -5
- package/dist/sql/index.js +5 -5
- package/dist/sql-BPbbPzRJ.js +421 -0
- package/dist/sql-OLVW4t08.js +127258 -0
- package/dist/sqlite/index.d.ts +126 -0
- package/dist/sqlite/index.js +197 -0
- package/dist/sso-B0Txid2-.d.ts +161 -0
- package/dist/sso-d2S4x_f9.js +217 -0
- package/dist/ssr/index.d.ts +5 -4
- package/dist/ssr/index.js +3 -3
- package/dist/standard-BA3mLh6w.js +25 -0
- package/dist/standard-DBV730sF.d.ts +7 -0
- package/dist/stats-BHl1-zj9.js +83 -0
- package/dist/storage/index.d.ts +3 -3
- package/dist/storage/index.js +10 -10
- package/dist/store-CpheI-lN.d.ts +83 -0
- package/dist/streams/index.d.ts +3 -3
- package/dist/streams/index.js +2 -2
- package/dist/streams/redis/index.d.ts +2 -2
- package/dist/streams/redis/index.js +3 -3
- package/dist/subject-readers-8GySC9Z8.d.ts +21 -0
- package/dist/subject-readers-B-pQ9Mmo.js +49 -0
- package/dist/subjects-BpIEN1MS.d.ts +90 -0
- package/dist/subjects-DvmQeF_F.d.ts +79 -0
- package/dist/support-view-BYOgwXsJ.d.ts +17 -0
- package/dist/svelte/index.d.ts +52 -15
- package/dist/svelte/index.js +87 -11
- package/dist/sveltekit/index.d.ts +13 -13
- package/dist/sveltekit/index.js +13 -13
- package/dist/table-schema-BlF6k62Q.d.ts +81 -0
- package/dist/table-schema-CD8cJz_M.js +293 -0
- package/dist/tags-BjHflcHF.d.ts +30 -0
- package/dist/tags-CIZTqtlY.js +39 -0
- package/dist/tanstack-db/index.d.ts +50 -6
- package/dist/tanstack-db/index.js +43 -2
- package/dist/tanstack-start/index.d.ts +9 -9
- package/dist/tanstack-start/index.js +9 -9
- package/dist/tax-BkCNWWMc.js +140 -0
- package/dist/tax-DPShHual.d.ts +170 -0
- package/dist/tee-V97_v1ZS.js +101 -0
- package/dist/template-Drgg3v2J.js +126 -0
- package/dist/temporal-required-Dy0GGD8E.js +20 -0
- package/dist/tenant-BgIiMQpo.js +27 -0
- package/dist/tenant-DzFsg0Pc.d.ts +17 -0
- package/dist/testing/index.d.ts +77 -75
- package/dist/testing/index.js +89 -99
- package/dist/timeline--VU3A1e4.js +50 -0
- package/dist/timeline-WrFMgd3U.d.ts +151 -0
- package/dist/timing-dypS0nxW.js +95 -0
- package/dist/topic-DNFEFGKI.d.ts +415 -0
- package/dist/topic-ikV_pLTX.js +643 -0
- package/dist/types-A4yyKEsg.d.ts +217 -0
- package/dist/types-Czq9Xtpa.d.ts +618 -0
- package/dist/types-DFdg_4yN.d.ts +912 -0
- package/dist/types-Dp3UCr1e.d.ts +194 -0
- package/dist/types-Dr9wZgNy.d.ts +251 -0
- package/dist/types-DsRfiQ0v.d.ts +659 -0
- package/dist/types-EO2crSX_.d.ts +177 -0
- package/dist/undo-B1jwnVyN.d.ts +46 -0
- package/dist/undo-BjCChCmH.js +44 -0
- package/dist/upload-claim-B1ZU8ydB.js +33 -0
- package/dist/usage-Dp45V42p.d.ts +232 -0
- package/dist/user-change-DgWC6RRC.js +135 -0
- package/dist/variants-Cy--Ub-a.js +53 -0
- package/dist/vault-O-YlAyHb.d.ts +62 -0
- package/dist/vercel-connect/index.d.ts +1 -1
- package/dist/vercel-connect/index.js +3 -3
- package/dist/verify-CMou8dWZ.d.ts +146 -0
- package/dist/verify-ZLFUdlqE.js +130 -0
- package/dist/view-C8Ve14ja.js +247 -0
- package/dist/view-DyFdMCqg.d.ts +97 -0
- package/dist/vue/index.d.ts +52 -23
- package/dist/vue/index.js +77 -14
- package/dist/watch-topic-Bo9S2R4P.d.ts +31 -0
- package/dist/wiring-CDNuQoJJ.js +13 -0
- package/dist/workflow-sdk/builder/index.d.ts +12 -12
- package/dist/workflow-sdk/builder/index.js +16 -17
- package/dist/workflow-sdk/index.d.ts +18 -15
- package/dist/workflow-sdk/index.js +2 -2
- package/dist/workflow-sdk/world/index.d.ts +6 -6
- package/dist/workflow-sdk/world/index.js +12 -12
- package/dist/workflow-sdk-B3Ss55Fy.d.ts +163 -0
- package/dist/workflow-sdk-Bw6_u0ar.js +2446 -0
- package/dist/workflow-sdk-Cf0LAOFF.js +242 -0
- package/dist/workflows-B0ZPAQu0.d.ts +255 -0
- package/dist/yjs/index.d.ts +3 -3
- package/dist/yjs/index.js +2 -2
- package/package.json +75 -623
- package/schemas/config-v1.json +2082 -1754
- package/schemas/design-v1.json +141 -5
- package/schemas/doctor-report-v1.json +15 -0
- package/skills/better-supabase/SKILL.md +70 -28
- package/skills/better-supabase/references/block-extensions.md +64 -0
- package/skills/better-supabase/references/frontend.md +29 -26
- package/skills/better-supabase/references/troubleshooting.md +3 -3
- package/skills/better-supabase/references/ui-recipes.md +267 -134
- package/skills/better-supabase-api/SKILL.md +49 -38
- package/skills/better-supabase-api/references/adapters.md +42 -39
- package/skills/better-supabase-api/references/ai.md +4 -4
- package/skills/better-supabase-api/references/expo.md +8 -8
- package/skills/better-supabase-api/references/powersync.md +20 -13
- package/skills/better-supabase-api/references/streams-credentials.md +3 -3
- package/skills/better-supabase-auth/SKILL.md +17 -17
- package/skills/better-supabase-auth/references/authorization-providers.md +8 -6
- package/skills/better-supabase-testing/SKILL.md +8 -8
- package/dist/access-sql-CPoq9F86.js +0 -207
- package/dist/access-z7NwWtqx.js +0 -34
- package/dist/actor-hNajGNEK.js +0 -150
- package/dist/adapter-BCFAg58A.js +0 -2190
- package/dist/agents-CmZlLPXC.d.ts +0 -117
- package/dist/ai-cache-BxlOkc_M.d.ts +0 -82
- package/dist/ai-cache-DQikwXhJ.js +0 -87
- package/dist/ai-chat-DBxEz3o1.d.ts +0 -619
- package/dist/ai-files-t-kHmS5H.js +0 -339
- package/dist/ai-tasks-BDywBUgN.d.ts +0 -166
- package/dist/announcements-BeOD0zbc.js +0 -128
- package/dist/api-CWhpq24a.d.ts +0 -174
- package/dist/api-DKp2Ggz_.js +0 -685
- package/dist/api-keys-CboAenU8.d.ts +0 -213
- package/dist/api-keys-DT6Fi50R.js +0 -318
- package/dist/app-tables-BHrzAUFJ.d.ts +0 -27
- package/dist/app-tables-C5aoI5rZ.js +0 -959
- package/dist/approvals-bMb7dsBY.d.ts +0 -129
- package/dist/arazzo/index.d.ts +0 -278
- package/dist/arazzo/index.js +0 -630
- package/dist/assistant-D1yev_fR.d.ts +0 -157
- package/dist/asyncapi/index.d.ts +0 -110
- package/dist/asyncapi/index.js +0 -572
- package/dist/attachments-Cjdgarpa.js +0 -351
- package/dist/attributes-BOFl922R.js +0 -44
- package/dist/audit-log-C3rQxeHd.js +0 -788
- package/dist/auth-reply-jVKoAV6R.js +0 -31
- package/dist/authorization-BuT26_sR.d.ts +0 -3455
- package/dist/authorization-hooks-dLmUO_PZ.d.ts +0 -217
- package/dist/authorizer-DFP3gHv8.d.ts +0 -82
- package/dist/authorizer-DPTeL-7h.js +0 -125
- package/dist/availability-q3dZoZYM.d.ts +0 -226
- package/dist/bind-Dz8y3T5T.d.ts +0 -95
- package/dist/block-authors-BRTlT0qv.js +0 -14
- package/dist/block-controller-DTGuBemi.js +0 -112
- package/dist/block-env-DJiUu1fq.js +0 -35
- package/dist/block-env-kFcaaJLM.d.ts +0 -10
- package/dist/block-env-options-2e6IQrSw.js +0 -26
- package/dist/block-events-records-BGVyoz57.d.ts +0 -343
- package/dist/block-fields-3w4MZr8U.d.ts +0 -58
- package/dist/block-fields-DBSJSeaO.js +0 -139
- package/dist/block-helpers-BaugZlJV.d.ts +0 -62
- package/dist/block-helpers-CiKtrb6g.js +0 -353
- package/dist/block-hooks-BymdcD0V.js +0 -130
- package/dist/block-hooks-CmjPKqQ_.d.ts +0 -117
- package/dist/block-method-Bvsao626.js +0 -21
- package/dist/block-method-hsPAGFi5.d.ts +0 -19
- package/dist/block-names-Dbv_2wmE.js +0 -66
- package/dist/block-subjects-Dzq5Xn_0.js +0 -55
- package/dist/block-subjects-FHwLlIHU.d.ts +0 -6
- package/dist/block-tenant-C1sNV8_4.js +0 -14
- package/dist/block-transport-d53POsem.d.ts +0 -69
- package/dist/blocks/access/index.d.ts +0 -9
- package/dist/blocks/access/index.js +0 -18
- package/dist/blocks/access/react/index.d.ts +0 -52
- package/dist/blocks/access/react/index.js +0 -73
- package/dist/blocks/access/react/server.d.ts +0 -11
- package/dist/blocks/access/react/server.js +0 -16
- package/dist/blocks/access/solid/index.d.ts +0 -13
- package/dist/blocks/access/solid/index.js +0 -14
- package/dist/blocks/access/svelte/index.d.ts +0 -13
- package/dist/blocks/access/svelte/index.js +0 -14
- package/dist/blocks/access/vue/index.d.ts +0 -13
- package/dist/blocks/access/vue/index.js +0 -14
- package/dist/blocks/activity/index.d.ts +0 -116
- package/dist/blocks/activity/index.js +0 -164
- package/dist/blocks/ai-chat/react/index.d.ts +0 -52
- package/dist/blocks/ai-chat/react/index.js +0 -95
- package/dist/blocks/ai-chat/react/server.d.ts +0 -25
- package/dist/blocks/ai-chat/react/server.js +0 -23
- package/dist/blocks/ai-chat/solid/index.d.ts +0 -34
- package/dist/blocks/ai-chat/solid/index.js +0 -41
- package/dist/blocks/ai-chat/svelte/index.d.ts +0 -34
- package/dist/blocks/ai-chat/svelte/index.js +0 -41
- package/dist/blocks/ai-chat/vue/index.d.ts +0 -34
- package/dist/blocks/ai-chat/vue/index.js +0 -41
- package/dist/blocks/ai-providers/index.d.ts +0 -22
- package/dist/blocks/ai-providers/index.js +0 -236
- package/dist/blocks/ai-tasks/index.d.ts +0 -10
- package/dist/blocks/ai-tasks/index.js +0 -252
- package/dist/blocks/announcements/react/index.d.ts +0 -28
- package/dist/blocks/announcements/react/index.js +0 -38
- package/dist/blocks/announcements/react/server.d.ts +0 -9
- package/dist/blocks/announcements/react/server.js +0 -10
- package/dist/blocks/announcements/solid/index.d.ts +0 -13
- package/dist/blocks/announcements/solid/index.js +0 -14
- package/dist/blocks/announcements/svelte/index.d.ts +0 -13
- package/dist/blocks/announcements/svelte/index.js +0 -14
- package/dist/blocks/announcements/vue/index.d.ts +0 -13
- package/dist/blocks/announcements/vue/index.js +0 -14
- package/dist/blocks/api-keys/react/index.d.ts +0 -32
- package/dist/blocks/api-keys/react/index.js +0 -43
- package/dist/blocks/api-keys/react/server.d.ts +0 -7
- package/dist/blocks/api-keys/react/server.js +0 -7
- package/dist/blocks/api-keys/solid/index.d.ts +0 -13
- package/dist/blocks/api-keys/solid/index.js +0 -14
- package/dist/blocks/api-keys/svelte/index.d.ts +0 -13
- package/dist/blocks/api-keys/svelte/index.js +0 -14
- package/dist/blocks/api-keys/vue/index.d.ts +0 -13
- package/dist/blocks/api-keys/vue/index.js +0 -14
- package/dist/blocks/attachments/react/index.d.ts +0 -53
- package/dist/blocks/attachments/react/index.js +0 -78
- package/dist/blocks/attachments/react/server.d.ts +0 -9
- package/dist/blocks/attachments/react/server.js +0 -10
- package/dist/blocks/attachments/solid/index.d.ts +0 -13
- package/dist/blocks/attachments/solid/index.js +0 -14
- package/dist/blocks/attachments/svelte/index.d.ts +0 -13
- package/dist/blocks/attachments/svelte/index.js +0 -14
- package/dist/blocks/attachments/vue/index.d.ts +0 -13
- package/dist/blocks/attachments/vue/index.js +0 -14
- package/dist/blocks/audit/react/index.d.ts +0 -31
- package/dist/blocks/audit/react/index.js +0 -46
- package/dist/blocks/audit/react/server.d.ts +0 -7
- package/dist/blocks/audit/react/server.js +0 -7
- package/dist/blocks/audit/solid/index.d.ts +0 -13
- package/dist/blocks/audit/solid/index.js +0 -14
- package/dist/blocks/audit/svelte/index.d.ts +0 -13
- package/dist/blocks/audit/svelte/index.js +0 -14
- package/dist/blocks/audit/vue/index.d.ts +0 -13
- package/dist/blocks/audit/vue/index.js +0 -14
- package/dist/blocks/billing/react/index.d.ts +0 -44
- package/dist/blocks/billing/react/index.js +0 -40
- package/dist/blocks/billing/react/server.d.ts +0 -10
- package/dist/blocks/billing/react/server.js +0 -10
- package/dist/blocks/billing/solid/index.d.ts +0 -15
- package/dist/blocks/billing/solid/index.js +0 -14
- package/dist/blocks/billing/svelte/index.d.ts +0 -15
- package/dist/blocks/billing/svelte/index.js +0 -14
- package/dist/blocks/billing/vue/index.d.ts +0 -15
- package/dist/blocks/billing/vue/index.js +0 -14
- package/dist/blocks/bookings/react/index.d.ts +0 -36
- package/dist/blocks/bookings/react/index.js +0 -63
- package/dist/blocks/bookings/react/server.d.ts +0 -9
- package/dist/blocks/bookings/react/server.js +0 -10
- package/dist/blocks/bookings/solid/index.d.ts +0 -13
- package/dist/blocks/bookings/solid/index.js +0 -14
- package/dist/blocks/bookings/svelte/index.d.ts +0 -13
- package/dist/blocks/bookings/svelte/index.js +0 -14
- package/dist/blocks/bookings/vue/index.d.ts +0 -13
- package/dist/blocks/bookings/vue/index.js +0 -14
- package/dist/blocks/calendar/react/index.d.ts +0 -26
- package/dist/blocks/calendar/react/index.js +0 -58
- package/dist/blocks/calendar/react/server.d.ts +0 -9
- package/dist/blocks/calendar/react/server.js +0 -10
- package/dist/blocks/calendar/solid/index.d.ts +0 -13
- package/dist/blocks/calendar/solid/index.js +0 -14
- package/dist/blocks/calendar/svelte/index.d.ts +0 -13
- package/dist/blocks/calendar/svelte/index.js +0 -14
- package/dist/blocks/calendar/vue/index.d.ts +0 -13
- package/dist/blocks/calendar/vue/index.js +0 -14
- package/dist/blocks/comments/react/index.d.ts +0 -32
- package/dist/blocks/comments/react/index.js +0 -56
- package/dist/blocks/comments/react/server.d.ts +0 -7
- package/dist/blocks/comments/react/server.js +0 -7
- package/dist/blocks/comments/solid/index.d.ts +0 -13
- package/dist/blocks/comments/solid/index.js +0 -14
- package/dist/blocks/comments/svelte/index.d.ts +0 -13
- package/dist/blocks/comments/svelte/index.js +0 -14
- package/dist/blocks/comments/vue/index.d.ts +0 -13
- package/dist/blocks/comments/vue/index.js +0 -14
- package/dist/blocks/controls/index.d.ts +0 -325
- package/dist/blocks/controls/index.js +0 -410
- package/dist/blocks/engagements/index.d.ts +0 -41
- package/dist/blocks/engagements/index.js +0 -414
- package/dist/blocks/entitlements/react/index.d.ts +0 -27
- package/dist/blocks/entitlements/react/index.js +0 -35
- package/dist/blocks/entitlements/react/server.d.ts +0 -9
- package/dist/blocks/entitlements/react/server.js +0 -10
- package/dist/blocks/entitlements/solid/index.d.ts +0 -13
- package/dist/blocks/entitlements/solid/index.js +0 -14
- package/dist/blocks/entitlements/svelte/index.d.ts +0 -13
- package/dist/blocks/entitlements/svelte/index.js +0 -14
- package/dist/blocks/entitlements/vue/index.d.ts +0 -13
- package/dist/blocks/entitlements/vue/index.js +0 -14
- package/dist/blocks/forms/react/index.d.ts +0 -19
- package/dist/blocks/forms/react/index.js +0 -28
- package/dist/blocks/forms/react/server.d.ts +0 -9
- package/dist/blocks/forms/react/server.js +0 -10
- package/dist/blocks/forms/solid/index.d.ts +0 -13
- package/dist/blocks/forms/solid/index.js +0 -14
- package/dist/blocks/forms/svelte/index.d.ts +0 -13
- package/dist/blocks/forms/svelte/index.js +0 -14
- package/dist/blocks/forms/vue/index.d.ts +0 -13
- package/dist/blocks/forms/vue/index.js +0 -14
- package/dist/blocks/inbox/react/index.d.ts +0 -3
- package/dist/blocks/inbox/react/index.js +0 -87
- package/dist/blocks/inbox/react/server.d.ts +0 -17
- package/dist/blocks/inbox/react/server.js +0 -18
- package/dist/blocks/inbox/solid/index.d.ts +0 -27
- package/dist/blocks/inbox/solid/index.js +0 -32
- package/dist/blocks/inbox/svelte/index.d.ts +0 -27
- package/dist/blocks/inbox/svelte/index.js +0 -32
- package/dist/blocks/inbox/vue/index.d.ts +0 -27
- package/dist/blocks/inbox/vue/index.js +0 -32
- package/dist/blocks/jobs/index.d.ts +0 -523
- package/dist/blocks/jobs/index.js +0 -1345
- package/dist/blocks/messaging/react/index.d.ts +0 -39
- package/dist/blocks/messaging/react/index.js +0 -80
- package/dist/blocks/messaging/react/server.d.ts +0 -12
- package/dist/blocks/messaging/react/server.js +0 -14
- package/dist/blocks/messaging/solid/index.d.ts +0 -20
- package/dist/blocks/messaging/solid/index.js +0 -23
- package/dist/blocks/messaging/svelte/index.d.ts +0 -20
- package/dist/blocks/messaging/svelte/index.js +0 -23
- package/dist/blocks/messaging/vue/index.d.ts +0 -20
- package/dist/blocks/messaging/vue/index.js +0 -23
- package/dist/blocks/mfa/react/index.d.ts +0 -30
- package/dist/blocks/mfa/react/index.js +0 -45
- package/dist/blocks/mfa/react/server.d.ts +0 -9
- package/dist/blocks/mfa/react/server.js +0 -12
- package/dist/blocks/mfa/solid/index.d.ts +0 -20
- package/dist/blocks/mfa/solid/index.js +0 -23
- package/dist/blocks/mfa/svelte/index.d.ts +0 -20
- package/dist/blocks/mfa/svelte/index.js +0 -23
- package/dist/blocks/mfa/vue/index.d.ts +0 -20
- package/dist/blocks/mfa/vue/index.js +0 -23
- package/dist/blocks/notifications/react/index.d.ts +0 -19
- package/dist/blocks/notifications/react/index.js +0 -41
- package/dist/blocks/notifications/react/server.d.ts +0 -10
- package/dist/blocks/notifications/react/server.js +0 -10
- package/dist/blocks/notifications/solid/index.d.ts +0 -13
- package/dist/blocks/notifications/solid/index.js +0 -14
- package/dist/blocks/notifications/svelte/index.d.ts +0 -13
- package/dist/blocks/notifications/svelte/index.js +0 -14
- package/dist/blocks/notifications/vue/index.d.ts +0 -13
- package/dist/blocks/notifications/vue/index.js +0 -14
- package/dist/blocks/number-sequences/index.d.ts +0 -48
- package/dist/blocks/number-sequences/index.js +0 -52
- package/dist/blocks/onboarding/react/index.d.ts +0 -24
- package/dist/blocks/onboarding/react/index.js +0 -38
- package/dist/blocks/onboarding/react/server.d.ts +0 -10
- package/dist/blocks/onboarding/react/server.js +0 -10
- package/dist/blocks/onboarding/solid/index.d.ts +0 -13
- package/dist/blocks/onboarding/solid/index.js +0 -14
- package/dist/blocks/onboarding/svelte/index.d.ts +0 -13
- package/dist/blocks/onboarding/svelte/index.js +0 -14
- package/dist/blocks/onboarding/vue/index.d.ts +0 -13
- package/dist/blocks/onboarding/vue/index.js +0 -14
- package/dist/blocks/organizations/react/index.d.ts +0 -127
- package/dist/blocks/organizations/react/index.js +0 -113
- package/dist/blocks/organizations/react/server.d.ts +0 -20
- package/dist/blocks/organizations/react/server.js +0 -24
- package/dist/blocks/organizations/solid/index.d.ts +0 -34
- package/dist/blocks/organizations/solid/index.js +0 -32
- package/dist/blocks/organizations/svelte/index.d.ts +0 -34
- package/dist/blocks/organizations/svelte/index.js +0 -32
- package/dist/blocks/organizations/vue/index.d.ts +0 -34
- package/dist/blocks/organizations/vue/index.js +0 -32
- package/dist/blocks/parties/index.d.ts +0 -182
- package/dist/blocks/parties/index.js +0 -358
- package/dist/blocks/reactions/react/index.d.ts +0 -32
- package/dist/blocks/reactions/react/index.js +0 -57
- package/dist/blocks/reactions/react/server.d.ts +0 -9
- package/dist/blocks/reactions/react/server.js +0 -10
- package/dist/blocks/reactions/solid/index.d.ts +0 -13
- package/dist/blocks/reactions/solid/index.js +0 -14
- package/dist/blocks/reactions/svelte/index.d.ts +0 -13
- package/dist/blocks/reactions/svelte/index.js +0 -14
- package/dist/blocks/reactions/vue/index.d.ts +0 -13
- package/dist/blocks/reactions/vue/index.js +0 -14
- package/dist/blocks/rules/index.d.ts +0 -175
- package/dist/blocks/rules/index.js +0 -163
- package/dist/blocks/rules/react/index.d.ts +0 -38
- package/dist/blocks/rules/react/index.js +0 -59
- package/dist/blocks/rules/react/server.d.ts +0 -6
- package/dist/blocks/rules/react/server.js +0 -7
- package/dist/blocks/rules/solid/index.d.ts +0 -13
- package/dist/blocks/rules/solid/index.js +0 -14
- package/dist/blocks/rules/svelte/index.d.ts +0 -13
- package/dist/blocks/rules/svelte/index.js +0 -14
- package/dist/blocks/rules/vue/index.d.ts +0 -13
- package/dist/blocks/rules/vue/index.js +0 -14
- package/dist/blocks/saved-views/react/index.d.ts +0 -40
- package/dist/blocks/saved-views/react/index.js +0 -60
- package/dist/blocks/saved-views/react/server.d.ts +0 -10
- package/dist/blocks/saved-views/react/server.js +0 -10
- package/dist/blocks/saved-views/solid/index.d.ts +0 -13
- package/dist/blocks/saved-views/solid/index.js +0 -14
- package/dist/blocks/saved-views/svelte/index.d.ts +0 -13
- package/dist/blocks/saved-views/svelte/index.js +0 -14
- package/dist/blocks/saved-views/vue/index.d.ts +0 -13
- package/dist/blocks/saved-views/vue/index.js +0 -14
- package/dist/blocks/search/react/index.d.ts +0 -39
- package/dist/blocks/search/react/index.js +0 -49
- package/dist/blocks/search/react/server.d.ts +0 -10
- package/dist/blocks/search/react/server.js +0 -11
- package/dist/blocks/search/solid/index.d.ts +0 -13
- package/dist/blocks/search/solid/index.js +0 -14
- package/dist/blocks/search/svelte/index.d.ts +0 -13
- package/dist/blocks/search/svelte/index.js +0 -14
- package/dist/blocks/search/vue/index.d.ts +0 -13
- package/dist/blocks/search/vue/index.js +0 -14
- package/dist/blocks/service-principals/index.d.ts +0 -132
- package/dist/blocks/service-principals/index.js +0 -109
- package/dist/blocks/sessions/react/index.d.ts +0 -36
- package/dist/blocks/sessions/react/index.js +0 -53
- package/dist/blocks/sessions/react/server.d.ts +0 -15
- package/dist/blocks/sessions/react/server.js +0 -17
- package/dist/blocks/sessions/solid/index.d.ts +0 -20
- package/dist/blocks/sessions/solid/index.js +0 -23
- package/dist/blocks/sessions/svelte/index.d.ts +0 -20
- package/dist/blocks/sessions/svelte/index.js +0 -23
- package/dist/blocks/sessions/vue/index.d.ts +0 -20
- package/dist/blocks/sessions/vue/index.js +0 -23
- package/dist/blocks/settings/react/index.d.ts +0 -31
- package/dist/blocks/settings/react/index.js +0 -37
- package/dist/blocks/settings/react/server.d.ts +0 -10
- package/dist/blocks/settings/react/server.js +0 -10
- package/dist/blocks/settings/solid/index.d.ts +0 -13
- package/dist/blocks/settings/solid/index.js +0 -14
- package/dist/blocks/settings/svelte/index.d.ts +0 -13
- package/dist/blocks/settings/svelte/index.js +0 -14
- package/dist/blocks/settings/vue/index.d.ts +0 -13
- package/dist/blocks/settings/vue/index.js +0 -14
- package/dist/blocks/shared-signals/index.d.ts +0 -440
- package/dist/blocks/shared-signals/index.js +0 -885
- package/dist/blocks/subjects/react/index.d.ts +0 -31
- package/dist/blocks/subjects/react/index.js +0 -60
- package/dist/blocks/subjects/react/server.d.ts +0 -9
- package/dist/blocks/subjects/react/server.js +0 -12
- package/dist/blocks/subjects/solid/index.d.ts +0 -13
- package/dist/blocks/subjects/solid/index.js +0 -14
- package/dist/blocks/subjects/svelte/index.d.ts +0 -13
- package/dist/blocks/subjects/svelte/index.js +0 -14
- package/dist/blocks/subjects/vue/index.d.ts +0 -13
- package/dist/blocks/subjects/vue/index.js +0 -14
- package/dist/blocks/tags/react/index.d.ts +0 -29
- package/dist/blocks/tags/react/index.js +0 -53
- package/dist/blocks/tags/react/server.d.ts +0 -7
- package/dist/blocks/tags/react/server.js +0 -7
- package/dist/blocks/tags/solid/index.d.ts +0 -13
- package/dist/blocks/tags/solid/index.js +0 -14
- package/dist/blocks/tags/svelte/index.d.ts +0 -13
- package/dist/blocks/tags/svelte/index.js +0 -14
- package/dist/blocks/tags/vue/index.d.ts +0 -13
- package/dist/blocks/tags/vue/index.js +0 -14
- package/dist/blocks/targets/index.d.ts +0 -82
- package/dist/blocks/targets/index.js +0 -72
- package/dist/blocks/undo/react/index.d.ts +0 -17
- package/dist/blocks/undo/react/index.js +0 -24
- package/dist/blocks/undo/react/server.d.ts +0 -10
- package/dist/blocks/undo/react/server.js +0 -10
- package/dist/blocks/undo/solid/index.d.ts +0 -13
- package/dist/blocks/undo/solid/index.js +0 -14
- package/dist/blocks/undo/svelte/index.d.ts +0 -13
- package/dist/blocks/undo/svelte/index.js +0 -14
- package/dist/blocks/undo/vue/index.d.ts +0 -13
- package/dist/blocks/undo/vue/index.js +0 -14
- package/dist/blocks/usage/react/index.d.ts +0 -29
- package/dist/blocks/usage/react/index.js +0 -38
- package/dist/blocks/usage/react/server.d.ts +0 -7
- package/dist/blocks/usage/react/server.js +0 -7
- package/dist/blocks/usage/solid/index.d.ts +0 -13
- package/dist/blocks/usage/solid/index.js +0 -14
- package/dist/blocks/usage/svelte/index.d.ts +0 -13
- package/dist/blocks/usage/svelte/index.js +0 -14
- package/dist/blocks/usage/vue/index.d.ts +0 -13
- package/dist/blocks/usage/vue/index.js +0 -14
- package/dist/blocks/work-items/index.d.ts +0 -87
- package/dist/blocks/work-items/index.js +0 -431
- package/dist/blocks/workflow-builder/index.d.ts +0 -43
- package/dist/blocks/workflow-builder/index.js +0 -33
- package/dist/blocks/workflow-builder/react/index.d.ts +0 -32
- package/dist/blocks/workflow-builder/react/index.js +0 -75
- package/dist/blocks/workflow-builder/react/server.d.ts +0 -14
- package/dist/blocks/workflow-builder/react/server.js +0 -17
- package/dist/blocks/workflow-builder/solid/index.d.ts +0 -20
- package/dist/blocks/workflow-builder/solid/index.js +0 -23
- package/dist/blocks/workflow-builder/svelte/index.d.ts +0 -20
- package/dist/blocks/workflow-builder/svelte/index.js +0 -23
- package/dist/blocks/workflow-builder/vue/index.d.ts +0 -20
- package/dist/blocks/workflow-builder/vue/index.js +0 -23
- package/dist/blocks/workflows/react/index.d.ts +0 -39
- package/dist/blocks/workflows/react/index.js +0 -65
- package/dist/blocks/workflows/react/server.d.ts +0 -14
- package/dist/blocks/workflows/react/server.js +0 -17
- package/dist/blocks/workflows/solid/index.d.ts +0 -20
- package/dist/blocks/workflows/solid/index.js +0 -23
- package/dist/blocks/workflows/svelte/index.d.ts +0 -20
- package/dist/blocks/workflows/svelte/index.js +0 -23
- package/dist/blocks/workflows/vue/index.d.ts +0 -20
- package/dist/blocks/workflows/vue/index.js +0 -23
- package/dist/bookings-BB5lFlNO.js +0 -310
- package/dist/bookings-CC7IeiRa.d.ts +0 -290
- package/dist/bucket-TkB7_xv8.d.ts +0 -667
- package/dist/build-DCfpwg78.js +0 -1839
- package/dist/build-g9wTbQdp.js +0 -703
- package/dist/calendar-T3Vdpq7E.js +0 -952
- package/dist/carrier-C7Q_21Kd.d.ts +0 -169
- package/dist/chat-sdk/react/index.d.ts +0 -3
- package/dist/chat-sdk/react/index.js +0 -2
- package/dist/chat-sdk/react/server.d.ts +0 -4
- package/dist/chat-sdk/react/server.js +0 -1
- package/dist/claims-T8TWZ53E.js +0 -63
- package/dist/cli/add-Bf3kE6PY.js +0 -75
- package/dist/cli/add-CYh6Sxk1.js +0 -674
- package/dist/cli/add-Dg40eFKE.js +0 -1
- package/dist/cli/adopt-B0vrj-4B.js +0 -421
- package/dist/cli/adopt-DJR1k3lS.js +0 -1
- package/dist/cli/apply-DUQ-5LC6.js +0 -329
- package/dist/cli/blocks-DzgYfjVv.js +0 -124
- package/dist/cli/blocks-gGupqvBH.js +0 -1
- package/dist/cli/cache-C3K_wOE2.js +0 -536
- package/dist/cli/catalog-CNM0ViIh.js +0 -199
- package/dist/cli/codemod-Dz4R-tVY.js +0 -1127
- package/dist/cli/command-33pu13LT.js +0 -963
- package/dist/cli/completion-6M6Hr8TL.js +0 -211
- package/dist/cli/completion-Bqu8yq0q.js +0 -1
- package/dist/cli/completion-Ddr3yqd3.js +0 -30
- package/dist/cli/config-B31tIvAl.js +0 -42
- package/dist/cli/config-CjgXMZW2.js +0 -1522
- package/dist/cli/config-D9k5ckqV.js +0 -1
- package/dist/cli/config-edit-D46H0UHp.js +0 -613
- package/dist/cli/db-CeagtENM.js +0 -473
- package/dist/cli/design-edit-B40ljpGZ.js +0 -205
- package/dist/cli/detect-RApSAA8v.js +0 -84
- package/dist/cli/dist-DSwzLVAG.js +0 -129
- package/dist/cli/doctor-COGJJ1gy.js +0 -3898
- package/dist/cli/emit-DbQeLlHt.js +0 -1123
- package/dist/cli/env-Ba-pOD3a.js +0 -1
- package/dist/cli/env-DlgfvI8U.js +0 -143
- package/dist/cli/files-C5JfVnj5.js +0 -972
- package/dist/cli/gen-DHW1qENn.js +0 -307
- package/dist/cli/init-CZifzAUD.js +0 -397
- package/dist/cli/introspect-Dfwu5vAg.js +0 -51
- package/dist/cli/keys-iJs_1WT8.js +0 -106
- package/dist/cli/live-1eL2MIkS.js +0 -344
- package/dist/cli/mcp-CaFW6uKU.js +0 -240
- package/dist/cli/metadata-DkOQHZoH.js +0 -146
- package/dist/cli/migration-safety-BsCKKxPf.js +0 -305
- package/dist/cli/module-migration-CbX-jRhV.js +0 -606
- package/dist/cli/moved-CdNtCf4t.js +0 -161
- package/dist/cli/names-D6LrQnOv.js +0 -6
- package/dist/cli/parse-CRZLku1b.js +0 -182
- package/dist/cli/preset-C4fagbhZ.js +0 -130
- package/dist/cli/run-CE2s5TDh.js +0 -711
- package/dist/cli/run-Du5XPOCv.js +0 -63
- package/dist/cli/run-KXjrgNCH.js +0 -2378
- package/dist/cli/scaffold-CPH8sEhw.js +0 -901
- package/dist/cli/scaffold-DS6g3INp.js +0 -1
- package/dist/cli/seed-D6V-T5Af.js +0 -188
- package/dist/cli/seed-DPQaA8aP.js +0 -1
- package/dist/cli/shared-CCpxS5if.js +0 -151
- package/dist/cli/skills-Bz4INB8f.js +0 -121
- package/dist/cli/snapshot-Dkwxc1uV.js +0 -351
- package/dist/cli/source-args-DZV4RnZL.js +0 -59
- package/dist/cli/spec-B3Tbc7Dm.js +0 -7534
- package/dist/cli/spec-Cv1GYrcW.js +0 -1
- package/dist/cli/sql-C58MS9DI.js +0 -348
- package/dist/cli/sql-DVPw5tvO.js +0 -2
- package/dist/cli/stack-_F_JhllX.js +0 -135
- package/dist/cli/sync-CjkKpI6d.js +0 -91
- package/dist/cli/typegen-F9GEjpvD.js +0 -502
- package/dist/cli/typegen-version-BNBPI4Eu.js +0 -9
- package/dist/cli/version-CTqnp3HO.js +0 -4
- package/dist/cli/write-3qdrpS1v.js +0 -201
- package/dist/client--tyFmxDT.js +0 -52
- package/dist/client-7_4Y21ue.d.ts +0 -122
- package/dist/client-B1cjaIfv.js +0 -116
- package/dist/client-B2GCMvfd.d.ts +0 -451
- package/dist/client-B8cHiZfF.js +0 -67
- package/dist/client-BIMg9IiF.d.ts +0 -349
- package/dist/client-BKGVUgo7.js +0 -380
- package/dist/client-BNaOcfeH.js +0 -58
- package/dist/client-BQseXods.d.ts +0 -309
- package/dist/client-BSnf6fn6.d.ts +0 -59
- package/dist/client-BW3-RUbq.js +0 -235
- package/dist/client-BYAY7lLs.d.ts +0 -137
- package/dist/client-BcXmbm4f.js +0 -173
- package/dist/client-BgmVu505.js +0 -167
- package/dist/client-Bj0xrUzr.js +0 -437
- package/dist/client-Bn0qqRBg.d.ts +0 -37
- package/dist/client-Bni68sve.d.ts +0 -136
- package/dist/client-BrtwaIBh.d.ts +0 -74
- package/dist/client-BtRx0-kn.js +0 -82
- package/dist/client-BteuBPIy.js +0 -337
- package/dist/client-C1TxDBgX.js +0 -111
- package/dist/client-C1zOmnS8.js +0 -89
- package/dist/client-C56l0MnY.d.ts +0 -177
- package/dist/client-CA6KuLDu.d.ts +0 -223
- package/dist/client-CBcq7LBg.d.ts +0 -178
- package/dist/client-CGJrSTMZ.js +0 -234
- package/dist/client-CLIBcMzL.d.ts +0 -116
- package/dist/client-COuIfjbB.d.ts +0 -46
- package/dist/client-CVToJ4uI.js +0 -84
- package/dist/client-C_0XZieg.js +0 -287
- package/dist/client-CebKlRU7.js +0 -157
- package/dist/client-ChOJ4v0D.js +0 -137
- package/dist/client-CnENAa0E.d.ts +0 -69
- package/dist/client-Cp79i2ZE.d.ts +0 -152
- package/dist/client-CwKsEl6q.js +0 -99
- package/dist/client-D-LPdEDQ.d.ts +0 -43
- package/dist/client-D6gD9qt9.d.ts +0 -45
- package/dist/client-DBwWXQKF.d.ts +0 -132
- package/dist/client-DD3EcytK.js +0 -65
- package/dist/client-DScMvaty.js +0 -38
- package/dist/client-DT6Tvudr.d.ts +0 -54
- package/dist/client-DU1_Jq4e.d.ts +0 -116
- package/dist/client-Dd-a0tup.d.ts +0 -475
- package/dist/client-Dh8zXgpq.js +0 -1060
- package/dist/client-DkI0oyR7.js +0 -76
- package/dist/client-DmjG9PHH.js +0 -211
- package/dist/client-DnUFHmje.js +0 -129
- package/dist/client-Do5hykMK.d.ts +0 -38
- package/dist/client-DzOL3lsV.d.ts +0 -110
- package/dist/client-DzukpHS1.d.ts +0 -165
- package/dist/client-LngH55pZ.d.ts +0 -83
- package/dist/client-PPSwiJaK.js +0 -291
- package/dist/client-RoAuPQNB.d.ts +0 -103
- package/dist/client-WzuQExHk.js +0 -253
- package/dist/client-Y_HnZGF4.js +0 -51
- package/dist/client-bDXsvSXp.d.ts +0 -90
- package/dist/client-bx3Bk7c5.d.ts +0 -64
- package/dist/client-jgDU7Roj.d.ts +0 -144
- package/dist/client-kRvHKAKS.js +0 -60
- package/dist/client-pxXoQOdC.js +0 -40
- package/dist/client-yIxEJwTK.js +0 -121
- package/dist/cloud-event-SPyXMdcd.d.ts +0 -64
- package/dist/codecs-CQrX3ZW4.js +0 -358
- package/dist/codecs-DAu2sYWn.d.ts +0 -222
- package/dist/comments-CB8pFSV1.js +0 -142
- package/dist/compiler-BCyHFI6n.d.ts +0 -14
- package/dist/compose--4D1FoPN.js +0 -53
- package/dist/composite-Dv6o2BSw.js +0 -130
- package/dist/composite-KllwFim2.d.ts +0 -82
- package/dist/config-BuOz_O-y.d.ts +0 -2152
- package/dist/config-Dh4D8lBa.js +0 -13931
- package/dist/config-Dn0cC3bM.js +0 -1093
- package/dist/connector-BdCE4Efp.d.ts +0 -164
- package/dist/connectors-DDiSNvkF.d.ts +0 -147
- package/dist/context-9Q23weHu.d.ts +0 -524
- package/dist/context-CMxVnPMY.js +0 -9
- package/dist/context-CYquqpA6.js +0 -41
- package/dist/controller-CSsC9s3s.js +0 -73
- package/dist/controller-DAD4hbl4.d.ts +0 -52
- package/dist/create-blocks-kPUhCvje.js +0 -217
- package/dist/cron-_i5pBGkY.js +0 -148
- package/dist/cron-route-Y0eJ-FNi.js +0 -24
- package/dist/deal-forecast-CBlp20PY.js +0 -39
- package/dist/define-DQznpZYl.js +0 -2023
- package/dist/define-Dw7pRO4h.d.ts +0 -1123
- package/dist/define-block-COpcS6aT.d.ts +0 -1338
- package/dist/define-block-Dze77QTw.js +0 -56
- package/dist/delegation-CeXm9AJ3.js +0 -146
- package/dist/documents-kgDOHUfn.d.ts +0 -152
- package/dist/embeddings-CcRP-cMN.d.ts +0 -78
- package/dist/employees-Dwyvxs4r.d.ts +0 -180
- package/dist/ended--Bd_Q6uL.d.ts +0 -76
- package/dist/engagements-CsJhf2OM.d.ts +0 -179
- package/dist/entitlements-B_ttRvI6.js +0 -45
- package/dist/entitlements-DDevu4ZE.d.ts +0 -54
- package/dist/entity-form-B67vq97h.d.ts +0 -82
- package/dist/entity-naming-DLDhHTbK.js +0 -131
- package/dist/entity-schema-BXXC1NnT.js +0 -39
- package/dist/envelope-DCfHtVtZ.js +0 -90
- package/dist/errors-03ysrOt4.js +0 -325
- package/dist/errors-DZx8w-MH.js +0 -44
- package/dist/escape-like-BfXS-iVe.d.ts +0 -30
- package/dist/eve-BlJI8ZXL.d.ts +0 -157
- package/dist/event-calendar-D3SVa3AE.d.ts +0 -65
- package/dist/events-DbLjvxDX.d.ts +0 -852
- package/dist/executor-BDAGTc_O.js +0 -207
- package/dist/executor-BElVQpaB.d.ts +0 -188
- package/dist/executor-CPyrQdjh.d.ts +0 -700
- package/dist/executor-CsTaO3AT.d.ts +0 -37
- package/dist/executor-DQoczQZJ.d.ts +0 -104
- package/dist/executor-QtVn0axs.js +0 -147
- package/dist/executor-o9HkOJ0m.js +0 -869
- package/dist/expo-sqlite/index.d.ts +0 -61
- package/dist/expo-sqlite/index.js +0 -110
- package/dist/feature-BBLdbGu7.js +0 -224
- package/dist/field-errors-vshYTVKr.d.ts +0 -166
- package/dist/field-formats-DbjaDXoZ.d.ts +0 -39
- package/dist/fields-CanaxA0U.d.ts +0 -75
- package/dist/fields-DK30XCgc.js +0 -107
- package/dist/filter-evaluate-C3i2bGfk.d.ts +0 -37
- package/dist/filter-evaluate-CRDXv0Dl.js +0 -217
- package/dist/filter-query-D4ZSwbcJ.js +0 -524
- package/dist/filter-query-o3b_GuyC.d.ts +0 -133
- package/dist/flags-BTDPaN11.d.ts +0 -246
- package/dist/flags-BhYByvP1.js +0 -279
- package/dist/flows/index.d.ts +0 -247
- package/dist/flows/index.js +0 -229
- package/dist/format-AYHceC2m.d.ts +0 -79
- package/dist/framework-CXoyWGgd.js +0 -57
- package/dist/framework-FxfJpyoF.d.ts +0 -41
- package/dist/function-contract-vPqwt1j4.d.ts +0 -27
- package/dist/gateway-DI8dbOml.d.ts +0 -115
- package/dist/graph-B4eubUQG.js +0 -365
- package/dist/groups-CxonH3u5.js +0 -16
- package/dist/http-51t9xppD.js +0 -28
- package/dist/impersonation-CZD9AOAk.js +0 -62
- package/dist/inbox-BPBb6etH.d.ts +0 -321
- package/dist/index-BSUX4dlB.d.ts +0 -305
- package/dist/index-BgSuw4CC.d.ts +0 -151
- package/dist/index-C7CrdGgz.d.ts +0 -562
- package/dist/index-CvxK2BZS.d.ts +0 -847
- package/dist/index-CxZQgNVE.d.ts +0 -62
- package/dist/index-D4420jLW.d.ts +0 -66
- package/dist/index-DK-YTWLd.d.ts +0 -443
- package/dist/index-DbXWcrOI.d.ts +0 -577
- package/dist/index-U0o7kU0s.d.ts +0 -69
- package/dist/index-WEafENqH.d.ts +0 -149
- package/dist/index-Yep7auV-.d.ts +0 -287
- package/dist/index-eTY4kJzo.d.ts +0 -163
- package/dist/invalidate-BLiBFbLy.d.ts +0 -19
- package/dist/json-schema-DWDTfD8J.js +0 -888
- package/dist/jwks-cache-CRymV-Dr.js +0 -49
- package/dist/kit-Ct4Z6GIO.js +0 -127
- package/dist/kit-DKfbNTAA.d.ts +0 -94
- package/dist/knowledge-BKGrXdS_.js +0 -272
- package/dist/knowledge-CFkCRxO9.d.ts +0 -202
- package/dist/list-query-BtluNnYk.d.ts +0 -222
- package/dist/list-query-CuS1w2Af.js +0 -559
- package/dist/live-CZtRMh62.js +0 -246
- package/dist/mentions-ByYnRNIG.js +0 -114
- package/dist/messages-DNzIVvgN.js +0 -492
- package/dist/messaging-BC-P-yAv.js +0 -329
- package/dist/messaging-CZ6aWb10.d.ts +0 -297
- package/dist/methods-7u6vSgz_.js +0 -11
- package/dist/mfa-wrx1rqJT.d.ts +0 -36
- package/dist/model-Btl8X9cs.d.ts +0 -326
- package/dist/model-messages-D-jVOIOK.js +0 -206
- package/dist/money-codec-jMP0PQLZ.js +0 -41
- package/dist/onboarding-CGMuX7sP.js +0 -68
- package/dist/openapi/index.d.ts +0 -5
- package/dist/openapi/index.js +0 -36
- package/dist/operations-nWYRexee.d.ts +0 -6
- package/dist/options-289GJc2l.d.ts +0 -52
- package/dist/options-70OsM-wK.js +0 -10
- package/dist/options-B7EJaOX-.js +0 -5
- package/dist/options-BkpqTGrJ.js +0 -8
- package/dist/options-Blg8lAkz.js +0 -9
- package/dist/options-Bn4cu0gt.js +0 -5
- package/dist/options-BnoJOwXK.js +0 -8
- package/dist/options-C2HesT4A.js +0 -9
- package/dist/options-C3EzJATk.js +0 -10
- package/dist/options-C3hZ1fbC.js +0 -10
- package/dist/options-CAzVf-1T.js +0 -8
- package/dist/options-CGKSUFUq.js +0 -5
- package/dist/options-CGjGE8xS.js +0 -12
- package/dist/options-CUqQ9pm7.js +0 -9
- package/dist/options-CalPr6kN.d.ts +0 -12
- package/dist/options-CfxBliP6.d.ts +0 -17
- package/dist/options-ChD15QxJ.js +0 -9
- package/dist/options-CmoJsd4V.d.ts +0 -8
- package/dist/options-CyD7OObW.js +0 -17
- package/dist/options-D1blDihM.js +0 -9
- package/dist/options-D2Gd6VfS.js +0 -8
- package/dist/options-D4aD9qwB.js +0 -5
- package/dist/options-D65jzn7S.js +0 -5
- package/dist/options-D7f2VKzj.js +0 -25
- package/dist/options-D7sgG1bQ.js +0 -16
- package/dist/options-DJm31rsi.d.ts +0 -16
- package/dist/options-DXqcJyOP.js +0 -10
- package/dist/options-DXuA4JVa.d.ts +0 -15
- package/dist/options-DZupPoI0.d.ts +0 -10
- package/dist/options-Dm-2crCx.d.ts +0 -273
- package/dist/options-Dmg1Da9P.js +0 -25
- package/dist/options-DsUgamiy.js +0 -5
- package/dist/options-DujalSfR.js +0 -10
- package/dist/options-Dz3hJxUw.d.ts +0 -10
- package/dist/options-HSv8R6h5.js +0 -13
- package/dist/options-I8zVkB_y.js +0 -8
- package/dist/options-MHhjOoWz.js +0 -5
- package/dist/options-MLxMkd5B.js +0 -11
- package/dist/options-MQfTGMgP.d.ts +0 -14
- package/dist/options-OJ5zmgr8.js +0 -10
- package/dist/options-OMAUVcKK.d.ts +0 -10
- package/dist/options-_9arpsX9.js +0 -11
- package/dist/options-a-28mlYT.js +0 -9
- package/dist/options-kLKILdIu.js +0 -10
- package/dist/options-n22NK3PL.js +0 -8
- package/dist/options-qU8vgxhO.js +0 -18
- package/dist/options-te6d5-yz.d.ts +0 -19
- package/dist/options-wFnK3qWl.js +0 -9
- package/dist/options-xVAy3UsV.js +0 -9
- package/dist/organizations-DtehZg3J.js +0 -401
- package/dist/outbox-CsF_iKjx.d.ts +0 -199
- package/dist/overlay/index.d.ts +0 -249
- package/dist/overlay/index.js +0 -561
- package/dist/payments-BtScsgPS.js +0 -16
- package/dist/payments-CBzQIjoX.d.ts +0 -114
- package/dist/permissions-BetA_Fo_.js +0 -34
- package/dist/plugin-Ar5546xh.d.ts +0 -202
- package/dist/plugin-D9bYbYli.js +0 -45
- package/dist/plugins/actor/index.d.ts +0 -19
- package/dist/plugins/actor/index.js +0 -57
- package/dist/plugins/rules/index.d.ts +0 -96
- package/dist/plugins/rules/index.js +0 -235
- package/dist/plugins/soft-delete/index.d.ts +0 -39
- package/dist/plugins/soft-delete/index.js +0 -90
- package/dist/plugins/tenant/index.d.ts +0 -60
- package/dist/plugins/tenant/index.js +0 -119
- package/dist/plugins/timestamps/index.d.ts +0 -11
- package/dist/plugins/timestamps/index.js +0 -47
- package/dist/plugins/validation/index.d.ts +0 -24
- package/dist/plugins/validation/index.js +0 -83
- package/dist/pool-CRkU15dA.d.ts +0 -123
- package/dist/pool-errors-B17BQRW-.js +0 -27
- package/dist/ports-DsJicwI2.d.ts +0 -89
- package/dist/ports-yajgT0t0.js +0 -139
- package/dist/postgrest-DHLlN2nS.d.ts +0 -53
- package/dist/powersync/react/index.d.ts +0 -93
- package/dist/powersync/react/index.js +0 -120
- package/dist/preset-DzcQ5CQM.js +0 -841
- package/dist/problem-BWElIgIb.js +0 -162
- package/dist/problem-DpHB7tWl.d.ts +0 -79
- package/dist/provider-DmiaI1qt.d.ts +0 -112
- package/dist/provider-EJ0-5GwJ.js +0 -57
- package/dist/push-token-BxKmYhwk.d.ts +0 -24
- package/dist/queries-Dw8y9bvz.js +0 -245
- package/dist/rank-result-C_sHjkiz.js +0 -18
- package/dist/rank-result-DwR0FawB.d.ts +0 -14
- package/dist/rate-limit-B_U12PdL.js +0 -49
- package/dist/rate-limit-CrOuXfjj.d.ts +0 -50
- package/dist/rate-limit-DExDw3Cy.js +0 -327
- package/dist/react-28VgUbm9.js +0 -852
- package/dist/react-controller-CKSdtJ10.js +0 -43
- package/dist/react-env-CfA3EdBH.js +0 -20
- package/dist/read-set-BAR84kPC.js +0 -199
- package/dist/recordings-DgDu7AOt.d.ts +0 -119
- package/dist/refusal-DXydjgsS.js +0 -64
- package/dist/refusal-efy5bZMd.d.ts +0 -32
- package/dist/replicas-BvIL4_jL.js +0 -94
- package/dist/resolve-CzUKTIMq.d.ts +0 -289
- package/dist/resolve-DAYdcs22.js +0 -892
- package/dist/resolved-names-Dr7brlLL.js +0 -133
- package/dist/resource-BRRU-A7j.js +0 -91
- package/dist/resource-DYDEnww-.d.ts +0 -115
- package/dist/resource-Dk_JYsOt.js +0 -469
- package/dist/resource-execute-bT9ltHVT.d.ts +0 -15
- package/dist/resource-types-Bzt_bpR5.d.ts +0 -153
- package/dist/resources-BV6j5TTD.js +0 -64
- package/dist/resources-Du5wcL3f.d.ts +0 -7
- package/dist/respond-CZYibxUx.d.ts +0 -101
- package/dist/respond-z_yfyitp.js +0 -100
- package/dist/result-B3m7xtRY.js +0 -146
- package/dist/result-C6jDfedy.d.ts +0 -350
- package/dist/rows-Bb0EPupt.js +0 -80
- package/dist/rows-CtLWqdGQ.js +0 -39
- package/dist/rrule-xDm2znty.js +0 -290
- package/dist/rules-DcW5mj1r.js +0 -287
- package/dist/run-state-CPo-1X2B.d.ts +0 -12
- package/dist/sales-lines-9HsX89aO.d.ts +0 -28
- package/dist/sales-lines-BhrIx2oK.js +0 -41
- package/dist/sales-shared-C_u68eq2.js +0 -22
- package/dist/sales-shared-DAAGwQwN.d.ts +0 -8
- package/dist/schemas-9Ci3K0Hk.js +0 -103
- package/dist/schemas-ypoQZ_6N.js +0 -157
- package/dist/scores-CsURQDUB.d.ts +0 -172
- package/dist/scores-DdPZVVt8.js +0 -177
- package/dist/search-ToCOlCZ8.js +0 -106
- package/dist/sections-DjxYmpu-.js +0 -26
- package/dist/server-types-BOs-eFpo.d.ts +0 -809
- package/dist/session-BgsOPGZs.d.ts +0 -97
- package/dist/settings-mL-i7QUM.js +0 -93
- package/dist/shared-LmlfYPv4.js +0 -60
- package/dist/shared-eVrl39dX.js +0 -17
- package/dist/sign-in-lAyf6Ohy.js +0 -386
- package/dist/signatures-GUBuhLOB.js +0 -145
- package/dist/signatures-zbu6KTNQ.d.ts +0 -43
- package/dist/signers-D6ecZl22.d.ts +0 -390
- package/dist/signing-keys-B3RHGMMu.d.ts +0 -119
- package/dist/signing-keys-fWapUzi0.js +0 -164
- package/dist/solid-bind-C1jeq4Qm.d.ts +0 -11
- package/dist/solid-bind-iHGfGtBK.js +0 -38
- package/dist/solid-controller-DGuv7V8a.js +0 -13
- package/dist/spec-CoWHDoud.js +0 -119
- package/dist/spec-pins-CZ2CL8YZ.d.ts +0 -120
- package/dist/spec-pins-D3Tm6HJi.js +0 -60
- package/dist/sql-CVYjOUyG.js +0 -421
- package/dist/sql-rQDL6PIL.js +0 -122247
- package/dist/sso-B744gHeS.d.ts +0 -161
- package/dist/sso-Bt9HocgW.js +0 -217
- package/dist/standard-DbQsD2xZ.d.ts +0 -7
- package/dist/standard-DtkpFGkS.js +0 -25
- package/dist/stats-qCEV5M3B.js +0 -1147
- package/dist/store-o0HwYXl8.d.ts +0 -83
- package/dist/subject-readers-CsTpx44c.js +0 -49
- package/dist/subject-readers-DEZ45DQF.d.ts +0 -21
- package/dist/subjects-B6p4oAZJ.d.ts +0 -78
- package/dist/subjects-DXFmanh5.d.ts +0 -90
- package/dist/subjects-DevU_atb.js +0 -107
- package/dist/support-Ds1-UCN4.js +0 -534
- package/dist/support-view-vwJbRMpV.d.ts +0 -17
- package/dist/svelte-bind-BHN5a8VV.js +0 -46
- package/dist/svelte-bind-Ja6CtQGp.d.ts +0 -13
- package/dist/svelte-controller-oFKC9AYu.js +0 -19
- package/dist/table-schema-BcB-VCQb.js +0 -293
- package/dist/table-schema-Cb-IV_pZ.d.ts +0 -78
- package/dist/tags-CLXi2c6O.d.ts +0 -30
- package/dist/tags-C_ym1yDM.js +0 -39
- package/dist/tags-EnvIccSJ.js +0 -86
- package/dist/tanstack-db/supabase/index.d.ts +0 -66
- package/dist/tanstack-db/supabase/index.js +0 -271
- package/dist/tax-CIIxd8Zf.d.ts +0 -170
- package/dist/tax-DmOMjrYc.js +0 -140
- package/dist/tee-DwkUvJD_.js +0 -101
- package/dist/template-BWP7IXZg.js +0 -126
- package/dist/temporal-required-B8qQHYbI.js +0 -20
- package/dist/tenant-Bg4PDLkG.d.ts +0 -17
- package/dist/tenant-DnMqeNIM.js +0 -27
- package/dist/timeline-0_hTBH0-.js +0 -52
- package/dist/timeline-DUUsPLv5.d.ts +0 -152
- package/dist/timing-C5NzaEgy.js +0 -95
- package/dist/topic-CPOmMgkf.js +0 -643
- package/dist/topic-D9j8G2dw.d.ts +0 -415
- package/dist/types-BEDfwXL4.d.ts +0 -251
- package/dist/types-BRJHGhSq.d.ts +0 -177
- package/dist/types-BTK75521.js +0 -8
- package/dist/types-CGUDoF5I.d.ts +0 -624
- package/dist/types-DkPE7yd2.d.ts +0 -194
- package/dist/types-QHeku_6b.d.ts +0 -217
- package/dist/types-uHD9yANu.d.ts +0 -700
- package/dist/undo-B696duxr.d.ts +0 -46
- package/dist/undo-vutx78k8.js +0 -44
- package/dist/upload-claim-D_wgDbi7.js +0 -33
- package/dist/usage-BI1E2940.js +0 -264
- package/dist/usage-DBcVGqnr.d.ts +0 -232
- package/dist/user-change-CSR_prhd.js +0 -133
- package/dist/variants-DL7NpFJ7.js +0 -53
- package/dist/vault-BQTdu4eH.d.ts +0 -62
- package/dist/verify-27w0I5C9.js +0 -130
- package/dist/verify-BmuCB4PW.d.ts +0 -146
- package/dist/view-2_I-2ukO.d.ts +0 -90
- package/dist/view-BtgqxQLM.js +0 -108
- package/dist/vue-bind-CFxon-Vs.js +0 -45
- package/dist/vue-bind-TPkbLl4z.d.ts +0 -11
- package/dist/vue-controller-WtbuT-Ux.js +0 -13
- package/dist/watch-CfMT6vX7.js +0 -139
- package/dist/watch-DziJudwj.d.ts +0 -93
- package/dist/watch-topic-CIT3UlAh.d.ts +0 -31
- package/dist/wire-Bizdxvp-.js +0 -66
- package/dist/work-items-Cnntm8ij.d.ts +0 -238
- package/dist/workflow-builder-2q1iqHYG.js +0 -699
- package/dist/workflow-sdk-BTYWQQg9.d.ts +0 -163
- package/dist/workflow-sdk-_pqDUwNK.js +0 -242
- package/dist/workflow-sdk-world-BIwGVy6S.js +0 -2401
- package/dist/workflows-D8U7KyXJ.d.ts +0 -258
- package/dist/workflows-VJBSV-QR.js +0 -285
- package/skills/better-supabase/references/plugins.md +0 -71
|
@@ -0,0 +1,2435 @@
|
|
|
1
|
+
import { p as commandMeta, r as defineCliCommand } from "./command-CQ61x6gN.js";
|
|
2
|
+
import { i as plain } from "./style-Bm2X5JrN.js";
|
|
3
|
+
import { n as CliError } from "./errors-BTe6A15O.js";
|
|
4
|
+
import { t as migrateCliCall } from "./moved-CsfDQcyk.js";
|
|
5
|
+
import { t as isRecord$1 } from "./guards-CUlDNYZs.js";
|
|
6
|
+
import { a as changedFiles, i as changeLines, r as applyPlan, u as planResult } from "./files-CX71yBm8.js";
|
|
7
|
+
import { i as schemasDirOf, n as migrationsDir, o as writtenByBlocks } from "./sql-layout-rFP0oq1N.js";
|
|
8
|
+
import { a as configObject, c as mask, f as setPathInConfig, g as skipSpace, h as setPresetInJson, i as closingIndex, l as properties, m as setPresetInConfig, o as indentAt, p as setPathInJson, t as addBlocksToConfig, v as codeRanges } from "./config-edit-CrWfk8s3.js";
|
|
9
|
+
import { i as legacyPrefixNames, n as LEGACY_PREFIXES, t as LEGACY_CLAIMS } from "./legacy-prefix-DkTA3Rhx.js";
|
|
10
|
+
import { a as REVIEW_0_15, c as renameSubpaths, r as PLUGIN_IMPORT_RENAMES, s as SUBPATH_RENAMES_0_15, t as BLOCK_EXPORT_RENAMES } from "./codemod-block-renames-BuSaTE_G.js";
|
|
11
|
+
import { a as RECORD_BINDING_RENAMES, n as groupConfigJson, r as groupConfigSource, t as cutRange } from "./config-group-C8tjut39.js";
|
|
12
|
+
import { existsSync } from "node:fs";
|
|
13
|
+
import { extname, join, relative, resolve } from "node:path";
|
|
14
|
+
import { readFile, readdir, stat } from "node:fs/promises";
|
|
15
|
+
import { DEFAULT_CONVENTIONS, presetSpec } from "better-supabase/preset";
|
|
16
|
+
import { currentBlockName, renamedBlock } from "better-supabase/sql";
|
|
17
|
+
import { BLOCK_EVENT_RENAMES } from "better-supabase/events";
|
|
18
|
+
//#region src/cli/codemod-calls.ts
|
|
19
|
+
/** Files whose CLI calls a codemod rewrites. */
|
|
20
|
+
const CLI_CALL_FILE = /(?:^|[\\/])(?:package\.json|\.github[\\/]workflows[\\/][^\\/]+\.ya?ml)$/;
|
|
21
|
+
/** Other files that run shell commands; their CLI calls are listed for review. */
|
|
22
|
+
const SHELL_FILE = /(?:^|[\\/])(?:[^\\/]+\.(?:sh|bash|zsh|ya?ml)|Makefile|justfile|Dockerfile)$/;
|
|
23
|
+
/** The bin, with an optional `@version`, followed by its arguments. */
|
|
24
|
+
const BIN = /(?<![\w.@-])(?:better-supabase|bsb)(?:@[\w.^~-]+)?(?=[ \t])/g;
|
|
25
|
+
/**
|
|
26
|
+
* Where a call's arguments end: a line break, a shell operator, a closing quote
|
|
27
|
+
* or a comment.
|
|
28
|
+
*/
|
|
29
|
+
const CALL_END = /\r?\n|&&|\|\||[;|)`]|\\?"|\s#/;
|
|
30
|
+
/** `pnpm --filter better-supabase <script>` names the package, not the bin. */
|
|
31
|
+
const PACKAGE_FILTER = /(?:--filter|-F)[= ]$/;
|
|
32
|
+
function cliCalls(text, migrate) {
|
|
33
|
+
const calls = [];
|
|
34
|
+
for (const match of text.matchAll(BIN)) {
|
|
35
|
+
if (PACKAGE_FILTER.test(text.slice(0, match.index))) continue;
|
|
36
|
+
const start = match.index + match[0].length;
|
|
37
|
+
const tail = text.slice(start);
|
|
38
|
+
const end = start + (CALL_END.exec(tail)?.index ?? tail.length);
|
|
39
|
+
const words = text.slice(start, end).trim().split(/\s+/u);
|
|
40
|
+
const to = words[0] === "" ? void 0 : migrate(words);
|
|
41
|
+
if (to) calls.push({
|
|
42
|
+
start,
|
|
43
|
+
end,
|
|
44
|
+
bin: match[0],
|
|
45
|
+
to
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return calls;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A CLI call followed by `&&` and the same call again. The call starts after a
|
|
52
|
+
* shell operator, a quote, a line break or a YAML `run:`, and the repeat ends
|
|
53
|
+
* at one, so only whole commands match.
|
|
54
|
+
*/
|
|
55
|
+
const REPEATED_CALL = /((?:^|&&|\|\||[;:\n"'`(])[ \t]*)([^&|;\n"'`()]*?(?<![\w.@-])(?:better-supabase|bsb)(?:@[\w.^~-]+)?[ \t][^&|;\n"'`()]*?)[ \t]*&&[ \t]*\2(?=[ \t]*(?:&&|\|\||[;\n"'`)]|$))/g;
|
|
56
|
+
/**
|
|
57
|
+
* `text` with each run of identical CLI calls joined by `&&` kept once. Two old
|
|
58
|
+
* commands can move to the same new one (`sql sync` and `sql upgrade` both
|
|
59
|
+
* become `upgrade`), and running it twice in a row does the work twice.
|
|
60
|
+
*/
|
|
61
|
+
function collapseRepeatedCalls(text) {
|
|
62
|
+
let out = text;
|
|
63
|
+
let previous;
|
|
64
|
+
while (out !== previous) {
|
|
65
|
+
previous = out;
|
|
66
|
+
out = out.replaceAll(REPEATED_CALL, "$1$2");
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
/** `text` with every moved CLI call spelled the new way. */
|
|
71
|
+
function rewriteCliCalls(text, migrate) {
|
|
72
|
+
const calls = cliCalls(text, migrate);
|
|
73
|
+
if (calls.length === 0) return text;
|
|
74
|
+
let out = "";
|
|
75
|
+
let cursor = 0;
|
|
76
|
+
for (const call of calls) {
|
|
77
|
+
const original = text.slice(call.start, call.end);
|
|
78
|
+
const trailing = /\s*$/u.exec(original)?.[0] ?? "";
|
|
79
|
+
out += `${text.slice(cursor, call.start)} ${call.to.join(" ")}${trailing}`;
|
|
80
|
+
cursor = call.end;
|
|
81
|
+
}
|
|
82
|
+
return collapseRepeatedCalls(out + text.slice(cursor));
|
|
83
|
+
}
|
|
84
|
+
/** One review line per moved CLI call, with the new spelling. */
|
|
85
|
+
function cliCallHints(text, migrate) {
|
|
86
|
+
return cliCalls(text, migrate).map((call) => ({
|
|
87
|
+
line: text.slice(0, call.start).split("\n").length,
|
|
88
|
+
message: `This call uses a renamed command or flag: run \`${call.bin} ${call.to.join(" ")}\``
|
|
89
|
+
}));
|
|
90
|
+
}
|
|
91
|
+
//#endregion
|
|
92
|
+
//#region src/cli/codemod-preset-code.ts
|
|
93
|
+
/**
|
|
94
|
+
* The 0.14 preset code layout, frozen: the fields in code order with their
|
|
95
|
+
* values and widths, then one bit per block. Codes are no longer written; the
|
|
96
|
+
* 0.15 codemod reads them into a preset object.
|
|
97
|
+
*/
|
|
98
|
+
const FIELDS = [
|
|
99
|
+
{
|
|
100
|
+
key: "framework",
|
|
101
|
+
values: [
|
|
102
|
+
"next",
|
|
103
|
+
"vite",
|
|
104
|
+
"tanstack-start",
|
|
105
|
+
"expo",
|
|
106
|
+
"sveltekit",
|
|
107
|
+
"nuxt",
|
|
108
|
+
"hono",
|
|
109
|
+
"astro",
|
|
110
|
+
"react-router"
|
|
111
|
+
],
|
|
112
|
+
bits: 5
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
key: "platforms",
|
|
116
|
+
values: [
|
|
117
|
+
"web",
|
|
118
|
+
"native",
|
|
119
|
+
"both"
|
|
120
|
+
],
|
|
121
|
+
bits: 2
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
key: "casing",
|
|
125
|
+
values: ["snake", "camel"],
|
|
126
|
+
bits: 2
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
key: "idType",
|
|
130
|
+
values: [
|
|
131
|
+
"uuid",
|
|
132
|
+
"text",
|
|
133
|
+
"bigint",
|
|
134
|
+
"integer"
|
|
135
|
+
],
|
|
136
|
+
bits: 3
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
key: "scope",
|
|
140
|
+
values: [
|
|
141
|
+
"tenant",
|
|
142
|
+
"user",
|
|
143
|
+
"none"
|
|
144
|
+
],
|
|
145
|
+
bits: 2
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
key: "tenantName",
|
|
149
|
+
values: [
|
|
150
|
+
"organization",
|
|
151
|
+
"workspace",
|
|
152
|
+
"team"
|
|
153
|
+
],
|
|
154
|
+
bits: 3
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
key: "access",
|
|
158
|
+
values: [
|
|
159
|
+
"roles",
|
|
160
|
+
"catalog",
|
|
161
|
+
"provider",
|
|
162
|
+
"custom"
|
|
163
|
+
],
|
|
164
|
+
bits: 3
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
key: "api",
|
|
168
|
+
values: ["none", "api"],
|
|
169
|
+
bits: 2
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
key: "integrations",
|
|
173
|
+
values: [
|
|
174
|
+
"next",
|
|
175
|
+
"hono",
|
|
176
|
+
"orpc",
|
|
177
|
+
"edge",
|
|
178
|
+
"expo",
|
|
179
|
+
"mcp",
|
|
180
|
+
"client",
|
|
181
|
+
"react"
|
|
182
|
+
],
|
|
183
|
+
bits: 16,
|
|
184
|
+
multi: true
|
|
185
|
+
}
|
|
186
|
+
];
|
|
187
|
+
/** The 0.14 block bits, in order; `null` marks a removed block. */
|
|
188
|
+
const BLOCKS = [
|
|
189
|
+
"updated-at",
|
|
190
|
+
"actor",
|
|
191
|
+
"audit",
|
|
192
|
+
"tenant",
|
|
193
|
+
"invitations",
|
|
194
|
+
"reserved-slugs",
|
|
195
|
+
"jobs",
|
|
196
|
+
"idempotency",
|
|
197
|
+
"webhook-inbox",
|
|
198
|
+
"realtime-tables",
|
|
199
|
+
"jsonb-schemas",
|
|
200
|
+
"pgtap",
|
|
201
|
+
"grants",
|
|
202
|
+
"read-sets",
|
|
203
|
+
"mfa",
|
|
204
|
+
"entitlements",
|
|
205
|
+
"rate-limit",
|
|
206
|
+
"vector-search",
|
|
207
|
+
"access",
|
|
208
|
+
"support-sessions",
|
|
209
|
+
"organizations",
|
|
210
|
+
"profiles",
|
|
211
|
+
"outbox",
|
|
212
|
+
"notifications",
|
|
213
|
+
"webhooks-out",
|
|
214
|
+
"sessions",
|
|
215
|
+
"webhooks-in",
|
|
216
|
+
"api-keys",
|
|
217
|
+
"settings",
|
|
218
|
+
"usage",
|
|
219
|
+
"billing",
|
|
220
|
+
"flags",
|
|
221
|
+
"comments",
|
|
222
|
+
"attachments",
|
|
223
|
+
"data-lifecycle",
|
|
224
|
+
"sso",
|
|
225
|
+
"onboarding",
|
|
226
|
+
"waitlist",
|
|
227
|
+
"announcements",
|
|
228
|
+
"streams",
|
|
229
|
+
"credentials",
|
|
230
|
+
"workflows",
|
|
231
|
+
"workflow-sdk-world",
|
|
232
|
+
"workflow-builder",
|
|
233
|
+
"chat-sdk-state",
|
|
234
|
+
"inbox",
|
|
235
|
+
"ai-chat",
|
|
236
|
+
"ai-files",
|
|
237
|
+
"knowledge",
|
|
238
|
+
"memory",
|
|
239
|
+
"agents",
|
|
240
|
+
"connectors",
|
|
241
|
+
"ai-tasks",
|
|
242
|
+
"push",
|
|
243
|
+
"ai-cache",
|
|
244
|
+
"ai-providers",
|
|
245
|
+
"number-sequences",
|
|
246
|
+
"teams",
|
|
247
|
+
"tags",
|
|
248
|
+
"state-machine",
|
|
249
|
+
"custom-fields",
|
|
250
|
+
"share-links",
|
|
251
|
+
"reminders",
|
|
252
|
+
"imports",
|
|
253
|
+
"subjects",
|
|
254
|
+
"rank",
|
|
255
|
+
"saved-views",
|
|
256
|
+
"relations",
|
|
257
|
+
"bulk",
|
|
258
|
+
"search",
|
|
259
|
+
"metrics",
|
|
260
|
+
"calendar",
|
|
261
|
+
"bookings",
|
|
262
|
+
"versions",
|
|
263
|
+
"trash",
|
|
264
|
+
"reactions",
|
|
265
|
+
"approvals",
|
|
266
|
+
"access-requests",
|
|
267
|
+
"documents",
|
|
268
|
+
"catalog",
|
|
269
|
+
"inventory",
|
|
270
|
+
"drive",
|
|
271
|
+
"drive-files",
|
|
272
|
+
"orders",
|
|
273
|
+
"promotions",
|
|
274
|
+
"forms",
|
|
275
|
+
"signatures",
|
|
276
|
+
"time-tracking",
|
|
277
|
+
"identities",
|
|
278
|
+
"service-principals",
|
|
279
|
+
"templates",
|
|
280
|
+
"pipelines",
|
|
281
|
+
"parties",
|
|
282
|
+
"engagements",
|
|
283
|
+
"deals",
|
|
284
|
+
"work-items",
|
|
285
|
+
"quotes",
|
|
286
|
+
"invoices",
|
|
287
|
+
"sla",
|
|
288
|
+
"targets",
|
|
289
|
+
"hiring",
|
|
290
|
+
"employees",
|
|
291
|
+
"collections",
|
|
292
|
+
"ensure-rls",
|
|
293
|
+
"signing-keys",
|
|
294
|
+
"shared-signals",
|
|
295
|
+
"oauth-server",
|
|
296
|
+
"domains",
|
|
297
|
+
"reviews",
|
|
298
|
+
"leave",
|
|
299
|
+
"rules",
|
|
300
|
+
"vercel-marketplace",
|
|
301
|
+
"ledger",
|
|
302
|
+
"assets",
|
|
303
|
+
"scores",
|
|
304
|
+
"moderation",
|
|
305
|
+
"enrollments",
|
|
306
|
+
"guests",
|
|
307
|
+
"passes",
|
|
308
|
+
"billable-time",
|
|
309
|
+
"leases",
|
|
310
|
+
"expenses",
|
|
311
|
+
"donations",
|
|
312
|
+
"dispatch",
|
|
313
|
+
"shipments",
|
|
314
|
+
"contracts",
|
|
315
|
+
"controls",
|
|
316
|
+
"incidents",
|
|
317
|
+
"courses",
|
|
318
|
+
"messaging",
|
|
319
|
+
"channels",
|
|
320
|
+
"activity",
|
|
321
|
+
"mail-sync",
|
|
322
|
+
"segments",
|
|
323
|
+
"assignment",
|
|
324
|
+
"enrichment",
|
|
325
|
+
"forecasts",
|
|
326
|
+
"field-history",
|
|
327
|
+
"sequences",
|
|
328
|
+
"lead-scoring",
|
|
329
|
+
"posts",
|
|
330
|
+
"field-encryption"
|
|
331
|
+
];
|
|
332
|
+
const BASE62 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
333
|
+
/** Whether `value` reads as a 0.14 preset code: `1` and base62 digits. */
|
|
334
|
+
function isLegacyPresetCode(value) {
|
|
335
|
+
return /^1[0-9A-Za-z]+$/.test(value);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* The conventions and blocks a 0.14 preset code holds, the blocks under their
|
|
339
|
+
* 0.15 names. Throws a TypeError when `code` isn't one.
|
|
340
|
+
*/
|
|
341
|
+
function decodeLegacyPresetCode(code) {
|
|
342
|
+
if (!isLegacyPresetCode(code)) throw new TypeError(`"${code}" is not a 0.14 preset code.`);
|
|
343
|
+
let value = 0n;
|
|
344
|
+
for (const char of code.slice(1)) value = value * 62n + BigInt(BASE62.indexOf(char));
|
|
345
|
+
const preset = {};
|
|
346
|
+
for (const field of FIELDS) {
|
|
347
|
+
const bits = value & (1n << BigInt(field.bits)) - 1n;
|
|
348
|
+
value >>= BigInt(field.bits);
|
|
349
|
+
if (field.multi === true) {
|
|
350
|
+
preset[field.key] = field.values.filter((_, index) => (bits >> BigInt(index) & 1n) === 1n);
|
|
351
|
+
continue;
|
|
352
|
+
}
|
|
353
|
+
const each = field.values[Number(bits)];
|
|
354
|
+
if (each === void 0) throw new TypeError(`Preset code "${code}" has an unknown ${field.key}.`);
|
|
355
|
+
preset[field.key] = each;
|
|
356
|
+
}
|
|
357
|
+
const blocks = [];
|
|
358
|
+
for (let index = 0; value > 0n; index += 1, value >>= 1n) {
|
|
359
|
+
const name = BLOCKS[index];
|
|
360
|
+
if ((value & 1n) === 1n && name !== null && name !== void 0) blocks.push(currentBlockName(name));
|
|
361
|
+
}
|
|
362
|
+
return {
|
|
363
|
+
...preset,
|
|
364
|
+
blocks
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
/** The preset a 0.14 code holds, as the name or object the config takes. */
|
|
368
|
+
function specOfCode(code) {
|
|
369
|
+
const { blocks, ...decoded } = decodeLegacyPresetCode(code);
|
|
370
|
+
return presetSpec({
|
|
371
|
+
...DEFAULT_CONVENTIONS,
|
|
372
|
+
...decoded,
|
|
373
|
+
blocks: typeof blocks === "string" ? [blocks] : blocks ?? []
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
const PRESET_CODE = /(\bpreset\s*:\s*|"preset"\s*:\s*)(["'])((?:https?:\/\/[^"'?]*\?(?:[^"']*&)?preset=)?)(1[0-9A-Za-z]+)([^"']*)\2/;
|
|
377
|
+
/**
|
|
378
|
+
* `better-supabase.config.*` with a 0.14 preset code (or a Create URL holding
|
|
379
|
+
* one) in `preset` rewritten to the preset object or name it holds.
|
|
380
|
+
*/
|
|
381
|
+
function convertConfigPresetCode(source, json) {
|
|
382
|
+
const match = PRESET_CODE.exec(source);
|
|
383
|
+
if (match === null || match[5] !== "") return {
|
|
384
|
+
ok: true,
|
|
385
|
+
text: source
|
|
386
|
+
};
|
|
387
|
+
const spec = specOfCode(match[4] ?? "");
|
|
388
|
+
return json ? setPresetInJson(source, spec) : setPresetInConfig(source, spec);
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* A 0.14 design file (`{ preset: "<code>", design }`) as a 0.15 one: the design
|
|
392
|
+
* with the preset object inside. Other JSON is returned as it is.
|
|
393
|
+
*/
|
|
394
|
+
function convertDesignFile(source) {
|
|
395
|
+
let value;
|
|
396
|
+
try {
|
|
397
|
+
value = JSON.parse(source);
|
|
398
|
+
} catch {
|
|
399
|
+
return {
|
|
400
|
+
ok: false,
|
|
401
|
+
reason: "it isn't valid JSON"
|
|
402
|
+
};
|
|
403
|
+
}
|
|
404
|
+
if (typeof value !== "object" || value === null || !("preset" in value) || !("design" in value) || typeof value.preset !== "string" || typeof value.design !== "object" || value.design === null) return {
|
|
405
|
+
ok: true,
|
|
406
|
+
text: source
|
|
407
|
+
};
|
|
408
|
+
const preset = isLegacyPresetCode(value.preset) ? specOfCode(value.preset) : value.preset;
|
|
409
|
+
return {
|
|
410
|
+
ok: true,
|
|
411
|
+
text: `${JSON.stringify({
|
|
412
|
+
...value.design,
|
|
413
|
+
preset
|
|
414
|
+
}, null, 2)}\n`
|
|
415
|
+
};
|
|
416
|
+
}
|
|
417
|
+
/** A design file Create downloaded (`better-supabase.design.json`). */
|
|
418
|
+
const DESIGN_FILE_NAME = /(?:^|[\\/])[^\\/]*\.design\.json$/;
|
|
419
|
+
const reviewOf = (edit) => edit.ok && "review" in edit ? edit.review : [];
|
|
420
|
+
/** `edit`, then `convertConfigPresetCode` on its text, with both reviews. */
|
|
421
|
+
function thenConvertPresetCode(edit, json) {
|
|
422
|
+
if (!edit.ok) return edit;
|
|
423
|
+
const converted = convertConfigPresetCode(edit.text, json);
|
|
424
|
+
return converted.ok ? {
|
|
425
|
+
ok: true,
|
|
426
|
+
text: converted.text,
|
|
427
|
+
review: [...reviewOf(edit), ...reviewOf(converted)]
|
|
428
|
+
} : converted;
|
|
429
|
+
}
|
|
430
|
+
/** A codemod's `designFile` rewrite as a result; a refusal is listed for review. */
|
|
431
|
+
function designFileResult(source, rewrite) {
|
|
432
|
+
if (rewrite === void 0) return {
|
|
433
|
+
text: source,
|
|
434
|
+
review: []
|
|
435
|
+
};
|
|
436
|
+
const edit = rewrite(source);
|
|
437
|
+
return edit.ok ? {
|
|
438
|
+
text: edit.text,
|
|
439
|
+
review: reviewOf(edit)
|
|
440
|
+
} : {
|
|
441
|
+
text: source,
|
|
442
|
+
review: [{
|
|
443
|
+
line: 1,
|
|
444
|
+
message: `The design file wasn't rewritten: ${edit.reason}`
|
|
445
|
+
}]
|
|
446
|
+
};
|
|
447
|
+
}
|
|
448
|
+
//#endregion
|
|
449
|
+
//#region src/cli/codemod-sql-names.ts
|
|
450
|
+
/**
|
|
451
|
+
* The 0.15 `bs_` to `bsb_` rename in the app's own SQL. The upgrade migration
|
|
452
|
+
* renames the objects in the database, but SQL the app wrote (pgTAP tests, its
|
|
453
|
+
* schema files, its newest migration) still names them the old way, so the
|
|
454
|
+
* codemod lists those lines. It never rewrites SQL: a pushed migration must not
|
|
455
|
+
* change, and a test may name an object on purpose.
|
|
456
|
+
*/
|
|
457
|
+
const LEGACY_NAME = /\bbs_[a-z0-9_]+/g;
|
|
458
|
+
const CURRENT_NAME = /\bbsb_[a-z0-9_]+/g;
|
|
459
|
+
/**
|
|
460
|
+
* The `bs_` names the 0.15 rename covers, from the files better-supabase wrote:
|
|
461
|
+
* their old `bs_` names before `upgrade` rewrites them, or the `bs_` form of
|
|
462
|
+
* their `bsb_` names after.
|
|
463
|
+
*/
|
|
464
|
+
function renamedSqlNames(blockFiles) {
|
|
465
|
+
const text = blockFiles.join("\n");
|
|
466
|
+
return /* @__PURE__ */ new Set([...legacyPrefixNames(text), ...[...new Set(text.match(CURRENT_NAME))].map((name) => `bs_${name.slice(4)}`).filter((name) => !LEGACY_CLAIMS.has(name))]);
|
|
467
|
+
}
|
|
468
|
+
const renamed = (name, names) => names.has(name) || LEGACY_PREFIXES.some((prefix) => name.startsWith(prefix));
|
|
469
|
+
/** One hint per line and renamed name in `sources`. */
|
|
470
|
+
function sqlNameHints(sources, names) {
|
|
471
|
+
const hints = [];
|
|
472
|
+
for (const source of sources) for (const [index, line] of source.text.split("\n").entries()) for (const name of new Set(line.match(LEGACY_NAME))) if (renamed(name, names)) hints.push({
|
|
473
|
+
file: source.path,
|
|
474
|
+
line: index + 1,
|
|
475
|
+
message: `${name} is bsb_${name.slice(3)} since 0.15, and the upgrade migration renames it in the database. Rename it here, in SQL that runs after that migration.`
|
|
476
|
+
});
|
|
477
|
+
return hints;
|
|
478
|
+
}
|
|
479
|
+
async function sqlFiles(dir) {
|
|
480
|
+
if (!existsSync(dir)) return [];
|
|
481
|
+
const files = [];
|
|
482
|
+
for (const entry of await readdir(dir, { withFileTypes: true })) {
|
|
483
|
+
const full = join(dir, entry.name);
|
|
484
|
+
if (entry.isDirectory()) files.push(...await sqlFiles(full));
|
|
485
|
+
else if (entry.name.endsWith(".sql")) files.push(full);
|
|
486
|
+
}
|
|
487
|
+
return files.toSorted();
|
|
488
|
+
}
|
|
489
|
+
/**
|
|
490
|
+
* Lines of the app's SQL that name a `bs_` object the 0.15 upgrade renames: the
|
|
491
|
+
* pgTAP tests (`sql.testsDir`), the schema files no block wrote, and the newest
|
|
492
|
+
* migration the app wrote. Older migrations already ran, so they stay as they
|
|
493
|
+
* are.
|
|
494
|
+
*/
|
|
495
|
+
async function legacySqlNameHints(config) {
|
|
496
|
+
const read = async (path) => ({
|
|
497
|
+
path: relative(config.root, path).replaceAll("\\", "/"),
|
|
498
|
+
text: await readFile(path, "utf-8")
|
|
499
|
+
});
|
|
500
|
+
const [tests, schemas, migrations] = await Promise.all([
|
|
501
|
+
Promise.all((await sqlFiles(join(config.root, config.sql.testsDir))).map(read)),
|
|
502
|
+
Promise.all((await sqlFiles(join(config.root, await schemasDirOf(config)))).map(read)),
|
|
503
|
+
Promise.all((await sqlFiles(join(config.root, migrationsDir(config)))).map(read))
|
|
504
|
+
]);
|
|
505
|
+
const names = renamedSqlNames([...schemas, ...migrations].filter(writtenByBlocks).map((file) => file.text));
|
|
506
|
+
const latest = migrations.findLast((file) => !writtenByBlocks(file));
|
|
507
|
+
return sqlNameHints([
|
|
508
|
+
...tests.filter((file) => !writtenByBlocks(file)),
|
|
509
|
+
...schemas.filter((file) => !writtenByBlocks(file)),
|
|
510
|
+
...latest === void 0 ? [] : [latest]
|
|
511
|
+
], names);
|
|
512
|
+
}
|
|
513
|
+
//#endregion
|
|
514
|
+
//#region src/cli/codemod-data-contract.ts
|
|
515
|
+
/** The query guards named after the retired verbs. */
|
|
516
|
+
const DATA_CONTRACT_OPTIONS = [{
|
|
517
|
+
call: "guards",
|
|
518
|
+
from: "noUnboundedFindMany",
|
|
519
|
+
to: "noUnboundedList"
|
|
520
|
+
}, {
|
|
521
|
+
call: "guards",
|
|
522
|
+
from: "noDeleteManyWithoutWhere",
|
|
523
|
+
to: "noDeleteWithoutWhere"
|
|
524
|
+
}];
|
|
525
|
+
/** The lint rules named after the retired verbs. */
|
|
526
|
+
const DATA_CONTRACT_STRINGS = {
|
|
527
|
+
"better-supabase/no-unbounded-find-many": "better-supabase/no-unbounded-list",
|
|
528
|
+
"better-supabase/no-delete-many-without-where": "better-supabase/no-empty-where"
|
|
529
|
+
};
|
|
530
|
+
const RENAMED = {
|
|
531
|
+
findMany: "list",
|
|
532
|
+
paginate: "page",
|
|
533
|
+
findById: "get",
|
|
534
|
+
createMany: "create",
|
|
535
|
+
upsertMany: "upsert"
|
|
536
|
+
};
|
|
537
|
+
const CALL = /\.(findMany|paginate|findById|createMany|upsertMany|updateMany|deleteMany|findUnique|findOnly|findFirst|exists)(\s*)\(/g;
|
|
538
|
+
const REVIEW = "Rewrite this call by hand: its arguments aren't an object literal (see the 0.14 to 0.15 guide's data contract table)";
|
|
539
|
+
/**
|
|
540
|
+
* Rewrites the 0.14 repository methods to the 0.15 data contract. A call nested
|
|
541
|
+
* in another rewritten call's arguments is rewritten on the next pass.
|
|
542
|
+
*/
|
|
543
|
+
function rewriteDataContract(source, options = {}) {
|
|
544
|
+
let text = source;
|
|
545
|
+
for (let pass = 0; pass < 4; pass += 1) {
|
|
546
|
+
const next = rewritePass(text, options);
|
|
547
|
+
if (next.text === text) return next;
|
|
548
|
+
text = next.text;
|
|
549
|
+
}
|
|
550
|
+
return rewritePass(text, options);
|
|
551
|
+
}
|
|
552
|
+
function rewritePass(source, options) {
|
|
553
|
+
const code = options.raw === true ? source : mask(source);
|
|
554
|
+
const edits = [];
|
|
555
|
+
const review = [];
|
|
556
|
+
for (const match of code.matchAll(CALL)) {
|
|
557
|
+
const method = match[1];
|
|
558
|
+
const name = match.index + 1;
|
|
559
|
+
const open = match.index + match[0].length - 1;
|
|
560
|
+
const close = closingIndex(code, open);
|
|
561
|
+
if (close === -1) continue;
|
|
562
|
+
const edit = rewrite(source, code, {
|
|
563
|
+
method,
|
|
564
|
+
name,
|
|
565
|
+
open,
|
|
566
|
+
close
|
|
567
|
+
});
|
|
568
|
+
if (edit === void 0) review.push({
|
|
569
|
+
line: source.slice(0, name).split("\n").length,
|
|
570
|
+
message: REVIEW
|
|
571
|
+
});
|
|
572
|
+
else if (edit !== "skip") edits.push(...edit);
|
|
573
|
+
}
|
|
574
|
+
return {
|
|
575
|
+
text: apply(source, edits),
|
|
576
|
+
review
|
|
577
|
+
};
|
|
578
|
+
}
|
|
579
|
+
function rewrite(source, code, call) {
|
|
580
|
+
const { method, name, open, close } = call;
|
|
581
|
+
const renamed = RENAMED[method];
|
|
582
|
+
if (renamed !== void 0) return [{
|
|
583
|
+
start: name,
|
|
584
|
+
end: name + method.length,
|
|
585
|
+
text: renamed
|
|
586
|
+
}];
|
|
587
|
+
const sole = soleArgument(code, open, close);
|
|
588
|
+
if (sole === "several") return method === "exists" ? "skip" : void 0;
|
|
589
|
+
const argument = sole === "none" ? void 0 : sole;
|
|
590
|
+
if (method === "exists") {
|
|
591
|
+
if (argument !== void 0 && (code[argument] !== "{" || !properties(source, code, argument)?.some((prop) => prop.key === "where"))) return "skip";
|
|
592
|
+
return [{
|
|
593
|
+
start: name,
|
|
594
|
+
end: name + method.length,
|
|
595
|
+
text: "count"
|
|
596
|
+
}, {
|
|
597
|
+
start: close + 1,
|
|
598
|
+
end: close + 1,
|
|
599
|
+
text: ".map((n) => n > 0)"
|
|
600
|
+
}];
|
|
601
|
+
}
|
|
602
|
+
if (method === "findFirst") return findFirst(source, code, call, argument);
|
|
603
|
+
if (argument === void 0 || code[argument] !== "{") return;
|
|
604
|
+
const props = properties(source, code, argument);
|
|
605
|
+
if (!props) return;
|
|
606
|
+
const text = (key) => {
|
|
607
|
+
const prop = props.find((entry) => entry.key === key);
|
|
608
|
+
return prop === void 0 ? void 0 : source.slice(prop.valueStart, prop.valueEnd);
|
|
609
|
+
};
|
|
610
|
+
const rest = (...without) => props.filter((prop) => prop.key === void 0 || !without.includes(prop.key)).map((prop) => source.slice(prop.start, prop.valueEnd));
|
|
611
|
+
const value = text("where");
|
|
612
|
+
if (value === void 0) return;
|
|
613
|
+
const where = value === "where" ? "where" : `where: ${value}`;
|
|
614
|
+
const options = (extra) => {
|
|
615
|
+
const items = [...extra];
|
|
616
|
+
return items.length === 0 ? "" : `, { ${items.join(", ")} }`;
|
|
617
|
+
};
|
|
618
|
+
const replace = (verb, args) => [{
|
|
619
|
+
start: name,
|
|
620
|
+
end: close + 1,
|
|
621
|
+
text: `${verb}(${args})`
|
|
622
|
+
}];
|
|
623
|
+
switch (method) {
|
|
624
|
+
case "updateMany": {
|
|
625
|
+
const data = text("data");
|
|
626
|
+
return data === void 0 ? void 0 : replace("update", `{ ${where} }, ${data}${options(rest("where", "data"))}`);
|
|
627
|
+
}
|
|
628
|
+
case "deleteMany": return replace("delete", `{ ${where} }${options(rest("where"))}`);
|
|
629
|
+
case "findUnique": return replace("get", `${value}${options([...rest("where"), "optional: true"])}`);
|
|
630
|
+
case "findOnly": return replace("get", `{ ${where} }${options([...rest("where"), "optional: true"])}`);
|
|
631
|
+
default: return;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
function findFirst(source, code, call, argument) {
|
|
635
|
+
const { name, open, close } = call;
|
|
636
|
+
const first = {
|
|
637
|
+
start: close + 1,
|
|
638
|
+
end: close + 1,
|
|
639
|
+
text: ".map((rows) => rows[0] ?? null)"
|
|
640
|
+
};
|
|
641
|
+
const verb = {
|
|
642
|
+
start: name,
|
|
643
|
+
end: name + 9,
|
|
644
|
+
text: "list"
|
|
645
|
+
};
|
|
646
|
+
if (argument === void 0) return [
|
|
647
|
+
verb,
|
|
648
|
+
{
|
|
649
|
+
start: open + 1,
|
|
650
|
+
end: close,
|
|
651
|
+
text: "{ limit: 1 }"
|
|
652
|
+
},
|
|
653
|
+
first
|
|
654
|
+
];
|
|
655
|
+
if (code[argument] === "{") {
|
|
656
|
+
const end = closingIndex(code, argument);
|
|
657
|
+
const inner = source.slice(argument + 1, end).trim();
|
|
658
|
+
return [
|
|
659
|
+
verb,
|
|
660
|
+
{
|
|
661
|
+
start: argument,
|
|
662
|
+
end: end + 1,
|
|
663
|
+
text: inner.length === 0 ? "{ limit: 1 }" : `{ ${inner.replace(/,\s*$/, "")}, limit: 1 }`
|
|
664
|
+
},
|
|
665
|
+
first
|
|
666
|
+
];
|
|
667
|
+
}
|
|
668
|
+
const value = source.slice(argument, close).trim();
|
|
669
|
+
return [
|
|
670
|
+
verb,
|
|
671
|
+
{
|
|
672
|
+
start: open + 1,
|
|
673
|
+
end: close,
|
|
674
|
+
text: `{ ...${value}, limit: 1 }`
|
|
675
|
+
},
|
|
676
|
+
first
|
|
677
|
+
];
|
|
678
|
+
}
|
|
679
|
+
/** The index where the only argument starts. */
|
|
680
|
+
function soleArgument(code, open, close) {
|
|
681
|
+
const start = open + 1 + (/^\s*/.exec(code.slice(open + 1))?.[0].length ?? 0);
|
|
682
|
+
if (start >= close) return "none";
|
|
683
|
+
let depth = 0;
|
|
684
|
+
for (let index = start; index < close; index += 1) {
|
|
685
|
+
const char = code[index];
|
|
686
|
+
if (char === "\"" || char === "'" || char === "`") index = Math.max(index, code.indexOf(char, index + 1));
|
|
687
|
+
else if ("({[".includes(char)) depth += 1;
|
|
688
|
+
else if (")}]".includes(char)) depth -= 1;
|
|
689
|
+
else if (char === "," && depth === 0 && code.slice(index + 1, close).trim() !== "") return "several";
|
|
690
|
+
}
|
|
691
|
+
return start;
|
|
692
|
+
}
|
|
693
|
+
function apply(text, edits) {
|
|
694
|
+
let out = "";
|
|
695
|
+
let cursor = 0;
|
|
696
|
+
for (const edit of edits.toSorted((a, b) => a.start - b.start)) {
|
|
697
|
+
if (edit.start < cursor) continue;
|
|
698
|
+
out += text.slice(cursor, edit.start) + edit.text;
|
|
699
|
+
cursor = edit.end;
|
|
700
|
+
}
|
|
701
|
+
return out + text.slice(cursor);
|
|
702
|
+
}
|
|
703
|
+
const REQUIRE_TENANT = /\brequireTenant\b/g;
|
|
704
|
+
/**
|
|
705
|
+
* The data contract moves, then `requireTenant` renamed to
|
|
706
|
+
* `requireOrganization`.
|
|
707
|
+
*/
|
|
708
|
+
function rewrite015(text) {
|
|
709
|
+
const result = rewriteDataContract(text);
|
|
710
|
+
return {
|
|
711
|
+
text: result.text.replaceAll(REQUIRE_TENANT, "requireOrganization"),
|
|
712
|
+
review: result.review
|
|
713
|
+
};
|
|
714
|
+
}
|
|
715
|
+
//#endregion
|
|
716
|
+
//#region src/cli/sql/config-adopt.ts
|
|
717
|
+
const ADOPT = /(?:\bownership|"ownership"|'ownership')\s*:\s*(["'])adopt\1[ \t]*,?/g;
|
|
718
|
+
const lineOf$1 = (text, index) => text.slice(0, index).split("\n").length;
|
|
719
|
+
/** `[start, end)` to delete for the property matched at `start..end`. */
|
|
720
|
+
function span(text, start, end) {
|
|
721
|
+
const lineStart = text.lastIndexOf("\n", start - 1) + 1;
|
|
722
|
+
const newline = text.indexOf("\n", end);
|
|
723
|
+
const lineEnd = newline === -1 ? text.length : newline;
|
|
724
|
+
if (text.slice(lineStart, start).trim() === "" && text.slice(end, lineEnd).trim() === "") {
|
|
725
|
+
const after = newline === -1 ? lineEnd : lineEnd + 1;
|
|
726
|
+
const before = text.slice(0, lineStart).trimEnd();
|
|
727
|
+
return text[end - 1] !== "," && before.endsWith(",") ? [before.length - 1, lineEnd] : [lineStart, after];
|
|
728
|
+
}
|
|
729
|
+
if (text[end - 1] === ",") return [start, end + (/^[ \t]*/.exec(text.slice(end))?.[0].length ?? 0)];
|
|
730
|
+
const before = text.slice(0, start).trimEnd();
|
|
731
|
+
return before.endsWith(",") ? [before.length - 1, end] : [start, end];
|
|
732
|
+
}
|
|
733
|
+
/** `source` without its `ownership: "adopt"` keys, and a review line each. */
|
|
734
|
+
function removeAdoptOwnership(source, json) {
|
|
735
|
+
const code = json ? source : mask(source);
|
|
736
|
+
const spans = [];
|
|
737
|
+
const review = [];
|
|
738
|
+
for (const match of source.matchAll(ADOPT)) {
|
|
739
|
+
const start = match.index;
|
|
740
|
+
const value = source.indexOf(match[1], start + 9 + 1);
|
|
741
|
+
if (!json && (code[start] === " " || code[value] !== match[1])) continue;
|
|
742
|
+
const removed = span(source, start, start + match[0].length);
|
|
743
|
+
const linesBefore = spans.map(([from, to]) => source.slice(from, to).split("\n").length - 1).reduce((sum, count) => sum + count, 0);
|
|
744
|
+
review.push({
|
|
745
|
+
line: Math.max(lineOf$1(source, removed[0]) - linesBefore, 1),
|
|
746
|
+
message: "removed ownership: \"adopt\": the block now leaves alone every table your schema already has and keeps its tables and columns mappings. Run `better-supabase upgrade` to write its SQL over them"
|
|
747
|
+
});
|
|
748
|
+
spans.push(removed);
|
|
749
|
+
}
|
|
750
|
+
let text = source;
|
|
751
|
+
for (const [start, end] of spans.toReversed()) text = text.slice(0, start) + text.slice(end);
|
|
752
|
+
return {
|
|
753
|
+
text,
|
|
754
|
+
review
|
|
755
|
+
};
|
|
756
|
+
}
|
|
757
|
+
/** `edit` with `ownership: "adopt"` removed from every block. */
|
|
758
|
+
function withoutAdoptOwnership(edit, json) {
|
|
759
|
+
if (!edit.ok) return edit;
|
|
760
|
+
const earlier = "review" in edit ? edit.review : [];
|
|
761
|
+
const { text, review } = removeAdoptOwnership(edit.text, json);
|
|
762
|
+
return {
|
|
763
|
+
ok: true,
|
|
764
|
+
text,
|
|
765
|
+
review: [...earlier, ...review]
|
|
766
|
+
};
|
|
767
|
+
}
|
|
768
|
+
//#endregion
|
|
769
|
+
//#region src/cli/sql/config-block-names.ts
|
|
770
|
+
const ENVIRONMENT_KEY = /^\$(?:development|production|test|ci)$/;
|
|
771
|
+
const STRING = /(["'`])([a-z0-9-]+)\1/g;
|
|
772
|
+
const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
773
|
+
/** An operation name (`<block>.<action>`) under its block's 0.15 name. */
|
|
774
|
+
function currentOperationName(name) {
|
|
775
|
+
const dot = name.indexOf(".");
|
|
776
|
+
const to = dot === -1 ? void 0 : renamedBlock(name.slice(0, dot));
|
|
777
|
+
return to === void 0 ? name : `${to}${name.slice(dot)}`;
|
|
778
|
+
}
|
|
779
|
+
function applyEdits$2(source, edits) {
|
|
780
|
+
let text = source;
|
|
781
|
+
for (const edit of edits.toSorted((a, b) => b.start - a.start)) text = text.slice(0, edit.start) + edit.text + text.slice(edit.end);
|
|
782
|
+
return text;
|
|
783
|
+
}
|
|
784
|
+
/** The key token at `start` renamed to `to`, keeping its quotes. */
|
|
785
|
+
function keyEdit(source, start, key, to) {
|
|
786
|
+
const quote = source[start];
|
|
787
|
+
const quoted = quote === "\"" || quote === "'";
|
|
788
|
+
const bare = /^[A-Za-z_$][\w$]*$/.test(to);
|
|
789
|
+
return {
|
|
790
|
+
start,
|
|
791
|
+
end: start + key.length + (quoted ? 2 : 0),
|
|
792
|
+
text: quoted ? `${quote}${to}${quote}` : bare ? to : `"${to}"`
|
|
793
|
+
};
|
|
794
|
+
}
|
|
795
|
+
/** Edits renaming the keys of the object literal at `open` with `rename`. */
|
|
796
|
+
function keyEdits(source, code, open, rename) {
|
|
797
|
+
return (properties(source, code, open) ?? []).flatMap((prop) => {
|
|
798
|
+
if (prop.key === void 0 || prop.valueStart === prop.start) return [];
|
|
799
|
+
const to = rename(prop.key);
|
|
800
|
+
return to === prop.key ? [] : [keyEdit(source, prop.start, prop.key, to)];
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
/**
|
|
804
|
+
* Edits renaming the block names among the string literals of the array at
|
|
805
|
+
* `open`.
|
|
806
|
+
*/
|
|
807
|
+
function listEdits(source, code, open) {
|
|
808
|
+
const close = closingIndex(code, open);
|
|
809
|
+
if (close === -1) return [];
|
|
810
|
+
return [...source.slice(open, close).matchAll(STRING)].flatMap((match) => {
|
|
811
|
+
const to = renamedBlock(match[2]);
|
|
812
|
+
const start = open + match.index + 1;
|
|
813
|
+
return to === void 0 ? [] : [{
|
|
814
|
+
start,
|
|
815
|
+
end: start + match[2].length,
|
|
816
|
+
text: to
|
|
817
|
+
}];
|
|
818
|
+
});
|
|
819
|
+
}
|
|
820
|
+
/** The value at `index` when it opens an object or an array. */
|
|
821
|
+
const opens = (code, index) => code[index] === "{" || code[index] === "[" ? code[index] : void 0;
|
|
822
|
+
/** The value of `key` in the object literal at `open`, when it is a literal. */
|
|
823
|
+
function valueOf(source, code, open, key) {
|
|
824
|
+
const prop = properties(source, code, open)?.find((entry) => entry.key === key);
|
|
825
|
+
return prop === void 0 || opens(code, prop.valueStart) === void 0 ? void 0 : prop.valueStart;
|
|
826
|
+
}
|
|
827
|
+
function objectEdits(source, code, open) {
|
|
828
|
+
const edits = [];
|
|
829
|
+
for (const prop of properties(source, code, open) ?? []) {
|
|
830
|
+
const kind = opens(code, prop.valueStart);
|
|
831
|
+
if (prop.key === void 0 || kind === void 0) continue;
|
|
832
|
+
if (prop.key === "blocks") edits.push(...kind === "[" ? listEdits(source, code, prop.valueStart) : keyEdits(source, code, prop.valueStart, (key) => renamedBlock(key) ?? key));
|
|
833
|
+
else if (prop.key === "preset" && kind === "{") {
|
|
834
|
+
const blocks = valueOf(source, code, prop.valueStart, "blocks");
|
|
835
|
+
if (blocks !== void 0 && code[blocks] === "[") edits.push(...listEdits(source, code, blocks));
|
|
836
|
+
} else if (prop.key === "auth" && kind === "{") {
|
|
837
|
+
const authorization = valueOf(source, code, prop.valueStart, "authorization");
|
|
838
|
+
const operations = authorization !== void 0 && code[authorization] === "{" ? valueOf(source, code, authorization, "operations") : void 0;
|
|
839
|
+
if (operations !== void 0 && code[operations] === "{") edits.push(...keyEdits(source, code, operations, currentOperationName));
|
|
840
|
+
} else if (prop.key === "$env" && kind === "{") {
|
|
841
|
+
for (const env of properties(source, code, prop.valueStart) ?? []) if (code[env.valueStart] === "{") edits.push(...objectEdits(source, code, env.valueStart));
|
|
842
|
+
} else if (ENVIRONMENT_KEY.test(prop.key) && kind === "{") edits.push(...objectEdits(source, code, prop.valueStart));
|
|
843
|
+
}
|
|
844
|
+
return edits;
|
|
845
|
+
}
|
|
846
|
+
/** `better-supabase.config.ts`, grouped, with the 0.15 block names. */
|
|
847
|
+
function renameBlocksInSource(source) {
|
|
848
|
+
const code = mask(source);
|
|
849
|
+
const open = configObject(code);
|
|
850
|
+
if (open === void 0) return {
|
|
851
|
+
ok: false,
|
|
852
|
+
reason: "no defineConfig({...}) or default export object found"
|
|
853
|
+
};
|
|
854
|
+
return {
|
|
855
|
+
ok: true,
|
|
856
|
+
text: applyEdits$2(source, objectEdits(source, code, open))
|
|
857
|
+
};
|
|
858
|
+
}
|
|
859
|
+
function renameKeys(value, rename) {
|
|
860
|
+
return isObject(value) ? Object.fromEntries(Object.entries(value).map(([key, entry]) => [rename(key), entry])) : value;
|
|
861
|
+
}
|
|
862
|
+
const renameList = (value) => Array.isArray(value) ? value.map((entry) => typeof entry === "string" ? renamedBlock(entry) ?? entry : entry) : value;
|
|
863
|
+
/** A parsed config object with the 0.15 block names. */
|
|
864
|
+
function renameBlocksInConfig(config) {
|
|
865
|
+
const out = {};
|
|
866
|
+
for (const [key, value] of Object.entries(config)) if (key === "blocks") out[key] = Array.isArray(value) ? renameList(value) : renameKeys(value, (name) => renamedBlock(name) ?? name);
|
|
867
|
+
else if (key === "preset" && isObject(value)) out[key] = value["blocks"] === void 0 ? value : {
|
|
868
|
+
...value,
|
|
869
|
+
blocks: renameList(value["blocks"])
|
|
870
|
+
};
|
|
871
|
+
else if (key === "auth" && isObject(value)) {
|
|
872
|
+
const authorization = value["authorization"];
|
|
873
|
+
out[key] = isObject(authorization) ? {
|
|
874
|
+
...value,
|
|
875
|
+
authorization: authorization["operations"] === void 0 ? authorization : {
|
|
876
|
+
...authorization,
|
|
877
|
+
operations: renameKeys(authorization["operations"], currentOperationName)
|
|
878
|
+
}
|
|
879
|
+
} : value;
|
|
880
|
+
} else if (key === "$env" && isObject(value) || ENVIRONMENT_KEY.test(key) && isObject(value)) out[key] = key === "$env" ? Object.fromEntries(Object.entries(value).map(([name, entry]) => [name, isObject(entry) ? renameBlocksInConfig(entry) : entry])) : renameBlocksInConfig(value);
|
|
881
|
+
else out[key] = value;
|
|
882
|
+
return out;
|
|
883
|
+
}
|
|
884
|
+
/** `edit`, then the 0.15 block names on its text. */
|
|
885
|
+
function withBlockNames(edit, json) {
|
|
886
|
+
if (!edit.ok) return edit;
|
|
887
|
+
if (!json) return renameBlocksInSource(edit.text);
|
|
888
|
+
const config = JSON.parse(edit.text);
|
|
889
|
+
if (!isObject(config)) return edit;
|
|
890
|
+
const renamed = renameBlocksInConfig(config);
|
|
891
|
+
return JSON.stringify(renamed) === JSON.stringify(config) ? edit : {
|
|
892
|
+
ok: true,
|
|
893
|
+
text: `${JSON.stringify(renamed, null, 2)}\n`
|
|
894
|
+
};
|
|
895
|
+
}
|
|
896
|
+
//#endregion
|
|
897
|
+
//#region src/cli/sql/config-block-on.ts
|
|
898
|
+
const OPTIONS = /\boptions\s*:\s*\{/g;
|
|
899
|
+
const KEY_BEFORE = /(?:["']([\w-]+)["']|([A-Za-z_$][\w$-]*))\s*:\s*$/;
|
|
900
|
+
function applyEdits$1(source, edits) {
|
|
901
|
+
let text = source;
|
|
902
|
+
for (const edit of edits.toSorted((a, b) => b.start - a.start)) text = text.slice(0, edit.start) + edit.text + text.slice(edit.end);
|
|
903
|
+
return text;
|
|
904
|
+
}
|
|
905
|
+
/** The `{` of the object literal that holds the code at `index`. */
|
|
906
|
+
function enclosingObject(code, index) {
|
|
907
|
+
let depth = 0;
|
|
908
|
+
for (let at = index - 1; at >= 0; at -= 1) {
|
|
909
|
+
const char = code[at];
|
|
910
|
+
if (char === "}" || char === "]" || char === ")") depth += 1;
|
|
911
|
+
else if (char === "{" || char === "[" || char === "(") {
|
|
912
|
+
if (depth === 0) return char === "{" ? at : void 0;
|
|
913
|
+
depth -= 1;
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
/** The block an entry installs: its `block` string, or the key it sits under. */
|
|
918
|
+
function blockOf(source, open, props) {
|
|
919
|
+
const block = props.find((prop) => prop.key === "block");
|
|
920
|
+
if (block !== void 0) return /^["']([\w-]+)["']$/.exec(source.slice(block.valueStart, block.valueEnd))?.[1];
|
|
921
|
+
const key = KEY_BEFORE.exec(source.slice(0, open));
|
|
922
|
+
return key?.[1] ?? key?.[2];
|
|
923
|
+
}
|
|
924
|
+
/** `{ deal: ["amount"] }` as `{ deal: { fields: ["amount"] } }`. */
|
|
925
|
+
function wrapFields(source, code, open) {
|
|
926
|
+
return (properties(source, code, open) ?? []).flatMap((prop) => prop.key !== void 0 && code[prop.valueStart] === "[" ? [{
|
|
927
|
+
start: prop.valueStart,
|
|
928
|
+
end: prop.valueEnd,
|
|
929
|
+
text: `{ fields: ${source.slice(prop.valueStart, prop.valueEnd)} }`
|
|
930
|
+
}] : []);
|
|
931
|
+
}
|
|
932
|
+
/** `text` moved one object level out: two spaces fewer after each newline. */
|
|
933
|
+
const outdented = (text) => text.replaceAll(/\n {2}/g, "\n");
|
|
934
|
+
/** The edit that removes `props[index]` from its object literal. */
|
|
935
|
+
function removal(props, index) {
|
|
936
|
+
const next = props[index + 1];
|
|
937
|
+
const previous = props[index - 1];
|
|
938
|
+
const prop = props[index];
|
|
939
|
+
if (next !== void 0) return {
|
|
940
|
+
start: prop.start,
|
|
941
|
+
end: next.start,
|
|
942
|
+
text: ""
|
|
943
|
+
};
|
|
944
|
+
return {
|
|
945
|
+
start: previous?.valueEnd ?? prop.start,
|
|
946
|
+
end: prop.valueEnd,
|
|
947
|
+
text: ""
|
|
948
|
+
};
|
|
949
|
+
}
|
|
950
|
+
const lineOf = (source, index) => source.slice(0, index).split("\n").length;
|
|
951
|
+
/**
|
|
952
|
+
* `source` with every `options.subjects` of a block entry moved to the entry's
|
|
953
|
+
* `on`. An entry that already sets `on` is left and listed for review.
|
|
954
|
+
*/
|
|
955
|
+
function moveSubjectsToOnInSource(source) {
|
|
956
|
+
const code = mask(source);
|
|
957
|
+
const edits = [];
|
|
958
|
+
const review = [];
|
|
959
|
+
for (const match of code.matchAll(OPTIONS)) {
|
|
960
|
+
const valueOpen = match.index + match[0].length - 1;
|
|
961
|
+
const entryOpen = enclosingObject(code, match.index);
|
|
962
|
+
if (entryOpen === void 0) continue;
|
|
963
|
+
const entry = properties(source, code, entryOpen) ?? [];
|
|
964
|
+
const options = entry.find((prop) => prop.key === "options" && prop.valueStart === valueOpen);
|
|
965
|
+
const inner = properties(source, code, valueOpen) ?? [];
|
|
966
|
+
const index = inner.findIndex((prop) => prop.key === "subjects");
|
|
967
|
+
if (options === void 0 || index === -1) continue;
|
|
968
|
+
if (entry.some((prop) => prop.key === "on")) {
|
|
969
|
+
review.push({
|
|
970
|
+
line: lineOf(source, match.index),
|
|
971
|
+
message: "options.subjects moved to on, and this block already sets on: merge them into on"
|
|
972
|
+
});
|
|
973
|
+
continue;
|
|
974
|
+
}
|
|
975
|
+
const subjects = inner[index];
|
|
976
|
+
const shorthand = subjects.valueStart === subjects.start;
|
|
977
|
+
const wrap = !shorthand && code[subjects.valueStart] === "{" && blockOf(source, entryOpen, entry) === "field-history";
|
|
978
|
+
const slice = source.slice(subjects.valueStart, subjects.valueEnd);
|
|
979
|
+
const raw = shorthand ? "subjects" : wrap ? applyEdits$1(slice, wrapFields(source, code, subjects.valueStart).map((edit) => ({
|
|
980
|
+
...edit,
|
|
981
|
+
start: edit.start - subjects.valueStart,
|
|
982
|
+
end: edit.end - subjects.valueStart
|
|
983
|
+
}))) : slice;
|
|
984
|
+
const on = `on: ${outdented(raw)}`;
|
|
985
|
+
if (inner.length === 1) {
|
|
986
|
+
edits.push({
|
|
987
|
+
start: options.start,
|
|
988
|
+
end: options.valueEnd,
|
|
989
|
+
text: on
|
|
990
|
+
});
|
|
991
|
+
continue;
|
|
992
|
+
}
|
|
993
|
+
const multiline = code.slice(entryOpen, closingIndex(code, entryOpen)).includes("\n");
|
|
994
|
+
edits.push({
|
|
995
|
+
start: options.start,
|
|
996
|
+
end: options.start,
|
|
997
|
+
text: `${on},${multiline ? `\n${indentAt(source, options.start)}` : " "}`
|
|
998
|
+
}, removal(inner, index));
|
|
999
|
+
}
|
|
1000
|
+
return {
|
|
1001
|
+
text: applyEdits$1(source, edits),
|
|
1002
|
+
review
|
|
1003
|
+
};
|
|
1004
|
+
}
|
|
1005
|
+
function moveInObject(value) {
|
|
1006
|
+
if (Array.isArray(value)) return value.map(moveInObject);
|
|
1007
|
+
if (!isRecord$1(value)) return value;
|
|
1008
|
+
const entries = Object.fromEntries(Object.entries(value).map(([key, entry]) => [key, moveInObject(entry)]));
|
|
1009
|
+
const options = entries["options"];
|
|
1010
|
+
if (!isRecord$1(options) || options["subjects"] === void 0 || entries["on"] !== void 0) return entries;
|
|
1011
|
+
const { subjects, ...rest } = options;
|
|
1012
|
+
const { options: _, ...withoutOptions } = entries;
|
|
1013
|
+
return {
|
|
1014
|
+
...withoutOptions,
|
|
1015
|
+
on: subjects,
|
|
1016
|
+
...Object.keys(rest).length > 0 && { options: rest }
|
|
1017
|
+
};
|
|
1018
|
+
}
|
|
1019
|
+
/** Field history's `on`, with each column list as `{ fields }`. */
|
|
1020
|
+
function fieldHistoryOn(config) {
|
|
1021
|
+
if (!isRecord$1(config) || !isRecord$1(config["blocks"])) return config;
|
|
1022
|
+
const history = config["blocks"]["field-history"];
|
|
1023
|
+
if (!isRecord$1(history) || !isRecord$1(history["on"])) return config;
|
|
1024
|
+
const on = Object.fromEntries(Object.entries(history["on"]).map(([type, fields]) => [type, Array.isArray(fields) ? { fields } : fields]));
|
|
1025
|
+
return {
|
|
1026
|
+
...config,
|
|
1027
|
+
blocks: {
|
|
1028
|
+
...config["blocks"],
|
|
1029
|
+
"field-history": {
|
|
1030
|
+
...history,
|
|
1031
|
+
on
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
};
|
|
1035
|
+
}
|
|
1036
|
+
/** `edit`, then every `options.subjects` moved to `on`. */
|
|
1037
|
+
function withSubjectsOn(edit, json) {
|
|
1038
|
+
if (!edit.ok) return edit;
|
|
1039
|
+
const before = "review" in edit ? edit.review : [];
|
|
1040
|
+
if (!json) {
|
|
1041
|
+
const moved = moveSubjectsToOnInSource(edit.text);
|
|
1042
|
+
return {
|
|
1043
|
+
ok: true,
|
|
1044
|
+
text: moved.text,
|
|
1045
|
+
review: [...before, ...moved.review]
|
|
1046
|
+
};
|
|
1047
|
+
}
|
|
1048
|
+
const config = JSON.parse(edit.text);
|
|
1049
|
+
const moved = fieldHistoryOn(moveInObject(config));
|
|
1050
|
+
return {
|
|
1051
|
+
ok: true,
|
|
1052
|
+
text: JSON.stringify(moved) === JSON.stringify(config) ? edit.text : `${JSON.stringify(moved, null, 2)}\n`,
|
|
1053
|
+
review: before
|
|
1054
|
+
};
|
|
1055
|
+
}
|
|
1056
|
+
//#endregion
|
|
1057
|
+
//#region src/cli/sql/config-move.ts
|
|
1058
|
+
const lineStart = (source, index) => source.lastIndexOf("\n", index - 1) + 1;
|
|
1059
|
+
function propertySpan(source, code, open, props, index) {
|
|
1060
|
+
const prop = props[index];
|
|
1061
|
+
const previous = props[index - 1];
|
|
1062
|
+
if (prop === void 0) throw new Error(`no property at ${index}`);
|
|
1063
|
+
const close = closingIndex(code, open);
|
|
1064
|
+
const multiline = code.slice(open, close).includes("\n");
|
|
1065
|
+
const after = skipSpace(code, prop.valueEnd);
|
|
1066
|
+
const hasComma = code[after] === ",";
|
|
1067
|
+
const tailFrom = hasComma ? after + 1 : prop.valueEnd;
|
|
1068
|
+
if (!multiline) {
|
|
1069
|
+
const value = source.slice(prop.start, prop.valueEnd);
|
|
1070
|
+
if (previous) return {
|
|
1071
|
+
start: previous.valueEnd,
|
|
1072
|
+
end: prop.valueEnd,
|
|
1073
|
+
value,
|
|
1074
|
+
keyAt: 0,
|
|
1075
|
+
trailing: "",
|
|
1076
|
+
hasComma,
|
|
1077
|
+
multiline
|
|
1078
|
+
};
|
|
1079
|
+
return {
|
|
1080
|
+
start: prop.start,
|
|
1081
|
+
end: hasComma ? skipSpace(code, tailFrom) : prop.valueEnd,
|
|
1082
|
+
value,
|
|
1083
|
+
keyAt: 0,
|
|
1084
|
+
trailing: "",
|
|
1085
|
+
hasComma,
|
|
1086
|
+
multiline
|
|
1087
|
+
};
|
|
1088
|
+
}
|
|
1089
|
+
let before = open + 1;
|
|
1090
|
+
if (previous) {
|
|
1091
|
+
const comma = skipSpace(code, previous.valueEnd);
|
|
1092
|
+
before = code[comma] === "," ? comma + 1 : previous.valueEnd;
|
|
1093
|
+
}
|
|
1094
|
+
const newline = source.slice(before, prop.start).indexOf("\n");
|
|
1095
|
+
const start = newline === -1 ? prop.start : before + newline + 1;
|
|
1096
|
+
const lineEnd = source.indexOf("\n", tailFrom);
|
|
1097
|
+
const restIsBlank = lineEnd !== -1 && code.slice(tailFrom, lineEnd).trim() === "";
|
|
1098
|
+
return {
|
|
1099
|
+
start,
|
|
1100
|
+
end: restIsBlank ? lineEnd + 1 : tailFrom,
|
|
1101
|
+
value: source.slice(start, prop.valueEnd),
|
|
1102
|
+
keyAt: prop.start - start,
|
|
1103
|
+
trailing: restIsBlank ? source.slice(tailFrom, lineEnd).trimEnd() : "",
|
|
1104
|
+
hasComma,
|
|
1105
|
+
multiline
|
|
1106
|
+
};
|
|
1107
|
+
}
|
|
1108
|
+
/** `modules: ...` as `blocks: ...`, keeping the key's quotes. */
|
|
1109
|
+
function renameKey(text, keyAt, prop) {
|
|
1110
|
+
const head = text.slice(keyAt);
|
|
1111
|
+
const quoted = /^(["'])modules\1/.exec(head);
|
|
1112
|
+
if (quoted) {
|
|
1113
|
+
const quote = quoted[1] ?? "\"";
|
|
1114
|
+
return `${text.slice(0, keyAt)}${quote}blocks${quote}${head.slice(quoted[0].length)}`;
|
|
1115
|
+
}
|
|
1116
|
+
if (prop.valueStart === prop.start) return `${text.slice(0, keyAt)}blocks: modules${head.slice(7)}`;
|
|
1117
|
+
return `${text.slice(0, keyAt)}blocks${head.slice(7)}`;
|
|
1118
|
+
}
|
|
1119
|
+
function reindent(text, from, to) {
|
|
1120
|
+
return text.split("\n").map((line) => line.startsWith(from) ? to + line.slice(from.length) : line).join("\n");
|
|
1121
|
+
}
|
|
1122
|
+
const sortKey = (key) => (key ?? "").toLowerCase();
|
|
1123
|
+
function keysSorted(keys) {
|
|
1124
|
+
return keys.every((key, index) => index === 0 || key !== void 0 && sortKey(keys[index - 1]) <= sortKey(key));
|
|
1125
|
+
}
|
|
1126
|
+
function rootKeys(source) {
|
|
1127
|
+
const code = mask(source);
|
|
1128
|
+
const root = configObject(code);
|
|
1129
|
+
return (root === void 0 ? void 0 : properties(source, code, root))?.map((prop) => prop.key) ?? [];
|
|
1130
|
+
}
|
|
1131
|
+
function sortBlocksKey(source) {
|
|
1132
|
+
const code = mask(source);
|
|
1133
|
+
const root = configObject(code);
|
|
1134
|
+
if (root === void 0) return source;
|
|
1135
|
+
const props = properties(source, code, root);
|
|
1136
|
+
const blocksIndex = props?.findIndex((prop) => prop.key === "blocks") ?? -1;
|
|
1137
|
+
if (!props || blocksIndex === -1) return source;
|
|
1138
|
+
const targetIndex = props.findIndex((prop, index) => index !== blocksIndex && sortKey(prop.key) > sortKey("blocks"));
|
|
1139
|
+
if (targetIndex === -1 || targetIndex === blocksIndex + 1) return source;
|
|
1140
|
+
const blocks = propertySpan(source, code, root, props, blocksIndex);
|
|
1141
|
+
const target = props[targetIndex];
|
|
1142
|
+
if (target.start > blocks.start) return source;
|
|
1143
|
+
const at = blocks.multiline ? propertySpan(source, code, root, props, targetIndex).start : target.start;
|
|
1144
|
+
const moved = blocks.multiline ? `${blocks.value},${blocks.trailing}\n` : `${blocks.value}, `;
|
|
1145
|
+
return source.slice(0, at) + moved + source.slice(at, blocks.start) + source.slice(blocks.end);
|
|
1146
|
+
}
|
|
1147
|
+
/**
|
|
1148
|
+
* `source` with `sql.modules` moved to a top-level `blocks` key, placed right
|
|
1149
|
+
* after `sql`, or in sorted position when the config's top-level keys are
|
|
1150
|
+
* sorted. `sql` is dropped when nothing else is left in it. A config without
|
|
1151
|
+
* `sql.modules` comes back unchanged; one that also sets `blocks` is refused,
|
|
1152
|
+
* because the two need a merge by hand.
|
|
1153
|
+
*/
|
|
1154
|
+
function moveSqlModulesToBlocks(source) {
|
|
1155
|
+
const edit = moveSqlModules(source);
|
|
1156
|
+
return edit.ok && edit.text !== source && keysSorted(rootKeys(source)) ? {
|
|
1157
|
+
ok: true,
|
|
1158
|
+
text: sortBlocksKey(edit.text)
|
|
1159
|
+
} : edit;
|
|
1160
|
+
}
|
|
1161
|
+
function moveSqlModules(source) {
|
|
1162
|
+
const code = mask(source);
|
|
1163
|
+
const root = configObject(code);
|
|
1164
|
+
if (root === void 0) return /\bmodules\b/.test(code) ? {
|
|
1165
|
+
ok: false,
|
|
1166
|
+
reason: "it doesn't pass an object literal to defineConfig()"
|
|
1167
|
+
} : {
|
|
1168
|
+
ok: true,
|
|
1169
|
+
text: source
|
|
1170
|
+
};
|
|
1171
|
+
const rootProps = properties(source, code, root);
|
|
1172
|
+
if (!rootProps) return {
|
|
1173
|
+
ok: false,
|
|
1174
|
+
reason: "its config object can't be read"
|
|
1175
|
+
};
|
|
1176
|
+
const sqlIndex = rootProps.findIndex((prop) => prop.key === "sql");
|
|
1177
|
+
const sql = rootProps[sqlIndex];
|
|
1178
|
+
if (sql === void 0) return {
|
|
1179
|
+
ok: true,
|
|
1180
|
+
text: source
|
|
1181
|
+
};
|
|
1182
|
+
if (code[sql.valueStart] !== "{" || sql.valueStart === sql.start) return /\bmodules\b/.test(code) ? {
|
|
1183
|
+
ok: false,
|
|
1184
|
+
reason: "its `sql` value isn't an object literal; move `sql.modules` to `blocks` by hand"
|
|
1185
|
+
} : {
|
|
1186
|
+
ok: true,
|
|
1187
|
+
text: source
|
|
1188
|
+
};
|
|
1189
|
+
const sqlProps = properties(source, code, sql.valueStart);
|
|
1190
|
+
if (!sqlProps) return {
|
|
1191
|
+
ok: false,
|
|
1192
|
+
reason: "its `sql` object can't be read"
|
|
1193
|
+
};
|
|
1194
|
+
const modulesIndex = sqlProps.findIndex((prop) => prop.key === "modules");
|
|
1195
|
+
const modules = sqlProps[modulesIndex];
|
|
1196
|
+
if (modules === void 0) return {
|
|
1197
|
+
ok: true,
|
|
1198
|
+
text: source
|
|
1199
|
+
};
|
|
1200
|
+
if (rootProps.some((prop) => prop.key === "blocks")) return {
|
|
1201
|
+
ok: false,
|
|
1202
|
+
reason: "it sets both `sql.modules` and `blocks`; merge `sql.modules` into `blocks` by hand"
|
|
1203
|
+
};
|
|
1204
|
+
const cut = propertySpan(source, code, sql.valueStart, sqlProps, modulesIndex);
|
|
1205
|
+
const outer = propertySpan(source, code, root, rootProps, sqlIndex);
|
|
1206
|
+
const renamed = renameKey(cut.value, cut.keyAt, modules);
|
|
1207
|
+
const sqlClose = closingIndex(code, sql.valueStart);
|
|
1208
|
+
const leftover = source.slice(sql.valueStart + 1, cut.start) + source.slice(cut.end, sqlClose);
|
|
1209
|
+
const dropSql = sqlProps.length === 1 && leftover.trim() === "";
|
|
1210
|
+
if (!cut.multiline || !outer.multiline) {
|
|
1211
|
+
const property = renamed.trim();
|
|
1212
|
+
if (dropSql) return {
|
|
1213
|
+
ok: true,
|
|
1214
|
+
text: source.slice(0, sql.start) + property + source.slice(sql.valueEnd)
|
|
1215
|
+
};
|
|
1216
|
+
return {
|
|
1217
|
+
ok: true,
|
|
1218
|
+
text: `${source.slice(0, cut.start)}${source.slice(cut.end, sql.valueEnd)}, ${property}${source.slice(sql.valueEnd)}`
|
|
1219
|
+
};
|
|
1220
|
+
}
|
|
1221
|
+
const sqlIndent = indentAt(source, sql.start);
|
|
1222
|
+
const body = reindent(renamed, indentAt(source, modules.start), sqlIndent);
|
|
1223
|
+
const moved = `${cut.start === modules.start ? sqlIndent + body : body},${cut.trailing}\n`;
|
|
1224
|
+
if (dropSql) return {
|
|
1225
|
+
ok: true,
|
|
1226
|
+
text: source.slice(0, lineStart(source, sql.start)) + moved + source.slice(outer.end)
|
|
1227
|
+
};
|
|
1228
|
+
const atLineStart = source[outer.end - 1] === "\n";
|
|
1229
|
+
return {
|
|
1230
|
+
ok: true,
|
|
1231
|
+
text: source.slice(0, cut.start) + source.slice(cut.end, sql.valueEnd) + (outer.hasComma ? "" : ",") + source.slice(sql.valueEnd, outer.end) + (atLineStart ? "" : "\n") + moved + source.slice(outer.end)
|
|
1232
|
+
};
|
|
1233
|
+
}
|
|
1234
|
+
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1235
|
+
function withBlocksSorted(config) {
|
|
1236
|
+
const entries = Object.entries(config).filter(([key]) => key !== "blocks");
|
|
1237
|
+
const after = entries.findIndex(([key]) => sortKey(key) > "blocks");
|
|
1238
|
+
entries.splice(after === -1 ? entries.length : after, 0, ["blocks", config["blocks"]]);
|
|
1239
|
+
return Object.fromEntries(entries);
|
|
1240
|
+
}
|
|
1241
|
+
/** `moveSqlModulesToBlocks` for `better-supabase.config.json`. */
|
|
1242
|
+
function moveSqlModulesToBlocksJson(source) {
|
|
1243
|
+
let config;
|
|
1244
|
+
try {
|
|
1245
|
+
config = JSON.parse(source);
|
|
1246
|
+
} catch {
|
|
1247
|
+
return {
|
|
1248
|
+
ok: false,
|
|
1249
|
+
reason: "it isn't valid JSON"
|
|
1250
|
+
};
|
|
1251
|
+
}
|
|
1252
|
+
if (!isRecord(config)) return {
|
|
1253
|
+
ok: false,
|
|
1254
|
+
reason: "it isn't a JSON object"
|
|
1255
|
+
};
|
|
1256
|
+
const sql = config["sql"];
|
|
1257
|
+
if (!isRecord(sql) || !("modules" in sql)) return {
|
|
1258
|
+
ok: true,
|
|
1259
|
+
text: source
|
|
1260
|
+
};
|
|
1261
|
+
if ("blocks" in config) return {
|
|
1262
|
+
ok: false,
|
|
1263
|
+
reason: "it sets both `sql.modules` and `blocks`; merge `sql.modules` into `blocks` by hand"
|
|
1264
|
+
};
|
|
1265
|
+
const { modules, ...restSql } = sql;
|
|
1266
|
+
const next = {};
|
|
1267
|
+
for (const [key, value] of Object.entries(config)) {
|
|
1268
|
+
if (key !== "sql") {
|
|
1269
|
+
next[key] = value;
|
|
1270
|
+
continue;
|
|
1271
|
+
}
|
|
1272
|
+
if (Object.keys(restSql).length > 0) next["sql"] = restSql;
|
|
1273
|
+
next["blocks"] = modules;
|
|
1274
|
+
}
|
|
1275
|
+
const sorted = keysSorted(Object.keys(config)) ? withBlocksSorted(next) : next;
|
|
1276
|
+
const indent = /^[ \t]+/m.exec(source)?.[0] ?? " ";
|
|
1277
|
+
return {
|
|
1278
|
+
ok: true,
|
|
1279
|
+
text: `${JSON.stringify(sorted, null, indent)}\n`
|
|
1280
|
+
};
|
|
1281
|
+
}
|
|
1282
|
+
/** Review lines for `sql.modules` left in environment blocks after the move. */
|
|
1283
|
+
function environmentModules(text) {
|
|
1284
|
+
return mask(text).split("\n").flatMap((line, index) => /\bmodules\s*:/.test(line) ? [{
|
|
1285
|
+
line: index + 1,
|
|
1286
|
+
message: "`sql.modules` in an environment block moves to `blocks` too"
|
|
1287
|
+
}] : []);
|
|
1288
|
+
}
|
|
1289
|
+
//#endregion
|
|
1290
|
+
//#region src/cli/sql/config-plugins.ts
|
|
1291
|
+
/** The block each plugin flag became, and its column keys as block options. */
|
|
1292
|
+
const PLUGIN_BLOCKS = {
|
|
1293
|
+
timestamps: {
|
|
1294
|
+
block: "updated-at",
|
|
1295
|
+
options: {
|
|
1296
|
+
createdAt: "createdAt",
|
|
1297
|
+
updatedAt: "updatedAt"
|
|
1298
|
+
}
|
|
1299
|
+
},
|
|
1300
|
+
actor: {
|
|
1301
|
+
block: "created-by",
|
|
1302
|
+
options: {
|
|
1303
|
+
createdBy: "createdBy",
|
|
1304
|
+
updatedBy: "updatedBy",
|
|
1305
|
+
impersonatedBy: "impersonatedBy"
|
|
1306
|
+
}
|
|
1307
|
+
},
|
|
1308
|
+
softDelete: {
|
|
1309
|
+
block: "trash",
|
|
1310
|
+
options: { column: "deletedAt" }
|
|
1311
|
+
}
|
|
1312
|
+
};
|
|
1313
|
+
const DEFAULT_ORGANIZATION_COLUMN = "organization_id";
|
|
1314
|
+
function movesOf(flags) {
|
|
1315
|
+
const blocks = [];
|
|
1316
|
+
let tenant = false;
|
|
1317
|
+
for (const [name, flag] of Object.entries(flags)) {
|
|
1318
|
+
if (name === "tenant") {
|
|
1319
|
+
tenant = flag !== false;
|
|
1320
|
+
continue;
|
|
1321
|
+
}
|
|
1322
|
+
const move = PLUGIN_BLOCKS[name];
|
|
1323
|
+
if (move === void 0) return { reason: `plugins.${name} is not a plugin flag 0.14 had` };
|
|
1324
|
+
if (flag === false) continue;
|
|
1325
|
+
const options = {};
|
|
1326
|
+
for (const [key, value] of Object.entries(flag)) {
|
|
1327
|
+
const option = move.options[key];
|
|
1328
|
+
if (option === void 0) return { reason: `plugins.${name}.${key} is not a column it took` };
|
|
1329
|
+
options[option] = value;
|
|
1330
|
+
}
|
|
1331
|
+
blocks.push([move.block, options]);
|
|
1332
|
+
}
|
|
1333
|
+
return {
|
|
1334
|
+
blocks,
|
|
1335
|
+
tenant
|
|
1336
|
+
};
|
|
1337
|
+
}
|
|
1338
|
+
/** A string literal's value, or undefined for any other expression. */
|
|
1339
|
+
function stringValue(text) {
|
|
1340
|
+
return /^(["'])((?:(?!\1)[^\\])*)\1$/.exec(text.trim())?.[2];
|
|
1341
|
+
}
|
|
1342
|
+
function flagsInSource(source, code, open) {
|
|
1343
|
+
const flags = {};
|
|
1344
|
+
for (const prop of properties(source, code, open) ?? []) {
|
|
1345
|
+
const value = source.slice(prop.valueStart, prop.valueEnd).trim();
|
|
1346
|
+
if (prop.key === void 0) return { reason: "plugins has a spread or a computed key" };
|
|
1347
|
+
if (value === "true" || value === "false") {
|
|
1348
|
+
flags[prop.key] = value === "true" ? {} : false;
|
|
1349
|
+
continue;
|
|
1350
|
+
}
|
|
1351
|
+
if (code[prop.valueStart] !== "{") return { reason: `plugins.${prop.key} isn't true, false or an object` };
|
|
1352
|
+
const columns = {};
|
|
1353
|
+
for (const inner of properties(source, code, prop.valueStart) ?? []) {
|
|
1354
|
+
const column = stringValue(source.slice(inner.valueStart, inner.valueEnd));
|
|
1355
|
+
if (inner.key === void 0 || column === void 0) return { reason: `plugins.${prop.key} has a key that isn't a string` };
|
|
1356
|
+
columns[inner.key] = column;
|
|
1357
|
+
}
|
|
1358
|
+
flags[prop.key] = columns;
|
|
1359
|
+
}
|
|
1360
|
+
return flags;
|
|
1361
|
+
}
|
|
1362
|
+
/** Whether the `blocks` value names `memberships`, as a key or a list item. */
|
|
1363
|
+
const MEMBERSHIPS = /["']memberships["']|\bmemberships\s*:/;
|
|
1364
|
+
/** `better-supabase.config.ts` with `plugins` moved into blocks. */
|
|
1365
|
+
function movePluginsInSource(source) {
|
|
1366
|
+
const code = mask(source);
|
|
1367
|
+
const root = configObject(code);
|
|
1368
|
+
if (root === void 0) return {
|
|
1369
|
+
ok: true,
|
|
1370
|
+
text: source
|
|
1371
|
+
};
|
|
1372
|
+
const props = properties(source, code, root) ?? [];
|
|
1373
|
+
const index = props.findIndex((prop) => prop.key === "plugins");
|
|
1374
|
+
const plugins = props[index];
|
|
1375
|
+
if (plugins === void 0) return {
|
|
1376
|
+
ok: true,
|
|
1377
|
+
text: source
|
|
1378
|
+
};
|
|
1379
|
+
if (code[plugins.valueStart] !== "{") return {
|
|
1380
|
+
ok: false,
|
|
1381
|
+
reason: "its plugins key isn't a literal object"
|
|
1382
|
+
};
|
|
1383
|
+
const flags = flagsInSource(source, code, plugins.valueStart);
|
|
1384
|
+
if ("reason" in flags) return {
|
|
1385
|
+
ok: false,
|
|
1386
|
+
reason: String(flags.reason)
|
|
1387
|
+
};
|
|
1388
|
+
const moves = movesOf(flags);
|
|
1389
|
+
if ("reason" in moves) return {
|
|
1390
|
+
ok: false,
|
|
1391
|
+
reason: moves.reason
|
|
1392
|
+
};
|
|
1393
|
+
const multiline = code.slice(root, closingIndex(code, root)).includes("\n");
|
|
1394
|
+
const cut = cutRange(source, code, root, props, index, multiline);
|
|
1395
|
+
let edit = {
|
|
1396
|
+
ok: true,
|
|
1397
|
+
text: source.slice(0, cut.start) + source.slice(cut.end)
|
|
1398
|
+
};
|
|
1399
|
+
const blocks = props.find((prop) => prop.key === "blocks");
|
|
1400
|
+
const memberships = blocks !== void 0 && MEMBERSHIPS.test(source.slice(blocks.valueStart, blocks.valueEnd));
|
|
1401
|
+
const organization = organizationText(source, code, props);
|
|
1402
|
+
const organizationColumn = /\bcolumn\s*:/.test(organization);
|
|
1403
|
+
const onMissing = /\bonMissing\s*:/.test(organization);
|
|
1404
|
+
const steps = [
|
|
1405
|
+
...moves.blocks.flatMap(([block, options]) => [(text) => addBlocksToConfig(text, [block]), ...Object.entries(options).map(([key, value]) => (text) => setPathInConfig(text, [
|
|
1406
|
+
"blocks",
|
|
1407
|
+
block,
|
|
1408
|
+
"options",
|
|
1409
|
+
key
|
|
1410
|
+
], value))]),
|
|
1411
|
+
...moves.tenant && !memberships && !organizationColumn ? [(text) => setPathInConfig(text, [
|
|
1412
|
+
"auth",
|
|
1413
|
+
"organization",
|
|
1414
|
+
"column"
|
|
1415
|
+
], DEFAULT_ORGANIZATION_COLUMN)] : [],
|
|
1416
|
+
...moves.tenant && !onMissing ? [(text) => setPathInConfig(text, [
|
|
1417
|
+
"auth",
|
|
1418
|
+
"organization",
|
|
1419
|
+
"onMissing"
|
|
1420
|
+
], "error")] : []
|
|
1421
|
+
];
|
|
1422
|
+
for (const step of steps) {
|
|
1423
|
+
if (!edit.ok) return edit;
|
|
1424
|
+
edit = step(edit.text);
|
|
1425
|
+
}
|
|
1426
|
+
return edit;
|
|
1427
|
+
}
|
|
1428
|
+
/** The source of `auth.organization`, or `""` without one. */
|
|
1429
|
+
function organizationText(source, code, props) {
|
|
1430
|
+
const auth = props.find((prop) => prop.key === "auth");
|
|
1431
|
+
if (auth === void 0 || code[auth.valueStart] !== "{") return "";
|
|
1432
|
+
const organization = (properties(source, code, auth.valueStart) ?? []).find((prop) => prop.key === "organization");
|
|
1433
|
+
return organization === void 0 ? "" : source.slice(organization.valueStart, organization.valueEnd);
|
|
1434
|
+
}
|
|
1435
|
+
const isColumns = (value) => isRecord$1(value) && Object.values(value).every((column) => typeof column === "string");
|
|
1436
|
+
function flagsInJson(plugins) {
|
|
1437
|
+
if (!isRecord$1(plugins)) return { reason: "its plugins key isn't an object" };
|
|
1438
|
+
const flags = {};
|
|
1439
|
+
for (const [name, value] of Object.entries(plugins)) if (typeof value === "boolean") flags[name] = value ? {} : false;
|
|
1440
|
+
else if (isColumns(value)) flags[name] = value;
|
|
1441
|
+
else return { reason: `plugins.${name} isn't true, false or columns` };
|
|
1442
|
+
return flags;
|
|
1443
|
+
}
|
|
1444
|
+
const objectAt$1 = (value) => isRecord$1(value) ? value : {};
|
|
1445
|
+
/** `movePluginsInSource` for `better-supabase.config.json`. */
|
|
1446
|
+
function movePluginsInJson(source) {
|
|
1447
|
+
let config;
|
|
1448
|
+
try {
|
|
1449
|
+
config = JSON.parse(source);
|
|
1450
|
+
} catch {
|
|
1451
|
+
return {
|
|
1452
|
+
ok: true,
|
|
1453
|
+
text: source
|
|
1454
|
+
};
|
|
1455
|
+
}
|
|
1456
|
+
if (!isRecord$1(config) || !("plugins" in config)) return {
|
|
1457
|
+
ok: true,
|
|
1458
|
+
text: source
|
|
1459
|
+
};
|
|
1460
|
+
const { plugins, ...rest } = config;
|
|
1461
|
+
const flags = flagsInJson(plugins);
|
|
1462
|
+
if ("reason" in flags) return {
|
|
1463
|
+
ok: false,
|
|
1464
|
+
reason: String(flags.reason)
|
|
1465
|
+
};
|
|
1466
|
+
const moves = movesOf(flags);
|
|
1467
|
+
if ("reason" in moves) return {
|
|
1468
|
+
ok: false,
|
|
1469
|
+
reason: moves.reason
|
|
1470
|
+
};
|
|
1471
|
+
const listed = rest["blocks"] ?? {};
|
|
1472
|
+
const blocks = Array.isArray(listed) ? Object.fromEntries(listed.map((name) => [String(name), {}])) : { ...objectAt$1(listed) };
|
|
1473
|
+
const memberships = "memberships" in blocks;
|
|
1474
|
+
for (const [block, options] of moves.blocks) {
|
|
1475
|
+
const entry = objectAt$1(blocks[block]);
|
|
1476
|
+
blocks[block] = {
|
|
1477
|
+
...entry,
|
|
1478
|
+
...Object.keys(options).length === 0 ? {} : { options: {
|
|
1479
|
+
...objectAt$1(entry["options"]),
|
|
1480
|
+
...options
|
|
1481
|
+
} }
|
|
1482
|
+
};
|
|
1483
|
+
}
|
|
1484
|
+
const next = {
|
|
1485
|
+
...rest,
|
|
1486
|
+
...moves.blocks.length === 0 && rest["blocks"] === void 0 ? {} : { blocks: moves.blocks.length === 0 ? rest["blocks"] : blocks }
|
|
1487
|
+
};
|
|
1488
|
+
if (moves.tenant) {
|
|
1489
|
+
const auth = objectAt$1(next["auth"]);
|
|
1490
|
+
const organization = objectAt$1(auth["organization"]);
|
|
1491
|
+
next["auth"] = {
|
|
1492
|
+
...auth,
|
|
1493
|
+
organization: {
|
|
1494
|
+
...memberships ? {} : { column: DEFAULT_ORGANIZATION_COLUMN },
|
|
1495
|
+
onMissing: "error",
|
|
1496
|
+
...organization
|
|
1497
|
+
}
|
|
1498
|
+
};
|
|
1499
|
+
}
|
|
1500
|
+
const indent = /^[ \t]+/m.exec(source)?.[0] ?? " ";
|
|
1501
|
+
return {
|
|
1502
|
+
ok: true,
|
|
1503
|
+
text: `${JSON.stringify(next, null, indent)}\n`
|
|
1504
|
+
};
|
|
1505
|
+
}
|
|
1506
|
+
/** `edit` with `plugins` moved into blocks, after the regrouping. */
|
|
1507
|
+
function withoutPlugins(edit, json) {
|
|
1508
|
+
if (!edit.ok) return edit;
|
|
1509
|
+
return json ? movePluginsInJson(edit.text) : movePluginsInSource(edit.text);
|
|
1510
|
+
}
|
|
1511
|
+
//#endregion
|
|
1512
|
+
//#region src/cli/sql/config-webhook-format.ts
|
|
1513
|
+
const PATH = [
|
|
1514
|
+
"blocks",
|
|
1515
|
+
"webhooks-out",
|
|
1516
|
+
"options",
|
|
1517
|
+
"defaultFormat"
|
|
1518
|
+
];
|
|
1519
|
+
function needsPin(block) {
|
|
1520
|
+
if (!isRecord$1(block) || block["mode"] !== "adopt") return false;
|
|
1521
|
+
const options = block["options"];
|
|
1522
|
+
const columns = block["columns"];
|
|
1523
|
+
const endpoints = isRecord$1(columns) ? columns["endpoints"] : void 0;
|
|
1524
|
+
return !(isRecord$1(options) && options["defaultFormat"] !== void 0) && !(isRecord$1(endpoints) && endpoints["format"] !== void 0);
|
|
1525
|
+
}
|
|
1526
|
+
function pinJson(source, format) {
|
|
1527
|
+
let config;
|
|
1528
|
+
try {
|
|
1529
|
+
config = JSON.parse(source);
|
|
1530
|
+
} catch {
|
|
1531
|
+
return {
|
|
1532
|
+
ok: false,
|
|
1533
|
+
reason: "it isn't valid JSON"
|
|
1534
|
+
};
|
|
1535
|
+
}
|
|
1536
|
+
const blocks = isRecord$1(config) ? config["blocks"] : void 0;
|
|
1537
|
+
return isRecord$1(blocks) && needsPin(blocks["webhooks-out"]) ? setPathInJson(source, PATH, format) : void 0;
|
|
1538
|
+
}
|
|
1539
|
+
/** The object literal at `prop`'s value, or `undefined` when it isn't one. */
|
|
1540
|
+
function objectAt(source, code, prop) {
|
|
1541
|
+
return prop && code[prop.valueStart] === "{" ? properties(source, code, prop.valueStart) : void 0;
|
|
1542
|
+
}
|
|
1543
|
+
function pinTs(source, format) {
|
|
1544
|
+
const code = mask(source);
|
|
1545
|
+
const root = configObject(code);
|
|
1546
|
+
if (root === void 0) return;
|
|
1547
|
+
const find = (props, key) => props?.find((prop) => prop.key === key);
|
|
1548
|
+
const blockProp = find(objectAt(source, code, find(properties(source, code, root), "blocks")), "webhooks-out");
|
|
1549
|
+
if (!blockProp) return;
|
|
1550
|
+
const block = objectAt(source, code, blockProp);
|
|
1551
|
+
if (!block) return {
|
|
1552
|
+
ok: false,
|
|
1553
|
+
reason: "its blocks[\"webhooks-out\"] isn't a literal object"
|
|
1554
|
+
};
|
|
1555
|
+
const mode = find(block, "mode");
|
|
1556
|
+
const modeText = mode ? source.slice(mode.valueStart, mode.valueEnd).trim() : void 0;
|
|
1557
|
+
if (modeText !== "\"adopt\"" && modeText !== "'adopt'") return;
|
|
1558
|
+
const options = find(block, "options");
|
|
1559
|
+
const columns = find(block, "columns");
|
|
1560
|
+
if (options && !objectAt(source, code, options) || columns && !objectAt(source, code, columns)) return {
|
|
1561
|
+
ok: false,
|
|
1562
|
+
reason: "its blocks[\"webhooks-out\"] options or columns aren't literal objects"
|
|
1563
|
+
};
|
|
1564
|
+
const endpoints = find(objectAt(source, code, columns), "endpoints");
|
|
1565
|
+
if (endpoints && !objectAt(source, code, endpoints)) return {
|
|
1566
|
+
ok: false,
|
|
1567
|
+
reason: "its blocks[\"webhooks-out\"].columns.endpoints isn't a literal object"
|
|
1568
|
+
};
|
|
1569
|
+
if (find(objectAt(source, code, options), "defaultFormat") || find(objectAt(source, code, endpoints), "format")) return;
|
|
1570
|
+
return setPathInConfig(source, PATH, format);
|
|
1571
|
+
}
|
|
1572
|
+
/**
|
|
1573
|
+
* Pins `defaultFormat` to `format` where an adopted block leaves it to the
|
|
1574
|
+
* default.
|
|
1575
|
+
*/
|
|
1576
|
+
function pinWebhookFormat(source, json, format) {
|
|
1577
|
+
return json ? pinJson(source, format) : pinTs(source, format);
|
|
1578
|
+
}
|
|
1579
|
+
/**
|
|
1580
|
+
* `edit` with `defaultFormat` pinned to `format` where an adopted webhooks-out
|
|
1581
|
+
* block needs it.
|
|
1582
|
+
*/
|
|
1583
|
+
function withWebhookFormat(edit, json, format) {
|
|
1584
|
+
if (!edit.ok) return edit;
|
|
1585
|
+
const earlier = "review" in edit ? edit.review : [];
|
|
1586
|
+
const pin = pinWebhookFormat(edit.text, json, format);
|
|
1587
|
+
if (pin === void 0) return {
|
|
1588
|
+
ok: true,
|
|
1589
|
+
text: edit.text,
|
|
1590
|
+
review: earlier
|
|
1591
|
+
};
|
|
1592
|
+
if (!pin.ok) return {
|
|
1593
|
+
ok: true,
|
|
1594
|
+
text: edit.text,
|
|
1595
|
+
review: [...earlier, {
|
|
1596
|
+
line: 1,
|
|
1597
|
+
message: `blocks["webhooks-out"] is adopted and maps no columns.endpoints.format, but defaultFormat wasn't pinned: ${pin.reason}. Set options.defaultFormat to "${format}" to keep the body endpoints get now`
|
|
1598
|
+
}]
|
|
1599
|
+
};
|
|
1600
|
+
const line = pin.text.split("\n").findIndex((text) => text.includes("defaultFormat")) + 1;
|
|
1601
|
+
return {
|
|
1602
|
+
ok: true,
|
|
1603
|
+
text: pin.text,
|
|
1604
|
+
review: [...earlier, {
|
|
1605
|
+
line: Math.max(line, 1),
|
|
1606
|
+
message: `blocks["webhooks-out"] is adopted and maps no columns.endpoints.format, so the codemod set options.defaultFormat to "${format}", the body its endpoints get now. Change it if your receivers expect the other format`
|
|
1607
|
+
}]
|
|
1608
|
+
};
|
|
1609
|
+
}
|
|
1610
|
+
//#endregion
|
|
1611
|
+
//#region src/cli/codemod.ts
|
|
1612
|
+
/**
|
|
1613
|
+
* `better-supabase.config.*`, the files a codemod's `configFile` edit applies
|
|
1614
|
+
* to.
|
|
1615
|
+
*/
|
|
1616
|
+
const CONFIG_FILE = /(?:^|[\\/])better-supabase\.config\.(?:ts|mts|cts|js|mjs|cjs|json)$/;
|
|
1617
|
+
const OFFSET_PIN = {
|
|
1618
|
+
key: "pagination",
|
|
1619
|
+
value: "\"offset\"",
|
|
1620
|
+
when: /\.page\b(?!\s*\()|\bpageCount\b|\btotalPages\b|\bpage\s*:|[?&]page=|["']page["']/,
|
|
1621
|
+
message: "Lists and resources page by cursor (`after`, `nextCursor`, no total) unless `pagination: \"offset\"` is set. This file shows no page numbers, so the codemod left it: add `pagination: \"offset\"` if a UI elsewhere reads `page` or the total, or the list sorts by a relation"
|
|
1622
|
+
};
|
|
1623
|
+
const SQL_ADD_HINT = {
|
|
1624
|
+
pattern: /(?<![\w.@-])(?:better-supabase|bsb)(?:@[\w.^~-]+)?\s+sql\s+add\b/,
|
|
1625
|
+
message: "`sql add` still only writes the block's SQL; `add` also wires its clients and config. Use `add` unless the script needs the SQL alone"
|
|
1626
|
+
};
|
|
1627
|
+
const BLOCK_SQL_TYPES = "Context ContractFunction Names Layout File IdType AccessProvider EntitlementsProvider TableSpec Upgrade PermissionKey Audit Deprecation Extension Emit UpgradePlan Topic TestFile Action";
|
|
1628
|
+
const ENTITY_FORM_TYPES = " CustomField Field Input Options Result State Values";
|
|
1629
|
+
/** `from` and `to` prefixed to each space-separated suffix in `suffixes`. */
|
|
1630
|
+
function prefixed(from, to, suffixes) {
|
|
1631
|
+
return Object.fromEntries(suffixes.split(" ").map((suffix) => [from + suffix, to + suffix]));
|
|
1632
|
+
}
|
|
1633
|
+
const CODEMODS = {
|
|
1634
|
+
"0.4": {
|
|
1635
|
+
name: "0.4",
|
|
1636
|
+
description: "Renames from 0.3 to 0.4 (the naming page lists them)",
|
|
1637
|
+
imports: {
|
|
1638
|
+
createBrowser: "createClient",
|
|
1639
|
+
BetterBrowser: "BetterClient",
|
|
1640
|
+
BrowserOptions: "ClientOptions",
|
|
1641
|
+
BrowserAuth: "ClientAuth",
|
|
1642
|
+
BetterEnv: "HonoEnv",
|
|
1643
|
+
HandlerOptions: "MiddlewareOptions",
|
|
1644
|
+
Queries: "BetterQueries",
|
|
1645
|
+
CreateQueriesOptions: "QueriesOptions",
|
|
1646
|
+
Postgres: "BetterPostgres",
|
|
1647
|
+
DefineSupabaseOptions: "SupabaseOptions"
|
|
1648
|
+
},
|
|
1649
|
+
members: [
|
|
1650
|
+
{
|
|
1651
|
+
from: "serverFor",
|
|
1652
|
+
to: "contextForSession"
|
|
1653
|
+
},
|
|
1654
|
+
{
|
|
1655
|
+
from: "toORPCError",
|
|
1656
|
+
to: "toOrpcError"
|
|
1657
|
+
},
|
|
1658
|
+
{
|
|
1659
|
+
from: "$table",
|
|
1660
|
+
to: "$tableName",
|
|
1661
|
+
notCalled: true
|
|
1662
|
+
}
|
|
1663
|
+
],
|
|
1664
|
+
props: [{
|
|
1665
|
+
component: "BetterSupabaseProvider",
|
|
1666
|
+
from: "browser",
|
|
1667
|
+
to: "client"
|
|
1668
|
+
}],
|
|
1669
|
+
review: [
|
|
1670
|
+
{
|
|
1671
|
+
pattern: /\.server\(\)/,
|
|
1672
|
+
message: "`next.server()` is `bsb.context()` on the createNext() instance"
|
|
1673
|
+
},
|
|
1674
|
+
{
|
|
1675
|
+
pattern: /\.handle\(\)/,
|
|
1676
|
+
message: "Hono's `bsb.handle()` is `bsb.handler()`"
|
|
1677
|
+
},
|
|
1678
|
+
{
|
|
1679
|
+
pattern: /\bmcp\.handler\b/,
|
|
1680
|
+
message: "`mcp.handler` is `bsb.endpoint`"
|
|
1681
|
+
},
|
|
1682
|
+
{
|
|
1683
|
+
pattern: /\.sb\b/,
|
|
1684
|
+
message: "`client.sb` is `client.betterSupabase`"
|
|
1685
|
+
},
|
|
1686
|
+
{
|
|
1687
|
+
pattern: /\btestExecutor\(\s*\{[^}]*\bsb\b/,
|
|
1688
|
+
message: "`{ sb }` in testExecutor is `{ betterSupabase }`"
|
|
1689
|
+
}
|
|
1690
|
+
]
|
|
1691
|
+
},
|
|
1692
|
+
"0.5": {
|
|
1693
|
+
name: "0.5",
|
|
1694
|
+
description: "Renames from 0.4 to 0.5: createMcp's scopes is advertisedScopes",
|
|
1695
|
+
options: [{
|
|
1696
|
+
call: "createMcp",
|
|
1697
|
+
from: "scopes",
|
|
1698
|
+
to: "advertisedScopes"
|
|
1699
|
+
}]
|
|
1700
|
+
},
|
|
1701
|
+
"0.6": {
|
|
1702
|
+
name: "0.6",
|
|
1703
|
+
description: "Changes from 0.5 to 0.6: kits become blocks and modules, org becomes organization (in event types too), $rpc returns table rows and records in the configured casing, and bucket publicUrl() and path() return a Result",
|
|
1704
|
+
strings: {
|
|
1705
|
+
...BLOCK_EVENT_RENAMES,
|
|
1706
|
+
"org.*": "organization.*"
|
|
1707
|
+
},
|
|
1708
|
+
imports: {
|
|
1709
|
+
KitEvent: "BlockEvent",
|
|
1710
|
+
KitEventMap: "BlockEventMap",
|
|
1711
|
+
KitEventType: "BlockEventType",
|
|
1712
|
+
KitEventMeta: "BlockEventMeta",
|
|
1713
|
+
KitEventPattern: "BlockEventPattern",
|
|
1714
|
+
KitEventsMatching: "BlockEventsMatching",
|
|
1715
|
+
onKitEvent: "onBlockEvent",
|
|
1716
|
+
forwardKitEvents: "forwardBlockEvents",
|
|
1717
|
+
ForwardKitOptions: "ForwardBlockOptions",
|
|
1718
|
+
KIT_ATTRIBUTES: "BLOCK_ATTRIBUTES",
|
|
1719
|
+
kitCloudEvent: "blockCloudEvent",
|
|
1720
|
+
kitEventAttributes: "blockEventAttributes",
|
|
1721
|
+
traceKitEvents: "traceBlockEvents",
|
|
1722
|
+
KitTransport: "BlockTransport",
|
|
1723
|
+
OrgEventData: "OrganizationEventData",
|
|
1724
|
+
createOrgs: "createOrganizations",
|
|
1725
|
+
Orgs: "Organizations",
|
|
1726
|
+
OrgsOptions: "OrganizationsOptions",
|
|
1727
|
+
CreateOrgOptions: "CreateOrganizationOptions",
|
|
1728
|
+
OrgAttributes: "OrganizationAttributes",
|
|
1729
|
+
orgLogoBucket: "organizationLogoBucket",
|
|
1730
|
+
OrgLogoBucketOptions: "OrganizationLogoBucketOptions",
|
|
1731
|
+
KitsConfig: "BlocksConfig",
|
|
1732
|
+
KitModuleConfig: "BlockConfig",
|
|
1733
|
+
KitMode: "BlockMode",
|
|
1734
|
+
AccessKitConfig: "AccessBlockConfig",
|
|
1735
|
+
renderKit: "renderModules",
|
|
1736
|
+
kitLayout: "moduleLayout",
|
|
1737
|
+
kitPermissionKeys: "modulePermissionKeys",
|
|
1738
|
+
kitDeprecations: "moduleDeprecations",
|
|
1739
|
+
kitFilePaths: "moduleFilePaths",
|
|
1740
|
+
kitFileVersion: "moduleFileVersion",
|
|
1741
|
+
sameKitFile: "sameModuleFile",
|
|
1742
|
+
kitIdType: "moduleIdType",
|
|
1743
|
+
isKitIdType: "isModuleIdType",
|
|
1744
|
+
KIT_ID_TYPES: "MODULE_ID_TYPES",
|
|
1745
|
+
KitIdType: "ModuleIdType",
|
|
1746
|
+
KitContext: "ModuleContext",
|
|
1747
|
+
KitLayout: "ModuleLayout",
|
|
1748
|
+
KitFile: "ModuleFile",
|
|
1749
|
+
KitNames: "ModuleNames",
|
|
1750
|
+
KitTableSpec: "ModuleTableSpec",
|
|
1751
|
+
KitContractFunction: "ModuleContractFunction",
|
|
1752
|
+
KitDeprecation: "ModuleDeprecation",
|
|
1753
|
+
KitPermissionKey: "ModulePermissionKey",
|
|
1754
|
+
KitUpgrade: "ModuleUpgrade",
|
|
1755
|
+
KitUpgradePlan: "ModuleUpgradePlan",
|
|
1756
|
+
InstalledKitModule: "InstalledModule"
|
|
1757
|
+
},
|
|
1758
|
+
options: [{
|
|
1759
|
+
call: "defineSupabase",
|
|
1760
|
+
from: "maxUrlLength",
|
|
1761
|
+
to: "urlLengthLimit"
|
|
1762
|
+
}],
|
|
1763
|
+
review: [
|
|
1764
|
+
{
|
|
1765
|
+
pattern: /from\s*["']better-supabase\/(orgs|jobs|notifications|webhooks)["']/,
|
|
1766
|
+
message: "This subpath moved under `better-supabase/blocks/` (`orgs` is `blocks/organizations`; the outbox, entitlements and audit retention left `jobs` for their own blocks); the 0.5 to 0.6 guide maps each export"
|
|
1767
|
+
},
|
|
1768
|
+
{
|
|
1769
|
+
pattern: /\bcreateInbox\b[^\n]*from\s*["']better-supabase\/(blocks\/)?jobs["']/,
|
|
1770
|
+
message: "The webhook inbox is `createWebhookInbox` from `better-supabase/blocks/jobs`; `createInbox` is now the conversation inbox in `blocks/inbox`"
|
|
1771
|
+
},
|
|
1772
|
+
{
|
|
1773
|
+
pattern: /\$rpc\s*(<|\()/,
|
|
1774
|
+
message: "`$rpc` now returns table rows and `returns table (...)` records in the configured casing, with codecs applied: drop a snake-to-camel mapping of the result, or pass `{ raw: true }` to keep database names. Scalar results and `returns table` columns are now `| null` unless `functions.<name>.notNull` says otherwise"
|
|
1775
|
+
},
|
|
1776
|
+
{
|
|
1777
|
+
pattern: /\.publicUrl\s*\(/,
|
|
1778
|
+
message: "A connected bucket's `publicUrl()` returns a `Result` instead of throwing: read `.data` (`null` on an error) or check `.ok`"
|
|
1779
|
+
},
|
|
1780
|
+
{
|
|
1781
|
+
pattern: /\.path\s*\(\s*\{/,
|
|
1782
|
+
message: "A bucket definition's `path(values)` returns a `Result` instead of throwing, like the connected client's `path()`: read `.data` (`null` on an error) or check `.ok`"
|
|
1783
|
+
}
|
|
1784
|
+
]
|
|
1785
|
+
},
|
|
1786
|
+
"0.9": {
|
|
1787
|
+
name: "0.9",
|
|
1788
|
+
description: "Moves sql.modules to the top-level blocks key in better-supabase.config.*, rewrites CLI calls in package.json scripts and GitHub workflows to the new subcommands and flags (other shell files are listed), renames the config types (ModulesConfig to BlocksConfig, ModuleConfig to BlockConfig, AccessModuleConfig to AccessBlockConfig, ModuleMode to BlockMode), pins pagination: 'offset' on lists and resources in files that read page numbers, and lists behaviour changes for review: support sessions (denied without authorize, approved by a second admin), canApprove (now isApprover), outgoing webhook transforms and receivers (CloudEvents), gatewayOptions callers, generic problem types (about:blank), the delegation cap, role helpers, event and schedule starts (runAs), workflow builders, delivery and realtime fan-out, agent actors, share links, before_promotion_activate and comment subjects",
|
|
1789
|
+
imports: {
|
|
1790
|
+
ModulesConfig: "BlocksConfig",
|
|
1791
|
+
ModuleConfig: "BlockConfig",
|
|
1792
|
+
AccessModuleConfig: "AccessBlockConfig",
|
|
1793
|
+
ModuleMode: "BlockMode"
|
|
1794
|
+
},
|
|
1795
|
+
configFile: (source, json) => {
|
|
1796
|
+
const moved = json ? moveSqlModulesToBlocksJson(source) : moveSqlModulesToBlocks(source);
|
|
1797
|
+
return withWebhookFormat(moved.ok && !json ? {
|
|
1798
|
+
...moved,
|
|
1799
|
+
review: environmentModules(moved.text)
|
|
1800
|
+
} : moved, json, "standard");
|
|
1801
|
+
},
|
|
1802
|
+
cliCalls: migrateCliCall,
|
|
1803
|
+
cliReview: [SQL_ADD_HINT],
|
|
1804
|
+
pins: [{
|
|
1805
|
+
call: "defineListQuery",
|
|
1806
|
+
argument: 2,
|
|
1807
|
+
...OFFSET_PIN
|
|
1808
|
+
}, {
|
|
1809
|
+
call: "defineResource",
|
|
1810
|
+
argument: 2,
|
|
1811
|
+
unless: ["list"],
|
|
1812
|
+
...OFFSET_PIN
|
|
1813
|
+
}],
|
|
1814
|
+
review: [
|
|
1815
|
+
{
|
|
1816
|
+
pattern: /\bresources\s*:\s*\{/,
|
|
1817
|
+
message: "The default list of each `defineApi` resource pages by cursor (`after`, `nextCursor`) unless the table has no primary key; set `pagination: \"offset\"` on a resource whose clients send `page` or read the total"
|
|
1818
|
+
},
|
|
1819
|
+
{
|
|
1820
|
+
pattern: /\bsupportSessions\s*\(/,
|
|
1821
|
+
message: "Support sessions refuse every start without `authorize` (or the server's `authorization.support.authorize`), and a start needs a request approved by a different admin unless `policy.approval` is `\"none\"`. `authorize: \"store\"` keeps the store-only check"
|
|
1822
|
+
},
|
|
1823
|
+
{
|
|
1824
|
+
pattern: /\bcanApprove\b/,
|
|
1825
|
+
message: "`authorization.functions.canApprove` is deprecated: set `isApprover` with `{kind}` (`'ai-tool'`), `{subject}` (the tool name, was `{tool}`) and `{tenant}`"
|
|
1826
|
+
},
|
|
1827
|
+
{
|
|
1828
|
+
pattern: /\bcreateWebhooks\s*\(/,
|
|
1829
|
+
message: "Outgoing webhooks send CloudEvents 1.0 (`application/cloudevents+json`) instead of `{ type, timestamp, data }`; a `transform` now returns only the event's `data`, and receivers read `data` from the CloudEvent. `sql upgrade` keeps existing endpoints on `format = 'standard'` (the 0.8 body) until you set each one to `cloudevents`"
|
|
1830
|
+
},
|
|
1831
|
+
{
|
|
1832
|
+
pattern: /\bgatewayOptions\s*\(/,
|
|
1833
|
+
message: "`gatewayOptions` ignores a `user` in its second argument; pass the caller's id as `context.userId`"
|
|
1834
|
+
},
|
|
1835
|
+
{
|
|
1836
|
+
pattern: /bettersupabase\.com\/problems\/(invalid-request|unauthorized|forbidden|not-found|conflict|rate-limited|unexpected)\b|["'](Invalid request|Not found|Too many requests|Unexpected error)["']/,
|
|
1837
|
+
message: "Generic problems use `type: \"about:blank\"` and the HTTP status phrase as `title` (`Bad Request`, `Not Found`, `Too Many Requests`, `Internal Server Error`); match on `kind` or `code` instead"
|
|
1838
|
+
},
|
|
1839
|
+
{
|
|
1840
|
+
pattern: /\bpublish_webhook_event\s*\(/,
|
|
1841
|
+
message: "`publish_webhook_event` takes `subject` and `read_permission` and delivers only to endpoints whose owner may read the event"
|
|
1842
|
+
},
|
|
1843
|
+
{
|
|
1844
|
+
pattern: /\btoken_scope_allows\s*\(|["']oauth-client["']/,
|
|
1845
|
+
message: "Delegated tokens are narrowed inside `member_can`, `platform_can` and `tenant_ids_with`: a permission passes only when one of the token's scopes maps to it. Map scopes in `blocks.access.scopes` or `authorization.delegation.scopes`; a `token_scope_allows` check in a write policy is now covered by the cap"
|
|
1846
|
+
},
|
|
1847
|
+
{
|
|
1848
|
+
pattern: /\b(has_organization_role|member_organization_ids|organization_member_role)\s*\(/,
|
|
1849
|
+
message: "Under the provider model the role helpers take membership from the provider's `memberIds`, and a role name check skips the delegation cap (doctor BS334): check a permission with `tenant_ids_with('<permission>')` or `member_can()`"
|
|
1850
|
+
},
|
|
1851
|
+
{
|
|
1852
|
+
pattern: /\b(workflowStarter|startOnEvent)\s*\(/,
|
|
1853
|
+
message: "Event and schedule starts need `runAs: { publisher, permissions }` (or a function returning it): a schedule start without it throws, and the run's context is the publisher's, capped to `permissions`"
|
|
1854
|
+
},
|
|
1855
|
+
{
|
|
1856
|
+
pattern: /\bcreateBuilder\s*\(/,
|
|
1857
|
+
message: "Published versions run as their publisher (`versions.runAs`), and versions published before 0.9 fail with `WORKFLOW_PUBLISHER_REVOKED` until republished. A version the organization owns runs as its default service principal: create one with `default: true` or set `automation.runAs`"
|
|
1858
|
+
},
|
|
1859
|
+
{
|
|
1860
|
+
pattern: /\b(createNotifications|createReminders)\s*\(|\.fanOut\s*\(/,
|
|
1861
|
+
message: "Under an authorization provider without `delivery.subscribers` or `delivery.audience`, an event about a registered subject reaches only users who may read it (`subjectReaders`), and realtime `fanOut` refuses it (`REALTIME_SUBSCRIBER_POLICY_REQUIRED`) until you pass a `policy`"
|
|
1862
|
+
},
|
|
1863
|
+
{
|
|
1864
|
+
pattern: /\bkind\s*:\s*["']agent["']/,
|
|
1865
|
+
message: "An `act` level `{ kind: \"agent\", sub, tools }` is now valid (build it with `agentClaims`) and writes with the user's rights unless it sets `read_only: true`; `tools` must be a list of names"
|
|
1866
|
+
},
|
|
1867
|
+
{
|
|
1868
|
+
pattern: /\bcreate_share_link\b/,
|
|
1869
|
+
message: "`create_share_link` takes `version_id` and `expires_at` after `role`; grants and revokes on the four-argument signature must name `(uuid, text, text, text, uuid, timestamptz)`"
|
|
1870
|
+
},
|
|
1871
|
+
{
|
|
1872
|
+
pattern: /\bbefore_promotion_activate\b/,
|
|
1873
|
+
message: "`promotions` now calls `before_promotion_activate(promotion uuid)` after every write that leaves a promotion active; a function of that name runs on each such save"
|
|
1874
|
+
},
|
|
1875
|
+
{
|
|
1876
|
+
pattern: /\bcomments\s*:\s*\{/,
|
|
1877
|
+
message: "With `config.records` set and no `subjects` option, comments accept only the registered subject types and require read on the subject row"
|
|
1878
|
+
}
|
|
1879
|
+
]
|
|
1880
|
+
},
|
|
1881
|
+
"0.11": {
|
|
1882
|
+
name: "0.11",
|
|
1883
|
+
description: "Pins blocks[\"webhooks-out\"].options.defaultFormat to \"cloudevents\" in better-supabase.config.* when the block is adopted and maps no columns.endpoints.format, since adopt mode requires it from 0.11; the 0.9 codemod pins \"standard\" instead for configs coming from 0.8",
|
|
1884
|
+
configFile: (source, json) => withWebhookFormat({
|
|
1885
|
+
ok: true,
|
|
1886
|
+
text: source
|
|
1887
|
+
}, json, "cloudevents")
|
|
1888
|
+
},
|
|
1889
|
+
"0.15": {
|
|
1890
|
+
name: "0.15",
|
|
1891
|
+
description: "Regroups better-supabase.config.* into database, auth, gen, api and tooling (subjects to records, appTables to tables, integrations to adapters, a block's mode, scope, entities and hooks to ownership, owner, names and callbacks, and removes ownership: \"adopt\", since a block now leaves alone the tables the schema already has; claims.tenant and the tenant plugin's column to auth.organization); renames the requireTenant option and helper to requireOrganization; renames the runtime instance bs to bsb (the CLI's short name) where a file creates, imports or destructures it, and the bs key on request contexts (ctx.bs, c.var.bs, locals.bs, context.bs) to bsb; renames imports: SqlModule to BlockSql, ModuleDefinition to BlockSqlDefinition and the other Module* SQL types to BlockSql*, SubjectRef to RecordRef, entityForm to recordForm, ShipmentCarrier to ShippingProvider, QueueBackend to QueueProvider; rewrites CLI calls in package.json scripts and GitHub workflows to the 0.15 commands (apply and adopt to add, sql sync and sql upgrade to upgrade, introspect to gen --save-snapshot, seed to db seed, env, run, keys and stack to dev); renames the blocks 0.15 renamed (work-items to tasks, parties to contacts, engagements to activities, access to permissions, rules to automations, jobs to queue, activity to timeline and the rest of the 0.14 to 0.15 guide's table) in the config's blocks and preset.blocks, in operation names under auth.authorization.operations, in better-supabase/blocks/<name> imports and in the exports named after them; turns a 0.14 preset code in the config's preset into the preset name or object it holds, and a 0.14 design file into a design with its preset inside; moves the plugins key into blocks (timestamps to updated-at, actor to created-by, softDelete to trash, with their columns as the block's options; tenant to auth.organization.column when memberships is not installed) and the better-supabase/plugins/* imports to the block extensions, better-supabase/lint guards and validation from better-supabase; moves repository calls to the data contract (findMany to list, paginate to page, findById, findUnique and findOnly to get, findFirst to list with limit: 1, exists to count, createMany and upsertMany to create and upsert with an array, updateMany and deleteMany to update and delete with a { where } filter); renames generateFeatures to gen.recordTypes, the record section exports to record bindings (defineSection to defineRecordBinding, commentsSection to commentsBinding, loadSections to loadBindings and the rest) and lists record feature imports, recordServer and sectionAction calls for the move to bsb.record; cache tags, query keys and the debug header and route that start with bs are listed for review, and so are the lines of the app's SQL tests, schema files and newest migration that name a bs_ object the upgrade renames to bsb_",
|
|
1892
|
+
sqlNames: true,
|
|
1893
|
+
bindings: {
|
|
1894
|
+
bs: "bsb",
|
|
1895
|
+
SqlModule: "BlockSql",
|
|
1896
|
+
ModuleDefinition: "BlockSqlDefinition",
|
|
1897
|
+
...prefixed("Module", "BlockSql", BLOCK_SQL_TYPES),
|
|
1898
|
+
...prefixed("EntityForm", "RecordForm", ENTITY_FORM_TYPES),
|
|
1899
|
+
renderModules: "renderBlocks",
|
|
1900
|
+
resolveModules: "resolveBlocks",
|
|
1901
|
+
resolveModule: "resolveBlock",
|
|
1902
|
+
isModuleIdType: "isBlockSqlIdType",
|
|
1903
|
+
sameModuleFile: "sameBlockFile",
|
|
1904
|
+
InstalledModule: "InstalledBlock",
|
|
1905
|
+
SkippedModule: "SkippedBlock",
|
|
1906
|
+
SubjectRef: "RecordRef",
|
|
1907
|
+
entityForm: "recordForm",
|
|
1908
|
+
useEntityForm: "useRecordForm",
|
|
1909
|
+
UseEntityFormOptions: "UseRecordFormOptions",
|
|
1910
|
+
ShipmentCarrier: "ShippingProvider",
|
|
1911
|
+
testShipmentCarrier: "testShippingProvider",
|
|
1912
|
+
TestShipmentCarrierOptions: "TestShippingProviderOptions",
|
|
1913
|
+
QueueBackend: "QueueProvider",
|
|
1914
|
+
sqlQueueBackend: "sqlQueueProvider",
|
|
1915
|
+
testQueueBackend: "testQueueProvider",
|
|
1916
|
+
transportQueueBackend: "transportQueueProvider",
|
|
1917
|
+
vercelQueueBackend: "vercelQueueProvider",
|
|
1918
|
+
TestQueueBackendOptions: "TestQueueProviderOptions",
|
|
1919
|
+
TransportQueueBackendOptions: "TransportQueueProviderOptions",
|
|
1920
|
+
VercelQueueBackendOptions: "VercelQueueProviderOptions",
|
|
1921
|
+
...RECORD_BINDING_RENAMES
|
|
1922
|
+
},
|
|
1923
|
+
imports: BLOCK_EXPORT_RENAMES,
|
|
1924
|
+
subpathImports: PLUGIN_IMPORT_RENAMES,
|
|
1925
|
+
subpaths: SUBPATH_RENAMES_0_15,
|
|
1926
|
+
members: [{
|
|
1927
|
+
from: "bs",
|
|
1928
|
+
to: "bsb"
|
|
1929
|
+
}],
|
|
1930
|
+
options: DATA_CONTRACT_OPTIONS,
|
|
1931
|
+
strings: {
|
|
1932
|
+
...DATA_CONTRACT_STRINGS,
|
|
1933
|
+
"bs-block": "bsb"
|
|
1934
|
+
},
|
|
1935
|
+
configFile: (source, json) => [
|
|
1936
|
+
withoutPlugins,
|
|
1937
|
+
withBlockNames,
|
|
1938
|
+
withSubjectsOn,
|
|
1939
|
+
thenConvertPresetCode,
|
|
1940
|
+
withoutAdoptOwnership
|
|
1941
|
+
].reduce((edit, step) => step(edit, json), json ? groupConfigJson(source) : groupConfigSource(source)),
|
|
1942
|
+
designFile: convertDesignFile,
|
|
1943
|
+
cliCalls: migrateCliCall,
|
|
1944
|
+
source: rewrite015,
|
|
1945
|
+
review: REVIEW_0_15
|
|
1946
|
+
}
|
|
1947
|
+
};
|
|
1948
|
+
const SUPABASE_IMPORT = /\bfrom\s*["'](?:better-supabase(?:\/[\w./-]*)?|[^"']*supabase[^"']*)["']/;
|
|
1949
|
+
/**
|
|
1950
|
+
* Renames bindings a file declares, destructures or imports, in files that
|
|
1951
|
+
* import from `better-supabase` or a `supabase` module.
|
|
1952
|
+
*/
|
|
1953
|
+
function renameBindings(text, bindings) {
|
|
1954
|
+
const ranges = codeRanges(text);
|
|
1955
|
+
if (codeMatches(text, new RegExp(SUPABASE_IMPORT, "g"), ranges).length === 0) return text;
|
|
1956
|
+
return renameIdentifiers(text, new Map(Object.entries(bindings).filter(([from]) => {
|
|
1957
|
+
const name = escapeRegExp(from);
|
|
1958
|
+
return codeMatches(text, new RegExp(`\\b(?:const|let|var|function)\\s+${name}(?![\\w$])|[{,]\\s*(?:type\\s+)?${name}\\s*(?:[,}]|as\\b)|\\(\\s*${name}\\s*[:,)]`, "g"), ranges).length > 0;
|
|
1959
|
+
})));
|
|
1960
|
+
}
|
|
1961
|
+
function applyEdits(text, edits) {
|
|
1962
|
+
let out = "";
|
|
1963
|
+
let cursor = 0;
|
|
1964
|
+
for (const edit of edits.toSorted((a, b) => a.start - b.start)) {
|
|
1965
|
+
if (edit.start < cursor) continue;
|
|
1966
|
+
out += text.slice(cursor, edit.start) + edit.text;
|
|
1967
|
+
cursor = edit.end;
|
|
1968
|
+
}
|
|
1969
|
+
return out + text.slice(cursor);
|
|
1970
|
+
}
|
|
1971
|
+
const escapeRegExp = (value) => value.replaceAll(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
1972
|
+
function inCode(ranges, index) {
|
|
1973
|
+
let low = 0;
|
|
1974
|
+
let high = ranges.length - 1;
|
|
1975
|
+
while (low <= high) {
|
|
1976
|
+
const middle = Math.floor((low + high) / 2);
|
|
1977
|
+
const [start, end] = ranges[middle];
|
|
1978
|
+
if (index < start) high = middle - 1;
|
|
1979
|
+
else if (index >= end) low = middle + 1;
|
|
1980
|
+
else return true;
|
|
1981
|
+
}
|
|
1982
|
+
return false;
|
|
1983
|
+
}
|
|
1984
|
+
const OPENING = "({[";
|
|
1985
|
+
const CLOSING = ")}]";
|
|
1986
|
+
/** Matches of `pattern` that start in code. */
|
|
1987
|
+
function codeMatches(text, pattern, ranges) {
|
|
1988
|
+
return [...text.matchAll(pattern)].filter((match) => inCode(ranges, match.index));
|
|
1989
|
+
}
|
|
1990
|
+
const IMPORT = /\b(import|export)\s+(type\s+)?\{([^}]*)\}\s*from\s*(["'])better-supabase(?:\/([\w./-]*))?\4/g;
|
|
1991
|
+
/** Renames imported names, from every subpath or only from `subpath`. */
|
|
1992
|
+
function renameImports(text, renames, subpath) {
|
|
1993
|
+
const ranges = codeRanges(text);
|
|
1994
|
+
const locals = /* @__PURE__ */ new Set();
|
|
1995
|
+
const edits = [];
|
|
1996
|
+
for (const match of codeMatches(text, IMPORT, ranges)) {
|
|
1997
|
+
if (subpath !== void 0 && match[5] !== subpath) continue;
|
|
1998
|
+
const list = match[3];
|
|
1999
|
+
const listStart = match.index + match[0].indexOf("{") + 1;
|
|
2000
|
+
const renamed = list.replaceAll(/(\btype\s+)?([\w$]+)(\s+as\s+[\w$]+)?/g, (spec, type, name, alias) => {
|
|
2001
|
+
const to = renames[name];
|
|
2002
|
+
if (to === void 0) return spec;
|
|
2003
|
+
if (alias === void 0 && match[1] === "import") locals.add(name);
|
|
2004
|
+
return `${type ?? ""}${to}${alias ?? ""}`;
|
|
2005
|
+
});
|
|
2006
|
+
if (renamed !== list) edits.push({
|
|
2007
|
+
start: listStart,
|
|
2008
|
+
end: listStart + list.length,
|
|
2009
|
+
text: renamed
|
|
2010
|
+
});
|
|
2011
|
+
}
|
|
2012
|
+
return {
|
|
2013
|
+
text: applyEdits(text, edits),
|
|
2014
|
+
locals
|
|
2015
|
+
};
|
|
2016
|
+
}
|
|
2017
|
+
function renameIdentifiers(text, renames) {
|
|
2018
|
+
if (renames.size === 0) return text;
|
|
2019
|
+
const ranges = codeRanges(text);
|
|
2020
|
+
const names = [...renames.keys()].map(escapeRegExp).join("|");
|
|
2021
|
+
return applyEdits(text, codeMatches(text, new RegExp(`(?<![\\w$.])(?:${names})(?![\\w$])`, "g"), ranges).map((match) => ({
|
|
2022
|
+
start: match.index,
|
|
2023
|
+
end: match.index + match[0].length,
|
|
2024
|
+
text: renames.get(match[0])
|
|
2025
|
+
})));
|
|
2026
|
+
}
|
|
2027
|
+
function renameStrings(text, strings) {
|
|
2028
|
+
const names = Object.keys(strings).map(escapeRegExp).join("|");
|
|
2029
|
+
if (names === "") return text;
|
|
2030
|
+
const ranges = codeRanges(text);
|
|
2031
|
+
const pattern = new RegExp(`(["'\`])(${names})\\1`, "g");
|
|
2032
|
+
return applyEdits(text, [...text.matchAll(pattern)].filter((match) => !inCode(ranges, match.index + 1)).map((match) => ({
|
|
2033
|
+
start: match.index + 1,
|
|
2034
|
+
end: match.index + 1 + match[2].length,
|
|
2035
|
+
text: strings[match[2]]
|
|
2036
|
+
})));
|
|
2037
|
+
}
|
|
2038
|
+
function renameMembers(text, members) {
|
|
2039
|
+
const ranges = codeRanges(text);
|
|
2040
|
+
return applyEdits(text, members.flatMap((member) => codeMatches(text, new RegExp(`\\.${escapeRegExp(member.from)}(?![\\w$])${member.notCalled === true ? "(?!\\s*\\()" : ""}`, "g"), ranges).map((match) => ({
|
|
2041
|
+
start: match.index,
|
|
2042
|
+
end: match.index + match[0].length,
|
|
2043
|
+
text: `.${member.to}`
|
|
2044
|
+
}))));
|
|
2045
|
+
}
|
|
2046
|
+
function renameProps(text, props) {
|
|
2047
|
+
const ranges = codeRanges(text);
|
|
2048
|
+
const edits = [];
|
|
2049
|
+
for (const prop of props) {
|
|
2050
|
+
const tag = new RegExp(`<${escapeRegExp(prop.component)}(?![\\w$.])`, "g");
|
|
2051
|
+
for (const match of codeMatches(text, tag, ranges)) {
|
|
2052
|
+
let depth = 0;
|
|
2053
|
+
for (let index = match.index + match[0].length; index < text.length; index += 1) {
|
|
2054
|
+
if (!inCode(ranges, index)) continue;
|
|
2055
|
+
const char = text[index];
|
|
2056
|
+
if (char === "{") depth += 1;
|
|
2057
|
+
else if (char === "}") depth -= 1;
|
|
2058
|
+
else if (char === ">" && depth === 0) break;
|
|
2059
|
+
if (depth === 0 && /\s/.test(text[index - 1] ?? "") && text.startsWith(`${prop.from}=`, index)) edits.push({
|
|
2060
|
+
start: index,
|
|
2061
|
+
end: index + prop.from.length,
|
|
2062
|
+
text: prop.to
|
|
2063
|
+
});
|
|
2064
|
+
}
|
|
2065
|
+
}
|
|
2066
|
+
}
|
|
2067
|
+
return applyEdits(text, edits);
|
|
2068
|
+
}
|
|
2069
|
+
/** The index after the bracket that closes the one at `open`, in code only. */
|
|
2070
|
+
function closing(text, open, ranges) {
|
|
2071
|
+
let depth = 0;
|
|
2072
|
+
for (let index = open; index < text.length; index += 1) {
|
|
2073
|
+
if (!inCode(ranges, index)) continue;
|
|
2074
|
+
const char = text[index];
|
|
2075
|
+
if (OPENING.includes(char)) depth += 1;
|
|
2076
|
+
else if (CLOSING.includes(char)) {
|
|
2077
|
+
depth -= 1;
|
|
2078
|
+
if (depth === 0) return index + 1;
|
|
2079
|
+
}
|
|
2080
|
+
}
|
|
2081
|
+
return text.length;
|
|
2082
|
+
}
|
|
2083
|
+
/**
|
|
2084
|
+
* Calls `visit(index, depth)` for each code character from `open` to its
|
|
2085
|
+
* closing bracket.
|
|
2086
|
+
*/
|
|
2087
|
+
function walkBrackets(text, open, ranges, visit) {
|
|
2088
|
+
const end = closing(text, open, ranges);
|
|
2089
|
+
let depth = 0;
|
|
2090
|
+
for (let index = open; index < end; index += 1) {
|
|
2091
|
+
if (!inCode(ranges, index)) continue;
|
|
2092
|
+
const char = text[index];
|
|
2093
|
+
if (OPENING.includes(char)) depth += 1;
|
|
2094
|
+
else if (CLOSING.includes(char)) depth -= 1;
|
|
2095
|
+
visit(index, depth, char);
|
|
2096
|
+
}
|
|
2097
|
+
}
|
|
2098
|
+
/** Where `key` is a top-level key of the object literal at `open`. */
|
|
2099
|
+
function topLevelKeys(text, open, key, ranges) {
|
|
2100
|
+
const keys = [];
|
|
2101
|
+
let previous = "";
|
|
2102
|
+
walkBrackets(text, open, ranges, (index, depth, char) => {
|
|
2103
|
+
if (depth === 1 && (previous === "{" || previous === ",") && text.startsWith(key, index) && !/[\w$]/.test(text[index + key.length] ?? "")) {
|
|
2104
|
+
const after = /^\s*(\S)/.exec(text.slice(index + key.length))?.[1];
|
|
2105
|
+
if (after === ":") keys.push({
|
|
2106
|
+
index,
|
|
2107
|
+
shorthand: false
|
|
2108
|
+
});
|
|
2109
|
+
else if (after === "," || after === "}") keys.push({
|
|
2110
|
+
index,
|
|
2111
|
+
shorthand: true
|
|
2112
|
+
});
|
|
2113
|
+
}
|
|
2114
|
+
if (depth === 1 && !/\s/.test(char)) previous = char;
|
|
2115
|
+
});
|
|
2116
|
+
return keys;
|
|
2117
|
+
}
|
|
2118
|
+
function renameOptions(text, options) {
|
|
2119
|
+
const ranges = codeRanges(text);
|
|
2120
|
+
const edits = [];
|
|
2121
|
+
for (const option of options) {
|
|
2122
|
+
const call = new RegExp(`(?<![\\w$.])${escapeRegExp(option.call)}\\s*(?:<[^>]*>)?\\s*\\(`, "g");
|
|
2123
|
+
for (const match of codeMatches(text, call, ranges)) {
|
|
2124
|
+
const objects = [];
|
|
2125
|
+
walkBrackets(text, match.index + match[0].length - 1, ranges, (index, depth, char) => {
|
|
2126
|
+
if (depth === 2 && char === "{") objects.push(index);
|
|
2127
|
+
});
|
|
2128
|
+
for (const object of objects) for (const { index, shorthand } of topLevelKeys(text, object, option.from, ranges)) edits.push({
|
|
2129
|
+
start: index,
|
|
2130
|
+
end: index + option.from.length,
|
|
2131
|
+
text: shorthand ? `${option.to}: ${option.from}` : option.to
|
|
2132
|
+
});
|
|
2133
|
+
}
|
|
2134
|
+
}
|
|
2135
|
+
return applyEdits(text, edits);
|
|
2136
|
+
}
|
|
2137
|
+
/** The arguments of the call whose `(` is at `open`: start and end of each. */
|
|
2138
|
+
function callArguments(text, open, ranges) {
|
|
2139
|
+
const args = [];
|
|
2140
|
+
let start = open + 1;
|
|
2141
|
+
const end = closing(text, open, ranges) - 1;
|
|
2142
|
+
walkBrackets(text, open, ranges, (index, depth, char) => {
|
|
2143
|
+
if (depth === 1 && char === ",") {
|
|
2144
|
+
args.push({
|
|
2145
|
+
start,
|
|
2146
|
+
end: index
|
|
2147
|
+
});
|
|
2148
|
+
start = index + 1;
|
|
2149
|
+
}
|
|
2150
|
+
});
|
|
2151
|
+
if (text.slice(start, end).trim() !== "") args.push({
|
|
2152
|
+
start,
|
|
2153
|
+
end
|
|
2154
|
+
});
|
|
2155
|
+
return args;
|
|
2156
|
+
}
|
|
2157
|
+
/**
|
|
2158
|
+
* Calls of `pin.call` whose options object lacks `pin.key`, with the insertion
|
|
2159
|
+
* when one is safe.
|
|
2160
|
+
*/
|
|
2161
|
+
function pinTargets(text, pin) {
|
|
2162
|
+
const ranges = codeRanges(text);
|
|
2163
|
+
const call = new RegExp(`(?<![\\w$.])${escapeRegExp(pin.call)}\\s*(?:<[^>]*>)?\\s*\\(`, "g");
|
|
2164
|
+
const targets = [];
|
|
2165
|
+
const entry = `${pin.key}: ${pin.value}`;
|
|
2166
|
+
for (const match of codeMatches(text, call, ranges)) {
|
|
2167
|
+
const open = match.index + match[0].length - 1;
|
|
2168
|
+
const args = callArguments(text, open, ranges);
|
|
2169
|
+
const arg = args[pin.argument];
|
|
2170
|
+
if (arg === void 0) {
|
|
2171
|
+
if (args.length !== pin.argument) {
|
|
2172
|
+
targets.push({
|
|
2173
|
+
call: match.index,
|
|
2174
|
+
edit: void 0
|
|
2175
|
+
});
|
|
2176
|
+
continue;
|
|
2177
|
+
}
|
|
2178
|
+
const last = args.at(-1);
|
|
2179
|
+
const at = last === void 0 ? open + 1 : last.end;
|
|
2180
|
+
const trailing = text[at] === ",";
|
|
2181
|
+
targets.push({
|
|
2182
|
+
call: match.index,
|
|
2183
|
+
edit: trailing ? {
|
|
2184
|
+
start: at + 1,
|
|
2185
|
+
end: at + 1,
|
|
2186
|
+
text: ` { ${entry} }`
|
|
2187
|
+
} : {
|
|
2188
|
+
start: at,
|
|
2189
|
+
end: at,
|
|
2190
|
+
text: `, { ${entry} }`
|
|
2191
|
+
}
|
|
2192
|
+
});
|
|
2193
|
+
continue;
|
|
2194
|
+
}
|
|
2195
|
+
const offset = text.slice(arg.start, arg.end).search(/\S/);
|
|
2196
|
+
const object = arg.start + offset;
|
|
2197
|
+
if (text[object] !== "{") {
|
|
2198
|
+
targets.push({
|
|
2199
|
+
call: match.index,
|
|
2200
|
+
edit: void 0
|
|
2201
|
+
});
|
|
2202
|
+
continue;
|
|
2203
|
+
}
|
|
2204
|
+
if ([pin.key, ...pin.unless ?? []].some((key) => topLevelKeys(text, object, key, ranges).length > 0)) continue;
|
|
2205
|
+
const spreads = [];
|
|
2206
|
+
walkBrackets(text, object, ranges, (index, depth) => {
|
|
2207
|
+
if (depth === 1 && text.startsWith("...", index)) spreads.push(index);
|
|
2208
|
+
});
|
|
2209
|
+
if (spreads.length > 0) {
|
|
2210
|
+
targets.push({
|
|
2211
|
+
call: match.index,
|
|
2212
|
+
edit: void 0
|
|
2213
|
+
});
|
|
2214
|
+
continue;
|
|
2215
|
+
}
|
|
2216
|
+
const body = text.slice(object + 1, closing(text, object, ranges) - 1);
|
|
2217
|
+
const first = /^[ \t]*\n([ \t]*)\S/.exec(body);
|
|
2218
|
+
targets.push({
|
|
2219
|
+
call: match.index,
|
|
2220
|
+
edit: body.trim() === "" ? {
|
|
2221
|
+
start: object,
|
|
2222
|
+
end: object + body.length + 2,
|
|
2223
|
+
text: `{ ${entry} }`
|
|
2224
|
+
} : first ? {
|
|
2225
|
+
start: object + 1,
|
|
2226
|
+
end: object + 1,
|
|
2227
|
+
text: `\n${first[1]}${entry},`
|
|
2228
|
+
} : {
|
|
2229
|
+
start: object + 1,
|
|
2230
|
+
end: object + 1,
|
|
2231
|
+
text: ` ${entry},`
|
|
2232
|
+
}
|
|
2233
|
+
});
|
|
2234
|
+
}
|
|
2235
|
+
return targets;
|
|
2236
|
+
}
|
|
2237
|
+
function pinOptions(text, pins) {
|
|
2238
|
+
let out = text;
|
|
2239
|
+
for (const pin of pins) if (pin.when.test(out)) out = applyEdits(out, pinTargets(out, pin).flatMap((target) => target.edit === void 0 ? [] : [target.edit]));
|
|
2240
|
+
const review = pins.flatMap((pin) => pinTargets(out, pin).map((target) => ({
|
|
2241
|
+
line: out.slice(0, target.call).split("\n").length,
|
|
2242
|
+
message: pin.message
|
|
2243
|
+
})));
|
|
2244
|
+
return {
|
|
2245
|
+
text: out,
|
|
2246
|
+
review
|
|
2247
|
+
};
|
|
2248
|
+
}
|
|
2249
|
+
/** Applies one codemod to a source file. */
|
|
2250
|
+
function applyCodemod(codemod, source, file) {
|
|
2251
|
+
if (file !== void 0 && (CLI_CALL_FILE.test(file) || SHELL_FILE.test(file))) {
|
|
2252
|
+
const hints = linesMatching(source, codemod.cliReview ?? []);
|
|
2253
|
+
if (!codemod.cliCalls) return {
|
|
2254
|
+
text: source,
|
|
2255
|
+
review: hints
|
|
2256
|
+
};
|
|
2257
|
+
return CLI_CALL_FILE.test(file) ? {
|
|
2258
|
+
text: rewriteCliCalls(source, codemod.cliCalls),
|
|
2259
|
+
review: hints
|
|
2260
|
+
} : {
|
|
2261
|
+
text: source,
|
|
2262
|
+
review: [...cliCallHints(source, codemod.cliCalls), ...hints]
|
|
2263
|
+
};
|
|
2264
|
+
}
|
|
2265
|
+
if (file !== void 0 && DESIGN_FILE_NAME.test(file)) return designFileResult(source, codemod.designFile);
|
|
2266
|
+
let text = source;
|
|
2267
|
+
const refused = [];
|
|
2268
|
+
if (codemod.configFile && file !== void 0 && CONFIG_FILE.test(file)) {
|
|
2269
|
+
const json = file.endsWith(".json");
|
|
2270
|
+
const edit = codemod.configFile(source, json);
|
|
2271
|
+
if (edit.ok) {
|
|
2272
|
+
text = edit.text;
|
|
2273
|
+
refused.push(..."review" in edit ? edit.review : []);
|
|
2274
|
+
} else refused.push({
|
|
2275
|
+
line: 1,
|
|
2276
|
+
message: `The config wasn't rewritten: ${edit.reason}`
|
|
2277
|
+
});
|
|
2278
|
+
if (json) return {
|
|
2279
|
+
text,
|
|
2280
|
+
review: refused
|
|
2281
|
+
};
|
|
2282
|
+
}
|
|
2283
|
+
for (const [subpath, renames] of Object.entries(codemod.subpathImports ?? {})) {
|
|
2284
|
+
const imported = renameImports(text, renames, subpath);
|
|
2285
|
+
text = renameIdentifiers(imported.text, new Map([...imported.locals].map((name) => [name, renames[name]])));
|
|
2286
|
+
}
|
|
2287
|
+
if (codemod.subpaths) text = renameSubpaths(text, codemod.subpaths);
|
|
2288
|
+
if (codemod.imports) {
|
|
2289
|
+
const imported = renameImports(text, codemod.imports);
|
|
2290
|
+
text = renameIdentifiers(imported.text, new Map([...imported.locals].map((name) => [name, codemod.imports[name]])));
|
|
2291
|
+
}
|
|
2292
|
+
if (codemod.bindings) text = renameBindings(text, codemod.bindings);
|
|
2293
|
+
if (codemod.members) text = renameMembers(text, codemod.members);
|
|
2294
|
+
if (codemod.props) text = renameProps(text, codemod.props);
|
|
2295
|
+
if (codemod.options) text = renameOptions(text, codemod.options);
|
|
2296
|
+
if (codemod.strings) text = renameStrings(text, codemod.strings);
|
|
2297
|
+
if (codemod.source) {
|
|
2298
|
+
const rewritten = codemod.source(text);
|
|
2299
|
+
text = rewritten.text;
|
|
2300
|
+
refused.push(...rewritten.review);
|
|
2301
|
+
}
|
|
2302
|
+
if (codemod.pins) {
|
|
2303
|
+
const pinned = pinOptions(text, codemod.pins);
|
|
2304
|
+
text = pinned.text;
|
|
2305
|
+
refused.push(...pinned.review);
|
|
2306
|
+
}
|
|
2307
|
+
return {
|
|
2308
|
+
text,
|
|
2309
|
+
review: [...refused, ...linesMatching(text, codemod.review ?? [])]
|
|
2310
|
+
};
|
|
2311
|
+
}
|
|
2312
|
+
/** One review line per line of `text` that a hint's pattern matches. */
|
|
2313
|
+
function linesMatching(text, hints) {
|
|
2314
|
+
return hints.flatMap((hint) => text.split("\n").flatMap((line, index) => hint.pattern.test(line) ? [{
|
|
2315
|
+
line: index + 1,
|
|
2316
|
+
message: hint.message
|
|
2317
|
+
}] : []));
|
|
2318
|
+
}
|
|
2319
|
+
//#endregion
|
|
2320
|
+
//#region src/cli/commands/codemod.ts
|
|
2321
|
+
const CODEMOD_ARGS = {
|
|
2322
|
+
path: {
|
|
2323
|
+
type: "positional",
|
|
2324
|
+
required: false,
|
|
2325
|
+
variadic: true,
|
|
2326
|
+
description: "Files or directories to rewrite (default: the project)"
|
|
2327
|
+
},
|
|
2328
|
+
"dry-run": {
|
|
2329
|
+
type: "boolean",
|
|
2330
|
+
description: "Show the changes without writing them"
|
|
2331
|
+
},
|
|
2332
|
+
check: {
|
|
2333
|
+
type: "boolean",
|
|
2334
|
+
description: "Write nothing; exit 1 with a diff when a file would change"
|
|
2335
|
+
}
|
|
2336
|
+
};
|
|
2337
|
+
const SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
|
|
2338
|
+
".ts",
|
|
2339
|
+
".tsx",
|
|
2340
|
+
".mts",
|
|
2341
|
+
".cts",
|
|
2342
|
+
".js",
|
|
2343
|
+
".jsx",
|
|
2344
|
+
".mjs",
|
|
2345
|
+
".cjs"
|
|
2346
|
+
]);
|
|
2347
|
+
const SKIPPED_DIRS = /* @__PURE__ */ new Set([
|
|
2348
|
+
"node_modules",
|
|
2349
|
+
".git",
|
|
2350
|
+
".next",
|
|
2351
|
+
".turbo",
|
|
2352
|
+
".vercel",
|
|
2353
|
+
"dist",
|
|
2354
|
+
"build",
|
|
2355
|
+
"coverage"
|
|
2356
|
+
]);
|
|
2357
|
+
/**
|
|
2358
|
+
* Source, config and script files under `path`, skipping dependencies, build
|
|
2359
|
+
* output and `.d.ts` files.
|
|
2360
|
+
*/
|
|
2361
|
+
async function sourceFiles(path) {
|
|
2362
|
+
const info = await stat(path).catch(() => void 0);
|
|
2363
|
+
if (!info) return [];
|
|
2364
|
+
if (info.isFile()) return [path];
|
|
2365
|
+
const files = [];
|
|
2366
|
+
for (const entry of await readdir(path, { withFileTypes: true })) {
|
|
2367
|
+
const full = join(path, entry.name);
|
|
2368
|
+
if (entry.isDirectory()) {
|
|
2369
|
+
if (!SKIPPED_DIRS.has(entry.name)) files.push(...await sourceFiles(full));
|
|
2370
|
+
} else if (SOURCE_EXTENSIONS.has(extname(entry.name)) && !entry.name.endsWith(".d.ts") || CONFIG_FILE.test(entry.name) || DESIGN_FILE_NAME.test(entry.name) || CLI_CALL_FILE.test(full) || SHELL_FILE.test(entry.name)) files.push(full);
|
|
2371
|
+
}
|
|
2372
|
+
return files.toSorted();
|
|
2373
|
+
}
|
|
2374
|
+
async function runCodemod(config, args, paint = plain) {
|
|
2375
|
+
const [name, ...paths] = args._ ?? [];
|
|
2376
|
+
const names = Object.entries(CODEMODS).map(([key, codemod]) => ` ${key.padEnd(5)} ${codemod.description}`).join("\n");
|
|
2377
|
+
if (name === void 0) throw new CliError("usage", `Name a codemod:\n${names}`);
|
|
2378
|
+
const codemod = CODEMODS[name];
|
|
2379
|
+
if (!codemod) throw new CliError("usage", `Unknown codemod "${name}". Codemods:\n${names}`);
|
|
2380
|
+
const roots = (paths.length > 0 ? paths : ["."]).map((path) => resolve(config.root, path));
|
|
2381
|
+
const files = [...new Set((await Promise.all(roots.map(sourceFiles))).flat())];
|
|
2382
|
+
const dryRun = args["dry-run"] === true;
|
|
2383
|
+
const edits = [];
|
|
2384
|
+
const review = [];
|
|
2385
|
+
for (const file of files) {
|
|
2386
|
+
const source = await readFile(file, "utf-8");
|
|
2387
|
+
const result = applyCodemod(codemod, source, file);
|
|
2388
|
+
const path = relative(config.root, file);
|
|
2389
|
+
review.push(...result.review.map((hint) => ({
|
|
2390
|
+
file: path,
|
|
2391
|
+
...hint
|
|
2392
|
+
})));
|
|
2393
|
+
if (result.text !== source) edits.push({
|
|
2394
|
+
path: file,
|
|
2395
|
+
contents: result.text,
|
|
2396
|
+
policy: "edit"
|
|
2397
|
+
});
|
|
2398
|
+
}
|
|
2399
|
+
if (codemod.sqlNames === true) review.push(...await legacySqlNameHints(config));
|
|
2400
|
+
const plan = {
|
|
2401
|
+
root: config.root,
|
|
2402
|
+
regenerate: `better-supabase codemod ${codemod.name}`,
|
|
2403
|
+
files: edits
|
|
2404
|
+
};
|
|
2405
|
+
const applied = await applyPlan(plan, args, paint);
|
|
2406
|
+
const changed = changedFiles(applied);
|
|
2407
|
+
if (applied.mode === "check" && applied.drift) return planResult(plan, applied, { data: { codemod: codemod.name } });
|
|
2408
|
+
const lines = [...applied.mode === "write" ? [] : applied.diffs, changed.length === 0 ? `Nothing to change in ${String(files.length)} files.` : [...changeLines(applied), `${applied.mode === "write" ? "Updated" : "Would update"} ${String(changed.length)} of ${String(files.length)} files.`].join("\n")];
|
|
2409
|
+
if (review.length > 0) lines.push("", "Check these by hand:", ...review.map((hint) => ` ${hint.file}:${String(hint.line)}: ${hint.message}`));
|
|
2410
|
+
return {
|
|
2411
|
+
code: 0,
|
|
2412
|
+
output: lines.join("\n"),
|
|
2413
|
+
data: {
|
|
2414
|
+
codemod: codemod.name,
|
|
2415
|
+
dryRun,
|
|
2416
|
+
changed,
|
|
2417
|
+
files: applied.changes,
|
|
2418
|
+
review
|
|
2419
|
+
}
|
|
2420
|
+
};
|
|
2421
|
+
}
|
|
2422
|
+
/** The `codemod <name>` subcommand for one codemod in `CODEMODS`. */
|
|
2423
|
+
function codemodCommand(name) {
|
|
2424
|
+
return defineCliCommand({
|
|
2425
|
+
meta: commandMeta(`codemod ${name}`),
|
|
2426
|
+
args: CODEMOD_ARGS,
|
|
2427
|
+
runsWithInvalidConfig: true,
|
|
2428
|
+
run: (args, { config, paint }) => runCodemod(config, {
|
|
2429
|
+
...args,
|
|
2430
|
+
_: [name, ...args._]
|
|
2431
|
+
}, paint)
|
|
2432
|
+
});
|
|
2433
|
+
}
|
|
2434
|
+
//#endregion
|
|
2435
|
+
export { codemodCommand };
|