@svgrid/enterprise 2.5.3 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SvAlertRuleEditor.svelte.d.ts +13 -0
- package/dist/SvAlertsManager.svelte.d.ts +14 -0
- package/dist/SvAlertsPanel.svelte.d.ts +9 -0
- package/dist/SvAuthGate.svelte.d.ts +22 -0
- package/dist/SvBoard.svelte.d.ts +35 -0
- package/dist/SvExportMenu.svelte.d.ts +61 -0
- package/{src → dist}/SvExpressionEditor.svelte +4 -1
- package/dist/SvExpressionEditor.svelte.d.ts +12 -0
- package/dist/SvFileInput.svelte.d.ts +20 -0
- package/dist/SvGridAlerts.svelte.d.ts +77 -0
- package/dist/SvGridBoard.svelte.d.ts +30 -0
- package/{src → dist}/SvGridEditPanel.svelte +173 -28
- package/dist/SvGridEditPanel.svelte.d.ts +75 -0
- package/dist/SvGridMasterDetail.svelte.d.ts +49 -0
- package/dist/SvGridScheduler.svelte.d.ts +30 -0
- package/dist/SvImportDialog.svelte.d.ts +88 -0
- package/dist/SvLookupInput.svelte.d.ts +21 -0
- package/dist/SvPivotDesigner.svelte.d.ts +176 -0
- package/dist/SvRecordDetail.svelte.d.ts +58 -0
- package/dist/SvSchedule.svelte.d.ts +29 -0
- package/dist/SvSchemaChart.svelte.d.ts +61 -0
- package/dist/SvSchemaDashboard.svelte.d.ts +46 -0
- package/dist/alerts/alert-engine-attach.d.ts +79 -0
- package/dist/alerts/alert-engine-attach.js +106 -0
- package/dist/alerts/alert-engine.d.ts +42 -0
- package/dist/alerts/alert-engine.js +196 -0
- package/dist/alerts/alert-formats.d.ts +26 -0
- package/dist/alerts/alert-formats.js +58 -0
- package/dist/alerts/alert-observer.d.ts +54 -0
- package/dist/alerts/alert-observer.js +156 -0
- package/dist/alerts/alert-scheduler.d.ts +30 -0
- package/dist/alerts/alert-scheduler.js +54 -0
- package/dist/alerts/alert-storage.d.ts +31 -0
- package/dist/alerts/alert-storage.js +92 -0
- package/dist/alerts/alert-store.svelte.d.ts +24 -0
- package/dist/alerts/alert-store.svelte.js +69 -0
- package/dist/alerts/alert-types.d.ts +86 -0
- package/dist/alerts/alert-types.js +1 -0
- package/dist/alerts.d.ts +2 -0
- package/{src/alerts.ts → dist/alerts.js} +9 -9
- package/dist/board.d.ts +7 -0
- package/{src/board.ts → dist/board.js} +13 -14
- package/dist/cdn/svgrid-enterprise.svelte-external.js +3220 -2607
- package/dist/designer/assets/index-BfzoL904.css +1 -0
- package/dist/designer/assets/{index-CBYU-KNn.js → index-CKdwDseq.js} +139 -139
- package/dist/designer/assets/src-DCKhP5Xy.css +1 -0
- package/dist/designer/assets/{src-i309BeJb.js → src-DLsSdh3J.js} +213 -193
- package/dist/designer/index.html +4 -4
- package/dist/edit-panel.d.ts +105 -0
- package/dist/edit-panel.js +350 -0
- package/dist/export-conditional.d.ts +31 -0
- package/dist/export-conditional.js +65 -0
- package/dist/export-ooxml.d.ts +93 -0
- package/dist/export-ooxml.js +385 -0
- package/dist/export-pdf.d.ts +107 -0
- package/dist/export-pdf.js +144 -0
- package/dist/export-print.d.ts +55 -0
- package/dist/export-print.js +91 -0
- package/{src/export-serialize.ts → dist/export-serialize.d.ts} +11 -24
- package/dist/export-serialize.js +11 -0
- package/dist/export-xls.d.ts +26 -0
- package/dist/export-xls.js +157 -0
- package/dist/export.d.ts +323 -0
- package/dist/export.js +1021 -0
- package/dist/expressions/evaluate.d.ts +17 -0
- package/dist/expressions/evaluate.js +214 -0
- package/dist/expressions/expression-columns.d.ts +61 -0
- package/dist/expressions/expression-columns.js +72 -0
- package/dist/expressions/expression-types.d.ts +125 -0
- package/dist/expressions/expression-types.js +1 -0
- package/dist/expressions/parse.d.ts +25 -0
- package/dist/expressions/parse.js +537 -0
- package/dist/import.d.ts +232 -0
- package/dist/import.js +846 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.js +91 -0
- package/dist/install.d.ts +70 -0
- package/dist/install.js +61 -0
- package/dist/license-core.d.ts +37 -0
- package/dist/license-core.js +81 -0
- package/dist/license.d.ts +30 -0
- package/dist/license.js +139 -0
- package/dist/master-detail.d.ts +23 -0
- package/dist/master-detail.js +35 -0
- package/dist/node/studio.js +683 -13
- package/dist/pivot-chart.d.ts +28 -0
- package/dist/pivot-chart.js +71 -0
- package/dist/pivot-designer.d.ts +69 -0
- package/dist/pivot-designer.js +38 -0
- package/dist/pivot-enable.d.ts +6 -0
- package/{src/pivot-enable.ts → dist/pivot-enable.js} +13 -18
- package/dist/pivot.d.ts +111 -0
- package/dist/pivot.js +353 -0
- package/dist/print.d.ts +33 -0
- package/dist/print.js +61 -0
- package/dist/revoked.d.ts +1 -0
- package/{src/revoked.ts → dist/revoked.js} +5 -6
- package/dist/scheduler-assignments.d.ts +64 -0
- package/dist/scheduler-assignments.js +92 -0
- package/dist/scheduler-axis.d.ts +81 -0
- package/dist/scheduler-axis.js +180 -0
- package/{src/scheduler-booking.ts → dist/scheduler-booking.d.ts} +10 -43
- package/dist/scheduler-booking.js +50 -0
- package/dist/scheduler-config.d.ts +177 -0
- package/dist/scheduler-config.js +1 -0
- package/dist/scheduler-dependencies.d.ts +89 -0
- package/dist/scheduler-dependencies.js +179 -0
- package/dist/scheduler-freebusy.d.ts +19 -0
- package/{src/scheduler-freebusy.ts → dist/scheduler-freebusy.js} +9 -19
- package/{src/scheduler-heatmap.ts → dist/scheduler-heatmap.d.ts} +12 -35
- package/dist/scheduler-heatmap.js +41 -0
- package/dist/scheduler-resource-tree.d.ts +48 -0
- package/dist/scheduler-resource-tree.js +78 -0
- package/dist/scheduler-slots.d.ts +37 -0
- package/dist/scheduler-slots.js +80 -0
- package/dist/scheduler-summary.d.ts +41 -0
- package/dist/scheduler-summary.js +54 -0
- package/dist/scheduler.d.ts +7 -0
- package/{src/scheduler.ts → dist/scheduler.js} +13 -14
- package/dist/scheduling.d.ts +132 -0
- package/dist/scheduling.js +228 -0
- package/dist/schema-designer.d.ts +42 -0
- package/dist/schema-designer.js +117 -0
- package/dist/schema.d.ts +408 -0
- package/dist/schema.js +225 -0
- package/dist/smart-shim.d.ts +62 -0
- package/dist/smart-shim.js +34 -0
- package/dist/sources/aggregate.d.ts +43 -0
- package/dist/sources/aggregate.js +60 -0
- package/dist/sources/auth-supabase.d.ts +69 -0
- package/dist/sources/auth-supabase.js +39 -0
- package/dist/sources/dashboard.d.ts +65 -0
- package/dist/sources/dashboard.js +95 -0
- package/dist/sources/field-inference.d.ts +23 -0
- package/dist/sources/field-inference.js +52 -0
- package/dist/sources/filters.d.ts +35 -0
- package/dist/sources/filters.js +52 -0
- package/dist/sources/index.d.ts +18 -0
- package/dist/sources/index.js +18 -0
- package/dist/sources/introspect-supabase.d.ts +30 -0
- package/dist/sources/introspect-supabase.js +134 -0
- package/dist/sources/realtime-supabase.d.ts +37 -0
- package/dist/sources/realtime-supabase.js +52 -0
- package/dist/sources/relation-lookup.d.ts +50 -0
- package/dist/sources/relation-lookup.js +77 -0
- package/dist/sources/rest-adapters.d.ts +48 -0
- package/dist/sources/rest-adapters.js +85 -0
- package/dist/sources/rest.d.ts +38 -0
- package/dist/sources/rest.js +86 -0
- package/dist/sources/schema-from-columns.d.ts +37 -0
- package/dist/sources/schema-from-columns.js +48 -0
- package/dist/sources/supabase.d.ts +33 -0
- package/dist/sources/supabase.js +74 -0
- package/dist/sources/with-entity-rules.d.ts +25 -0
- package/dist/sources/with-entity-rules.js +47 -0
- package/dist/sources/with-relation-labels.d.ts +26 -0
- package/dist/sources/with-relation-labels.js +38 -0
- package/dist/staged-editing.d.ts +85 -0
- package/dist/staged-editing.js +0 -0
- package/dist/studio/bug-report.d.ts +61 -0
- package/dist/studio/bug-report.js +126 -0
- package/dist/studio/cli.d.ts +56 -0
- package/dist/studio/cli.js +70 -0
- package/dist/studio/copilot-core.d.ts +22 -0
- package/{src/studio/copilot-core.ts → dist/studio/copilot-core.js} +34 -38
- package/dist/studio/csv.d.ts +36 -0
- package/dist/studio/csv.js +173 -0
- package/dist/studio/db-connect-string.d.ts +45 -0
- package/dist/studio/db-connect-string.js +113 -0
- package/dist/studio/deploy-cli.d.ts +35 -0
- package/dist/studio/deploy-cli.js +81 -0
- package/dist/studio/emit-project.d.ts +77 -0
- package/dist/studio/emit-project.js +5463 -0
- package/dist/studio/emit-schema.d.ts +110 -0
- package/dist/studio/emit-schema.js +1128 -0
- package/dist/studio/index.d.ts +35 -0
- package/dist/studio/index.js +41 -0
- package/dist/studio/init-flow.d.ts +58 -0
- package/dist/studio/init-flow.js +451 -0
- package/dist/studio/introspect-db.d.ts +47 -0
- package/dist/studio/introspect-db.js +255 -0
- package/dist/studio/introspect-openapi.d.ts +19 -0
- package/dist/studio/introspect-openapi.js +244 -0
- package/dist/studio/introspect-prisma.d.ts +25 -0
- package/dist/studio/introspect-prisma.js +164 -0
- package/dist/studio/introspect.d.ts +35 -0
- package/dist/studio/introspect.js +306 -0
- package/dist/studio/project.d.ts +1448 -0
- package/dist/studio/project.js +2187 -0
- package/dist/studio/sample-data.d.ts +19 -0
- package/dist/studio/sample-data.js +207 -0
- package/dist/studio/samples/ats.d.ts +2 -0
- package/dist/studio/samples/ats.js +194 -0
- package/dist/studio/samples/clinic.d.ts +2 -0
- package/dist/studio/samples/clinic.js +171 -0
- package/dist/studio/samples/crm.d.ts +2 -0
- package/dist/studio/samples/crm.js +280 -0
- package/dist/studio/samples/datasets.d.ts +38 -0
- package/dist/studio/samples/datasets.js +296 -0
- package/dist/studio/samples/ecommerce.d.ts +2 -0
- package/dist/studio/samples/ecommerce.js +178 -0
- package/dist/studio/samples/events.d.ts +2 -0
- package/dist/studio/samples/events.js +192 -0
- package/dist/studio/samples/fleet.d.ts +2 -0
- package/dist/studio/samples/fleet.js +203 -0
- package/dist/studio/samples/gym.d.ts +2 -0
- package/dist/studio/samples/gym.js +205 -0
- package/dist/studio/samples/hr.d.ts +2 -0
- package/dist/studio/samples/hr.js +186 -0
- package/dist/studio/samples/index.d.ts +13 -0
- package/dist/studio/samples/index.js +44 -0
- package/dist/studio/samples/insurance.d.ts +2 -0
- package/dist/studio/samples/insurance.js +220 -0
- package/dist/studio/samples/inventory.d.ts +2 -0
- package/dist/studio/samples/inventory.js +204 -0
- package/dist/studio/samples/invoicing.d.ts +2 -0
- package/dist/studio/samples/invoicing.js +154 -0
- package/dist/studio/samples/library.d.ts +2 -0
- package/dist/studio/samples/library.js +171 -0
- package/dist/studio/samples/live-data.d.ts +5 -0
- package/dist/studio/samples/live-data.js +261 -0
- package/dist/studio/samples/projects.d.ts +2 -0
- package/dist/studio/samples/projects.js +203 -0
- package/dist/studio/samples/realestate.d.ts +2 -0
- package/dist/studio/samples/realestate.js +187 -0
- package/dist/studio/samples/restaurant.d.ts +2 -0
- package/dist/studio/samples/restaurant.js +180 -0
- package/dist/studio/samples/school.d.ts +2 -0
- package/dist/studio/samples/school.js +188 -0
- package/dist/studio/samples/shared.d.ts +142 -0
- package/dist/studio/samples/shared.js +164 -0
- package/dist/studio/samples/starter.d.ts +4 -0
- package/dist/studio/samples/starter.js +237 -0
- package/dist/studio/samples/subscriptions.d.ts +2 -0
- package/dist/studio/samples/subscriptions.js +175 -0
- package/dist/studio/samples/support.d.ts +2 -0
- package/dist/studio/samples/support.js +209 -0
- package/dist/studio/scaffold-app.d.ts +22 -0
- package/{src/studio/scaffold-app.ts → dist/studio/scaffold-app.js} +45 -63
- package/dist/studio/scaffold.d.ts +63 -0
- package/dist/studio/scaffold.js +346 -0
- package/dist/studio/screen-suites.d.ts +193 -0
- package/dist/studio/screen-suites.js +297 -0
- package/dist/studio/themes.d.ts +34 -0
- package/dist/studio/themes.js +41 -0
- package/dist/studio/ui-components.d.ts +89 -0
- package/dist/studio/ui-components.generated.d.ts +29 -0
- package/dist/studio/ui-components.generated.js +7319 -0
- package/dist/studio/ui-components.js +673 -0
- package/dist/studio/user-error.d.ts +23 -0
- package/{src/studio/user-error.ts → dist/studio/user-error.js} +10 -13
- package/dist/studio/verify.d.ts +34 -0
- package/dist/studio/verify.js +47 -0
- package/dist/sveltekit/in-memory.d.ts +14 -0
- package/dist/sveltekit/in-memory.js +113 -0
- package/dist/sveltekit/index.d.ts +6 -0
- package/dist/sveltekit/index.js +5 -0
- package/dist/sveltekit/query-plan.d.ts +44 -0
- package/dist/sveltekit/query-plan.js +76 -0
- package/dist/sveltekit/sql-source.d.ts +47 -0
- package/dist/sveltekit/sql-source.js +106 -0
- package/dist/sveltekit/sql.d.ts +48 -0
- package/dist/sveltekit/sql.js +73 -0
- package/dist/sveltekit/transport.d.ts +209 -0
- package/dist/sveltekit/transport.js +219 -0
- package/{src/sveltekit/types.ts → dist/sveltekit/types.d.ts} +8 -11
- package/dist/sveltekit/types.js +1 -0
- package/dist/upgrade-prompt.d.ts +16 -0
- package/dist/upgrade-prompt.js +141 -0
- package/dist/version.d.ts +13 -0
- package/{src/version.ts → dist/version.js} +1 -1
- package/dist/watermark.d.ts +2 -0
- package/dist/watermark.js +146 -0
- package/package.json +28 -26
- package/dist/designer/assets/index-oYok52zd.css +0 -1
- package/dist/designer/assets/src-D-O2F805.css +0 -1
- package/src/SvBoard.dom.test.ts +0 -67
- package/src/SvGridAlerts.dom.test.ts +0 -113
- package/src/SvGridEditPanel.dom.test.ts +0 -320
- package/src/SvRecordDetail.dom.test.ts +0 -137
- package/src/SvSchedule.dom.test.ts +0 -57
- package/src/ai-export-pdf.dom.test.ts +0 -77
- package/src/ai-export-xlsx.dom.test.ts +0 -90
- package/src/ai-export.dom.test.ts +0 -114
- package/src/alerts/alert-engine-attach.ts +0 -165
- package/src/alerts/alert-engine.test.ts +0 -135
- package/src/alerts/alert-engine.ts +0 -260
- package/src/alerts/alert-formats.test.ts +0 -87
- package/src/alerts/alert-formats.ts +0 -77
- package/src/alerts/alert-observer.test.ts +0 -189
- package/src/alerts/alert-observer.ts +0 -208
- package/src/alerts/alert-scheduler.ts +0 -96
- package/src/alerts/alert-storage.test.ts +0 -54
- package/src/alerts/alert-storage.ts +0 -116
- package/src/alerts/alert-store.svelte.ts +0 -80
- package/src/alerts/alert-types.ts +0 -94
- package/src/board.dom.test.ts +0 -941
- package/src/edit-panel.test.ts +0 -322
- package/src/edit-panel.ts +0 -379
- package/src/export-conditional.test.ts +0 -60
- package/src/export-conditional.ts +0 -94
- package/src/export-ooxml.test.ts +0 -152
- package/src/export-ooxml.ts +0 -489
- package/src/export-pdf.test.ts +0 -138
- package/src/export-pdf.ts +0 -245
- package/src/export-print.test.ts +0 -66
- package/src/export-print.ts +0 -132
- package/src/export-serialize.test.ts +0 -56
- package/src/export-xls.ts +0 -199
- package/src/export-xlsx-roundtrip.test.ts +0 -120
- package/src/export-xlsx.test.ts +0 -150
- package/src/export.test.ts +0 -349
- package/src/export.ts +0 -1464
- package/src/expressions/evaluate.test.ts +0 -111
- package/src/expressions/evaluate.ts +0 -237
- package/src/expressions/expression-columns.ts +0 -133
- package/src/expressions/expression-types.ts +0 -84
- package/src/expressions/parse.test.ts +0 -106
- package/src/expressions/parse.ts +0 -610
- package/src/import-automap.test.ts +0 -131
- package/src/import-hardening.test.ts +0 -158
- package/src/import.test.ts +0 -415
- package/src/import.ts +0 -1044
- package/src/index.ts +0 -569
- package/src/install.ts +0 -154
- package/src/license-core.test.ts +0 -23
- package/src/license-core.ts +0 -107
- package/src/license-expiry.test.ts +0 -144
- package/src/license.ts +0 -157
- package/src/master-detail.test.ts +0 -61
- package/src/master-detail.ts +0 -42
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -178
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js +0 -3875
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-ZrPsKxob.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js +0 -21
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-ACqvWGE2.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js +0 -1938
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-D3w5jt92.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js +0 -205
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-CC2V3H0y.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js +0 -18
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-BXP37tAa.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js +0 -264
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-DwubnU5b.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js +0 -697
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-hD7f6PUz.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -134
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -55
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -2
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -46843
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -237
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -2
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -4
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -7
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -4
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -5
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -5
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -5
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -6
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -83
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -559
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -24
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -122
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -2
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -89
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -241
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js +0 -4938
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DBx1SCN6.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js +0 -495
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-gjfpSTFS.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js +0 -190
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-DKoOKg8S.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js +0 -8
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-C0MiR7eR.js.map +0 -1
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js +0 -138
- package/src/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-B6Y7P0Q-.js.map +0 -1
- package/src/pivot-chart.test.ts +0 -86
- package/src/pivot-chart.ts +0 -112
- package/src/pivot-designer.ts +0 -101
- package/src/pivot.test.ts +0 -335
- package/src/pivot.ts +0 -578
- package/src/print.ts +0 -107
- package/src/scheduler-assignments.test.ts +0 -97
- package/src/scheduler-assignments.ts +0 -134
- package/src/scheduler-axis.test.ts +0 -108
- package/src/scheduler-axis.ts +0 -238
- package/src/scheduler-booking.test.ts +0 -57
- package/src/scheduler-config.ts +0 -179
- package/src/scheduler-dependencies.test.ts +0 -155
- package/src/scheduler-dependencies.ts +0 -223
- package/src/scheduler-freebusy.test.ts +0 -41
- package/src/scheduler-heatmap.test.ts +0 -39
- package/src/scheduler-resource-tree.test.ts +0 -84
- package/src/scheduler-resource-tree.ts +0 -107
- package/src/scheduler-slots.test.ts +0 -53
- package/src/scheduler-slots.ts +0 -94
- package/src/scheduler-summary.test.ts +0 -47
- package/src/scheduler-summary.ts +0 -81
- package/src/scheduling.test.ts +0 -194
- package/src/scheduling.ts +0 -293
- package/src/schema-designer.test.ts +0 -121
- package/src/schema-designer.ts +0 -142
- package/src/schema.test.ts +0 -268
- package/src/schema.ts +0 -562
- package/src/smart-shim.ts +0 -107
- package/src/sources/aggregate.test.ts +0 -79
- package/src/sources/aggregate.ts +0 -102
- package/src/sources/auth-supabase.test.ts +0 -80
- package/src/sources/auth-supabase.ts +0 -87
- package/src/sources/dashboard.kpi.test.ts +0 -50
- package/src/sources/dashboard.test.ts +0 -61
- package/src/sources/dashboard.ts +0 -136
- package/src/sources/field-inference.test.ts +0 -60
- package/src/sources/field-inference.ts +0 -63
- package/src/sources/filters.test.ts +0 -58
- package/src/sources/filters.ts +0 -70
- package/src/sources/index.ts +0 -67
- package/src/sources/introspect-supabase.test.ts +0 -112
- package/src/sources/introspect-supabase.ts +0 -139
- package/src/sources/realtime-supabase.test.ts +0 -93
- package/src/sources/realtime-supabase.ts +0 -99
- package/src/sources/relation-lookup.test.ts +0 -99
- package/src/sources/relation-lookup.ts +0 -128
- package/src/sources/rest-adapters.test.ts +0 -95
- package/src/sources/rest-adapters.ts +0 -120
- package/src/sources/rest.test.ts +0 -104
- package/src/sources/rest.ts +0 -129
- package/src/sources/schema-from-columns.test.ts +0 -106
- package/src/sources/schema-from-columns.ts +0 -88
- package/src/sources/supabase.test.ts +0 -110
- package/src/sources/supabase.ts +0 -99
- package/src/sources/with-entity-rules.test.ts +0 -104
- package/src/sources/with-entity-rules.ts +0 -78
- package/src/sources/with-relation-labels.test.ts +0 -75
- package/src/sources/with-relation-labels.ts +0 -73
- package/src/staged-editing.ts +0 -0
- package/src/studio/bug-report.test.ts +0 -101
- package/src/studio/bug-report.ts +0 -165
- package/src/studio/cli.test.ts +0 -187
- package/src/studio/cli.ts +0 -117
- package/src/studio/copilot-core.test.ts +0 -45
- package/src/studio/csv.test.ts +0 -90
- package/src/studio/csv.ts +0 -165
- package/src/studio/db-connect-string.test.ts +0 -94
- package/src/studio/db-connect-string.ts +0 -128
- package/src/studio/deploy-cli.test.ts +0 -56
- package/src/studio/deploy-cli.ts +0 -100
- package/src/studio/emit-project.test.ts +0 -3324
- package/src/studio/emit-project.ts +0 -5377
- package/src/studio/emit-schema.test.ts +0 -111
- package/src/studio/emit-schema.ts +0 -1181
- package/src/studio/index.ts +0 -380
- package/src/studio/init-flow.test.ts +0 -514
- package/src/studio/init-flow.ts +0 -556
- package/src/studio/introspect-db.test.ts +0 -186
- package/src/studio/introspect-db.ts +0 -312
- package/src/studio/introspect-openapi.test.ts +0 -84
- package/src/studio/introspect-openapi.ts +0 -252
- package/src/studio/introspect-prisma.test.ts +0 -99
- package/src/studio/introspect-prisma.ts +0 -175
- package/src/studio/introspect.test.ts +0 -172
- package/src/studio/introspect.ts +0 -310
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -1
- package/src/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -3
- package/src/studio/pipeline.test.ts +0 -42
- package/src/studio/project-robust.test.ts +0 -157
- package/src/studio/project.test.ts +0 -929
- package/src/studio/project.ts +0 -2394
- package/src/studio/sample-data.test.ts +0 -58
- package/src/studio/sample-data.ts +0 -203
- package/src/studio/samples/ats.ts +0 -202
- package/src/studio/samples/clinic.ts +0 -179
- package/src/studio/samples/crm.ts +0 -291
- package/src/studio/samples/datasets.test.ts +0 -84
- package/src/studio/samples/datasets.ts +0 -340
- package/src/studio/samples/ecommerce.ts +0 -187
- package/src/studio/samples/events.ts +0 -201
- package/src/studio/samples/fleet.ts +0 -213
- package/src/studio/samples/gym.ts +0 -215
- package/src/studio/samples/hr.ts +0 -195
- package/src/studio/samples/index.ts +0 -55
- package/src/studio/samples/insurance.ts +0 -229
- package/src/studio/samples/inventory.ts +0 -213
- package/src/studio/samples/invoicing.ts +0 -162
- package/src/studio/samples/library.ts +0 -180
- package/src/studio/samples/live-data.test.ts +0 -99
- package/src/studio/samples/live-data.ts +0 -306
- package/src/studio/samples/projects.ts +0 -212
- package/src/studio/samples/realestate.ts +0 -196
- package/src/studio/samples/restaurant.ts +0 -189
- package/src/studio/samples/samples.test.ts +0 -304
- package/src/studio/samples/school.ts +0 -197
- package/src/studio/samples/seed-floor.test.ts +0 -25
- package/src/studio/samples/shared.ts +0 -237
- package/src/studio/samples/starter.ts +0 -251
- package/src/studio/samples/subscriptions.ts +0 -183
- package/src/studio/samples/support.ts +0 -216
- package/src/studio/scaffold-app.test.ts +0 -91
- package/src/studio/scaffold.test.ts +0 -192
- package/src/studio/scaffold.ts +0 -390
- package/src/studio/screen-suites.test.ts +0 -269
- package/src/studio/screen-suites.ts +0 -448
- package/src/studio/themes.ts +0 -62
- package/src/studio/ui-components-surface.test.ts +0 -185
- package/src/studio/ui-components.generated.ts +0 -7154
- package/src/studio/ui-components.ts +0 -742
- package/src/studio/verify.test.ts +0 -47
- package/src/studio/verify.ts +0 -79
- package/src/sveltekit/in-memory.test.ts +0 -104
- package/src/sveltekit/in-memory.ts +0 -129
- package/src/sveltekit/index.ts +0 -24
- package/src/sveltekit/query-plan.test.ts +0 -109
- package/src/sveltekit/query-plan.ts +0 -125
- package/src/sveltekit/sql-source.test.ts +0 -198
- package/src/sveltekit/sql-source.ts +0 -171
- package/src/sveltekit/sql.test.ts +0 -80
- package/src/sveltekit/sql.ts +0 -131
- package/src/sveltekit/transport-scope.test.ts +0 -125
- package/src/sveltekit/transport.test.ts +0 -201
- package/src/sveltekit/transport.ts +0 -373
- package/src/upgrade-prompt.test.ts +0 -71
- package/src/upgrade-prompt.ts +0 -162
- package/src/version.test.ts +0 -17
- package/src/watermark.test.ts +0 -97
- package/src/watermark.ts +0 -156
- /package/{src → dist}/SvAlertRuleEditor.svelte +0 -0
- /package/{src → dist}/SvAlertsManager.svelte +0 -0
- /package/{src → dist}/SvAlertsPanel.svelte +0 -0
- /package/{src → dist}/SvAuthGate.svelte +0 -0
- /package/{src → dist}/SvBoard.svelte +0 -0
- /package/{src → dist}/SvExportMenu.svelte +0 -0
- /package/{src → dist}/SvFileInput.svelte +0 -0
- /package/{src → dist}/SvGridAlerts.svelte +0 -0
- /package/{src → dist}/SvGridBoard.svelte +0 -0
- /package/{src → dist}/SvGridMasterDetail.svelte +0 -0
- /package/{src → dist}/SvGridScheduler.svelte +0 -0
- /package/{src → dist}/SvImportDialog.svelte +0 -0
- /package/{src → dist}/SvLookupInput.svelte +0 -0
- /package/{src → dist}/SvPivotDesigner.svelte +0 -0
- /package/{src → dist}/SvRecordDetail.svelte +0 -0
- /package/{src → dist}/SvSchedule.svelte +0 -0
- /package/{src → dist}/SvSchemaChart.svelte +0 -0
- /package/{src → dist}/SvSchemaDashboard.svelte +0 -0
- /package/{src → dist}/pdfmake-shims.d.ts +0 -0
- /package/{src → dist}/smart.export.d.ts +0 -0
- /package/{src → dist}/smart.export.js +0 -0
- /package/{src → dist}/studio/HANDLERS-DESIGN.md +0 -0
- /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/_svelte_metadata.json +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/_metadata.json +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/attachments-BOv1rBKp.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/constants-B9vgIdCd.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/dev-T1qbW_qD.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/events-Bo11SfVK.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/flags-X7D4vfrZ.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/hydration-oyUje5i1.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/legacy-client-DeSQgSFm.js.map +0 -0
- /package/{src → dist/studio}/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/package.json +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_animate.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_attachments.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_compiler.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_easing.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_events.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_client.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_disclose-version.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_async.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_legacy.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_flags_tracing.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_internal_server.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_legacy.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_motion.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_reactivity_window.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_server.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_store.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/svelte_transition.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-BbWyXNk1.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/utils-DI_fC7vt.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/validate-Dyr3lQv9.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/version-_9FHH-LF.js.map +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js +0 -0
- /package/{src → dist}/studio/node_modules/.vite/vitest/be65d27ae088a0e03fd8e1331d90b01649464cb6/deps___vitest__/warnings-CUbSPnyP.js.map +0 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma introspection - turn a `schema.prisma` into `EntitySchema`s, the peer
|
|
3
|
+
* of the Drizzle reader in `introspect.ts`. Same contract: a pure, best-effort
|
|
4
|
+
* text parse (no `@prisma/*` dependency, no code execution), funnelled through
|
|
5
|
+
* the shared `buildEntitySchema` so grid + form come out identical to every
|
|
6
|
+
* other introspection path.
|
|
7
|
+
*
|
|
8
|
+
* - `introspectPrisma(source, model?)` -> one model's schema.
|
|
9
|
+
* - `introspectPrismaAll(source)` -> every model, linked (relations
|
|
10
|
+
* resolve their display field from the related model).
|
|
11
|
+
*
|
|
12
|
+
* Scalar types map to entity field types; `@id` marks the key; a missing `?`
|
|
13
|
+
* means required; `enum` blocks become enum fields; and a `@relation(fields:
|
|
14
|
+
* [fk], references: [id])` navigation turns the scalar `fk` column into a
|
|
15
|
+
* relation field with a searchable lookup.
|
|
16
|
+
*/
|
|
17
|
+
import { linkRelationLabels } from '../schema.js';
|
|
18
|
+
import { buildEntitySchema } from '../sources/schema-from-columns.js';
|
|
19
|
+
/** Prisma scalar type -> entity field type. Unknown scalars fall back to text. */
|
|
20
|
+
const PRISMA_TYPE_MAP = {
|
|
21
|
+
Int: 'number',
|
|
22
|
+
BigInt: 'number',
|
|
23
|
+
Float: 'number',
|
|
24
|
+
Decimal: 'number',
|
|
25
|
+
String: 'text',
|
|
26
|
+
Boolean: 'boolean',
|
|
27
|
+
DateTime: 'datetime',
|
|
28
|
+
Json: 'json',
|
|
29
|
+
Bytes: 'text',
|
|
30
|
+
};
|
|
31
|
+
/** Find each `model X { ... }` / `enum X { ... }` block and return its inner body. */
|
|
32
|
+
function blocks(source, keyword) {
|
|
33
|
+
const out = [];
|
|
34
|
+
const re = new RegExp(`${keyword}\\s+(\\w+)\\s*\\{`, 'g');
|
|
35
|
+
let m;
|
|
36
|
+
while ((m = re.exec(source)) !== null) {
|
|
37
|
+
const open = m.index + m[0].length - 1;
|
|
38
|
+
let depth = 0;
|
|
39
|
+
for (let i = open; i < source.length; i++) {
|
|
40
|
+
const ch = source[i];
|
|
41
|
+
if (ch === '{')
|
|
42
|
+
depth++;
|
|
43
|
+
else if (ch === '}' && --depth === 0) {
|
|
44
|
+
out.push({ name: m[1], body: source.slice(open + 1, i) });
|
|
45
|
+
re.lastIndex = i;
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/** Strip comments and blank lines; return meaningful field/attribute lines. */
|
|
53
|
+
function lines(body) {
|
|
54
|
+
return body
|
|
55
|
+
.split('\n')
|
|
56
|
+
.map((l) => l.replace(/\/\/.*$/, '').trim())
|
|
57
|
+
.filter(Boolean);
|
|
58
|
+
}
|
|
59
|
+
/** Enum block -> its member names (one identifier per line, `@map` ignored). */
|
|
60
|
+
function enumValues(body) {
|
|
61
|
+
return lines(body)
|
|
62
|
+
.map((l) => l.match(/^(\w+)/)?.[1])
|
|
63
|
+
.filter((v) => Boolean(v));
|
|
64
|
+
}
|
|
65
|
+
/** Collect `@relation(fields: [fk], references: [ref])` FKs declared in a model. */
|
|
66
|
+
function relationsOf(modelLines) {
|
|
67
|
+
const rels = new Map();
|
|
68
|
+
for (const line of modelLines) {
|
|
69
|
+
const rel = line.match(/@relation\([^)]*fields:\s*\[(\w+)\][^)]*references:\s*\[(\w+)\]/);
|
|
70
|
+
if (!rel)
|
|
71
|
+
continue;
|
|
72
|
+
const type = line.match(/^\w+\s+(\w+)/)?.[1];
|
|
73
|
+
if (type)
|
|
74
|
+
rels.set(rel[1], { table: type, column: rel[2] });
|
|
75
|
+
}
|
|
76
|
+
return rels;
|
|
77
|
+
}
|
|
78
|
+
/** Field names of a composite key (`@@id([a, b])`), else empty. */
|
|
79
|
+
function compositeKey(modelLines) {
|
|
80
|
+
for (const line of modelLines) {
|
|
81
|
+
const m = line.match(/^@@id\(\s*\[([^\]]*)\]/);
|
|
82
|
+
if (m)
|
|
83
|
+
return m[1].split(',').map((s) => s.trim()).filter(Boolean);
|
|
84
|
+
}
|
|
85
|
+
return [];
|
|
86
|
+
}
|
|
87
|
+
/** Parse one model body into neutral columns, skipping navigation fields. */
|
|
88
|
+
function columnsFor(model, modelNames, enums) {
|
|
89
|
+
const modelLines = lines(model.body);
|
|
90
|
+
const relations = relationsOf(modelLines);
|
|
91
|
+
const columns = [];
|
|
92
|
+
for (const line of modelLines) {
|
|
93
|
+
if (line.startsWith('@@'))
|
|
94
|
+
continue; // block attribute (@@id, @@index, @@map, ...)
|
|
95
|
+
const field = line.match(/^(\w+)\s+(\w+)(\[\])?(\?)?(.*)$/);
|
|
96
|
+
if (!field)
|
|
97
|
+
continue;
|
|
98
|
+
const [, name, baseType, list, optional, attrs = ''] = field;
|
|
99
|
+
// A navigation field (points at another model) is virtual - the stored FK
|
|
100
|
+
// scalar column carries the relation. Skip it (its @relation was captured).
|
|
101
|
+
if (modelNames.has(baseType))
|
|
102
|
+
continue;
|
|
103
|
+
const col = { name: name };
|
|
104
|
+
if (enums.has(baseType))
|
|
105
|
+
col.enumValues = enums.get(baseType);
|
|
106
|
+
else
|
|
107
|
+
col.type = PRISMA_TYPE_MAP[baseType] ?? 'text';
|
|
108
|
+
if (/@id\b/.test(attrs))
|
|
109
|
+
col.primaryKey = true;
|
|
110
|
+
// Required = not optional and not a list.
|
|
111
|
+
if (!optional && !list)
|
|
112
|
+
col.required = true;
|
|
113
|
+
const ref = relations.get(name);
|
|
114
|
+
if (ref)
|
|
115
|
+
col.references = { table: ref.table, column: ref.column };
|
|
116
|
+
columns.push(col);
|
|
117
|
+
}
|
|
118
|
+
// Composite key (`@@id([a, b])`): flag the members. buildEntitySchema keys off
|
|
119
|
+
// the first (a join table's screen targets its first key column).
|
|
120
|
+
const composite = compositeKey(modelLines);
|
|
121
|
+
if (composite.length && !columns.some((c) => c.primaryKey)) {
|
|
122
|
+
for (const c of columns)
|
|
123
|
+
if (composite.includes(c.name))
|
|
124
|
+
c.primaryKey = true;
|
|
125
|
+
}
|
|
126
|
+
return columns;
|
|
127
|
+
}
|
|
128
|
+
function parseModels(source) {
|
|
129
|
+
const models = blocks(source, 'model');
|
|
130
|
+
const enums = new Map(blocks(source, 'enum').map((e) => [e.name, enumValues(e.body)]));
|
|
131
|
+
const modelNames = new Set(models.map((m) => m.name));
|
|
132
|
+
return { models, modelNames, enums };
|
|
133
|
+
}
|
|
134
|
+
/** Parse one Prisma model into an `EntitySchema`. Defaults to the first model. */
|
|
135
|
+
export function introspectPrisma(source, model) {
|
|
136
|
+
const { models, modelNames, enums } = parseModels(source);
|
|
137
|
+
if (models.length === 0) {
|
|
138
|
+
throw new Error('introspectPrisma: no `model X { ... }` definition found in source');
|
|
139
|
+
}
|
|
140
|
+
const picked = model ? models.find((m) => m.name === model) : models[0];
|
|
141
|
+
if (!picked)
|
|
142
|
+
throw new Error(`introspectPrisma: model "${model}" not found in source`);
|
|
143
|
+
const columns = columnsFor(picked, modelNames, enums);
|
|
144
|
+
if (columns.length === 0) {
|
|
145
|
+
throw new Error(`introspectPrisma: parsed model "${picked.name}" but found no fields`);
|
|
146
|
+
}
|
|
147
|
+
return buildEntitySchema(picked.name, columns);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Parse **every** model in a `schema.prisma` into a linked set of schemas.
|
|
151
|
+
* Foreign keys become relation fields and `linkRelationLabels` resolves each
|
|
152
|
+
* lookup's display field from the related model.
|
|
153
|
+
*/
|
|
154
|
+
export function introspectPrismaAll(source) {
|
|
155
|
+
const { models, modelNames, enums } = parseModels(source);
|
|
156
|
+
if (models.length === 0) {
|
|
157
|
+
throw new Error('introspectPrisma: no `model X { ... }` definition found in source');
|
|
158
|
+
}
|
|
159
|
+
const schemas = models
|
|
160
|
+
.map((m) => ({ m, columns: columnsFor(m, modelNames, enums) }))
|
|
161
|
+
.filter(({ columns }) => columns.length > 0)
|
|
162
|
+
.map(({ m, columns }) => buildEntitySchema(m.name, columns));
|
|
163
|
+
return linkRelationLabels(schemas);
|
|
164
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Introspection - turn a data source into an `EntitySchema`. Entry points:
|
|
3
|
+
*
|
|
4
|
+
* - `introspectJson(name, rows)` infers fields + types from sample JSON rows.
|
|
5
|
+
* - `introspectDrizzle(source, table?)` parses one Drizzle table (the string
|
|
6
|
+
* contents of a `schema.ts`) into an `EntitySchema`, relations and enums
|
|
7
|
+
* included.
|
|
8
|
+
* - `introspectDrizzleAll(source)` parses **every** table in the file into a
|
|
9
|
+
* linked set of schemas (foreign keys become relation fields, so the whole
|
|
10
|
+
* app scaffolds with working lookups).
|
|
11
|
+
*
|
|
12
|
+
* All are pure and best-effort: the Studio generator (and the AI host) treats
|
|
13
|
+
* the result as a draft the user can refine in `SvSchemaDesigner` before
|
|
14
|
+
* scaffolding code. Nothing imports Drizzle - the reader is a text parse, so
|
|
15
|
+
* there's no dependency and no code execution.
|
|
16
|
+
*/
|
|
17
|
+
import { type EntityFieldType, type EntitySchema } from '../schema.js';
|
|
18
|
+
/** Infer an entity field type from a runtime JSON value. */
|
|
19
|
+
export declare function inferType(value: unknown): EntityFieldType;
|
|
20
|
+
/** Build a schema from sample rows: union of keys, type from the first non-null value. */
|
|
21
|
+
export declare function introspectJson(name: string, rows: ReadonlyArray<Record<string, unknown>>): EntitySchema;
|
|
22
|
+
/**
|
|
23
|
+
* Parse one Drizzle table into an `EntitySchema`. Relations (`.references`) and
|
|
24
|
+
* enums (`pgEnum` / inline) are resolved against the whole file. Best-effort and
|
|
25
|
+
* text based: exotic column types fall back to `text`, to be corrected in the
|
|
26
|
+
* designer.
|
|
27
|
+
*/
|
|
28
|
+
export declare function introspectDrizzle(source: string, table?: string): EntitySchema;
|
|
29
|
+
/**
|
|
30
|
+
* Parse **every** table in a Drizzle schema file into a linked set of schemas.
|
|
31
|
+
* Foreign keys become relation fields and `linkRelationLabels` resolves each
|
|
32
|
+
* lookup's display field from the actual related table - so the whole app
|
|
33
|
+
* scaffolds with working lookups.
|
|
34
|
+
*/
|
|
35
|
+
export declare function introspectDrizzleAll(source: string): EntitySchema[];
|
|
@@ -0,0 +1,306 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Introspection - turn a data source into an `EntitySchema`. Entry points:
|
|
3
|
+
*
|
|
4
|
+
* - `introspectJson(name, rows)` infers fields + types from sample JSON rows.
|
|
5
|
+
* - `introspectDrizzle(source, table?)` parses one Drizzle table (the string
|
|
6
|
+
* contents of a `schema.ts`) into an `EntitySchema`, relations and enums
|
|
7
|
+
* included.
|
|
8
|
+
* - `introspectDrizzleAll(source)` parses **every** table in the file into a
|
|
9
|
+
* linked set of schemas (foreign keys become relation fields, so the whole
|
|
10
|
+
* app scaffolds with working lookups).
|
|
11
|
+
*
|
|
12
|
+
* All are pure and best-effort: the Studio generator (and the AI host) treats
|
|
13
|
+
* the result as a draft the user can refine in `SvSchemaDesigner` before
|
|
14
|
+
* scaffolding code. Nothing imports Drizzle - the reader is a text parse, so
|
|
15
|
+
* there's no dependency and no code execution.
|
|
16
|
+
*/
|
|
17
|
+
import { linkRelationLabels } from '../schema.js';
|
|
18
|
+
import { buildEntitySchema } from '../sources/schema-from-columns.js';
|
|
19
|
+
import { refineFields } from '../sources/field-inference.js';
|
|
20
|
+
/** Infer an entity field type from a runtime JSON value. */
|
|
21
|
+
export function inferType(value) {
|
|
22
|
+
if (typeof value === 'boolean')
|
|
23
|
+
return 'boolean';
|
|
24
|
+
if (typeof value === 'number')
|
|
25
|
+
return 'number';
|
|
26
|
+
if (value !== null && typeof value === 'object')
|
|
27
|
+
return 'json';
|
|
28
|
+
if (typeof value === 'string') {
|
|
29
|
+
if (/^\d{4}-\d{2}-\d{2}T/.test(value))
|
|
30
|
+
return 'datetime';
|
|
31
|
+
if (/^\d{4}-\d{2}-\d{2}$/.test(value))
|
|
32
|
+
return 'dateString';
|
|
33
|
+
return 'text';
|
|
34
|
+
}
|
|
35
|
+
return 'text';
|
|
36
|
+
}
|
|
37
|
+
/** Build a schema from sample rows: union of keys, type from the first non-null value. */
|
|
38
|
+
export function introspectJson(name, rows) {
|
|
39
|
+
const keys = [];
|
|
40
|
+
const seen = new Set();
|
|
41
|
+
for (const row of rows) {
|
|
42
|
+
for (const k of Object.keys(row)) {
|
|
43
|
+
if (!seen.has(k)) {
|
|
44
|
+
seen.add(k);
|
|
45
|
+
keys.push(k);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const fields = keys.map((k) => {
|
|
50
|
+
let type = 'text';
|
|
51
|
+
for (const row of rows) {
|
|
52
|
+
const v = row[k];
|
|
53
|
+
if (v != null) {
|
|
54
|
+
type = inferType(v);
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const field = { field: k, type };
|
|
59
|
+
if (k === 'id') {
|
|
60
|
+
field.primaryKey = true;
|
|
61
|
+
field.readonly = true;
|
|
62
|
+
}
|
|
63
|
+
return field;
|
|
64
|
+
});
|
|
65
|
+
return refineFields({ name, fields });
|
|
66
|
+
}
|
|
67
|
+
/** Drizzle column builder -> entity field type. */
|
|
68
|
+
const DRIZZLE_TYPE_MAP = {
|
|
69
|
+
serial: 'number',
|
|
70
|
+
bigserial: 'number',
|
|
71
|
+
smallserial: 'number',
|
|
72
|
+
integer: 'number',
|
|
73
|
+
int: 'number',
|
|
74
|
+
tinyint: 'number',
|
|
75
|
+
smallint: 'number',
|
|
76
|
+
bigint: 'number',
|
|
77
|
+
numeric: 'number',
|
|
78
|
+
decimal: 'number',
|
|
79
|
+
real: 'number',
|
|
80
|
+
double: 'number',
|
|
81
|
+
doublePrecision: 'number',
|
|
82
|
+
float: 'number',
|
|
83
|
+
boolean: 'boolean',
|
|
84
|
+
text: 'text',
|
|
85
|
+
varchar: 'text',
|
|
86
|
+
char: 'text',
|
|
87
|
+
uuid: 'text',
|
|
88
|
+
timestamp: 'datetime',
|
|
89
|
+
datetime: 'datetime',
|
|
90
|
+
date: 'dateString',
|
|
91
|
+
time: 'text',
|
|
92
|
+
json: 'json',
|
|
93
|
+
jsonb: 'json',
|
|
94
|
+
};
|
|
95
|
+
/** Read string literals out of a `['a', 'b']`-style array fragment. */
|
|
96
|
+
function stringLiterals(fragment) {
|
|
97
|
+
const out = [];
|
|
98
|
+
const re = /['"]([^'"]+)['"]/g;
|
|
99
|
+
let m;
|
|
100
|
+
while ((m = re.exec(fragment)) !== null)
|
|
101
|
+
out.push(m[1]);
|
|
102
|
+
return out;
|
|
103
|
+
}
|
|
104
|
+
/** Find the balanced `{ ... }` body starting at (or after) `from`. Returns body + end index. */
|
|
105
|
+
function balancedObject(source, from) {
|
|
106
|
+
const open = source.indexOf('{', from);
|
|
107
|
+
if (open === -1)
|
|
108
|
+
return { body: '', end: from };
|
|
109
|
+
let depth = 0;
|
|
110
|
+
for (let i = open; i < source.length; i++) {
|
|
111
|
+
const ch = source[i];
|
|
112
|
+
if (ch === '{')
|
|
113
|
+
depth++;
|
|
114
|
+
else if (ch === '}' && --depth === 0)
|
|
115
|
+
return { body: source.slice(open + 1, i), end: i };
|
|
116
|
+
}
|
|
117
|
+
return { body: '', end: source.length };
|
|
118
|
+
}
|
|
119
|
+
/** Split an object body at top-level commas, ignoring commas nested in (), [], {}, or strings. */
|
|
120
|
+
function splitTopLevel(body) {
|
|
121
|
+
const parts = [];
|
|
122
|
+
let depth = 0;
|
|
123
|
+
let start = 0;
|
|
124
|
+
let str = null;
|
|
125
|
+
for (let i = 0; i < body.length; i++) {
|
|
126
|
+
const ch = body[i];
|
|
127
|
+
if (str) {
|
|
128
|
+
if (ch === str && body[i - 1] !== '\\')
|
|
129
|
+
str = null;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (ch === "'" || ch === '"' || ch === '`')
|
|
133
|
+
str = ch;
|
|
134
|
+
else if (ch === '(' || ch === '[' || ch === '{')
|
|
135
|
+
depth++;
|
|
136
|
+
else if (ch === ')' || ch === ']' || ch === '}')
|
|
137
|
+
depth--;
|
|
138
|
+
else if (ch === ',' && depth === 0) {
|
|
139
|
+
parts.push(body.slice(start, i));
|
|
140
|
+
start = i + 1;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const last = body.slice(start);
|
|
144
|
+
if (last.trim())
|
|
145
|
+
parts.push(last);
|
|
146
|
+
return parts;
|
|
147
|
+
}
|
|
148
|
+
/** Locate every `const <var> = xxxTable('name', { ... })` in the source. */
|
|
149
|
+
function findTables(source) {
|
|
150
|
+
const tables = [];
|
|
151
|
+
const re = /const\s+(\w+)\s*=\s*(\w*[Tt]able)\(\s*['"]([^'"]+)['"]\s*,/g;
|
|
152
|
+
let m;
|
|
153
|
+
while ((m = re.exec(source)) !== null) {
|
|
154
|
+
const { body, end } = balancedObject(source, m.index + m[0].length);
|
|
155
|
+
if (body) {
|
|
156
|
+
// Capture the table's second argument (indexes, composite primary key)
|
|
157
|
+
// by scanning to the matching close paren of the `xxxTable(` call.
|
|
158
|
+
let depth = 1;
|
|
159
|
+
let str = null;
|
|
160
|
+
let i = end + 1;
|
|
161
|
+
for (; i < source.length; i++) {
|
|
162
|
+
const ch = source[i];
|
|
163
|
+
if (str) {
|
|
164
|
+
if (ch === str && source[i - 1] !== '\\')
|
|
165
|
+
str = null;
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
if (ch === "'" || ch === '"' || ch === '`')
|
|
169
|
+
str = ch;
|
|
170
|
+
else if (ch === '(')
|
|
171
|
+
depth++;
|
|
172
|
+
else if (ch === ')' && --depth === 0)
|
|
173
|
+
break;
|
|
174
|
+
}
|
|
175
|
+
tables.push({ varName: m[1], name: m[3], body, extras: source.slice(end + 1, i) });
|
|
176
|
+
re.lastIndex = i;
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return tables;
|
|
180
|
+
}
|
|
181
|
+
/** Field names of a Drizzle composite key (`primaryKey({ columns: [t.a, t.b] })`), else empty. */
|
|
182
|
+
function drizzleComposite(extras) {
|
|
183
|
+
const m = extras.match(/primaryKey\(([\s\S]*?)\)/);
|
|
184
|
+
if (!m)
|
|
185
|
+
return [];
|
|
186
|
+
return [...m[1].matchAll(/\.(\w+)/g)].map((x) => x[1]);
|
|
187
|
+
}
|
|
188
|
+
/** Build the whole-file context (table vars + enum declarations) once. */
|
|
189
|
+
function scanContext(source, tables) {
|
|
190
|
+
const varToTable = new Map(tables.map((t) => [t.varName, t.name]));
|
|
191
|
+
const enums = new Map();
|
|
192
|
+
// const roleEnum = pgEnum('role', ['admin', 'user']) (also mysqlEnum / singlestoreEnum)
|
|
193
|
+
const re = /const\s+(\w+)\s*=\s*(?:pg|mysql|singlestore)Enum\(\s*['"][^'"]+['"]\s*,\s*\[([^\]]*)\]/g;
|
|
194
|
+
let m;
|
|
195
|
+
while ((m = re.exec(source)) !== null)
|
|
196
|
+
enums.set(m[1], stringLiterals(m[2]));
|
|
197
|
+
return { varToTable, enums };
|
|
198
|
+
}
|
|
199
|
+
/** Parse one column entry (`key: builder(args)<modifiers>`) into a neutral column. */
|
|
200
|
+
function parseColumn(entry, ctx) {
|
|
201
|
+
const head = entry.match(/^\s*["']?(\w+)["']?\s*:\s*(\w+)\s*\(/);
|
|
202
|
+
if (!head)
|
|
203
|
+
return null;
|
|
204
|
+
const name = head[1];
|
|
205
|
+
const builder = head[2];
|
|
206
|
+
// Balanced args of the builder call, then the trailing modifier chain.
|
|
207
|
+
const argStart = head.index + head[0].length - 1;
|
|
208
|
+
let depth = 0;
|
|
209
|
+
let argEnd = argStart;
|
|
210
|
+
for (let i = argStart; i < entry.length; i++) {
|
|
211
|
+
const ch = entry[i];
|
|
212
|
+
if (ch === '(')
|
|
213
|
+
depth++;
|
|
214
|
+
else if (ch === ')' && --depth === 0) {
|
|
215
|
+
argEnd = i;
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const args = entry.slice(argStart + 1, argEnd);
|
|
220
|
+
const modifiers = entry.slice(argEnd + 1);
|
|
221
|
+
const col = { name };
|
|
222
|
+
// Capture the DB column name (the builder's first string arg). When it differs
|
|
223
|
+
// from the property key, record it so SQL adapters use the real column.
|
|
224
|
+
const dbColumn = stringLiterals(args)[0];
|
|
225
|
+
if (dbColumn && dbColumn !== name)
|
|
226
|
+
col.dbColumn = dbColumn;
|
|
227
|
+
// Enum: a `pgEnum` builder var, an inline `mysqlEnum('col', ['a','b'])`, or a
|
|
228
|
+
// `{ enum: ['a','b'] }` option on a text/varchar column.
|
|
229
|
+
const inlineEnum = args.match(/enum\s*:\s*\[([^\]]*)\]/);
|
|
230
|
+
if (ctx.enums.has(builder))
|
|
231
|
+
col.enumValues = ctx.enums.get(builder);
|
|
232
|
+
else if (inlineEnum)
|
|
233
|
+
col.enumValues = stringLiterals(inlineEnum[1]);
|
|
234
|
+
else if (/enum$/i.test(builder)) {
|
|
235
|
+
const arr = args.match(/\[([^\]]*)\]/);
|
|
236
|
+
if (arr)
|
|
237
|
+
col.enumValues = stringLiterals(arr[1]);
|
|
238
|
+
}
|
|
239
|
+
if (!col.enumValues)
|
|
240
|
+
col.type = DRIZZLE_TYPE_MAP[builder] ?? 'text';
|
|
241
|
+
if (/\.primaryKey\s*\(/.test(modifiers))
|
|
242
|
+
col.primaryKey = true;
|
|
243
|
+
if (/\.notNull\s*\(/.test(modifiers))
|
|
244
|
+
col.required = true;
|
|
245
|
+
// Foreign key: `.references(() => otherTable.col)` -> a relation field.
|
|
246
|
+
const ref = modifiers.match(/\.references\(\s*\(\)\s*=>\s*(\w+)\.(\w+)/);
|
|
247
|
+
if (ref) {
|
|
248
|
+
col.references = { table: ctx.varToTable.get(ref[1]) ?? ref[1], column: ref[2] };
|
|
249
|
+
}
|
|
250
|
+
return col;
|
|
251
|
+
}
|
|
252
|
+
/** Assemble the neutral column list for one table. */
|
|
253
|
+
function columnsFor(table, ctx) {
|
|
254
|
+
const columns = splitTopLevel(table.body)
|
|
255
|
+
.map((entry) => parseColumn(entry, ctx))
|
|
256
|
+
.filter((c) => c !== null);
|
|
257
|
+
// Composite key (`primaryKey({ columns: [t.a, t.b] })` in the table's 2nd arg):
|
|
258
|
+
// flag the members. buildEntitySchema keys off the first (a join table's screen
|
|
259
|
+
// targets its first key column).
|
|
260
|
+
const composite = drizzleComposite(table.extras);
|
|
261
|
+
if (composite.length && !columns.some((c) => c.primaryKey)) {
|
|
262
|
+
for (const c of columns)
|
|
263
|
+
if (composite.includes(c.name))
|
|
264
|
+
c.primaryKey = true;
|
|
265
|
+
}
|
|
266
|
+
return columns;
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Parse one Drizzle table into an `EntitySchema`. Relations (`.references`) and
|
|
270
|
+
* enums (`pgEnum` / inline) are resolved against the whole file. Best-effort and
|
|
271
|
+
* text based: exotic column types fall back to `text`, to be corrected in the
|
|
272
|
+
* designer.
|
|
273
|
+
*/
|
|
274
|
+
export function introspectDrizzle(source, table) {
|
|
275
|
+
const tables = findTables(source);
|
|
276
|
+
if (tables.length === 0) {
|
|
277
|
+
throw new Error('introspectDrizzle: no `xxxTable("name", { ... })` definition found in source');
|
|
278
|
+
}
|
|
279
|
+
const picked = table ? tables.find((t) => t.name === table || t.varName === table) : tables[0];
|
|
280
|
+
if (!picked)
|
|
281
|
+
throw new Error(`introspectDrizzle: table "${table}" not found in source`);
|
|
282
|
+
const ctx = scanContext(source, tables);
|
|
283
|
+
const columns = columnsFor(picked, ctx);
|
|
284
|
+
if (columns.length === 0) {
|
|
285
|
+
throw new Error(`introspectDrizzle: parsed table "${picked.name}" but found no fields`);
|
|
286
|
+
}
|
|
287
|
+
return buildEntitySchema(picked.name, columns);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Parse **every** table in a Drizzle schema file into a linked set of schemas.
|
|
291
|
+
* Foreign keys become relation fields and `linkRelationLabels` resolves each
|
|
292
|
+
* lookup's display field from the actual related table - so the whole app
|
|
293
|
+
* scaffolds with working lookups.
|
|
294
|
+
*/
|
|
295
|
+
export function introspectDrizzleAll(source) {
|
|
296
|
+
const tables = findTables(source);
|
|
297
|
+
if (tables.length === 0) {
|
|
298
|
+
throw new Error('introspectDrizzle: no `xxxTable("name", { ... })` definition found in source');
|
|
299
|
+
}
|
|
300
|
+
const ctx = scanContext(source, tables);
|
|
301
|
+
const schemas = tables
|
|
302
|
+
.map((t) => ({ t, columns: columnsFor(t, ctx) }))
|
|
303
|
+
.filter(({ columns }) => columns.length > 0)
|
|
304
|
+
.map(({ t, columns }) => buildEntitySchema(t.name, columns));
|
|
305
|
+
return linkRelationLabels(schemas);
|
|
306
|
+
}
|