@neverinfamous/postgres-mcp 1.2.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/README.md +202 -148
  2. package/dist/__tests__/benchmarks/codemode.bench.d.ts +10 -0
  3. package/dist/__tests__/benchmarks/codemode.bench.d.ts.map +1 -0
  4. package/dist/__tests__/benchmarks/codemode.bench.js +159 -0
  5. package/dist/__tests__/benchmarks/codemode.bench.js.map +1 -0
  6. package/dist/__tests__/benchmarks/connection-pool.bench.d.ts +10 -0
  7. package/dist/__tests__/benchmarks/connection-pool.bench.d.ts.map +1 -0
  8. package/dist/__tests__/benchmarks/connection-pool.bench.js +123 -0
  9. package/dist/__tests__/benchmarks/connection-pool.bench.js.map +1 -0
  10. package/dist/__tests__/benchmarks/handler-dispatch.bench.d.ts +11 -0
  11. package/dist/__tests__/benchmarks/handler-dispatch.bench.d.ts.map +1 -0
  12. package/dist/__tests__/benchmarks/handler-dispatch.bench.js +199 -0
  13. package/dist/__tests__/benchmarks/handler-dispatch.bench.js.map +1 -0
  14. package/dist/__tests__/benchmarks/logger-sanitization.bench.d.ts +15 -0
  15. package/dist/__tests__/benchmarks/logger-sanitization.bench.d.ts.map +1 -0
  16. package/dist/__tests__/benchmarks/logger-sanitization.bench.js +155 -0
  17. package/dist/__tests__/benchmarks/logger-sanitization.bench.js.map +1 -0
  18. package/dist/__tests__/benchmarks/resource-prompts.bench.d.ts +10 -0
  19. package/dist/__tests__/benchmarks/resource-prompts.bench.d.ts.map +1 -0
  20. package/dist/__tests__/benchmarks/resource-prompts.bench.js +181 -0
  21. package/dist/__tests__/benchmarks/resource-prompts.bench.js.map +1 -0
  22. package/dist/__tests__/benchmarks/schema-parsing.bench.d.ts +11 -0
  23. package/dist/__tests__/benchmarks/schema-parsing.bench.d.ts.map +1 -0
  24. package/dist/__tests__/benchmarks/schema-parsing.bench.js +209 -0
  25. package/dist/__tests__/benchmarks/schema-parsing.bench.js.map +1 -0
  26. package/dist/__tests__/benchmarks/tool-filtering.bench.d.ts +9 -0
  27. package/dist/__tests__/benchmarks/tool-filtering.bench.d.ts.map +1 -0
  28. package/dist/__tests__/benchmarks/tool-filtering.bench.js +83 -0
  29. package/dist/__tests__/benchmarks/tool-filtering.bench.js.map +1 -0
  30. package/dist/__tests__/benchmarks/transport-auth.bench.d.ts +10 -0
  31. package/dist/__tests__/benchmarks/transport-auth.bench.d.ts.map +1 -0
  32. package/dist/__tests__/benchmarks/transport-auth.bench.js +128 -0
  33. package/dist/__tests__/benchmarks/transport-auth.bench.js.map +1 -0
  34. package/dist/__tests__/benchmarks/utilities.bench.d.ts +10 -0
  35. package/dist/__tests__/benchmarks/utilities.bench.d.ts.map +1 -0
  36. package/dist/__tests__/benchmarks/utilities.bench.js +164 -0
  37. package/dist/__tests__/benchmarks/utilities.bench.js.map +1 -0
  38. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  39. package/dist/adapters/DatabaseAdapter.js +12 -0
  40. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  41. package/dist/adapters/postgresql/PostgresAdapter.d.ts.map +1 -1
  42. package/dist/adapters/postgresql/PostgresAdapter.js +56 -3
  43. package/dist/adapters/postgresql/PostgresAdapter.js.map +1 -1
  44. package/dist/adapters/postgresql/prompts/ltree.js +2 -2
  45. package/dist/adapters/postgresql/prompts/ltree.js.map +1 -1
  46. package/dist/adapters/postgresql/schemas/admin.d.ts +10 -5
  47. package/dist/adapters/postgresql/schemas/admin.d.ts.map +1 -1
  48. package/dist/adapters/postgresql/schemas/admin.js +10 -5
  49. package/dist/adapters/postgresql/schemas/admin.js.map +1 -1
  50. package/dist/adapters/postgresql/schemas/backup.d.ts +45 -27
  51. package/dist/adapters/postgresql/schemas/backup.d.ts.map +1 -1
  52. package/dist/adapters/postgresql/schemas/backup.js +64 -26
  53. package/dist/adapters/postgresql/schemas/backup.js.map +1 -1
  54. package/dist/adapters/postgresql/schemas/core.d.ts +53 -19
  55. package/dist/adapters/postgresql/schemas/core.d.ts.map +1 -1
  56. package/dist/adapters/postgresql/schemas/core.js +61 -17
  57. package/dist/adapters/postgresql/schemas/core.js.map +1 -1
  58. package/dist/adapters/postgresql/schemas/cron.d.ts +51 -32
  59. package/dist/adapters/postgresql/schemas/cron.d.ts.map +1 -1
  60. package/dist/adapters/postgresql/schemas/cron.js +64 -44
  61. package/dist/adapters/postgresql/schemas/cron.js.map +1 -1
  62. package/dist/adapters/postgresql/schemas/extensions.d.ts +224 -110
  63. package/dist/adapters/postgresql/schemas/extensions.d.ts.map +1 -1
  64. package/dist/adapters/postgresql/schemas/extensions.js +245 -96
  65. package/dist/adapters/postgresql/schemas/extensions.js.map +1 -1
  66. package/dist/adapters/postgresql/schemas/index.d.ts +7 -6
  67. package/dist/adapters/postgresql/schemas/index.d.ts.map +1 -1
  68. package/dist/adapters/postgresql/schemas/index.js +16 -8
  69. package/dist/adapters/postgresql/schemas/index.js.map +1 -1
  70. package/dist/adapters/postgresql/schemas/introspection.d.ts +445 -0
  71. package/dist/adapters/postgresql/schemas/introspection.d.ts.map +1 -0
  72. package/dist/adapters/postgresql/schemas/introspection.js +478 -0
  73. package/dist/adapters/postgresql/schemas/introspection.js.map +1 -0
  74. package/dist/adapters/postgresql/schemas/jsonb.d.ts +102 -42
  75. package/dist/adapters/postgresql/schemas/jsonb.d.ts.map +1 -1
  76. package/dist/adapters/postgresql/schemas/jsonb.js +125 -30
  77. package/dist/adapters/postgresql/schemas/jsonb.js.map +1 -1
  78. package/dist/adapters/postgresql/schemas/monitoring.d.ts +69 -36
  79. package/dist/adapters/postgresql/schemas/monitoring.d.ts.map +1 -1
  80. package/dist/adapters/postgresql/schemas/monitoring.js +98 -40
  81. package/dist/adapters/postgresql/schemas/monitoring.js.map +1 -1
  82. package/dist/adapters/postgresql/schemas/partitioning.d.ts +21 -24
  83. package/dist/adapters/postgresql/schemas/partitioning.d.ts.map +1 -1
  84. package/dist/adapters/postgresql/schemas/partitioning.js +26 -14
  85. package/dist/adapters/postgresql/schemas/partitioning.js.map +1 -1
  86. package/dist/adapters/postgresql/schemas/partman.d.ts +69 -0
  87. package/dist/adapters/postgresql/schemas/partman.d.ts.map +1 -1
  88. package/dist/adapters/postgresql/schemas/partman.js +46 -33
  89. package/dist/adapters/postgresql/schemas/partman.js.map +1 -1
  90. package/dist/adapters/postgresql/schemas/performance.d.ts +97 -49
  91. package/dist/adapters/postgresql/schemas/performance.d.ts.map +1 -1
  92. package/dist/adapters/postgresql/schemas/performance.js +139 -34
  93. package/dist/adapters/postgresql/schemas/performance.js.map +1 -1
  94. package/dist/adapters/postgresql/schemas/postgis.d.ts +20 -0
  95. package/dist/adapters/postgresql/schemas/postgis.d.ts.map +1 -1
  96. package/dist/adapters/postgresql/schemas/postgis.js +40 -0
  97. package/dist/adapters/postgresql/schemas/postgis.js.map +1 -1
  98. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts +50 -30
  99. package/dist/adapters/postgresql/schemas/schema-mgmt.d.ts.map +1 -1
  100. package/dist/adapters/postgresql/schemas/schema-mgmt.js +105 -33
  101. package/dist/adapters/postgresql/schemas/schema-mgmt.js.map +1 -1
  102. package/dist/adapters/postgresql/schemas/stats.d.ts +33 -20
  103. package/dist/adapters/postgresql/schemas/stats.d.ts.map +1 -1
  104. package/dist/adapters/postgresql/schemas/stats.js +36 -20
  105. package/dist/adapters/postgresql/schemas/stats.js.map +1 -1
  106. package/dist/adapters/postgresql/schemas/text-search.d.ts +34 -19
  107. package/dist/adapters/postgresql/schemas/text-search.d.ts.map +1 -1
  108. package/dist/adapters/postgresql/schemas/text-search.js +52 -13
  109. package/dist/adapters/postgresql/schemas/text-search.js.map +1 -1
  110. package/dist/adapters/postgresql/tools/admin.d.ts.map +1 -1
  111. package/dist/adapters/postgresql/tools/admin.js +272 -186
  112. package/dist/adapters/postgresql/tools/admin.js.map +1 -1
  113. package/dist/adapters/postgresql/tools/backup/dump.d.ts.map +1 -1
  114. package/dist/adapters/postgresql/tools/backup/dump.js +376 -350
  115. package/dist/adapters/postgresql/tools/backup/dump.js.map +1 -1
  116. package/dist/adapters/postgresql/tools/citext.d.ts.map +1 -1
  117. package/dist/adapters/postgresql/tools/citext.js +333 -243
  118. package/dist/adapters/postgresql/tools/citext.js.map +1 -1
  119. package/dist/adapters/postgresql/tools/codemode/index.d.ts.map +1 -1
  120. package/dist/adapters/postgresql/tools/codemode/index.js +2 -11
  121. package/dist/adapters/postgresql/tools/codemode/index.js.map +1 -1
  122. package/dist/adapters/postgresql/tools/core/convenience.d.ts +9 -1
  123. package/dist/adapters/postgresql/tools/core/convenience.d.ts.map +1 -1
  124. package/dist/adapters/postgresql/tools/core/convenience.js +101 -19
  125. package/dist/adapters/postgresql/tools/core/convenience.js.map +1 -1
  126. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts +48 -0
  127. package/dist/adapters/postgresql/tools/core/error-helpers.d.ts.map +1 -0
  128. package/dist/adapters/postgresql/tools/core/error-helpers.js +256 -0
  129. package/dist/adapters/postgresql/tools/core/error-helpers.js.map +1 -0
  130. package/dist/adapters/postgresql/tools/core/health.d.ts.map +1 -1
  131. package/dist/adapters/postgresql/tools/core/health.js +18 -4
  132. package/dist/adapters/postgresql/tools/core/health.js.map +1 -1
  133. package/dist/adapters/postgresql/tools/core/indexes.d.ts.map +1 -1
  134. package/dist/adapters/postgresql/tools/core/indexes.js +48 -6
  135. package/dist/adapters/postgresql/tools/core/indexes.js.map +1 -1
  136. package/dist/adapters/postgresql/tools/core/objects.d.ts.map +1 -1
  137. package/dist/adapters/postgresql/tools/core/objects.js +104 -85
  138. package/dist/adapters/postgresql/tools/core/objects.js.map +1 -1
  139. package/dist/adapters/postgresql/tools/core/query.d.ts.map +1 -1
  140. package/dist/adapters/postgresql/tools/core/query.js +100 -42
  141. package/dist/adapters/postgresql/tools/core/query.js.map +1 -1
  142. package/dist/adapters/postgresql/tools/core/schemas.d.ts +51 -25
  143. package/dist/adapters/postgresql/tools/core/schemas.d.ts.map +1 -1
  144. package/dist/adapters/postgresql/tools/core/schemas.js +51 -25
  145. package/dist/adapters/postgresql/tools/core/schemas.js.map +1 -1
  146. package/dist/adapters/postgresql/tools/core/tables.d.ts.map +1 -1
  147. package/dist/adapters/postgresql/tools/core/tables.js +72 -32
  148. package/dist/adapters/postgresql/tools/core/tables.js.map +1 -1
  149. package/dist/adapters/postgresql/tools/cron.d.ts.map +1 -1
  150. package/dist/adapters/postgresql/tools/cron.js +333 -206
  151. package/dist/adapters/postgresql/tools/cron.js.map +1 -1
  152. package/dist/adapters/postgresql/tools/introspection.d.ts +15 -0
  153. package/dist/adapters/postgresql/tools/introspection.d.ts.map +1 -0
  154. package/dist/adapters/postgresql/tools/introspection.js +1682 -0
  155. package/dist/adapters/postgresql/tools/introspection.js.map +1 -0
  156. package/dist/adapters/postgresql/tools/jsonb/advanced.d.ts.map +1 -1
  157. package/dist/adapters/postgresql/tools/jsonb/advanced.js +394 -297
  158. package/dist/adapters/postgresql/tools/jsonb/advanced.js.map +1 -1
  159. package/dist/adapters/postgresql/tools/jsonb/basic.d.ts.map +1 -1
  160. package/dist/adapters/postgresql/tools/jsonb/basic.js +686 -398
  161. package/dist/adapters/postgresql/tools/jsonb/basic.js.map +1 -1
  162. package/dist/adapters/postgresql/tools/kcache.d.ts.map +1 -1
  163. package/dist/adapters/postgresql/tools/kcache.js +278 -246
  164. package/dist/adapters/postgresql/tools/kcache.js.map +1 -1
  165. package/dist/adapters/postgresql/tools/ltree.d.ts.map +1 -1
  166. package/dist/adapters/postgresql/tools/ltree.js +137 -38
  167. package/dist/adapters/postgresql/tools/ltree.js.map +1 -1
  168. package/dist/adapters/postgresql/tools/monitoring.d.ts.map +1 -1
  169. package/dist/adapters/postgresql/tools/monitoring.js +86 -55
  170. package/dist/adapters/postgresql/tools/monitoring.js.map +1 -1
  171. package/dist/adapters/postgresql/tools/partitioning.d.ts.map +1 -1
  172. package/dist/adapters/postgresql/tools/partitioning.js +79 -15
  173. package/dist/adapters/postgresql/tools/partitioning.js.map +1 -1
  174. package/dist/adapters/postgresql/tools/partman/management.d.ts.map +1 -1
  175. package/dist/adapters/postgresql/tools/partman/management.js +43 -56
  176. package/dist/adapters/postgresql/tools/partman/management.js.map +1 -1
  177. package/dist/adapters/postgresql/tools/partman/operations.d.ts.map +1 -1
  178. package/dist/adapters/postgresql/tools/partman/operations.js +137 -24
  179. package/dist/adapters/postgresql/tools/partman/operations.js.map +1 -1
  180. package/dist/adapters/postgresql/tools/performance/analysis.d.ts.map +1 -1
  181. package/dist/adapters/postgresql/tools/performance/analysis.js +276 -165
  182. package/dist/adapters/postgresql/tools/performance/analysis.js.map +1 -1
  183. package/dist/adapters/postgresql/tools/performance/explain.d.ts.map +1 -1
  184. package/dist/adapters/postgresql/tools/performance/explain.js +61 -21
  185. package/dist/adapters/postgresql/tools/performance/explain.js.map +1 -1
  186. package/dist/adapters/postgresql/tools/performance/monitoring.d.ts.map +1 -1
  187. package/dist/adapters/postgresql/tools/performance/monitoring.js +52 -12
  188. package/dist/adapters/postgresql/tools/performance/monitoring.js.map +1 -1
  189. package/dist/adapters/postgresql/tools/performance/optimization.d.ts.map +1 -1
  190. package/dist/adapters/postgresql/tools/performance/optimization.js +92 -81
  191. package/dist/adapters/postgresql/tools/performance/optimization.js.map +1 -1
  192. package/dist/adapters/postgresql/tools/performance/stats.d.ts.map +1 -1
  193. package/dist/adapters/postgresql/tools/performance/stats.js +182 -60
  194. package/dist/adapters/postgresql/tools/performance/stats.js.map +1 -1
  195. package/dist/adapters/postgresql/tools/pgcrypto.d.ts.map +1 -1
  196. package/dist/adapters/postgresql/tools/pgcrypto.js +277 -102
  197. package/dist/adapters/postgresql/tools/pgcrypto.js.map +1 -1
  198. package/dist/adapters/postgresql/tools/postgis/advanced.d.ts.map +1 -1
  199. package/dist/adapters/postgresql/tools/postgis/advanced.js +298 -230
  200. package/dist/adapters/postgresql/tools/postgis/advanced.js.map +1 -1
  201. package/dist/adapters/postgresql/tools/postgis/basic.d.ts.map +1 -1
  202. package/dist/adapters/postgresql/tools/postgis/basic.js +370 -251
  203. package/dist/adapters/postgresql/tools/postgis/basic.js.map +1 -1
  204. package/dist/adapters/postgresql/tools/postgis/standalone.d.ts.map +1 -1
  205. package/dist/adapters/postgresql/tools/postgis/standalone.js +135 -51
  206. package/dist/adapters/postgresql/tools/postgis/standalone.js.map +1 -1
  207. package/dist/adapters/postgresql/tools/schema.d.ts.map +1 -1
  208. package/dist/adapters/postgresql/tools/schema.js +580 -233
  209. package/dist/adapters/postgresql/tools/schema.js.map +1 -1
  210. package/dist/adapters/postgresql/tools/stats/advanced.d.ts.map +1 -1
  211. package/dist/adapters/postgresql/tools/stats/advanced.js +567 -506
  212. package/dist/adapters/postgresql/tools/stats/advanced.js.map +1 -1
  213. package/dist/adapters/postgresql/tools/stats/basic.d.ts.map +1 -1
  214. package/dist/adapters/postgresql/tools/stats/basic.js +340 -316
  215. package/dist/adapters/postgresql/tools/stats/basic.js.map +1 -1
  216. package/dist/adapters/postgresql/tools/text.d.ts.map +1 -1
  217. package/dist/adapters/postgresql/tools/text.js +690 -337
  218. package/dist/adapters/postgresql/tools/text.js.map +1 -1
  219. package/dist/adapters/postgresql/tools/transactions.d.ts.map +1 -1
  220. package/dist/adapters/postgresql/tools/transactions.js +157 -50
  221. package/dist/adapters/postgresql/tools/transactions.js.map +1 -1
  222. package/dist/adapters/postgresql/tools/vector/advanced.d.ts.map +1 -1
  223. package/dist/adapters/postgresql/tools/vector/advanced.js +18 -0
  224. package/dist/adapters/postgresql/tools/vector/advanced.js.map +1 -1
  225. package/dist/adapters/postgresql/tools/vector/basic.d.ts.map +1 -1
  226. package/dist/adapters/postgresql/tools/vector/basic.js +100 -53
  227. package/dist/adapters/postgresql/tools/vector/basic.js.map +1 -1
  228. package/dist/auth/auth-context.d.ts +28 -0
  229. package/dist/auth/auth-context.d.ts.map +1 -0
  230. package/dist/auth/auth-context.js +37 -0
  231. package/dist/auth/auth-context.js.map +1 -0
  232. package/dist/auth/scope-map.d.ts +20 -0
  233. package/dist/auth/scope-map.d.ts.map +1 -0
  234. package/dist/auth/scope-map.js +40 -0
  235. package/dist/auth/scope-map.js.map +1 -0
  236. package/dist/auth/scopes.d.ts.map +1 -1
  237. package/dist/auth/scopes.js +2 -0
  238. package/dist/auth/scopes.js.map +1 -1
  239. package/dist/cli.js +1 -1
  240. package/dist/cli.js.map +1 -1
  241. package/dist/codemode/api.d.ts +1 -0
  242. package/dist/codemode/api.d.ts.map +1 -1
  243. package/dist/codemode/api.js +35 -1
  244. package/dist/codemode/api.js.map +1 -1
  245. package/dist/codemode/index.d.ts +0 -2
  246. package/dist/codemode/index.d.ts.map +1 -1
  247. package/dist/codemode/index.js +0 -4
  248. package/dist/codemode/index.js.map +1 -1
  249. package/dist/codemode/sandbox.d.ts +14 -1
  250. package/dist/codemode/sandbox.d.ts.map +1 -1
  251. package/dist/codemode/sandbox.js +58 -19
  252. package/dist/codemode/sandbox.js.map +1 -1
  253. package/dist/codemode/types.d.ts.map +1 -1
  254. package/dist/codemode/types.js +3 -0
  255. package/dist/codemode/types.js.map +1 -1
  256. package/dist/constants/ServerInstructions.d.ts +5 -1
  257. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  258. package/dist/constants/ServerInstructions.js +117 -31
  259. package/dist/constants/ServerInstructions.js.map +1 -1
  260. package/dist/filtering/ToolConstants.d.ts +22 -19
  261. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  262. package/dist/filtering/ToolConstants.js +48 -37
  263. package/dist/filtering/ToolConstants.js.map +1 -1
  264. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  265. package/dist/filtering/ToolFilter.js +10 -13
  266. package/dist/filtering/ToolFilter.js.map +1 -1
  267. package/dist/pool/ConnectionPool.js +1 -1
  268. package/dist/pool/ConnectionPool.js.map +1 -1
  269. package/dist/transports/http.d.ts +1 -0
  270. package/dist/transports/http.d.ts.map +1 -1
  271. package/dist/transports/http.js +75 -21
  272. package/dist/transports/http.js.map +1 -1
  273. package/dist/types/filtering.d.ts +2 -2
  274. package/dist/types/filtering.d.ts.map +1 -1
  275. package/dist/utils/icons.d.ts.map +1 -1
  276. package/dist/utils/icons.js +5 -0
  277. package/dist/utils/icons.js.map +1 -1
  278. package/dist/utils/where-clause.d.ts.map +1 -1
  279. package/dist/utils/where-clause.js +24 -0
  280. package/dist/utils/where-clause.js.map +1 -1
  281. package/package.json +20 -13
  282. package/dist/codemode/sandbox-factory.d.ts +0 -72
  283. package/dist/codemode/sandbox-factory.d.ts.map +0 -1
  284. package/dist/codemode/sandbox-factory.js +0 -88
  285. package/dist/codemode/sandbox-factory.js.map +0 -1
  286. package/dist/codemode/worker-sandbox.d.ts +0 -82
  287. package/dist/codemode/worker-sandbox.d.ts.map +0 -1
  288. package/dist/codemode/worker-sandbox.js +0 -244
  289. package/dist/codemode/worker-sandbox.js.map +0 -1
  290. package/dist/codemode/worker-script.d.ts +0 -8
  291. package/dist/codemode/worker-script.d.ts.map +0 -1
  292. package/dist/codemode/worker-script.js +0 -113
  293. package/dist/codemode/worker-script.js.map +0 -1
