@neverinfamous/mysql-mcp 2.1.0 → 2.2.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 (751) hide show
  1. package/.env.example +14 -4
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +7 -1
  3. package/.github/ISSUE_TEMPLATE/feature_request.md +6 -1
  4. package/.github/dependabot.yml +15 -0
  5. package/.github/pull_request_template.md +5 -0
  6. package/.github/workflows/codeql.yml +41 -42
  7. package/.github/workflows/docker-publish.yml +248 -210
  8. package/.github/workflows/publish-npm.yml +16 -6
  9. package/CHANGELOG.md +272 -22
  10. package/CODE_OF_CONDUCT.md +2 -0
  11. package/DOCKER_README.md +222 -156
  12. package/Dockerfile +2 -2
  13. package/README.md +210 -176
  14. package/SECURITY.md +0 -8
  15. package/VERSION +1 -1
  16. package/dist/__tests__/mocks/adapter.d.ts +3 -3
  17. package/dist/__tests__/mocks/adapter.d.ts.map +1 -1
  18. package/dist/__tests__/mocks/adapter.js +51 -35
  19. package/dist/__tests__/mocks/adapter.js.map +1 -1
  20. package/dist/__tests__/mocks/index.d.ts +4 -4
  21. package/dist/__tests__/mocks/index.d.ts.map +1 -1
  22. package/dist/__tests__/mocks/index.js +2 -2
  23. package/dist/__tests__/mocks/index.js.map +1 -1
  24. package/dist/__tests__/mocks/mysql.d.ts +2 -2
  25. package/dist/__tests__/mocks/mysql.d.ts.map +1 -1
  26. package/dist/__tests__/mocks/mysql.js +14 -14
  27. package/dist/__tests__/mocks/mysql.js.map +1 -1
  28. package/dist/__tests__/setup.d.ts.map +1 -1
  29. package/dist/__tests__/setup.js +7 -7
  30. package/dist/__tests__/setup.js.map +1 -1
  31. package/dist/adapters/DatabaseAdapter.d.ts +2 -2
  32. package/dist/adapters/DatabaseAdapter.d.ts.map +1 -1
  33. package/dist/adapters/DatabaseAdapter.js +69 -40
  34. package/dist/adapters/DatabaseAdapter.js.map +1 -1
  35. package/dist/adapters/mysql/MySQLAdapter.d.ts +10 -4
  36. package/dist/adapters/mysql/MySQLAdapter.d.ts.map +1 -1
  37. package/dist/adapters/mysql/MySQLAdapter.js +143 -116
  38. package/dist/adapters/mysql/MySQLAdapter.js.map +1 -1
  39. package/dist/adapters/mysql/SchemaManager.d.ts +1 -1
  40. package/dist/adapters/mysql/SchemaManager.d.ts.map +1 -1
  41. package/dist/adapters/mysql/SchemaManager.js +76 -56
  42. package/dist/adapters/mysql/SchemaManager.js.map +1 -1
  43. package/dist/adapters/mysql/index.d.ts +2 -2
  44. package/dist/adapters/mysql/index.js +2 -2
  45. package/dist/adapters/mysql/prompts/backupStrategy.d.ts +1 -1
  46. package/dist/adapters/mysql/prompts/backupStrategy.d.ts.map +1 -1
  47. package/dist/adapters/mysql/prompts/backupStrategy.js +21 -9
  48. package/dist/adapters/mysql/prompts/backupStrategy.js.map +1 -1
  49. package/dist/adapters/mysql/prompts/clusterSetup.d.ts +1 -1
  50. package/dist/adapters/mysql/prompts/clusterSetup.d.ts.map +1 -1
  51. package/dist/adapters/mysql/prompts/clusterSetup.js +3 -3
  52. package/dist/adapters/mysql/prompts/clusterSetup.js.map +1 -1
  53. package/dist/adapters/mysql/prompts/docstoreSetup.d.ts +1 -1
  54. package/dist/adapters/mysql/prompts/docstoreSetup.js +3 -3
  55. package/dist/adapters/mysql/prompts/docstoreSetup.js.map +1 -1
  56. package/dist/adapters/mysql/prompts/eventScheduler.d.ts +1 -1
  57. package/dist/adapters/mysql/prompts/eventScheduler.js +3 -3
  58. package/dist/adapters/mysql/prompts/eventScheduler.js.map +1 -1
  59. package/dist/adapters/mysql/prompts/healthCheck.d.ts +1 -1
  60. package/dist/adapters/mysql/prompts/healthCheck.d.ts.map +1 -1
  61. package/dist/adapters/mysql/prompts/healthCheck.js +10 -6
  62. package/dist/adapters/mysql/prompts/healthCheck.js.map +1 -1
  63. package/dist/adapters/mysql/prompts/index.d.ts +2 -2
  64. package/dist/adapters/mysql/prompts/index.d.ts.map +1 -1
  65. package/dist/adapters/mysql/prompts/index.js +98 -62
  66. package/dist/adapters/mysql/prompts/index.js.map +1 -1
  67. package/dist/adapters/mysql/prompts/indexTuning.d.ts +1 -1
  68. package/dist/adapters/mysql/prompts/indexTuning.d.ts.map +1 -1
  69. package/dist/adapters/mysql/prompts/indexTuning.js +11 -7
  70. package/dist/adapters/mysql/prompts/indexTuning.js.map +1 -1
  71. package/dist/adapters/mysql/prompts/mysqlshSetup.d.ts +1 -1
  72. package/dist/adapters/mysql/prompts/mysqlshSetup.js +4 -4
  73. package/dist/adapters/mysql/prompts/mysqlshSetup.js.map +1 -1
  74. package/dist/adapters/mysql/prompts/proxysqlSetup.d.ts +1 -1
  75. package/dist/adapters/mysql/prompts/proxysqlSetup.js +3 -3
  76. package/dist/adapters/mysql/prompts/proxysqlSetup.js.map +1 -1
  77. package/dist/adapters/mysql/prompts/replicationSetup.d.ts +1 -1
  78. package/dist/adapters/mysql/prompts/replicationSetup.d.ts.map +1 -1
  79. package/dist/adapters/mysql/prompts/replicationSetup.js +13 -7
  80. package/dist/adapters/mysql/prompts/replicationSetup.js.map +1 -1
  81. package/dist/adapters/mysql/prompts/routerSetup.d.ts +1 -1
  82. package/dist/adapters/mysql/prompts/routerSetup.js +3 -3
  83. package/dist/adapters/mysql/prompts/routerSetup.js.map +1 -1
  84. package/dist/adapters/mysql/prompts/spatialSetup.d.ts +1 -1
  85. package/dist/adapters/mysql/prompts/spatialSetup.js +3 -3
  86. package/dist/adapters/mysql/prompts/spatialSetup.js.map +1 -1
  87. package/dist/adapters/mysql/prompts/sysSchema.d.ts +1 -1
  88. package/dist/adapters/mysql/prompts/sysSchema.d.ts.map +1 -1
  89. package/dist/adapters/mysql/prompts/sysSchema.js +3 -3
  90. package/dist/adapters/mysql/prompts/sysSchema.js.map +1 -1
  91. package/dist/adapters/mysql/resources/capabilities.d.ts +2 -2
  92. package/dist/adapters/mysql/resources/capabilities.d.ts.map +1 -1
  93. package/dist/adapters/mysql/resources/capabilities.js +17 -15
  94. package/dist/adapters/mysql/resources/capabilities.js.map +1 -1
  95. package/dist/adapters/mysql/resources/cluster.d.ts +2 -2
  96. package/dist/adapters/mysql/resources/cluster.d.ts.map +1 -1
  97. package/dist/adapters/mysql/resources/cluster.js +17 -15
  98. package/dist/adapters/mysql/resources/cluster.js.map +1 -1
  99. package/dist/adapters/mysql/resources/docstore.d.ts +2 -2
  100. package/dist/adapters/mysql/resources/docstore.d.ts.map +1 -1
  101. package/dist/adapters/mysql/resources/docstore.js +12 -12
  102. package/dist/adapters/mysql/resources/docstore.js.map +1 -1
  103. package/dist/adapters/mysql/resources/events.d.ts +2 -2
  104. package/dist/adapters/mysql/resources/events.d.ts.map +1 -1
  105. package/dist/adapters/mysql/resources/events.js +12 -12
  106. package/dist/adapters/mysql/resources/events.js.map +1 -1
  107. package/dist/adapters/mysql/resources/health.d.ts +2 -2
  108. package/dist/adapters/mysql/resources/health.d.ts.map +1 -1
  109. package/dist/adapters/mysql/resources/health.js +36 -32
  110. package/dist/adapters/mysql/resources/health.js.map +1 -1
  111. package/dist/adapters/mysql/resources/index.d.ts +2 -2
  112. package/dist/adapters/mysql/resources/index.js +19 -19
  113. package/dist/adapters/mysql/resources/index.js.map +1 -1
  114. package/dist/adapters/mysql/resources/indexes.d.ts +2 -2
  115. package/dist/adapters/mysql/resources/indexes.d.ts.map +1 -1
  116. package/dist/adapters/mysql/resources/indexes.js +12 -12
  117. package/dist/adapters/mysql/resources/indexes.js.map +1 -1
  118. package/dist/adapters/mysql/resources/innodb.d.ts +2 -2
  119. package/dist/adapters/mysql/resources/innodb.d.ts.map +1 -1
  120. package/dist/adapters/mysql/resources/innodb.js +37 -36
  121. package/dist/adapters/mysql/resources/innodb.js.map +1 -1
  122. package/dist/adapters/mysql/resources/locks.d.ts +2 -2
  123. package/dist/adapters/mysql/resources/locks.d.ts.map +1 -1
  124. package/dist/adapters/mysql/resources/locks.js +14 -14
  125. package/dist/adapters/mysql/resources/locks.js.map +1 -1
  126. package/dist/adapters/mysql/resources/performance.d.ts +2 -2
  127. package/dist/adapters/mysql/resources/performance.d.ts.map +1 -1
  128. package/dist/adapters/mysql/resources/performance.js +30 -29
  129. package/dist/adapters/mysql/resources/performance.js.map +1 -1
  130. package/dist/adapters/mysql/resources/pool.d.ts +2 -2
  131. package/dist/adapters/mysql/resources/pool.d.ts.map +1 -1
  132. package/dist/adapters/mysql/resources/pool.js +9 -9
  133. package/dist/adapters/mysql/resources/pool.js.map +1 -1
  134. package/dist/adapters/mysql/resources/processlist.d.ts +2 -2
  135. package/dist/adapters/mysql/resources/processlist.d.ts.map +1 -1
  136. package/dist/adapters/mysql/resources/processlist.js +9 -9
  137. package/dist/adapters/mysql/resources/processlist.js.map +1 -1
  138. package/dist/adapters/mysql/resources/replication.d.ts +2 -2
  139. package/dist/adapters/mysql/resources/replication.d.ts.map +1 -1
  140. package/dist/adapters/mysql/resources/replication.js +42 -35
  141. package/dist/adapters/mysql/resources/replication.js.map +1 -1
  142. package/dist/adapters/mysql/resources/schema.d.ts +2 -2
  143. package/dist/adapters/mysql/resources/schema.d.ts.map +1 -1
  144. package/dist/adapters/mysql/resources/schema.js +8 -8
  145. package/dist/adapters/mysql/resources/schema.js.map +1 -1
  146. package/dist/adapters/mysql/resources/spatial.d.ts +2 -2
  147. package/dist/adapters/mysql/resources/spatial.d.ts.map +1 -1
  148. package/dist/adapters/mysql/resources/spatial.js +9 -9
  149. package/dist/adapters/mysql/resources/spatial.js.map +1 -1
  150. package/dist/adapters/mysql/resources/status.d.ts +2 -2
  151. package/dist/adapters/mysql/resources/status.d.ts.map +1 -1
  152. package/dist/adapters/mysql/resources/status.js +10 -10
  153. package/dist/adapters/mysql/resources/status.js.map +1 -1
  154. package/dist/adapters/mysql/resources/sysschema.d.ts +2 -2
  155. package/dist/adapters/mysql/resources/sysschema.d.ts.map +1 -1
  156. package/dist/adapters/mysql/resources/sysschema.js +10 -10
  157. package/dist/adapters/mysql/resources/sysschema.js.map +1 -1
  158. package/dist/adapters/mysql/resources/tables.d.ts +2 -2
  159. package/dist/adapters/mysql/resources/tables.d.ts.map +1 -1
  160. package/dist/adapters/mysql/resources/tables.js +8 -8
  161. package/dist/adapters/mysql/resources/tables.js.map +1 -1
  162. package/dist/adapters/mysql/resources/variables.d.ts +2 -2
  163. package/dist/adapters/mysql/resources/variables.d.ts.map +1 -1
  164. package/dist/adapters/mysql/resources/variables.js +10 -10
  165. package/dist/adapters/mysql/resources/variables.js.map +1 -1
  166. package/dist/adapters/mysql/tools/admin/backup.d.ts +2 -2
  167. package/dist/adapters/mysql/tools/admin/backup.d.ts.map +1 -1
  168. package/dist/adapters/mysql/tools/admin/backup.js +191 -99
  169. package/dist/adapters/mysql/tools/admin/backup.js.map +1 -1
  170. package/dist/adapters/mysql/tools/admin/index.d.ts +2 -2
  171. package/dist/adapters/mysql/tools/admin/index.js +6 -6
  172. package/dist/adapters/mysql/tools/admin/index.js.map +1 -1
  173. package/dist/adapters/mysql/tools/admin/maintenance.d.ts +2 -2
  174. package/dist/adapters/mysql/tools/admin/maintenance.d.ts.map +1 -1
  175. package/dist/adapters/mysql/tools/admin/maintenance.js +93 -62
  176. package/dist/adapters/mysql/tools/admin/maintenance.js.map +1 -1
  177. package/dist/adapters/mysql/tools/admin/monitoring.d.ts +2 -2
  178. package/dist/adapters/mysql/tools/admin/monitoring.d.ts.map +1 -1
  179. package/dist/adapters/mysql/tools/admin/monitoring.js +215 -79
  180. package/dist/adapters/mysql/tools/admin/monitoring.js.map +1 -1
  181. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts +2 -2
  182. package/dist/adapters/mysql/tools/cluster/group-replication.d.ts.map +1 -1
  183. package/dist/adapters/mysql/tools/cluster/group-replication.js +90 -74
  184. package/dist/adapters/mysql/tools/cluster/group-replication.js.map +1 -1
  185. package/dist/adapters/mysql/tools/cluster/index.d.ts +2 -2
  186. package/dist/adapters/mysql/tools/cluster/index.js +3 -3
  187. package/dist/adapters/mysql/tools/cluster/index.js.map +1 -1
  188. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts +2 -2
  189. package/dist/adapters/mysql/tools/cluster/innodb-cluster.d.ts.map +1 -1
  190. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js +204 -97
  191. package/dist/adapters/mysql/tools/cluster/innodb-cluster.js.map +1 -1
  192. package/dist/adapters/mysql/tools/core.d.ts +2 -2
  193. package/dist/adapters/mysql/tools/core.d.ts.map +1 -1
  194. package/dist/adapters/mysql/tools/core.js +205 -97
  195. package/dist/adapters/mysql/tools/core.js.map +1 -1
  196. package/dist/adapters/mysql/tools/docstore.d.ts +2 -2
  197. package/dist/adapters/mysql/tools/docstore.d.ts.map +1 -1
  198. package/dist/adapters/mysql/tools/docstore.js +252 -117
  199. package/dist/adapters/mysql/tools/docstore.js.map +1 -1
  200. package/dist/adapters/mysql/tools/events.d.ts +2 -2
  201. package/dist/adapters/mysql/tools/events.d.ts.map +1 -1
  202. package/dist/adapters/mysql/tools/events.js +219 -108
  203. package/dist/adapters/mysql/tools/events.js.map +1 -1
  204. package/dist/adapters/mysql/tools/index.d.ts +19 -19
  205. package/dist/adapters/mysql/tools/index.d.ts.map +1 -1
  206. package/dist/adapters/mysql/tools/index.js +19 -19
  207. package/dist/adapters/mysql/tools/index.js.map +1 -1
  208. package/dist/adapters/mysql/tools/json/core.d.ts +2 -2
  209. package/dist/adapters/mysql/tools/json/core.d.ts.map +1 -1
  210. package/dist/adapters/mysql/tools/json/core.js +221 -127
  211. package/dist/adapters/mysql/tools/json/core.js.map +1 -1
  212. package/dist/adapters/mysql/tools/json/enhanced.d.ts +2 -2
  213. package/dist/adapters/mysql/tools/json/enhanced.d.ts.map +1 -1
  214. package/dist/adapters/mysql/tools/json/enhanced.js +274 -163
  215. package/dist/adapters/mysql/tools/json/enhanced.js.map +1 -1
  216. package/dist/adapters/mysql/tools/json/helpers.d.ts +2 -2
  217. package/dist/adapters/mysql/tools/json/helpers.d.ts.map +1 -1
  218. package/dist/adapters/mysql/tools/json/helpers.js +134 -56
  219. package/dist/adapters/mysql/tools/json/helpers.js.map +1 -1
  220. package/dist/adapters/mysql/tools/json/index.d.ts +2 -2
  221. package/dist/adapters/mysql/tools/json/index.js +6 -6
  222. package/dist/adapters/mysql/tools/json/index.js.map +1 -1
  223. package/dist/adapters/mysql/tools/partitioning.d.ts +2 -2
  224. package/dist/adapters/mysql/tools/partitioning.js +143 -59
  225. package/dist/adapters/mysql/tools/partitioning.js.map +1 -1
  226. package/dist/adapters/mysql/tools/performance/analysis.d.ts +2 -2
  227. package/dist/adapters/mysql/tools/performance/analysis.d.ts.map +1 -1
  228. package/dist/adapters/mysql/tools/performance/analysis.js +122 -86
  229. package/dist/adapters/mysql/tools/performance/analysis.js.map +1 -1
  230. package/dist/adapters/mysql/tools/performance/index.d.ts +2 -2
  231. package/dist/adapters/mysql/tools/performance/index.js +4 -4
  232. package/dist/adapters/mysql/tools/performance/index.js.map +1 -1
  233. package/dist/adapters/mysql/tools/performance/optimization.d.ts +3 -3
  234. package/dist/adapters/mysql/tools/performance/optimization.d.ts.map +1 -1
  235. package/dist/adapters/mysql/tools/performance/optimization.js +195 -73
  236. package/dist/adapters/mysql/tools/performance/optimization.js.map +1 -1
  237. package/dist/adapters/mysql/tools/proxysql.d.ts +2 -2
  238. package/dist/adapters/mysql/tools/proxysql.d.ts.map +1 -1
  239. package/dist/adapters/mysql/tools/proxysql.js +213 -125
  240. package/dist/adapters/mysql/tools/proxysql.js.map +1 -1
  241. package/dist/adapters/mysql/tools/replication.d.ts +2 -2
  242. package/dist/adapters/mysql/tools/replication.d.ts.map +1 -1
  243. package/dist/adapters/mysql/tools/replication.js +117 -66
  244. package/dist/adapters/mysql/tools/replication.js.map +1 -1
  245. package/dist/adapters/mysql/tools/roles.d.ts +2 -2
  246. package/dist/adapters/mysql/tools/roles.d.ts.map +1 -1
  247. package/dist/adapters/mysql/tools/roles.js +276 -84
  248. package/dist/adapters/mysql/tools/roles.js.map +1 -1
  249. package/dist/adapters/mysql/tools/router.d.ts +2 -2
  250. package/dist/adapters/mysql/tools/router.d.ts.map +1 -1
  251. package/dist/adapters/mysql/tools/router.js +174 -109
  252. package/dist/adapters/mysql/tools/router.js.map +1 -1
  253. package/dist/adapters/mysql/tools/schema/constraints.d.ts +2 -2
  254. package/dist/adapters/mysql/tools/schema/constraints.d.ts.map +1 -1
  255. package/dist/adapters/mysql/tools/schema/constraints.js +24 -15
  256. package/dist/adapters/mysql/tools/schema/constraints.js.map +1 -1
  257. package/dist/adapters/mysql/tools/schema/index.d.ts +2 -2
  258. package/dist/adapters/mysql/tools/schema/index.d.ts.map +1 -1
  259. package/dist/adapters/mysql/tools/schema/index.js +7 -7
  260. package/dist/adapters/mysql/tools/schema/index.js.map +1 -1
  261. package/dist/adapters/mysql/tools/schema/management.d.ts +2 -2
  262. package/dist/adapters/mysql/tools/schema/management.d.ts.map +1 -1
  263. package/dist/adapters/mysql/tools/schema/management.js +99 -42
  264. package/dist/adapters/mysql/tools/schema/management.js.map +1 -1
  265. package/dist/adapters/mysql/tools/schema/routines.d.ts +2 -2
  266. package/dist/adapters/mysql/tools/schema/routines.d.ts.map +1 -1
  267. package/dist/adapters/mysql/tools/schema/routines.js +36 -19
  268. package/dist/adapters/mysql/tools/schema/routines.js.map +1 -1
  269. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts +2 -2
  270. package/dist/adapters/mysql/tools/schema/scheduled_events.d.ts.map +1 -1
  271. package/dist/adapters/mysql/tools/schema/scheduled_events.js +26 -13
  272. package/dist/adapters/mysql/tools/schema/scheduled_events.js.map +1 -1
  273. package/dist/adapters/mysql/tools/schema/triggers.d.ts +2 -2
  274. package/dist/adapters/mysql/tools/schema/triggers.d.ts.map +1 -1
  275. package/dist/adapters/mysql/tools/schema/triggers.js +24 -13
  276. package/dist/adapters/mysql/tools/schema/triggers.js.map +1 -1
  277. package/dist/adapters/mysql/tools/schema/views.d.ts +2 -2
  278. package/dist/adapters/mysql/tools/schema/views.d.ts.map +1 -1
  279. package/dist/adapters/mysql/tools/schema/views.js +59 -28
  280. package/dist/adapters/mysql/tools/schema/views.js.map +1 -1
  281. package/dist/adapters/mysql/tools/security/audit.d.ts +2 -2
  282. package/dist/adapters/mysql/tools/security/audit.d.ts.map +1 -1
  283. package/dist/adapters/mysql/tools/security/audit.js +61 -55
  284. package/dist/adapters/mysql/tools/security/audit.js.map +1 -1
  285. package/dist/adapters/mysql/tools/security/data-protection.d.ts +2 -2
  286. package/dist/adapters/mysql/tools/security/data-protection.d.ts.map +1 -1
  287. package/dist/adapters/mysql/tools/security/data-protection.js +188 -80
  288. package/dist/adapters/mysql/tools/security/data-protection.js.map +1 -1
  289. package/dist/adapters/mysql/tools/security/encryption.d.ts +2 -2
  290. package/dist/adapters/mysql/tools/security/encryption.d.ts.map +1 -1
  291. package/dist/adapters/mysql/tools/security/encryption.js +86 -67
  292. package/dist/adapters/mysql/tools/security/encryption.js.map +1 -1
  293. package/dist/adapters/mysql/tools/security/index.d.ts +2 -2
  294. package/dist/adapters/mysql/tools/security/index.js +4 -4
  295. package/dist/adapters/mysql/tools/security/index.js.map +1 -1
  296. package/dist/adapters/mysql/tools/shell/backup.d.ts +1 -1
  297. package/dist/adapters/mysql/tools/shell/backup.d.ts.map +1 -1
  298. package/dist/adapters/mysql/tools/shell/backup.js +122 -63
  299. package/dist/adapters/mysql/tools/shell/backup.js.map +1 -1
  300. package/dist/adapters/mysql/tools/shell/common.d.ts.map +1 -1
  301. package/dist/adapters/mysql/tools/shell/common.js +34 -36
  302. package/dist/adapters/mysql/tools/shell/common.js.map +1 -1
  303. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts +1 -1
  304. package/dist/adapters/mysql/tools/shell/data-transfer.d.ts.map +1 -1
  305. package/dist/adapters/mysql/tools/shell/data-transfer.js +125 -69
  306. package/dist/adapters/mysql/tools/shell/data-transfer.js.map +1 -1
  307. package/dist/adapters/mysql/tools/shell/index.d.ts +2 -2
  308. package/dist/adapters/mysql/tools/shell/index.js +6 -6
  309. package/dist/adapters/mysql/tools/shell/index.js.map +1 -1
  310. package/dist/adapters/mysql/tools/shell/info.d.ts +1 -1
  311. package/dist/adapters/mysql/tools/shell/info.d.ts.map +1 -1
  312. package/dist/adapters/mysql/tools/shell/info.js +12 -12
  313. package/dist/adapters/mysql/tools/shell/info.js.map +1 -1
  314. package/dist/adapters/mysql/tools/shell/restore.d.ts +1 -1
  315. package/dist/adapters/mysql/tools/shell/restore.d.ts.map +1 -1
  316. package/dist/adapters/mysql/tools/shell/restore.js +77 -42
  317. package/dist/adapters/mysql/tools/shell/restore.js.map +1 -1
  318. package/dist/adapters/mysql/tools/shell/utilities.d.ts +1 -1
  319. package/dist/adapters/mysql/tools/shell/utilities.d.ts.map +1 -1
  320. package/dist/adapters/mysql/tools/shell/utilities.js +42 -18
  321. package/dist/adapters/mysql/tools/shell/utilities.js.map +1 -1
  322. package/dist/adapters/mysql/tools/spatial/geometry.d.ts +2 -2
  323. package/dist/adapters/mysql/tools/spatial/geometry.d.ts.map +1 -1
  324. package/dist/adapters/mysql/tools/spatial/geometry.js +85 -46
  325. package/dist/adapters/mysql/tools/spatial/geometry.js.map +1 -1
  326. package/dist/adapters/mysql/tools/spatial/index.d.ts +2 -2
  327. package/dist/adapters/mysql/tools/spatial/index.js +5 -5
  328. package/dist/adapters/mysql/tools/spatial/index.js.map +1 -1
  329. package/dist/adapters/mysql/tools/spatial/operations.d.ts +2 -2
  330. package/dist/adapters/mysql/tools/spatial/operations.d.ts.map +1 -1
  331. package/dist/adapters/mysql/tools/spatial/operations.js +167 -106
  332. package/dist/adapters/mysql/tools/spatial/operations.js.map +1 -1
  333. package/dist/adapters/mysql/tools/spatial/queries.d.ts +2 -2
  334. package/dist/adapters/mysql/tools/spatial/queries.d.ts.map +1 -1
  335. package/dist/adapters/mysql/tools/spatial/queries.js +144 -100
  336. package/dist/adapters/mysql/tools/spatial/queries.js.map +1 -1
  337. package/dist/adapters/mysql/tools/spatial/setup.d.ts +2 -2
  338. package/dist/adapters/mysql/tools/spatial/setup.d.ts.map +1 -1
  339. package/dist/adapters/mysql/tools/spatial/setup.js +104 -34
  340. package/dist/adapters/mysql/tools/spatial/setup.js.map +1 -1
  341. package/dist/adapters/mysql/tools/stats/comparative.d.ts +2 -2
  342. package/dist/adapters/mysql/tools/stats/comparative.d.ts.map +1 -1
  343. package/dist/adapters/mysql/tools/stats/comparative.js +159 -107
  344. package/dist/adapters/mysql/tools/stats/comparative.js.map +1 -1
  345. package/dist/adapters/mysql/tools/stats/descriptive.d.ts +2 -2
  346. package/dist/adapters/mysql/tools/stats/descriptive.d.ts.map +1 -1
  347. package/dist/adapters/mysql/tools/stats/descriptive.js +268 -205
  348. package/dist/adapters/mysql/tools/stats/descriptive.js.map +1 -1
  349. package/dist/adapters/mysql/tools/stats/index.d.ts +2 -2
  350. package/dist/adapters/mysql/tools/stats/index.js +3 -3
  351. package/dist/adapters/mysql/tools/stats/index.js.map +1 -1
  352. package/dist/adapters/mysql/tools/sysschema/activity.d.ts +2 -2
  353. package/dist/adapters/mysql/tools/sysschema/activity.d.ts.map +1 -1
  354. package/dist/adapters/mysql/tools/sysschema/activity.js +23 -23
  355. package/dist/adapters/mysql/tools/sysschema/activity.js.map +1 -1
  356. package/dist/adapters/mysql/tools/sysschema/index.d.ts +2 -2
  357. package/dist/adapters/mysql/tools/sysschema/index.js +4 -4
  358. package/dist/adapters/mysql/tools/sysschema/index.js.map +1 -1
  359. package/dist/adapters/mysql/tools/sysschema/performance.d.ts +2 -2
  360. package/dist/adapters/mysql/tools/sysschema/performance.d.ts.map +1 -1
  361. package/dist/adapters/mysql/tools/sysschema/performance.js +58 -43
  362. package/dist/adapters/mysql/tools/sysschema/performance.js.map +1 -1
  363. package/dist/adapters/mysql/tools/sysschema/resources.d.ts +2 -2
  364. package/dist/adapters/mysql/tools/sysschema/resources.d.ts.map +1 -1
  365. package/dist/adapters/mysql/tools/sysschema/resources.js +53 -33
  366. package/dist/adapters/mysql/tools/sysschema/resources.js.map +1 -1
  367. package/dist/adapters/mysql/tools/text/fulltext.d.ts +4 -3
  368. package/dist/adapters/mysql/tools/text/fulltext.d.ts.map +1 -1
  369. package/dist/adapters/mysql/tools/text/fulltext.js +211 -54
  370. package/dist/adapters/mysql/tools/text/fulltext.js.map +1 -1
  371. package/dist/adapters/mysql/tools/text/index.d.ts +3 -3
  372. package/dist/adapters/mysql/tools/text/index.d.ts.map +1 -1
  373. package/dist/adapters/mysql/tools/text/index.js +6 -5
  374. package/dist/adapters/mysql/tools/text/index.js.map +1 -1
  375. package/dist/adapters/mysql/tools/text/processing.d.ts +2 -2
  376. package/dist/adapters/mysql/tools/text/processing.d.ts.map +1 -1
  377. package/dist/adapters/mysql/tools/text/processing.js +191 -103
  378. package/dist/adapters/mysql/tools/text/processing.js.map +1 -1
  379. package/dist/adapters/mysql/tools/transactions.d.ts +2 -2
  380. package/dist/adapters/mysql/tools/transactions.js +156 -79
  381. package/dist/adapters/mysql/tools/transactions.js.map +1 -1
  382. package/dist/adapters/mysql/types/proxysql-types.d.ts +7 -2
  383. package/dist/adapters/mysql/types/proxysql-types.d.ts.map +1 -1
  384. package/dist/adapters/mysql/types/proxysql-types.js +52 -30
  385. package/dist/adapters/mysql/types/proxysql-types.js.map +1 -1
  386. package/dist/adapters/mysql/types/router-types.d.ts +1 -1
  387. package/dist/adapters/mysql/types/router-types.js +17 -17
  388. package/dist/adapters/mysql/types/router-types.js.map +1 -1
  389. package/dist/adapters/mysql/types/shell-types.d.ts +1 -2
  390. package/dist/adapters/mysql/types/shell-types.d.ts.map +1 -1
  391. package/dist/adapters/mysql/types/shell-types.js +255 -82
  392. package/dist/adapters/mysql/types/shell-types.js.map +1 -1
  393. package/dist/adapters/mysql/types.d.ts +8 -2
  394. package/dist/adapters/mysql/types.d.ts.map +1 -1
  395. package/dist/adapters/mysql/types.js +269 -128
  396. package/dist/adapters/mysql/types.js.map +1 -1
  397. package/dist/auth/AuthorizationServerDiscovery.d.ts +1 -1
  398. package/dist/auth/AuthorizationServerDiscovery.d.ts.map +1 -1
  399. package/dist/auth/AuthorizationServerDiscovery.js +16 -14
  400. package/dist/auth/AuthorizationServerDiscovery.js.map +1 -1
  401. package/dist/auth/OAuthResourceServer.d.ts +1 -1
  402. package/dist/auth/OAuthResourceServer.d.ts.map +1 -1
  403. package/dist/auth/OAuthResourceServer.js +4 -4
  404. package/dist/auth/OAuthResourceServer.js.map +1 -1
  405. package/dist/auth/TokenValidator.d.ts +1 -1
  406. package/dist/auth/TokenValidator.d.ts.map +1 -1
  407. package/dist/auth/TokenValidator.js +30 -20
  408. package/dist/auth/TokenValidator.js.map +1 -1
  409. package/dist/auth/errors.d.ts.map +1 -1
  410. package/dist/auth/errors.js +24 -24
  411. package/dist/auth/errors.js.map +1 -1
  412. package/dist/auth/index.d.ts +7 -7
  413. package/dist/auth/index.d.ts.map +1 -1
  414. package/dist/auth/index.js +6 -6
  415. package/dist/auth/index.js.map +1 -1
  416. package/dist/auth/middleware.d.ts +2 -2
  417. package/dist/auth/middleware.d.ts.map +1 -1
  418. package/dist/auth/middleware.js +28 -24
  419. package/dist/auth/middleware.js.map +1 -1
  420. package/dist/auth/scopes.d.ts +2 -2
  421. package/dist/auth/scopes.d.ts.map +1 -1
  422. package/dist/auth/scopes.js +22 -16
  423. package/dist/auth/scopes.js.map +1 -1
  424. package/dist/auth/types.d.ts +2 -2
  425. package/dist/auth/types.d.ts.map +1 -1
  426. package/dist/cli/args.d.ts +1 -1
  427. package/dist/cli/args.d.ts.map +1 -1
  428. package/dist/cli/args.js +70 -68
  429. package/dist/cli/args.js.map +1 -1
  430. package/dist/cli.d.ts +1 -1
  431. package/dist/cli.d.ts.map +1 -1
  432. package/dist/cli.js +44 -34
  433. package/dist/cli.js.map +1 -1
  434. package/dist/constants/ServerInstructions.d.ts +2 -2
  435. package/dist/constants/ServerInstructions.d.ts.map +1 -1
  436. package/dist/constants/ServerInstructions.js +228 -36
  437. package/dist/constants/ServerInstructions.js.map +1 -1
  438. package/dist/filtering/ToolConstants.d.ts +6 -6
  439. package/dist/filtering/ToolConstants.d.ts.map +1 -1
  440. package/dist/filtering/ToolConstants.js +229 -208
  441. package/dist/filtering/ToolConstants.js.map +1 -1
  442. package/dist/filtering/ToolFilter.d.ts +2 -2
  443. package/dist/filtering/ToolFilter.d.ts.map +1 -1
  444. package/dist/filtering/ToolFilter.js +35 -36
  445. package/dist/filtering/ToolFilter.js.map +1 -1
  446. package/dist/index.d.ts +9 -9
  447. package/dist/index.d.ts.map +1 -1
  448. package/dist/index.js +7 -7
  449. package/dist/index.js.map +1 -1
  450. package/dist/logging/McpLogging.d.ts +2 -2
  451. package/dist/logging/McpLogging.d.ts.map +1 -1
  452. package/dist/logging/McpLogging.js +16 -13
  453. package/dist/logging/McpLogging.js.map +1 -1
  454. package/dist/logging/index.d.ts +1 -1
  455. package/dist/logging/index.js +1 -1
  456. package/dist/pool/ConnectionPool.d.ts +3 -3
  457. package/dist/pool/ConnectionPool.d.ts.map +1 -1
  458. package/dist/pool/ConnectionPool.js +30 -26
  459. package/dist/pool/ConnectionPool.js.map +1 -1
  460. package/dist/progress/ProgressReporter.d.ts +1 -1
  461. package/dist/progress/ProgressReporter.d.ts.map +1 -1
  462. package/dist/progress/ProgressReporter.js +5 -5
  463. package/dist/progress/ProgressReporter.js.map +1 -1
  464. package/dist/progress/index.d.ts +1 -1
  465. package/dist/progress/index.d.ts.map +1 -1
  466. package/dist/progress/index.js +1 -1
  467. package/dist/progress/index.js.map +1 -1
  468. package/dist/server/McpServer.d.ts +3 -3
  469. package/dist/server/McpServer.d.ts.map +1 -1
  470. package/dist/server/McpServer.js +58 -53
  471. package/dist/server/McpServer.js.map +1 -1
  472. package/dist/transports/http.d.ts +3 -3
  473. package/dist/transports/http.d.ts.map +1 -1
  474. package/dist/transports/http.js +36 -33
  475. package/dist/transports/http.js.map +1 -1
  476. package/dist/transports/index.d.ts +1 -1
  477. package/dist/transports/index.d.ts.map +1 -1
  478. package/dist/transports/index.js +1 -1
  479. package/dist/transports/index.js.map +1 -1
  480. package/dist/types/index.d.ts +6 -6
  481. package/dist/types/index.d.ts.map +1 -1
  482. package/dist/types/index.js +1 -1
  483. package/dist/types/index.js.map +1 -1
  484. package/dist/types/modules/database.d.ts +1 -1
  485. package/dist/types/modules/database.d.ts.map +1 -1
  486. package/dist/types/modules/errors.d.ts.map +1 -1
  487. package/dist/types/modules/errors.js +15 -15
  488. package/dist/types/modules/errors.js.map +1 -1
  489. package/dist/types/modules/oauth.d.ts +1 -1
  490. package/dist/types/modules/oauth.d.ts.map +1 -1
  491. package/dist/types/modules/query.d.ts +8 -8
  492. package/dist/types/modules/query.d.ts.map +1 -1
  493. package/dist/types/modules/server.d.ts +3 -3
  494. package/dist/types/modules/server.d.ts.map +1 -1
  495. package/dist/types/modules/tools.d.ts +6 -6
  496. package/dist/types/modules/tools.d.ts.map +1 -1
  497. package/dist/utils/logger.d.ts +2 -2
  498. package/dist/utils/logger.d.ts.map +1 -1
  499. package/dist/utils/logger.js +58 -55
  500. package/dist/utils/logger.js.map +1 -1
  501. package/dist/utils/promptGenerator.d.ts +1 -1
  502. package/dist/utils/promptGenerator.d.ts.map +1 -1
  503. package/dist/utils/promptGenerator.js +24 -16
  504. package/dist/utils/promptGenerator.js.map +1 -1
  505. package/dist/utils/validators.d.ts +21 -2
  506. package/dist/utils/validators.d.ts.map +1 -1
  507. package/dist/utils/validators.js +101 -13
  508. package/dist/utils/validators.js.map +1 -1
  509. package/eslint.config.js +117 -81
  510. package/package.json +61 -64
  511. package/releases/release-notes.md +32 -26
  512. package/releases/v2.0.0-release-notes.md +99 -51
  513. package/releases/v2.1.0-release-notes.md +14 -5
  514. package/releases/v2.2.0-release-notes.md +239 -0
  515. package/server.json +1 -1
  516. package/src/__tests__/cli.test.ts +302 -247
  517. package/src/__tests__/index.test.ts +21 -21
  518. package/src/__tests__/mocks/adapter.ts +204 -163
  519. package/src/__tests__/mocks/index.ts +30 -23
  520. package/src/__tests__/mocks/mysql.ts +94 -84
  521. package/src/__tests__/perf.test.ts +207 -203
  522. package/src/__tests__/performance.test.ts +173 -164
  523. package/src/__tests__/setup.ts +26 -21
  524. package/src/adapters/DatabaseAdapter.ts +386 -340
  525. package/src/adapters/__tests__/DatabaseAdapter.test.ts +455 -377
  526. package/src/adapters/mysql/MySQLAdapter.ts +550 -486
  527. package/src/adapters/mysql/SchemaManager.ts +251 -208
  528. package/src/adapters/mysql/__tests__/MySQLAdapter.integration.test.ts +150 -147
  529. package/src/adapters/mysql/__tests__/MySQLAdapter.test.ts +590 -477
  530. package/src/adapters/mysql/__tests__/SchemaManager.test.ts +196 -154
  531. package/src/adapters/mysql/index.ts +2 -2
  532. package/src/adapters/mysql/prompts/__tests__/indexTuning.test.ts +33 -26
  533. package/src/adapters/mysql/prompts/__tests__/prompts.test.ts +277 -239
  534. package/src/adapters/mysql/prompts/backupStrategy.ts +29 -17
  535. package/src/adapters/mysql/prompts/clusterSetup.ts +11 -10
  536. package/src/adapters/mysql/prompts/docstoreSetup.ts +10 -10
  537. package/src/adapters/mysql/prompts/eventScheduler.ts +10 -10
  538. package/src/adapters/mysql/prompts/healthCheck.ts +20 -15
  539. package/src/adapters/mysql/prompts/index.ts +194 -144
  540. package/src/adapters/mysql/prompts/indexTuning.ts +22 -17
  541. package/src/adapters/mysql/prompts/mysqlshSetup.ts +11 -11
  542. package/src/adapters/mysql/prompts/proxysqlSetup.ts +10 -10
  543. package/src/adapters/mysql/prompts/replicationSetup.ts +24 -16
  544. package/src/adapters/mysql/prompts/routerSetup.ts +10 -10
  545. package/src/adapters/mysql/prompts/spatialSetup.ts +10 -10
  546. package/src/adapters/mysql/prompts/sysSchema.ts +11 -10
  547. package/src/adapters/mysql/resources/__tests__/capabilities.test.ts +69 -47
  548. package/src/adapters/mysql/resources/__tests__/cluster.test.ts +163 -104
  549. package/src/adapters/mysql/resources/__tests__/docstore.test.ts +88 -81
  550. package/src/adapters/mysql/resources/__tests__/events.test.ts +94 -83
  551. package/src/adapters/mysql/resources/__tests__/health.test.ts +131 -91
  552. package/src/adapters/mysql/resources/__tests__/indexes.test.ts +125 -102
  553. package/src/adapters/mysql/resources/__tests__/innodb.test.ts +86 -62
  554. package/src/adapters/mysql/resources/__tests__/locks.test.ts +142 -104
  555. package/src/adapters/mysql/resources/__tests__/performance.test.ts +81 -58
  556. package/src/adapters/mysql/resources/__tests__/pool.test.ts +45 -40
  557. package/src/adapters/mysql/resources/__tests__/processlist.test.ts +39 -23
  558. package/src/adapters/mysql/resources/__tests__/replication.test.ts +265 -211
  559. package/src/adapters/mysql/resources/__tests__/resources.test.ts +121 -109
  560. package/src/adapters/mysql/resources/__tests__/schema.test.ts +29 -23
  561. package/src/adapters/mysql/resources/__tests__/spatial.test.ts +58 -45
  562. package/src/adapters/mysql/resources/__tests__/status.test.ts +62 -45
  563. package/src/adapters/mysql/resources/__tests__/sysschema.test.ts +99 -60
  564. package/src/adapters/mysql/resources/__tests__/tables.test.ts +41 -32
  565. package/src/adapters/mysql/resources/__tests__/variables.test.ts +77 -49
  566. package/src/adapters/mysql/resources/capabilities.ts +59 -42
  567. package/src/adapters/mysql/resources/cluster.ts +58 -49
  568. package/src/adapters/mysql/resources/docstore.ts +46 -41
  569. package/src/adapters/mysql/resources/events.ts +37 -31
  570. package/src/adapters/mysql/resources/health.ts +98 -74
  571. package/src/adapters/mysql/resources/index.ts +46 -46
  572. package/src/adapters/mysql/resources/indexes.ts +66 -51
  573. package/src/adapters/mysql/resources/innodb.ts +98 -81
  574. package/src/adapters/mysql/resources/locks.ts +43 -40
  575. package/src/adapters/mysql/resources/performance.ts +80 -67
  576. package/src/adapters/mysql/resources/pool.ts +23 -20
  577. package/src/adapters/mysql/resources/processlist.ts +23 -18
  578. package/src/adapters/mysql/resources/replication.ts +124 -105
  579. package/src/adapters/mysql/resources/schema.ts +23 -18
  580. package/src/adapters/mysql/resources/spatial.ts +31 -26
  581. package/src/adapters/mysql/resources/status.ts +27 -22
  582. package/src/adapters/mysql/resources/sysschema.ts +41 -36
  583. package/src/adapters/mysql/resources/tables.ts +23 -18
  584. package/src/adapters/mysql/resources/variables.ts +27 -22
  585. package/src/adapters/mysql/tools/__tests__/cluster.test.ts +419 -311
  586. package/src/adapters/mysql/tools/__tests__/core.test.ts +633 -382
  587. package/src/adapters/mysql/tools/__tests__/docstore.test.ts +782 -413
  588. package/src/adapters/mysql/tools/__tests__/events.test.ts +752 -486
  589. package/src/adapters/mysql/tools/__tests__/json_core.test.ts +326 -259
  590. package/src/adapters/mysql/tools/__tests__/json_enhanced.test.ts +452 -352
  591. package/src/adapters/mysql/tools/__tests__/json_helpers.test.ts +169 -136
  592. package/src/adapters/mysql/tools/__tests__/proxysql.test.ts +576 -340
  593. package/src/adapters/mysql/tools/__tests__/replication.test.ts +697 -393
  594. package/src/adapters/mysql/tools/__tests__/roles.test.ts +423 -166
  595. package/src/adapters/mysql/tools/__tests__/router.test.ts +644 -540
  596. package/src/adapters/mysql/tools/__tests__/security.test.ts +708 -422
  597. package/src/adapters/mysql/tools/__tests__/security_injection.test.ts +246 -173
  598. package/src/adapters/mysql/tools/__tests__/security_integration.test.ts +244 -205
  599. package/src/adapters/mysql/tools/__tests__/spatial.test.ts +413 -300
  600. package/src/adapters/mysql/tools/__tests__/spatial_handler.test.ts +503 -150
  601. package/src/adapters/mysql/tools/__tests__/stats.test.ts +861 -553
  602. package/src/adapters/mysql/tools/__tests__/transactions.test.ts +454 -263
  603. package/src/adapters/mysql/tools/admin/__tests__/backup.test.ts +612 -372
  604. package/src/adapters/mysql/tools/admin/__tests__/maintenance.test.ts +550 -257
  605. package/src/adapters/mysql/tools/admin/__tests__/monitoring.test.ts +549 -352
  606. package/src/adapters/mysql/tools/admin/backup.ts +334 -215
  607. package/src/adapters/mysql/tools/admin/index.ts +46 -46
  608. package/src/adapters/mysql/tools/admin/maintenance.ts +176 -130
  609. package/src/adapters/mysql/tools/admin/monitoring.ts +373 -199
  610. package/src/adapters/mysql/tools/cluster/__tests__/group-replication.test.ts +200 -186
  611. package/src/adapters/mysql/tools/cluster/__tests__/innodb-cluster.test.ts +364 -95
  612. package/src/adapters/mysql/tools/cluster/group-replication.ts +218 -183
  613. package/src/adapters/mysql/tools/cluster/index.ts +27 -27
  614. package/src/adapters/mysql/tools/cluster/innodb-cluster.ts +392 -251
  615. package/src/adapters/mysql/tools/core.ts +408 -285
  616. package/src/adapters/mysql/tools/docstore.ts +478 -276
  617. package/src/adapters/mysql/tools/events.ts +425 -285
  618. package/src/adapters/mysql/tools/index.ts +31 -20
  619. package/src/adapters/mysql/tools/json/__tests__/core.test.ts +456 -199
  620. package/src/adapters/mysql/tools/json/__tests__/enhanced.test.ts +554 -298
  621. package/src/adapters/mysql/tools/json/__tests__/helpers.test.ts +150 -74
  622. package/src/adapters/mysql/tools/json/__tests__/validation.test.ts +106 -72
  623. package/src/adapters/mysql/tools/json/core.ts +364 -263
  624. package/src/adapters/mysql/tools/json/enhanced.ts +368 -229
  625. package/src/adapters/mysql/tools/json/helpers.ts +195 -113
  626. package/src/adapters/mysql/tools/json/index.ts +46 -46
  627. package/src/adapters/mysql/tools/partitioning.ts +242 -140
  628. package/src/adapters/mysql/tools/performance/__tests__/analysis.test.ts +439 -247
  629. package/src/adapters/mysql/tools/performance/__tests__/optimization.test.ts +401 -179
  630. package/src/adapters/mysql/tools/performance/analysis.ts +263 -213
  631. package/src/adapters/mysql/tools/performance/index.ts +33 -33
  632. package/src/adapters/mysql/tools/performance/optimization.ts +407 -190
  633. package/src/adapters/mysql/tools/proxysql.ts +462 -320
  634. package/src/adapters/mysql/tools/replication.ts +233 -180
  635. package/src/adapters/mysql/tools/roles.ts +429 -171
  636. package/src/adapters/mysql/tools/router.ts +410 -292
  637. package/src/adapters/mysql/tools/schema/__tests__/constraints.test.ts +157 -82
  638. package/src/adapters/mysql/tools/schema/__tests__/management.test.ts +226 -101
  639. package/src/adapters/mysql/tools/schema/__tests__/routines.test.ts +80 -35
  640. package/src/adapters/mysql/tools/schema/__tests__/scheduled_events.test.ts +59 -40
  641. package/src/adapters/mysql/tools/schema/__tests__/triggers.test.ts +65 -40
  642. package/src/adapters/mysql/tools/schema/__tests__/views.test.ts +146 -77
  643. package/src/adapters/mysql/tools/schema/constraints.ts +61 -42
  644. package/src/adapters/mysql/tools/schema/index.ts +26 -35
  645. package/src/adapters/mysql/tools/schema/management.ts +167 -94
  646. package/src/adapters/mysql/tools/schema/routines.ts +79 -48
  647. package/src/adapters/mysql/tools/schema/scheduled_events.ts +53 -32
  648. package/src/adapters/mysql/tools/schema/triggers.ts +51 -33
  649. package/src/adapters/mysql/tools/schema/views.ts +96 -53
  650. package/src/adapters/mysql/tools/security/__tests__/audit.test.ts +216 -158
  651. package/src/adapters/mysql/tools/security/__tests__/data-protection.test.ts +154 -98
  652. package/src/adapters/mysql/tools/security/__tests__/encryption.test.ts +174 -138
  653. package/src/adapters/mysql/tools/security/audit.ts +213 -193
  654. package/src/adapters/mysql/tools/security/data-protection.ts +336 -198
  655. package/src/adapters/mysql/tools/security/encryption.ts +233 -193
  656. package/src/adapters/mysql/tools/security/index.ts +26 -26
  657. package/src/adapters/mysql/tools/shell/__tests__/backup.test.ts +443 -283
  658. package/src/adapters/mysql/tools/shell/__tests__/common.test.ts +138 -131
  659. package/src/adapters/mysql/tools/shell/__tests__/data-transfer.test.ts +516 -353
  660. package/src/adapters/mysql/tools/shell/__tests__/info.test.ts +65 -63
  661. package/src/adapters/mysql/tools/shell/__tests__/restore.test.ts +233 -174
  662. package/src/adapters/mysql/tools/shell/__tests__/utilities.test.ts +161 -143
  663. package/src/adapters/mysql/tools/shell/backup.ts +280 -188
  664. package/src/adapters/mysql/tools/shell/common.ts +173 -155
  665. package/src/adapters/mysql/tools/shell/data-transfer.ts +286 -200
  666. package/src/adapters/mysql/tools/shell/index.ts +29 -29
  667. package/src/adapters/mysql/tools/shell/info.ts +35 -31
  668. package/src/adapters/mysql/tools/shell/restore.ts +176 -124
  669. package/src/adapters/mysql/tools/shell/utilities.ts +86 -45
  670. package/src/adapters/mysql/tools/spatial/__tests__/geometry.test.ts +129 -89
  671. package/src/adapters/mysql/tools/spatial/__tests__/operations.test.ts +255 -148
  672. package/src/adapters/mysql/tools/spatial/__tests__/queries.test.ts +340 -245
  673. package/src/adapters/mysql/tools/spatial/geometry.ts +120 -74
  674. package/src/adapters/mysql/tools/spatial/index.ts +33 -33
  675. package/src/adapters/mysql/tools/spatial/operations.ts +243 -171
  676. package/src/adapters/mysql/tools/spatial/queries.ts +221 -165
  677. package/src/adapters/mysql/tools/spatial/setup.ts +157 -73
  678. package/src/adapters/mysql/tools/stats/__tests__/comparative.test.ts +188 -130
  679. package/src/adapters/mysql/tools/stats/comparative.ts +261 -187
  680. package/src/adapters/mysql/tools/stats/descriptive.ts +414 -322
  681. package/src/adapters/mysql/tools/stats/index.ts +23 -23
  682. package/src/adapters/mysql/tools/sysschema/__tests__/activity.test.ts +99 -71
  683. package/src/adapters/mysql/tools/sysschema/__tests__/io_summary_fix.test.ts +21 -18
  684. package/src/adapters/mysql/tools/sysschema/__tests__/performance.test.ts +149 -108
  685. package/src/adapters/mysql/tools/sysschema/__tests__/resources.test.ts +222 -104
  686. package/src/adapters/mysql/tools/sysschema/activity.ts +72 -64
  687. package/src/adapters/mysql/tools/sysschema/index.ts +24 -24
  688. package/src/adapters/mysql/tools/sysschema/performance.ts +140 -115
  689. package/src/adapters/mysql/tools/sysschema/resources.ts +135 -99
  690. package/src/adapters/mysql/tools/text/__tests__/fulltext.test.ts +526 -145
  691. package/src/adapters/mysql/tools/text/__tests__/processing.test.ts +452 -193
  692. package/src/adapters/mysql/tools/text/fulltext.ts +319 -123
  693. package/src/adapters/mysql/tools/text/index.ts +32 -30
  694. package/src/adapters/mysql/tools/text/processing.ts +310 -212
  695. package/src/adapters/mysql/tools/transactions.ts +284 -197
  696. package/src/adapters/mysql/types/__tests__/shell-types.test.ts +204 -202
  697. package/src/adapters/mysql/types/proxysql-types.ts +142 -109
  698. package/src/adapters/mysql/types/router-types.ts +36 -36
  699. package/src/adapters/mysql/types/shell-types.ts +280 -94
  700. package/src/adapters/mysql/types.ts +288 -131
  701. package/src/auth/AuthorizationServerDiscovery.ts +127 -113
  702. package/src/auth/OAuthResourceServer.ts +67 -62
  703. package/src/auth/TokenValidator.ts +136 -119
  704. package/src/auth/__tests__/AuthorizationServerDiscovery.test.ts +295 -274
  705. package/src/auth/__tests__/OAuthResourceServer.test.ts +180 -169
  706. package/src/auth/__tests__/TokenValidator.test.ts +297 -285
  707. package/src/auth/__tests__/errors.test.ts +180 -175
  708. package/src/auth/__tests__/middleware.test.ts +281 -247
  709. package/src/auth/__tests__/scopes.test.ts +136 -134
  710. package/src/auth/errors.ts +56 -56
  711. package/src/auth/index.ts +23 -17
  712. package/src/auth/middleware.ts +161 -139
  713. package/src/auth/scopes.ts +133 -107
  714. package/src/auth/types.ts +155 -155
  715. package/src/cli/__tests__/args.test.ts +241 -216
  716. package/src/cli/__tests__/main.test.ts +191 -158
  717. package/src/cli/args.ts +271 -258
  718. package/src/cli.ts +150 -127
  719. package/src/constants/ServerInstructions.ts +271 -70
  720. package/src/filtering/ToolConstants.ts +287 -266
  721. package/src/filtering/ToolFilter.ts +239 -220
  722. package/src/filtering/__tests__/ToolFilter.test.ts +442 -396
  723. package/src/index.ts +62 -57
  724. package/src/logging/McpLogging.ts +128 -119
  725. package/src/logging/__tests__/McpLogging.test.ts +223 -223
  726. package/src/logging/index.ts +2 -2
  727. package/src/pool/ConnectionPool.ts +260 -246
  728. package/src/pool/__tests__/ConnectionPool.test.ts +452 -418
  729. package/src/progress/ProgressReporter.ts +123 -123
  730. package/src/progress/__tests__/ProgressReporter.test.ts +235 -229
  731. package/src/progress/index.ts +6 -2
  732. package/src/server/McpServer.ts +305 -285
  733. package/src/server/__tests__/McpServer.test.ts +333 -291
  734. package/src/transports/__tests__/http.test.ts +658 -527
  735. package/src/transports/http.ts +237 -203
  736. package/src/transports/index.ts +6 -2
  737. package/src/types/__tests__/types.test.ts +197 -193
  738. package/src/types/index.ts +49 -37
  739. package/src/types/modules/database.ts +65 -63
  740. package/src/types/modules/errors.ts +41 -37
  741. package/src/types/modules/oauth.ts +46 -46
  742. package/src/types/modules/query.ts +75 -75
  743. package/src/types/modules/server.ts +18 -18
  744. package/src/types/modules/tools.ts +181 -178
  745. package/src/utils/__tests__/logger.test.ts +424 -414
  746. package/src/utils/__tests__/validators.test.ts +250 -165
  747. package/src/utils/logger.ts +343 -330
  748. package/src/utils/promptGenerator.ts +58 -47
  749. package/src/utils/validators.ts +217 -91
  750. package/tsconfig.json +41 -50
  751. package/vitest.config.ts +23 -23
