better-supabase 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -377
- package/dist/access-sql-B-MkVARa.js +207 -0
- package/dist/actor-go7p9-CJ.js +150 -0
- package/dist/adapter-B0b6MXYS.js +2299 -0
- package/dist/agents-5n8DWRfP.d.ts +117 -0
- package/dist/ai-cache-Cu8j6aQQ.js +87 -0
- package/dist/ai-cache-DyHohbFP.d.ts +82 -0
- package/dist/ai-chat-D1GuRnke.d.ts +619 -0
- package/dist/ai-files-CgFCRsnU.js +339 -0
- package/dist/ai-schedules-CAquecT_.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-CF2DD-Mu.d.ts +28 -0
- package/dist/app-tables-D29Rahtg.js +16350 -0
- package/dist/approvals-Crutd4-o.d.ts +129 -0
- package/dist/assistant-CD_h8Vxx.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-Cs1vP_ej.d.ts +217 -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-CrMBwrPN.d.ts +104 -0
- package/dist/block-authors-BDV3y1SP.js +14 -0
- package/dist/block-env-B_uEM2xz.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 +733 -0
- package/dist/blocks/workflows/index.d.ts +72 -6
- package/dist/blocks/workflows/index.js +379 -4
- package/dist/bookings-D4dvGXiR.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-BgsUjCan.js +1252 -0
- package/dist/cli/add-DCI5JKjA.js +99 -0
- package/dist/cli/add-DWjlVwvP.js +1 -0
- package/dist/cli/args-UEwg0l-N.js +27 -0
- package/dist/cli/backfill-nxPbcsns.js +293 -0
- package/dist/cli/bin.js +1 -1
- package/dist/cli/blocks-BZHI8mRC.js +156 -0
- package/dist/cli/blocks-Cr4HGePW.js +1 -0
- package/dist/cli/cache-CXgR_Ahi.js +607 -0
- package/dist/cli/codemod-DSN7iAdg.js +2343 -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-DNs7lTu7.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-DDrEM6S1.js +4561 -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-MtijJQ9r.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-D-aDv9r5.js +440 -0
- package/dist/cli/keys-DGEpMbeB.js +106 -0
- package/dist/cli/live-iEeH15ck.js +341 -0
- package/dist/cli/mcp-BAPyaQ62.js +249 -0
- package/dist/cli/metadata-DVx9Zgbj.js +150 -0
- package/dist/cli/migration-safety-D7PhzFxm.js +928 -0
- package/dist/cli/module-migration-aPCckev6.js +734 -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-BeWO7OJY.js +67 -0
- package/dist/cli/remove-B46Dmd2M.js +238 -0
- package/dist/cli/render-ucJmUyuM.js +2170 -0
- package/dist/cli/run-BXx6D1aR.js +63 -0
- package/dist/cli/run-CvYVAztY.js +1427 -0
- package/dist/cli/run-DYhLBcFW.js +702 -0
- package/dist/cli/seed-Cz8PcXeT.js +188 -0
- package/dist/cli/seed-D6XijwbR.js +1 -0
- package/dist/cli/shared-LZroULBe.js +151 -0
- package/dist/cli/skills-toUan_OV.js +121 -0
- package/dist/cli/snapshot-C8MVPyO8.js +729 -0
- package/dist/cli/source-DANaJJVc.js +320 -0
- package/dist/cli/source-args-IpJRJO5t.js +59 -0
- package/dist/cli/spec-DGVNMSSB.js +7530 -0
- package/dist/cli/spec-g8_G5K7o.js +1 -0
- package/dist/cli/stack-CWEHdO0b.js +135 -0
- package/dist/cli/sync-btj01bcM.js +319 -0
- package/dist/cli/upgrade-B596d4t8.js +403 -0
- package/dist/cli/upgrade-Dw3TMQzn.js +41 -0
- package/dist/cli/version-Du4CgONY.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-BARuBEDE.js +130 -0
- package/dist/composite-Dsxj7T5K.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-CEuTKrkz.d.ts +4129 -0
- package/dist/context-DBicfUNz.js +41 -0
- package/dist/controller-BNZKd6bJ.js +73 -0
- package/dist/controller-BrP0gn47.d.ts +52 -0
- package/dist/conversion-BAbucuXq.d.ts +86 -0
- package/dist/conversion-Dq1S7xzE.js +77 -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-BVcLQ3DF.d.ts +1657 -0
- package/dist/delegation--93jRsVO.js +146 -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-kFbRvuic.d.ts +78 -0
- package/dist/ended-gUsMZVNg.d.ts +26 -0
- package/dist/entitlements-CJpYQXeE.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-Bzu0JnY2.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-BFSwTu1z.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-CVIn6JHa.d.ts +174 -0
- package/dist/executor-D3gB-9si.js +486 -0
- package/dist/executor-_2ekNofh.d.ts +104 -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-fsbFktYF.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-BKyTeS-j.d.ts +47 -0
- package/dist/framework-DDdkR7FX.js +58 -0
- package/dist/function-contract-DxFNOmsm.d.ts +27 -0
- package/dist/gateway-TD1pRfTP.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-B938YqY-.d.ts +188 -0
- package/dist/index-BUuVq1co.d.ts +158 -0
- package/dist/index-BnH4Gomw.d.ts +633 -0
- package/dist/index-BxYOB1Oc.d.ts +149 -0
- package/dist/index-C-qpk8EQ.d.ts +262 -0
- package/dist/index-CG9rA8H8.d.ts +407 -0
- package/dist/index-CguFm716.d.ts +518 -0
- package/dist/index-DLq69k3F.d.ts +588 -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-CtL-Vfgy.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-HvGAJuBe.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-DOhtuw3c.js +152 -0
- package/dist/ports-sx226JUL.d.ts +89 -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-D3Vcf0Pf.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-BYs9xv_N.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 +103 -42
- package/dist/server/index.js +98 -30
- package/dist/server-types-CFtehAsr.d.ts +946 -0
- package/dist/session-CH0SKgIz.d.ts +99 -0
- package/dist/shared-C47zAh2A.js +17 -0
- package/dist/sign-in-BAjR49fq.d.ts +24 -0
- package/dist/sign-in-BsIaNx2C.js +392 -0
- package/dist/sign-in-DNCdrk05.js +608 -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-ClHIdgKS.js +126996 -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-B-pQ9Mmo.js +49 -0
- package/dist/subject-readers-BNSzkqw_.d.ts +21 -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-yYg0E2-n.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-CtG0sehj.d.ts +151 -0
- package/dist/timing-dypS0nxW.js +95 -0
- package/dist/topic-CJrQZQaa.d.ts +415 -0
- package/dist/topic-ikV_pLTX.js +643 -0
- package/dist/types-BBQLbui9.d.ts +659 -0
- package/dist/types-CAQBmpDx.d.ts +217 -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-EO2crSX_.d.ts +177 -0
- package/dist/types-SFRomQF7.d.ts +624 -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-D7QkrwzV.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-BcGfvZOE.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-BFHu4sci.d.ts +163 -0
- package/dist/workflow-sdk-BVlFEB5Q.js +242 -0
- package/dist/workflow-sdk-Bw6_u0ar.js +2446 -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 +14 -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,2170 @@
|
|
|
1
|
+
import { n as CliError, r as errorText } from "./errors-BTe6A15O.js";
|
|
2
|
+
import { n as importPath } from "./io-DH1kcmmP.js";
|
|
3
|
+
import { i as cachedTypesModule, n as cachedDatabaseTypes, s as typesModuleKey } from "./cache-CXgR_Ahi.js";
|
|
4
|
+
import { t as byCodePoint } from "./compare-BmIWVEui.js";
|
|
5
|
+
import { f as generateDatabaseTypes, h as restrictSchemas, p as oxfmtInstalled, v as tsTypeOf } from "./snapshot-C8MVPyO8.js";
|
|
6
|
+
import { t as isRecord$1 } from "./guards-CUlDNYZs.js";
|
|
7
|
+
import { a as toCatalog } from "./source-DANaJJVc.js";
|
|
8
|
+
import { basename, dirname, isAbsolute, join, posix, relative, resolve } from "node:path";
|
|
9
|
+
import { entityNames } from "better-supabase/blocks";
|
|
10
|
+
import { DEFAULT_CLAIMS, blockEntities, blockEntityRenames, blockSubjectTypes, tenantClaimPaths, tenantNameOf } from "better-supabase/config";
|
|
11
|
+
import { PRESET_CATALOG } from "better-supabase/preset";
|
|
12
|
+
import { BLOCK_OPTION_SCHEMAS, DEFAULT_ROLES, appTableEventTypes, instanceFunctions, modulePermissionKeys, resolveBlock, resolveBlocks, resolveProviderSql } from "better-supabase/sql";
|
|
13
|
+
import { toCamel } from "better-supabase";
|
|
14
|
+
//#region src/cli/gen/model-types.ts
|
|
15
|
+
const applyCasing = (name, casing) => casing === "camel" ? toCamel(name) : name;
|
|
16
|
+
/** The Postgres type name of each app column type, as introspection reports it. */
|
|
17
|
+
const APP_COLUMN_UDT = {
|
|
18
|
+
text: "text",
|
|
19
|
+
integer: "int4",
|
|
20
|
+
bigint: "int8",
|
|
21
|
+
numeric: "numeric",
|
|
22
|
+
boolean: "bool",
|
|
23
|
+
uuid: "uuid",
|
|
24
|
+
timestamptz: "timestamptz",
|
|
25
|
+
date: "date",
|
|
26
|
+
jsonb: "jsonb",
|
|
27
|
+
"text[]": "_text"
|
|
28
|
+
};
|
|
29
|
+
const CODEC_TYPE = {
|
|
30
|
+
instant: "Temporal.Instant",
|
|
31
|
+
plainDateTime: "Temporal.PlainDateTime",
|
|
32
|
+
bigint: "bigint",
|
|
33
|
+
string: "string",
|
|
34
|
+
utcString: "string"
|
|
35
|
+
};
|
|
36
|
+
function codecFor(udt, config) {
|
|
37
|
+
const { codecs } = config;
|
|
38
|
+
if (codecs.timestamptz === "utc" && udt === "timestamptz") return "utcString";
|
|
39
|
+
if (codecs.timestamptz === "instant") {
|
|
40
|
+
if (udt === "timestamptz") return "instant";
|
|
41
|
+
if (udt === "timestamp") return "plainDateTime";
|
|
42
|
+
}
|
|
43
|
+
if (udt === "int8" && codecs.int8 !== "number") return codecs.int8;
|
|
44
|
+
if (udt === "numeric" && codecs.numeric === "string") return "string";
|
|
45
|
+
}
|
|
46
|
+
function enumType(values) {
|
|
47
|
+
return values.map((value) => JSON.stringify(value)).join(" | ");
|
|
48
|
+
}
|
|
49
|
+
//#endregion
|
|
50
|
+
//#region src/cli/gen/shared.ts
|
|
51
|
+
const q = (value) => JSON.stringify(value);
|
|
52
|
+
/**
|
|
53
|
+
* The import path of a runtime subpath: `better-supabase/blocks/trash`, or
|
|
54
|
+
* `../src/blocks/trash/index.ts` when the runtime is imported from source.
|
|
55
|
+
*/
|
|
56
|
+
const runtimeSubpath = (runtime, subpath) => runtime.endsWith("/index.ts") ? `${runtime.slice(0, -8)}${subpath}/index.ts` : `${runtime}/${subpath}`;
|
|
57
|
+
/** A property key: bare when it is a valid identifier, quoted otherwise. */
|
|
58
|
+
function prop(name) {
|
|
59
|
+
return /^[A-Za-z_$][\w$]*$/.test(name) ? name : q(name);
|
|
60
|
+
}
|
|
61
|
+
function nullable(type, isNullable) {
|
|
62
|
+
return isNullable ? `${type} | null` : type;
|
|
63
|
+
}
|
|
64
|
+
/** `T[]`, parenthesized when `T` is a union or other compound type. */
|
|
65
|
+
function arrayOf(type) {
|
|
66
|
+
return /^[\w.$]+$/.test(type) ? `${type}[]` : `(${type})[]`;
|
|
67
|
+
}
|
|
68
|
+
function indent(lines, depth) {
|
|
69
|
+
const pad = " ".repeat(depth);
|
|
70
|
+
return lines.flatMap((line) => line.split("\n")).map((line) => line === "" ? line : pad + line);
|
|
71
|
+
}
|
|
72
|
+
/** `name: {` + indented children + `};`, or an inline empty type. */
|
|
73
|
+
function block(name, children, empty = "{ [_ in never]: never }") {
|
|
74
|
+
if (children.length === 0) return [`${name}: ${empty};`];
|
|
75
|
+
return [
|
|
76
|
+
`${name}: {`,
|
|
77
|
+
...indent(children, 1),
|
|
78
|
+
"};"
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
function sameColumns(left, right) {
|
|
82
|
+
return left.length === right.length && left.every((column) => right.includes(column));
|
|
83
|
+
}
|
|
84
|
+
function singular(name) {
|
|
85
|
+
if (name.endsWith("ies")) return `${name.slice(0, -3)}y`;
|
|
86
|
+
if (name.endsWith("sses")) return name.slice(0, -2);
|
|
87
|
+
if (name.endsWith("s") && !name.endsWith("ss")) return name.slice(0, -1);
|
|
88
|
+
return name;
|
|
89
|
+
}
|
|
90
|
+
function pascal$2(name) {
|
|
91
|
+
return name.replaceAll(/(^|[_-]+)([a-z0-9])/g, (_, __, char) => char.toUpperCase()).replace(/^[a-z]/, (char) => char.toUpperCase());
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* A valid TypeScript identifier: other characters become `_`, a leading digit
|
|
95
|
+
* gets one.
|
|
96
|
+
*/
|
|
97
|
+
function identifier(name) {
|
|
98
|
+
const safe = name.replaceAll(/[^\w$]/g, "_");
|
|
99
|
+
return /^\d/.test(safe) ? `_${safe}` : safe;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The config entry for a database object, keyed `schema.name` or `name`. The
|
|
103
|
+
* qualified key wins.
|
|
104
|
+
*/
|
|
105
|
+
function configFor(entries, schema, name) {
|
|
106
|
+
return entries[`${schema}.${name}`] ?? entries[name];
|
|
107
|
+
}
|
|
108
|
+
function isJsonUdt(udt) {
|
|
109
|
+
return udt === "json" || udt === "jsonb";
|
|
110
|
+
}
|
|
111
|
+
const CHECK_ANY = /^CHECK \(\(\(?"?(\w+)"?\)?(?:::\w+)? = ANY \(\(?ARRAY\[(.+)\]\)?(?:::\w+\[\])?\)\)\)$/;
|
|
112
|
+
const CHECK_OR = /^CHECK \(\((.+)\)\)$/;
|
|
113
|
+
const OR_TERM = /^\(?"?(\w+)"?\)?(?:::\w+)? = '((?:[^']|'')*)'(?:::\w+)?\)?$/;
|
|
114
|
+
const LITERAL = /'((?:[^']|'')*)'(?:::[\w ]+)?/g;
|
|
115
|
+
/**
|
|
116
|
+
* Extracts `column in ('a', 'b')` CHECK constraints, which Postgres stores as
|
|
117
|
+
* `CHECK ((col = ANY (ARRAY['a'::text, 'b'::text])))` or an OR chain.
|
|
118
|
+
*/
|
|
119
|
+
function parseCheckUnion(definition) {
|
|
120
|
+
const any = CHECK_ANY.exec(definition);
|
|
121
|
+
if (any?.[1] && any[2]) {
|
|
122
|
+
const values = [...any[2].matchAll(LITERAL)].map((match) => (match[1] ?? "").replaceAll("''", "'"));
|
|
123
|
+
return values.length > 0 ? {
|
|
124
|
+
column: any[1],
|
|
125
|
+
values
|
|
126
|
+
} : void 0;
|
|
127
|
+
}
|
|
128
|
+
const chain = CHECK_OR.exec(definition);
|
|
129
|
+
if (chain?.[1]) {
|
|
130
|
+
const terms = chain[1].split(/\) OR \(|\s+OR\s+/);
|
|
131
|
+
let column;
|
|
132
|
+
const values = [];
|
|
133
|
+
for (const term of terms) {
|
|
134
|
+
const match = OR_TERM.exec(term.trim());
|
|
135
|
+
if (!match?.[1]) return;
|
|
136
|
+
if (column && column !== match[1]) return;
|
|
137
|
+
column = match[1];
|
|
138
|
+
values.push((match[2] ?? "").replaceAll("''", "'"));
|
|
139
|
+
}
|
|
140
|
+
return column && values.length > 1 ? {
|
|
141
|
+
column,
|
|
142
|
+
values
|
|
143
|
+
} : void 0;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
/** The text inside one pair of parentheses that wraps all of `text`, if any. */
|
|
147
|
+
function unwrap(text) {
|
|
148
|
+
let current = text.trim();
|
|
149
|
+
while (current.startsWith("(") && current.endsWith(")")) {
|
|
150
|
+
let depth = 0;
|
|
151
|
+
let wraps = true;
|
|
152
|
+
for (let index = 0; index < current.length; index += 1) {
|
|
153
|
+
const char = current[index];
|
|
154
|
+
if (char === "(") depth += 1;
|
|
155
|
+
else if (char === ")") depth -= 1;
|
|
156
|
+
if (depth === 0 && index < current.length - 1) {
|
|
157
|
+
wraps = false;
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (!wraps) break;
|
|
162
|
+
current = current.slice(1, -1).trim();
|
|
163
|
+
}
|
|
164
|
+
return current;
|
|
165
|
+
}
|
|
166
|
+
/** Splits `text` on a keyword outside parentheses and quotes. */
|
|
167
|
+
function splitTopLevel(text, keyword) {
|
|
168
|
+
const parts = [];
|
|
169
|
+
let depth = 0;
|
|
170
|
+
let quote;
|
|
171
|
+
let start = 0;
|
|
172
|
+
const separator = ` ${keyword} `;
|
|
173
|
+
for (let index = 0; index < text.length; index += 1) {
|
|
174
|
+
const char = text[index];
|
|
175
|
+
if (quote) {
|
|
176
|
+
if (char === quote) quote = void 0;
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
if (char === "'" || char === "\"") quote = char;
|
|
180
|
+
else if (char === "(") depth += 1;
|
|
181
|
+
else if (char === ")") depth -= 1;
|
|
182
|
+
else if (depth === 0 && text.slice(index, index + separator.length).toUpperCase() === separator) {
|
|
183
|
+
parts.push(text.slice(start, index));
|
|
184
|
+
start = index + separator.length;
|
|
185
|
+
index += separator.length - 1;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
parts.push(text.slice(start));
|
|
189
|
+
return parts.map((part) => part.trim());
|
|
190
|
+
}
|
|
191
|
+
const IS_NOT_NULL = /^(?:"((?:[^"]|"")+)"|([\w$]+)) IS NOT NULL$/i;
|
|
192
|
+
/**
|
|
193
|
+
* Columns a CHECK constraint makes not null: `CHECK ((slug IS NOT NULL))` and
|
|
194
|
+
* the `IS NOT NULL` terms of a top-level `AND`. A term under `OR`, `NOT` or any
|
|
195
|
+
* other expression narrows nothing, and neither does a `NOT VALID` one.
|
|
196
|
+
*/
|
|
197
|
+
function parseCheckNotNull(definition) {
|
|
198
|
+
const text = definition.trim();
|
|
199
|
+
if (/\bNOT VALID$/i.test(text)) return [];
|
|
200
|
+
const body = /^CHECK\s*(.*)$/is.exec(text)?.[1];
|
|
201
|
+
if (!body) return [];
|
|
202
|
+
const expression = unwrap(body);
|
|
203
|
+
if (splitTopLevel(expression, "OR").length > 1) return [];
|
|
204
|
+
return splitTopLevel(expression, "AND").flatMap((term) => {
|
|
205
|
+
const match = IS_NOT_NULL.exec(unwrap(term));
|
|
206
|
+
if (!match) return [];
|
|
207
|
+
return [match[1]?.replaceAll("\"\"", "\"") ?? match[2] ?? ""];
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
//#endregion
|
|
211
|
+
//#region src/cli/gen/block-names.ts
|
|
212
|
+
const PLACEHOLDER = /\{(\.\.\.)?([A-Za-z_][\w]*)\}/g;
|
|
213
|
+
function isRecord(value) {
|
|
214
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
215
|
+
}
|
|
216
|
+
function camel$1(name) {
|
|
217
|
+
return name.replaceAll(/[-_]([a-z0-9])/g, (_, c) => c.toUpperCase());
|
|
218
|
+
}
|
|
219
|
+
function pascal$1(name) {
|
|
220
|
+
const camelled = camel$1(name);
|
|
221
|
+
return camelled.charAt(0).toUpperCase() + camelled.slice(1);
|
|
222
|
+
}
|
|
223
|
+
function union(values) {
|
|
224
|
+
return [...new Set(values)].toSorted().map((value) => q(value)).join(" | ");
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* A template with `{placeholders}` as an arrow function over their values: `(v:
|
|
228
|
+
* { readonly userId: string }) => \`notifications:${v.userId}\``. `rename` maps
|
|
229
|
+
* a placeholder to the property the caller passes.
|
|
230
|
+
*/
|
|
231
|
+
function templateFunction(template, rename = (name) => name, value = "string") {
|
|
232
|
+
const names = [];
|
|
233
|
+
let body = "";
|
|
234
|
+
let last = 0;
|
|
235
|
+
for (const match of template.matchAll(PLACEHOLDER)) {
|
|
236
|
+
const name = rename(match[2] ?? "");
|
|
237
|
+
if (!names.includes(name)) names.push(name);
|
|
238
|
+
body += `${literalPart(template.slice(last, match.index))}\${String(v.${name})}`;
|
|
239
|
+
last = match.index + match[0].length;
|
|
240
|
+
}
|
|
241
|
+
body += literalPart(template.slice(last));
|
|
242
|
+
if (names.length === 0) return `() => ${q(template)}`;
|
|
243
|
+
return `(v: { ${names.map((name) => `readonly ${name}: ${value}`).join("; ")} }) => \`${body}\``;
|
|
244
|
+
}
|
|
245
|
+
function literalPart(text) {
|
|
246
|
+
return text.replaceAll(/[`\\]|\$\{/g, (match) => `\\${match}`);
|
|
247
|
+
}
|
|
248
|
+
/** Permission keys by owner (block, subject or app table), then action. */
|
|
249
|
+
function permissionGroups(config) {
|
|
250
|
+
const groups = {};
|
|
251
|
+
for (const entry of modulePermissionKeys(config.blocks, config.blockNames)) groups[entry.module] = {
|
|
252
|
+
...groups[entry.module],
|
|
253
|
+
[entry.action]: entry.key
|
|
254
|
+
};
|
|
255
|
+
for (const [name, subject] of Object.entries(config.subjects)) if (subject.permissions) groups[name] = {
|
|
256
|
+
...groups[name],
|
|
257
|
+
...subject.permissions
|
|
258
|
+
};
|
|
259
|
+
for (const table of Object.values(config.appTables)) {
|
|
260
|
+
const subject = table.subject;
|
|
261
|
+
if (subject?.permissions) groups[subject.type] = {
|
|
262
|
+
...groups[subject.type],
|
|
263
|
+
...subject.permissions
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
return groups;
|
|
267
|
+
}
|
|
268
|
+
/** Whether `blocks.generated.ts` exports `permissions`. */
|
|
269
|
+
function hasPermissionConstants(config) {
|
|
270
|
+
return Object.values(permissionGroups(config)).some((group) => Object.keys(group).length > 0);
|
|
271
|
+
}
|
|
272
|
+
function permissionLines(config) {
|
|
273
|
+
const groups = permissionGroups(config);
|
|
274
|
+
const keys = Object.values(groups).flatMap((group) => Object.values(group));
|
|
275
|
+
if (keys.length === 0) return [];
|
|
276
|
+
return [
|
|
277
|
+
"",
|
|
278
|
+
"/**",
|
|
279
|
+
" * The permission keys the installed blocks, subjects and app tables check,",
|
|
280
|
+
" * by owner and action.",
|
|
281
|
+
" * @public",
|
|
282
|
+
" */",
|
|
283
|
+
"export const permissions = {",
|
|
284
|
+
...Object.entries(groups).toSorted(([a], [b]) => a.localeCompare(b)).flatMap(([owner, actions]) => [
|
|
285
|
+
` ${prop(owner)}: {`,
|
|
286
|
+
...Object.entries(actions).map(([action, key]) => ` ${prop(action)}: ${q(key)},`),
|
|
287
|
+
" },"
|
|
288
|
+
]),
|
|
289
|
+
"} as const;",
|
|
290
|
+
"",
|
|
291
|
+
"/**",
|
|
292
|
+
" * Every permission key, for `defineAuthorizer<PermissionKey>()` and",
|
|
293
|
+
" * the `permission` of actions and routes.",
|
|
294
|
+
" * @public",
|
|
295
|
+
" */",
|
|
296
|
+
`export type PermissionKey = ${union(keys)};`
|
|
297
|
+
];
|
|
298
|
+
}
|
|
299
|
+
function roleLines(config, entries) {
|
|
300
|
+
if (entries["permissions"] === void 0) return [];
|
|
301
|
+
const access = config.blocks.permissions;
|
|
302
|
+
const settings = typeof access === "object" ? access : void 0;
|
|
303
|
+
if ((settings?.model ?? "roles") !== "roles") return [];
|
|
304
|
+
const roles = settings?.roles ?? DEFAULT_ROLES;
|
|
305
|
+
return [
|
|
306
|
+
"",
|
|
307
|
+
"/** The roles `blocks.permissions.roles` defines. @public */",
|
|
308
|
+
`export type RoleName = ${union(Object.keys(roles))};`
|
|
309
|
+
];
|
|
310
|
+
}
|
|
311
|
+
function blockEventLists(entries) {
|
|
312
|
+
return PRESET_CATALOG.manifests.flatMap((manifest) => {
|
|
313
|
+
const events = manifest.events;
|
|
314
|
+
const client = manifest.client;
|
|
315
|
+
if (events === void 0 || !client) return [];
|
|
316
|
+
const lists = Object.entries(entries).filter(([key, entry]) => (entry.block ?? key) === manifest.name).map(([key, entry]) => {
|
|
317
|
+
const renames = entry.names?.entities ?? [];
|
|
318
|
+
const names = entityNames(renames);
|
|
319
|
+
const type = renames.length === 0 ? events.type : key === manifest.name ? names.rename(events.type) : `${pascalOf(key)}Events`;
|
|
320
|
+
return {
|
|
321
|
+
specifier: renames.length === 0 ? `import type { ${events.type} } from ${q(client.subpath)};` : "",
|
|
322
|
+
type,
|
|
323
|
+
types: events.types.map((each) => names.rename(each))
|
|
324
|
+
};
|
|
325
|
+
});
|
|
326
|
+
return lists.filter((list, index) => lists.findIndex((other) => other.type === list.type) === index);
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
function pascalOf(instance) {
|
|
330
|
+
const camel = instance.replaceAll(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
|
|
331
|
+
return camel.charAt(0).toUpperCase() + camel.slice(1);
|
|
332
|
+
}
|
|
333
|
+
function eventLines(entries) {
|
|
334
|
+
const lists = blockEventLists(entries);
|
|
335
|
+
if (lists.length === 0) return {
|
|
336
|
+
specifiers: [],
|
|
337
|
+
imports: [],
|
|
338
|
+
lines: []
|
|
339
|
+
};
|
|
340
|
+
const types = [...new Set(lists.flatMap((list) => list.types))].toSorted();
|
|
341
|
+
return {
|
|
342
|
+
specifiers: ["type Events"],
|
|
343
|
+
imports: lists.flatMap((list) => list.specifier === "" ? [] : [list.specifier]),
|
|
344
|
+
lines: [
|
|
345
|
+
"",
|
|
346
|
+
"/** Every installed block's events: type to data. @public */",
|
|
347
|
+
`export type BlockEvents = ${lists.map((list) => list.type).join(" & ")};`,
|
|
348
|
+
"",
|
|
349
|
+
"/**",
|
|
350
|
+
" * The installed blocks' event types under the configured names, for",
|
|
351
|
+
" * `onBlockEvent` and the sinks.",
|
|
352
|
+
" * @public",
|
|
353
|
+
" */",
|
|
354
|
+
"export const blockEvents: Events<BlockEvents> = {",
|
|
355
|
+
" types: [",
|
|
356
|
+
...types.map((type) => ` ${q(type)},`),
|
|
357
|
+
" ],",
|
|
358
|
+
"};",
|
|
359
|
+
"",
|
|
360
|
+
"/**",
|
|
361
|
+
" * The block events with an open payload, for AsyncAPI's `cloudEvents.blocks`.",
|
|
362
|
+
" * @public",
|
|
363
|
+
" */",
|
|
364
|
+
"export const blockEventSchemas = {",
|
|
365
|
+
...types.map((type) => ` ${q(type)}: true,`),
|
|
366
|
+
"} as const;"
|
|
367
|
+
]
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
function urlLines(config, entries) {
|
|
371
|
+
const templates = /* @__PURE__ */ new Map();
|
|
372
|
+
for (const name of Object.keys(entries)) for (const entity of blockEntities(name, config.blocks)) if (entity.url !== void 0) templates.set(camel$1(entity.to.singular), entity.url);
|
|
373
|
+
for (const [type, subject] of Object.entries(config.subjects)) {
|
|
374
|
+
const key = camel$1(type);
|
|
375
|
+
if (subject.url !== void 0 && !templates.has(key)) templates.set(key, subject.url);
|
|
376
|
+
}
|
|
377
|
+
const urls = [...templates].map(([key, template]) => ` ${prop(key)}: ${templateFunction(template, (column) => applyCasing(column, config.casing), "string | number")},`);
|
|
378
|
+
return urls.length === 0 ? [] : [
|
|
379
|
+
"",
|
|
380
|
+
"/**",
|
|
381
|
+
" * The path of each subject type with a `url`: block entities, `records`",
|
|
382
|
+
" * and `tables` subjects.",
|
|
383
|
+
" * @public",
|
|
384
|
+
" */",
|
|
385
|
+
"export const urls = {",
|
|
386
|
+
...urls,
|
|
387
|
+
"} as const;"
|
|
388
|
+
];
|
|
389
|
+
}
|
|
390
|
+
function topicLines(entries) {
|
|
391
|
+
const topics = Object.entries(entries).flatMap(([name, entry]) => Object.entries(entry.options).flatMap(([option, value]) => {
|
|
392
|
+
if (!/^(?:topic|[a-z]+Topic)$/.test(option) || typeof value !== "string") return [];
|
|
393
|
+
return [` ${prop(option === "topic" ? camel$1(name) : `${camel$1(name)}${pascal$1(option.replace(/Topic$/, ""))}`)}: ${templateFunction(value)},`];
|
|
394
|
+
}));
|
|
395
|
+
return topics.length === 0 ? [] : [
|
|
396
|
+
"",
|
|
397
|
+
"/** The realtime topics the blocks broadcast on, with their placeholders filled. @public */",
|
|
398
|
+
"export const topics = {",
|
|
399
|
+
...topics,
|
|
400
|
+
"} as const;"
|
|
401
|
+
];
|
|
402
|
+
}
|
|
403
|
+
function pathLines(config) {
|
|
404
|
+
const paths = Object.entries(config.buckets).map(([name, bucket]) => {
|
|
405
|
+
const key = prop(camel$1(name));
|
|
406
|
+
return typeof bucket.path === "string" ? ` ${key}: ${templateFunction(bucket.path)},` : ` ${key}: [${bucket.path.map((path) => templateFunction(path)).join(", ")}],`;
|
|
407
|
+
});
|
|
408
|
+
return paths.length === 0 ? [] : [
|
|
409
|
+
"",
|
|
410
|
+
"/** Object paths in each bucket, from `buckets.<name>.path`. @public */",
|
|
411
|
+
"export const paths = {",
|
|
412
|
+
...paths,
|
|
413
|
+
"} as const;"
|
|
414
|
+
];
|
|
415
|
+
}
|
|
416
|
+
function optionOf(config, module, option) {
|
|
417
|
+
return config.blockNames.includes(module) || config.blocks[module] !== void 0 ? resolveBlock(config.blocks[module]).options[option] : void 0;
|
|
418
|
+
}
|
|
419
|
+
function settingKeys(config) {
|
|
420
|
+
const option = optionOf(config, "settings", "schemas");
|
|
421
|
+
const schemas = isRecord(option) && isRecord(option["schemas"]) ? option["schemas"] : option;
|
|
422
|
+
if (!isRecord(schemas)) return [];
|
|
423
|
+
return [
|
|
424
|
+
"user",
|
|
425
|
+
"organization",
|
|
426
|
+
"platform"
|
|
427
|
+
].flatMap((scope) => {
|
|
428
|
+
const keys = schemas[scope];
|
|
429
|
+
return isRecord(keys) ? Object.keys(keys) : [];
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
function meterNames(config) {
|
|
433
|
+
const option = optionOf(config, "usage", "meters");
|
|
434
|
+
return isRecord(option) && typeof option["table"] !== "string" ? Object.keys(option) : [];
|
|
435
|
+
}
|
|
436
|
+
function keyUnionLines(config) {
|
|
437
|
+
return [[
|
|
438
|
+
"SettingKey",
|
|
439
|
+
"`blocks.settings.options.schemas`",
|
|
440
|
+
settingKeys(config)
|
|
441
|
+
], [
|
|
442
|
+
"MeterName",
|
|
443
|
+
"`blocks.usage.options.meters`",
|
|
444
|
+
meterNames(config)
|
|
445
|
+
]].flatMap(([name, source, keys]) => keys.length === 0 ? [] : [
|
|
446
|
+
"",
|
|
447
|
+
`/** The keys ${source} names. @public */`,
|
|
448
|
+
`export type ${name} = ${union(keys)};`
|
|
449
|
+
]);
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* The constants app code references by name, from the config: permission keys,
|
|
453
|
+
* role names, block events, entity URLs, realtime topics, bucket paths, and the
|
|
454
|
+
* settings and meter keys.
|
|
455
|
+
*/
|
|
456
|
+
function nameConstantLines(config, entries) {
|
|
457
|
+
const events = eventLines(entries);
|
|
458
|
+
return {
|
|
459
|
+
specifiers: events.specifiers,
|
|
460
|
+
imports: events.imports,
|
|
461
|
+
lines: [
|
|
462
|
+
...permissionLines(config),
|
|
463
|
+
...roleLines(config, entries),
|
|
464
|
+
...events.lines,
|
|
465
|
+
...urlLines(config, entries),
|
|
466
|
+
...topicLines(entries),
|
|
467
|
+
...pathLines(config),
|
|
468
|
+
...keyUnionLines(config)
|
|
469
|
+
]
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
//#endregion
|
|
473
|
+
//#region src/cli/gen/comment.ts
|
|
474
|
+
/**
|
|
475
|
+
* The metadata a `COMMENT ON` adds to a table or column: its description,
|
|
476
|
+
* without the `@example` lines the validator generators read, and `deprecated`
|
|
477
|
+
* when a line starts with `@deprecated`. The library's `parseComment`
|
|
478
|
+
* (`src/generators/shared.ts`) reads comments the same way.
|
|
479
|
+
*/
|
|
480
|
+
function commentMeta(comment) {
|
|
481
|
+
if (!comment) return {};
|
|
482
|
+
const deprecated = /^\s*@deprecated\b/m.test(comment);
|
|
483
|
+
const description = comment.replaceAll(/^\s*@example\s+(.+?)\s*$/gm, "").replaceAll(/^\s*@deprecated\b.*$/gm, "").trim();
|
|
484
|
+
return {
|
|
485
|
+
...description ? { description } : {},
|
|
486
|
+
...deprecated ? { deprecated: true } : {}
|
|
487
|
+
};
|
|
488
|
+
}
|
|
489
|
+
//#endregion
|
|
490
|
+
//#region src/cli/gen/model-functions.ts
|
|
491
|
+
const NOT_NULL_TAG = /@notNull(?:\(([^)]*)\))?/u;
|
|
492
|
+
/**
|
|
493
|
+
* The `@notNull` tag in a function's comment: `true` for every result, or the
|
|
494
|
+
* columns `@notNull(a, b)` names. `undefined` without a tag.
|
|
495
|
+
*/
|
|
496
|
+
function notNullTag(comment) {
|
|
497
|
+
const match = comment === void 0 ? null : NOT_NULL_TAG.exec(comment);
|
|
498
|
+
if (!match) return;
|
|
499
|
+
const list = match[1];
|
|
500
|
+
return list === void 0 ? true : list.split(",").map((name) => name.trim()).filter((name) => name !== "");
|
|
501
|
+
}
|
|
502
|
+
/** The callable functions; warns about functions another schema shadows. */
|
|
503
|
+
function buildFunctions(ctx, tableModels) {
|
|
504
|
+
const { config, catalog, enumsByName, tsType, warnings } = ctx;
|
|
505
|
+
const tablesByName = new Map(tableModels.map((table) => [`${table.snapshot.schema}.${table.snapshot.name}`, table]));
|
|
506
|
+
const callable = catalog.functions.filter((fn) => config.schemas.includes(fn.schema)).filter((fn) => fn.returns !== "trigger" && fn.returns !== "event_trigger").filter((fn) => !fn.args.some((arg) => arg.udt === "internal"));
|
|
507
|
+
const ownerSchema = /* @__PURE__ */ new Map();
|
|
508
|
+
for (const schema of config.schemas) for (const fn of callable) if (fn.schema === schema && !ownerSchema.has(fn.name)) ownerSchema.set(fn.name, schema);
|
|
509
|
+
const shadowed = /* @__PURE__ */ new Set();
|
|
510
|
+
const unpromised = [];
|
|
511
|
+
const functions = callable.filter((fn) => {
|
|
512
|
+
if (ownerSchema.get(fn.name) === fn.schema) return true;
|
|
513
|
+
shadowed.add(`${fn.schema}.${fn.name}`);
|
|
514
|
+
return false;
|
|
515
|
+
}).map((fn) => {
|
|
516
|
+
const typeOf = (format, typeSchema) => {
|
|
517
|
+
const isArray = format.startsWith("_");
|
|
518
|
+
const values = enumsByName.get(`${typeSchema ?? fn.schema}.${isArray ? format.slice(1) : format}`);
|
|
519
|
+
if (values) return isArray ? arrayOf(enumType(values)) : enumType(values);
|
|
520
|
+
return tsType(fn.schema, format, typeSchema);
|
|
521
|
+
};
|
|
522
|
+
const configured = configFor(config.functions, fn.schema, fn.name)?.notNull;
|
|
523
|
+
const notNull = configured ?? notNullTag(fn.comment);
|
|
524
|
+
const source = configured === void 0 ? `the @notNull tag on ${fn.schema}.${fn.name}` : `functions.${fn.name}.notNull`;
|
|
525
|
+
const notNullColumns = new Set(Array.isArray(notNull) ? notNull : []);
|
|
526
|
+
if (Array.isArray(notNull)) {
|
|
527
|
+
for (const name of notNullColumns) if (!fn.returnsTable?.some((column) => column.name === name)) throw new TypeError(`${source}: "${name}" is not a column the function returns`);
|
|
528
|
+
}
|
|
529
|
+
const orNull = (type, column) => notNull === true || column !== void 0 && notNullColumns.has(column) || type === "undefined" || type === "Json" || type === "unknown" ? type : `${type} | null`;
|
|
530
|
+
let returns;
|
|
531
|
+
let result;
|
|
532
|
+
const rowTable = fn.returnsRelation ? tablesByName.get(fn.returnsRelation) : void 0;
|
|
533
|
+
if (fn.returnsTable) {
|
|
534
|
+
const columns = fn.returnsTable.map((column) => {
|
|
535
|
+
const codec = codecFor(column.udt, config);
|
|
536
|
+
const tsType = codec ? CODEC_TYPE[codec] : typeOf(column.udt, column.typeSchema);
|
|
537
|
+
return {
|
|
538
|
+
db: column.name,
|
|
539
|
+
app: applyCasing(column.name, config.casing),
|
|
540
|
+
codec,
|
|
541
|
+
tsType: column.notNull ? tsType : orNull(tsType, column.name)
|
|
542
|
+
};
|
|
543
|
+
});
|
|
544
|
+
if (notNull === void 0 && columns.some((column) => column.tsType.endsWith(" | null"))) unpromised.push(`${fn.schema}.${fn.name}`);
|
|
545
|
+
returns = `{ ${columns.map((column) => `${JSON.stringify(column.app)}: ${column.tsType}`).join("; ")} }[]`;
|
|
546
|
+
if (columns.some((column) => column.codec !== void 0 || column.app !== column.db)) result = { columns: columns.map(({ db, app, codec }) => ({
|
|
547
|
+
db,
|
|
548
|
+
...app === db ? {} : { name: app },
|
|
549
|
+
...codec ? { codec } : {}
|
|
550
|
+
})) };
|
|
551
|
+
} else if (rowTable) {
|
|
552
|
+
returns = `Models[${JSON.stringify(rowTable.key)}]['Row']`;
|
|
553
|
+
returns = fn.returnsSet ? arrayOf(returns) : orNull(returns);
|
|
554
|
+
if (rowTable.columns.some((column) => column.codec !== void 0 || column.app !== column.db)) result = { table: rowTable.key };
|
|
555
|
+
} else {
|
|
556
|
+
returns = orNull(typeOf(fn.returns, fn.returnsSchema));
|
|
557
|
+
if (fn.returnsSet) returns = arrayOf(returns);
|
|
558
|
+
}
|
|
559
|
+
return {
|
|
560
|
+
key: fn.name,
|
|
561
|
+
meta: {
|
|
562
|
+
name: fn.name,
|
|
563
|
+
schema: fn.schema,
|
|
564
|
+
args: fn.args.map((arg) => ({
|
|
565
|
+
name: arg.name,
|
|
566
|
+
type: arg.udt
|
|
567
|
+
})),
|
|
568
|
+
returns: fn.returns,
|
|
569
|
+
returnsSet: fn.returnsSet,
|
|
570
|
+
volatility: fn.volatility,
|
|
571
|
+
...result ? { result } : {}
|
|
572
|
+
},
|
|
573
|
+
args: fn.args.map((arg) => ({
|
|
574
|
+
name: arg.name,
|
|
575
|
+
tsType: typeOf(arg.isArray ? `_${arg.udt}` : arg.udt, arg.typeSchema),
|
|
576
|
+
optional: arg.hasDefault,
|
|
577
|
+
values: enumsByName.get(`${arg.typeSchema ?? fn.schema}.${arg.udt}`)
|
|
578
|
+
})),
|
|
579
|
+
returns
|
|
580
|
+
};
|
|
581
|
+
});
|
|
582
|
+
for (const name of Object.keys(config.functions)) if (!functions.some((fn) => fn.key === name || `${fn.meta.schema}.${fn.key}` === name)) throw new TypeError(`functions.${name}: no function "${name}" in ${config.schemas.join(", ")}`);
|
|
583
|
+
if (unpromised.length > 0) {
|
|
584
|
+
const names = [...new Set(unpromised)];
|
|
585
|
+
ctx.notices.push(`Notice: Postgres can't declare a \`returns table\` column not null, so ${names.length === 1 ? "this function's columns are" : `the columns of these ${names.length} functions are`} typed \`| null\`: ${names.join(", ")}. Name the columns that are never null with an \`@notNull(a, b)\` tag in the function's comment or with \`gen.functions.<name>.notNull\`; \`notNull: []\` keeps them all nullable and silences this notice.`);
|
|
586
|
+
}
|
|
587
|
+
for (const id of shadowed) {
|
|
588
|
+
const name = id.slice(id.indexOf(".") + 1);
|
|
589
|
+
warnings.push(`${id}: ${ownerSchema.get(name) ?? ""}.${name} has the same name and comes first in \`schemas\`, so ${id} gets no \`$rpc\` types.`);
|
|
590
|
+
}
|
|
591
|
+
return functions;
|
|
592
|
+
}
|
|
593
|
+
//#endregion
|
|
594
|
+
//#region src/cli/gen/model-relations.ts
|
|
595
|
+
function buildRelations(ctx, tables) {
|
|
596
|
+
const { config, keyOf } = ctx;
|
|
597
|
+
const byKey = /* @__PURE__ */ new Map();
|
|
598
|
+
for (const entry of tables) byKey.set(`${entry.table.schema}.${entry.table.name}`, entry);
|
|
599
|
+
const appName = (schema, table, column) => {
|
|
600
|
+
return byKey.get(`${schema}.${table}`)?.byDb.get(column)?.app ?? column;
|
|
601
|
+
};
|
|
602
|
+
const relations = /* @__PURE__ */ new Map();
|
|
603
|
+
const push = (tableId, relation) => {
|
|
604
|
+
const list = relations.get(tableId);
|
|
605
|
+
if (list) list.push(relation);
|
|
606
|
+
else relations.set(tableId, [relation]);
|
|
607
|
+
};
|
|
608
|
+
for (const { table, casing, byDb: own } of tables) {
|
|
609
|
+
const sourceId = `${table.schema}.${table.name}`;
|
|
610
|
+
for (const fk of table.foreignKeys) {
|
|
611
|
+
const targetId = `${fk.refSchema}.${fk.refTable}`;
|
|
612
|
+
const target = byKey.get(targetId);
|
|
613
|
+
if (!target) continue;
|
|
614
|
+
const targetKey = keyOf.get(targetId) ?? fk.refTable;
|
|
615
|
+
const sourceColumns = fk.columns.map((column) => appName(table.schema, table.name, column));
|
|
616
|
+
const targetColumns = fk.refColumns.map((column) => appName(fk.refSchema, fk.refTable, column));
|
|
617
|
+
const nullable = config.relations.nullableUnderRls && target.table.rls || fk.columns.some((column) => own.get(column)?.nullable ?? true);
|
|
618
|
+
const onDelete = fk.onDelete === "cascade" || fk.onDelete === "set null" || fk.onDelete === "set default" ? { onDelete: fk.onDelete } : {};
|
|
619
|
+
const naming = namingColumns(fk.columns, fk.refColumns);
|
|
620
|
+
const [only] = naming;
|
|
621
|
+
const forwardBase = naming.length === 1 && only?.endsWith("_id") ? only.slice(0, -3) : singular(fk.refTable);
|
|
622
|
+
push(sourceId, {
|
|
623
|
+
name: applyCasing(forwardBase, casing),
|
|
624
|
+
base: forwardBase,
|
|
625
|
+
fkColumns: fk.columns,
|
|
626
|
+
refColumns: fk.refColumns,
|
|
627
|
+
meta: {
|
|
628
|
+
table: targetKey,
|
|
629
|
+
kind: "one",
|
|
630
|
+
nullable,
|
|
631
|
+
foreignKey: fk.name,
|
|
632
|
+
columns: sourceColumns,
|
|
633
|
+
references: targetColumns,
|
|
634
|
+
direction: "forward",
|
|
635
|
+
...onDelete
|
|
636
|
+
}
|
|
637
|
+
});
|
|
638
|
+
const unique = fk.oneToOne || sameColumns(table.primaryKey, fk.columns) || table.uniques.some((key) => sameColumns(key.columns, fk.columns));
|
|
639
|
+
const reverseBase = unique ? singular(table.name) : table.name;
|
|
640
|
+
push(targetId, {
|
|
641
|
+
name: applyCasing(reverseBase, target.casing),
|
|
642
|
+
base: reverseBase,
|
|
643
|
+
fkColumns: fk.columns,
|
|
644
|
+
refColumns: fk.refColumns,
|
|
645
|
+
meta: {
|
|
646
|
+
table: keyOf.get(sourceId) ?? table.name,
|
|
647
|
+
kind: unique ? "one" : "many",
|
|
648
|
+
nullable: true,
|
|
649
|
+
foreignKey: fk.name,
|
|
650
|
+
columns: targetColumns,
|
|
651
|
+
references: sourceColumns,
|
|
652
|
+
direction: "reverse",
|
|
653
|
+
...onDelete
|
|
654
|
+
}
|
|
655
|
+
});
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
return relations;
|
|
659
|
+
}
|
|
660
|
+
/**
|
|
661
|
+
* The columns that name a relation. A composite key that repeats a column on
|
|
662
|
+
* both sides, such as `(customer_id, organization_id)` referencing `(id,
|
|
663
|
+
* organization_id)` to keep rows in one tenant, is named by the rest.
|
|
664
|
+
*/
|
|
665
|
+
function namingColumns(columns, references) {
|
|
666
|
+
const own = columns.filter((column, index) => column !== references[index]);
|
|
667
|
+
return own.length > 0 ? own : columns;
|
|
668
|
+
}
|
|
669
|
+
//#endregion
|
|
670
|
+
//#region src/cli/gen/model.ts
|
|
671
|
+
const SOFT_DELETE_UDTS = /* @__PURE__ */ new Set(["timestamptz", "timestamp"]);
|
|
672
|
+
/** The overloads of each function name, in model order. */
|
|
673
|
+
function functionGroups(functions) {
|
|
674
|
+
const groups = /* @__PURE__ */ new Map();
|
|
675
|
+
for (const fn of functions) {
|
|
676
|
+
const group = groups.get(fn.key);
|
|
677
|
+
if (group) group.push(fn);
|
|
678
|
+
else groups.set(fn.key, [fn]);
|
|
679
|
+
}
|
|
680
|
+
return groups;
|
|
681
|
+
}
|
|
682
|
+
function signatureOf(fn) {
|
|
683
|
+
const { name: _name, schema: _schema, ...signature } = fn.meta;
|
|
684
|
+
return {
|
|
685
|
+
...signature,
|
|
686
|
+
args: signature.args.map((arg, index) => fn.args[index]?.optional ? {
|
|
687
|
+
...arg,
|
|
688
|
+
optional: true
|
|
689
|
+
} : arg)
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
function tableKey(table, casing, schemas) {
|
|
693
|
+
const base = applyCasing(table.name, casing);
|
|
694
|
+
if (schemas.length === 1 || table.schema === "public") return base;
|
|
695
|
+
return applyCasing(`${table.schema}_${table.name}`, casing);
|
|
696
|
+
}
|
|
697
|
+
const TEXT_UDTS = /* @__PURE__ */ new Set([
|
|
698
|
+
"text",
|
|
699
|
+
"varchar",
|
|
700
|
+
"bpchar"
|
|
701
|
+
]);
|
|
702
|
+
/**
|
|
703
|
+
* `config.storagePaths` resolved to bucket ids, with a check that every key is
|
|
704
|
+
* used.
|
|
705
|
+
*/
|
|
706
|
+
function numberedColumnsOf(config) {
|
|
707
|
+
const columns = /* @__PURE__ */ new Map();
|
|
708
|
+
const block = config.blocks["numbering"];
|
|
709
|
+
if (!config.blockNames.includes("numbering") || block?.mode === "custom" || !isRecord$1(block?.options?.["entities"])) return columns;
|
|
710
|
+
for (const entry of Object.values(block.options["entities"])) {
|
|
711
|
+
if (!isRecord$1(entry) || typeof entry["table"] !== "string" || typeof entry["column"] !== "string") continue;
|
|
712
|
+
const key = entry["table"].includes(".") ? entry["table"] : `public.${entry["table"]}`;
|
|
713
|
+
const set = columns.get(key) ?? /* @__PURE__ */ new Set();
|
|
714
|
+
set.add(entry["column"]);
|
|
715
|
+
if (typeof entry["sequenceColumn"] === "string") set.add(entry["sequenceColumn"]);
|
|
716
|
+
columns.set(key, set);
|
|
717
|
+
}
|
|
718
|
+
return columns;
|
|
719
|
+
}
|
|
720
|
+
function storagePathsOf(config) {
|
|
721
|
+
const bucketId = (name) => {
|
|
722
|
+
const bucket = config.buckets[name];
|
|
723
|
+
if (!bucket) return name;
|
|
724
|
+
return bucket.id ?? name.replaceAll(/[A-Z]/g, (char) => `-${char.toLowerCase()}`);
|
|
725
|
+
};
|
|
726
|
+
const unused = new Set(Object.keys(config.storagePaths));
|
|
727
|
+
return {
|
|
728
|
+
lookup(schema, table, column, udt) {
|
|
729
|
+
const key = [`${schema}.${table}.${column}`, `${table}.${column}`].find((candidate) => candidate in config.storagePaths);
|
|
730
|
+
if (key === void 0) return;
|
|
731
|
+
unused.delete(key);
|
|
732
|
+
if (!TEXT_UDTS.has(udt)) throw new TypeError(`storagePaths["${key}"]: ${schema}.${table}.${column} is ${udt}, not a text column`);
|
|
733
|
+
return bucketId(config.storagePaths[key]);
|
|
734
|
+
},
|
|
735
|
+
assertUsed() {
|
|
736
|
+
const [first] = unused;
|
|
737
|
+
if (first !== void 0) throw new TypeError(`storagePaths["${first}"]: no such column. Use \`table.column\` or \`schema.table.column\` (database names) in \`schemas\`.`);
|
|
738
|
+
}
|
|
739
|
+
};
|
|
740
|
+
}
|
|
741
|
+
function prepareCatalog(snapshot, config) {
|
|
742
|
+
const catalog = toCatalog(snapshot);
|
|
743
|
+
const introspection = restrictSchemas(snapshot.generator, config.schemas);
|
|
744
|
+
const tsType = (schema, format, typeSchema) => tsTypeOf(introspection, schema, format, typeSchema).replaceAll(/\(([\w.$]+)\)\[\]/g, "$1[]");
|
|
745
|
+
const enumsByName = /* @__PURE__ */ new Map();
|
|
746
|
+
for (const entry of catalog.enums) enumsByName.set(`${entry.schema}.${entry.name}`, entry.values);
|
|
747
|
+
const jsonImports = /* @__PURE__ */ new Map();
|
|
748
|
+
const unusedJson = new Set(Object.keys(config.json));
|
|
749
|
+
const jsonTypeFor = (schema, table, column) => {
|
|
750
|
+
const key = [`${schema}.${table}.${column}`, `${table}.${column}`].find((candidate) => candidate in config.json);
|
|
751
|
+
const override = key === void 0 ? void 0 : config.json[key];
|
|
752
|
+
if (key === void 0 || !override) return;
|
|
753
|
+
unusedJson.delete(key);
|
|
754
|
+
if ("type" in override) return override.type;
|
|
755
|
+
const [from, name] = override.import.split("#");
|
|
756
|
+
if (!from || !name) throw new TypeError(`json["${key}"].import must look like "./path.ts#TypeName"`);
|
|
757
|
+
jsonImports.set(name, {
|
|
758
|
+
name,
|
|
759
|
+
from
|
|
760
|
+
});
|
|
761
|
+
return name;
|
|
762
|
+
};
|
|
763
|
+
const optionsOf = (table) => configFor(config.tables, table.schema, table.name);
|
|
764
|
+
const included = catalog.tables.filter((table) => config.schemas.includes(table.schema) && !optionsOf(table)?.exclude);
|
|
765
|
+
const keyOf = /* @__PURE__ */ new Map();
|
|
766
|
+
const ownerOf = /* @__PURE__ */ new Map();
|
|
767
|
+
for (const table of included) {
|
|
768
|
+
const id = `${table.schema}.${table.name}`;
|
|
769
|
+
const key = tableKey(table, config.casing, config.schemas);
|
|
770
|
+
const other = ownerOf.get(key);
|
|
771
|
+
if (other !== void 0) throw new TypeError(`${other} and ${id} both generate the model key "${key}". Exclude one with \`tables["${id}"].exclude\`, or rename one of the tables.`);
|
|
772
|
+
ownerOf.set(key, id);
|
|
773
|
+
keyOf.set(id, key);
|
|
774
|
+
}
|
|
775
|
+
return {
|
|
776
|
+
config,
|
|
777
|
+
catalog,
|
|
778
|
+
introspection,
|
|
779
|
+
enumsByName,
|
|
780
|
+
jsonImports,
|
|
781
|
+
unusedJson,
|
|
782
|
+
included,
|
|
783
|
+
keyOf,
|
|
784
|
+
warnings: [],
|
|
785
|
+
notices: [],
|
|
786
|
+
tsType,
|
|
787
|
+
jsonTypeFor,
|
|
788
|
+
optionsOf
|
|
789
|
+
};
|
|
790
|
+
}
|
|
791
|
+
function draftTables(ctx) {
|
|
792
|
+
const { config, included, enumsByName, tsType, jsonTypeFor, optionsOf } = ctx;
|
|
793
|
+
const storagePaths = storagePathsOf(config);
|
|
794
|
+
const numbered = numberedColumnsOf(config);
|
|
795
|
+
const tables = included.map((table) => {
|
|
796
|
+
const casing = optionsOf(table)?.casing ?? config.casing;
|
|
797
|
+
const checks = /* @__PURE__ */ new Map();
|
|
798
|
+
const checkedNotNull = /* @__PURE__ */ new Set();
|
|
799
|
+
for (const check of table.checks) {
|
|
800
|
+
const union = parseCheckUnion(check.definition);
|
|
801
|
+
if (union) checks.set(union.column, union.values);
|
|
802
|
+
for (const column of parseCheckNotNull(check.definition)) checkedNotNull.add(column);
|
|
803
|
+
}
|
|
804
|
+
const beforeInsert = table.triggers.some((trigger) => trigger.timing === "before" && trigger.level === "row" && trigger.events.includes("insert"));
|
|
805
|
+
const insertOptional = new Set(optionsOf(table)?.insertOptional);
|
|
806
|
+
const numberedColumns = numbered.get(`${table.schema}.${table.name}`);
|
|
807
|
+
for (const name of insertOptional) if (!table.columns.some((column) => column.name === name)) throw new TypeError(`tables.${table.name}.insertOptional: "${name}" is not a column of ${table.schema}.${table.name}`);
|
|
808
|
+
const columns = table.columns.map((column) => {
|
|
809
|
+
const values = (column.isEnum ? enumsByName.get(`${column.typeSchema}.${column.udt}`) : void 0) ?? checks.get(column.name);
|
|
810
|
+
const appColumn = table.schema === "public" ? config.appTables[table.name]?.columns?.[column.name] : void 0;
|
|
811
|
+
const sealed = appColumn?.encrypted === true ? APP_COLUMN_UDT[appColumn.type] : void 0;
|
|
812
|
+
const udt = sealed ?? column.udt;
|
|
813
|
+
const format = sealed ?? column.format;
|
|
814
|
+
const json = isJsonUdt(udt);
|
|
815
|
+
const override = json ? jsonTypeFor(table.schema, table.name, column.name) : void 0;
|
|
816
|
+
const storage = storagePaths.lookup(table.schema, table.name, column.name, udt);
|
|
817
|
+
const codec = override || values || storage ? void 0 : codecFor(udt, config);
|
|
818
|
+
const base = override ?? (values ? enumType(values) : storage ? `StoragePath<${JSON.stringify(storage)}>` : codec ? CODEC_TYPE[codec] : void 0);
|
|
819
|
+
const columnType = base === void 0 ? tsType(table.schema, format, sealed === void 0 ? column.typeSchema : "pg_catalog") : column.isArray ? arrayOf(base) : base;
|
|
820
|
+
const readonly = column.generated || column.identity === "always";
|
|
821
|
+
const narrowed = column.nullable && checkedNotNull.has(column.name);
|
|
822
|
+
const nullable = column.nullable && !narrowed;
|
|
823
|
+
const filled = column.hasDefault || insertOptional.has(column.name) || (numberedColumns?.has(column.name) ?? false) || narrowed && beforeInsert;
|
|
824
|
+
const insertable = !readonly && table.insertable && (table.kind !== "view" || column.updatable);
|
|
825
|
+
const updatable = !readonly && table.updatable && column.updatable;
|
|
826
|
+
return {
|
|
827
|
+
...appColumn?.access === "server" || appColumn?.encrypted === true ? { selectable: false } : {},
|
|
828
|
+
app: applyCasing(column.name, casing),
|
|
829
|
+
db: column.name,
|
|
830
|
+
snapshot: column,
|
|
831
|
+
tsType: columnType,
|
|
832
|
+
nullable,
|
|
833
|
+
filled,
|
|
834
|
+
optional: nullable || filled || readonly,
|
|
835
|
+
readonly,
|
|
836
|
+
values,
|
|
837
|
+
json,
|
|
838
|
+
codec,
|
|
839
|
+
storage,
|
|
840
|
+
insertable,
|
|
841
|
+
updatable
|
|
842
|
+
};
|
|
843
|
+
});
|
|
844
|
+
const byApp = /* @__PURE__ */ new Map();
|
|
845
|
+
for (const column of columns) {
|
|
846
|
+
const other = byApp.get(column.app);
|
|
847
|
+
if (other !== void 0) throw new TypeError(`${table.schema}.${table.name}: columns "${other}" and "${column.db}" both become "${column.app}". Rename one, or set \`tables["${table.schema}.${table.name}"].casing: "snake"\`.`);
|
|
848
|
+
byApp.set(column.app, column.db);
|
|
849
|
+
}
|
|
850
|
+
return {
|
|
851
|
+
table,
|
|
852
|
+
casing,
|
|
853
|
+
columns,
|
|
854
|
+
byDb: new Map(columns.map((column) => [column.db, column]))
|
|
855
|
+
};
|
|
856
|
+
});
|
|
857
|
+
storagePaths.assertUsed();
|
|
858
|
+
return tables;
|
|
859
|
+
}
|
|
860
|
+
/** Config entries that match no table or column. */
|
|
861
|
+
function configWarnings(ctx) {
|
|
862
|
+
const { config, catalog, unusedJson } = ctx;
|
|
863
|
+
const schemasOf = /* @__PURE__ */ new Map();
|
|
864
|
+
for (const table of catalog.tables) {
|
|
865
|
+
if (!config.schemas.includes(table.schema)) continue;
|
|
866
|
+
schemasOf.set(table.name, [...schemasOf.get(table.name) ?? [], table.schema]);
|
|
867
|
+
}
|
|
868
|
+
const known = (key) => {
|
|
869
|
+
const dot = key.indexOf(".");
|
|
870
|
+
if (dot === -1) return schemasOf.has(key);
|
|
871
|
+
return schemasOf.get(key.slice(dot + 1))?.includes(key.slice(0, dot)) ?? false;
|
|
872
|
+
};
|
|
873
|
+
return [
|
|
874
|
+
...Object.keys(config.tables).filter((name) => !known(name)).map((name) => `tables["${name}"]: no table by that name in ${config.schemas.join(", ")}, so the entry does nothing.`),
|
|
875
|
+
...Object.keys(config.tables).flatMap((name) => {
|
|
876
|
+
const shared = (schemasOf.get(name) ?? []).filter((schema) => !(`${schema}.${name}` in config.tables)).map((schema) => `${schema}.${name}`);
|
|
877
|
+
return shared.length > 1 ? [`tables["${name}"]: ${shared.join(" and ")} share the name, so the entry applies to each. Key it \`schema.table\` to pick one.`] : [];
|
|
878
|
+
}),
|
|
879
|
+
...[...unusedJson].map((key) => `json["${key}"]: no json or jsonb column by that name, so the type is not used. Keys are \`table.column\` or \`schema.table.column\` with database names.`)
|
|
880
|
+
];
|
|
881
|
+
}
|
|
882
|
+
function toTableModels(ctx, tables, relations) {
|
|
883
|
+
const { config, keyOf, optionsOf } = ctx;
|
|
884
|
+
const flagsConfig = config.extensions;
|
|
885
|
+
const subjectDeletedAt = /* @__PURE__ */ new Map();
|
|
886
|
+
const subjectTenant = /* @__PURE__ */ new Map();
|
|
887
|
+
for (const [type, subject] of Object.entries(config.subjects)) {
|
|
888
|
+
const table = subject.table.includes(".") ? subject.table : `public.${subject.table}`;
|
|
889
|
+
if (typeof subject.tenant === "string") subjectTenant.set(table, subject.tenant);
|
|
890
|
+
if (subject.deletedAt !== void 0) subjectDeletedAt.set(table, {
|
|
891
|
+
db: subject.deletedAt,
|
|
892
|
+
source: `subjects.${type}.deletedAt`
|
|
893
|
+
});
|
|
894
|
+
}
|
|
895
|
+
return tables.map(({ table, casing, columns, byDb }) => {
|
|
896
|
+
const id = `${table.schema}.${table.name}`;
|
|
897
|
+
const renames = optionsOf(table)?.relations ?? {};
|
|
898
|
+
const columnNames = new Set(columns.map((column) => column.app));
|
|
899
|
+
const list = dedupeRelations(relations.get(id) ?? [], columnNames, casing).map((relation) => ({
|
|
900
|
+
...relation,
|
|
901
|
+
name: renames[relation.name] ?? relation.name
|
|
902
|
+
}));
|
|
903
|
+
const has = (db) => byDb.get(db)?.app;
|
|
904
|
+
const flags = {};
|
|
905
|
+
const subjectColumn = subjectDeletedAt.get(id);
|
|
906
|
+
const softDelete = subjectColumn !== void 0 && byDb.has(subjectColumn.db) ? subjectColumn : flagsConfig.softDelete ? {
|
|
907
|
+
db: flagsConfig.softDelete.column,
|
|
908
|
+
source: "blocks.trash.options.deletedAt"
|
|
909
|
+
} : void 0;
|
|
910
|
+
const softDeleteColumn = softDelete && byDb.get(softDelete.db);
|
|
911
|
+
if (softDelete && softDeleteColumn) {
|
|
912
|
+
const udt = softDeleteColumn.snapshot.udt;
|
|
913
|
+
if (softDeleteColumn.snapshot.isArray || !SOFT_DELETE_UDTS.has(udt)) throw new TypeError(`${softDelete.source}: ${id}.${softDelete.db} is ${udt}, but the trash extension writes a timestamp. Use timestamptz or timestamp.`);
|
|
914
|
+
flags.softDelete = softDeleteColumn.app;
|
|
915
|
+
}
|
|
916
|
+
if (flagsConfig.timestamps) {
|
|
917
|
+
const createdAt = has(flagsConfig.timestamps.createdAt);
|
|
918
|
+
const updatedAt = has(flagsConfig.timestamps.updatedAt);
|
|
919
|
+
if (createdAt || updatedAt) flags.timestamps = {
|
|
920
|
+
...createdAt ? { createdAt } : {},
|
|
921
|
+
...updatedAt ? { updatedAt } : {}
|
|
922
|
+
};
|
|
923
|
+
}
|
|
924
|
+
if (flagsConfig.tenant) {
|
|
925
|
+
const mapped = subjectTenant.get(id);
|
|
926
|
+
const column = (mapped === void 0 ? void 0 : has(mapped)) ?? has(flagsConfig.tenant.column);
|
|
927
|
+
if (column) flags.tenant = column;
|
|
928
|
+
}
|
|
929
|
+
if (flagsConfig.actor) {
|
|
930
|
+
const createdBy = has(flagsConfig.actor.createdBy);
|
|
931
|
+
const updatedBy = has(flagsConfig.actor.updatedBy);
|
|
932
|
+
const impersonatedBy = has(flagsConfig.actor.impersonatedBy);
|
|
933
|
+
if (createdBy || updatedBy || impersonatedBy) flags.actor = {
|
|
934
|
+
...createdBy ? { createdBy } : {},
|
|
935
|
+
...updatedBy ? { updatedBy } : {},
|
|
936
|
+
...impersonatedBy ? { impersonatedBy } : {}
|
|
937
|
+
};
|
|
938
|
+
}
|
|
939
|
+
const key = keyOf.get(id) ?? table.name;
|
|
940
|
+
const columnMeta = {};
|
|
941
|
+
for (const column of columns) {
|
|
942
|
+
const meta = {
|
|
943
|
+
db: column.db,
|
|
944
|
+
type: column.snapshot.udt,
|
|
945
|
+
nullable: column.nullable,
|
|
946
|
+
hasDefault: column.filled
|
|
947
|
+
};
|
|
948
|
+
if (column.readonly) meta.generated = true;
|
|
949
|
+
if (column.snapshot.identity) meta.identity = column.snapshot.identity;
|
|
950
|
+
if (!column.readonly && !column.insertable) meta.insertable = false;
|
|
951
|
+
if (!column.readonly && !column.updatable) meta.updatable = false;
|
|
952
|
+
if (column.selectable === false) meta.selectable = false;
|
|
953
|
+
if (column.snapshot.isArray) meta.array = true;
|
|
954
|
+
if (column.json) meta.json = true;
|
|
955
|
+
if (column.values) meta.enum = column.values;
|
|
956
|
+
if (column.codec) meta.codec = column.codec;
|
|
957
|
+
if (column.storage) meta.storage = column.storage;
|
|
958
|
+
if (config.sensitive.includes(`${table.name}.${column.db}`) || config.sensitive.includes(`${table.schema}.${table.name}.${column.db}`)) meta.sensitive = true;
|
|
959
|
+
Object.assign(meta, commentMeta(column.snapshot.comment));
|
|
960
|
+
columnMeta[column.app] = meta;
|
|
961
|
+
}
|
|
962
|
+
const app = (db) => byDb.get(db)?.app ?? db;
|
|
963
|
+
const uniqueKeys = {};
|
|
964
|
+
for (const unique of table.uniques) uniqueKeys[unique.name] = unique.columns.map(app);
|
|
965
|
+
const relationMeta = {};
|
|
966
|
+
for (const relation of list) relationMeta[relation.name] = relation.meta;
|
|
967
|
+
return {
|
|
968
|
+
key,
|
|
969
|
+
snapshot: table,
|
|
970
|
+
casing,
|
|
971
|
+
columns,
|
|
972
|
+
relations: list,
|
|
973
|
+
meta: {
|
|
974
|
+
key,
|
|
975
|
+
name: table.name,
|
|
976
|
+
schema: table.schema,
|
|
977
|
+
kind: table.kind,
|
|
978
|
+
columns: columnMeta,
|
|
979
|
+
primaryKey: table.primaryKey.map(app),
|
|
980
|
+
uniqueKeys,
|
|
981
|
+
relations: relationMeta,
|
|
982
|
+
flags,
|
|
983
|
+
...commentMeta(table.comment)
|
|
984
|
+
}
|
|
985
|
+
};
|
|
986
|
+
});
|
|
987
|
+
}
|
|
988
|
+
function buildEnums(ctx) {
|
|
989
|
+
const { config, catalog } = ctx;
|
|
990
|
+
const includedEnums = catalog.enums.filter((entry) => config.schemas.includes(entry.schema));
|
|
991
|
+
const enumNameCount = /* @__PURE__ */ new Map();
|
|
992
|
+
for (const entry of includedEnums) enumNameCount.set(entry.name, (enumNameCount.get(entry.name) ?? 0) + 1);
|
|
993
|
+
return includedEnums.map((entry) => {
|
|
994
|
+
const key = entry.schema !== "public" && (enumNameCount.get(entry.name) ?? 0) > 1 ? `${entry.schema}_${entry.name}` : entry.name;
|
|
995
|
+
return {
|
|
996
|
+
schema: entry.schema,
|
|
997
|
+
name: entry.name,
|
|
998
|
+
key,
|
|
999
|
+
constant: identifier(`${toCamel(key)}Values`),
|
|
1000
|
+
typeName: identifier(pascal$2(key)),
|
|
1001
|
+
values: entry.values
|
|
1002
|
+
};
|
|
1003
|
+
});
|
|
1004
|
+
}
|
|
1005
|
+
function assembleMeta(config, tableModels, enums, functions) {
|
|
1006
|
+
const tablesMeta = {};
|
|
1007
|
+
for (const table of tableModels) tablesMeta[table.key] = table.meta;
|
|
1008
|
+
const enumsMeta = {};
|
|
1009
|
+
for (const entry of enums) enumsMeta[entry.key] = entry.values;
|
|
1010
|
+
const functionsMeta = {};
|
|
1011
|
+
for (const [key, group] of functionGroups(functions)) {
|
|
1012
|
+
const [first] = group;
|
|
1013
|
+
if (!first) continue;
|
|
1014
|
+
functionsMeta[key] = group.length === 1 ? first.meta : {
|
|
1015
|
+
...first.meta,
|
|
1016
|
+
overloads: group.map(signatureOf)
|
|
1017
|
+
};
|
|
1018
|
+
}
|
|
1019
|
+
const claimOverrides = {};
|
|
1020
|
+
for (const key of Object.keys(DEFAULT_CLAIMS)) if (config.claims[key] !== DEFAULT_CLAIMS[key]) claimOverrides[key] = config.claims[key];
|
|
1021
|
+
const tenantClaim = config.claims.tenant === DEFAULT_CLAIMS.tenant ? void 0 : tenantClaimPaths(config.claims.tenant);
|
|
1022
|
+
return {
|
|
1023
|
+
version: 1,
|
|
1024
|
+
casing: config.casing,
|
|
1025
|
+
tables: tablesMeta,
|
|
1026
|
+
enums: enumsMeta,
|
|
1027
|
+
functions: functionsMeta,
|
|
1028
|
+
...Object.keys(config.buckets).length > 0 ? { buckets: Object.fromEntries(Object.entries(config.buckets).map(([name, bucket]) => [name, {
|
|
1029
|
+
id: bucket.id ?? name.replaceAll(/[A-Z]/g, (char) => `-${char.toLowerCase()}`),
|
|
1030
|
+
public: bucket.public ?? false,
|
|
1031
|
+
path: bucket.path,
|
|
1032
|
+
...bucket.policy ? { policy: typeof bucket.policy === "string" ? bucket.policy : resolveProviderSql(`buckets.${name}`, bucket.policy, config.authorization?.functions) } : {},
|
|
1033
|
+
...bucket.policy === "tenant" && tenantClaim ? { tenant: { claim: tenantClaim } } : {},
|
|
1034
|
+
...bucket.fileSizeLimit ? { fileSizeLimit: bucket.fileSizeLimit } : {},
|
|
1035
|
+
...bucket.allowedMimeTypes ? { allowedMimeTypes: bucket.allowedMimeTypes } : {},
|
|
1036
|
+
...bucket.versioning ? { versioning: true } : {},
|
|
1037
|
+
...bucket.lifecycle ? { lifecycle: bucket.lifecycle } : {}
|
|
1038
|
+
}])) } : {},
|
|
1039
|
+
...Object.keys(config.topics).length > 0 ? { topics: config.topics } : {},
|
|
1040
|
+
...config.realtime.tables.length > 0 ? { realtime: realtimeMeta(config.realtime.tables, config.realtime.users, tableModels) } : {},
|
|
1041
|
+
...Object.keys(claimOverrides).length > 0 ? { claims: claimOverrides } : {}
|
|
1042
|
+
};
|
|
1043
|
+
}
|
|
1044
|
+
/** Builds the codegen model from a snapshot and config. */
|
|
1045
|
+
function buildModel(snapshot, config) {
|
|
1046
|
+
const ctx = prepareCatalog(snapshot, config);
|
|
1047
|
+
const tables = draftTables(ctx);
|
|
1048
|
+
ctx.warnings.push(...configWarnings(ctx));
|
|
1049
|
+
const tableModels = toTableModels(ctx, tables, buildRelations(ctx, tables));
|
|
1050
|
+
const enums = buildEnums(ctx);
|
|
1051
|
+
const functions = buildFunctions(ctx, tableModels);
|
|
1052
|
+
return {
|
|
1053
|
+
tables: tableModels,
|
|
1054
|
+
enums,
|
|
1055
|
+
functions,
|
|
1056
|
+
jsonImports: [...ctx.jsonImports.values()],
|
|
1057
|
+
meta: assembleMeta(config, tableModels, enums, functions),
|
|
1058
|
+
config,
|
|
1059
|
+
catalog: ctx.catalog,
|
|
1060
|
+
introspection: ctx.introspection,
|
|
1061
|
+
warnings: ctx.warnings,
|
|
1062
|
+
notices: ctx.notices
|
|
1063
|
+
};
|
|
1064
|
+
}
|
|
1065
|
+
function deepFreeze(value) {
|
|
1066
|
+
if (typeof value === "object" && value !== null && !Object.isFrozen(value)) {
|
|
1067
|
+
Object.freeze(value);
|
|
1068
|
+
for (const entry of Object.values(value)) deepFreeze(entry);
|
|
1069
|
+
}
|
|
1070
|
+
return value;
|
|
1071
|
+
}
|
|
1072
|
+
/**
|
|
1073
|
+
* The public, frozen view of the model that generators receive, with the
|
|
1074
|
+
* installed blocks `generatorBlocks` lists.
|
|
1075
|
+
*/
|
|
1076
|
+
function generatorModel(model, blocks = []) {
|
|
1077
|
+
return deepFreeze({
|
|
1078
|
+
tables: model.tables.map((table) => ({
|
|
1079
|
+
key: table.key,
|
|
1080
|
+
schema: table.snapshot.schema,
|
|
1081
|
+
name: table.snapshot.name,
|
|
1082
|
+
casing: table.casing,
|
|
1083
|
+
columns: table.columns.map((column) => ({
|
|
1084
|
+
app: column.app,
|
|
1085
|
+
db: column.db,
|
|
1086
|
+
tsType: column.tsType,
|
|
1087
|
+
nullable: column.nullable,
|
|
1088
|
+
optional: column.optional,
|
|
1089
|
+
readonly: column.readonly,
|
|
1090
|
+
values: column.values === void 0 ? void 0 : [...column.values],
|
|
1091
|
+
json: column.json
|
|
1092
|
+
}))
|
|
1093
|
+
})),
|
|
1094
|
+
enums: model.enums.map((entry) => ({
|
|
1095
|
+
schema: entry.schema,
|
|
1096
|
+
name: entry.name,
|
|
1097
|
+
values: [...entry.values]
|
|
1098
|
+
})),
|
|
1099
|
+
functions: model.functions.map((fn) => ({
|
|
1100
|
+
key: fn.key,
|
|
1101
|
+
schema: fn.meta.schema,
|
|
1102
|
+
args: fn.args.map((arg) => ({
|
|
1103
|
+
name: arg.name,
|
|
1104
|
+
tsType: arg.tsType,
|
|
1105
|
+
optional: arg.optional,
|
|
1106
|
+
values: arg.values === void 0 ? void 0 : [...arg.values]
|
|
1107
|
+
})),
|
|
1108
|
+
returns: fn.returns,
|
|
1109
|
+
returnsSet: fn.meta.returnsSet,
|
|
1110
|
+
volatility: fn.meta.volatility
|
|
1111
|
+
})),
|
|
1112
|
+
blocks
|
|
1113
|
+
});
|
|
1114
|
+
}
|
|
1115
|
+
/**
|
|
1116
|
+
* Makes relation names unique per table and distinct from column names: two FKs
|
|
1117
|
+
* to the same table become `customersByPrimaryContact`-style names. When those
|
|
1118
|
+
* still collide, the names use every column of the key
|
|
1119
|
+
* (`locationsByCustomerOrganization`), then the constraint name, and only then
|
|
1120
|
+
* a trailing `_`.
|
|
1121
|
+
*/
|
|
1122
|
+
function dedupeRelations(list, columns, casing) {
|
|
1123
|
+
const suffixed = (relation, suffix) => applyCasing(`${relation.base}_by_${suffix}`, casing);
|
|
1124
|
+
const keyColumns = (relation, all) => (all ? relation.fkColumns : namingColumns(relation.fkColumns, relation.refColumns)).map((column) => column.replace(/_?[iI]d$/, "")).join("_");
|
|
1125
|
+
const repeated = (names) => {
|
|
1126
|
+
const seen = /* @__PURE__ */ new Set();
|
|
1127
|
+
const twice = /* @__PURE__ */ new Set();
|
|
1128
|
+
for (const name of names) (seen.has(name) ? twice : seen).add(name);
|
|
1129
|
+
return twice;
|
|
1130
|
+
};
|
|
1131
|
+
const plain = repeated(list.map((relation) => relation.name));
|
|
1132
|
+
const names = [(relation) => suffixed(relation, keyColumns(relation, true)), (relation) => suffixed(relation, relation.meta.foreignKey)].reduce((current, step) => {
|
|
1133
|
+
const clash = repeated(current);
|
|
1134
|
+
return list.map((relation, index) => {
|
|
1135
|
+
const name = current[index] ?? relation.name;
|
|
1136
|
+
return clash.has(name) || columns.has(name) ? step(relation) : name;
|
|
1137
|
+
});
|
|
1138
|
+
}, list.map((relation) => plain.has(relation.name) || columns.has(relation.name) ? suffixed(relation, keyColumns(relation, false)) : relation.name));
|
|
1139
|
+
const used = /* @__PURE__ */ new Set();
|
|
1140
|
+
return list.map((relation, index) => {
|
|
1141
|
+
let name = names[index] ?? relation.name;
|
|
1142
|
+
while (used.has(name) || columns.has(name)) name = `${name}_`;
|
|
1143
|
+
used.add(name);
|
|
1144
|
+
return {
|
|
1145
|
+
...relation,
|
|
1146
|
+
name
|
|
1147
|
+
};
|
|
1148
|
+
});
|
|
1149
|
+
}
|
|
1150
|
+
function realtimeMeta(names, users, tables) {
|
|
1151
|
+
const out = {};
|
|
1152
|
+
for (const name of names) {
|
|
1153
|
+
const table = tables.find((candidate) => candidate.meta.name === name || `${candidate.meta.schema}.${candidate.meta.name}` === name);
|
|
1154
|
+
if (!table) throw new CliError("config_invalid", `database.realtime.tables: unknown table "${name}". Check the name and \`schemas\`.`);
|
|
1155
|
+
const owner = users[name];
|
|
1156
|
+
if (owner !== void 0) {
|
|
1157
|
+
const user = Object.entries(table.meta.columns).find(([, column]) => column.db === owner)?.[0];
|
|
1158
|
+
if (user === void 0) throw new CliError("config_invalid", `database.realtime.users: "${name}" has no column "${owner}".`);
|
|
1159
|
+
out[table.key] = { user };
|
|
1160
|
+
continue;
|
|
1161
|
+
}
|
|
1162
|
+
const tenant = table.meta.flags.tenant;
|
|
1163
|
+
out[table.key] = tenant ? { tenant } : {};
|
|
1164
|
+
}
|
|
1165
|
+
return out;
|
|
1166
|
+
}
|
|
1167
|
+
//#endregion
|
|
1168
|
+
//#region src/cli/gen/emit.ts
|
|
1169
|
+
const GENERATED_HEADER = "// @generated by better-supabase gen. Do not edit; run `better-supabase gen` instead.";
|
|
1170
|
+
function rowEntries(columns, name) {
|
|
1171
|
+
return columns.map((column) => `${prop(column[name])}${column.selectable === false ? "?" : ""}: ${nullable(column.tsType, column.nullable)};`);
|
|
1172
|
+
}
|
|
1173
|
+
function insertEntries(columns, name) {
|
|
1174
|
+
return columns.map((column) => {
|
|
1175
|
+
if (!column.insertable) return `${prop(column[name])}?: never;`;
|
|
1176
|
+
const optional = column.optional ? "?" : "";
|
|
1177
|
+
return `${prop(column[name])}${optional}: ${nullable(column.tsType, column.nullable)};`;
|
|
1178
|
+
});
|
|
1179
|
+
}
|
|
1180
|
+
function updateEntries(columns, name) {
|
|
1181
|
+
return columns.map((column) => {
|
|
1182
|
+
if (!column.updatable) return `${prop(column[name])}?: never;`;
|
|
1183
|
+
return `${prop(column[name])}?: ${nullable(column.tsType, column.nullable)};`;
|
|
1184
|
+
});
|
|
1185
|
+
}
|
|
1186
|
+
/**
|
|
1187
|
+
* Postgres passes `null` to any argument, so every argument accepts it. This
|
|
1188
|
+
* only widens what a caller may pass; no result type changes with it. An
|
|
1189
|
+
* optional argument also accepts `undefined`, which `rpc()` leaves out, so
|
|
1190
|
+
* `exactOptionalPropertyTypes` apps can pass a maybe-missing value.
|
|
1191
|
+
*/
|
|
1192
|
+
function argEntries(fn) {
|
|
1193
|
+
return fn.args.map((arg) => `${prop(arg.name)}${arg.optional ? "?" : ""}: ${nullable(arg.tsType, true)}${arg.optional ? " | undefined" : ""};`);
|
|
1194
|
+
}
|
|
1195
|
+
function enrichedDatabase(model) {
|
|
1196
|
+
const schemas = model.config.schemas.flatMap((schema) => {
|
|
1197
|
+
const tables = model.tables.filter((t) => t.snapshot.schema === schema).flatMap((table) => {
|
|
1198
|
+
const overrides = table.columns.filter((column) => column.values !== void 0 && !column.snapshot.isEnum || column.json && column.tsType !== "Json" || column.storage !== void 0).map((column) => `${prop(column.db)}: ${column.tsType};`);
|
|
1199
|
+
return overrides.length > 0 ? block(prop(table.snapshot.name), overrides) : [];
|
|
1200
|
+
});
|
|
1201
|
+
return tables.length > 0 ? block(prop(schema), tables) : [];
|
|
1202
|
+
});
|
|
1203
|
+
if (schemas.length === 0) return ["export type Database = SupabaseDatabase;"];
|
|
1204
|
+
return [
|
|
1205
|
+
"export type Database = EnrichDatabase<",
|
|
1206
|
+
" SupabaseDatabase,",
|
|
1207
|
+
" {",
|
|
1208
|
+
...indent(schemas, 2),
|
|
1209
|
+
" }",
|
|
1210
|
+
">;"
|
|
1211
|
+
];
|
|
1212
|
+
}
|
|
1213
|
+
function modelsType(model) {
|
|
1214
|
+
return [
|
|
1215
|
+
"export type Models = {",
|
|
1216
|
+
...indent(model.tables.flatMap((table) => {
|
|
1217
|
+
const relations = table.relations.map((relation) => `${prop(relation.name)}: { table: ${q(relation.meta.table)}; kind: ${q(relation.meta.kind)}; nullable: ${String(relation.meta.nullable)} };`);
|
|
1218
|
+
const pk = table.meta.primaryKey;
|
|
1219
|
+
const uniques = Object.entries(table.meta.uniqueKeys).map(([name, columns]) => `${prop(name)}: readonly [${columns.map(q).join(", ")}];`);
|
|
1220
|
+
const flags = [];
|
|
1221
|
+
const tableFlags = table.meta.flags;
|
|
1222
|
+
if (tableFlags.softDelete) flags.push(`softDelete: ${q(tableFlags.softDelete)};`);
|
|
1223
|
+
if (tableFlags.timestamps) flags.push("timestamps: true;");
|
|
1224
|
+
if (tableFlags.tenant) flags.push(`tenant: ${q(tableFlags.tenant)};`);
|
|
1225
|
+
if (tableFlags.actor) flags.push("actor: true;");
|
|
1226
|
+
const none = "Record<never, never>";
|
|
1227
|
+
const union = (names) => names.length === 0 ? "never" : names.map(q).join(" | ");
|
|
1228
|
+
return block(prop(table.key), [
|
|
1229
|
+
...block("Row", rowEntries(table.columns, "app"), none),
|
|
1230
|
+
...table.snapshot.insertable ? block("Insert", insertEntries(table.columns, "app"), none) : ["Insert: never;"],
|
|
1231
|
+
...table.snapshot.updatable ? block("Update", updateEntries(table.columns, "app"), none) : ["Update: never;"],
|
|
1232
|
+
...block("Relations", relations, none),
|
|
1233
|
+
`PrimaryKey: ${union(pk)};`,
|
|
1234
|
+
...block("UniqueKeys", uniques, none),
|
|
1235
|
+
`Checks: ${union(table.snapshot.checks.map((check) => check.name))};`,
|
|
1236
|
+
`ForeignKeys: ${union(table.snapshot.foreignKeys.map((fk) => fk.name))};`,
|
|
1237
|
+
...block("Flags", flags, none)
|
|
1238
|
+
]);
|
|
1239
|
+
}), 1),
|
|
1240
|
+
"};"
|
|
1241
|
+
];
|
|
1242
|
+
}
|
|
1243
|
+
function functionsType(model) {
|
|
1244
|
+
if (model.functions.length === 0) return ["export type Functions = Record<never, never>;"];
|
|
1245
|
+
return [
|
|
1246
|
+
"export type Functions = {",
|
|
1247
|
+
...indent([...functionGroups(model.functions)].flatMap(([key, group]) => {
|
|
1248
|
+
const [first] = group;
|
|
1249
|
+
if (group.length === 1 && first) return block(prop(key), [...block("Args", argEntries(first), "Record<never, never>"), `Returns: ${first.returns};`]);
|
|
1250
|
+
return [`${prop(key)}:`, ...indent(group.flatMap((fn, index) => {
|
|
1251
|
+
const lines = [...block("Args", argEntries(fn), "Record<PropertyKey, never>"), `Returns: ${fn.returns};`];
|
|
1252
|
+
const end = index === group.length - 1 ? "};" : "}";
|
|
1253
|
+
return [
|
|
1254
|
+
"| {",
|
|
1255
|
+
...indent(lines, 1),
|
|
1256
|
+
end
|
|
1257
|
+
];
|
|
1258
|
+
}), 1)];
|
|
1259
|
+
}), 1),
|
|
1260
|
+
"};"
|
|
1261
|
+
];
|
|
1262
|
+
}
|
|
1263
|
+
/**
|
|
1264
|
+
* The metadata module next to `generated.ts`: `generated.meta.js` and its
|
|
1265
|
+
* `.d.ts`.
|
|
1266
|
+
*/
|
|
1267
|
+
function metaPaths(output) {
|
|
1268
|
+
const base = output.replace(/\.[cm]?[jt]sx?$/, "");
|
|
1269
|
+
return {
|
|
1270
|
+
js: `${base}.meta.js`,
|
|
1271
|
+
dts: `${base}.meta.d.ts`
|
|
1272
|
+
};
|
|
1273
|
+
}
|
|
1274
|
+
/**
|
|
1275
|
+
* JSON with one line per table, function and other named entry, so the module
|
|
1276
|
+
* stays small to load and a schema change still diffs per entry.
|
|
1277
|
+
*/
|
|
1278
|
+
function compactJson(meta) {
|
|
1279
|
+
return `{\n${Object.entries(meta).map(([key, value]) => {
|
|
1280
|
+
const name = JSON.stringify(key);
|
|
1281
|
+
if (typeof value !== "object" || value === null || Array.isArray(value)) return ` ${name}: ${JSON.stringify(value)}`;
|
|
1282
|
+
const inner = Object.entries(value).map(([entry, item]) => ` ${JSON.stringify(entry)}: ${JSON.stringify(item)}`);
|
|
1283
|
+
return inner.length === 0 ? ` ${name}: {}` : ` ${name}: {\n${inner.join(",\n")}\n }`;
|
|
1284
|
+
}).join(",\n")}\n}`;
|
|
1285
|
+
}
|
|
1286
|
+
/**
|
|
1287
|
+
* The schema metadata as plain JavaScript plus a one-line declaration, so
|
|
1288
|
+
* TypeScript reads `SchemaMeta` instead of checking thousands of lines of
|
|
1289
|
+
* object literal in every program that imports the generated module.
|
|
1290
|
+
*/
|
|
1291
|
+
function emitMeta(model, options = {}) {
|
|
1292
|
+
const runtime = options.runtimeImport ?? "better-supabase";
|
|
1293
|
+
return {
|
|
1294
|
+
js: [
|
|
1295
|
+
GENERATED_HEADER,
|
|
1296
|
+
`// @ts-self-types="${options.types ?? "./generated.meta.d.ts"}"`,
|
|
1297
|
+
"/* oxlint-disable */",
|
|
1298
|
+
"/* eslint-disable */",
|
|
1299
|
+
"",
|
|
1300
|
+
`export default ${compactJson({ ...model.meta })};`,
|
|
1301
|
+
""
|
|
1302
|
+
].join("\n"),
|
|
1303
|
+
dts: [
|
|
1304
|
+
GENERATED_HEADER,
|
|
1305
|
+
"/* oxlint-disable */",
|
|
1306
|
+
"/* eslint-disable */",
|
|
1307
|
+
"",
|
|
1308
|
+
`import type { SchemaMeta } from ${q(runtime)};`,
|
|
1309
|
+
"",
|
|
1310
|
+
"declare const meta: SchemaMeta;",
|
|
1311
|
+
"export default meta;",
|
|
1312
|
+
""
|
|
1313
|
+
].join("\n")
|
|
1314
|
+
};
|
|
1315
|
+
}
|
|
1316
|
+
/** Names the generated module declares or imports itself. */
|
|
1317
|
+
const RESERVED_EXPORTS = [
|
|
1318
|
+
"defineSchema",
|
|
1319
|
+
"Schema",
|
|
1320
|
+
"SchemaMeta",
|
|
1321
|
+
"EnrichDatabase",
|
|
1322
|
+
"MutableWhere",
|
|
1323
|
+
"OrderByArg",
|
|
1324
|
+
"OrderByInput",
|
|
1325
|
+
"StoragePath",
|
|
1326
|
+
"SupabaseDatabase",
|
|
1327
|
+
"meta",
|
|
1328
|
+
"Json",
|
|
1329
|
+
"Database",
|
|
1330
|
+
"Models",
|
|
1331
|
+
"Functions",
|
|
1332
|
+
"TableName",
|
|
1333
|
+
"UniqueConstraint",
|
|
1334
|
+
"CheckConstraint",
|
|
1335
|
+
"ForeignKeyConstraint",
|
|
1336
|
+
"RowOf",
|
|
1337
|
+
"InsertOf",
|
|
1338
|
+
"UpdateOf",
|
|
1339
|
+
"WhereOf",
|
|
1340
|
+
"OrderByOf",
|
|
1341
|
+
"OrderTermOf",
|
|
1342
|
+
"WritableColumnOf",
|
|
1343
|
+
"GeneratedColumnOf",
|
|
1344
|
+
"buckets",
|
|
1345
|
+
"topics",
|
|
1346
|
+
"subjectTypes",
|
|
1347
|
+
"SubjectType",
|
|
1348
|
+
"RecordRef",
|
|
1349
|
+
"schema",
|
|
1350
|
+
"extensions",
|
|
1351
|
+
"Extensions",
|
|
1352
|
+
"ExtensionsOf",
|
|
1353
|
+
"validation",
|
|
1354
|
+
"validators"
|
|
1355
|
+
];
|
|
1356
|
+
function valueLists(model) {
|
|
1357
|
+
const lists = model.enums.map((entry) => ({
|
|
1358
|
+
constant: entry.constant,
|
|
1359
|
+
typeName: entry.typeName,
|
|
1360
|
+
values: entry.values,
|
|
1361
|
+
source: `enum ${entry.schema}.${entry.name}`
|
|
1362
|
+
}));
|
|
1363
|
+
for (const table of model.tables) for (const column of table.columns) if (column.values && !column.snapshot.isEnum) lists.push({
|
|
1364
|
+
constant: identifier(`${table.key}${pascal$2(column.app)}Values`.replace(/^[A-Z]/, (c) => c.toLowerCase())),
|
|
1365
|
+
typeName: identifier(`${pascal$2(table.key)}${pascal$2(column.app)}`),
|
|
1366
|
+
values: column.values,
|
|
1367
|
+
source: `the CHECK on ${table.snapshot.schema}.${table.snapshot.name}.${column.db}`
|
|
1368
|
+
});
|
|
1369
|
+
return lists;
|
|
1370
|
+
}
|
|
1371
|
+
/** The repository extension calls the schema carries, in install order. */
|
|
1372
|
+
function extensionCalls(options) {
|
|
1373
|
+
return [...(options.extensions ?? []).map((extension) => ({
|
|
1374
|
+
fn: extension.export,
|
|
1375
|
+
call: `${extension.export}(${extension.args})`
|
|
1376
|
+
})), ...options.validatorsImport === void 0 ? [] : [{
|
|
1377
|
+
fn: "validation",
|
|
1378
|
+
call: "validation({ schemas: validators })"
|
|
1379
|
+
}]];
|
|
1380
|
+
}
|
|
1381
|
+
function runtimeImports(options, runtime) {
|
|
1382
|
+
const { validatorsImport } = options;
|
|
1383
|
+
return [...(options.extensions ?? []).map((extension) => `import { ${extension.export} } from ${q(runtimeSubpath(runtime, extension.subpath))};`), ...validatorsImport === void 0 ? [] : [`import { validators } from ${q(validatorsImport)};`]];
|
|
1384
|
+
}
|
|
1385
|
+
/**
|
|
1386
|
+
* `database.types.ts` inside a type-only namespace, so its `Json` and
|
|
1387
|
+
* `Database` don't clash with the module's own. Its `Constants` value is left
|
|
1388
|
+
* out: a namespace holding a value is not erasable syntax.
|
|
1389
|
+
*/
|
|
1390
|
+
function inlineDatabaseTypes(text) {
|
|
1391
|
+
const constants = text.search(/^export const Constants\b/m);
|
|
1392
|
+
return [
|
|
1393
|
+
"declare namespace SupabaseTypes {",
|
|
1394
|
+
...indent([(constants === -1 ? text : text.slice(0, constants)).trimEnd()], 1),
|
|
1395
|
+
"}",
|
|
1396
|
+
"type SupabaseDatabase = SupabaseTypes.Database;"
|
|
1397
|
+
];
|
|
1398
|
+
}
|
|
1399
|
+
/**
|
|
1400
|
+
* The runtime half of the generated module, for the content mapper: the values
|
|
1401
|
+
* (value lists, buckets, topics, extensions, subject types and `schema`), with
|
|
1402
|
+
* every type re-exported from the virtual module at `typesImport`, which holds
|
|
1403
|
+
* the full module.
|
|
1404
|
+
*/
|
|
1405
|
+
function emitRuntime(model, options) {
|
|
1406
|
+
const runtime = options.runtimeImport ?? "better-supabase";
|
|
1407
|
+
const calls = extensionCalls(options);
|
|
1408
|
+
const subjects = Object.keys(model.config.subjects);
|
|
1409
|
+
const lines = [
|
|
1410
|
+
GENERATED_HEADER,
|
|
1411
|
+
"/* oxlint-disable */",
|
|
1412
|
+
"/* eslint-disable */",
|
|
1413
|
+
"",
|
|
1414
|
+
`import { defineSchema${options.validatorsImport === void 0 ? "" : ", validation"} } from ${q(runtime)};`,
|
|
1415
|
+
...runtimeImports(options, runtime),
|
|
1416
|
+
`import type { schema as typedSchema } from ${q(options.typesImport)};`,
|
|
1417
|
+
`import meta from ${q(options.metaImport ?? "./generated.meta.js")};`,
|
|
1418
|
+
"",
|
|
1419
|
+
`export type * from ${q(options.typesImport)};`,
|
|
1420
|
+
"",
|
|
1421
|
+
...valueLists(model).map((list) => `export const ${list.constant} = [${list.values.map(q).join(", ")}] as const;`)
|
|
1422
|
+
];
|
|
1423
|
+
if (model.meta.buckets) lines.push(`export const buckets = ${JSON.stringify(model.meta.buckets, null, 2)} as const;`);
|
|
1424
|
+
if (model.meta.topics) lines.push(`export const topics = ${JSON.stringify(model.meta.topics, null, 2)} as const;`);
|
|
1425
|
+
if (subjects.length > 0) lines.push(`export const subjectTypes = [${subjects.map(q).join(", ")}] as const;`);
|
|
1426
|
+
lines.push("", `export const schema: typeof typedSchema = defineSchema(meta${calls.length > 0 ? `, [${calls.map(({ call }) => call).join(", ")}]` : ""});`, "");
|
|
1427
|
+
return lines.join("\n");
|
|
1428
|
+
}
|
|
1429
|
+
/** Renders the generated module. */
|
|
1430
|
+
function emitModule(model, options) {
|
|
1431
|
+
const runtime = options.runtimeImport ?? "better-supabase";
|
|
1432
|
+
const extensions = options.extensions ?? [];
|
|
1433
|
+
const { validatorsImport } = options;
|
|
1434
|
+
const extended = extensions.length > 0 || validatorsImport !== void 0;
|
|
1435
|
+
const declaresMeta = options.inlineMeta === true || options.declareMeta === true;
|
|
1436
|
+
const lines = [
|
|
1437
|
+
GENERATED_HEADER,
|
|
1438
|
+
"/* oxlint-disable */",
|
|
1439
|
+
"/* eslint-disable */",
|
|
1440
|
+
"",
|
|
1441
|
+
`import { defineSchema, ${validatorsImport === void 0 ? "" : "validation, "}${extended ? "type ExtensionsOf, " : ""}type Schema${declaresMeta ? ", type SchemaMeta" : ""} } from ${q(runtime)};`,
|
|
1442
|
+
...runtimeImports(options, runtime)
|
|
1443
|
+
];
|
|
1444
|
+
const storagePaths = model.tables.some((table) => table.columns.some((column) => column.storage !== void 0));
|
|
1445
|
+
lines.push(`import type { EnrichDatabase, GeneratedColumns, MutableWhere, OrderByArg, OrderByInput${storagePaths ? ", StoragePath" : ""}, WritableColumns } from ${q(runtime)};`);
|
|
1446
|
+
if (options.databaseTypes === void 0) lines.push(`import type { Database as SupabaseDatabase } from ${q(options.databaseTypesImport ?? "./database.types.ts")};`);
|
|
1447
|
+
const byFile = /* @__PURE__ */ new Map();
|
|
1448
|
+
for (const entry of model.jsonImports) {
|
|
1449
|
+
const list = byFile.get(entry.from) ?? [];
|
|
1450
|
+
list.push(entry.name);
|
|
1451
|
+
byFile.set(entry.from, list);
|
|
1452
|
+
}
|
|
1453
|
+
for (const [from, names] of [...byFile.entries()].toSorted(([a], [b]) => byCodePoint(a, b))) lines.push(`import type { ${names.toSorted().join(", ")} } from ${q(options.importPathFor(from))};`);
|
|
1454
|
+
lines.push(options.inlineMeta ? `\nconst meta: SchemaMeta = ${compactJson({ ...model.meta })};` : options.declareMeta ? "\ndeclare const meta: SchemaMeta;" : `import meta from ${q(options.metaImport ?? "./generated.meta.js")};`, ...options.databaseTypes === void 0 ? [] : ["", ...inlineDatabaseTypes(options.databaseTypes)], "", "export type Json = string | number | boolean | null | { [key: string]: Json | undefined } | Json[];", "", ...enrichedDatabase(model), "");
|
|
1455
|
+
const exported = new Map([
|
|
1456
|
+
...RESERVED_EXPORTS,
|
|
1457
|
+
...extensions.map((extension) => extension.export),
|
|
1458
|
+
...model.jsonImports.map((entry) => entry.name)
|
|
1459
|
+
].map((name) => [name, "the generated module"]));
|
|
1460
|
+
const claim = (name, source) => {
|
|
1461
|
+
const other = exported.get(name);
|
|
1462
|
+
if (other !== void 0) throw new TypeError(`${source} and ${other} both export "${name}" from the generated module. Rename one of them in the database.`);
|
|
1463
|
+
exported.set(name, source);
|
|
1464
|
+
return name;
|
|
1465
|
+
};
|
|
1466
|
+
for (const list of valueLists(model)) lines.push(`export const ${claim(list.constant, list.source)} = [${list.values.map(q).join(", ")}] as const;`, `export type ${claim(list.typeName, list.source)} = (typeof ${list.constant})[number];`);
|
|
1467
|
+
if (model.enums.length > 0) lines.push("");
|
|
1468
|
+
lines.push(...modelsType(model), "", ...functionsType(model), "", "export type TableName = keyof Models;", "/** Constraint names for `isConflict`, `isCheck` and `isForeignKey`. */", "export type UniqueConstraint = { [T in TableName]: Extract<keyof Models[T]['UniqueKeys'], string> }[TableName];", "export type CheckConstraint = Models[TableName]['Checks'];", "export type ForeignKeyConstraint = Models[TableName]['ForeignKeys'];", "export type RowOf<T extends TableName> = Models[T]['Row'];", "export type InsertOf<T extends TableName> = Models[T]['Insert'];", "export type UpdateOf<T extends TableName> = Models[T]['Update'];", "/** A `where` for `T` you can assign to one key at a time. */", "export type WhereOf<T extends TableName> = MutableWhere<Models, T>;", "/** An `orderBy` for `T`: one sort or a list, by column or to-one relation. */", "export type OrderByOf<T extends TableName> = OrderByArg<Models, T>;", "/** One sort term of `T`'s `orderBy`, by column or to-one relation. */", "export type OrderTermOf<T extends TableName> = OrderByInput<Models, T>;", "/** Columns of `T` that `Insert` and `Update` accept. */", "export type WritableColumnOf<T extends TableName> = WritableColumns<Models, T>;", "/** Columns of `T` the database fills (generated columns): in `Row`, never writable. */", "export type GeneratedColumnOf<T extends TableName> = GeneratedColumns<Models, T>;", "");
|
|
1469
|
+
if (model.meta.buckets) lines.push("/** Bucket configs for `defineBucket` from `better-supabase/storage`. */", `export const buckets = ${JSON.stringify(model.meta.buckets, null, 2)} as const;`, "");
|
|
1470
|
+
if (model.meta.topics) lines.push("/** Topic templates for `defineTopic` from `better-supabase/realtime`. */", `export const topics = ${JSON.stringify(model.meta.topics, null, 2)} as const;`, "");
|
|
1471
|
+
const subjects = Object.keys(model.config.subjects);
|
|
1472
|
+
const calls = extensionCalls(options);
|
|
1473
|
+
if (extended) lines.push("/** The installed blocks' repository extensions; `defineSupabase` installs them. */", `type Extensions = readonly [${calls.map(({ fn }) => `ReturnType<typeof ${fn}>`).join(", ")}];`, `const extensions: Extensions = [${calls.map(({ call }) => call).join(", ")}];`, "");
|
|
1474
|
+
const subjectType = subjects.length > 0 ? "SubjectType" : "string";
|
|
1475
|
+
const schemaLine = extended ? `export const schema: Schema<Models, Database, Functions, ${subjectType}, ExtensionsOf<Extensions>> = defineSchema(meta, extensions);` : `export const schema: Schema<Models, Database, Functions${subjects.length > 0 ? ", SubjectType" : ""}> = defineSchema(meta);`;
|
|
1476
|
+
if (subjects.length > 0) lines.push("/** The app's subject types, from `config.records`. */", `export const subjectTypes = [${subjects.map(q).join(", ")}] as const;`, "export type SubjectType = (typeof subjectTypes)[number];", "/** One subject: its type and its id as text. */", "export type RecordRef<T extends SubjectType = SubjectType> = { readonly type: T; readonly id: string };", "");
|
|
1477
|
+
lines.push(schemaLine, "");
|
|
1478
|
+
return lines.join("\n");
|
|
1479
|
+
}
|
|
1480
|
+
//#endregion
|
|
1481
|
+
//#region src/cli/gen/blocks.ts
|
|
1482
|
+
/** `blocks.generated.ts`, next to the main generated module. */
|
|
1483
|
+
function blockConfigPath(config) {
|
|
1484
|
+
return posix.join(posix.dirname(config.output), "blocks.generated.ts");
|
|
1485
|
+
}
|
|
1486
|
+
function hasSchema(module) {
|
|
1487
|
+
return module in BLOCK_OPTION_SCHEMAS;
|
|
1488
|
+
}
|
|
1489
|
+
/**
|
|
1490
|
+
* How the tenant rename, the modules' renamed entities and their
|
|
1491
|
+
* `blocks.<module>.functions` rename the block's functions and payload keys, or
|
|
1492
|
+
* undefined when nothing does. `blocks.permissions.functions` is the custom
|
|
1493
|
+
* model's templates, not renames.
|
|
1494
|
+
*/
|
|
1495
|
+
function namingOf(config, modules, instanceFunctionNames = {}) {
|
|
1496
|
+
const functions = Object.fromEntries([...modules.flatMap((module) => module === "permissions" ? [] : Object.entries(resolveBlock(config.blocks[module]).functions)), ...Object.entries(instanceFunctionNames)]);
|
|
1497
|
+
const entities = modules.flatMap((module) => blockEntityRenames(module, config.blocks));
|
|
1498
|
+
const tenant = tenantNameOf(config.blocks);
|
|
1499
|
+
const renames = Object.keys(functions).length > 0;
|
|
1500
|
+
if (tenant === void 0 && !renames && entities.length === 0) return;
|
|
1501
|
+
return {
|
|
1502
|
+
...tenant === void 0 ? {} : { tenant },
|
|
1503
|
+
...renames ? { functions } : {},
|
|
1504
|
+
...entities.length === 0 ? {} : { entities }
|
|
1505
|
+
};
|
|
1506
|
+
}
|
|
1507
|
+
/**
|
|
1508
|
+
* The generated config of every installed block: its schema, its API schema,
|
|
1509
|
+
* and the options marked `client` with the configured value or the module's
|
|
1510
|
+
* default. Blocks without a creator get an entry too, since `block.using(...)`
|
|
1511
|
+
* builds them with these options.
|
|
1512
|
+
*/
|
|
1513
|
+
function blockConfigEntries(config) {
|
|
1514
|
+
const installed = resolveBlocks(config.blockNames, {
|
|
1515
|
+
modules: config.blocks,
|
|
1516
|
+
...config.sql.scope === void 0 ? {} : { scope: config.sql.scope }
|
|
1517
|
+
}).map((module) => module.name);
|
|
1518
|
+
const entries = [];
|
|
1519
|
+
for (const manifest of PRESET_CATALOG.manifests) {
|
|
1520
|
+
const modules = manifest.sql.filter((module) => installed.includes(module));
|
|
1521
|
+
const [main] = modules;
|
|
1522
|
+
const others = Object.values(config.instances).filter((instance) => instance.block === main);
|
|
1523
|
+
if (main !== void 0 && (others.length === 0 || others.some((each) => each.name === main))) entries.push([manifest.name, generatedEntry(config, modules)]);
|
|
1524
|
+
for (const instance of others) {
|
|
1525
|
+
if (main === void 0 || instance.name === main) continue;
|
|
1526
|
+
const layout = {
|
|
1527
|
+
modules: config.blocks,
|
|
1528
|
+
instances: config.instances,
|
|
1529
|
+
...config.sql.scope === void 0 ? {} : { scope: config.sql.scope }
|
|
1530
|
+
};
|
|
1531
|
+
const entry = generatedEntry({
|
|
1532
|
+
...config,
|
|
1533
|
+
blocks: {
|
|
1534
|
+
...config.blocks,
|
|
1535
|
+
[main]: instance.config
|
|
1536
|
+
}
|
|
1537
|
+
}, modules, instanceFunctions(layout, installed, instance.name));
|
|
1538
|
+
entries.push([instance.name, {
|
|
1539
|
+
...entry,
|
|
1540
|
+
block: manifest.name,
|
|
1541
|
+
...Object.keys(instance.uses).length === 0 ? {} : { uses: instance.uses }
|
|
1542
|
+
}]);
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
return Object.fromEntries(entries);
|
|
1546
|
+
}
|
|
1547
|
+
/**
|
|
1548
|
+
* One instance's generated config: the schema of its main module, the client
|
|
1549
|
+
* options of `modules` and its naming.
|
|
1550
|
+
*/
|
|
1551
|
+
function generatedEntry(config, modules, instanceFunctionNames) {
|
|
1552
|
+
const resolved = resolveBlock(config.blocks[modules[0] ?? ""]);
|
|
1553
|
+
const options = {};
|
|
1554
|
+
for (const module of modules) {
|
|
1555
|
+
if (!hasSchema(module)) continue;
|
|
1556
|
+
const configured = resolveBlock(config.blocks[module]).options;
|
|
1557
|
+
for (const [key, spec] of Object.entries(BLOCK_OPTION_SCHEMAS[module].specs)) {
|
|
1558
|
+
if (!spec.client) continue;
|
|
1559
|
+
const value = configured[key] ?? spec.default;
|
|
1560
|
+
if (value !== void 0) options[key] = value;
|
|
1561
|
+
}
|
|
1562
|
+
}
|
|
1563
|
+
const names = namingOf(config, modules, instanceFunctionNames);
|
|
1564
|
+
return {
|
|
1565
|
+
schema: resolved.schema,
|
|
1566
|
+
...resolved.api === void 0 ? {} : { api: resolved.api.schema },
|
|
1567
|
+
options,
|
|
1568
|
+
...names === void 0 ? {} : { names }
|
|
1569
|
+
};
|
|
1570
|
+
}
|
|
1571
|
+
function literal(value, indent) {
|
|
1572
|
+
if (Array.isArray(value)) return `[${value.map((entry) => literal(entry, indent)).join(", ")}]`;
|
|
1573
|
+
if (typeof value === "object" && value !== null) {
|
|
1574
|
+
const entries = Object.entries(value);
|
|
1575
|
+
if (entries.length === 0) return "{}";
|
|
1576
|
+
const inner = `${indent} `;
|
|
1577
|
+
return `{\n${entries.map(([key, entry]) => `${inner}${prop(key)}: ${literal(entry, inner)},`).join("\n")}\n${indent}}`;
|
|
1578
|
+
}
|
|
1579
|
+
return JSON.stringify(value);
|
|
1580
|
+
}
|
|
1581
|
+
/** Every event type the app tables emit, in config order. */
|
|
1582
|
+
function appTableEvents(config) {
|
|
1583
|
+
return Object.entries(config.appTables).flatMap(([name, table]) => appTableEventTypes(name, table));
|
|
1584
|
+
}
|
|
1585
|
+
/**
|
|
1586
|
+
* `appTableEvents` and `appTableEventSchemas`, for app tables that set
|
|
1587
|
+
* `events`.
|
|
1588
|
+
*/
|
|
1589
|
+
function appTableEventLines(types) {
|
|
1590
|
+
if (types.length === 0) return [];
|
|
1591
|
+
return [
|
|
1592
|
+
"",
|
|
1593
|
+
"/**",
|
|
1594
|
+
" * The events `tables.<table>.events` writes to the outbox, for `onBlockEvent` and the sinks.",
|
|
1595
|
+
" * @public",
|
|
1596
|
+
" */",
|
|
1597
|
+
"export const appTableEvents = defineEvents({",
|
|
1598
|
+
...types.map((type) => ` ${prop(type)}: event<AppTableEventData>(),`),
|
|
1599
|
+
"});",
|
|
1600
|
+
"",
|
|
1601
|
+
"/**",
|
|
1602
|
+
" * The app table events with an open payload, for AsyncAPI's `cloudEvents.blocks`.",
|
|
1603
|
+
" * @public",
|
|
1604
|
+
" */",
|
|
1605
|
+
"export const appTableEventSchemas = {",
|
|
1606
|
+
...types.map((type) => ` ${prop(type)}: true,`),
|
|
1607
|
+
"} as const;"
|
|
1608
|
+
];
|
|
1609
|
+
}
|
|
1610
|
+
const CATALOG_BLOCKS = new Map(PRESET_CATALOG.blocks.map((block) => [block.name, block]));
|
|
1611
|
+
const MANIFESTS = new Map(PRESET_CATALOG.manifests.map((manifest) => [manifest.name, manifest]));
|
|
1612
|
+
/**
|
|
1613
|
+
* The repository extensions of the installed blocks, in block order. The
|
|
1614
|
+
* `memberships` one also stands for an app's own tenancy, when
|
|
1615
|
+
* `auth.organization.column` turns it on without the block.
|
|
1616
|
+
*/
|
|
1617
|
+
function schemaExtensions(config) {
|
|
1618
|
+
const tenant = config.extensions.tenant;
|
|
1619
|
+
const tenantOptions = Object.entries({
|
|
1620
|
+
onMissing: tenant?.onMissing,
|
|
1621
|
+
header: tenant?.header
|
|
1622
|
+
}).flatMap(([key, value]) => value === void 0 ? [] : [`${key}: ${q(value)}`]);
|
|
1623
|
+
const tenantArgs = tenantOptions.length === 0 ? "" : `{ ${tenantOptions.join(", ")} }`;
|
|
1624
|
+
const extensions = config.blockNames.flatMap((name) => {
|
|
1625
|
+
const manifest = MANIFESTS.get(CATALOG_BLOCKS.get(name)?.manifest ?? "");
|
|
1626
|
+
if (manifest?.extension === void 0) return [];
|
|
1627
|
+
return [{
|
|
1628
|
+
export: manifest.extension,
|
|
1629
|
+
subpath: `blocks/${manifest.name}`,
|
|
1630
|
+
args: manifest.name === "memberships" ? tenantArgs : ""
|
|
1631
|
+
}];
|
|
1632
|
+
});
|
|
1633
|
+
if (tenant !== void 0 && !extensions.some((entry) => entry.subpath === "blocks/memberships")) extensions.push({
|
|
1634
|
+
export: "membershipsExtension",
|
|
1635
|
+
subpath: "blocks/memberships",
|
|
1636
|
+
args: tenantArgs
|
|
1637
|
+
});
|
|
1638
|
+
return extensions;
|
|
1639
|
+
}
|
|
1640
|
+
/** The installed blocks with their final names, for `GeneratorModel.blocks`. */
|
|
1641
|
+
function generatorBlocks(config) {
|
|
1642
|
+
return Object.entries(blockConfigEntries(config)).filter(([, entry]) => entry.block === void 0).map(([name, entry]) => {
|
|
1643
|
+
const manifest = MANIFESTS.get(CATALOG_BLOCKS.get(name)?.manifest ?? "");
|
|
1644
|
+
const owned = manifest?.name === name ? manifest : void 0;
|
|
1645
|
+
const client = owned?.client ?? void 0;
|
|
1646
|
+
const renames = entityNames(entry.names?.entities ?? []);
|
|
1647
|
+
return {
|
|
1648
|
+
name,
|
|
1649
|
+
schema: entry.schema,
|
|
1650
|
+
client: client === void 0 ? void 0 : {
|
|
1651
|
+
export: renames.rename(client.export),
|
|
1652
|
+
subpath: client.subpath
|
|
1653
|
+
},
|
|
1654
|
+
entities: blockEntities(name, config.blocks).map((entity) => ({
|
|
1655
|
+
key: entity.key,
|
|
1656
|
+
from: { ...entity.from },
|
|
1657
|
+
to: { ...entity.to },
|
|
1658
|
+
primary: entity.primary,
|
|
1659
|
+
table: entity.table,
|
|
1660
|
+
url: entity.url,
|
|
1661
|
+
schemas: owned?.entitySchemas?.[entity.key] ?? {}
|
|
1662
|
+
}))
|
|
1663
|
+
};
|
|
1664
|
+
});
|
|
1665
|
+
}
|
|
1666
|
+
/**
|
|
1667
|
+
* For each installed block whose entities `blocks.<name>.entities` renames: the
|
|
1668
|
+
* block under its renamed constant (`tasksBlock`) and an alias for each type
|
|
1669
|
+
* named after one of its entities (`Task<F>`, `TasksEvents`).
|
|
1670
|
+
*/
|
|
1671
|
+
function renamedBlockLines(entries) {
|
|
1672
|
+
const imports = [];
|
|
1673
|
+
const lines = [];
|
|
1674
|
+
const exported = /* @__PURE__ */ new Set();
|
|
1675
|
+
const constants = /* @__PURE__ */ new Map();
|
|
1676
|
+
for (const manifest of PRESET_CATALOG.manifests) {
|
|
1677
|
+
const instances = Object.entries(entries).filter(([key, entry]) => (entry.block ?? key) === manifest.name && (entry.names?.entities ?? []).length > 0);
|
|
1678
|
+
if (manifest.client === null || instances.length === 0) continue;
|
|
1679
|
+
const aliasAll = instances.length > 1;
|
|
1680
|
+
const block = manifest.client.export;
|
|
1681
|
+
const entityTypes = (manifest.entityTypes ?? []).filter((type) => !(type.name.endsWith("Options") && manifest.entityTypes?.some((other) => `${other.name}Options` === type.name)));
|
|
1682
|
+
const eventsType = manifest.events?.type;
|
|
1683
|
+
const types = eventsType === void 0 || entityTypes.some((type) => type.name === eventsType) ? entityTypes : [...entityTypes, { name: eventsType }];
|
|
1684
|
+
const [first] = instances;
|
|
1685
|
+
const firstNames = entityNames(first?.[1].names?.entities ?? []);
|
|
1686
|
+
const localOf = (name) => aliasAll || firstNames.rename(name) === name ? `Default${name}` : name;
|
|
1687
|
+
const local = aliasAll || firstNames.rename(block) === block ? `default${pascal(block)}` : block;
|
|
1688
|
+
const specifiers = [...types.map((type) => localOf(type.name) === type.name ? ` type ${type.name},` : ` type ${type.name} as ${localOf(type.name)},`), ` ${local === block ? block : `${block} as ${local}`},`];
|
|
1689
|
+
imports.push([
|
|
1690
|
+
"import {",
|
|
1691
|
+
...specifiers,
|
|
1692
|
+
`} from ${q(manifest.client.subpath)};`
|
|
1693
|
+
].join("\n"));
|
|
1694
|
+
for (const [instance, entry] of instances) {
|
|
1695
|
+
const names = entityNames(entry.names?.entities ?? []);
|
|
1696
|
+
const alias = `${pascal(camelOf(instance))}Renames`;
|
|
1697
|
+
const key = q(instance);
|
|
1698
|
+
const wanted = instance === manifest.name ? names.rename(block) : `${camelOf(instance)}Block`;
|
|
1699
|
+
const renamed = exported.has(wanted) ? `${camelOf(instance)}Block` : wanted;
|
|
1700
|
+
exported.add(renamed);
|
|
1701
|
+
constants.set(instance, renamed);
|
|
1702
|
+
lines.push("", `type ${alias} = (typeof blockConfig)[${key}]["names"]["entities"];`, "", "/**", ` * The \`${manifest.name}\` block under the names \`blocks.${instance}.entities\` gives it.`, " * @public", " */", `export const ${renamed} = renameBlock(${local}, blockConfig[${key}].names);`, ...renamedTypeLines(types, names, localOf, alias, exported, {
|
|
1703
|
+
block: eventsType,
|
|
1704
|
+
instance: instance === manifest.name ? void 0 : `${pascal(camelOf(instance))}Events`
|
|
1705
|
+
}));
|
|
1706
|
+
}
|
|
1707
|
+
}
|
|
1708
|
+
return {
|
|
1709
|
+
specifiers: imports.length === 0 ? [] : [
|
|
1710
|
+
"renameBlock",
|
|
1711
|
+
"type RenamedEvents",
|
|
1712
|
+
"type RenamedType"
|
|
1713
|
+
],
|
|
1714
|
+
imports,
|
|
1715
|
+
lines,
|
|
1716
|
+
constants
|
|
1717
|
+
};
|
|
1718
|
+
}
|
|
1719
|
+
/**
|
|
1720
|
+
* `blocks`: every installed instance with a client, under its key, for
|
|
1721
|
+
* `defineBlocks(blockConfig, blocks)`. A renamed instance uses its renamed
|
|
1722
|
+
* constant; the others import their block.
|
|
1723
|
+
*/
|
|
1724
|
+
function instanceMapLines(entries, renamed) {
|
|
1725
|
+
const imported = /* @__PURE__ */ new Map();
|
|
1726
|
+
const members = [];
|
|
1727
|
+
for (const [instance, entry] of Object.entries(entries)) {
|
|
1728
|
+
const manifest = MANIFESTS.get(entry.block ?? instance);
|
|
1729
|
+
const client = manifest?.client;
|
|
1730
|
+
if (manifest === void 0 || client === void 0 || client === null) continue;
|
|
1731
|
+
const constant = renamed.get(instance);
|
|
1732
|
+
if (constant !== void 0) {
|
|
1733
|
+
members.push(` ${prop(instance)}: ${constant},`);
|
|
1734
|
+
continue;
|
|
1735
|
+
}
|
|
1736
|
+
const local = `${camelOf(manifest.name)}BlockInstance`;
|
|
1737
|
+
imported.set(manifest.name, {
|
|
1738
|
+
local,
|
|
1739
|
+
subpath: client.subpath
|
|
1740
|
+
});
|
|
1741
|
+
members.push(` ${prop(instance)}: ${local},`);
|
|
1742
|
+
}
|
|
1743
|
+
if (members.length === 0) return {
|
|
1744
|
+
imports: [],
|
|
1745
|
+
lines: []
|
|
1746
|
+
};
|
|
1747
|
+
return {
|
|
1748
|
+
imports: [...imported].map(([name, { local, subpath }]) => {
|
|
1749
|
+
return `import { ${MANIFESTS.get(name)?.client?.export ?? local} as ${local} } from ${q(subpath)};`;
|
|
1750
|
+
}),
|
|
1751
|
+
lines: [
|
|
1752
|
+
"",
|
|
1753
|
+
"/**",
|
|
1754
|
+
" * Every installed block instance with a client, under its key, for",
|
|
1755
|
+
" * `defineBlocks(blockConfig, { ...blocks, ... })`. Override an entry to give",
|
|
1756
|
+
" * a block its ports (`notifications: notificationsBlock.using(...)`).",
|
|
1757
|
+
" * @public",
|
|
1758
|
+
" */",
|
|
1759
|
+
"export const blocks = {",
|
|
1760
|
+
...members,
|
|
1761
|
+
"} as const;"
|
|
1762
|
+
]
|
|
1763
|
+
};
|
|
1764
|
+
}
|
|
1765
|
+
/**
|
|
1766
|
+
* An alias for each of `types` under the name an instance's entity renames give
|
|
1767
|
+
* it, skipping a name another instance already exports. A renamed instance's
|
|
1768
|
+
* block-named events type takes the instance's name (`MaintenanceEvents`).
|
|
1769
|
+
*/
|
|
1770
|
+
function renamedTypeLines(types, names, localOf, alias, exported, events) {
|
|
1771
|
+
return types.flatMap((type) => {
|
|
1772
|
+
const name = type.name === events.block && events.instance !== void 0 ? events.instance : names.rename(type.name);
|
|
1773
|
+
const source = localOf(type.name);
|
|
1774
|
+
if (exported.has(name)) return [];
|
|
1775
|
+
exported.add(name);
|
|
1776
|
+
if (type.name.endsWith("Events")) return [
|
|
1777
|
+
"",
|
|
1778
|
+
"/** @public */",
|
|
1779
|
+
`export type ${name} = RenamedEvents<${source}, ${alias}>;`
|
|
1780
|
+
];
|
|
1781
|
+
return type.fields === true ? [
|
|
1782
|
+
"",
|
|
1783
|
+
"/** @public */",
|
|
1784
|
+
`export type ${name}<F extends object = Record<never, never>> = RenamedType<${source}<F>, ${alias}>;`
|
|
1785
|
+
] : [
|
|
1786
|
+
"",
|
|
1787
|
+
"/** @public */",
|
|
1788
|
+
`export type ${name} = RenamedType<${source}, ${alias}>;`
|
|
1789
|
+
];
|
|
1790
|
+
});
|
|
1791
|
+
}
|
|
1792
|
+
function camelOf(name) {
|
|
1793
|
+
return name.replaceAll(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
|
|
1794
|
+
}
|
|
1795
|
+
function pascal(name) {
|
|
1796
|
+
return name.charAt(0).toUpperCase() + name.slice(1);
|
|
1797
|
+
}
|
|
1798
|
+
/**
|
|
1799
|
+
* `blocks.generated.ts`: each installed block's schema, API schema and the
|
|
1800
|
+
* options its TypeScript side reads, for `defineBlocks(blockConfig, ...)`, and
|
|
1801
|
+
* the app table events. `undefined` when the config installs no blocks.
|
|
1802
|
+
*/
|
|
1803
|
+
function emitBlockConfig(config, options = {}) {
|
|
1804
|
+
if (config.blockNames.length === 0) return;
|
|
1805
|
+
const entries = blockConfigEntries(config);
|
|
1806
|
+
const events = appTableEvents(config);
|
|
1807
|
+
const runtime = options.runtimeImport ?? "better-supabase";
|
|
1808
|
+
const renamed = renamedBlockLines(entries);
|
|
1809
|
+
const constants = nameConstantLines(config, entries);
|
|
1810
|
+
const instances = instanceMapLines(entries, renamed.constants);
|
|
1811
|
+
const specifiers = [
|
|
1812
|
+
...events.length === 0 ? [] : [
|
|
1813
|
+
"type AppTableEventData",
|
|
1814
|
+
"defineEvents",
|
|
1815
|
+
"event"
|
|
1816
|
+
],
|
|
1817
|
+
"type GeneratedBlocks",
|
|
1818
|
+
...renamed.specifiers,
|
|
1819
|
+
...constants.specifiers
|
|
1820
|
+
].toSorted((a, b) => a.replace("type ", "").localeCompare(b.replace("type ", "")));
|
|
1821
|
+
const blocksImport = specifiers.length === 1 ? `import type { GeneratedBlocks } from ${q(runtimeSubpath(runtime, "blocks"))};` : `import {\n${specifiers.map((name) => ` ${name},`).join("\n")}\n} from ${q(runtimeSubpath(runtime, "blocks"))};`;
|
|
1822
|
+
return {
|
|
1823
|
+
path: blockConfigPath(config),
|
|
1824
|
+
contents: [
|
|
1825
|
+
GENERATED_HEADER,
|
|
1826
|
+
"",
|
|
1827
|
+
blocksImport,
|
|
1828
|
+
...renamed.imports,
|
|
1829
|
+
...constants.imports,
|
|
1830
|
+
...instances.imports,
|
|
1831
|
+
"",
|
|
1832
|
+
"/**",
|
|
1833
|
+
" * The installed blocks' settings from the `blocks` config, for",
|
|
1834
|
+
" * `defineBlocks(blockConfig, { ... })`: each block's schema, API schema",
|
|
1835
|
+
" * and the options its SQL and TypeScript halves share.",
|
|
1836
|
+
" */",
|
|
1837
|
+
`export const blockConfig = ${literal(entries, "")} as const satisfies GeneratedBlocks;`,
|
|
1838
|
+
...renamed.lines,
|
|
1839
|
+
...instances.lines,
|
|
1840
|
+
...appTableEventLines(events),
|
|
1841
|
+
...constants.lines,
|
|
1842
|
+
""
|
|
1843
|
+
].join("\n")
|
|
1844
|
+
};
|
|
1845
|
+
}
|
|
1846
|
+
//#endregion
|
|
1847
|
+
//#region src/cli/gen/hooks.ts
|
|
1848
|
+
const IDENTIFIER = /^[A-Za-z_$][\w$]*$/;
|
|
1849
|
+
function access(property) {
|
|
1850
|
+
return IDENTIFIER.test(property) ? `db.${property}` : `db[${q(property)}]`;
|
|
1851
|
+
}
|
|
1852
|
+
/** `hooks.ts`, next to the main generated module. */
|
|
1853
|
+
function hooksPath(config) {
|
|
1854
|
+
return posix.join(posix.dirname(config.output), "hooks.ts");
|
|
1855
|
+
}
|
|
1856
|
+
/** The list and record hook names for a `db` property. */
|
|
1857
|
+
function hookNames(property) {
|
|
1858
|
+
const name = pascal$2(property);
|
|
1859
|
+
const one = pascal$2(singular(property));
|
|
1860
|
+
return one === name ? {
|
|
1861
|
+
list: `use${name}List`,
|
|
1862
|
+
one: `use${name}`
|
|
1863
|
+
} : {
|
|
1864
|
+
list: `use${name}`,
|
|
1865
|
+
one: `use${one}`
|
|
1866
|
+
};
|
|
1867
|
+
}
|
|
1868
|
+
/**
|
|
1869
|
+
* `hooks.ts`: `defineDataHooks` from the `gen.hooks` framework once per table,
|
|
1870
|
+
* typed by the app's definition in `./index`. Block instances keep their own
|
|
1871
|
+
* client methods on `db.<instance>`, which take their own arguments.
|
|
1872
|
+
* `undefined` with `hooks: false`.
|
|
1873
|
+
*/
|
|
1874
|
+
function emitHooks(config, tables, options = {}) {
|
|
1875
|
+
if (config.hooks === false) return;
|
|
1876
|
+
const runtime = options.runtimeImport ?? "better-supabase";
|
|
1877
|
+
if (tables.length === 0) return;
|
|
1878
|
+
return {
|
|
1879
|
+
path: hooksPath(config),
|
|
1880
|
+
contents: [
|
|
1881
|
+
GENERATED_HEADER,
|
|
1882
|
+
...config.hooks === "react" ? ["\"use client\";"] : [],
|
|
1883
|
+
"",
|
|
1884
|
+
`import type { DbOf } from ${q(runtime)};`,
|
|
1885
|
+
"",
|
|
1886
|
+
`import { defineDataHooks } from ${q(runtimeSubpath(runtime, config.hooks))};`,
|
|
1887
|
+
"",
|
|
1888
|
+
"import type { betterSupabase } from \"./index\";",
|
|
1889
|
+
"",
|
|
1890
|
+
"type AppDb = DbOf<typeof betterSupabase>;",
|
|
1891
|
+
...tables.flatMap((property) => {
|
|
1892
|
+
const names = hookNames(property);
|
|
1893
|
+
return [
|
|
1894
|
+
"",
|
|
1895
|
+
`export const { useList: ${names.list}, useOne: ${names.one} } =`,
|
|
1896
|
+
` defineDataHooks(${q(property)}, (db: AppDb) => ${access(property)});`
|
|
1897
|
+
];
|
|
1898
|
+
}),
|
|
1899
|
+
""
|
|
1900
|
+
].join("\n")
|
|
1901
|
+
};
|
|
1902
|
+
}
|
|
1903
|
+
//#endregion
|
|
1904
|
+
//#region src/cli/gen/records.ts
|
|
1905
|
+
/** `names` and every block they require, from the catalog. */
|
|
1906
|
+
function withRequired(names) {
|
|
1907
|
+
const requires = new Map(PRESET_CATALOG.blocks.map((block) => [block.name, block.requires]));
|
|
1908
|
+
const found = /* @__PURE__ */ new Set();
|
|
1909
|
+
const add = (name) => {
|
|
1910
|
+
if (!found.has(name)) {
|
|
1911
|
+
found.add(name);
|
|
1912
|
+
for (const required of requires.get(name) ?? []) add(required);
|
|
1913
|
+
}
|
|
1914
|
+
};
|
|
1915
|
+
for (const name of names) add(name);
|
|
1916
|
+
return [...found];
|
|
1917
|
+
}
|
|
1918
|
+
function camel(name) {
|
|
1919
|
+
return name.replaceAll(/[-_]([a-z0-9])/g, (_, c) => c.toUpperCase());
|
|
1920
|
+
}
|
|
1921
|
+
function kebab(name) {
|
|
1922
|
+
return name.replaceAll("_", "-");
|
|
1923
|
+
}
|
|
1924
|
+
/**
|
|
1925
|
+
* The record types a block's SQL serves, which is where its binding loads: the
|
|
1926
|
+
* types `blocks.<instance>.on` names, or every tenant-scoped registered subject
|
|
1927
|
+
* when it names none. Versions keep only the listed types and the subjects with
|
|
1928
|
+
* `versions` set.
|
|
1929
|
+
*/
|
|
1930
|
+
function servedSubjects(config, block) {
|
|
1931
|
+
const listed = config.blocks[block]?.on;
|
|
1932
|
+
const registry = Object.entries(config.subjects);
|
|
1933
|
+
const named = listed === void 0 ? void 0 : Array.isArray(listed) ? listed : Object.keys(listed);
|
|
1934
|
+
if (block === "versions") {
|
|
1935
|
+
const versioned = registry.filter(([, entry]) => entry.versions !== void 0).map(([type]) => type);
|
|
1936
|
+
return /* @__PURE__ */ new Set([...named ?? [], ...versioned]);
|
|
1937
|
+
}
|
|
1938
|
+
if (named !== void 0) return new Set(named);
|
|
1939
|
+
return new Set(registry.filter(([, entry]) => entry.tenant !== false).map(([type]) => type));
|
|
1940
|
+
}
|
|
1941
|
+
function bindingBlocks(config) {
|
|
1942
|
+
const manifests = new Map(PRESET_CATALOG.manifests.map((manifest) => [manifest.name, manifest]));
|
|
1943
|
+
return generatorBlocks(config).flatMap((block) => {
|
|
1944
|
+
const manifest = manifests.get(block.name);
|
|
1945
|
+
if (manifest?.record === void 0 || manifest.client === null || block.client === void 0) return [];
|
|
1946
|
+
const renamed = block.client.export !== manifest.client.export;
|
|
1947
|
+
return [{
|
|
1948
|
+
name: block.name,
|
|
1949
|
+
key: camel(block.name),
|
|
1950
|
+
local: block.client.export,
|
|
1951
|
+
from: renamed ? void 0 : block.client.subpath
|
|
1952
|
+
}];
|
|
1953
|
+
});
|
|
1954
|
+
}
|
|
1955
|
+
function recordFile(config, path, type, blocks, extras) {
|
|
1956
|
+
const generated = importPath(path, blockConfigPath(config));
|
|
1957
|
+
const fromGenerated = [
|
|
1958
|
+
"blockConfig",
|
|
1959
|
+
...extras.permissions ? ["permissions"] : [],
|
|
1960
|
+
...blocks.filter((block) => block.from === void 0).map((b) => b.local)
|
|
1961
|
+
].toSorted((a, b) => a.localeCompare(b));
|
|
1962
|
+
const imports = [
|
|
1963
|
+
"import { defineRecordType } from \"better-supabase/records\";",
|
|
1964
|
+
...blocks.flatMap((block) => block.from === void 0 ? [] : [`import { ${block.local} } from ${q(block.from)};`]),
|
|
1965
|
+
...extras.access === void 0 ? [] : [`import { permissionsBlock } from ${q(extras.access)};`]
|
|
1966
|
+
].toSorted((a, b) => a.localeCompare(b));
|
|
1967
|
+
return {
|
|
1968
|
+
path,
|
|
1969
|
+
contents: [
|
|
1970
|
+
GENERATED_HEADER,
|
|
1971
|
+
"",
|
|
1972
|
+
...imports,
|
|
1973
|
+
"",
|
|
1974
|
+
`import { ${fromGenerated.join(", ")} } from ${q(generated)};`,
|
|
1975
|
+
"",
|
|
1976
|
+
"/**",
|
|
1977
|
+
` * The ${type} record type: each installed block that binds to it. Pass it`,
|
|
1978
|
+
" * to `bsb.record`, `recordQueries` or `createRecordProvider`.",
|
|
1979
|
+
" */",
|
|
1980
|
+
`export const ${camel(type)}Record = defineRecordType({`,
|
|
1981
|
+
` type: ${q(type)},`,
|
|
1982
|
+
" blocks: {",
|
|
1983
|
+
...blocks.map((block) => block.key === block.local ? ` ${block.key},` : ` ${block.key}: ${block.local},`),
|
|
1984
|
+
" },",
|
|
1985
|
+
" config: blockConfig,",
|
|
1986
|
+
...extras.permissions ? [" permissions,"] : [],
|
|
1987
|
+
...extras.access === void 0 ? [] : [" access: permissionsBlock,"],
|
|
1988
|
+
"});",
|
|
1989
|
+
""
|
|
1990
|
+
].join("\n")
|
|
1991
|
+
};
|
|
1992
|
+
}
|
|
1993
|
+
/**
|
|
1994
|
+
* `records/` next to the main module: one `records/<type>.ts` per record type
|
|
1995
|
+
* that an installed block binds to, and an index. Record types the binding
|
|
1996
|
+
* blocks and the blocks they require register themselves (a comment's message,
|
|
1997
|
+
* an attachment) get none. Empty with `recordTypes: false`.
|
|
1998
|
+
*/
|
|
1999
|
+
function emitRecords(config) {
|
|
2000
|
+
if (!config.recordTypes || config.blockNames.length === 0) return [];
|
|
2001
|
+
const blocks = bindingBlocks(config);
|
|
2002
|
+
if (blocks.length === 0) return [];
|
|
2003
|
+
const served = new Map(blocks.map((block) => [block.name, servedSubjects(config, block.name)]));
|
|
2004
|
+
const access = PRESET_CATALOG.manifests.find((manifest) => manifest.name === "permissions")?.client;
|
|
2005
|
+
const extras = {
|
|
2006
|
+
access: new Set(generatorBlocks(config).map((block) => block.name)).has("permissions") ? access?.subpath : void 0,
|
|
2007
|
+
permissions: hasPermissionConstants(config)
|
|
2008
|
+
};
|
|
2009
|
+
const dir = posix.join(posix.dirname(config.output), "records");
|
|
2010
|
+
const files = [];
|
|
2011
|
+
const types = [];
|
|
2012
|
+
const inner = new Set(withRequired(blocks.map((block) => block.name)).flatMap((name) => blockSubjectTypes(name, config.blocks)));
|
|
2013
|
+
for (const type of Object.keys(config.subjects).toSorted()) {
|
|
2014
|
+
if (inner.has(type)) continue;
|
|
2015
|
+
const own = blocks.filter((block) => served.get(block.name)?.has(type));
|
|
2016
|
+
if (own.length === 0) continue;
|
|
2017
|
+
const path = posix.join(dir, `${kebab(type)}.ts`);
|
|
2018
|
+
files.push(recordFile(config, path, type, own, extras));
|
|
2019
|
+
types.push([type, path]);
|
|
2020
|
+
}
|
|
2021
|
+
if (types.length === 0) return [];
|
|
2022
|
+
const index = posix.join(dir, "index.ts");
|
|
2023
|
+
files.push({
|
|
2024
|
+
path: index,
|
|
2025
|
+
contents: [
|
|
2026
|
+
GENERATED_HEADER,
|
|
2027
|
+
"",
|
|
2028
|
+
...types.map(([type, path]) => `export { ${camel(type)}Record } from ${q(importPath(index, path))};`),
|
|
2029
|
+
""
|
|
2030
|
+
].join("\n")
|
|
2031
|
+
});
|
|
2032
|
+
return files;
|
|
2033
|
+
}
|
|
2034
|
+
//#endregion
|
|
2035
|
+
//#region src/cli/gen/render.ts
|
|
2036
|
+
/** The file the content mapper serves the schema types for. */
|
|
2037
|
+
const MAPPER_FILE = "schema.bsb";
|
|
2038
|
+
/** Where `schema.bsb` sits: next to the generated module. */
|
|
2039
|
+
function mapperFilePath(config) {
|
|
2040
|
+
return join(dirname(config.output), MAPPER_FILE);
|
|
2041
|
+
}
|
|
2042
|
+
const MAPPER_FILE_CONTENTS = `// The better-supabase content mapper serves the schema types for this file.
|
|
2043
|
+
// Its contents are ignored. Run \`better-supabase gen\` after a config change.
|
|
2044
|
+
`;
|
|
2045
|
+
/**
|
|
2046
|
+
* Renders every generated file for a snapshot, without touching disk:
|
|
2047
|
+
* `database.types.ts` (what `supabase gen types` prints), the main module,
|
|
2048
|
+
* `blocks.generated.ts` when the config installs blocks, the record features in
|
|
2049
|
+
* `features/`, then each configured generator's files.
|
|
2050
|
+
*/
|
|
2051
|
+
async function renderFiles(config, snapshot, options = {}) {
|
|
2052
|
+
return (await render(config, snapshot, options)).files;
|
|
2053
|
+
}
|
|
2054
|
+
/**
|
|
2055
|
+
* The module the content mapper serves for `schema.bsb`: the full generated
|
|
2056
|
+
* module with `database.types.ts` inlined, from the cache when the CLI and
|
|
2057
|
+
* typegen versions, the config (and `configText`, its file) and the snapshot
|
|
2058
|
+
* match the last render.
|
|
2059
|
+
*/
|
|
2060
|
+
async function renderTypesModule(config, snapshot, configText) {
|
|
2061
|
+
return cachedTypesModule(config.root, config.output, typesModuleKey(config, configText, snapshot), async () => (await render(config, snapshot, { typesModule: true })).typesModule ?? "");
|
|
2062
|
+
}
|
|
2063
|
+
async function render(config, snapshot, options = {}) {
|
|
2064
|
+
const model = buildModel(snapshot, config);
|
|
2065
|
+
const runtime = options.runtimeImport ? { runtimeImport: options.runtimeImport } : {};
|
|
2066
|
+
const output = resolve(config.root, config.output);
|
|
2067
|
+
const typegenOptions = {
|
|
2068
|
+
schemas: config.schemas,
|
|
2069
|
+
postgrestVersion: config.postgrestVersion
|
|
2070
|
+
};
|
|
2071
|
+
const databaseTypes = await cachedDatabaseTypes(config.root, [
|
|
2072
|
+
typegenOptions,
|
|
2073
|
+
await oxfmtInstalled(),
|
|
2074
|
+
snapshot.generator
|
|
2075
|
+
], () => generateDatabaseTypes(snapshot.generator, typegenOptions));
|
|
2076
|
+
const metaFiles = metaPaths(config.output);
|
|
2077
|
+
const emitOptions = {
|
|
2078
|
+
databaseTypesImport: importPath(output, resolve(config.root, config.databaseTypesOutput)),
|
|
2079
|
+
importPathFor: (from) => importPath(output, resolve(config.root, from)),
|
|
2080
|
+
metaImport: `./${basename(metaFiles.js)}`,
|
|
2081
|
+
extensions: options.extensions === false ? [] : schemaExtensions(config),
|
|
2082
|
+
...options.inlineMeta ? { inlineMeta: true } : {},
|
|
2083
|
+
...runtime
|
|
2084
|
+
};
|
|
2085
|
+
const meta = emitMeta(model, {
|
|
2086
|
+
types: `./${basename(metaFiles.dts)}`,
|
|
2087
|
+
...runtime
|
|
2088
|
+
});
|
|
2089
|
+
const mapper = config.gen.contentMapper === true;
|
|
2090
|
+
const files = [
|
|
2091
|
+
{
|
|
2092
|
+
path: config.output,
|
|
2093
|
+
contents: ""
|
|
2094
|
+
},
|
|
2095
|
+
{
|
|
2096
|
+
path: metaFiles.js,
|
|
2097
|
+
contents: meta.js
|
|
2098
|
+
},
|
|
2099
|
+
{
|
|
2100
|
+
path: metaFiles.dts,
|
|
2101
|
+
contents: meta.dts
|
|
2102
|
+
}
|
|
2103
|
+
];
|
|
2104
|
+
files.splice(mapper ? 1 : 0, 0, mapper ? {
|
|
2105
|
+
path: mapperFilePath(config),
|
|
2106
|
+
contents: MAPPER_FILE_CONTENTS
|
|
2107
|
+
} : {
|
|
2108
|
+
path: config.databaseTypesOutput,
|
|
2109
|
+
contents: databaseTypes
|
|
2110
|
+
});
|
|
2111
|
+
const main = mapper ? 0 : 1;
|
|
2112
|
+
const blockConfig = emitBlockConfig(config, runtime);
|
|
2113
|
+
if (blockConfig) files.push(blockConfig);
|
|
2114
|
+
files.push(...emitRecords(config));
|
|
2115
|
+
const hooks = emitHooks(config, Object.keys(model.meta.tables), runtime);
|
|
2116
|
+
if (hooks) files.push(hooks);
|
|
2117
|
+
const owners = new Map(files.map((file) => [resolve(config.root, file.path), "gen"]));
|
|
2118
|
+
let view;
|
|
2119
|
+
for (const generator of config.generators) {
|
|
2120
|
+
let extra;
|
|
2121
|
+
try {
|
|
2122
|
+
extra = await generator.generate({
|
|
2123
|
+
meta: model.meta,
|
|
2124
|
+
introspection: model.introspection,
|
|
2125
|
+
extras: snapshot.extras,
|
|
2126
|
+
config,
|
|
2127
|
+
output,
|
|
2128
|
+
importPath: (from, to) => importPath(resolve(config.root, from), resolve(config.root, to)),
|
|
2129
|
+
model: view ??= generatorModel(model, generatorBlocks(config)),
|
|
2130
|
+
...runtime
|
|
2131
|
+
});
|
|
2132
|
+
} catch (cause) {
|
|
2133
|
+
throw new CliError("generator_failed", `generator "${generator.name}" failed: ${errorText(cause)}`, { cause });
|
|
2134
|
+
}
|
|
2135
|
+
for (const file of extra) {
|
|
2136
|
+
const path = resolve(config.root, file.path);
|
|
2137
|
+
const inside = relative(config.root, path);
|
|
2138
|
+
if (inside === "" || inside.startsWith("..") || isAbsolute(inside)) throw new CliError("generator_failed", `generator "${generator.name}" wrote ${file.path}, which is outside the project root`);
|
|
2139
|
+
const owner = owners.get(path);
|
|
2140
|
+
if (owner !== void 0) throw new CliError("generator_failed", `generator "${generator.name}" wrote ${file.path}, which ${owner === "gen" ? "better-supabase gen writes" : `generator "${owner}" also writes`}`);
|
|
2141
|
+
owners.set(path, generator.name);
|
|
2142
|
+
files.push(file);
|
|
2143
|
+
}
|
|
2144
|
+
}
|
|
2145
|
+
const validators = options.extensions === false ? void 0 : files.find((file) => file.validators === true);
|
|
2146
|
+
const withValidators = {
|
|
2147
|
+
...emitOptions,
|
|
2148
|
+
...validators === void 0 ? {} : { validatorsImport: importPath(output, resolve(config.root, validators.path)) }
|
|
2149
|
+
};
|
|
2150
|
+
files[main] = {
|
|
2151
|
+
path: config.output,
|
|
2152
|
+
contents: mapper ? emitRuntime(model, {
|
|
2153
|
+
...withValidators,
|
|
2154
|
+
typesImport: `./${MAPPER_FILE}`
|
|
2155
|
+
}) : emitModule(model, withValidators)
|
|
2156
|
+
};
|
|
2157
|
+
const typesModule = mapper || options.typesModule === true ? emitModule(model, {
|
|
2158
|
+
...withValidators,
|
|
2159
|
+
databaseTypes,
|
|
2160
|
+
declareMeta: true
|
|
2161
|
+
}) : void 0;
|
|
2162
|
+
return {
|
|
2163
|
+
files,
|
|
2164
|
+
warnings: model.warnings,
|
|
2165
|
+
notices: model.notices,
|
|
2166
|
+
...typesModule === void 0 ? {} : { typesModule }
|
|
2167
|
+
};
|
|
2168
|
+
}
|
|
2169
|
+
//#endregion
|
|
2170
|
+
export { emitBlockConfig as a, metaPaths as c, configFor as d, renderTypesModule as i, buildModel as l, render as n, GENERATED_HEADER as o, renderFiles as r, emitModule as s, mapperFilePath as t, notNullTag as u };
|