@libredb/studio 0.9.7 → 0.9.12
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/chunk-34YQUUCM.mjs +319 -0
- package/dist/chunk-34YQUUCM.mjs.map +1 -0
- package/dist/chunk-4LVB3K53.mjs +37 -0
- package/dist/chunk-4LVB3K53.mjs.map +1 -0
- package/dist/chunk-6DRZXXNT.mjs +100 -0
- package/dist/chunk-6DRZXXNT.mjs.map +1 -0
- package/dist/chunk-CZVV3JJB.mjs +160 -0
- package/dist/chunk-CZVV3JJB.mjs.map +1 -0
- package/dist/chunk-D4WVWWWF.js +332 -0
- package/dist/chunk-D4WVWWWF.js.map +1 -0
- package/dist/chunk-DY3KXE44.mjs +3 -0
- package/dist/chunk-DY3KXE44.mjs.map +1 -0
- package/dist/chunk-DZ2UB3C6.mjs +6679 -0
- package/dist/chunk-DZ2UB3C6.mjs.map +1 -0
- package/dist/chunk-FYSE52VB.js +242 -0
- package/dist/chunk-FYSE52VB.js.map +1 -0
- package/dist/chunk-G4WYE6TI.js +4 -0
- package/dist/chunk-G4WYE6TI.js.map +1 -0
- package/dist/chunk-JOGLIOFO.js +1310 -0
- package/dist/chunk-JOGLIOFO.js.map +1 -0
- package/dist/chunk-JZO5KRZN.js +165 -0
- package/dist/chunk-JZO5KRZN.js.map +1 -0
- package/dist/chunk-KV356UXJ.js +253 -0
- package/dist/chunk-KV356UXJ.js.map +1 -0
- package/dist/chunk-PPODO6HX.mjs +237 -0
- package/dist/chunk-PPODO6HX.mjs.map +1 -0
- package/dist/chunk-PTIRB2JO.js +258 -0
- package/dist/chunk-PTIRB2JO.js.map +1 -0
- package/dist/chunk-Q6LRDBK7.js +42 -0
- package/dist/chunk-Q6LRDBK7.js.map +1 -0
- package/dist/chunk-QJP5FZRY.mjs +255 -0
- package/dist/chunk-QJP5FZRY.mjs.map +1 -0
- package/dist/chunk-R3POCJK6.mjs +248 -0
- package/dist/chunk-R3POCJK6.mjs.map +1 -0
- package/dist/chunk-RBVDMLFV.js +6747 -0
- package/dist/chunk-RBVDMLFV.js.map +1 -0
- package/dist/chunk-RCQB4FCE.js +186 -0
- package/dist/chunk-RCQB4FCE.js.map +1 -0
- package/dist/chunk-SR5DRGBX.mjs +174 -0
- package/dist/chunk-SR5DRGBX.mjs.map +1 -0
- package/dist/chunk-VLCRUZX7.js +102 -0
- package/dist/chunk-VLCRUZX7.js.map +1 -0
- package/dist/chunk-VWVRUCQO.mjs +1289 -0
- package/dist/chunk-VWVRUCQO.mjs.map +1 -0
- package/dist/components.d.mts +273 -0
- package/dist/components.d.ts +273 -0
- package/dist/components.js +59 -0
- package/dist/components.js.map +1 -0
- package/dist/components.mjs +6 -0
- package/dist/components.mjs.map +1 -0
- package/dist/custom-BNDOYC5P.js +134 -0
- package/dist/custom-BNDOYC5P.js.map +1 -0
- package/dist/custom-S2EKFMP3.mjs +132 -0
- package/dist/custom-S2EKFMP3.mjs.map +1 -0
- package/dist/gemini-4ASHNK4H.js +81 -0
- package/dist/gemini-4ASHNK4H.js.map +1 -0
- package/dist/gemini-C5RBLQEJ.mjs +79 -0
- package/dist/gemini-C5RBLQEJ.mjs.map +1 -0
- package/dist/index.d.mts +6 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +95 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +10 -0
- package/dist/index.mjs.map +1 -0
- package/dist/mongodb-XMZEZA4A.mjs +748 -0
- package/dist/mongodb-XMZEZA4A.mjs.map +1 -0
- package/dist/mongodb-YQJJTLX3.js +750 -0
- package/dist/mongodb-YQJJTLX3.js.map +1 -0
- package/dist/mssql-PMOU4D36.js +916 -0
- package/dist/mssql-PMOU4D36.js.map +1 -0
- package/{src/lib/db/providers/sql/mssql.ts → dist/mssql-ZH5VP2C5.mjs} +268 -423
- package/dist/mssql-ZH5VP2C5.mjs.map +1 -0
- package/{src/lib/db/providers/sql/mysql.ts → dist/mysql-I3WJQXN2.mjs} +277 -428
- package/dist/mysql-I3WJQXN2.mjs.map +1 -0
- package/dist/mysql-Y3MSA5QY.js +833 -0
- package/dist/mysql-Y3MSA5QY.js.map +1 -0
- package/dist/ollama-26BYLVEV.mjs +115 -0
- package/dist/ollama-26BYLVEV.mjs.map +1 -0
- package/dist/ollama-HVWAGKQC.js +117 -0
- package/dist/ollama-HVWAGKQC.js.map +1 -0
- package/dist/openai-4U56KPG7.mjs +111 -0
- package/dist/openai-4U56KPG7.mjs.map +1 -0
- package/dist/openai-AK3R37BS.js +113 -0
- package/dist/openai-AK3R37BS.js.map +1 -0
- package/dist/oracle-L6VEAVXO.js +917 -0
- package/dist/oracle-L6VEAVXO.js.map +1 -0
- package/{src/lib/db/providers/sql/oracle.ts → dist/oracle-P2G7T4P4.mjs} +321 -454
- package/dist/oracle-P2G7T4P4.mjs.map +1 -0
- package/{src/lib/db/providers/sql/postgres.ts → dist/postgres-O5KOQUVP.mjs} +261 -471
- package/dist/postgres-O5KOQUVP.mjs.map +1 -0
- package/dist/postgres-RLCWNFFX.js +971 -0
- package/dist/postgres-RLCWNFFX.js.map +1 -0
- package/dist/providers.d.mts +149 -0
- package/dist/providers.d.ts +149 -0
- package/dist/providers.js +44 -0
- package/dist/providers.js.map +1 -0
- package/dist/providers.mjs +7 -0
- package/dist/providers.mjs.map +1 -0
- package/dist/redis-4WMQOVLX.mjs +435 -0
- package/dist/redis-4WMQOVLX.mjs.map +1 -0
- package/dist/redis-QVQ6YU62.js +441 -0
- package/dist/redis-QVQ6YU62.js.map +1 -0
- package/dist/sqlite-4I2P2OGQ.js +554 -0
- package/dist/sqlite-4I2P2OGQ.js.map +1 -0
- package/dist/sqlite-OA4YJX5S.mjs +531 -0
- package/dist/sqlite-OA4YJX5S.mjs.map +1 -0
- package/dist/types-BJvJfxSY.d.mts +141 -0
- package/dist/types-BJvJfxSY.d.ts +141 -0
- package/dist/types-ClAg_v5k.d.mts +343 -0
- package/dist/types-Der_X8E8.d.ts +343 -0
- package/dist/types.d.mts +2 -0
- package/dist/types.d.ts +2 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/types.mjs +3 -0
- package/dist/types.mjs.map +1 -0
- package/dist/workspace.d.mts +80 -0
- package/dist/workspace.d.ts +80 -0
- package/dist/workspace.js +4182 -0
- package/dist/workspace.js.map +1 -0
- package/dist/workspace.mjs +4155 -0
- package/dist/workspace.mjs.map +1 -0
- package/package.json +60 -5
- package/.claude/settings.local.json +0 -127
- package/.cursorrules +0 -426
- package/.devin/wiki.json +0 -143
- package/.dockerignore +0 -80
- package/.env.example +0 -159
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -49
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -29
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -57
- package/.github/workflows/ci.yml +0 -185
- package/.github/workflows/codeql.yml +0 -57
- package/.github/workflows/docker-build-push.yml +0 -118
- package/.github/workflows/helm-release.yml +0 -113
- package/CLAUDE.md +0 -265
- package/CODE_OF_CONDUCT.md +0 -124
- package/CONTRIBUTING.md +0 -154
- package/Dockerfile +0 -73
- package/SECURITY.md +0 -107
- package/artifacthub-repo.yml +0 -4
- package/bun.lock +0 -1714
- package/bunfig.toml +0 -3
- package/charts/libredb-studio/.helmignore +0 -11
- package/charts/libredb-studio/Chart.lock +0 -6
- package/charts/libredb-studio/Chart.yaml +0 -50
- package/charts/libredb-studio/README.md +0 -206
- package/charts/libredb-studio/templates/NOTES.txt +0 -59
- package/charts/libredb-studio/templates/_helpers.tpl +0 -135
- package/charts/libredb-studio/templates/configmap.yaml +0 -37
- package/charts/libredb-studio/templates/deployment.yaml +0 -184
- package/charts/libredb-studio/templates/hpa.yaml +0 -32
- package/charts/libredb-studio/templates/ingress.yaml +0 -41
- package/charts/libredb-studio/templates/networkpolicy.yaml +0 -50
- package/charts/libredb-studio/templates/pdb.yaml +0 -18
- package/charts/libredb-studio/templates/pvc.yaml +0 -23
- package/charts/libredb-studio/templates/secret.yaml +0 -30
- package/charts/libredb-studio/templates/seed-configmap.yaml +0 -11
- package/charts/libredb-studio/templates/service.yaml +0 -22
- package/charts/libredb-studio/templates/serviceaccount.yaml +0 -13
- package/charts/libredb-studio/values.schema.json +0 -246
- package/charts/libredb-studio/values.yaml +0 -286
- package/components.json +0 -22
- package/conductor/code_styleguides/typescript.md +0 -43
- package/conductor/product-guidelines.md +0 -43
- package/conductor/product.md +0 -3
- package/conductor/setup_state.json +0 -1
- package/conductor/tech-stack.md +0 -39
- package/conductor/tracks/enhance_postgres_monitoring_20251227/metadata.json +0 -8
- package/conductor/tracks/enhance_postgres_monitoring_20251227/plan.md +0 -44
- package/conductor/tracks/enhance_postgres_monitoring_20251227/spec.md +0 -31
- package/conductor/tracks.md +0 -8
- package/conductor/workflow.md +0 -333
- package/database-compose.yml +0 -55
- package/docker/postgres-init/01-extensions.sql +0 -10
- package/docker/postgres-init/02-sample-data.sql +0 -585
- package/docker/postgres.yml +0 -68
- package/docker-compose.yml +0 -38
- package/docs/AI_PLAN.md +0 -74
- package/docs/API_DOCS.md +0 -875
- package/docs/ARCHITECTURE.md +0 -218
- package/docs/DATABASE_PROVIDERS.md +0 -358
- package/docs/FEATURES.md +0 -116
- package/docs/HELM_CHART.md +0 -252
- package/docs/LOGIN_PAGE.md +0 -178
- package/docs/MONACO_EDITOR_PERFORMANCE.md +0 -315
- package/docs/OIDC_ARCH.md +0 -681
- package/docs/OIDC_SETUP.md +0 -322
- package/docs/POSTGRES_METRICS.md +0 -516
- package/docs/QUERY_OPTIMIZATION.md +0 -370
- package/docs/SEED_CONNECTIONS.md +0 -468
- package/docs/SQL_ALIAS_COMPLETION.md +0 -190
- package/docs/STORAGE_ARCHITECTURE.md +0 -565
- package/docs/STORAGE_QUICK_SETUP.md +0 -419
- package/docs/TECHNICAL_PLAN.md +0 -36
- package/docs/THEMING.md +0 -345
- package/docs/adding-a-new-database-provider.md +0 -642
- package/docs/backlogs/000-PLATFORM_DATA_SYNC_DATABASE.md +0 -360
- package/docs/backlogs/001-INLINE_DATA_EDITING.md +0 -118
- package/docs/backlogs/002-DATA_IMPORT.md +0 -215
- package/docs/backlogs/003-QUERY_TIME_MACHINE.md +0 -183
- package/docs/backlogs/004-AI_DATA_STORYTELLER.md +0 -292
- package/docs/backlogs/005-QUERY_PLAYGROUND.md +0 -352
- package/docs/backlogs/006-DATA_MASKING.md +0 -418
- package/docs/enterprise-features.md +0 -718
- package/docs/kubernetes-helm-chart-artifacthub-plan.md +0 -803
- package/docs/medium-koyeb-article-en.md +0 -215
- package/docs/plans/test-plans.md +0 -445
- package/docs/releases/RELEASE.V0.3.0.md +0 -22
- package/docs/releases/RELEASE.V0.4.0.md +0 -154
- package/docs/releases/RELEASE.V0.5.0.md +0 -252
- package/docs/releases/RELEASE_v0.5.6.md +0 -145
- package/docs/releases/RELEASE_v0.6.1.md +0 -303
- package/docs/releases/RELEASE_v0.6.7.md +0 -292
- package/docs/releases/RELEASE_v0.7.0.md +0 -332
- package/docs/releases/RELEASE_v0.8.0.md +0 -521
- package/docs/sampledb/titanic.sql +0 -1379
- package/docs/superpowers/plans/2026-03-25-seed-connections.md +0 -1362
- package/docs/superpowers/specs/2026-03-25-seed-connections-design.md +0 -590
- package/e2e/admin-dashboard.spec.ts +0 -64
- package/e2e/connection-management.spec.ts +0 -58
- package/e2e/export.spec.ts +0 -34
- package/e2e/login.spec.ts +0 -85
- package/e2e/query-execution.spec.ts +0 -35
- package/e2e/tab-management.spec.ts +0 -64
- package/eslint.config.mjs +0 -28
- package/fly.toml +0 -43
- package/next.config.ts +0 -32
- package/playwright.config.ts +0 -34
- package/postcss.config.mjs +0 -7
- package/public/favicon-32x32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/file.svg +0 -1
- package/public/globe.svg +0 -1
- package/public/logo.svg +0 -32
- package/public/next.svg +0 -1
- package/public/screenshots/code-generator.png +0 -0
- package/public/screenshots/connection-modal.png +0 -0
- package/public/screenshots/data-profiler.png +0 -0
- package/public/screenshots/erd-diagram.png +0 -0
- package/public/screenshots/hero-editor.png +0 -0
- package/public/screenshots/nl2sql.png +0 -0
- package/public/vercel.svg +0 -1
- package/public/window.svg +0 -1
- package/render.yaml +0 -58
- package/scripts/merge-lcov.mjs +0 -239
- package/sonar-project.properties +0 -16
- package/src/app/admin/error.tsx +0 -46
- package/src/app/admin/page.tsx +0 -10
- package/src/app/api/admin/audit/route.ts +0 -52
- package/src/app/api/admin/fleet-health/route.ts +0 -81
- package/src/app/api/ai/autopilot/route.ts +0 -105
- package/src/app/api/ai/chat/route.ts +0 -132
- package/src/app/api/ai/describe-schema/route.ts +0 -52
- package/src/app/api/ai/explain/route.ts +0 -86
- package/src/app/api/ai/impact/route.ts +0 -97
- package/src/app/api/ai/index-advisor/route.ts +0 -98
- package/src/app/api/ai/nl2sql/route.ts +0 -87
- package/src/app/api/ai/query-safety/route.ts +0 -87
- package/src/app/api/auth/login/route.ts +0 -62
- package/src/app/api/auth/logout/route.ts +0 -25
- package/src/app/api/auth/me/route.ts +0 -10
- package/src/app/api/auth/oidc/callback/route.ts +0 -82
- package/src/app/api/auth/oidc/login/route.ts +0 -43
- package/src/app/api/connections/managed/route.ts +0 -35
- package/src/app/api/db/cancel/route.ts +0 -42
- package/src/app/api/db/disconnect/route.ts +0 -28
- package/src/app/api/db/health/route.ts +0 -49
- package/src/app/api/db/maintenance/route.ts +0 -72
- package/src/app/api/db/monitoring/route.ts +0 -62
- package/src/app/api/db/multi-query/route.ts +0 -116
- package/src/app/api/db/pool-stats/route.ts +0 -37
- package/src/app/api/db/profile/route.ts +0 -144
- package/src/app/api/db/provider-meta/route.ts +0 -49
- package/src/app/api/db/query/route.ts +0 -50
- package/src/app/api/db/schema/route.ts +0 -47
- package/src/app/api/db/schema-snapshot/route.ts +0 -42
- package/src/app/api/db/test-connection/route.ts +0 -55
- package/src/app/api/db/transaction/route.ts +0 -111
- package/src/app/api/storage/[collection]/route.ts +0 -67
- package/src/app/api/storage/config/route.ts +0 -17
- package/src/app/api/storage/migrate/route.ts +0 -45
- package/src/app/api/storage/route.ts +0 -32
- package/src/app/error.tsx +0 -49
- package/src/app/global-error.tsx +0 -55
- package/src/app/globals.css +0 -146
- package/src/app/icon.svg +0 -42
- package/src/app/layout.tsx +0 -34
- package/src/app/login/login-form.tsx +0 -301
- package/src/app/login/page.tsx +0 -11
- package/src/app/monitoring/page.tsx +0 -8
- package/src/app/not-found.tsx +0 -29
- package/src/app/page.tsx +0 -5
- package/src/components/AIAutopilotPanel.tsx +0 -238
- package/src/components/CodeGenerator.tsx +0 -271
- package/src/components/CommandPalette.tsx +0 -227
- package/src/components/ConnectionModal.tsx +0 -759
- package/src/components/CreateTableModal.tsx +0 -281
- package/src/components/DataCharts.tsx +0 -962
- package/src/components/DataImportModal.tsx +0 -582
- package/src/components/DataProfiler.tsx +0 -335
- package/src/components/DatabaseDocs.tsx +0 -251
- package/src/components/MaskingSettings.tsx +0 -414
- package/src/components/MobileNav.tsx +0 -50
- package/src/components/NL2SQLPanel.tsx +0 -281
- package/src/components/PivotTable.tsx +0 -257
- package/src/components/QueryEditor.tsx +0 -760
- package/src/components/QueryHistory.tsx +0 -344
- package/src/components/QuerySafetyDialog.tsx +0 -290
- package/src/components/ResultsGrid.tsx +0 -644
- package/src/components/SaveQueryModal.tsx +0 -104
- package/src/components/SavedQueries.tsx +0 -128
- package/src/components/SchemaDiagram.tsx +0 -473
- package/src/components/SchemaDiff.tsx +0 -473
- package/src/components/SnapshotTimeline.tsx +0 -116
- package/src/components/Studio.tsx +0 -639
- package/src/components/TestDataGenerator.tsx +0 -261
- package/src/components/VisualExplain.tsx +0 -820
- package/src/components/admin/AdminDashboard.tsx +0 -163
- package/src/components/admin/tabs/AuditTab.tsx +0 -531
- package/src/components/admin/tabs/MonitoringEmbed.tsx +0 -11
- package/src/components/admin/tabs/OperationsTab.tsx +0 -646
- package/src/components/admin/tabs/OverviewTab.tsx +0 -1328
- package/src/components/admin/tabs/SecurityTab.tsx +0 -284
- package/src/components/community-section.tsx +0 -92
- package/src/components/icons/db-icons.tsx +0 -84
- package/src/components/libredb-logo.tsx +0 -61
- package/src/components/monitoring/MonitoringDashboard.tsx +0 -345
- package/src/components/monitoring/tabs/MetricChart.tsx +0 -82
- package/src/components/monitoring/tabs/OverviewTab.tsx +0 -263
- package/src/components/monitoring/tabs/PerformanceTab.tsx +0 -254
- package/src/components/monitoring/tabs/PoolTab.tsx +0 -174
- package/src/components/monitoring/tabs/QueriesTab.tsx +0 -287
- package/src/components/monitoring/tabs/SessionsTab.tsx +0 -316
- package/src/components/monitoring/tabs/StorageTab.tsx +0 -335
- package/src/components/monitoring/tabs/TablesTab.tsx +0 -300
- package/src/components/results-grid/ResultCard.tsx +0 -111
- package/src/components/results-grid/RowDetailSheet.tsx +0 -178
- package/src/components/results-grid/StatsBar.tsx +0 -201
- package/src/components/results-grid/index.ts +0 -1
- package/src/components/results-grid/utils.ts +0 -23
- package/src/components/schema-explorer/ColumnList.tsx +0 -53
- package/src/components/schema-explorer/SchemaExplorer.tsx +0 -182
- package/src/components/schema-explorer/TableItem.tsx +0 -210
- package/src/components/schema-explorer/index.ts +0 -1
- package/src/components/sidebar/ConnectionItem.tsx +0 -105
- package/src/components/sidebar/ConnectionsList.tsx +0 -62
- package/src/components/sidebar/Sidebar.tsx +0 -130
- package/src/components/sidebar/index.ts +0 -2
- package/src/components/studio/BottomPanel.tsx +0 -286
- package/src/components/studio/QueryToolbar.tsx +0 -180
- package/src/components/studio/StudioDesktopHeader.tsx +0 -114
- package/src/components/studio/StudioMobileHeader.tsx +0 -340
- package/src/components/studio/StudioTabBar.tsx +0 -82
- package/src/components/studio/index.ts +0 -5
- package/src/components/ui/accordion.tsx +0 -66
- package/src/components/ui/alert-dialog.tsx +0 -157
- package/src/components/ui/alert.tsx +0 -66
- package/src/components/ui/aspect-ratio.tsx +0 -11
- package/src/components/ui/avatar.tsx +0 -53
- package/src/components/ui/badge.tsx +0 -46
- package/src/components/ui/breadcrumb.tsx +0 -109
- package/src/components/ui/button-group.tsx +0 -83
- package/src/components/ui/button.tsx +0 -60
- package/src/components/ui/calendar.tsx +0 -216
- package/src/components/ui/card.tsx +0 -92
- package/src/components/ui/carousel.tsx +0 -241
- package/src/components/ui/chart.tsx +0 -357
- package/src/components/ui/checkbox.tsx +0 -32
- package/src/components/ui/collapsible.tsx +0 -33
- package/src/components/ui/command.tsx +0 -184
- package/src/components/ui/context-menu.tsx +0 -252
- package/src/components/ui/dialog.tsx +0 -143
- package/src/components/ui/drawer.tsx +0 -135
- package/src/components/ui/dropdown-menu.tsx +0 -257
- package/src/components/ui/empty.tsx +0 -104
- package/src/components/ui/field.tsx +0 -248
- package/src/components/ui/form.tsx +0 -167
- package/src/components/ui/hover-card.tsx +0 -44
- package/src/components/ui/input-group.tsx +0 -170
- package/src/components/ui/input-otp.tsx +0 -77
- package/src/components/ui/input.tsx +0 -21
- package/src/components/ui/item.tsx +0 -193
- package/src/components/ui/kbd.tsx +0 -28
- package/src/components/ui/label.tsx +0 -24
- package/src/components/ui/menubar.tsx +0 -276
- package/src/components/ui/navigation-menu.tsx +0 -168
- package/src/components/ui/pagination.tsx +0 -127
- package/src/components/ui/popover.tsx +0 -48
- package/src/components/ui/progress.tsx +0 -31
- package/src/components/ui/radio-group.tsx +0 -45
- package/src/components/ui/resizable.tsx +0 -56
- package/src/components/ui/scroll-area.tsx +0 -58
- package/src/components/ui/select.tsx +0 -187
- package/src/components/ui/separator.tsx +0 -28
- package/src/components/ui/sheet.tsx +0 -139
- package/src/components/ui/sidebar.tsx +0 -726
- package/src/components/ui/skeleton.tsx +0 -13
- package/src/components/ui/slider.tsx +0 -63
- package/src/components/ui/sonner.tsx +0 -40
- package/src/components/ui/spinner.tsx +0 -16
- package/src/components/ui/switch.tsx +0 -31
- package/src/components/ui/table.tsx +0 -116
- package/src/components/ui/tabs.tsx +0 -66
- package/src/components/ui/textarea.tsx +0 -18
- package/src/components/ui/toggle-group.tsx +0 -83
- package/src/components/ui/toggle.tsx +0 -47
- package/src/components/ui/tooltip.tsx +0 -61
- package/src/exports/components.ts +0 -15
- package/src/exports/index.ts +0 -4
- package/src/exports/providers.ts +0 -4
- package/src/exports/types.ts +0 -26
- package/src/hooks/use-ai-chat.ts +0 -182
- package/src/hooks/use-all-connections.ts +0 -66
- package/src/hooks/use-api-call.ts +0 -71
- package/src/hooks/use-auth.ts +0 -51
- package/src/hooks/use-connection-form.ts +0 -349
- package/src/hooks/use-connection-manager.ts +0 -169
- package/src/hooks/use-connection-payload.ts +0 -15
- package/src/hooks/use-inline-editing.ts +0 -109
- package/src/hooks/use-mobile.ts +0 -20
- package/src/hooks/use-monitoring-data.ts +0 -270
- package/src/hooks/use-provider-metadata.ts +0 -62
- package/src/hooks/use-query-execution.ts +0 -478
- package/src/hooks/use-storage-sync.ts +0 -259
- package/src/hooks/use-tab-manager.ts +0 -231
- package/src/hooks/use-toast.ts +0 -20
- package/src/hooks/use-transaction-control.ts +0 -64
- package/src/lib/api/error-codes.ts +0 -30
- package/src/lib/api/errors.ts +0 -236
- package/src/lib/api/with-error-handler.ts +0 -41
- package/src/lib/audit.ts +0 -105
- package/src/lib/auth.ts +0 -87
- package/src/lib/connection-string-parser.ts +0 -172
- package/src/lib/data-masking.ts +0 -385
- package/src/lib/db/base-provider.ts +0 -325
- package/src/lib/db/errors.ts +0 -317
- package/src/lib/db/factory.ts +0 -324
- package/src/lib/db/index.ts +0 -123
- package/src/lib/db/providers/document/index.ts +0 -6
- package/src/lib/db/providers/document/mongodb.ts +0 -992
- package/src/lib/db/providers/keyvalue/redis.ts +0 -554
- package/src/lib/db/providers/sql/index.ts +0 -11
- package/src/lib/db/providers/sql/sql-base.ts +0 -174
- package/src/lib/db/providers/sql/sqlite.ts +0 -721
- package/src/lib/db/types.ts +0 -437
- package/src/lib/db/utils/pool-manager.ts +0 -287
- package/src/lib/db/utils/query-limiter.ts +0 -239
- package/src/lib/db-ui-config.ts +0 -86
- package/src/lib/editor/mongodb-completions.ts +0 -172
- package/src/lib/editor/sql-completions.ts +0 -280
- package/src/lib/llm/base-provider.ts +0 -117
- package/src/lib/llm/factory.ts +0 -102
- package/src/lib/llm/index.ts +0 -90
- package/src/lib/llm/providers/custom.ts +0 -181
- package/src/lib/llm/providers/gemini.ts +0 -126
- package/src/lib/llm/providers/ollama.ts +0 -154
- package/src/lib/llm/providers/openai.ts +0 -146
- package/src/lib/llm/types.ts +0 -173
- package/src/lib/llm/utils/config.ts +0 -187
- package/src/lib/llm/utils/retry.ts +0 -119
- package/src/lib/llm/utils/streaming.ts +0 -202
- package/src/lib/logger.ts +0 -127
- package/src/lib/monitoring-thresholds.ts +0 -44
- package/src/lib/oidc.ts +0 -262
- package/src/lib/query-generators.ts +0 -61
- package/src/lib/schema-diff/diff-engine.ts +0 -273
- package/src/lib/schema-diff/migration-generator.ts +0 -208
- package/src/lib/schema-diff/types.ts +0 -55
- package/src/lib/seed/config-loader.ts +0 -79
- package/src/lib/seed/connection-filter.ts +0 -49
- package/src/lib/seed/credential-resolver.ts +0 -62
- package/src/lib/seed/index.ts +0 -40
- package/src/lib/seed/resolve-connection.ts +0 -57
- package/src/lib/seed/types.ts +0 -69
- package/src/lib/sql/alias-extractor.ts +0 -267
- package/src/lib/sql/index.ts +0 -8
- package/src/lib/sql/statement-splitter.ts +0 -167
- package/src/lib/sql/types.ts +0 -40
- package/src/lib/ssh/tunnel.ts +0 -142
- package/src/lib/storage/factory.ts +0 -84
- package/src/lib/storage/index.ts +0 -14
- package/src/lib/storage/local-storage.ts +0 -99
- package/src/lib/storage/providers/postgres.ts +0 -225
- package/src/lib/storage/providers/sqlite.ts +0 -153
- package/src/lib/storage/storage-facade.ts +0 -272
- package/src/lib/storage/types.ts +0 -75
- package/src/lib/time-series-buffer.ts +0 -58
- package/src/lib/types.ts +0 -173
- package/src/lib/utils.ts +0 -6
- package/src/proxy.ts +0 -104
- package/src/types/db-drivers.d.ts +0 -23
- package/src/types/html2canvas.d.ts +0 -9
- package/tests/api/admin/audit.test.ts +0 -178
- package/tests/api/admin/fleet-health.test.ts +0 -183
- package/tests/api/ai/autopilot.test.ts +0 -174
- package/tests/api/ai/chat.test.ts +0 -250
- package/tests/api/ai/describe-schema.test.ts +0 -266
- package/tests/api/ai/explain.test.ts +0 -199
- package/tests/api/ai/impact.test.ts +0 -168
- package/tests/api/ai/index-advisor.test.ts +0 -171
- package/tests/api/ai/nl2sql.test.ts +0 -202
- package/tests/api/ai/query-safety.test.ts +0 -196
- package/tests/api/auth/login.test.ts +0 -170
- package/tests/api/auth/logout.test.ts +0 -140
- package/tests/api/auth/me.test.ts +0 -73
- package/tests/api/auth/oidc-callback.test.ts +0 -215
- package/tests/api/auth/oidc-login.test.ts +0 -127
- package/tests/api/db/cancel.test.ts +0 -198
- package/tests/api/db/disconnect.test.ts +0 -124
- package/tests/api/db/health.test.ts +0 -222
- package/tests/api/db/maintenance.test.ts +0 -263
- package/tests/api/db/monitoring.test.ts +0 -221
- package/tests/api/db/multi-query.test.ts +0 -316
- package/tests/api/db/pool-stats.test.ts +0 -135
- package/tests/api/db/profile.test.ts +0 -330
- package/tests/api/db/provider-meta.test.ts +0 -193
- package/tests/api/db/query.test.ts +0 -314
- package/tests/api/db/schema-snapshot.test.ts +0 -170
- package/tests/api/db/schema.test.ts +0 -191
- package/tests/api/db/test-connection.test.ts +0 -185
- package/tests/api/db/transaction.test.ts +0 -314
- package/tests/api/proxy.test.ts +0 -191
- package/tests/api/seed/managed-route.test.ts +0 -113
- package/tests/api/storage/config.test.ts +0 -42
- package/tests/api/storage/storage-routes.test.ts +0 -309
- package/tests/components/AIAutopilotPanel.test.tsx +0 -756
- package/tests/components/AdminPage.test.tsx +0 -33
- package/tests/components/CodeGenerator.test.tsx +0 -182
- package/tests/components/CommandPalette.test.tsx +0 -428
- package/tests/components/CommunitySection.test.tsx +0 -91
- package/tests/components/ConnectionModal.mobile.test.tsx +0 -284
- package/tests/components/ConnectionModal.test.tsx +0 -570
- package/tests/components/CreateTableModal.test.tsx +0 -383
- package/tests/components/DataCharts.test.tsx +0 -739
- package/tests/components/DataImportModal.test.tsx +0 -751
- package/tests/components/DataProfiler.test.tsx +0 -589
- package/tests/components/DatabaseDocs.test.tsx +0 -353
- package/tests/components/LoginPage.test.tsx +0 -163
- package/tests/components/LoginPageOIDC.test.tsx +0 -92
- package/tests/components/MaskingSettings.test.tsx +0 -498
- package/tests/components/MobileNav.test.tsx +0 -30
- package/tests/components/MonitoringPage.test.tsx +0 -32
- package/tests/components/NL2SQLPanel.test.tsx +0 -621
- package/tests/components/Page.test.tsx +0 -33
- package/tests/components/PivotTable.test.tsx +0 -350
- package/tests/components/QueryEditor.test.tsx +0 -1730
- package/tests/components/QueryHistory.test.tsx +0 -572
- package/tests/components/QuerySafetyDialog.test.tsx +0 -586
- package/tests/components/ResultsGrid.test.tsx +0 -804
- package/tests/components/RootLayout.test.tsx +0 -83
- package/tests/components/SaveQueryModal.test.tsx +0 -25
- package/tests/components/SavedQueries.test.tsx +0 -43
- package/tests/components/SchemaDiagram.test.tsx +0 -1034
- package/tests/components/SchemaDiff.test.tsx +0 -906
- package/tests/components/SnapshotTimeline.test.tsx +0 -174
- package/tests/components/Studio.test.tsx +0 -1030
- package/tests/components/TestDataGenerator.test.tsx +0 -291
- package/tests/components/VisualExplain.test.tsx +0 -704
- package/tests/components/admin/AdminDashboard.test.tsx +0 -205
- package/tests/components/admin/AuditTab.test.tsx +0 -220
- package/tests/components/admin/MonitoringEmbed.test.tsx +0 -58
- package/tests/components/admin/OperationsTab.test.tsx +0 -975
- package/tests/components/admin/OverviewTab.test.tsx +0 -254
- package/tests/components/admin/SecurityTab.test.tsx +0 -467
- package/tests/components/monitoring/MetricChart.test.tsx +0 -111
- package/tests/components/monitoring/MonitoringDashboard.test.tsx +0 -259
- package/tests/components/monitoring/OverviewTab.test.tsx +0 -78
- package/tests/components/monitoring/PerformanceTab.test.tsx +0 -87
- package/tests/components/monitoring/PoolTab.test.tsx +0 -42
- package/tests/components/monitoring/QueriesTab.test.tsx +0 -80
- package/tests/components/monitoring/SessionsTab.test.tsx +0 -154
- package/tests/components/monitoring/StorageTab.test.tsx +0 -127
- package/tests/components/monitoring/TablesTab.test.tsx +0 -153
- package/tests/components/results-grid/ResultCard.test.tsx +0 -105
- package/tests/components/results-grid/RowDetailSheet.test.tsx +0 -308
- package/tests/components/results-grid/StatsBar.test.tsx +0 -162
- package/tests/components/schema-explorer/ColumnList.test.tsx +0 -151
- package/tests/components/schema-explorer/SchemaExplorer.test.tsx +0 -461
- package/tests/components/schema-explorer/TableItem.test.tsx +0 -415
- package/tests/components/sidebar/ConnectionItem.test.tsx +0 -201
- package/tests/components/sidebar/ConnectionsList.test.tsx +0 -176
- package/tests/components/sidebar/Sidebar.test.tsx +0 -187
- package/tests/components/studio/BottomPanel.test.tsx +0 -383
- package/tests/components/studio/QueryToolbar.test.tsx +0 -321
- package/tests/components/studio/StudioDesktopHeader.test.tsx +0 -377
- package/tests/components/studio/StudioMobileHeader.test.tsx +0 -198
- package/tests/components/studio/StudioTabBar.test.tsx +0 -331
- package/tests/fixtures/connections.ts +0 -96
- package/tests/fixtures/masking-configs.ts +0 -86
- package/tests/fixtures/query-results.ts +0 -71
- package/tests/fixtures/schemas.ts +0 -64
- package/tests/fixtures/seed-connections/invalid-config.yaml +0 -7
- package/tests/fixtures/seed-connections/minimal-config.yaml +0 -8
- package/tests/fixtures/seed-connections/mixed-credentials.yaml +0 -23
- package/tests/fixtures/seed-connections/multi-role-config.yaml +0 -30
- package/tests/fixtures/seed-connections/valid-config.json +0 -15
- package/tests/fixtures/seed-connections/valid-config.yaml +0 -51
- package/tests/helpers/mock-fetch.ts +0 -59
- package/tests/helpers/mock-monaco.ts +0 -112
- package/tests/helpers/mock-navigation.ts +0 -28
- package/tests/helpers/mock-next.ts +0 -80
- package/tests/helpers/mock-provider.ts +0 -133
- package/tests/helpers/mock-sonner.ts +0 -29
- package/tests/helpers/render-with-providers.tsx +0 -19
- package/tests/hooks/use-ai-chat.test.ts +0 -600
- package/tests/hooks/use-auth.test.ts +0 -371
- package/tests/hooks/use-connection-form.test.ts +0 -743
- package/tests/hooks/use-connection-manager.test.ts +0 -466
- package/tests/hooks/use-inline-editing.test.ts +0 -321
- package/tests/hooks/use-mobile.test.ts +0 -177
- package/tests/hooks/use-monitoring-data.test.ts +0 -819
- package/tests/hooks/use-provider-metadata.test.ts +0 -228
- package/tests/hooks/use-query-execution.test.ts +0 -1212
- package/tests/hooks/use-tab-manager.test.ts +0 -756
- package/tests/hooks/use-toast.test.ts +0 -74
- package/tests/hooks/use-transaction-control.test.ts +0 -211
- package/tests/integration/db/mongodb-provider.test.ts +0 -698
- package/tests/integration/db/mssql-provider.test.ts +0 -840
- package/tests/integration/db/mysql-provider.test.ts +0 -872
- package/tests/integration/db/oracle-provider.test.ts +0 -843
- package/tests/integration/db/postgres-provider.test.ts +0 -1382
- package/tests/integration/db/redis-provider.test.ts +0 -526
- package/tests/integration/db/sqlite-provider.test.ts +0 -480
- package/tests/integration/seed/seed-pipeline.test.ts +0 -102
- package/tests/isolated/factory-singleton.test.ts +0 -150
- package/tests/isolated/use-storage-sync.test.ts +0 -389
- package/tests/run-components.sh +0 -196
- package/tests/setup-dom.ts +0 -58
- package/tests/setup.ts +0 -40
- package/tests/unit/api-errors.test.ts +0 -210
- package/tests/unit/code-generator-functions.test.ts +0 -271
- package/tests/unit/components/column-list.test.tsx +0 -190
- package/tests/unit/components/data-import-modal.test.tsx +0 -441
- package/tests/unit/components/studio-mobile-header.test.tsx +0 -327
- package/tests/unit/data-charts-functions.test.ts +0 -496
- package/tests/unit/data-import-functions.test.ts +0 -320
- package/tests/unit/data-import-utils.test.ts +0 -125
- package/tests/unit/db/base-provider.test.ts +0 -517
- package/tests/unit/db/errors.test.ts +0 -403
- package/tests/unit/db/factory.test.ts +0 -436
- package/tests/unit/db/pool-manager.test.ts +0 -440
- package/tests/unit/db/query-limiter.test.ts +0 -387
- package/tests/unit/db/sql-base.test.ts +0 -438
- package/tests/unit/lib/api/error-codes.test.ts +0 -39
- package/tests/unit/lib/audit.test.ts +0 -326
- package/tests/unit/lib/auth.test.ts +0 -146
- package/tests/unit/lib/connection-string-parser.test.ts +0 -424
- package/tests/unit/lib/data-masking.test.ts +0 -583
- package/tests/unit/lib/db-icons.test.tsx +0 -41
- package/tests/unit/lib/monitoring-thresholds.test.ts +0 -133
- package/tests/unit/lib/oidc.test.ts +0 -509
- package/tests/unit/lib/query-generators.test.ts +0 -127
- package/tests/unit/lib/storage/factory.test.ts +0 -71
- package/tests/unit/lib/storage/local-storage.test.ts +0 -114
- package/tests/unit/lib/storage/providers/postgres.test.ts +0 -312
- package/tests/unit/lib/storage/providers/sqlite.test.ts +0 -232
- package/tests/unit/lib/storage/storage-facade-extended.test.ts +0 -331
- package/tests/unit/lib/storage/storage-facade.test.ts +0 -184
- package/tests/unit/lib/storage.test.ts +0 -317
- package/tests/unit/lib/time-series-buffer.test.ts +0 -212
- package/tests/unit/lib/utils.test.ts +0 -24
- package/tests/unit/llm/base-provider.test.ts +0 -238
- package/tests/unit/llm/config.test.ts +0 -262
- package/tests/unit/llm/custom-provider.test.ts +0 -281
- package/tests/unit/llm/gemini-provider.test.ts +0 -248
- package/tests/unit/llm/llm-factory.test.ts +0 -155
- package/tests/unit/llm/ollama-provider.test.ts +0 -288
- package/tests/unit/llm/openai-provider.test.ts +0 -324
- package/tests/unit/llm/retry.test.ts +0 -180
- package/tests/unit/llm/streaming.test.ts +0 -355
- package/tests/unit/logger.test.ts +0 -198
- package/tests/unit/mongodb-completions.test.ts +0 -516
- package/tests/unit/pivot-table-functions.test.ts +0 -76
- package/tests/unit/query-cancelled-error.test.ts +0 -81
- package/tests/unit/schema-diff/diff-engine.test.ts +0 -367
- package/tests/unit/schema-diff/migration-generator.test.ts +0 -513
- package/tests/unit/seed/config-loader.test.ts +0 -73
- package/tests/unit/seed/connection-filter.test.ts +0 -91
- package/tests/unit/seed/credential-resolver.test.ts +0 -85
- package/tests/unit/seed/index.test.ts +0 -72
- package/tests/unit/seed/resolve-connection.test.ts +0 -74
- package/tests/unit/seed/types.test.ts +0 -129
- package/tests/unit/sql/alias-extractor.test.ts +0 -444
- package/tests/unit/sql/statement-splitter.test.ts +0 -348
- package/tests/unit/sql-completions.test.ts +0 -463
- package/tests/unit/ssh-tunnel.test.ts +0 -465
- package/tsconfig.json +0 -42
|
@@ -1,419 +0,0 @@
|
|
|
1
|
-
# Storage Quick Setup Guide
|
|
2
|
-
|
|
3
|
-
LibreDB Studio supports three storage modes. Pick the one that fits your use case and follow the steps below.
|
|
4
|
-
|
|
5
|
-
> For a deep dive into the architecture, see [STORAGE_ARCHITECTURE.md](./STORAGE_ARCHITECTURE.md).
|
|
6
|
-
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
## Which Mode Should I Use?
|
|
10
|
-
|
|
11
|
-
| Mode | Best For | Persistence | Multi-User | Setup |
|
|
12
|
-
|------|----------|-------------|------------|-------|
|
|
13
|
-
| **Local** (default) | Solo dev, quick start | Browser only | No | Zero config |
|
|
14
|
-
| **SQLite** | Small teams, single server | Server file | Yes | 1 env var |
|
|
15
|
-
| **PostgreSQL** | Enterprise, multi-node | External DB | Yes | 2 env vars |
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 1. Local Mode (Default)
|
|
20
|
-
|
|
21
|
-
No configuration needed. All data stays in the browser's `localStorage`.
|
|
22
|
-
|
|
23
|
-
```bash
|
|
24
|
-
# Just start the app — that's it
|
|
25
|
-
bun dev
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
**What you get:**
|
|
29
|
-
- Instant start, no database required
|
|
30
|
-
- Data persists across page reloads
|
|
31
|
-
- Data is lost if browser storage is cleared or you switch browsers/devices
|
|
32
|
-
|
|
33
|
-
**When to move on:** When you need data to survive across devices, browsers, or team members.
|
|
34
|
-
|
|
35
|
-
---
|
|
36
|
-
|
|
37
|
-
## 2. SQLite Mode
|
|
38
|
-
|
|
39
|
-
A single file on the server. Great for self-hosted single-node deployments.
|
|
40
|
-
|
|
41
|
-
### Minimal Setup (Just One Env Var)
|
|
42
|
-
|
|
43
|
-
```bash
|
|
44
|
-
# .env.local
|
|
45
|
-
STORAGE_PROVIDER=sqlite
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
bun dev
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
That's it. When `STORAGE_SQLITE_PATH` is not provided, the default path is `./data/libredb-storage.db`.
|
|
53
|
-
|
|
54
|
-
### What Happens Automatically
|
|
55
|
-
|
|
56
|
-
On the first API request, the SQLite provider:
|
|
57
|
-
|
|
58
|
-
1. **Creates the directory** — `./data/` (or whatever parent directory the path points to) is created recursively if it doesn't exist
|
|
59
|
-
2. **Creates the database file** — `libredb-storage.db` is created by `better-sqlite3`
|
|
60
|
-
3. **Enables WAL mode** — Write-Ahead Logging for better concurrent read performance
|
|
61
|
-
4. **Creates the table** — `user_storage` table with the schema below
|
|
62
|
-
|
|
63
|
-
No manual setup, no migrations, no SQL scripts needed.
|
|
64
|
-
|
|
65
|
-
### Custom Path
|
|
66
|
-
|
|
67
|
-
If you want the database file in a different location:
|
|
68
|
-
|
|
69
|
-
```bash
|
|
70
|
-
# .env.local
|
|
71
|
-
STORAGE_PROVIDER=sqlite
|
|
72
|
-
STORAGE_SQLITE_PATH=/var/lib/libredb/storage.db
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
The directory must be writable by the app process. The directory and file are created automatically.
|
|
76
|
-
|
|
77
|
-
### Docker
|
|
78
|
-
|
|
79
|
-
```yaml
|
|
80
|
-
# docker-compose.yml
|
|
81
|
-
services:
|
|
82
|
-
app:
|
|
83
|
-
image: ghcr.io/libredb/libredb-studio:latest
|
|
84
|
-
ports:
|
|
85
|
-
- "3000:3000"
|
|
86
|
-
environment:
|
|
87
|
-
- STORAGE_PROVIDER=sqlite
|
|
88
|
-
- STORAGE_SQLITE_PATH=/app/data/libredb-storage.db
|
|
89
|
-
volumes:
|
|
90
|
-
- storage-data:/app/data
|
|
91
|
-
|
|
92
|
-
volumes:
|
|
93
|
-
storage-data:
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
```bash
|
|
97
|
-
docker-compose up -d
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
> **Volume is essential.** Without it, data is lost when the container restarts.
|
|
101
|
-
|
|
102
|
-
### Verify
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
curl http://localhost:3000/api/storage/config
|
|
106
|
-
# → {"provider":"sqlite","serverMode":true}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### Manual Table Creation (Optional)
|
|
110
|
-
|
|
111
|
-
The table is auto-created, but if you prefer to create it yourself (e.g., for auditing or version control):
|
|
112
|
-
|
|
113
|
-
```sql
|
|
114
|
-
CREATE TABLE IF NOT EXISTS user_storage (
|
|
115
|
-
user_id TEXT NOT NULL,
|
|
116
|
-
collection TEXT NOT NULL,
|
|
117
|
-
data TEXT NOT NULL,
|
|
118
|
-
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
119
|
-
PRIMARY KEY (user_id, collection)
|
|
120
|
-
);
|
|
121
|
-
|
|
122
|
-
-- Recommended: enable WAL mode for concurrent read performance
|
|
123
|
-
PRAGMA journal_mode = WAL;
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
---
|
|
127
|
-
|
|
128
|
-
## 3. PostgreSQL Mode
|
|
129
|
-
|
|
130
|
-
Recommended for production, teams, and high-availability deployments.
|
|
131
|
-
|
|
132
|
-
> **Important:** Unlike SQLite, `STORAGE_POSTGRES_URL` is **required**. There is no default value. If you set `STORAGE_PROVIDER=postgres` without providing a connection string, the app will throw an error on the first storage request:
|
|
133
|
-
> ```
|
|
134
|
-
> Error: STORAGE_POSTGRES_URL is required when STORAGE_PROVIDER=postgres
|
|
135
|
-
> ```
|
|
136
|
-
|
|
137
|
-
### Local Development
|
|
138
|
-
|
|
139
|
-
```bash
|
|
140
|
-
# Start a PostgreSQL instance (if you don't have one)
|
|
141
|
-
docker run -d --name libredb-pg \
|
|
142
|
-
-e POSTGRES_DB=libredb \
|
|
143
|
-
-e POSTGRES_USER=libredb \
|
|
144
|
-
-e POSTGRES_PASSWORD=secret \
|
|
145
|
-
-p 5432:5432 \
|
|
146
|
-
postgres:16-alpine
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
```bash
|
|
150
|
-
# .env.local
|
|
151
|
-
STORAGE_PROVIDER=postgres
|
|
152
|
-
STORAGE_POSTGRES_URL=postgresql://libredb:secret@localhost:5432/libredb?sslmode=disable
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
```bash
|
|
156
|
-
bun dev
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
### What Happens Automatically
|
|
160
|
-
|
|
161
|
-
On the first API request, the PostgreSQL provider:
|
|
162
|
-
|
|
163
|
-
1. **Creates a connection pool** — max 5 connections, 30s idle timeout
|
|
164
|
-
2. **Creates the table** — `user_storage` table with the schema below via `CREATE TABLE IF NOT EXISTS`
|
|
165
|
-
|
|
166
|
-
The database itself must already exist. The **table** is auto-created, but the **database** is not.
|
|
167
|
-
|
|
168
|
-
### Required Privileges
|
|
169
|
-
|
|
170
|
-
The PostgreSQL user specified in `STORAGE_POSTGRES_URL` needs:
|
|
171
|
-
|
|
172
|
-
| Privilege | Why |
|
|
173
|
-
|-----------|-----|
|
|
174
|
-
| `CREATE TABLE` | Auto-create `user_storage` on first request (only needed once) |
|
|
175
|
-
| `INSERT` | Save user data |
|
|
176
|
-
| `UPDATE` | Update existing data |
|
|
177
|
-
| `SELECT` | Read user data |
|
|
178
|
-
|
|
179
|
-
If your DBA restricts `CREATE TABLE`, you can create the table manually (see below) and the user only needs `INSERT`/`UPDATE`/`SELECT`.
|
|
180
|
-
|
|
181
|
-
### Docker Compose (App + PostgreSQL)
|
|
182
|
-
|
|
183
|
-
```yaml
|
|
184
|
-
# docker-compose.yml
|
|
185
|
-
services:
|
|
186
|
-
app:
|
|
187
|
-
image: ghcr.io/libredb/libredb-studio:latest
|
|
188
|
-
ports:
|
|
189
|
-
- "3000:3000"
|
|
190
|
-
environment:
|
|
191
|
-
- STORAGE_PROVIDER=postgres
|
|
192
|
-
- STORAGE_POSTGRES_URL=postgresql://libredb:secret@db:5432/libredb?sslmode=disable
|
|
193
|
-
depends_on:
|
|
194
|
-
db:
|
|
195
|
-
condition: service_healthy
|
|
196
|
-
|
|
197
|
-
db:
|
|
198
|
-
image: postgres:16-alpine
|
|
199
|
-
environment:
|
|
200
|
-
- POSTGRES_DB=libredb
|
|
201
|
-
- POSTGRES_USER=libredb
|
|
202
|
-
- POSTGRES_PASSWORD=secret
|
|
203
|
-
volumes:
|
|
204
|
-
- pgdata:/var/lib/postgresql/data
|
|
205
|
-
healthcheck:
|
|
206
|
-
test: ["CMD-SHELL", "pg_isready -U libredb"]
|
|
207
|
-
interval: 5s
|
|
208
|
-
timeout: 3s
|
|
209
|
-
retries: 5
|
|
210
|
-
|
|
211
|
-
volumes:
|
|
212
|
-
pgdata:
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
```bash
|
|
216
|
-
docker-compose up -d
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
### Using an Existing PostgreSQL
|
|
220
|
-
|
|
221
|
-
Just set the connection string — the table is auto-created:
|
|
222
|
-
|
|
223
|
-
```bash
|
|
224
|
-
STORAGE_PROVIDER=postgres
|
|
225
|
-
STORAGE_POSTGRES_URL=postgresql://user:pass@your-pg-host:5432/your_db
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
Use `sslmode=disable` for local/non-SSL PostgreSQL and `sslmode=require` for managed cloud PostgreSQL:
|
|
229
|
-
|
|
230
|
-
```bash
|
|
231
|
-
# Local PostgreSQL
|
|
232
|
-
STORAGE_POSTGRES_URL=postgresql://user:pass@localhost:5432/your_db?sslmode=disable
|
|
233
|
-
|
|
234
|
-
# Cloud PostgreSQL
|
|
235
|
-
STORAGE_POSTGRES_URL=postgresql://user:pass@your-pg-host:5432/your_db?sslmode=require
|
|
236
|
-
```
|
|
237
|
-
|
|
238
|
-
### Verify
|
|
239
|
-
|
|
240
|
-
```bash
|
|
241
|
-
curl http://localhost:3000/api/storage/config
|
|
242
|
-
# → {"provider":"postgres","serverMode":true}
|
|
243
|
-
```
|
|
244
|
-
|
|
245
|
-
### Manual Table Creation (Optional)
|
|
246
|
-
|
|
247
|
-
The table is auto-created on first request. However, if you prefer to create it yourself — for example, in environments where the app user doesn't have `CREATE TABLE` privileges, or you want to track schema changes in version control:
|
|
248
|
-
|
|
249
|
-
```sql
|
|
250
|
-
-- PostgreSQL
|
|
251
|
-
CREATE TABLE IF NOT EXISTS user_storage (
|
|
252
|
-
user_id TEXT NOT NULL,
|
|
253
|
-
collection TEXT NOT NULL,
|
|
254
|
-
data TEXT NOT NULL,
|
|
255
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
256
|
-
PRIMARY KEY (user_id, collection)
|
|
257
|
-
);
|
|
258
|
-
|
|
259
|
-
-- Optional: index for faster lookups by user
|
|
260
|
-
CREATE INDEX IF NOT EXISTS idx_user_storage_user_id ON user_storage (user_id);
|
|
261
|
-
```
|
|
262
|
-
|
|
263
|
-
#### Minimal Privileges (When Table Already Exists)
|
|
264
|
-
|
|
265
|
-
If a DBA creates the table, the app user only needs:
|
|
266
|
-
|
|
267
|
-
```sql
|
|
268
|
-
-- Grant only data access (no DDL needed)
|
|
269
|
-
GRANT SELECT, INSERT, UPDATE ON user_storage TO libredb_app;
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
---
|
|
273
|
-
|
|
274
|
-
## Migration: Local to Server
|
|
275
|
-
|
|
276
|
-
When you switch from local mode to SQLite or PostgreSQL, **existing browser data is automatically migrated** on first login:
|
|
277
|
-
|
|
278
|
-
1. User opens the app in server mode
|
|
279
|
-
2. The sync hook detects it's the first time (no `libredb_server_migrated` flag)
|
|
280
|
-
3. All localStorage data is sent to the server via `POST /api/storage/migrate`
|
|
281
|
-
4. Server merges the data (ID-based deduplication — no duplicates)
|
|
282
|
-
5. A flag is set in localStorage to prevent re-migration
|
|
283
|
-
6. From this point on, the server is the source of truth
|
|
284
|
-
|
|
285
|
-
**No manual steps required.** Just change the env var and restart.
|
|
286
|
-
|
|
287
|
-
> If multiple users were sharing a browser in local mode, only the data from the user who migrates first will be sent. Each user's server storage is isolated by their login email.
|
|
288
|
-
|
|
289
|
-
---
|
|
290
|
-
|
|
291
|
-
## Environment Variables Reference
|
|
292
|
-
|
|
293
|
-
| Variable | Required | Default | Description |
|
|
294
|
-
|----------|----------|---------|-------------|
|
|
295
|
-
| `STORAGE_PROVIDER` | No | `local` | `local`, `sqlite`, or `postgres` |
|
|
296
|
-
| `STORAGE_SQLITE_PATH` | No | `./data/libredb-storage.db` | Path to SQLite file. Directory and file are auto-created. |
|
|
297
|
-
| `STORAGE_POSTGRES_URL` | **Yes** (postgres mode) | — | PostgreSQL connection string. **No default — app will error without it.** |
|
|
298
|
-
|
|
299
|
-
> These are **server-side only** variables (no `NEXT_PUBLIC_` prefix). The client discovers the mode at runtime via `GET /api/storage/config`. This means one Docker image works for all modes.
|
|
300
|
-
|
|
301
|
-
### Default Behavior Summary
|
|
302
|
-
|
|
303
|
-
| Mode | Config needed | What's auto-created |
|
|
304
|
-
|------|--------------|---------------------|
|
|
305
|
-
| `local` | Nothing | N/A (browser localStorage) |
|
|
306
|
-
| `sqlite` | Just `STORAGE_PROVIDER=sqlite` | Directory + DB file + WAL mode + table |
|
|
307
|
-
| `postgres` | `STORAGE_PROVIDER=postgres` + `STORAGE_POSTGRES_URL` | Table only (database must exist) |
|
|
308
|
-
|
|
309
|
-
---
|
|
310
|
-
|
|
311
|
-
## Health Check
|
|
312
|
-
|
|
313
|
-
Check if the storage backend is reachable:
|
|
314
|
-
|
|
315
|
-
```bash
|
|
316
|
-
# Storage mode info (always works, no auth needed)
|
|
317
|
-
curl http://localhost:3000/api/storage/config
|
|
318
|
-
|
|
319
|
-
# Full data fetch (requires auth cookie)
|
|
320
|
-
curl -b cookies.txt http://localhost:3000/api/storage
|
|
321
|
-
```
|
|
322
|
-
|
|
323
|
-
---
|
|
324
|
-
|
|
325
|
-
## Troubleshooting
|
|
326
|
-
|
|
327
|
-
### "Data not syncing to server"
|
|
328
|
-
|
|
329
|
-
1. Check storage mode: `curl http://localhost:3000/api/storage/config`
|
|
330
|
-
2. Make sure the response shows `"serverMode": true`
|
|
331
|
-
3. Check browser console for sync errors (look for `[StorageSync]` prefixed logs)
|
|
332
|
-
|
|
333
|
-
### SQLite: "SQLITE_CANTOPEN"
|
|
334
|
-
|
|
335
|
-
- The directory in `STORAGE_SQLITE_PATH` must be writable by the app process
|
|
336
|
-
- In Docker, make sure the volume is mounted correctly
|
|
337
|
-
|
|
338
|
-
### PostgreSQL: "STORAGE_POSTGRES_URL is required"
|
|
339
|
-
|
|
340
|
-
- You set `STORAGE_PROVIDER=postgres` but didn't provide `STORAGE_POSTGRES_URL`
|
|
341
|
-
- Unlike SQLite, PostgreSQL has **no default** — a connection string is always required
|
|
342
|
-
- Fix: add `STORAGE_POSTGRES_URL=postgresql://user:pass@host:5432/dbname` to your env
|
|
343
|
-
|
|
344
|
-
### PostgreSQL: "Connection refused"
|
|
345
|
-
|
|
346
|
-
- Verify `STORAGE_POSTGRES_URL` is correct and the database is reachable
|
|
347
|
-
- In Docker Compose, use the service name (`db`) as the host, not `localhost`
|
|
348
|
-
- Check that the PostgreSQL container is healthy: `docker-compose ps`
|
|
349
|
-
|
|
350
|
-
### PostgreSQL: "server does not support SSL connections"
|
|
351
|
-
|
|
352
|
-
- Your PostgreSQL server does not accept SSL, but SSL is enabled in the connection URL
|
|
353
|
-
- Fix local setups by adding `?sslmode=disable` to `STORAGE_POSTGRES_URL`
|
|
354
|
-
- For managed cloud PostgreSQL, use `?sslmode=require`
|
|
355
|
-
|
|
356
|
-
### "Data disappeared after switching modes"
|
|
357
|
-
|
|
358
|
-
- Switching from server mode **back** to local mode doesn't pull data from the server
|
|
359
|
-
- Local mode only reads from localStorage
|
|
360
|
-
- To recover: switch back to server mode, the data is still in the database
|
|
361
|
-
|
|
362
|
-
### "Duplicate data after migration"
|
|
363
|
-
|
|
364
|
-
- Migration uses ID-based deduplication — this shouldn't happen
|
|
365
|
-
- If it does, check if the same user logged in from multiple browsers before migration completed
|
|
366
|
-
|
|
367
|
-
---
|
|
368
|
-
|
|
369
|
-
## Database Schema Reference
|
|
370
|
-
|
|
371
|
-
Both SQLite and PostgreSQL use the same single-table design. The table is auto-created on first request, but the full DDL is provided here for reference.
|
|
372
|
-
|
|
373
|
-
### SQLite
|
|
374
|
-
|
|
375
|
-
```sql
|
|
376
|
-
CREATE TABLE IF NOT EXISTS user_storage (
|
|
377
|
-
user_id TEXT NOT NULL,
|
|
378
|
-
collection TEXT NOT NULL,
|
|
379
|
-
data TEXT NOT NULL,
|
|
380
|
-
updated_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
381
|
-
PRIMARY KEY (user_id, collection)
|
|
382
|
-
);
|
|
383
|
-
|
|
384
|
-
PRAGMA journal_mode = WAL;
|
|
385
|
-
```
|
|
386
|
-
|
|
387
|
-
### PostgreSQL
|
|
388
|
-
|
|
389
|
-
```sql
|
|
390
|
-
CREATE TABLE IF NOT EXISTS user_storage (
|
|
391
|
-
user_id TEXT NOT NULL,
|
|
392
|
-
collection TEXT NOT NULL,
|
|
393
|
-
data TEXT NOT NULL,
|
|
394
|
-
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
395
|
-
PRIMARY KEY (user_id, collection)
|
|
396
|
-
);
|
|
397
|
-
|
|
398
|
-
-- Optional: index for faster lookups by user
|
|
399
|
-
CREATE INDEX IF NOT EXISTS idx_user_storage_user_id ON user_storage (user_id);
|
|
400
|
-
```
|
|
401
|
-
|
|
402
|
-
### Schema Explanation
|
|
403
|
-
|
|
404
|
-
| Column | Type | Description |
|
|
405
|
-
|--------|------|-------------|
|
|
406
|
-
| `user_id` | TEXT | User's email from JWT token (e.g., `admin@libredb.org`) |
|
|
407
|
-
| `collection` | TEXT | Data category: `connections`, `history`, `saved_queries`, `schema_snapshots`, `saved_charts`, `active_connection_id`, `audit_log`, `masking_config`, `threshold_config` |
|
|
408
|
-
| `data` | TEXT | JSON-serialized collection data |
|
|
409
|
-
| `updated_at` | TEXT / TIMESTAMPTZ | Last modification timestamp |
|
|
410
|
-
|
|
411
|
-
Each row stores **one user's one collection** as a JSON blob. Adding a new collection type requires no schema changes — just a new row.
|
|
412
|
-
|
|
413
|
-
---
|
|
414
|
-
|
|
415
|
-
## What's Next?
|
|
416
|
-
|
|
417
|
-
- [STORAGE_ARCHITECTURE.md](./STORAGE_ARCHITECTURE.md) — Deep dive into the write-through cache, sync hook, and provider internals
|
|
418
|
-
- [ARCHITECTURE.md](./ARCHITECTURE.md) — Overall system architecture
|
|
419
|
-
- [OIDC_SETUP.md](./OIDC_SETUP.md) — SSO configuration (pairs well with server storage for team deployments)
|
package/docs/TECHNICAL_PLAN.md
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
# LibreDB Studio: Expert Web/Mobile Database Management System
|
|
2
|
-
|
|
3
|
-
## Vision
|
|
4
|
-
To provide a zero-install, professional-grade database management experience that rivals desktop tools (DataGrip, DBeaver) while being optimized for both high-end desktop workflows and rapid mobile database administration.
|
|
5
|
-
|
|
6
|
-
## Top 10 High-Impact Features
|
|
7
|
-
|
|
8
|
-
1. **Monaco SQL IntelliSense (IDE Experience)**: Integration of the Monaco Editor (VS Code core) with schema-aware autocomplete. It suggests table names, columns, and keywords based on the active connection.
|
|
9
|
-
2. **Universal Pro Data Grid**: A virtualized, high-performance table component supporting millions of rows with inline editing, multi-select, and Excel-like copy-paste.
|
|
10
|
-
3. **Visual Schema Graph (Mini-ERD)**: An interactive visualization of table relationships to help users understand complex schemas at a glance.
|
|
11
|
-
4. **Multi-Tab Query Workspace**: Support for multiple query buffers with persistent results, allowing parallel work across different tables or databases.
|
|
12
|
-
5. **Execution Plan Visualizer (EXPLAIN)**: A professional tool to analyze query performance visually, helping experts optimize their SQL.
|
|
13
|
-
6. **AI SQL Copilot**: Natural language to SQL conversion using OpenAI/Anthropic models to speed up complex query writing.
|
|
14
|
-
7. **Smart Mobile SQL Toolbar**: A custom, swipeable keyboard extension for mobile devices providing quick access to common SQL operators and keywords.
|
|
15
|
-
8. **Query History & Cloud Snippets**: Searchable history of all executed queries and a "Favorites" system to sync common snippets across devices.
|
|
16
|
-
9. **Advanced Data Exporter**: One-click export to CSV, JSON, SQL inserts, Markdown, and Excel with preview capabilities.
|
|
17
|
-
10. **Live DB Health Monitoring**: Real-time dashboard showing active connections, long-running queries, and basic resource metrics (CPU/Memory if API permitted).
|
|
18
|
-
|
|
19
|
-
## Development Roadmap
|
|
20
|
-
|
|
21
|
-
### Phase 1: The Expert Core (Now)
|
|
22
|
-
- [ ] Replace basic textareas with **Monaco Editor**.
|
|
23
|
-
- [ ] Implement **Schema-Aware Autocomplete** (fetching table/column metadata).
|
|
24
|
-
- [ ] Introduce **Multi-Tab** support for the editor.
|
|
25
|
-
|
|
26
|
-
### Phase 2: Professional Data Handling
|
|
27
|
-
- [ ] Transition to a **Virtualized Pro Grid** (TanStack Table + Windowing).
|
|
28
|
-
- [ ] Add **Inline Editing** and **Batch Save** functionality.
|
|
29
|
-
|
|
30
|
-
### Phase 3: Mobile & UX Excellence
|
|
31
|
-
- [ ] Build the **Mobile SQL Toolbar**.
|
|
32
|
-
- [ ] Implement **Query History & Snippets** sidebar.
|
|
33
|
-
|
|
34
|
-
### Phase 4: Expert Analysis Tools
|
|
35
|
-
- [ ] Visual **EXPLAIN** integration.
|
|
36
|
-
- [ ] **ER Diagram** viewer for the explorer.
|