@@ -1,92 +1,132 @@
1
-
2
- import { describe, it, expect, vi, beforeEach } from 'vitest';
3
- import { createMockMySQLAdapter, createMockQueryResult, createMockRequestContext } from '../../../../__tests__/mocks/index.js';
4
- import { createHealthResource } from '../health.js';
5
- import type { MySQLAdapter } from '../../MySQLAdapter.js';
6
-
7
- describe('Health Resource', () => {
8
- let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
9
- let mockContext: ReturnType<typeof createMockRequestContext>;
10
-
11
- beforeEach(() => {
12
- vi.clearAllMocks();
13
- mockAdapter = createMockMySQLAdapter();
14
- mockContext = createMockRequestContext();
15
- });
16
-
17
- it('should return default values when status variables are missing', async () => {
18
- // Empty status result
19
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([]));
20
- // Missing max_connections (default 151)
21
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([]));
22
-
23
- const resource = createHealthResource(mockAdapter as unknown as MySQLAdapter);
24
- const result = await resource.handler('mysql://health', mockContext) as any;
25
-
26
- expect(result.status).toBe('healthy');
27
- expect(result.uptime_seconds).toBe(0);
28
- expect(result.connections.current).toBe(0);
29
- expect(result.connections.max_allowed).toBe(151); // Default
30
- expect(result.connections.usage_percent).toBe(0);
31
- });
32
-
33
- it('should handle zero buffer pool requests (avoid div by zero)', async () => {
34
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
35
- { Variable_name: 'Innodb_buffer_pool_read_requests', Value: '0' },
36
- { Variable_name: 'Innodb_buffer_pool_reads', Value: '0' }
37
- ]));
38
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([{ Value: '100' }]));
39
-
40
- const resource = createHealthResource(mockAdapter as unknown as MySQLAdapter);
41
- const result = await resource.handler('mysql://health', mockContext) as any;
42
-
43
- expect(result.performance.buffer_pool_hit_ratio).toBe(100);
44
- });
45
-
46
- it('should handle zero table lock waits (avoid div by zero)', async () => {
47
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
48
- { Variable_name: 'Table_locks_waited', Value: '0' },
49
- { Variable_name: 'Table_locks_immediate', Value: '0' }
50
- ]));
51
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([{ Value: '100' }]));
52
-
53
- const resource = createHealthResource(mockAdapter as unknown as MySQLAdapter);
54
- const result = await resource.handler('mysql://health', mockContext) as any;
55
-
56
- expect(result.performance.table_lock_contention_percent).toBe(0);
57
- });
58
-
59
- it('should calculate metrics correctly with values', async () => {
60
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
61
- { Variable_name: 'Uptime', Value: '3600' },
62
- { Variable_name: 'Threads_connected', Value: '50' },
63
- { Variable_name: 'Innodb_buffer_pool_read_requests', Value: '100' },
64
- { Variable_name: 'Innodb_buffer_pool_reads', Value: '10' }, // 90% hit ratio
65
- { Variable_name: 'Table_locks_waited', Value: '20' },
66
- { Variable_name: 'Table_locks_immediate', Value: '80' } // 20% contention
67
- ]));
68
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([{ Value: '100' }])); // Max connections
69
-
70
- const resource = createHealthResource(mockAdapter as unknown as MySQLAdapter);
71
- const result = await resource.handler('mysql://health', mockContext) as any;
72
-
73
- expect(result.uptime_seconds).toBe(3600);
74
- expect(result.connections.usage_percent).toBe(50); // 50/100
75
- expect(result.performance.buffer_pool_hit_ratio).toBe(90);
76
- expect(result.performance.table_lock_contention_percent).toBe(20);
77
- });
78
-
79
- it('should include pool stats if available', async () => {
80
- mockAdapter.executeQuery.mockResolvedValue(createMockQueryResult([]));
81
-
82
- const mockPool = {
83
- getStats: vi.fn().mockReturnValue({ total: 10, active: 5, idle: 5 })
84
- };
85
- (mockAdapter.getPool as any).mockReturnValue(mockPool);
86
-
87
- const resource = createHealthResource(mockAdapter as unknown as MySQLAdapter);
88
- const result = await resource.handler('mysql://health', mockContext) as any;
89
-
90
- expect(result.pool).toEqual({ total: 10, active: 5, idle: 5 });
91
- });
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import {
3
+ createMockMySQLAdapter,
4
+ createMockQueryResult,
5
+ createMockRequestContext,
6
+ } from "../../../../__tests__/mocks/index.js";
7
+ import { createHealthResource } from "../health.js";
8
+ import type { MySQLAdapter } from "../../MySQLAdapter.js";
9
+
10
+ describe("Health Resource", () => {
11
+ let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
12
+ let mockContext: ReturnType<typeof createMockRequestContext>;
13
+
14
+ beforeEach(() => {
15
+ vi.clearAllMocks();
16
+ mockAdapter = createMockMySQLAdapter();
17
+ mockContext = createMockRequestContext();
18
+ });
19
+
20
+ it("should return default values when status variables are missing", async () => {
21
+ // Empty status result
22
+ mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([]));
23
+ // Missing max_connections (default 151)
24
+ mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([]));
25
+
26
+ const resource = createHealthResource(
27
+ mockAdapter as unknown as MySQLAdapter,
28
+ );
29
+ const result = (await resource.handler(
30
+ "mysql://health",
31
+ mockContext,
32
+ )) as any;
33
+
34
+ expect(result.status).toBe("healthy");
35
+ expect(result.uptime_seconds).toBe(0);
36
+ expect(result.connections.current).toBe(0);
37
+ expect(result.connections.max_allowed).toBe(151); // Default
38
+ expect(result.connections.usage_percent).toBe(0);
39
+ });
40
+
41
+ it("should handle zero buffer pool requests (avoid div by zero)", async () => {
42
+ mockAdapter.executeQuery.mockResolvedValueOnce(
43
+ createMockQueryResult([
44
+ { Variable_name: "Innodb_buffer_pool_read_requests", Value: "0" },
45
+ { Variable_name: "Innodb_buffer_pool_reads", Value: "0" },
46
+ ]),
47
+ );
48
+ mockAdapter.executeQuery.mockResolvedValueOnce(
49
+ createMockQueryResult([{ Value: "100" }]),
50
+ );
51
+
52
+ const resource = createHealthResource(
53
+ mockAdapter as unknown as MySQLAdapter,
54
+ );
55
+ const result = (await resource.handler(
56
+ "mysql://health",
57
+ mockContext,
58
+ )) as any;
59
+
60
+ expect(result.performance.buffer_pool_hit_ratio).toBe(100);
61
+ });
62
+
63
+ it("should handle zero table lock waits (avoid div by zero)", async () => {
64
+ mockAdapter.executeQuery.mockResolvedValueOnce(
65
+ createMockQueryResult([
66
+ { Variable_name: "Table_locks_waited", Value: "0" },
67
+ { Variable_name: "Table_locks_immediate", Value: "0" },
68
+ ]),
69
+ );
70
+ mockAdapter.executeQuery.mockResolvedValueOnce(
71
+ createMockQueryResult([{ Value: "100" }]),
72
+ );
73
+
74
+ const resource = createHealthResource(
75
+ mockAdapter as unknown as MySQLAdapter,
76
+ );
77
+ const result = (await resource.handler(
78
+ "mysql://health",
79
+ mockContext,
80
+ )) as any;
81
+
82
+ expect(result.performance.table_lock_contention_percent).toBe(0);
83
+ });
84
+
85
+ it("should calculate metrics correctly with values", async () => {
86
+ mockAdapter.executeQuery.mockResolvedValueOnce(
87
+ createMockQueryResult([
88
+ { Variable_name: "Uptime", Value: "3600" },
89
+ { Variable_name: "Threads_connected", Value: "50" },
90
+ { Variable_name: "Innodb_buffer_pool_read_requests", Value: "100" },
91
+ { Variable_name: "Innodb_buffer_pool_reads", Value: "10" }, // 90% hit ratio
92
+ { Variable_name: "Table_locks_waited", Value: "20" },
93
+ { Variable_name: "Table_locks_immediate", Value: "80" }, // 20% contention
94
+ ]),
95
+ );
96
+ mockAdapter.executeQuery.mockResolvedValueOnce(
97
+ createMockQueryResult([{ Value: "100" }]),
98
+ ); // Max connections
99
+
100
+ const resource = createHealthResource(
101
+ mockAdapter as unknown as MySQLAdapter,
102
+ );
103
+ const result = (await resource.handler(
104
+ "mysql://health",
105
+ mockContext,
106
+ )) as any;
107
+
108
+ expect(result.uptime_seconds).toBe(3600);
109
+ expect(result.connections.usage_percent).toBe(50); // 50/100
110
+ expect(result.performance.buffer_pool_hit_ratio).toBe(90);
111
+ expect(result.performance.table_lock_contention_percent).toBe(20);
112
+ });
113
+
114
+ it("should include pool stats if available", async () => {
115
+ mockAdapter.executeQuery.mockResolvedValue(createMockQueryResult([]));
116
+
117
+ const mockPool = {
118
+ getStats: vi.fn().mockReturnValue({ total: 10, active: 5, idle: 5 }),
119
+ };
120
+ (mockAdapter.getPool as any).mockReturnValue(mockPool);
121
+
122
+ const resource = createHealthResource(
123
+ mockAdapter as unknown as MySQLAdapter,
124
+ );
125
+ const result = (await resource.handler(
126
+ "mysql://health",
127
+ mockContext,
128
+ )) as any;
129
+
130
+ expect(result.pool).toEqual({ total: 10, active: 5, idle: 5 });
131
+ });
92
132
  });