@@ -4,11 +4,44 @@
4
4
  import { z } from "zod";
5
5
  import { readOnly } from "../../../../utils/annotations.js";
6
6
  import { getToolIcons } from "../../../../utils/icons.js";
7
+ import { formatPostgresError } from "../core/error-helpers.js";
7
8
  import { SeqScanTablesOutputSchema, IndexRecommendationsOutputSchema, QueryPlanCompareOutputSchema, } from "../../schemas/index.js";
8
9
  // Helper to coerce string numbers to JavaScript numbers (PostgreSQL returns BIGINT as strings)
9
10
  const toNum = (val) => val === null || val === undefined ? null : Number(val);
11
+ /**
12
+ * P154: Validate that a schema exists before executing performance queries.
13
+ */
14
+ async function validatePerformanceSchemaExists(adapter, schema) {
15
+ if (!schema)
16
+ return null;
17
+ const schemaResult = await adapter.executeQuery(`SELECT 1 FROM information_schema.schemata WHERE schema_name = $1`, [schema]);
18
+ if (!schemaResult.rows || schemaResult.rows.length === 0) {
19
+ return `Schema '${schema}' does not exist. Use pg_list_objects with type 'table' to see available schemas.`;
20
+ }
21
+ return null;
22
+ }
23
+ /**
24
+ * P154: Validate that a table exists before executing performance queries.
25
+ */
26
+ async function validatePerformanceTableExists(adapter, table, schema) {
27
+ if (!table && !schema)
28
+ return null;
29
+ if (schema) {
30
+ const schemaError = await validatePerformanceSchemaExists(adapter, schema);
31
+ if (schemaError !== null)
32
+ return schemaError;
33
+ }
34
+ if (table) {
35
+ const targetSchema = schema ?? "public";
36
+ const tableResult = await adapter.executeQuery(`SELECT 1 FROM information_schema.tables WHERE table_schema = $1 AND table_name = $2`, [targetSchema, table]);
37
+ if (!tableResult.rows || tableResult.rows.length === 0) {
38
+ return `Table '${targetSchema}.${table}' not found. Use pg_list_tables to see available tables.`;
39
+ }
40
+ }
41
+ return null;
42
+ }
10
43
  export function createSeqScanTablesTool(adapter) {
11
- const SeqScanTablesSchema = z.preprocess((input) => input ?? {}, z.object({
44
+ const SeqScanTablesSchemaBase = z.object({
12
45
  minScans: z
13
46
  .number()
14
47
  .optional()
@@ -18,12 +51,13 @@ export function createSeqScanTablesTool(adapter) {
18
51
  .number()
19
52
  .optional()
20
53
  .describe("Max rows to return (default: 50, use 0 for all)"),
21
- }));
54
+ });
55
+ const SeqScanTablesSchema = z.preprocess((input) => input ?? {}, SeqScanTablesSchemaBase);
22
56
  return {
23
57
  name: "pg_seq_scan_tables",
24
58
  description: "Find tables with high sequential scan counts (potential missing indexes). Default minScans=10; use higher values (e.g., 100+) for production databases.",
25
59
  group: "performance",
26
- inputSchema: SeqScanTablesSchema,
60
+ inputSchema: SeqScanTablesSchemaBase,
27
61
  outputSchema: SeqScanTablesOutputSchema,
28
62
  annotations: readOnly("Sequential Scan Tables"),
29
63
  icons: getToolIcons("performance", readOnly("Sequential Scan Tables")),
@@ -32,18 +66,25 @@ export function createSeqScanTablesTool(adapter) {
32
66
  const minScans = parsed.minScans ?? 10; // Default to 10 for better testing visibility
33
67
  const limit = parsed.limit === 0 ? null : (parsed.limit ?? 50);
34
68
  let whereClause = `seq_scan > ${String(minScans)}`;
69
+ const queryParams = [];
35
70
  if (parsed.schema !== undefined) {
36
- whereClause += ` AND schemaname = '${parsed.schema}'`;
71
+ queryParams.push(parsed.schema);
72
+ whereClause += ` AND schemaname = $${String(queryParams.length)}`;
73
+ }
74
+ // P154: Validate schema existence when filtering by schema
75
+ const schemaError = await validatePerformanceSchemaExists(adapter, parsed.schema);
76
+ if (schemaError !== null) {
77
+ return { success: false, error: schemaError };
37
78
  }
38
79
  const sql = `SELECT schemaname, relname as table_name,
39
- seq_scan, seq_tup_read,
80
+ seq_scan, seq_tup_read,
40
81
  idx_scan, idx_tup_fetch,
41
82
  CASE WHEN idx_scan > 0 THEN round((100.0 * seq_scan / (seq_scan + idx_scan))::numeric, 2) ELSE 100 END as seq_scan_pct
42
83
  FROM pg_stat_user_tables
43
84
  WHERE ${whereClause}
44
85
  ORDER BY seq_scan DESC
45
86
  ${limit !== null ? `LIMIT ${String(limit)}` : ""}`;
46
- const result = await adapter.executeQuery(sql);
87
+ const result = await adapter.executeQuery(sql, queryParams);
47
88
  // Coerce numeric fields to JavaScript numbers
48
89
  const tables = (result.rows ?? []).map((row) => ({
49
90
  ...row,
@@ -62,7 +103,7 @@ export function createSeqScanTablesTool(adapter) {
62
103
  // Add totalCount if results were limited
63
104
  if (limit !== null && tables.length === limit) {
64
105
  const countSql = `SELECT COUNT(*) as total FROM pg_stat_user_tables WHERE ${whereClause}`;
65
- const countResult = await adapter.executeQuery(countSql);
106
+ const countResult = await adapter.executeQuery(countSql, queryParams);
66
107
  response["totalCount"] = toNum(countResult.rows?.[0]?.["total"]);
67
108
  response["truncated"] = true;
68
109
  }
@@ -154,114 +195,125 @@ export function createIndexRecommendationsTool(adapter) {
154
195
  annotations: readOnly("Index Recommendations"),
155
196
  icons: getToolIcons("performance", readOnly("Index Recommendations")),
156
197
  handler: async (params, _context) => {
157
- const parsed = IndexRecommendationsSchema.parse(params);
158
- const schemaName = parsed.schema ?? "public";
159
- const queryParams = parsed.params ?? [];
160
- // If SQL query provided, perform query-specific analysis
161
- if (parsed.sql !== undefined && parsed.sql.trim() !== "") {
162
- const hypopgAvailable = await checkHypoPG();
163
- // Get baseline EXPLAIN plan (with parameter binding support)
164
- const baselineResult = await adapter.executeQuery(`EXPLAIN (FORMAT JSON) ${parsed.sql}`, queryParams);
165
- const baselinePlanRow = baselineResult.rows?.[0];
166
- const baselinePlan = baselinePlanRow?.["QUERY PLAN"]?.[0];
167
- const baselineCost = extractCost(baselinePlan?.Plan);
168
- // Extract Seq Scan candidates
169
- const candidates = extractSeqScanCandidates(baselinePlan?.Plan);
170
- // If no candidates or no baseline cost, return basic analysis
171
- if (candidates.length === 0 || baselineCost === null) {
172
- return {
173
- queryAnalysis: true,
174
- hypopgAvailable,
175
- baselineCost,
176
- recommendations: [],
177
- hint: "Query appears well-indexed. No sequential scans with filterable columns detected.",
178
- };
179
- }
180
- // If HypoPG is available, create hypothetical indexes and measure improvement
181
- if (hypopgAvailable) {
182
- const recommendations = [];
183
- try {
184
- // Reset any existing hypothetical indexes
185
- await adapter.executeQuery("SELECT hypopg_reset()");
186
- // Test each candidate index
187
- for (const candidate of candidates) {
188
- try {
189
- // Create hypothetical index
190
- await adapter.executeQuery(`SELECT hypopg_create_index('${candidate.indexDDL.replace(/'/g, "''")}')`);
191
- // Re-run EXPLAIN with hypothetical index (with parameter binding)
192
- const improvedResult = await adapter.executeQuery(`EXPLAIN (FORMAT JSON) ${parsed.sql}`, queryParams);
193
- const improvedPlanRow = improvedResult.rows?.[0];
194
- const improvedPlan = improvedPlanRow?.["QUERY PLAN"]?.[0];
195
- const improvedCost = extractCost(improvedPlan?.Plan);
196
- if (improvedCost !== null && improvedCost < baselineCost) {
197
- const improvementPct = ((baselineCost - improvedCost) / baselineCost) * 100;
198
- recommendations.push({
199
- table: candidate.table,
200
- column: candidate.column,
201
- suggestedIndex: candidate.indexDDL,
202
- baselineCost,
203
- improvedCost,
204
- improvement: `${improvementPct.toFixed(1)}% cost reduction`,
198
+ try {
199
+ const parsed = IndexRecommendationsSchema.parse(params);
200
+ const schemaName = parsed.schema ?? "public";
201
+ const queryParams = parsed.params ?? [];
202
+ // If SQL query provided, perform query-specific analysis
203
+ if (parsed.sql !== undefined && parsed.sql.trim() !== "") {
204
+ const hypopgAvailable = await checkHypoPG();
205
+ // Get baseline EXPLAIN plan (with parameter binding support)
206
+ const baselineResult = await adapter.executeQuery(`EXPLAIN (FORMAT JSON) ${parsed.sql}`, queryParams);
207
+ const baselinePlanRow = baselineResult.rows?.[0];
208
+ const baselinePlan = baselinePlanRow?.["QUERY PLAN"]?.[0];
209
+ const baselineCost = extractCost(baselinePlan?.Plan);
210
+ // Extract Seq Scan candidates
211
+ const candidates = extractSeqScanCandidates(baselinePlan?.Plan);
212
+ // If no candidates or no baseline cost, return basic analysis
213
+ if (candidates.length === 0 || baselineCost === null) {
214
+ return {
215
+ queryAnalysis: true,
216
+ hypopgAvailable,
217
+ baselineCost,
218
+ recommendations: [],
219
+ hint: "Query appears well-indexed. No sequential scans with filterable columns detected.",
220
+ };
221
+ }
222
+ // If HypoPG is available, create hypothetical indexes and measure improvement
223
+ if (hypopgAvailable) {
224
+ const recommendations = [];
225
+ try {
226
+ // Reset any existing hypothetical indexes
227
+ await adapter.executeQuery("SELECT hypopg_reset()");
228
+ // Test each candidate index
229
+ for (const candidate of candidates) {
230
+ try {
231
+ // Create hypothetical index
232
+ await adapter.executeQuery(`SELECT hypopg_create_index('${candidate.indexDDL.replace(/'/g, "''")}')`);
233
+ // Re-run EXPLAIN with hypothetical index (with parameter binding)
234
+ const improvedResult = await adapter.executeQuery(`EXPLAIN (FORMAT JSON) ${parsed.sql}`, queryParams);
235
+ const improvedPlanRow = improvedResult.rows?.[0];
236
+ const improvedPlan = improvedPlanRow?.["QUERY PLAN"]?.[0];
237
+ const improvedCost = extractCost(improvedPlan?.Plan);
238
+ if (improvedCost !== null && improvedCost < baselineCost) {
239
+ const improvementPct = ((baselineCost - improvedCost) / baselineCost) * 100;
240
+ recommendations.push({
241
+ table: candidate.table,
242
+ column: candidate.column,
243
+ suggestedIndex: candidate.indexDDL,
244
+ baselineCost,
245
+ improvedCost,
246
+ improvement: `${improvementPct.toFixed(1)}% cost reduction`,
247
+ });
248
+ }
249
+ // Reset for next candidate
250
+ await adapter.executeQuery("SELECT hypopg_reset()");
251
+ }
252
+ catch {
253
+ // Skip this candidate if it fails
254
+ await adapter
255
+ .executeQuery("SELECT hypopg_reset()")
256
+ .catch(() => {
257
+ /* ignore */
205
258
  });
206
259
  }
207
- // Reset for next candidate
208
- await adapter.executeQuery("SELECT hypopg_reset()");
209
- }
210
- catch {
211
- // Skip this candidate if it fails
212
- await adapter
213
- .executeQuery("SELECT hypopg_reset()")
214
- .catch(() => {
215
- /* ignore */
216
- });
217
260
  }
218
261
  }
219
- }
220
- finally {
221
- // Ensure cleanup
222
- await adapter.executeQuery("SELECT hypopg_reset()").catch(() => {
223
- /* ignore */
262
+ finally {
263
+ // Ensure cleanup
264
+ await adapter.executeQuery("SELECT hypopg_reset()").catch(() => {
265
+ /* ignore */
266
+ });
267
+ }
268
+ // Sort by improvement
269
+ recommendations.sort((a, b) => {
270
+ const aImprv = parseFloat(a.improvement);
271
+ const bImprv = parseFloat(b.improvement);
272
+ return bImprv - aImprv;
224
273
  });
274
+ return {
275
+ queryAnalysis: true,
276
+ hypopgAvailable: true,
277
+ baselineCost,
278
+ recommendations,
279
+ hint: recommendations.length > 0
280
+ ? `Found ${String(recommendations.length)} index(es) that would improve query performance. Review and create indexes as needed.`
281
+ : "No indexes found that would significantly improve this query.",
282
+ };
225
283
  }
226
- // Sort by improvement
227
- recommendations.sort((a, b) => {
228
- const aImprv = parseFloat(a.improvement);
229
- const bImprv = parseFloat(b.improvement);
230
- return bImprv - aImprv;
231
- });
284
+ // HypoPG not available - return basic recommendations without cost analysis
285
+ const basicRecommendations = candidates.map((c) => ({
286
+ table: c.table,
287
+ column: c.column,
288
+ suggestedIndex: c.indexDDL,
289
+ recommendation: "Sequential scan detected - consider adding this index",
290
+ }));
232
291
  return {
233
292
  queryAnalysis: true,
234
- hypopgAvailable: true,
293
+ hypopgAvailable: false,
235
294
  baselineCost,
236
- recommendations,
237
- hint: recommendations.length > 0
238
- ? `Found ${String(recommendations.length)} index(es) that would improve query performance. Review and create indexes as needed.`
239
- : "No indexes found that would significantly improve this query.",
295
+ recommendations: basicRecommendations,
296
+ hint: "Install HypoPG extension for precise cost improvement analysis. Basic recommendations provided based on EXPLAIN output.",
240
297
  };
241
298
  }
242
- // HypoPG not available - return basic recommendations without cost analysis
243
- const basicRecommendations = candidates.map((c) => ({
244
- table: c.table,
245
- column: c.column,
246
- suggestedIndex: c.indexDDL,
247
- recommendation: "Sequential scan detected - consider adding this index",
248
- }));
249
- return {
250
- queryAnalysis: true,
251
- hypopgAvailable: false,
252
- baselineCost,
253
- recommendations: basicRecommendations,
254
- hint: "Install HypoPG extension for precise cost improvement analysis. Basic recommendations provided based on EXPLAIN output.",
255
- };
256
- }
257
- // Fall back to table statistics-based recommendations
258
- const tableClause = parsed.table !== undefined ? `AND relname = '${parsed.table}'` : "";
259
- const schemaClause = `AND schemaname = '${schemaName}'`;
260
- const sql = `SELECT schemaname, relname as table_name,
299
+ // Fall back to table statistics-based recommendations
300
+ const statsParams = [schemaName];
301
+ const schemaClause = `AND schemaname = $${String(statsParams.length)}`;
302
+ let tableClause = "";
303
+ if (parsed.table !== undefined) {
304
+ statsParams.push(parsed.table);
305
+ tableClause = `AND relname = $${String(statsParams.length)}`;
306
+ }
307
+ // P154: Validate table/schema existence in table-stats path
308
+ const validationError = await validatePerformanceTableExists(adapter, parsed.table, parsed.schema ?? "public");
309
+ if (validationError !== null) {
310
+ return { success: false, error: validationError };
311
+ }
312
+ const sql = `SELECT schemaname, relname as table_name,
261
313
  seq_scan, idx_scan,
262
314
  n_live_tup as row_count,
263
315
  pg_size_pretty(pg_table_size(relid)) as size,
264
- CASE
316
+ CASE
265
317
  WHEN idx_scan = 0 AND seq_scan > 100 THEN 'HIGH - No index usage, many seq scans'
266
318
  WHEN idx_scan > 0 AND seq_scan > idx_scan * 10 THEN 'MEDIUM - Seq scans dominate'
267
319
  ELSE 'LOW - Good index usage'
@@ -270,22 +322,68 @@ export function createIndexRecommendationsTool(adapter) {
270
322
  WHERE seq_scan > 50 ${schemaClause} ${tableClause}
271
323
  ORDER BY seq_scan DESC
272
324
  LIMIT 20`;
273
- const result = await adapter.executeQuery(sql);
274
- // Coerce numeric fields to JavaScript numbers
275
- const recommendations = (result.rows ?? []).map((row) => ({
276
- ...row,
277
- seq_scan: toNum(row["seq_scan"]),
278
- idx_scan: toNum(row["idx_scan"]),
279
- row_count: toNum(row["row_count"]),
280
- }));
281
- return {
282
- queryAnalysis: false,
283
- recommendations,
284
- hint: "Based on table statistics. Provide a SQL query for query-specific recommendations.",
285
- };
325
+ const result = await adapter.executeQuery(sql, statsParams);
326
+ // Coerce numeric fields to JavaScript numbers
327
+ const recommendations = (result.rows ?? []).map((row) => ({
328
+ ...row,
329
+ seq_scan: toNum(row["seq_scan"]),
330
+ idx_scan: toNum(row["idx_scan"]),
331
+ row_count: toNum(row["row_count"]),
332
+ }));
333
+ return {
334
+ queryAnalysis: false,
335
+ recommendations,
336
+ hint: "Based on table statistics. Provide a SQL query for query-specific recommendations.",
337
+ };
338
+ }
339
+ catch (error) {
340
+ return {
341
+ success: false,
342
+ error: formatPostgresError(error, {
343
+ tool: "pg_index_recommendations",
344
+ }),
345
+ };
346
+ }
286
347
  },
287
348
  };
288
349
  }
350
+ /**
351
+ * Recursively strip zero-value block stats, empty Triggers arrays,
352
+ * and empty Planning objects from EXPLAIN plan output to reduce payload noise.
353
+ */
354
+ function stripZeroValuePlanFields(obj) {
355
+ if (obj === null || obj === undefined)
356
+ return obj;
357
+ if (Array.isArray(obj)) {
358
+ const filtered = obj
359
+ .map(stripZeroValuePlanFields)
360
+ .filter((v) => v !== undefined);
361
+ return filtered.length > 0 ? filtered : undefined;
362
+ }
363
+ if (typeof obj === "object") {
364
+ const result = {};
365
+ for (const [key, value] of Object.entries(obj)) {
366
+ // Strip zero-value block stats
367
+ if (typeof value === "number" && value === 0 && key.includes("Blocks"))
368
+ continue;
369
+ // Strip empty Triggers arrays
370
+ if (key === "Triggers" && Array.isArray(value) && value.length === 0)
371
+ continue;
372
+ // Strip empty Planning objects
373
+ if (key === "Planning" &&
374
+ typeof value === "object" &&
375
+ value !== null &&
376
+ Object.keys(value).length === 0)
377
+ continue;
378
+ const cleaned = stripZeroValuePlanFields(value);
379
+ if (cleaned !== undefined) {
380
+ result[key] = cleaned;
381
+ }
382
+ }
383
+ return Object.keys(result).length > 0 ? result : undefined;
384
+ }
385
+ return obj;
386
+ }
289
387
  export function createQueryPlanCompareTool(adapter) {
290
388
  // Base schema for MCP visibility (no preprocess)
291
389
  const QueryPlanCompareSchemaBase = z.object({
@@ -328,59 +426,72 @@ export function createQueryPlanCompareTool(adapter) {
328
426
  annotations: readOnly("Query Plan Compare"),
329
427
  icons: getToolIcons("performance", readOnly("Query Plan Compare")),
330
428
  handler: async (params, _context) => {
331
- const parsed = QueryPlanCompareSchema.parse(params);
332
- const explainType = parsed.analyze === true
333
- ? "EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)"
334
- : "EXPLAIN (FORMAT JSON)";
335
- const [result1, result2] = await Promise.all([
336
- adapter.executeQuery(`${explainType} ${parsed.query1}`, parsed.params1 ?? []),
337
- adapter.executeQuery(`${explainType} ${parsed.query2}`, parsed.params2 ?? []),
338
- ]);
339
- const row1 = result1.rows?.[0];
340
- const row2 = result2.rows?.[0];
341
- const queryPlan1 = row1?.["QUERY PLAN"];
342
- const queryPlan2 = row2?.["QUERY PLAN"];
343
- const plan1 = queryPlan1?.[0];
344
- const plan2 = queryPlan2?.[0];
345
- const comparison = {
346
- query1: {
347
- planningTime: plan1?.["Planning Time"],
348
- executionTime: plan1?.["Execution Time"],
349
- totalCost: plan1?.["Plan"]?.["Total Cost"],
350
- sharedBuffersHit: plan1?.["Shared Hit Blocks"],
351
- sharedBuffersRead: plan1?.["Shared Read Blocks"],
352
- },
353
- query2: {
354
- planningTime: plan2?.["Planning Time"],
355
- executionTime: plan2?.["Execution Time"],
356
- totalCost: plan2?.["Plan"]?.["Total Cost"],
357
- sharedBuffersHit: plan2?.["Shared Hit Blocks"],
358
- sharedBuffersRead: plan2?.["Shared Read Blocks"],
359
- },
360
- analysis: {
361
- costDifference: plan1 && plan2
362
- ? Number(plan1["Plan"]?.["Total Cost"]) -
363
- Number(plan2["Plan"]?.["Total Cost"])
364
- : null,
365
- recommendation: "",
366
- },
367
- fullPlans: { plan1, plan2 },
368
- };
369
- if (comparison.analysis.costDifference !== null) {
370
- if (comparison.analysis.costDifference > 0) {
371
- comparison.analysis.recommendation =
372
- "Query 2 has lower estimated cost";
373
- }
374
- else if (comparison.analysis.costDifference < 0) {
375
- comparison.analysis.recommendation =
376
- "Query 1 has lower estimated cost";
377
- }
378
- else {
379
- comparison.analysis.recommendation =
380
- "Both queries have similar estimated cost";
429
+ try {
430
+ const parsed = QueryPlanCompareSchema.parse(params);
431
+ const explainType = parsed.analyze === true
432
+ ? "EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON)"
433
+ : "EXPLAIN (FORMAT JSON)";
434
+ const [result1, result2] = await Promise.all([
435
+ adapter.executeQuery(`${explainType} ${parsed.query1}`, parsed.params1 ?? []),
436
+ adapter.executeQuery(`${explainType} ${parsed.query2}`, parsed.params2 ?? []),
437
+ ]);
438
+ const row1 = result1.rows?.[0];
439
+ const row2 = result2.rows?.[0];
440
+ const queryPlan1 = row1?.["QUERY PLAN"];
441
+ const queryPlan2 = row2?.["QUERY PLAN"];
442
+ const plan1 = queryPlan1?.[0];
443
+ const plan2 = queryPlan2?.[0];
444
+ const comparison = {
445
+ query1: {
446
+ planningTime: plan1?.["Planning Time"],
447
+ executionTime: plan1?.["Execution Time"],
448
+ totalCost: plan1?.["Plan"]?.["Total Cost"],
449
+ sharedBuffersHit: plan1?.["Shared Hit Blocks"],
450
+ sharedBuffersRead: plan1?.["Shared Read Blocks"],
451
+ },
452
+ query2: {
453
+ planningTime: plan2?.["Planning Time"],
454
+ executionTime: plan2?.["Execution Time"],
455
+ totalCost: plan2?.["Plan"]?.["Total Cost"],
456
+ sharedBuffersHit: plan2?.["Shared Hit Blocks"],
457
+ sharedBuffersRead: plan2?.["Shared Read Blocks"],
458
+ },
459
+ analysis: {
460
+ costDifference: plan1 && plan2
461
+ ? Number(plan1["Plan"]?.["Total Cost"]) -
462
+ Number(plan2["Plan"]?.["Total Cost"])
463
+ : null,
464
+ recommendation: "",
465
+ },
466
+ fullPlans: {
467
+ plan1: stripZeroValuePlanFields(plan1),
468
+ plan2: stripZeroValuePlanFields(plan2),
469
+ },
470
+ };
471
+ if (comparison.analysis.costDifference !== null) {
472
+ if (comparison.analysis.costDifference > 0) {
473
+ comparison.analysis.recommendation =
474
+ "Query 2 has lower estimated cost";
475
+ }
476
+ else if (comparison.analysis.costDifference < 0) {
477
+ comparison.analysis.recommendation =
478
+ "Query 1 has lower estimated cost";
479
+ }
480
+ else {
481
+ comparison.analysis.recommendation =
482
+ "Both queries have similar estimated cost";
483
+ }
381
484
  }
485
+ return comparison;
486
+ }
487
+ catch (error) {
488
+ return {
489
+ success: false,
490
+ error: formatPostgresError(error, {
491
+ tool: "pg_query_plan_compare",
492
+ }),
493
+ };
382
494
  }
383
- return comparison;
384
495
  },
385
496
  };
386
497
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/performance/analysis.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EACL,yBAAyB,EACzB,gCAAgC,EAChC,4BAA4B,GAC7B,MAAM,wBAAwB,CAAC;AAEhC,+FAA+F;AAC/F,MAAM,KAAK,GAAG,CAAC,GAAY,EAAiB,EAAE,CAC5C,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AAEzD,MAAM,UAAU,uBAAuB,CACrC,OAAwB;IAExB,MAAM,mBAAmB,GAAG,CAAC,CAAC,UAAU,CACtC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,EACtB,CAAC,CAAC,MAAM,CAAC;QACP,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,4CAA4C,CAAC;QACzD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC1D,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,iDAAiD,CAAC;KAC/D,CAAC,CACH,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EACT,yJAAyJ;QAC3J,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,mBAAmB;QAChC,YAAY,EAAE,yBAAyB;QACvC,WAAW,EAAE,QAAQ,CAAC,wBAAwB,CAAC;QAC/C,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,wBAAwB,CAAC,CAAC;QACtE,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,8CAA8C;YACtF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;YAE/D,IAAI,WAAW,GAAG,cAAc,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YACnD,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;gBAChC,WAAW,IAAI,sBAAsB,MAAM,CAAC,MAAM,GAAG,CAAC;YACxD,CAAC;YAED,MAAM,GAAG,GAAG;;;;;gCAKc,WAAW;;0BAEjB,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAErE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC/C,8CAA8C;YAC9C,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CACpC,CAAC,GAA4B,EAAE,EAAE,CAAC,CAAC;gBACjC,GAAG,GAAG;gBACN,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACxC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChC,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC1C,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;aACzC,CAAC,CACH,CAAC;YAEF,MAAM,QAAQ,GAA4B;gBACxC,MAAM;gBACN,KAAK,EAAE,MAAM,CAAC,MAAM;gBACpB,QAAQ;gBACR,IAAI,EAAE,qEAAqE;aAC5E,CAAC;YAEF,yCAAyC;YACzC,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBAC9C,MAAM,QAAQ,GAAG,2DAA2D,WAAW,EAAE,CAAC;gBAC1F,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACzD,QAAQ,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;gBACjE,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC;YAC/B,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,OAAwB;IAExB,iDAAiD;IACjD,MAAM,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC;QAC9C,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC9D,GAAG,EAAE,CAAC;aACH,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,gDAAgD,CAAC;QAC7D,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,sCAAsC,CAAC;QACnD,MAAM,EAAE,CAAC;aACN,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aAClB,QAAQ,EAAE;aACV,QAAQ,CAAC,gDAAgD,CAAC;QAC7D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KACxE,CAAC,CAAC;IAEH,yDAAyD;IACzD,MAAM,0BAA0B,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;QACxD,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAC;QAC5D,MAAM,MAAM,GAAG,EAAE,GAAG,UAAU,EAAE,CAAC;QACjC,qBAAqB;QACrB,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,8BAA8B,CAAC,CAAC;IAEnC,mDAAmD;IACnD,MAAM,WAAW,GAAG,KAAK,IAAsB,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CACvC,qDAAqD,CACtD,CAAC;YACF,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC;IAEF,gDAAgD;IAChD,MAAM,WAAW,GAAG,CAClB,IAAyC,EAC1B,EAAE;QACjB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;QACrC,OAAO,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1D,CAAC,CAAC;IASF,0DAA0D;IAC1D,MAAM,wBAAwB,GAAG,CAC/B,IAAyC,EACzC,KAAK,GAAG,CAAC,EACS,EAAE;QACpB,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,EAAE,CAAC;QAEhD,MAAM,UAAU,GAAqB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAuB,CAAC;QACzD,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAuB,CAAC;QACjE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAuB,CAAC;QAEpD,IACE,QAAQ,KAAK,UAAU;YACvB,YAAY,KAAK,SAAS;YAC1B,MAAM,KAAK,SAAS,EACpB,CAAC;YACD,8FAA8F;YAC9F,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBAChC,UAAU,CAAC,IAAI,CAAC;oBACd,KAAK,EAAE,YAAY;oBACnB,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;oBACnB,QAAQ,EAAE,mBAAmB,YAAY,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG;iBAC7D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAA0C,CAAC;QACrE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;gBAC1B,UAAU,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACT,+LAA+L;QACjM,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,8BAA8B,EAAE,iCAAiC;QAC9E,YAAY,EAAE,gCAAgC;QAC9C,WAAW,EAAE,QAAQ,CAAC,uBAAuB,CAAC;QAC9C,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,uBAAuB,CAAC,CAAC;QACrE,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC;YAC7C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;YAExC,yDAAyD;YACzD,IAAI,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACzD,MAAM,eAAe,GAAG,MAAM,WAAW,EAAE,CAAC;gBAE5C,6DAA6D;gBAC7D,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,YAAY,CAC/C,yBAAyB,MAAM,CAAC,GAAG,EAAE,EACrC,WAAW,CACZ,CAAC;gBACF,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAElC,CAAC;gBACd,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAE3C,CAAC;gBACd,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAErD,8BAA8B;gBAC9B,MAAM,UAAU,GAAG,wBAAwB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gBAEhE,8DAA8D;gBAC9D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;oBACrD,OAAO;wBACL,aAAa,EAAE,IAAI;wBACnB,eAAe;wBACf,YAAY;wBACZ,eAAe,EAAE,EAAE;wBACnB,IAAI,EAAE,mFAAmF;qBAC1F,CAAC;gBACJ,CAAC;gBAED,8EAA8E;gBAC9E,IAAI,eAAe,EAAE,CAAC;oBACpB,MAAM,eAAe,GAOf,EAAE,CAAC;oBAET,IAAI,CAAC;wBACH,0CAA0C;wBAC1C,MAAM,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;wBAEpD,4BAA4B;wBAC5B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;4BACnC,IAAI,CAAC;gCACH,4BAA4B;gCAC5B,MAAM,OAAO,CAAC,YAAY,CACxB,+BAA+B,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAC1E,CAAC;gCAEF,kEAAkE;gCAClE,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,YAAY,CAC/C,yBAAyB,MAAM,CAAC,GAAG,EAAE,EACrC,WAAW,CACZ,CAAC;gCACF,MAAM,eAAe,GAAG,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAElC,CAAC;gCACd,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAE3C,CAAC;gCACd,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;gCAErD,IAAI,YAAY,KAAK,IAAI,IAAI,YAAY,GAAG,YAAY,EAAE,CAAC;oCACzD,MAAM,cAAc,GAClB,CAAC,CAAC,YAAY,GAAG,YAAY,CAAC,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC;oCACvD,eAAe,CAAC,IAAI,CAAC;wCACnB,KAAK,EAAE,SAAS,CAAC,KAAK;wCACtB,MAAM,EAAE,SAAS,CAAC,MAAM;wCACxB,cAAc,EAAE,SAAS,CAAC,QAAQ;wCAClC,YAAY;wCACZ,YAAY;wCACZ,WAAW,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB;qCAC5D,CAAC,CAAC;gCACL,CAAC;gCAED,2BAA2B;gCAC3B,MAAM,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC;4BACtD,CAAC;4BAAC,MAAM,CAAC;gCACP,kCAAkC;gCAClC,MAAM,OAAO;qCACV,YAAY,CAAC,uBAAuB,CAAC;qCACrC,KAAK,CAAC,GAAG,EAAE;oCACV,YAAY;gCACd,CAAC,CAAC,CAAC;4BACP,CAAC;wBACH,CAAC;oBACH,CAAC;4BAAS,CAAC;wBACT,iBAAiB;wBACjB,MAAM,OAAO,CAAC,YAAY,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;4BAC7D,YAAY;wBACd,CAAC,CAAC,CAAC;oBACL,CAAC;oBAED,sBAAsB;oBACtB,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;wBAC5B,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;wBACzC,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;wBACzC,OAAO,MAAM,GAAG,MAAM,CAAC;oBACzB,CAAC,CAAC,CAAC;oBAEH,OAAO;wBACL,aAAa,EAAE,IAAI;wBACnB,eAAe,EAAE,IAAI;wBACrB,YAAY;wBACZ,eAAe;wBACf,IAAI,EACF,eAAe,CAAC,MAAM,GAAG,CAAC;4BACxB,CAAC,CAAC,SAAS,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,uFAAuF;4BAChI,CAAC,CAAC,+DAA+D;qBACtE,CAAC;gBACJ,CAAC;gBAED,4EAA4E;gBAC5E,MAAM,oBAAoB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAClD,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,cAAc,EAAE,CAAC,CAAC,QAAQ;oBAC1B,cAAc,EACZ,uDAAuD;iBAC1D,CAAC,CAAC,CAAC;gBAEJ,OAAO;oBACL,aAAa,EAAE,IAAI;oBACnB,eAAe,EAAE,KAAK;oBACtB,YAAY;oBACZ,eAAe,EAAE,oBAAoB;oBACrC,IAAI,EAAE,yHAAyH;iBAChI,CAAC;YACJ,CAAC;YAED,sDAAsD;YACtD,MAAM,WAAW,GACf,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACtE,MAAM,YAAY,GAAG,qBAAqB,UAAU,GAAG,CAAC;YAExD,MAAM,GAAG,GAAG;;;;;;;;;;8CAU4B,YAAY,IAAI,WAAW;;iCAExC,CAAC;YAE5B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC/C,8CAA8C;YAC9C,MAAM,eAAe,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAC7C,CAAC,GAA4B,EAAE,EAAE,CAAC,CAAC;gBACjC,GAAG,GAAG;gBACN,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChC,QAAQ,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAChC,SAAS,EAAE,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;aACnC,CAAC,CACH,CAAC;YACF,OAAO;gBACL,aAAa,EAAE,KAAK;gBACpB,eAAe;gBACf,IAAI,EAAE,oFAAoF;aAC3F,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,OAAwB;IAExB,iDAAiD;IACjD,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;QAC1C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC/C,OAAO,EAAE,CAAC;aACP,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aAClB,QAAQ,EAAE;aACV,QAAQ,CAAC,2CAA2C,CAAC;QACxD,OAAO,EAAE,CAAC;aACP,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aAClB,QAAQ,EAAE;aACV,QAAQ,CAAC,4CAA4C,CAAC;QACzD,OAAO,EAAE,CAAC;aACP,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,wCAAwC,CAAC;KACtD,CAAC,CAAC;IAEH,mDAAmD;IACnD,MAAM,sBAAsB,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE;QACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAC9D,MAAM,GAAG,GAAG,KAAgC,CAAC;QAC7C,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;QAC1B,sCAAsC;QACtC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YACnE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,SAAS,EAAE,CAAC;YACnE,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,EAAE,0BAA0B,CAAC,CAAC;IAE/B,OAAO;QACL,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,iFAAiF;QACnF,KAAK,EAAE,aAAa;QACpB,WAAW,EAAE,0BAA0B,EAAE,iCAAiC;QAC1E,YAAY,EAAE,4BAA4B;QAC1C,WAAW,EAAE,QAAQ,CAAC,oBAAoB,CAAC;QAC3C,KAAK,EAAE,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,oBAAoB,CAAC,CAAC;QAClE,OAAO,EAAE,KAAK,EAAE,MAAe,EAAE,QAAwB,EAAE,EAAE;YAC3D,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACpD,MAAM,WAAW,GACf,MAAM,CAAC,OAAO,KAAK,IAAI;gBACrB,CAAC,CAAC,yCAAyC;gBAC3C,CAAC,CAAC,uBAAuB,CAAC;YAE9B,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC3C,OAAO,CAAC,YAAY,CAClB,GAAG,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,EACjC,MAAM,CAAC,OAAO,IAAI,EAAE,CACrB;gBACD,OAAO,CAAC,YAAY,CAClB,GAAG,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,EACjC,MAAM,CAAC,OAAO,IAAI,EAAE,CACrB;aACF,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAI,EAAE,CAAC,YAAY,CAA0B,CAAC;YACjE,MAAM,UAAU,GAAG,IAAI,EAAE,CAAC,YAAY,CAA0B,CAAC;YACjE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAwC,CAAC;YACrE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAwC,CAAC;YAErE,MAAM,UAAU,GAAG;gBACjB,MAAM,EAAE;oBACN,YAAY,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC;oBACtC,aAAa,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC;oBACxC,SAAS,EAAG,KAAK,EAAE,CAAC,MAAM,CAAyC,EAAE,CACnE,YAAY,CACb;oBACD,gBAAgB,EAAE,KAAK,EAAE,CAAC,mBAAmB,CAAC;oBAC9C,iBAAiB,EAAE,KAAK,EAAE,CAAC,oBAAoB,CAAC;iBACjD;gBACD,MAAM,EAAE;oBACN,YAAY,EAAE,KAAK,EAAE,CAAC,eAAe,CAAC;oBACtC,aAAa,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC;oBACxC,SAAS,EAAG,KAAK,EAAE,CAAC,MAAM,CAAyC,EAAE,CACnE,YAAY,CACb;oBACD,gBAAgB,EAAE,KAAK,EAAE,CAAC,mBAAmB,CAAC;oBAC9C,iBAAiB,EAAE,KAAK,EAAE,CAAC,oBAAoB,CAAC;iBACjD;gBACD,QAAQ,EAAE;oBACR,cAAc,EACZ,KAAK,IAAI,KAAK;wBACZ,CAAC,CAAC,MAAM,CACH,KAAK,CAAC,MAAM,CAA6B,EAAE,CAAC,YAAY,CAAC,CAC3D;4BACD,MAAM,CACH,KAAK,CAAC,MAAM,CAA6B,EAAE,CAAC,YAAY,CAAC,CAC3D;wBACH,CAAC,CAAC,IAAI;oBACV,cAAc,EAAE,EAAE;iBACnB;gBACD,SAAS,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;aAC5B,CAAC;YAEF,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBAChD,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;oBAC3C,UAAU,CAAC,QAAQ,CAAC,cAAc;wBAChC,kCAAkC,CAAC;gBACvC,CAAC;qBAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;oBAClD,UAAU,CAAC,QAAQ,CAAC,cAAc;wBAChC,kCAAkC,CAAC;gBACvC,CAAC;qBAAM,CAAC;oBACN,UAAU,CAAC,QAAQ,CAAC,cAAc;wBAChC,0CAA0C,CAAC;gBAC/C,CAAC;YACH,CAAC;YAED,OAAO,UAAU,CAAC;QACpB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"analysis.js","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/performance/analysis.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/performance/explain.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,4BAA4B,CAAC;AASpC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAqB1E;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,GACvB,cAAc,CAqBhB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,GACvB,cAAc,CAqBhB"}
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../../../../src/adapters/postgresql/tools/performance/explain.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,4BAA4B,CAAC;AAUpC,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,cAAc,CAwC1E;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,GACvB,cAAc,CAwChB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,eAAe,GACvB,cAAc,CAwChB"}