@libredb/studio 0.9.7 → 0.9.13

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.
Files changed (688) hide show
  1. package/dist/chunk-34YQUUCM.mjs +319 -0
  2. package/dist/chunk-34YQUUCM.mjs.map +1 -0
  3. package/dist/chunk-4LVB3K53.mjs +37 -0
  4. package/dist/chunk-4LVB3K53.mjs.map +1 -0
  5. package/dist/chunk-6DRZXXNT.mjs +100 -0
  6. package/dist/chunk-6DRZXXNT.mjs.map +1 -0
  7. package/dist/chunk-CPF7XWV5.mjs +1289 -0
  8. package/dist/chunk-CPF7XWV5.mjs.map +1 -0
  9. package/dist/chunk-CZVV3JJB.mjs +160 -0
  10. package/dist/chunk-CZVV3JJB.mjs.map +1 -0
  11. package/dist/chunk-D4WVWWWF.js +332 -0
  12. package/dist/chunk-D4WVWWWF.js.map +1 -0
  13. package/dist/chunk-DY3KXE44.mjs +3 -0
  14. package/dist/chunk-DY3KXE44.mjs.map +1 -0
  15. package/dist/chunk-FYSE52VB.js +242 -0
  16. package/dist/chunk-FYSE52VB.js.map +1 -0
  17. package/dist/chunk-G3S66G64.mjs +6673 -0
  18. package/dist/chunk-G3S66G64.mjs.map +1 -0
  19. package/dist/chunk-G4WYE6TI.js +4 -0
  20. package/dist/chunk-G4WYE6TI.js.map +1 -0
  21. package/dist/chunk-HGPD6PWV.js +1310 -0
  22. package/dist/chunk-HGPD6PWV.js.map +1 -0
  23. package/dist/chunk-JZO5KRZN.js +165 -0
  24. package/dist/chunk-JZO5KRZN.js.map +1 -0
  25. package/dist/chunk-KV356UXJ.js +253 -0
  26. package/dist/chunk-KV356UXJ.js.map +1 -0
  27. package/dist/chunk-PPODO6HX.mjs +237 -0
  28. package/dist/chunk-PPODO6HX.mjs.map +1 -0
  29. package/dist/chunk-PTIRB2JO.js +258 -0
  30. package/dist/chunk-PTIRB2JO.js.map +1 -0
  31. package/dist/chunk-Q6LRDBK7.js +42 -0
  32. package/dist/chunk-Q6LRDBK7.js.map +1 -0
  33. package/dist/chunk-QJP5FZRY.mjs +255 -0
  34. package/dist/chunk-QJP5FZRY.mjs.map +1 -0
  35. package/dist/chunk-R3POCJK6.mjs +248 -0
  36. package/dist/chunk-R3POCJK6.mjs.map +1 -0
  37. package/dist/chunk-RCQB4FCE.js +186 -0
  38. package/dist/chunk-RCQB4FCE.js.map +1 -0
  39. package/dist/chunk-SR5DRGBX.mjs +174 -0
  40. package/dist/chunk-SR5DRGBX.mjs.map +1 -0
  41. package/dist/chunk-VLCRUZX7.js +102 -0
  42. package/dist/chunk-VLCRUZX7.js.map +1 -0
  43. package/dist/chunk-Y52UIFEX.js +6741 -0
  44. package/dist/chunk-Y52UIFEX.js.map +1 -0
  45. package/dist/components.d.mts +273 -0
  46. package/dist/components.d.ts +273 -0
  47. package/dist/components.js +59 -0
  48. package/dist/components.js.map +1 -0
  49. package/dist/components.mjs +6 -0
  50. package/dist/components.mjs.map +1 -0
  51. package/dist/custom-BNDOYC5P.js +134 -0
  52. package/dist/custom-BNDOYC5P.js.map +1 -0
  53. package/dist/custom-S2EKFMP3.mjs +132 -0
  54. package/dist/custom-S2EKFMP3.mjs.map +1 -0
  55. package/dist/gemini-4ASHNK4H.js +81 -0
  56. package/dist/gemini-4ASHNK4H.js.map +1 -0
  57. package/dist/gemini-C5RBLQEJ.mjs +79 -0
  58. package/dist/gemini-C5RBLQEJ.mjs.map +1 -0
  59. package/dist/index.d.mts +6 -0
  60. package/dist/index.d.ts +6 -0
  61. package/dist/index.js +95 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/index.mjs +10 -0
  64. package/dist/index.mjs.map +1 -0
  65. package/dist/mongodb-XMZEZA4A.mjs +748 -0
  66. package/dist/mongodb-XMZEZA4A.mjs.map +1 -0
  67. package/dist/mongodb-YQJJTLX3.js +750 -0
  68. package/dist/mongodb-YQJJTLX3.js.map +1 -0
  69. package/dist/mssql-PMOU4D36.js +916 -0
  70. package/dist/mssql-PMOU4D36.js.map +1 -0
  71. package/{src/lib/db/providers/sql/mssql.ts → dist/mssql-ZH5VP2C5.mjs} +268 -423
  72. package/dist/mssql-ZH5VP2C5.mjs.map +1 -0
  73. package/{src/lib/db/providers/sql/mysql.ts → dist/mysql-I3WJQXN2.mjs} +277 -428
  74. package/dist/mysql-I3WJQXN2.mjs.map +1 -0
  75. package/dist/mysql-Y3MSA5QY.js +833 -0
  76. package/dist/mysql-Y3MSA5QY.js.map +1 -0
  77. package/dist/ollama-26BYLVEV.mjs +115 -0
  78. package/dist/ollama-26BYLVEV.mjs.map +1 -0
  79. package/dist/ollama-HVWAGKQC.js +117 -0
  80. package/dist/ollama-HVWAGKQC.js.map +1 -0
  81. package/dist/openai-4U56KPG7.mjs +111 -0
  82. package/dist/openai-4U56KPG7.mjs.map +1 -0
  83. package/dist/openai-AK3R37BS.js +113 -0
  84. package/dist/openai-AK3R37BS.js.map +1 -0
  85. package/dist/oracle-L6VEAVXO.js +917 -0
  86. package/dist/oracle-L6VEAVXO.js.map +1 -0
  87. package/{src/lib/db/providers/sql/oracle.ts → dist/oracle-P2G7T4P4.mjs} +321 -454
  88. package/dist/oracle-P2G7T4P4.mjs.map +1 -0
  89. package/{src/lib/db/providers/sql/postgres.ts → dist/postgres-O5KOQUVP.mjs} +261 -471
  90. package/dist/postgres-O5KOQUVP.mjs.map +1 -0
  91. package/dist/postgres-RLCWNFFX.js +971 -0
  92. package/dist/postgres-RLCWNFFX.js.map +1 -0
  93. package/dist/providers.d.mts +149 -0
  94. package/dist/providers.d.ts +149 -0
  95. package/dist/providers.js +44 -0
  96. package/dist/providers.js.map +1 -0
  97. package/dist/providers.mjs +7 -0
  98. package/dist/providers.mjs.map +1 -0
  99. package/dist/redis-4WMQOVLX.mjs +435 -0
  100. package/dist/redis-4WMQOVLX.mjs.map +1 -0
  101. package/dist/redis-QVQ6YU62.js +441 -0
  102. package/dist/redis-QVQ6YU62.js.map +1 -0
  103. package/dist/sqlite-4I2P2OGQ.js +554 -0
  104. package/dist/sqlite-4I2P2OGQ.js.map +1 -0
  105. package/dist/sqlite-OA4YJX5S.mjs +531 -0
  106. package/dist/sqlite-OA4YJX5S.mjs.map +1 -0
  107. package/dist/types-BJvJfxSY.d.mts +141 -0
  108. package/dist/types-BJvJfxSY.d.ts +141 -0
  109. package/dist/types-ClAg_v5k.d.mts +343 -0
  110. package/dist/types-Der_X8E8.d.ts +343 -0
  111. package/dist/types.d.mts +2 -0
  112. package/dist/types.d.ts +2 -0
  113. package/dist/types.js +6 -0
  114. package/dist/types.js.map +1 -0
  115. package/dist/types.mjs +3 -0
  116. package/dist/types.mjs.map +1 -0
  117. package/dist/workspace.d.mts +80 -0
  118. package/dist/workspace.d.ts +80 -0
  119. package/dist/workspace.js +4174 -0
  120. package/dist/workspace.js.map +1 -0
  121. package/dist/workspace.mjs +4147 -0
  122. package/dist/workspace.mjs.map +1 -0
  123. package/package.json +60 -5
  124. package/.claude/settings.local.json +0 -127
  125. package/.cursorrules +0 -426
  126. package/.devin/wiki.json +0 -143
  127. package/.dockerignore +0 -80
  128. package/.env.example +0 -159
  129. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -49
  130. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -29
  131. package/.github/PULL_REQUEST_TEMPLATE.md +0 -57
  132. package/.github/workflows/ci.yml +0 -185
  133. package/.github/workflows/codeql.yml +0 -57
  134. package/.github/workflows/docker-build-push.yml +0 -118
  135. package/.github/workflows/helm-release.yml +0 -113
  136. package/CLAUDE.md +0 -265
  137. package/CODE_OF_CONDUCT.md +0 -124
  138. package/CONTRIBUTING.md +0 -154
  139. package/Dockerfile +0 -73
  140. package/SECURITY.md +0 -107
  141. package/artifacthub-repo.yml +0 -4
  142. package/bun.lock +0 -1714
  143. package/bunfig.toml +0 -3
  144. package/charts/libredb-studio/.helmignore +0 -11
  145. package/charts/libredb-studio/Chart.lock +0 -6
  146. package/charts/libredb-studio/Chart.yaml +0 -50
  147. package/charts/libredb-studio/README.md +0 -206
  148. package/charts/libredb-studio/templates/NOTES.txt +0 -59
  149. package/charts/libredb-studio/templates/_helpers.tpl +0 -135
  150. package/charts/libredb-studio/templates/configmap.yaml +0 -37
  151. package/charts/libredb-studio/templates/deployment.yaml +0 -184
  152. package/charts/libredb-studio/templates/hpa.yaml +0 -32
  153. package/charts/libredb-studio/templates/ingress.yaml +0 -41
  154. package/charts/libredb-studio/templates/networkpolicy.yaml +0 -50
  155. package/charts/libredb-studio/templates/pdb.yaml +0 -18
  156. package/charts/libredb-studio/templates/pvc.yaml +0 -23
  157. package/charts/libredb-studio/templates/secret.yaml +0 -30
  158. package/charts/libredb-studio/templates/seed-configmap.yaml +0 -11
  159. package/charts/libredb-studio/templates/service.yaml +0 -22
  160. package/charts/libredb-studio/templates/serviceaccount.yaml +0 -13
  161. package/charts/libredb-studio/values.schema.json +0 -246
  162. package/charts/libredb-studio/values.yaml +0 -286
  163. package/components.json +0 -22
  164. package/conductor/code_styleguides/typescript.md +0 -43
  165. package/conductor/product-guidelines.md +0 -43
  166. package/conductor/product.md +0 -3
  167. package/conductor/setup_state.json +0 -1
  168. package/conductor/tech-stack.md +0 -39
  169. package/conductor/tracks/enhance_postgres_monitoring_20251227/metadata.json +0 -8
  170. package/conductor/tracks/enhance_postgres_monitoring_20251227/plan.md +0 -44
  171. package/conductor/tracks/enhance_postgres_monitoring_20251227/spec.md +0 -31
  172. package/conductor/tracks.md +0 -8
  173. package/conductor/workflow.md +0 -333
  174. package/database-compose.yml +0 -55
  175. package/docker/postgres-init/01-extensions.sql +0 -10
  176. package/docker/postgres-init/02-sample-data.sql +0 -585
  177. package/docker/postgres.yml +0 -68
  178. package/docker-compose.yml +0 -38
  179. package/docs/AI_PLAN.md +0 -74
  180. package/docs/API_DOCS.md +0 -875
  181. package/docs/ARCHITECTURE.md +0 -218
  182. package/docs/DATABASE_PROVIDERS.md +0 -358
  183. package/docs/FEATURES.md +0 -116
  184. package/docs/HELM_CHART.md +0 -252
  185. package/docs/LOGIN_PAGE.md +0 -178
  186. package/docs/MONACO_EDITOR_PERFORMANCE.md +0 -315
  187. package/docs/OIDC_ARCH.md +0 -681
  188. package/docs/OIDC_SETUP.md +0 -322
  189. package/docs/POSTGRES_METRICS.md +0 -516
  190. package/docs/QUERY_OPTIMIZATION.md +0 -370
  191. package/docs/SEED_CONNECTIONS.md +0 -468
  192. package/docs/SQL_ALIAS_COMPLETION.md +0 -190
  193. package/docs/STORAGE_ARCHITECTURE.md +0 -565
  194. package/docs/STORAGE_QUICK_SETUP.md +0 -419
  195. package/docs/TECHNICAL_PLAN.md +0 -36
  196. package/docs/THEMING.md +0 -345
  197. package/docs/adding-a-new-database-provider.md +0 -642
  198. package/docs/backlogs/000-PLATFORM_DATA_SYNC_DATABASE.md +0 -360
  199. package/docs/backlogs/001-INLINE_DATA_EDITING.md +0 -118
  200. package/docs/backlogs/002-DATA_IMPORT.md +0 -215
  201. package/docs/backlogs/003-QUERY_TIME_MACHINE.md +0 -183
  202. package/docs/backlogs/004-AI_DATA_STORYTELLER.md +0 -292
  203. package/docs/backlogs/005-QUERY_PLAYGROUND.md +0 -352
  204. package/docs/backlogs/006-DATA_MASKING.md +0 -418
  205. package/docs/enterprise-features.md +0 -718
  206. package/docs/kubernetes-helm-chart-artifacthub-plan.md +0 -803
  207. package/docs/medium-koyeb-article-en.md +0 -215
  208. package/docs/plans/test-plans.md +0 -445
  209. package/docs/releases/RELEASE.V0.3.0.md +0 -22
  210. package/docs/releases/RELEASE.V0.4.0.md +0 -154
  211. package/docs/releases/RELEASE.V0.5.0.md +0 -252
  212. package/docs/releases/RELEASE_v0.5.6.md +0 -145
  213. package/docs/releases/RELEASE_v0.6.1.md +0 -303
  214. package/docs/releases/RELEASE_v0.6.7.md +0 -292
  215. package/docs/releases/RELEASE_v0.7.0.md +0 -332
  216. package/docs/releases/RELEASE_v0.8.0.md +0 -521
  217. package/docs/sampledb/titanic.sql +0 -1379
  218. package/docs/superpowers/plans/2026-03-25-seed-connections.md +0 -1362
  219. package/docs/superpowers/specs/2026-03-25-seed-connections-design.md +0 -590
  220. package/e2e/admin-dashboard.spec.ts +0 -64
  221. package/e2e/connection-management.spec.ts +0 -58
  222. package/e2e/export.spec.ts +0 -34
  223. package/e2e/login.spec.ts +0 -85
  224. package/e2e/query-execution.spec.ts +0 -35
  225. package/e2e/tab-management.spec.ts +0 -64
  226. package/eslint.config.mjs +0 -28
  227. package/fly.toml +0 -43
  228. package/next.config.ts +0 -32
  229. package/playwright.config.ts +0 -34
  230. package/postcss.config.mjs +0 -7
  231. package/public/favicon-32x32.png +0 -0
  232. package/public/favicon.ico +0 -0
  233. package/public/file.svg +0 -1
  234. package/public/globe.svg +0 -1
  235. package/public/logo.svg +0 -32
  236. package/public/next.svg +0 -1
  237. package/public/screenshots/code-generator.png +0 -0
  238. package/public/screenshots/connection-modal.png +0 -0
  239. package/public/screenshots/data-profiler.png +0 -0
  240. package/public/screenshots/erd-diagram.png +0 -0
  241. package/public/screenshots/hero-editor.png +0 -0
  242. package/public/screenshots/nl2sql.png +0 -0
  243. package/public/vercel.svg +0 -1
  244. package/public/window.svg +0 -1
  245. package/render.yaml +0 -58
  246. package/scripts/merge-lcov.mjs +0 -239
  247. package/sonar-project.properties +0 -16
  248. package/src/app/admin/error.tsx +0 -46
  249. package/src/app/admin/page.tsx +0 -10
  250. package/src/app/api/admin/audit/route.ts +0 -52
  251. package/src/app/api/admin/fleet-health/route.ts +0 -81
  252. package/src/app/api/ai/autopilot/route.ts +0 -105
  253. package/src/app/api/ai/chat/route.ts +0 -132
  254. package/src/app/api/ai/describe-schema/route.ts +0 -52
  255. package/src/app/api/ai/explain/route.ts +0 -86
  256. package/src/app/api/ai/impact/route.ts +0 -97
  257. package/src/app/api/ai/index-advisor/route.ts +0 -98
  258. package/src/app/api/ai/nl2sql/route.ts +0 -87
  259. package/src/app/api/ai/query-safety/route.ts +0 -87
  260. package/src/app/api/auth/login/route.ts +0 -62
  261. package/src/app/api/auth/logout/route.ts +0 -25
  262. package/src/app/api/auth/me/route.ts +0 -10
  263. package/src/app/api/auth/oidc/callback/route.ts +0 -82
  264. package/src/app/api/auth/oidc/login/route.ts +0 -43
  265. package/src/app/api/connections/managed/route.ts +0 -35
  266. package/src/app/api/db/cancel/route.ts +0 -42
  267. package/src/app/api/db/disconnect/route.ts +0 -28
  268. package/src/app/api/db/health/route.ts +0 -49
  269. package/src/app/api/db/maintenance/route.ts +0 -72
  270. package/src/app/api/db/monitoring/route.ts +0 -62
  271. package/src/app/api/db/multi-query/route.ts +0 -116
  272. package/src/app/api/db/pool-stats/route.ts +0 -37
  273. package/src/app/api/db/profile/route.ts +0 -144
  274. package/src/app/api/db/provider-meta/route.ts +0 -49
  275. package/src/app/api/db/query/route.ts +0 -50
  276. package/src/app/api/db/schema/route.ts +0 -47
  277. package/src/app/api/db/schema-snapshot/route.ts +0 -42
  278. package/src/app/api/db/test-connection/route.ts +0 -55
  279. package/src/app/api/db/transaction/route.ts +0 -111
  280. package/src/app/api/storage/[collection]/route.ts +0 -67
  281. package/src/app/api/storage/config/route.ts +0 -17
  282. package/src/app/api/storage/migrate/route.ts +0 -45
  283. package/src/app/api/storage/route.ts +0 -32
  284. package/src/app/error.tsx +0 -49
  285. package/src/app/global-error.tsx +0 -55
  286. package/src/app/globals.css +0 -146
  287. package/src/app/icon.svg +0 -42
  288. package/src/app/layout.tsx +0 -34
  289. package/src/app/login/login-form.tsx +0 -301
  290. package/src/app/login/page.tsx +0 -11
  291. package/src/app/monitoring/page.tsx +0 -8
  292. package/src/app/not-found.tsx +0 -29
  293. package/src/app/page.tsx +0 -5
  294. package/src/components/AIAutopilotPanel.tsx +0 -238
  295. package/src/components/CodeGenerator.tsx +0 -271
  296. package/src/components/CommandPalette.tsx +0 -227
  297. package/src/components/ConnectionModal.tsx +0 -759
  298. package/src/components/CreateTableModal.tsx +0 -281
  299. package/src/components/DataCharts.tsx +0 -962
  300. package/src/components/DataImportModal.tsx +0 -582
  301. package/src/components/DataProfiler.tsx +0 -335
  302. package/src/components/DatabaseDocs.tsx +0 -251
  303. package/src/components/MaskingSettings.tsx +0 -414
  304. package/src/components/MobileNav.tsx +0 -50
  305. package/src/components/NL2SQLPanel.tsx +0 -281
  306. package/src/components/PivotTable.tsx +0 -257
  307. package/src/components/QueryEditor.tsx +0 -760
  308. package/src/components/QueryHistory.tsx +0 -344
  309. package/src/components/QuerySafetyDialog.tsx +0 -290
  310. package/src/components/ResultsGrid.tsx +0 -644
  311. package/src/components/SaveQueryModal.tsx +0 -104
  312. package/src/components/SavedQueries.tsx +0 -128
  313. package/src/components/SchemaDiagram.tsx +0 -473
  314. package/src/components/SchemaDiff.tsx +0 -473
  315. package/src/components/SnapshotTimeline.tsx +0 -116
  316. package/src/components/Studio.tsx +0 -639
  317. package/src/components/TestDataGenerator.tsx +0 -261
  318. package/src/components/VisualExplain.tsx +0 -820
  319. package/src/components/admin/AdminDashboard.tsx +0 -163
  320. package/src/components/admin/tabs/AuditTab.tsx +0 -531
  321. package/src/components/admin/tabs/MonitoringEmbed.tsx +0 -11
  322. package/src/components/admin/tabs/OperationsTab.tsx +0 -646
  323. package/src/components/admin/tabs/OverviewTab.tsx +0 -1328
  324. package/src/components/admin/tabs/SecurityTab.tsx +0 -284
  325. package/src/components/community-section.tsx +0 -92
  326. package/src/components/icons/db-icons.tsx +0 -84
  327. package/src/components/libredb-logo.tsx +0 -61
  328. package/src/components/monitoring/MonitoringDashboard.tsx +0 -345
  329. package/src/components/monitoring/tabs/MetricChart.tsx +0 -82
  330. package/src/components/monitoring/tabs/OverviewTab.tsx +0 -263
  331. package/src/components/monitoring/tabs/PerformanceTab.tsx +0 -254
  332. package/src/components/monitoring/tabs/PoolTab.tsx +0 -174
  333. package/src/components/monitoring/tabs/QueriesTab.tsx +0 -287
  334. package/src/components/monitoring/tabs/SessionsTab.tsx +0 -316
  335. package/src/components/monitoring/tabs/StorageTab.tsx +0 -335
  336. package/src/components/monitoring/tabs/TablesTab.tsx +0 -300
  337. package/src/components/results-grid/ResultCard.tsx +0 -111
  338. package/src/components/results-grid/RowDetailSheet.tsx +0 -178
  339. package/src/components/results-grid/StatsBar.tsx +0 -201
  340. package/src/components/results-grid/index.ts +0 -1
  341. package/src/components/results-grid/utils.ts +0 -23
  342. package/src/components/schema-explorer/ColumnList.tsx +0 -53
  343. package/src/components/schema-explorer/SchemaExplorer.tsx +0 -182
  344. package/src/components/schema-explorer/TableItem.tsx +0 -210
  345. package/src/components/schema-explorer/index.ts +0 -1
  346. package/src/components/sidebar/ConnectionItem.tsx +0 -105
  347. package/src/components/sidebar/ConnectionsList.tsx +0 -62
  348. package/src/components/sidebar/Sidebar.tsx +0 -130
  349. package/src/components/sidebar/index.ts +0 -2
  350. package/src/components/studio/BottomPanel.tsx +0 -286
  351. package/src/components/studio/QueryToolbar.tsx +0 -180
  352. package/src/components/studio/StudioDesktopHeader.tsx +0 -114
  353. package/src/components/studio/StudioMobileHeader.tsx +0 -340
  354. package/src/components/studio/StudioTabBar.tsx +0 -82
  355. package/src/components/studio/index.ts +0 -5
  356. package/src/components/ui/accordion.tsx +0 -66
  357. package/src/components/ui/alert-dialog.tsx +0 -157
  358. package/src/components/ui/alert.tsx +0 -66
  359. package/src/components/ui/aspect-ratio.tsx +0 -11
  360. package/src/components/ui/avatar.tsx +0 -53
  361. package/src/components/ui/badge.tsx +0 -46
  362. package/src/components/ui/breadcrumb.tsx +0 -109
  363. package/src/components/ui/button-group.tsx +0 -83
  364. package/src/components/ui/button.tsx +0 -60
  365. package/src/components/ui/calendar.tsx +0 -216
  366. package/src/components/ui/card.tsx +0 -92
  367. package/src/components/ui/carousel.tsx +0 -241
  368. package/src/components/ui/chart.tsx +0 -357
  369. package/src/components/ui/checkbox.tsx +0 -32
  370. package/src/components/ui/collapsible.tsx +0 -33
  371. package/src/components/ui/command.tsx +0 -184
  372. package/src/components/ui/context-menu.tsx +0 -252
  373. package/src/components/ui/dialog.tsx +0 -143
  374. package/src/components/ui/drawer.tsx +0 -135
  375. package/src/components/ui/dropdown-menu.tsx +0 -257
  376. package/src/components/ui/empty.tsx +0 -104
  377. package/src/components/ui/field.tsx +0 -248
  378. package/src/components/ui/form.tsx +0 -167
  379. package/src/components/ui/hover-card.tsx +0 -44
  380. package/src/components/ui/input-group.tsx +0 -170
  381. package/src/components/ui/input-otp.tsx +0 -77
  382. package/src/components/ui/input.tsx +0 -21
  383. package/src/components/ui/item.tsx +0 -193
  384. package/src/components/ui/kbd.tsx +0 -28
  385. package/src/components/ui/label.tsx +0 -24
  386. package/src/components/ui/menubar.tsx +0 -276
  387. package/src/components/ui/navigation-menu.tsx +0 -168
  388. package/src/components/ui/pagination.tsx +0 -127
  389. package/src/components/ui/popover.tsx +0 -48
  390. package/src/components/ui/progress.tsx +0 -31
  391. package/src/components/ui/radio-group.tsx +0 -45
  392. package/src/components/ui/resizable.tsx +0 -56
  393. package/src/components/ui/scroll-area.tsx +0 -58
  394. package/src/components/ui/select.tsx +0 -187
  395. package/src/components/ui/separator.tsx +0 -28
  396. package/src/components/ui/sheet.tsx +0 -139
  397. package/src/components/ui/sidebar.tsx +0 -726
  398. package/src/components/ui/skeleton.tsx +0 -13
  399. package/src/components/ui/slider.tsx +0 -63
  400. package/src/components/ui/sonner.tsx +0 -40
  401. package/src/components/ui/spinner.tsx +0 -16
  402. package/src/components/ui/switch.tsx +0 -31
  403. package/src/components/ui/table.tsx +0 -116
  404. package/src/components/ui/tabs.tsx +0 -66
  405. package/src/components/ui/textarea.tsx +0 -18
  406. package/src/components/ui/toggle-group.tsx +0 -83
  407. package/src/components/ui/toggle.tsx +0 -47
  408. package/src/components/ui/tooltip.tsx +0 -61
  409. package/src/exports/components.ts +0 -15
  410. package/src/exports/index.ts +0 -4
  411. package/src/exports/providers.ts +0 -4
  412. package/src/exports/types.ts +0 -26
  413. package/src/hooks/use-ai-chat.ts +0 -182
  414. package/src/hooks/use-all-connections.ts +0 -66
  415. package/src/hooks/use-api-call.ts +0 -71
  416. package/src/hooks/use-auth.ts +0 -51
  417. package/src/hooks/use-connection-form.ts +0 -349
  418. package/src/hooks/use-connection-manager.ts +0 -169
  419. package/src/hooks/use-connection-payload.ts +0 -15
  420. package/src/hooks/use-inline-editing.ts +0 -109
  421. package/src/hooks/use-mobile.ts +0 -20
  422. package/src/hooks/use-monitoring-data.ts +0 -270
  423. package/src/hooks/use-provider-metadata.ts +0 -62
  424. package/src/hooks/use-query-execution.ts +0 -478
  425. package/src/hooks/use-storage-sync.ts +0 -259
  426. package/src/hooks/use-tab-manager.ts +0 -231
  427. package/src/hooks/use-toast.ts +0 -20
  428. package/src/hooks/use-transaction-control.ts +0 -64
  429. package/src/lib/api/error-codes.ts +0 -30
  430. package/src/lib/api/errors.ts +0 -236
  431. package/src/lib/api/with-error-handler.ts +0 -41
  432. package/src/lib/audit.ts +0 -105
  433. package/src/lib/auth.ts +0 -87
  434. package/src/lib/connection-string-parser.ts +0 -172
  435. package/src/lib/data-masking.ts +0 -385
  436. package/src/lib/db/base-provider.ts +0 -325
  437. package/src/lib/db/errors.ts +0 -317
  438. package/src/lib/db/factory.ts +0 -324
  439. package/src/lib/db/index.ts +0 -123
  440. package/src/lib/db/providers/document/index.ts +0 -6
  441. package/src/lib/db/providers/document/mongodb.ts +0 -992
  442. package/src/lib/db/providers/keyvalue/redis.ts +0 -554
  443. package/src/lib/db/providers/sql/index.ts +0 -11
  444. package/src/lib/db/providers/sql/sql-base.ts +0 -174
  445. package/src/lib/db/providers/sql/sqlite.ts +0 -721
  446. package/src/lib/db/types.ts +0 -437
  447. package/src/lib/db/utils/pool-manager.ts +0 -287
  448. package/src/lib/db/utils/query-limiter.ts +0 -239
  449. package/src/lib/db-ui-config.ts +0 -86
  450. package/src/lib/editor/mongodb-completions.ts +0 -172
  451. package/src/lib/editor/sql-completions.ts +0 -280
  452. package/src/lib/llm/base-provider.ts +0 -117
  453. package/src/lib/llm/factory.ts +0 -102
  454. package/src/lib/llm/index.ts +0 -90
  455. package/src/lib/llm/providers/custom.ts +0 -181
  456. package/src/lib/llm/providers/gemini.ts +0 -126
  457. package/src/lib/llm/providers/ollama.ts +0 -154
  458. package/src/lib/llm/providers/openai.ts +0 -146
  459. package/src/lib/llm/types.ts +0 -173
  460. package/src/lib/llm/utils/config.ts +0 -187
  461. package/src/lib/llm/utils/retry.ts +0 -119
  462. package/src/lib/llm/utils/streaming.ts +0 -202
  463. package/src/lib/logger.ts +0 -127
  464. package/src/lib/monitoring-thresholds.ts +0 -44
  465. package/src/lib/oidc.ts +0 -262
  466. package/src/lib/query-generators.ts +0 -61
  467. package/src/lib/schema-diff/diff-engine.ts +0 -273
  468. package/src/lib/schema-diff/migration-generator.ts +0 -208
  469. package/src/lib/schema-diff/types.ts +0 -55
  470. package/src/lib/seed/config-loader.ts +0 -79
  471. package/src/lib/seed/connection-filter.ts +0 -49
  472. package/src/lib/seed/credential-resolver.ts +0 -62
  473. package/src/lib/seed/index.ts +0 -40
  474. package/src/lib/seed/resolve-connection.ts +0 -57
  475. package/src/lib/seed/types.ts +0 -69
  476. package/src/lib/sql/alias-extractor.ts +0 -267
  477. package/src/lib/sql/index.ts +0 -8
  478. package/src/lib/sql/statement-splitter.ts +0 -167
  479. package/src/lib/sql/types.ts +0 -40
  480. package/src/lib/ssh/tunnel.ts +0 -142
  481. package/src/lib/storage/factory.ts +0 -84
  482. package/src/lib/storage/index.ts +0 -14
  483. package/src/lib/storage/local-storage.ts +0 -99
  484. package/src/lib/storage/providers/postgres.ts +0 -225
  485. package/src/lib/storage/providers/sqlite.ts +0 -153
  486. package/src/lib/storage/storage-facade.ts +0 -272
  487. package/src/lib/storage/types.ts +0 -75
  488. package/src/lib/time-series-buffer.ts +0 -58
  489. package/src/lib/types.ts +0 -173
  490. package/src/lib/utils.ts +0 -6
  491. package/src/proxy.ts +0 -104
  492. package/src/types/db-drivers.d.ts +0 -23
  493. package/src/types/html2canvas.d.ts +0 -9
  494. package/tests/api/admin/audit.test.ts +0 -178
  495. package/tests/api/admin/fleet-health.test.ts +0 -183
  496. package/tests/api/ai/autopilot.test.ts +0 -174
  497. package/tests/api/ai/chat.test.ts +0 -250
  498. package/tests/api/ai/describe-schema.test.ts +0 -266
  499. package/tests/api/ai/explain.test.ts +0 -199
  500. package/tests/api/ai/impact.test.ts +0 -168
  501. package/tests/api/ai/index-advisor.test.ts +0 -171
  502. package/tests/api/ai/nl2sql.test.ts +0 -202
  503. package/tests/api/ai/query-safety.test.ts +0 -196
  504. package/tests/api/auth/login.test.ts +0 -170
  505. package/tests/api/auth/logout.test.ts +0 -140
  506. package/tests/api/auth/me.test.ts +0 -73
  507. package/tests/api/auth/oidc-callback.test.ts +0 -215
  508. package/tests/api/auth/oidc-login.test.ts +0 -127
  509. package/tests/api/db/cancel.test.ts +0 -198
  510. package/tests/api/db/disconnect.test.ts +0 -124
  511. package/tests/api/db/health.test.ts +0 -222
  512. package/tests/api/db/maintenance.test.ts +0 -263
  513. package/tests/api/db/monitoring.test.ts +0 -221
  514. package/tests/api/db/multi-query.test.ts +0 -316
  515. package/tests/api/db/pool-stats.test.ts +0 -135
  516. package/tests/api/db/profile.test.ts +0 -330
  517. package/tests/api/db/provider-meta.test.ts +0 -193
  518. package/tests/api/db/query.test.ts +0 -314
  519. package/tests/api/db/schema-snapshot.test.ts +0 -170
  520. package/tests/api/db/schema.test.ts +0 -191
  521. package/tests/api/db/test-connection.test.ts +0 -185
  522. package/tests/api/db/transaction.test.ts +0 -314
  523. package/tests/api/proxy.test.ts +0 -191
  524. package/tests/api/seed/managed-route.test.ts +0 -113
  525. package/tests/api/storage/config.test.ts +0 -42
  526. package/tests/api/storage/storage-routes.test.ts +0 -309
  527. package/tests/components/AIAutopilotPanel.test.tsx +0 -756
  528. package/tests/components/AdminPage.test.tsx +0 -33
  529. package/tests/components/CodeGenerator.test.tsx +0 -182
  530. package/tests/components/CommandPalette.test.tsx +0 -428
  531. package/tests/components/CommunitySection.test.tsx +0 -91
  532. package/tests/components/ConnectionModal.mobile.test.tsx +0 -284
  533. package/tests/components/ConnectionModal.test.tsx +0 -570
  534. package/tests/components/CreateTableModal.test.tsx +0 -383
  535. package/tests/components/DataCharts.test.tsx +0 -739
  536. package/tests/components/DataImportModal.test.tsx +0 -751
  537. package/tests/components/DataProfiler.test.tsx +0 -589
  538. package/tests/components/DatabaseDocs.test.tsx +0 -353
  539. package/tests/components/LoginPage.test.tsx +0 -163
  540. package/tests/components/LoginPageOIDC.test.tsx +0 -92
  541. package/tests/components/MaskingSettings.test.tsx +0 -498
  542. package/tests/components/MobileNav.test.tsx +0 -30
  543. package/tests/components/MonitoringPage.test.tsx +0 -32
  544. package/tests/components/NL2SQLPanel.test.tsx +0 -621
  545. package/tests/components/Page.test.tsx +0 -33
  546. package/tests/components/PivotTable.test.tsx +0 -350
  547. package/tests/components/QueryEditor.test.tsx +0 -1730
  548. package/tests/components/QueryHistory.test.tsx +0 -572
  549. package/tests/components/QuerySafetyDialog.test.tsx +0 -586
  550. package/tests/components/ResultsGrid.test.tsx +0 -804
  551. package/tests/components/RootLayout.test.tsx +0 -83
  552. package/tests/components/SaveQueryModal.test.tsx +0 -25
  553. package/tests/components/SavedQueries.test.tsx +0 -43
  554. package/tests/components/SchemaDiagram.test.tsx +0 -1034
  555. package/tests/components/SchemaDiff.test.tsx +0 -906
  556. package/tests/components/SnapshotTimeline.test.tsx +0 -174
  557. package/tests/components/Studio.test.tsx +0 -1030
  558. package/tests/components/TestDataGenerator.test.tsx +0 -291
  559. package/tests/components/VisualExplain.test.tsx +0 -704
  560. package/tests/components/admin/AdminDashboard.test.tsx +0 -205
  561. package/tests/components/admin/AuditTab.test.tsx +0 -220
  562. package/tests/components/admin/MonitoringEmbed.test.tsx +0 -58
  563. package/tests/components/admin/OperationsTab.test.tsx +0 -975
  564. package/tests/components/admin/OverviewTab.test.tsx +0 -254
  565. package/tests/components/admin/SecurityTab.test.tsx +0 -467
  566. package/tests/components/monitoring/MetricChart.test.tsx +0 -111
  567. package/tests/components/monitoring/MonitoringDashboard.test.tsx +0 -259
  568. package/tests/components/monitoring/OverviewTab.test.tsx +0 -78
  569. package/tests/components/monitoring/PerformanceTab.test.tsx +0 -87
  570. package/tests/components/monitoring/PoolTab.test.tsx +0 -42
  571. package/tests/components/monitoring/QueriesTab.test.tsx +0 -80
  572. package/tests/components/monitoring/SessionsTab.test.tsx +0 -154
  573. package/tests/components/monitoring/StorageTab.test.tsx +0 -127
  574. package/tests/components/monitoring/TablesTab.test.tsx +0 -153
  575. package/tests/components/results-grid/ResultCard.test.tsx +0 -105
  576. package/tests/components/results-grid/RowDetailSheet.test.tsx +0 -308
  577. package/tests/components/results-grid/StatsBar.test.tsx +0 -162
  578. package/tests/components/schema-explorer/ColumnList.test.tsx +0 -151
  579. package/tests/components/schema-explorer/SchemaExplorer.test.tsx +0 -461
  580. package/tests/components/schema-explorer/TableItem.test.tsx +0 -415
  581. package/tests/components/sidebar/ConnectionItem.test.tsx +0 -201
  582. package/tests/components/sidebar/ConnectionsList.test.tsx +0 -176
  583. package/tests/components/sidebar/Sidebar.test.tsx +0 -187
  584. package/tests/components/studio/BottomPanel.test.tsx +0 -383
  585. package/tests/components/studio/QueryToolbar.test.tsx +0 -321
  586. package/tests/components/studio/StudioDesktopHeader.test.tsx +0 -377
  587. package/tests/components/studio/StudioMobileHeader.test.tsx +0 -198
  588. package/tests/components/studio/StudioTabBar.test.tsx +0 -331
  589. package/tests/fixtures/connections.ts +0 -96
  590. package/tests/fixtures/masking-configs.ts +0 -86
  591. package/tests/fixtures/query-results.ts +0 -71
  592. package/tests/fixtures/schemas.ts +0 -64
  593. package/tests/fixtures/seed-connections/invalid-config.yaml +0 -7
  594. package/tests/fixtures/seed-connections/minimal-config.yaml +0 -8
  595. package/tests/fixtures/seed-connections/mixed-credentials.yaml +0 -23
  596. package/tests/fixtures/seed-connections/multi-role-config.yaml +0 -30
  597. package/tests/fixtures/seed-connections/valid-config.json +0 -15
  598. package/tests/fixtures/seed-connections/valid-config.yaml +0 -51
  599. package/tests/helpers/mock-fetch.ts +0 -59
  600. package/tests/helpers/mock-monaco.ts +0 -112
  601. package/tests/helpers/mock-navigation.ts +0 -28
  602. package/tests/helpers/mock-next.ts +0 -80
  603. package/tests/helpers/mock-provider.ts +0 -133
  604. package/tests/helpers/mock-sonner.ts +0 -29
  605. package/tests/helpers/render-with-providers.tsx +0 -19
  606. package/tests/hooks/use-ai-chat.test.ts +0 -600
  607. package/tests/hooks/use-auth.test.ts +0 -371
  608. package/tests/hooks/use-connection-form.test.ts +0 -743
  609. package/tests/hooks/use-connection-manager.test.ts +0 -466
  610. package/tests/hooks/use-inline-editing.test.ts +0 -321
  611. package/tests/hooks/use-mobile.test.ts +0 -177
  612. package/tests/hooks/use-monitoring-data.test.ts +0 -819
  613. package/tests/hooks/use-provider-metadata.test.ts +0 -228
  614. package/tests/hooks/use-query-execution.test.ts +0 -1212
  615. package/tests/hooks/use-tab-manager.test.ts +0 -756
  616. package/tests/hooks/use-toast.test.ts +0 -74
  617. package/tests/hooks/use-transaction-control.test.ts +0 -211
  618. package/tests/integration/db/mongodb-provider.test.ts +0 -698
  619. package/tests/integration/db/mssql-provider.test.ts +0 -840
  620. package/tests/integration/db/mysql-provider.test.ts +0 -872
  621. package/tests/integration/db/oracle-provider.test.ts +0 -843
  622. package/tests/integration/db/postgres-provider.test.ts +0 -1382
  623. package/tests/integration/db/redis-provider.test.ts +0 -526
  624. package/tests/integration/db/sqlite-provider.test.ts +0 -480
  625. package/tests/integration/seed/seed-pipeline.test.ts +0 -102
  626. package/tests/isolated/factory-singleton.test.ts +0 -150
  627. package/tests/isolated/use-storage-sync.test.ts +0 -389
  628. package/tests/run-components.sh +0 -196
  629. package/tests/setup-dom.ts +0 -58
  630. package/tests/setup.ts +0 -40
  631. package/tests/unit/api-errors.test.ts +0 -210
  632. package/tests/unit/code-generator-functions.test.ts +0 -271
  633. package/tests/unit/components/column-list.test.tsx +0 -190
  634. package/tests/unit/components/data-import-modal.test.tsx +0 -441
  635. package/tests/unit/components/studio-mobile-header.test.tsx +0 -327
  636. package/tests/unit/data-charts-functions.test.ts +0 -496
  637. package/tests/unit/data-import-functions.test.ts +0 -320
  638. package/tests/unit/data-import-utils.test.ts +0 -125
  639. package/tests/unit/db/base-provider.test.ts +0 -517
  640. package/tests/unit/db/errors.test.ts +0 -403
  641. package/tests/unit/db/factory.test.ts +0 -436
  642. package/tests/unit/db/pool-manager.test.ts +0 -440
  643. package/tests/unit/db/query-limiter.test.ts +0 -387
  644. package/tests/unit/db/sql-base.test.ts +0 -438
  645. package/tests/unit/lib/api/error-codes.test.ts +0 -39
  646. package/tests/unit/lib/audit.test.ts +0 -326
  647. package/tests/unit/lib/auth.test.ts +0 -146
  648. package/tests/unit/lib/connection-string-parser.test.ts +0 -424
  649. package/tests/unit/lib/data-masking.test.ts +0 -583
  650. package/tests/unit/lib/db-icons.test.tsx +0 -41
  651. package/tests/unit/lib/monitoring-thresholds.test.ts +0 -133
  652. package/tests/unit/lib/oidc.test.ts +0 -509
  653. package/tests/unit/lib/query-generators.test.ts +0 -127
  654. package/tests/unit/lib/storage/factory.test.ts +0 -71
  655. package/tests/unit/lib/storage/local-storage.test.ts +0 -114
  656. package/tests/unit/lib/storage/providers/postgres.test.ts +0 -312
  657. package/tests/unit/lib/storage/providers/sqlite.test.ts +0 -232
  658. package/tests/unit/lib/storage/storage-facade-extended.test.ts +0 -331
  659. package/tests/unit/lib/storage/storage-facade.test.ts +0 -184
  660. package/tests/unit/lib/storage.test.ts +0 -317
  661. package/tests/unit/lib/time-series-buffer.test.ts +0 -212
  662. package/tests/unit/lib/utils.test.ts +0 -24
  663. package/tests/unit/llm/base-provider.test.ts +0 -238
  664. package/tests/unit/llm/config.test.ts +0 -262
  665. package/tests/unit/llm/custom-provider.test.ts +0 -281
  666. package/tests/unit/llm/gemini-provider.test.ts +0 -248
  667. package/tests/unit/llm/llm-factory.test.ts +0 -155
  668. package/tests/unit/llm/ollama-provider.test.ts +0 -288
  669. package/tests/unit/llm/openai-provider.test.ts +0 -324
  670. package/tests/unit/llm/retry.test.ts +0 -180
  671. package/tests/unit/llm/streaming.test.ts +0 -355
  672. package/tests/unit/logger.test.ts +0 -198
  673. package/tests/unit/mongodb-completions.test.ts +0 -516
  674. package/tests/unit/pivot-table-functions.test.ts +0 -76
  675. package/tests/unit/query-cancelled-error.test.ts +0 -81
  676. package/tests/unit/schema-diff/diff-engine.test.ts +0 -367
  677. package/tests/unit/schema-diff/migration-generator.test.ts +0 -513
  678. package/tests/unit/seed/config-loader.test.ts +0 -73
  679. package/tests/unit/seed/connection-filter.test.ts +0 -91
  680. package/tests/unit/seed/credential-resolver.test.ts +0 -85
  681. package/tests/unit/seed/index.test.ts +0 -72
  682. package/tests/unit/seed/resolve-connection.test.ts +0 -74
  683. package/tests/unit/seed/types.test.ts +0 -129
  684. package/tests/unit/sql/alias-extractor.test.ts +0 -444
  685. package/tests/unit/sql/statement-splitter.test.ts +0 -348
  686. package/tests/unit/sql-completions.test.ts +0 -463
  687. package/tests/unit/ssh-tunnel.test.ts +0 -465
  688. package/tsconfig.json +0 -42