@@ -1,106 +1,129 @@
1
-
2
- import { describe, it, expect, vi, beforeEach } from 'vitest';
3
- import { createIndexesResource } from '../indexes.js';
4
- import type { MySQLAdapter } from '../../MySQLAdapter.js';
5
- import { createMockMySQLAdapter, createMockRequestContext, createMockQueryResult } from '../../../../__tests__/mocks/index.js';
6
-
7
- describe('createIndexesResource', () => {
8
- let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
9
- let mockContext: ReturnType<typeof createMockRequestContext>;
10
- let resource: ReturnType<typeof createIndexesResource>;
11
-
12
- beforeEach(() => {
13
- vi.clearAllMocks();
14
- mockAdapter = createMockMySQLAdapter();
15
- mockContext = createMockRequestContext();
16
- resource = createIndexesResource(mockAdapter as unknown as MySQLAdapter);
17
- });
18
-
19
- it('should return error if no database selected', async () => {
20
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([])); // DB select returns empty/null
21
-
22
- const result = await resource.handler(resource.uri, mockContext);
23
-
24
- expect(result).toEqual({ error: 'No database selected' });
25
- });
26
-
27
- it('should return index stats, unused, and duplicates when all queries succeed', async () => {
28
- // Mock Database select
29
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([{ db: 'test_db' }]));
30
-
31
- // Mock Index Stats
32
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
33
- { table_name: 'users', index_name: 'PRIMARY', non_unique: 0 }
34
- ]));
35
-
36
- // Mock Unused Indexes
37
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
38
- { schema_name: 'test_db', table_name: 'users', index_name: 'idx_old' }
39
- ]));
40
-
41
- // Mock Duplicate Indexes
42
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
43
- { table_name: 'users', redundant_index: 'idx_dup', dominant_index: 'PRIMARY' }
44
- ]));
45
-
46
- const result = await resource.handler(resource.uri, mockContext);
47
-
48
- expect(result).toEqual({
49
- database: 'test_db',
50
- total_indexes: 1,
51
- indexes: expect.any(Array),
52
- unused_indexes: expect.any(Array),
53
- potential_duplicates: expect.any(Array)
54
- });
55
- expect((result as any).indexes).toHaveLength(1);
56
- expect((result as any).unused_indexes).toHaveLength(1);
57
- expect((result as any).potential_duplicates).toHaveLength(1);
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { createIndexesResource } from "../indexes.js";
3
+ import type { MySQLAdapter } from "../../MySQLAdapter.js";
4
+ import {
5
+ createMockMySQLAdapter,
6
+ createMockRequestContext,
7
+ createMockQueryResult,
8
+ } from "../../../../__tests__/mocks/index.js";
9
+
10
+ describe("createIndexesResource", () => {
11
+ let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
12
+ let mockContext: ReturnType<typeof createMockRequestContext>;
13
+ let resource: ReturnType<typeof createIndexesResource>;
14
+
15
+ beforeEach(() => {
16
+ vi.clearAllMocks();
17
+ mockAdapter = createMockMySQLAdapter();
18
+ mockContext = createMockRequestContext();
19
+ resource = createIndexesResource(mockAdapter as unknown as MySQLAdapter);
20
+ });
21
+
22
+ it("should return error if no database selected", async () => {
23
+ mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([])); // DB select returns empty/null
24
+
25
+ const result = await resource.handler(resource.uri, mockContext);
26
+
27
+ expect(result).toEqual({ error: "No database selected" });
28
+ });
29
+
30
+ it("should return index stats, unused, and duplicates when all queries succeed", async () => {
31
+ // Mock Database select
32
+ mockAdapter.executeQuery.mockResolvedValueOnce(
33
+ createMockQueryResult([{ db: "test_db" }]),
34
+ );
35
+
36
+ // Mock Index Stats
37
+ mockAdapter.executeQuery.mockResolvedValueOnce(
38
+ createMockQueryResult([
39
+ { table_name: "users", index_name: "PRIMARY", non_unique: 0 },
40
+ ]),
41
+ );
42
+
43
+ // Mock Unused Indexes
44
+ mockAdapter.executeQuery.mockResolvedValueOnce(
45
+ createMockQueryResult([
46
+ { schema_name: "test_db", table_name: "users", index_name: "idx_old" },
47
+ ]),
48
+ );
49
+
50
+ // Mock Duplicate Indexes
51
+ mockAdapter.executeQuery.mockResolvedValueOnce(
52
+ createMockQueryResult([
53
+ {
54
+ table_name: "users",
55
+ redundant_index: "idx_dup",
56
+ dominant_index: "PRIMARY",
57
+ },
58
+ ]),
59
+ );
60
+
61
+ const result = await resource.handler(resource.uri, mockContext);
62
+
63
+ expect(result).toEqual({
64
+ database: "test_db",
65
+ total_indexes: 1,
66
+ indexes: expect.any(Array),
67
+ unused_indexes: expect.any(Array),
68
+ potential_duplicates: expect.any(Array),
58
69
  });
59
-
60
- it('should handle failures in optional queries (unused/duplicates) gracefully', async () => {
61
- // Mock Database select
62
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([{ db: 'test_db' }]));
63
-
64
- // Mock Index Stats
65
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([]));
66
-
67
- // Mock Unused Indexes FAILURE
68
- mockAdapter.executeQuery.mockRejectedValueOnce(new Error('Performance Schema error'));
69
-
70
- // Mock Duplicate Indexes FAILURE
71
- mockAdapter.executeQuery.mockRejectedValueOnce(new Error('Info Schema error'));
72
-
73
- const result = await resource.handler(resource.uri, mockContext);
74
-
75
- expect(result).toEqual({
76
- database: 'test_db',
77
- total_indexes: 0,
78
- indexes: [],
79
- unused_indexes: [], // Should default to empty array on error
80
- potential_duplicates: [] // Should default to empty array on error
81
- });
70
+ expect((result as any).indexes).toHaveLength(1);
71
+ expect((result as any).unused_indexes).toHaveLength(1);
72
+ expect((result as any).potential_duplicates).toHaveLength(1);
73
+ });
74
+
75
+ it("should handle failures in optional queries (unused/duplicates) gracefully", async () => {
76
+ // Mock Database select
77
+ mockAdapter.executeQuery.mockResolvedValueOnce(
78
+ createMockQueryResult([{ db: "test_db" }]),
79
+ );
80
+
81
+ // Mock Index Stats
82
+ mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([]));
83
+
84
+ // Mock Unused Indexes FAILURE
85
+ mockAdapter.executeQuery.mockRejectedValueOnce(
86
+ new Error("Performance Schema error"),
87
+ );
88
+
89
+ // Mock Duplicate Indexes FAILURE
90
+ mockAdapter.executeQuery.mockRejectedValueOnce(
91
+ new Error("Info Schema error"),
92
+ );
93
+
94
+ const result = await resource.handler(resource.uri, mockContext);
95
+
96
+ expect(result).toEqual({
97
+ database: "test_db",
98
+ total_indexes: 0,
99
+ indexes: [],
100
+ unused_indexes: [], // Should default to empty array on error
101
+ potential_duplicates: [], // Should default to empty array on error
82
102
  });
83
- it('should handle undefined rows gracefully', async () => {
84
- // Mock Database select with undefined rows
85
- mockAdapter.executeQuery.mockResolvedValueOnce({ rows: undefined } as any);
86
-
87
- // First attempt with undefined rows for database selection
88
- const result1 = await resource.handler(resource.uri, mockContext);
89
- expect(result1).toEqual({ error: 'No database selected' });
90
-
91
- // Now test undefined rows for other queries
92
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([{ db: 'test_db' }]));
93
- mockAdapter.executeQuery.mockResolvedValueOnce({ rows: undefined } as any); // Indexes
94
- mockAdapter.executeQuery.mockResolvedValueOnce({ rows: undefined } as any); // Unused
95
- mockAdapter.executeQuery.mockResolvedValueOnce({ rows: undefined } as any); // Duplicates
96
-
97
- const result2 = await resource.handler(resource.uri, mockContext);
98
- expect(result2).toEqual({
99
- database: 'test_db',
100
- total_indexes: 0,
101
- indexes: [],
102
- unused_indexes: [],
103
- potential_duplicates: []
104
- });
103
+ });
104
+ it("should handle undefined rows gracefully", async () => {
105
+ // Mock Database select with undefined rows
106
+ mockAdapter.executeQuery.mockResolvedValueOnce({ rows: undefined } as any);
107
+
108
+ // First attempt with undefined rows for database selection
109
+ const result1 = await resource.handler(resource.uri, mockContext);
110
+ expect(result1).toEqual({ error: "No database selected" });
111
+
112
+ // Now test undefined rows for other queries
113
+ mockAdapter.executeQuery.mockResolvedValueOnce(
114
+ createMockQueryResult([{ db: "test_db" }]),
115
+ );
116
+ mockAdapter.executeQuery.mockResolvedValueOnce({ rows: undefined } as any); // Indexes
117
+ mockAdapter.executeQuery.mockResolvedValueOnce({ rows: undefined } as any); // Unused
118
+ mockAdapter.executeQuery.mockResolvedValueOnce({ rows: undefined } as any); // Duplicates
119
+
120
+ const result2 = await resource.handler(resource.uri, mockContext);
121
+ expect(result2).toEqual({
122
+ database: "test_db",
123
+ total_indexes: 0,
124
+ indexes: [],
125
+ unused_indexes: [],
126
+ potential_duplicates: [],
105
127
  });
128
+ });
106
129
  });
@@ -1,74 +1,98 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { createInnodbResource } from "../innodb.js";
3
+ import type { MySQLAdapter } from "../../MySQLAdapter.js";
4
+ import {
5
+ createMockMySQLAdapter,
6
+ createMockRequestContext,
7
+ createMockQueryResult,
8
+ } from "../../../../__tests__/mocks/index.js";
1
9
 
2
- import { describe, it, expect, vi, beforeEach } from 'vitest';
3
- import { createInnodbResource } from '../innodb.js';
4
- import type { MySQLAdapter } from '../../MySQLAdapter.js';
5
- import { createMockMySQLAdapter, createMockRequestContext, createMockQueryResult } from '../../../../__tests__/mocks/index.js';
10
+ describe("InnoDB Resource", () => {
11
+ let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
12
+ let mockContext: ReturnType<typeof createMockRequestContext>;
6
13
 
7
- describe('InnoDB Resource', () => {
8
- let mockAdapter: ReturnType<typeof createMockMySQLAdapter>;
9
- let mockContext: ReturnType<typeof createMockRequestContext>;
14
+ beforeEach(() => {
15
+ vi.clearAllMocks();
16
+ mockAdapter = createMockMySQLAdapter();
17
+ mockContext = createMockRequestContext();
18
+ });
10
19
 
11
- beforeEach(() => {
12
- vi.clearAllMocks();
13
- mockAdapter = createMockMySQLAdapter();
14
- mockContext = createMockRequestContext();
15
- });
20
+ it("should return buffer pool statistics", async () => {
21
+ // Mock buffer pool status
22
+ mockAdapter.executeQuery.mockResolvedValueOnce(
23
+ createMockQueryResult([
24
+ { Variable_name: "Innodb_buffer_pool_read_requests", Value: "10000" },
25
+ { Variable_name: "Innodb_buffer_pool_reads", Value: "100" },
26
+ { Variable_name: "Innodb_buffer_pool_pages_total", Value: "8192" },
27
+ { Variable_name: "Innodb_buffer_pool_pages_free", Value: "1000" },
28
+ { Variable_name: "Innodb_buffer_pool_pages_data", Value: "7000" },
29
+ { Variable_name: "Innodb_buffer_pool_pages_dirty", Value: "50" },
30
+ { Variable_name: "Innodb_buffer_pool_write_requests", Value: "5000" },
31
+ ]),
32
+ );
33
+ // Mock config
34
+ mockAdapter.executeQuery.mockResolvedValueOnce(
35
+ createMockQueryResult([
36
+ { Variable_name: "innodb_buffer_pool_size", Value: "134217728" },
37
+ { Variable_name: "innodb_buffer_pool_instances", Value: "1" },
38
+ ]),
39
+ );
40
+ // Mock row operations
41
+ mockAdapter.executeQuery.mockResolvedValueOnce(
42
+ createMockQueryResult([
43
+ { Variable_name: "Innodb_rows_read", Value: "50000" },
44
+ { Variable_name: "Innodb_rows_inserted", Value: "1000" },
45
+ ]),
46
+ );
16
47
 
17
- it('should return buffer pool statistics', async () => {
18
- // Mock buffer pool status
19
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
20
- { Variable_name: 'Innodb_buffer_pool_read_requests', Value: '10000' },
21
- { Variable_name: 'Innodb_buffer_pool_reads', Value: '100' },
22
- { Variable_name: 'Innodb_buffer_pool_pages_total', Value: '8192' },
23
- { Variable_name: 'Innodb_buffer_pool_pages_free', Value: '1000' },
24
- { Variable_name: 'Innodb_buffer_pool_pages_data', Value: '7000' },
25
- { Variable_name: 'Innodb_buffer_pool_pages_dirty', Value: '50' },
26
- { Variable_name: 'Innodb_buffer_pool_write_requests', Value: '5000' }
27
- ]));
28
- // Mock config
29
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
30
- { Variable_name: 'innodb_buffer_pool_size', Value: '134217728' },
31
- { Variable_name: 'innodb_buffer_pool_instances', Value: '1' }
32
- ]));
33
- // Mock row operations
34
- mockAdapter.executeQuery.mockResolvedValueOnce(createMockQueryResult([
35
- { Variable_name: 'Innodb_rows_read', Value: '50000' },
36
- { Variable_name: 'Innodb_rows_inserted', Value: '1000' }
37
- ]));
48
+ const resource = createInnodbResource(
49
+ mockAdapter as unknown as MySQLAdapter,
50
+ );
51
+ const result = (await resource.handler("mysql://innodb", mockContext)) as {
52
+ buffer_pool: { hit_ratio_percent: number };
53
+ };
38
54
 
39
- const resource = createInnodbResource(mockAdapter as unknown as MySQLAdapter);
40
- const result = await resource.handler('mysql://innodb', mockContext) as { buffer_pool: { hit_ratio_percent: number } };
55
+ expect(result).toHaveProperty("io");
56
+ });
41
57
 