@@ -1,214 +1,132 @@
1
- /**
2
- * PostgreSQL Database Provider
3
- * Full PostgreSQL support with connection pooling
4
- */
5
-
6
- import { Pool, type PoolClient, type PoolConfig as PgPoolConfig } from 'pg';
7
- import { SQLBaseProvider } from './sql-base';
8
- import {
9
- type DatabaseConnection,
10
- type TableSchema,
11
- type QueryResult,
12
- type HealthInfo,
13
- type MaintenanceType,
14
- type MaintenanceResult,
15
- type ProviderOptions,
16
- type ProviderCapabilities,
17
- type SlowQuery,
18
- type ActiveSession,
19
- type DatabaseOverview,
20
- type PerformanceMetrics,
21
- type SlowQueryStats,
22
- type ActiveSessionDetails,
23
- type TableStats,
24
- type IndexStats,
25
- type StorageStats,
26
- } from '../../types';
27
- import {
28
- DatabaseConfigError,
29
- ConnectionError,
30
- QueryError,
31
- mapDatabaseError,
32
- } from '../../errors';
33
- import { formatBytes } from '../../utils/pool-manager';
34
-
35
- // ============================================================================
36
- // Type Definitions
37
- // ============================================================================
38
-
39
- interface PgStatActivityRow {
40
- datname?: string;
41
- pid?: number;
42
- usename?: string;
43
- application_name?: string;
44
- client_addr?: string;
45
- backend_start?: string | Date;
46
- state?: string;
47
- query?: string;
48
- [key: string]: unknown;
49
- }
50
-
51
- // ============================================================================
52
- // PostgreSQL Provider
53
- // ============================================================================
54
-
55
- export class PostgresProvider extends SQLBaseProvider {
56
- private pool: Pool | null = null;
57
-
58
- // Transaction support: dedicated client held outside pool
59
- private txClient: PoolClient | null = null;
60
- private txActive = false;
61
- private txTimeout: ReturnType<typeof setTimeout> | null = null;
62
- private static readonly TX_TIMEOUT_MS = 5 * 60 * 1000; // 5 minutes
63
-
64
- constructor(config: DatabaseConnection, options: ProviderOptions = {}) {
1
+ import { SQLBaseProvider } from './chunk-R3POCJK6.mjs';
2
+ import { formatBytes } from './chunk-QJP5FZRY.mjs';
3
+ import { DatabaseConfigError, ConnectionError, mapDatabaseError, QueryError } from './chunk-CZVV3JJB.mjs';
4
+ import { __spreadProps, __spreadValues } from './chunk-4LVB3K53.mjs';
5
+ import { Pool } from 'pg';
6
+
7
+ var _PostgresProvider = class _PostgresProvider extends SQLBaseProvider {
8
+ // 5 minutes
9
+ constructor(config, options = {}) {
65
10
  super(config, options);
11
+ this.pool = null;
12
+ // Transaction support: dedicated client held outside pool
13
+ this.txClient = null;
14
+ this.txActive = false;
15
+ this.txTimeout = null;
16
+ // ============================================================================
17
+ // Query Execution
18
+ // ============================================================================
19
+ // Track running query PIDs for cancellation
20
+ this.runningQueryPids = /* @__PURE__ */ new Map();
66
21
  this.validate();
67
22
  }
68
-
69
23
  // ============================================================================
70
24
  // Provider Metadata
71
25
  // ============================================================================
72
-
73
- public override getCapabilities(): ProviderCapabilities {
74
- return {
75
- ...super.getCapabilities(),
26
+ getCapabilities() {
27
+ return __spreadProps(__spreadValues({}, super.getCapabilities()), {
76
28
  defaultPort: 5432,
77
29
  supportsExplain: true,
78
30
  supportsConnectionString: true,
79
- maintenanceOperations: ['vacuum', 'analyze', 'reindex', 'kill'],
80
- };
31
+ maintenanceOperations: ["vacuum", "analyze", "reindex", "kill"]
32
+ });
81
33
  }
82
-
83
34
  // ============================================================================
84
35
  // Validation
85
36
  // ============================================================================
86
-
87
- public validate(): void {
37
+ validate() {
88
38
  super.validate();
89
-
90
39
  if (!this.config.connectionString) {
91
40
  if (!this.config.host) {
92
- throw new DatabaseConfigError('Host is required for PostgreSQL', 'postgres');
41
+ throw new DatabaseConfigError("Host is required for PostgreSQL", "postgres");
93
42
  }
94
43
  if (!this.config.database) {
95
- throw new DatabaseConfigError('Database name is required for PostgreSQL', 'postgres');
44
+ throw new DatabaseConfigError("Database name is required for PostgreSQL", "postgres");
96
45
  }
97
46
  }
98
47
  }
99
-
100
48
  // ============================================================================
101
49
  // Connection Management
102
50
  // ============================================================================
103
-
104
- public async connect(): Promise<void> {
51
+ async connect() {
105
52
  if (this.pool) {
106
53
  return;
107
54
  }
108
-
109
55
  try {
110
56
  const poolConfig = this.buildPoolConfig();
111
57
  this.pool = new Pool(poolConfig);
112
-
113
58
  const client = await this.pool.connect();
114
59
  client.release();
115
-
116
60
  this.setConnected(true);
117
61
  } catch (error) {
118
62
  this.setError(error instanceof Error ? error : new Error(String(error)));
119
63
  throw new ConnectionError(
120
64
  `Failed to connect to PostgreSQL: ${error instanceof Error ? error.message : error}`,
121
- 'postgres',
65
+ "postgres",
122
66
  this.config.host,
123
67
  this.config.port
124
68
  );
125
69
  }
126
70
  }
127
-
128
- public async disconnect(): Promise<void> {
71
+ async disconnect() {
129
72
  if (this.pool) {
130
73
  await this.pool.end();
131
74
  this.pool = null;
132
75
  this.setConnected(false);
133
76
  }
134
77
  }
135
-
136
- private buildPoolConfig(): PgPoolConfig {
78
+ buildPoolConfig() {
79
+ var _a;
137
80
  const sslConfig = this.buildSSLConfig();
138
-
139
- const baseConfig: PgPoolConfig = {
81
+ const baseConfig = {
140
82
  min: this.poolConfig.min,
141
83
  max: this.poolConfig.max,
142
84
  idleTimeoutMillis: this.poolConfig.idleTimeout,
143
85
  connectionTimeoutMillis: this.poolConfig.acquireTimeout,
144
86
  statement_timeout: this.queryTimeout,
145
- ssl: sslConfig,
87
+ ssl: sslConfig
146
88
  };
147
-
148
89
  if (this.config.connectionString) {
149
- return {
150
- ...baseConfig,
151
- connectionString: this.config.connectionString,
152
- };
90
+ return __spreadProps(__spreadValues({}, baseConfig), {
91
+ connectionString: this.config.connectionString
92
+ });
153
93
  }
154
-
155
- return {
156
- ...baseConfig,
94
+ return __spreadProps(__spreadValues({}, baseConfig), {
157
95
  host: this.config.host,
158
- port: this.config.port ?? 5432,
96
+ port: (_a = this.config.port) != null ? _a : 5432,
159
97
  user: this.config.user,
160
98
  password: this.config.password,
161
- database: this.config.database,
162
- };
99
+ database: this.config.database
100
+ });
163
101
  }
164
-
165
- private buildSSLConfig(): PgPoolConfig['ssl'] {
102
+ buildSSLConfig() {
166
103
  const connSSL = this.config.ssl;
167
-
168
- // Explicit SSL config from connection takes priority
169
104
  if (connSSL) {
170
- if (connSSL.mode === 'disable') return false;
171
-
172
- const ssl: Record<string, unknown> = {
173
- rejectUnauthorized: connSSL.mode === 'verify-ca' || connSSL.mode === 'verify-full',
105
+ if (connSSL.mode === "disable") return false;
106
+ const ssl = {
107
+ rejectUnauthorized: connSSL.mode === "verify-ca" || connSSL.mode === "verify-full"
174
108
  };
175
-
176
109
  if (connSSL.caCert) ssl.ca = connSSL.caCert;
177
110
  if (connSSL.clientCert) ssl.cert = connSSL.clientCert;
178
111
  if (connSSL.clientKey) ssl.key = connSSL.clientKey;
179
-
180
- return ssl as PgPoolConfig['ssl'];
112
+ return ssl;
181
113
  }
182
-
183
- // Auto-detect for cloud providers
184
114
  if (this.shouldEnableSSL()) {
185
115
  return { rejectUnauthorized: false };
186
116
  }
187
-
188
- // Provider options fallback
189
117
  if (this.options.ssl === false) return false;
190
-
191
- return undefined;
118
+ return void 0;
192
119
  }
193
-
194
- // ============================================================================
195
- // Query Execution
196
- // ============================================================================
197
-
198
- // Track running query PIDs for cancellation
199
- private runningQueryPids = new Map<string, number>();
200
-
201
- public async query(sql: string, params?: unknown[], queryId?: string): Promise<QueryResult> {
120
+ async query(sql, params, queryId) {
202
121
  this.ensureConnected();
203
-
204
122
  return this.trackQuery(async () => {
123
+ var _a, _b, _c;
205
124
  const { result, executionTime } = await this.measureExecution(async () => {
206
125
  try {
207
- const client = await this.pool!.connect();
126
+ const client = await this.pool.connect();
208
127
  try {
209
- // Track PID for cancellation support
210
128
  if (queryId) {
211
- const pidRes = await client.query('SELECT pg_backend_pid() as pid');
129
+ const pidRes = await client.query("SELECT pg_backend_pid() as pid");
212
130
  this.runningQueryPids.set(queryId, pidRes.rows[0].pid);
213
131
  }
214
132
  const res = await client.query(sql, params);
@@ -219,58 +137,54 @@ export class PostgresProvider extends SQLBaseProvider {
219
137
  }
220
138
  } catch (error) {
221
139
  if (queryId) this.runningQueryPids.delete(queryId);
222
- throw mapDatabaseError(error, 'postgres', sql);
140
+ throw mapDatabaseError(error, "postgres", sql);
223
141
  }
224
142
  });
225
-
226
143
  return {
227
144
  rows: result.rows,
228
- fields: result.fields?.map((f) => f.name) ?? [],
229
- rowCount: result.rowCount ?? 0,
230
- executionTime,
145
+ fields: (_b = (_a = result.fields) == null ? void 0 : _a.map((f) => f.name)) != null ? _b : [],
146
+ rowCount: (_c = result.rowCount) != null ? _c : 0,
147
+ executionTime
231
148
  };
232
149
  });
233
150
  }
234
-
235
- public async cancelQuery(queryId: string): Promise<boolean> {
151
+ async cancelQuery(queryId) {
152
+ var _a;
236
153
  const pid = this.runningQueryPids.get(queryId);
237
154
  if (!pid) return false;
238
-
239
155
  try {
240
- const client = await this.pool!.connect();
156
+ const client = await this.pool.connect();
241
157
  try {
242
- const res = await client.query('SELECT pg_cancel_backend($1) as cancelled', [pid]);
243
- return res.rows[0]?.cancelled === true;
158
+ const res = await client.query("SELECT pg_cancel_backend($1) as cancelled", [pid]);
159
+ return ((_a = res.rows[0]) == null ? void 0 : _a.cancelled) === true;
244
160
  } finally {
245
161
  client.release();
246
162
  }
247
163
  } catch (error) {
248
- console.error('[Postgres] Failed to cancel query:', error);
164
+ console.error("[Postgres] Failed to cancel query:", error);
249
165
  return false;
250
166
  }
251
167
  }
252
-
253
168
  // ============================================================================
254
169
  // Transaction Support
255
170
  // ============================================================================
256
-
257
- private clearTxTimeout(): void {
171
+ clearTxTimeout() {
258
172
  if (this.txTimeout) {
259
173
  clearTimeout(this.txTimeout);
260
174
  this.txTimeout = null;
261
175
  }
262
176
  }
263
-
264
177
  /**
265
178
  * Force-expire an active transaction (auto-rollback).
266
179
  * Called by the timeout timer, but also available for testing.
267
180
  */
268
- public async expireTransaction(): Promise<void> {
181
+ async expireTransaction() {
269
182
  if (this.txActive && this.txClient) {
270
- console.warn('[Postgres] Transaction timed out, auto-rolling back');
183
+ console.warn("[Postgres] Transaction timed out, auto-rolling back");
271
184
  try {
272
- await this.txClient.query('ROLLBACK');
273
- } catch { /* ignore */ } finally {
185
+ await this.txClient.query("ROLLBACK");
186
+ } catch (e) {
187
+ } finally {
274
188
  this.txClient.release();
275
189
  this.txClient = null;
276
190
  this.txActive = false;
@@ -278,78 +192,67 @@ export class PostgresProvider extends SQLBaseProvider {
278
192
  }
279
193
  }
280
194
  }
281
-
282
- public async beginTransaction(): Promise<void> {
195
+ async beginTransaction() {
283
196
  this.ensureConnected();
284
- if (this.txActive) throw new QueryError('Transaction already active', 'postgres');
285
- this.txClient = await this.pool!.connect();
286
- await this.txClient.query('BEGIN');
197
+ if (this.txActive) throw new QueryError("Transaction already active", "postgres");
198
+ this.txClient = await this.pool.connect();
199
+ await this.txClient.query("BEGIN");
287
200
  this.txActive = true;
288
-
289
- // Auto-rollback after timeout to prevent leaked locks
290
- this.txTimeout = setTimeout(() => { this.expireTransaction(); }, PostgresProvider.TX_TIMEOUT_MS);
201
+ this.txTimeout = setTimeout(() => {
202
+ this.expireTransaction();
203
+ }, _PostgresProvider.TX_TIMEOUT_MS);
291
204
  }
292
-
293
- public async commitTransaction(): Promise<void> {
294
- if (!this.txClient || !this.txActive) throw new QueryError('No active transaction', 'postgres');
205
+ async commitTransaction() {
206
+ if (!this.txClient || !this.txActive) throw new QueryError("No active transaction", "postgres");
295
207
  this.clearTxTimeout();
296
208
  try {
297
- await this.txClient.query('COMMIT');
209
+ await this.txClient.query("COMMIT");
298
210
  } finally {
299
211
  this.txClient.release();
300
212
  this.txClient = null;
301
213
  this.txActive = false;
302
214
  }
303
215
  }
304
-
305
- public async rollbackTransaction(): Promise<void> {
306
- if (!this.txClient || !this.txActive) throw new QueryError('No active transaction', 'postgres');
216
+ async rollbackTransaction() {
217
+ if (!this.txClient || !this.txActive) throw new QueryError("No active transaction", "postgres");
307
218
  this.clearTxTimeout();
308
219
  try {
309
- await this.txClient.query('ROLLBACK');
220
+ await this.txClient.query("ROLLBACK");
310
221
  } finally {
311
222
  this.txClient.release();
312
223
  this.txClient = null;
313
224
  this.txActive = false;
314
225
  }
315
226
  }
316
-
317
- public isInTransaction(): boolean {
227
+ isInTransaction() {
318
228
  return this.txActive;
319
229
  }
320
-
321
- public async queryInTransaction(sql: string, params?: unknown[]): Promise<QueryResult> {
322
- if (!this.txClient || !this.txActive) throw new QueryError('No active transaction', 'postgres');
323
-
230
+ async queryInTransaction(sql, params) {
231
+ if (!this.txClient || !this.txActive) throw new QueryError("No active transaction", "postgres");
324
232
  return this.trackQuery(async () => {
233
+ var _a, _b, _c;
325
234
  const { result, executionTime } = await this.measureExecution(async () => {
326
235
  try {
327
- return await this.txClient!.query(sql, params);
236
+ return await this.txClient.query(sql, params);
328
237
  } catch (error) {
329
- throw mapDatabaseError(error, 'postgres', sql);
238
+ throw mapDatabaseError(error, "postgres", sql);
330
239
  }
331
240
  });
332
-
333
241
  return {
334
242
  rows: result.rows,
335
- fields: result.fields?.map((f) => f.name) ?? [],
336
- rowCount: result.rowCount ?? 0,
337
- executionTime,
243
+ fields: (_b = (_a = result.fields) == null ? void 0 : _a.map((f) => f.name)) != null ? _b : [],
244
+ rowCount: (_c = result.rowCount) != null ? _c : 0,
245
+ executionTime
338
246
  };
339
247
  });
340
248
  }
341
-
342
249
  // ============================================================================
343
250
  // Schema Operations
344
251
  // ============================================================================
345
-
346
- public async getSchema(): Promise<TableSchema[]> {
252
+ async getSchema() {
347
253
  this.ensureConnected();
348
-
349
- const client = await this.pool!.connect();
254
+ const client = await this.pool.connect();
350
255
  try {
351
- // Optimized single query to fetch all schema information
352
- // This replaces the N+1 pattern (1 + N*4 queries) with a single query
353
256
  const result = await client.query(`
354
257
  WITH tables_info AS (
355
258
  SELECT
@@ -450,94 +353,57 @@ export class PostgresProvider extends SQLBaseProvider {
450
353
  LEFT JOIN index_info ii ON ii.table_schema = ti.table_schema AND ii.table_name = ti.table_name
451
354
  ORDER BY ti.table_schema, ti.table_name ASC;
452
355
  `);
453
-
454
- interface SchemaRow {
455
- table_schema: string;
456
- table_name: string;
457
- row_count: string;
458
- total_size: string;
459
- pk_columns: string[];
460
- columns?: Array<{
461
- name: string;
462
- type: string;
463
- nullable: boolean;
464
- defaultValue?: string | null;
465
- }>;
466
- indexes?: Array<{
467
- name: string;
468
- columns: string[];
469
- unique: boolean;
470
- }>;
471
- foreign_keys?: Array<{
472
- columnName: string;
473
- referencedSchema: string;
474
- referencedTable: string;
475
- referencedColumn: string;
476
- }>;
477
- }
478
-
479
- return result.rows.map((row: SchemaRow) => {
356
+ return result.rows.map((row) => {
480
357
  const schemaName = row.table_schema;
481
358
  const tableName = row.table_name;
482
- const displayName = schemaName === 'public' ? tableName : `${schemaName}.${tableName}`;
483
- const rowCount = Math.max(0, parseInt(row.row_count || '0'));
484
- const sizeBytes = parseInt(row.total_size || '0');
485
- const pkColumns: string[] = row.pk_columns || [];
486
-
487
- // Parse columns and add isPrimary flag
488
- const columns = (row.columns || []).map((col) => ({
489
- name: col.name,
490
- type: col.type,
491
- nullable: col.nullable,
492
- isPrimary: pkColumns.includes(col.name),
493
- defaultValue: col.defaultValue ?? undefined,
494
- }));
495
-
496
- // Parse indexes
359
+ const displayName = schemaName === "public" ? tableName : `${schemaName}.${tableName}`;
360
+ const rowCount = Math.max(0, parseInt(row.row_count || "0"));
361
+ const sizeBytes = parseInt(row.total_size || "0");
362
+ const pkColumns = row.pk_columns || [];
363
+ const columns = (row.columns || []).map((col) => {
364
+ var _a;
365
+ return {
366
+ name: col.name,
367
+ type: col.type,
368
+ nullable: col.nullable,
369
+ isPrimary: pkColumns.includes(col.name),
370
+ defaultValue: (_a = col.defaultValue) != null ? _a : void 0
371
+ };
372
+ });
497
373
  const indexes = (row.indexes || []).map((idx) => ({
498
374
  name: idx.name,
499
375
  columns: Array.isArray(idx.columns) ? idx.columns : [],
500
- unique: idx.unique,
376
+ unique: idx.unique
501
377
  }));
502
-
503
- // Parse foreign keys
504
378
  const foreignKeys = (row.foreign_keys || []).map((fk) => ({
505
379
  columnName: fk.columnName,
506
- referencedTable: fk.referencedSchema === 'public'
507
- ? fk.referencedTable
508
- : `${fk.referencedSchema}.${fk.referencedTable}`,
509
- referencedColumn: fk.referencedColumn,
380
+ referencedTable: fk.referencedSchema === "public" ? fk.referencedTable : `${fk.referencedSchema}.${fk.referencedTable}`,
381
+ referencedColumn: fk.referencedColumn
510
382
  }));
511
-
512
383
  return {
513
384
  name: displayName,
514
385
  rowCount,
515
386
  size: formatBytes(sizeBytes),
516
387
  columns,
517
388
  indexes,
518
- foreignKeys,
389
+ foreignKeys
519
390
  };
520
391
  });
521
392
  } finally {
522
393
  client.release();
523
394
  }
524
395
  }
525
-
526
396
  // ============================================================================
527
397
  // Health & Monitoring
528
398
  // ============================================================================
529
-
530
- public async getHealth(): Promise<HealthInfo> {
399
+ async getHealth() {
531
400
  this.ensureConnected();
532
-
533
- const client = await this.pool!.connect();
401
+ const client = await this.pool.connect();
534
402
  try {
535
- const connRes = await client.query('SELECT count(*) FROM pg_stat_activity');
536
-
537
- const sizeRes = await client.query('SELECT pg_size_pretty(pg_database_size($1))', [
538
- this.config.database,
403
+ const connRes = await client.query("SELECT count(*) FROM pg_stat_activity");
404
+ const sizeRes = await client.query("SELECT pg_size_pretty(pg_database_size($1))", [
405
+ this.config.database
539
406
  ]);
540
-
541
407
  const cacheRes = await client.query(`
542
408
  SELECT
543
409
  sum(heap_blks_read) as heap_read,
@@ -548,8 +414,7 @@ export class PostgresProvider extends SQLBaseProvider {
548
414
  ) as ratio
549
415
  FROM pg_statio_user_tables;
550
416
  `);
551
-
552
- let slowQueries: SlowQuery[] = [];
417
+ let slowQueries = [];
553
418
  try {
554
419
  const slowRes = await client.query(`
555
420
  SELECT
@@ -564,14 +429,13 @@ export class PostgresProvider extends SQLBaseProvider {
564
429
  slowQueries = slowRes.rows.map((r) => ({
565
430
  query: r.query,
566
431
  calls: r.calls,
567
- avgTime: r.avgtime,
432
+ avgTime: r.avgtime
568
433
  }));
569
- } catch {
434
+ } catch (e) {
570
435
  slowQueries = [
571
- { query: 'pg_stat_statements extension not enabled', calls: 0, avgTime: 'N/A' },
436
+ { query: "pg_stat_statements extension not enabled", calls: 0, avgTime: "N/A" }
572
437
  ];
573
438
  }
574
-
575
439
  const sessionsRes = await client.query(`
576
440
  SELECT
577
441
  pid,
@@ -590,125 +454,100 @@ export class PostgresProvider extends SQLBaseProvider {
590
454
  ORDER BY xact_start DESC NULLS LAST
591
455
  LIMIT 10;
592
456
  `, [this.config.database]);
593
-
594
- const activeSessions: ActiveSession[] = sessionsRes.rows.map((r) => ({
457
+ const activeSessions = sessionsRes.rows.map((r) => ({
595
458
  pid: r.pid,
596
- user: r.user || 'unknown',
597
- database: r.database || '',
459
+ user: r.user || "unknown",
460
+ database: r.database || "",
598
461
  state: r.state,
599
- query: r.query || '',
600
- duration: r.duration,
462
+ query: r.query || "",
463
+ duration: r.duration
601
464
  }));
602
-
603
465
  return {
604
466
  activeConnections: parseInt(connRes.rows[0].count),
605
467
  databaseSize: sizeRes.rows[0].pg_size_pretty,
606
468
  cacheHitRatio: `${cacheRes.rows[0].ratio}%`,
607
469
  slowQueries,
608
- activeSessions,
470
+ activeSessions
609
471
  };
610
472
  } finally {
611
473
  client.release();
612
474
  }
613
475
  }
614
-
615
476
  // ============================================================================
616
477
  // Maintenance Operations
617
478
  // ============================================================================
618
-
619
- public async runMaintenance(
620
- type: MaintenanceType,
621
- target?: string
622
- ): Promise<MaintenanceResult> {
479
+ async runMaintenance(type, target) {
623
480
  this.ensureConnected();
624
-
625
481
  const { result, executionTime } = await this.measureExecution(async () => {
626
- const client = await this.pool!.connect();
482
+ const client = await this.pool.connect();
627
483
  try {
628
- let sql = '';
629
-
484
+ let sql = "";
630
485
  switch (type) {
631
- case 'vacuum':
632
- sql = target
633
- ? `VACUUM ANALYZE public.${this.escapeIdentifier(target)}`
634
- : 'VACUUM ANALYZE';
486
+ case "vacuum":
487
+ sql = target ? `VACUUM ANALYZE public.${this.escapeIdentifier(target)}` : "VACUUM ANALYZE";
635
488
  break;
636
- case 'analyze':
637
- sql = target
638
- ? `ANALYZE public.${this.escapeIdentifier(target)}`
639
- : 'ANALYZE';
489
+ case "analyze":
490
+ sql = target ? `ANALYZE public.${this.escapeIdentifier(target)}` : "ANALYZE";
640
491
  break;
641
- case 'reindex':
642
- sql = target
643
- ? `REINDEX TABLE public.${this.escapeIdentifier(target)}`
644
- : `REINDEX DATABASE ${this.escapeIdentifier(this.config.database || '')}`;
492
+ case "reindex":
493
+ sql = target ? `REINDEX TABLE public.${this.escapeIdentifier(target)}` : `REINDEX DATABASE ${this.escapeIdentifier(this.config.database || "")}`;
645
494
  break;
646
- case 'kill':
495
+ case "kill":
647
496
  if (!target) {
648
- throw new QueryError('Target PID is required for kill operation', 'postgres');
497
+ throw new QueryError("Target PID is required for kill operation", "postgres");
649
498
  }
650
499
  const pid = parseInt(target, 10);
651
500
  if (isNaN(pid)) {
652
- throw new QueryError('Invalid PID for kill operation', 'postgres');
501
+ throw new QueryError("Invalid PID for kill operation", "postgres");
653
502
  }
654
503
  sql = `SELECT pg_terminate_backend(${pid})`;
655
504
  break;
656
505
  default:
657
- throw new QueryError(`Unsupported maintenance type: ${type}`, 'postgres');
506
+ throw new QueryError(`Unsupported maintenance type: ${type}`, "postgres");
658
507
  }
659
-
660
508
  await client.query(sql);
661
509
  return { success: true };
662
510
  } finally {
663
511
  client.release();
664
512
  }
665
513
  });
666
-
667
514
  return {
668
515
  success: result.success,
669
516
  executionTime,
670
- message: `${type.toUpperCase()} completed successfully`,
517
+ message: `${type.toUpperCase()} completed successfully`
671
518
  };
672
519
  }
673
-
674
520
  // ============================================================================
675
521
  // Pool Statistics
676
522
  // ============================================================================
677
-
678
- public getPoolStats() {
523
+ getPoolStats() {
679
524
  if (!this.pool) {
680
525
  return { total: 0, idle: 0, active: 0, waiting: 0 };
681
526
  }
682
-
683
527
  return {
684
528
  total: this.pool.totalCount,
685
529
  idle: this.pool.idleCount,
686
530
  active: this.pool.totalCount - this.pool.idleCount,
687
- waiting: this.pool.waitingCount,
531
+ waiting: this.pool.waitingCount
688
532
  };
689
533
  }
690
-
691
534
  // ============================================================================
692
535
  // Extended Monitoring Methods
693
536
  // ============================================================================
694
-
695
537
  /**
696
538
  * Get database overview metrics
697
539
  */
698
- public async getOverview(): Promise<DatabaseOverview> {
540
+ async getOverview() {
541
+ var _a;
699
542
  this.ensureConnected();
700
-
701
- const client = await this.pool!.connect();
543
+ const client = await this.pool.connect();
702
544
  try {
703
- // Get version and uptime
704
545
  const infoRes = await client.query(`
705
546
  SELECT
706
547
  version() as version,
707
548
  pg_postmaster_start_time() as start_time,
708
549
  EXTRACT(EPOCH FROM (now() - pg_postmaster_start_time()))::bigint as uptime_seconds
709
550
  `);
710
-
711
- // Get connection counts
712
551
  const connRes = await client.query(`
713
552
  SELECT
714
553
  count(*) as active_connections,
@@ -716,56 +555,43 @@ export class PostgresProvider extends SQLBaseProvider {
716
555
  FROM pg_stat_activity
717
556
  WHERE datname = $1
718
557
  `, [this.config.database]);
719
-
720
- // Get database size
721
558
  const sizeRes = await client.query(`
722
559
  SELECT
723
560
  pg_size_pretty(pg_database_size($1)) as database_size,
724
561
  pg_database_size($1) as database_size_bytes
725
562
  `, [this.config.database]);
726
-
727
- // Get table and index counts (all user schemas)
728
563
  const countRes = await client.query(`
729
564
  SELECT
730
565
  (SELECT count(*) FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')) as table_count,
731
566
  (SELECT count(*) FROM pg_indexes WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')) as index_count
732
567
  `);
733
-
734
- const uptimeSeconds = parseInt(infoRes.rows[0].uptime_seconds || '0');
568
+ const uptimeSeconds = parseInt(infoRes.rows[0].uptime_seconds || "0");
735
569
  const days = Math.floor(uptimeSeconds / 86400);
736
- const hours = Math.floor((uptimeSeconds % 86400) / 3600);
737
- const minutes = Math.floor((uptimeSeconds % 3600) / 60);
738
- const uptime = days > 0
739
- ? `${days}d ${hours}h ${minutes}m`
740
- : hours > 0
741
- ? `${hours}h ${minutes}m`
742
- : `${minutes}m`;
743
-
570
+ const hours = Math.floor(uptimeSeconds % 86400 / 3600);
571
+ const minutes = Math.floor(uptimeSeconds % 3600 / 60);
572
+ const uptime = days > 0 ? `${days}d ${hours}h ${minutes}m` : hours > 0 ? `${hours}h ${minutes}m` : `${minutes}m`;
744
573
  return {
745
- version: infoRes.rows[0].version?.split(',')[0] || 'PostgreSQL',
574
+ version: ((_a = infoRes.rows[0].version) == null ? void 0 : _a.split(",")[0]) || "PostgreSQL",
746
575
  uptime,
747
- startTime: infoRes.rows[0].start_time ? new Date(infoRes.rows[0].start_time) : undefined,
748
- activeConnections: parseInt(connRes.rows[0].active_connections || '0'),
749
- maxConnections: parseInt(connRes.rows[0].max_connections || '100'),
750
- databaseSize: sizeRes.rows[0].database_size || '0 bytes',
751
- databaseSizeBytes: parseInt(sizeRes.rows[0].database_size_bytes || '0'),
752
- tableCount: parseInt(countRes.rows[0].table_count || '0'),
753
- indexCount: parseInt(countRes.rows[0].index_count || '0'),
576
+ startTime: infoRes.rows[0].start_time ? new Date(infoRes.rows[0].start_time) : void 0,
577
+ activeConnections: parseInt(connRes.rows[0].active_connections || "0"),
578
+ maxConnections: parseInt(connRes.rows[0].max_connections || "100"),
579
+ databaseSize: sizeRes.rows[0].database_size || "0 bytes",
580
+ databaseSizeBytes: parseInt(sizeRes.rows[0].database_size_bytes || "0"),
581
+ tableCount: parseInt(countRes.rows[0].table_count || "0"),
582
+ indexCount: parseInt(countRes.rows[0].index_count || "0")
754
583
  };
755
584
  } finally {
756
585
  client.release();
757
586
  }
758
587
  }
759
-
760
588
  /**
761
589
  * Get performance metrics
762
590
  */
763
- public async getPerformanceMetrics(): Promise<PerformanceMetrics> {
591
+ async getPerformanceMetrics() {
764
592
  this.ensureConnected();
765
-
766
- const client = await this.pool!.connect();
593
+ const client = await this.pool.connect();
767
594
  try {
768
- // Get cache hit ratio
769
595
  const cacheRes = await client.query(`
770
596
  SELECT
771
597
  COALESCE(
@@ -774,8 +600,6 @@ export class PostgresProvider extends SQLBaseProvider {
774
600
  ) as cache_hit_ratio
775
601
  FROM pg_statio_user_tables
776
602
  `);
777
-
778
- // Get transaction stats
779
603
  const txRes = await client.query(`
780
604
  SELECT
781
605
  xact_commit,
@@ -786,9 +610,7 @@ export class PostgresProvider extends SQLBaseProvider {
786
610
  FROM pg_stat_database
787
611
  WHERE datname = $1
788
612
  `, [this.config.database]);
789
-
790
- // Get checkpoint stats (optional - columns may not exist in older PG versions)
791
- let checkpointWriteTime = '0';
613
+ let checkpointWriteTime = "0";
792
614
  try {
793
615
  const checkpointRes = await client.query(`
794
616
  SELECT
@@ -797,44 +619,39 @@ export class PostgresProvider extends SQLBaseProvider {
797
619
  FROM pg_stat_bgwriter
798
620
  `);
799
621
  const checkpointRow = checkpointRes.rows[0] || {};
800
- const writeTime = parseFloat(checkpointRow.checkpoint_write_time || '0');
801
- const syncTime = parseFloat(checkpointRow.checkpoint_sync_time || '0');
802
- checkpointWriteTime = `${((writeTime + syncTime) / 1000).toFixed(1)}s`;
803
- } catch {
804
- // checkpoint_write_time doesn't exist in older PostgreSQL versions
805
- checkpointWriteTime = 'N/A';
622
+ const writeTime = parseFloat(checkpointRow.checkpoint_write_time || "0");
623
+ const syncTime = parseFloat(checkpointRow.checkpoint_sync_time || "0");
624
+ checkpointWriteTime = `${((writeTime + syncTime) / 1e3).toFixed(1)}s`;
625
+ } catch (e) {
626
+ checkpointWriteTime = "N/A";
806
627
  }
807
-
808
628
  const txRow = txRes.rows[0] || {};
809
- const blksHit = parseInt(txRow.blks_hit || '0');
810
- const blksRead = parseInt(txRow.blks_read || '0');
811
- const bufferPoolUsage = blksHit + blksRead > 0
812
- ? Math.round((blksHit / (blksHit + blksRead)) * 100)
813
- : 100;
814
-
629
+ const blksHit = parseInt(txRow.blks_hit || "0");
630
+ const blksRead = parseInt(txRow.blks_read || "0");
631
+ const bufferPoolUsage = blksHit + blksRead > 0 ? Math.round(blksHit / (blksHit + blksRead) * 100) : 100;
815
632
  return {
816
- cacheHitRatio: parseFloat(cacheRes.rows[0].cache_hit_ratio || '100'),
817
- transactionsPerSecond: undefined, // Would need time-based sampling
818
- queriesPerSecond: undefined, // Would need time-based sampling
633
+ cacheHitRatio: parseFloat(cacheRes.rows[0].cache_hit_ratio || "100"),
634
+ transactionsPerSecond: void 0,
635
+ // Would need time-based sampling
636
+ queriesPerSecond: void 0,
637
+ // Would need time-based sampling
819
638
  bufferPoolUsage,
820
- deadlocks: parseInt(txRow.deadlocks || '0'),
821
- checkpointWriteTime,
639
+ deadlocks: parseInt(txRow.deadlocks || "0"),
640
+ checkpointWriteTime
822
641
  };
823
642
  } finally {
824
643
  client.release();
825
644
  }
826
645
  }
827
-
828
646
  /**
829
647
  * Get slow query statistics from pg_stat_statements
830
648
  */
831
- public async getSlowQueries(options?: { limit?: number }): Promise<SlowQueryStats[]> {
649
+ async getSlowQueries(options) {
650
+ var _a;
832
651
  this.ensureConnected();
833
- const limit = options?.limit ?? 10;
834
-
835
- const client = await this.pool!.connect();
652
+ const limit = (_a = options == null ? void 0 : options.limit) != null ? _a : 10;
653
+ const client = await this.pool.connect();
836
654
  try {
837
- // Try pg_stat_statements first (requires extension)
838
655
  try {
839
656
  const res = await client.query(`
840
657
  SELECT
@@ -854,22 +671,19 @@ export class PostgresProvider extends SQLBaseProvider {
854
671
  ORDER BY total_exec_time DESC
855
672
  LIMIT $2
856
673
  `, [this.config.database, limit]);
857
-
858
674
  return res.rows.map((r) => ({
859
675
  queryId: r.query_id,
860
- query: r.query || '',
861
- calls: parseInt(r.calls || '0'),
862
- totalTime: parseFloat(r.total_time || '0'),
863
- avgTime: parseFloat(r.avg_time || '0'),
864
- minTime: parseFloat(r.min_time || '0'),
865
- maxTime: parseFloat(r.max_time || '0'),
866
- rows: parseInt(r.rows || '0'),
867
- sharedBlksHit: parseInt(r.shared_blks_hit || '0'),
868
- sharedBlksRead: parseInt(r.shared_blks_read || '0'),
676
+ query: r.query || "",
677
+ calls: parseInt(r.calls || "0"),
678
+ totalTime: parseFloat(r.total_time || "0"),
679
+ avgTime: parseFloat(r.avg_time || "0"),
680
+ minTime: parseFloat(r.min_time || "0"),
681
+ maxTime: parseFloat(r.max_time || "0"),
682
+ rows: parseInt(r.rows || "0"),
683
+ sharedBlksHit: parseInt(r.shared_blks_hit || "0"),
684
+ sharedBlksRead: parseInt(r.shared_blks_read || "0")
869
685
  }));
870
- } catch {
871
- // Fallback: use pg_stat_activity for currently running queries
872
- // This doesn't provide historical stats, but shows active queries
686
+ } catch (e) {
873
687
  const fallbackRes = await client.query(`
874
688
  SELECT
875
689
  pid::text as query_id,
@@ -888,33 +702,31 @@ export class PostgresProvider extends SQLBaseProvider {
888
702
  ORDER BY query_start ASC NULLS LAST
889
703
  LIMIT $2
890
704
  `, [this.config.database, limit]);
891
-
892
705
  return fallbackRes.rows.map((r) => ({
893
706
  queryId: r.query_id,
894
- query: r.query || '',
895
- calls: parseInt(r.calls || '1'),
896
- totalTime: parseFloat(r.total_time || '0'),
897
- avgTime: parseFloat(r.avg_time || '0'),
898
- minTime: undefined,
899
- maxTime: undefined,
900
- rows: parseInt(r.rows || '0'),
901
- sharedBlksHit: undefined,
902
- sharedBlksRead: undefined,
707
+ query: r.query || "",
708
+ calls: parseInt(r.calls || "1"),
709
+ totalTime: parseFloat(r.total_time || "0"),
710
+ avgTime: parseFloat(r.avg_time || "0"),
711
+ minTime: void 0,
712
+ maxTime: void 0,
713
+ rows: parseInt(r.rows || "0"),
714
+ sharedBlksHit: void 0,
715
+ sharedBlksRead: void 0
903
716
  }));
904
717
  }
905
718
  } finally {
906
719
  client.release();
907
720
  }
908
721
  }
909
-
910
722
  /**
911
723
  * Get active sessions with detailed information
912
724
  */
913
- public async getActiveSessions(options?: { limit?: number }): Promise<ActiveSessionDetails[]> {
725
+ async getActiveSessions(options) {
726
+ var _a;
914
727
  this.ensureConnected();
915
- const limit = options?.limit ?? 50;
916
-
917
- const client = await this.pool!.connect();
728
+ const limit = (_a = options == null ? void 0 : options.limit) != null ? _a : 50;
729
+ const client = await this.pool.connect();
918
730
  try {
919
731
  const res = await client.query(`
920
732
  SELECT
@@ -950,42 +762,36 @@ export class PostgresProvider extends SQLBaseProvider {
950
762
  query_start DESC NULLS LAST
951
763
  LIMIT $2
952
764
  `, [this.config.database, limit]);
953
-
954
765
  return res.rows.map((r) => ({
955
766
  pid: r.pid,
956
- user: r.user || 'unknown',
957
- database: r.database || '',
958
- applicationName: r.application_name || undefined,
959
- clientAddr: r.client_addr || undefined,
767
+ user: r.user || "unknown",
768
+ database: r.database || "",
769
+ applicationName: r.application_name || void 0,
770
+ clientAddr: r.client_addr || void 0,
960
771
  state: r.state,
961
- query: r.query || '',
962
- queryStart: r.query_start ? new Date(r.query_start) : undefined,
772
+ query: r.query || "",
773
+ queryStart: r.query_start ? new Date(r.query_start) : void 0,
963
774
  duration: r.duration,
964
- durationMs: parseFloat(r.duration_ms || '0'),
965
- waitEventType: r.wait_event_type || undefined,
966
- waitEvent: r.wait_event || undefined,
967
- blocked: false, // Could be enhanced with pg_locks query
775
+ durationMs: parseFloat(r.duration_ms || "0"),
776
+ waitEventType: r.wait_event_type || void 0,
777
+ waitEvent: r.wait_event || void 0,
778
+ blocked: false
779
+ // Could be enhanced with pg_locks query
968
780
  }));
969
781
  } finally {
970
782
  client.release();
971
783
  }
972
784
  }
973
-
974
785
  /**
975
786
  * Get table statistics
976
787
  */
977
- public async getTableStats(options?: { schema?: string }): Promise<TableStats[]> {
788
+ async getTableStats(options) {
978
789
  this.ensureConnected();
979
- const schema = options?.schema;
980
-
981
- const client = await this.pool!.connect();
790
+ const schema = options == null ? void 0 : options.schema;
791
+ const client = await this.pool.connect();
982
792
  try {
983
- // If schema is specified, filter by it; otherwise get all user schemas
984
- const whereClause = schema
985
- ? `WHERE schemaname = $1`
986
- : `WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')`;
793
+ const whereClause = schema ? `WHERE schemaname = $1` : `WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')`;
987
794
  const params = schema ? [schema] : [];
988
-
989
795
  const res = await client.query(`
990
796
  SELECT
991
797
  schemaname as schema_name,
@@ -1012,47 +818,36 @@ export class PostgresProvider extends SQLBaseProvider {
1012
818
  ${whereClause}
1013
819
  ORDER BY pg_total_relation_size(schemaname || '.' || relname) DESC
1014
820
  `, params);
1015
-
1016
821
  return res.rows.map((r) => ({
1017
822
  schemaName: r.schema_name,
1018
823
  tableName: r.table_name,
1019
- rowCount: parseInt(r.row_count || '0'),
1020
- liveRowCount: parseInt(r.live_row_count || '0'),
1021
- deadRowCount: parseInt(r.dead_row_count || '0'),
1022
- tableSize: r.table_size || '0 bytes',
1023
- tableSizeBytes: parseInt(r.table_size_bytes || '0'),
1024
- indexSize: r.index_size || '0 bytes',
1025
- indexSizeBytes: parseInt(r.index_size_bytes || '0'),
1026
- totalSize: r.total_size || '0 bytes',
1027
- totalSizeBytes: parseInt(r.total_size_bytes || '0'),
1028
- lastVacuum: r.last_vacuum || r.last_autovacuum
1029
- ? new Date(r.last_vacuum || r.last_autovacuum)
1030
- : undefined,
1031
- lastAnalyze: r.last_analyze || r.last_autoanalyze
1032
- ? new Date(r.last_analyze || r.last_autoanalyze)
1033
- : undefined,
1034
- bloatRatio: parseFloat(r.bloat_ratio || '0'),
824
+ rowCount: parseInt(r.row_count || "0"),
825
+ liveRowCount: parseInt(r.live_row_count || "0"),
826
+ deadRowCount: parseInt(r.dead_row_count || "0"),
827
+ tableSize: r.table_size || "0 bytes",
828
+ tableSizeBytes: parseInt(r.table_size_bytes || "0"),
829
+ indexSize: r.index_size || "0 bytes",
830
+ indexSizeBytes: parseInt(r.index_size_bytes || "0"),
831
+ totalSize: r.total_size || "0 bytes",
832
+ totalSizeBytes: parseInt(r.total_size_bytes || "0"),
833
+ lastVacuum: r.last_vacuum || r.last_autovacuum ? new Date(r.last_vacuum || r.last_autovacuum) : void 0,
834
+ lastAnalyze: r.last_analyze || r.last_autoanalyze ? new Date(r.last_analyze || r.last_autoanalyze) : void 0,
835
+ bloatRatio: parseFloat(r.bloat_ratio || "0")
1035
836
  }));
1036
837
  } finally {
1037
838
  client.release();
1038
839
  }
1039
840
  }
1040
-
1041
841
  /**
1042
842
  * Get index statistics
1043
843
  */
1044
- public async getIndexStats(options?: { schema?: string }): Promise<IndexStats[]> {
844
+ async getIndexStats(options) {
1045
845
  this.ensureConnected();
1046
- const schema = options?.schema;
1047
-
1048
- const client = await this.pool!.connect();
846
+ const schema = options == null ? void 0 : options.schema;
847
+ const client = await this.pool.connect();
1049
848
  try {
1050
- // If schema is specified, filter by it; otherwise get all user schemas
1051
- const whereClause = schema
1052
- ? `WHERE s.schemaname = $1`
1053
- : `WHERE s.schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')`;
849
+ const whereClause = schema ? `WHERE s.schemaname = $1` : `WHERE s.schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')`;
1054
850
  const params = schema ? [schema] : [];
1055
-
1056
851
  const res = await client.query(`
1057
852
  SELECT
1058
853
  s.schemaname as schema_name,
@@ -1087,7 +882,6 @@ export class PostgresProvider extends SQLBaseProvider {
1087
882
  ix.indisunique, ix.indisprimary, s.relid
1088
883
  ORDER BY s.idx_scan DESC
1089
884
  `, params);
1090
-
1091
885
  return res.rows.map((r) => ({
1092
886
  schemaName: r.schema_name,
1093
887
  tableName: r.table_name,
@@ -1096,27 +890,23 @@ export class PostgresProvider extends SQLBaseProvider {
1096
890
  columns: Array.isArray(r.columns) ? r.columns : [],
1097
891
  isUnique: r.is_unique || false,
1098
892
  isPrimary: r.is_primary || false,
1099
- indexSize: r.index_size || '0 bytes',
1100
- indexSizeBytes: parseInt(r.index_size_bytes || '0'),
1101
- scans: parseInt(r.scans || '0'),
1102
- usageRatio: parseFloat(r.usage_ratio || '0'),
893
+ indexSize: r.index_size || "0 bytes",
894
+ indexSizeBytes: parseInt(r.index_size_bytes || "0"),
895
+ scans: parseInt(r.scans || "0"),
896
+ usageRatio: parseFloat(r.usage_ratio || "0")
1103
897
  }));
1104
898
  } finally {
1105
899
  client.release();
1106
900
  }
1107
901
  }
1108
-
1109
902
  /**
1110
903
  * Get storage statistics including tablespaces and WAL
1111
904
  */
1112
- public async getStorageStats(): Promise<StorageStats[]> {
905
+ async getStorageStats() {
1113
906
  this.ensureConnected();
1114
-
1115
- const client = await this.pool!.connect();
907
+ const client = await this.pool.connect();
1116
908
  try {
1117
- const results: StorageStats[] = [];
1118
-
1119
- // Get tablespace info
909
+ const results = [];
1120
910
  const tsRes = await client.query(`
1121
911
  SELECT
1122
912
  spcname as name,
@@ -1127,53 +917,53 @@ export class PostgresProvider extends SQLBaseProvider {
1127
917
  FROM pg_tablespace
1128
918
  WHERE spcname NOT LIKE 'pg_global'
1129
919
  `);
1130
-
1131
920
  for (const row of tsRes.rows) {
1132
921
  results.push({
1133
922
  name: row.name,
1134
- location: row.location || 'default',
1135
- size: row.size || '0 bytes',
1136
- sizeBytes: parseInt(row.size_bytes || '0'),
1137
- usagePercent: undefined, // Would need disk space info
923
+ location: row.location || "default",
924
+ size: row.size || "0 bytes",
925
+ sizeBytes: parseInt(row.size_bytes || "0"),
926
+ usagePercent: void 0
927
+ // Would need disk space info
1138
928
  });
1139
929
  }
1140
-
1141
- // Get WAL info (if superuser or has permissions)
1142
930
  try {
1143
931
  const walRes = await client.query(`
1144
932
  SELECT
1145
933
  pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), '0/0')) as wal_size,
1146
934
  pg_wal_lsn_diff(pg_current_wal_lsn(), '0/0') as wal_size_bytes
1147
935
  `);
1148
-
1149
936
  if (walRes.rows.length > 0) {
1150
937
  results.push({
1151
- name: 'WAL',
1152
- location: 'pg_wal',
1153
- size: walRes.rows[0].wal_size || '0 bytes',
1154
- sizeBytes: parseInt(walRes.rows[0].wal_size_bytes || '0'),
1155
- walSize: walRes.rows[0].wal_size || '0 bytes',
1156
- walSizeBytes: parseInt(walRes.rows[0].wal_size_bytes || '0'),
938
+ name: "WAL",
939
+ location: "pg_wal",
940
+ size: walRes.rows[0].wal_size || "0 bytes",
941
+ sizeBytes: parseInt(walRes.rows[0].wal_size_bytes || "0"),
942
+ walSize: walRes.rows[0].wal_size || "0 bytes",
943
+ walSizeBytes: parseInt(walRes.rows[0].wal_size_bytes || "0")
1157
944
  });
1158
945
  }
1159
- } catch {
1160
- // WAL info requires superuser, ignore if not available
946
+ } catch (e) {
1161
947
  }
1162
-
1163
948
  return results;
1164
949
  } finally {
1165
950
  client.release();
1166
951
  }
1167
952
  }
1168
-
1169
- public async getPgStatActivity(): Promise<PgStatActivityRow[]> {
953
+ async getPgStatActivity() {
1170
954
  this.ensureConnected();
1171
- const client = await this.pool!.connect();
955
+ const client = await this.pool.connect();
1172
956
  try {
1173
- const res = await client.query('SELECT * FROM pg_stat_activity');
1174
- return res.rows as PgStatActivityRow[];
957
+ const res = await client.query("SELECT * FROM pg_stat_activity");
958
+ return res.rows;
1175
959
  } finally {
1176
960
  client.release();
1177
961
  }
1178
962
  }
1179
- }
963
+ };
964
+ _PostgresProvider.TX_TIMEOUT_MS = 5 * 60 * 1e3;
965
+ var PostgresProvider = _PostgresProvider;
966
+
967
+ export { PostgresProvider };
968
+ //# sourceMappingURL=postgres-O5KOQUVP.mjs.map
969
+ //# sourceMappingURL=postgres-O5KOQUVP.mjs.map