58
+ it("should handle missing buffer pool stats (division by zero protection)", async () => {
59
+ // Mock empty stats
60
+ mockAdapter.executeQuery.mockResolvedValue(createMockQueryResult([]));
42
61
 
43
- expect(result).toHaveProperty('io');
44
- });
62
+ const resource = createInnodbResource(
63
+ mockAdapter as unknown as MySQLAdapter,
64
+ );
65
+ const result = (await resource.handler(
66
+ "mysql://innodb",
67
+ mockContext,
68
+ )) as any;
45
69
 
46
- it('should handle missing buffer pool stats (division by zero protection)', async () => {
47
- // Mock empty stats
48
- mockAdapter.executeQuery.mockResolvedValue(createMockQueryResult([]));
70
+ expect(result.buffer_pool.hit_ratio_percent).toBe(100); // Default when requests=0
71
+ expect(result.buffer_pool.pages.dirty_percent).toBe(0); // Default when total=0
72
+ expect(result.buffer_pool.size_bytes).toBe(0);
73
+ });
49
74
 
50
- const resource = createInnodbResource(mockAdapter as unknown as MySQLAdapter);
51
- const result = await resource.handler('mysql://innodb', mockContext) as any;
75
+ it("should parse configuration integers correctly", async () => {
76
+ mockAdapter.executeQuery
77
+ .mockResolvedValueOnce(createMockQueryResult([])) // buffer pool stats
78
+ .mockResolvedValueOnce(
79
+ createMockQueryResult([
80
+ // config
81
+ { Variable_name: "innodb_buffer_pool_size", Value: "1024" },
82
+ { Variable_name: "innodb_buffer_pool_instances", Value: "2" },
83
+ ]),
84
+ )
85
+ .mockResolvedValueOnce(createMockQueryResult([])); // row ops
52
86
 
53
- expect(result.buffer_pool.hit_ratio_percent).toBe(100); // Default when requests=0
54
- expect(result.buffer_pool.pages.dirty_percent).toBe(0); // Default when total=0
55
- expect(result.buffer_pool.size_bytes).toBe(0);
56
- });
87
+ const resource = createInnodbResource(
88
+ mockAdapter as unknown as MySQLAdapter,
89
+ );
90
+ const result = (await resource.handler(
91
+ "mysql://innodb",
92
+ mockContext,
93
+ )) as any;
57
94
 
58
- it('should parse configuration integers correctly', async () => {
59
- mockAdapter.executeQuery
60
- .mockResolvedValueOnce(createMockQueryResult([])) // buffer pool stats
61
- .mockResolvedValueOnce(createMockQueryResult([ // config
62
- { Variable_name: 'innodb_buffer_pool_size', Value: '1024' },
63
- { Variable_name: 'innodb_buffer_pool_instances', Value: '2' }
64
- ]))
65
- .mockResolvedValueOnce(createMockQueryResult([])); // row ops
66
-
67
- const resource = createInnodbResource(mockAdapter as unknown as MySQLAdapter);
68
- const result = await resource.handler('mysql://innodb', mockContext) as any;
69
-
70
- expect(result.buffer_pool.size_bytes).toBe(1024);
71
- expect(result.buffer_pool.instances).toBe(2);
72
- });
95
+ expect(result.buffer_pool.size_bytes).toBe(1024);
96
+ expect(result.buffer_pool.instances).toBe(2);
97
+ });
73
98
  });
74
-