spindb 0.37.2 → 0.38.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 (811) hide show
  1. package/dist/cli/bin.js +9 -0
  2. package/dist/cli/bin.js.map +1 -0
  3. package/dist/cli/commands/attach.js +102 -0
  4. package/dist/cli/commands/attach.js.map +1 -0
  5. package/dist/cli/commands/backup.js +197 -0
  6. package/dist/cli/commands/backup.js.map +1 -0
  7. package/dist/cli/commands/backups.js +190 -0
  8. package/dist/cli/commands/backups.js.map +1 -0
  9. package/dist/cli/commands/clone.js +119 -0
  10. package/dist/cli/commands/clone.js.map +1 -0
  11. package/dist/cli/commands/config.js +276 -0
  12. package/dist/cli/commands/config.js.map +1 -0
  13. package/dist/cli/commands/connect.js +559 -0
  14. package/dist/cli/commands/connect.js.map +1 -0
  15. package/dist/cli/commands/create.js +952 -0
  16. package/dist/cli/commands/create.js.map +1 -0
  17. package/dist/cli/commands/databases.js +485 -0
  18. package/dist/cli/commands/databases.js.map +1 -0
  19. package/dist/cli/commands/delete.js +106 -0
  20. package/dist/cli/commands/delete.js.map +1 -0
  21. package/dist/cli/commands/deps.js +238 -0
  22. package/dist/cli/commands/deps.js.map +1 -0
  23. package/dist/cli/commands/detach.js +81 -0
  24. package/dist/cli/commands/detach.js.map +1 -0
  25. package/dist/cli/commands/doctor.js +567 -0
  26. package/dist/cli/commands/doctor.js.map +1 -0
  27. package/dist/cli/commands/duckdb.js +207 -0
  28. package/dist/cli/commands/duckdb.js.map +1 -0
  29. package/dist/cli/commands/edit.js +524 -0
  30. package/dist/cli/commands/edit.js.map +1 -0
  31. package/dist/cli/commands/engines.js +1414 -0
  32. package/dist/cli/commands/engines.js.map +1 -0
  33. package/dist/cli/commands/export.js +383 -0
  34. package/dist/cli/commands/export.js.map +1 -0
  35. package/dist/cli/commands/info.js +270 -0
  36. package/dist/cli/commands/info.js.map +1 -0
  37. package/dist/cli/commands/list.js +215 -0
  38. package/dist/cli/commands/list.js.map +1 -0
  39. package/dist/cli/commands/logs.js +81 -0
  40. package/dist/cli/commands/logs.js.map +1 -0
  41. package/dist/cli/commands/menu/backup-handlers.js +1202 -0
  42. package/dist/cli/commands/menu/backup-handlers.js.map +1 -0
  43. package/dist/cli/commands/menu/container-handlers.js +1788 -0
  44. package/dist/cli/commands/menu/container-handlers.js.map +1 -0
  45. package/dist/cli/commands/menu/engine-handlers.js +235 -0
  46. package/dist/cli/commands/menu/engine-handlers.js.map +1 -0
  47. package/dist/cli/commands/menu/index.js +266 -0
  48. package/dist/cli/commands/menu/index.js.map +1 -0
  49. package/dist/cli/commands/menu/settings-handlers.js +320 -0
  50. package/dist/cli/commands/menu/settings-handlers.js.map +1 -0
  51. package/dist/cli/commands/menu/shared.js +13 -0
  52. package/dist/cli/commands/menu/shared.js.map +1 -0
  53. package/dist/cli/commands/menu/shell-handlers.js +1573 -0
  54. package/dist/cli/commands/menu/shell-handlers.js.map +1 -0
  55. package/dist/cli/commands/menu/sql-handlers.js +185 -0
  56. package/dist/cli/commands/menu/sql-handlers.js.map +1 -0
  57. package/dist/cli/commands/menu/update-handlers.js +322 -0
  58. package/dist/cli/commands/menu/update-handlers.js.map +1 -0
  59. package/dist/cli/commands/menu/validators.js +9 -0
  60. package/dist/cli/commands/menu/validators.js.map +1 -0
  61. package/dist/cli/commands/ports.js +166 -0
  62. package/dist/cli/commands/ports.js.map +1 -0
  63. package/dist/cli/commands/pull.js +166 -0
  64. package/dist/cli/commands/pull.js.map +1 -0
  65. package/dist/cli/commands/query.js +180 -0
  66. package/dist/cli/commands/query.js.map +1 -0
  67. package/dist/cli/commands/restore.js +428 -0
  68. package/dist/cli/commands/restore.js.map +1 -0
  69. package/dist/cli/commands/run.js +115 -0
  70. package/dist/cli/commands/run.js.map +1 -0
  71. package/dist/cli/commands/self-update.js +99 -0
  72. package/dist/cli/commands/self-update.js.map +1 -0
  73. package/dist/cli/commands/sqlite.js +207 -0
  74. package/dist/cli/commands/sqlite.js.map +1 -0
  75. package/dist/cli/commands/start.js +196 -0
  76. package/dist/cli/commands/start.js.map +1 -0
  77. package/dist/cli/commands/stop.js +182 -0
  78. package/dist/cli/commands/stop.js.map +1 -0
  79. package/dist/cli/commands/url.js +88 -0
  80. package/dist/cli/commands/url.js.map +1 -0
  81. package/dist/cli/commands/users.js +189 -0
  82. package/dist/cli/commands/users.js.map +1 -0
  83. package/dist/cli/commands/version.js +52 -0
  84. package/dist/cli/commands/version.js.map +1 -0
  85. package/dist/cli/commands/which.js +258 -0
  86. package/dist/cli/commands/which.js.map +1 -0
  87. package/dist/cli/constants.js +212 -0
  88. package/dist/cli/constants.js.map +1 -0
  89. package/dist/cli/helpers.js +1120 -0
  90. package/dist/cli/helpers.js.map +1 -0
  91. package/dist/cli/index.js +146 -0
  92. package/dist/cli/index.js.map +1 -0
  93. package/dist/cli/ui/prompts.js +1002 -0
  94. package/dist/cli/ui/prompts.js.map +1 -0
  95. package/dist/cli/ui/spinner.js +74 -0
  96. package/dist/cli/ui/spinner.js.map +1 -0
  97. package/dist/cli/ui/theme.js +99 -0
  98. package/dist/cli/ui/theme.js.map +1 -0
  99. package/dist/cli/utils/file-follower.js +79 -0
  100. package/dist/cli/utils/file-follower.js.map +1 -0
  101. package/dist/config/backup-formats.js +363 -0
  102. package/dist/config/backup-formats.js.map +1 -0
  103. package/dist/config/defaults.js +25 -0
  104. package/dist/config/defaults.js.map +1 -0
  105. package/dist/config/engine-defaults.js +303 -0
  106. package/dist/config/engine-defaults.js.map +1 -0
  107. package/dist/config/engines-registry.js +103 -0
  108. package/dist/config/engines-registry.js.map +1 -0
  109. package/dist/config/os-dependencies.js +767 -0
  110. package/dist/config/os-dependencies.js.map +1 -0
  111. package/dist/config/paths.js +156 -0
  112. package/dist/config/paths.js.map +1 -0
  113. package/dist/config/version.js +3 -0
  114. package/dist/config/version.js.map +1 -0
  115. package/dist/core/backup-restore.js +219 -0
  116. package/dist/core/backup-restore.js.map +1 -0
  117. package/dist/core/base-binary-manager.js +403 -0
  118. package/dist/core/base-binary-manager.js.map +1 -0
  119. package/dist/core/base-document-binary-manager.js +364 -0
  120. package/dist/core/base-document-binary-manager.js.map +1 -0
  121. package/dist/core/base-embedded-binary-manager.js +364 -0
  122. package/dist/core/base-embedded-binary-manager.js.map +1 -0
  123. package/dist/core/base-server-binary-manager.js +368 -0
  124. package/dist/core/base-server-binary-manager.js.map +1 -0
  125. package/dist/core/config-manager.js +495 -0
  126. package/dist/core/config-manager.js.map +1 -0
  127. package/dist/core/container-manager.js +609 -0
  128. package/dist/core/container-manager.js.map +1 -0
  129. package/dist/core/credential-generator.js +67 -0
  130. package/dist/core/credential-generator.js.map +1 -0
  131. package/dist/core/credential-manager.js +211 -0
  132. package/dist/core/credential-manager.js.map +1 -0
  133. package/dist/core/dblab-utils.js +105 -0
  134. package/dist/core/dblab-utils.js.map +1 -0
  135. package/dist/core/dependency-manager.js +359 -0
  136. package/dist/core/dependency-manager.js.map +1 -0
  137. package/dist/core/docker-exporter.js +1077 -0
  138. package/dist/core/docker-exporter.js.map +1 -0
  139. package/dist/core/error-handler.js +295 -0
  140. package/dist/core/error-handler.js.map +1 -0
  141. package/dist/core/fs-error-utils.js +74 -0
  142. package/dist/core/fs-error-utils.js.map +1 -0
  143. package/dist/core/homebrew-version-manager.js +280 -0
  144. package/dist/core/homebrew-version-manager.js.map +1 -0
  145. package/dist/core/hostdb-client.js +252 -0
  146. package/dist/core/hostdb-client.js.map +1 -0
  147. package/dist/core/hostdb-metadata.js +243 -0
  148. package/dist/core/hostdb-metadata.js.map +1 -0
  149. package/dist/core/hostdb-releases-factory.js +161 -0
  150. package/dist/core/hostdb-releases-factory.js.map +1 -0
  151. package/dist/core/library-env.js +88 -0
  152. package/dist/core/library-env.js.map +1 -0
  153. package/dist/core/pgweb-utils.js +53 -0
  154. package/dist/core/pgweb-utils.js.map +1 -0
  155. package/dist/core/platform-service.js +632 -0
  156. package/dist/core/platform-service.js.map +1 -0
  157. package/dist/core/port-manager.js +136 -0
  158. package/dist/core/port-manager.js.map +1 -0
  159. package/dist/core/process-manager.js +445 -0
  160. package/dist/core/process-manager.js.map +1 -0
  161. package/dist/core/pull-manager.js +418 -0
  162. package/dist/core/pull-manager.js.map +1 -0
  163. package/dist/core/query-parser.js +449 -0
  164. package/dist/core/query-parser.js.map +1 -0
  165. package/dist/core/spawn-utils.js +90 -0
  166. package/dist/core/spawn-utils.js.map +1 -0
  167. package/dist/core/start-with-retry.js +90 -0
  168. package/dist/core/start-with-retry.js.map +1 -0
  169. package/dist/core/test-cleanup.js +85 -0
  170. package/dist/core/test-cleanup.js.map +1 -0
  171. package/dist/core/tls-generator.js +84 -0
  172. package/dist/core/tls-generator.js.map +1 -0
  173. package/dist/core/transaction-manager.js +139 -0
  174. package/dist/core/transaction-manager.js.map +1 -0
  175. package/dist/core/update-manager.js +241 -0
  176. package/dist/core/update-manager.js.map +1 -0
  177. package/dist/core/version-migration.js +260 -0
  178. package/dist/core/version-migration.js.map +1 -0
  179. package/dist/core/version-utils.js +91 -0
  180. package/dist/core/version-utils.js.map +1 -0
  181. package/dist/engines/base-engine.js +179 -0
  182. package/dist/engines/base-engine.js.map +1 -0
  183. package/dist/engines/clickhouse/backup.js +289 -0
  184. package/dist/engines/clickhouse/backup.js.map +1 -0
  185. package/dist/engines/clickhouse/binary-manager.js +145 -0
  186. package/dist/engines/clickhouse/binary-manager.js.map +1 -0
  187. package/dist/engines/clickhouse/binary-urls.js +100 -0
  188. package/dist/engines/clickhouse/binary-urls.js.map +1 -0
  189. package/dist/engines/clickhouse/cli-utils.js +143 -0
  190. package/dist/engines/clickhouse/cli-utils.js.map +1 -0
  191. package/dist/engines/clickhouse/hostdb-releases.js +24 -0
  192. package/dist/engines/clickhouse/hostdb-releases.js.map +1 -0
  193. package/dist/engines/clickhouse/index.js +1077 -0
  194. package/dist/engines/clickhouse/index.js.map +1 -0
  195. package/dist/engines/clickhouse/restore.js +335 -0
  196. package/dist/engines/clickhouse/restore.js.map +1 -0
  197. package/dist/engines/clickhouse/version-maps.js +83 -0
  198. package/dist/engines/clickhouse/version-maps.js.map +1 -0
  199. package/dist/engines/clickhouse/version-validator.js +133 -0
  200. package/dist/engines/clickhouse/version-validator.js.map +1 -0
  201. package/dist/engines/cockroachdb/backup.js +261 -0
  202. package/dist/engines/cockroachdb/backup.js.map +1 -0
  203. package/dist/engines/cockroachdb/binary-manager.js +33 -0
  204. package/dist/engines/cockroachdb/binary-manager.js.map +1 -0
  205. package/dist/engines/cockroachdb/binary-urls.js +33 -0
  206. package/dist/engines/cockroachdb/binary-urls.js.map +1 -0
  207. package/dist/engines/cockroachdb/cli-utils.js +338 -0
  208. package/dist/engines/cockroachdb/cli-utils.js.map +1 -0
  209. package/dist/engines/cockroachdb/hostdb-releases.js +21 -0
  210. package/dist/engines/cockroachdb/hostdb-releases.js.map +1 -0
  211. package/dist/engines/cockroachdb/index.js +1016 -0
  212. package/dist/engines/cockroachdb/index.js.map +1 -0
  213. package/dist/engines/cockroachdb/restore.js +323 -0
  214. package/dist/engines/cockroachdb/restore.js.map +1 -0
  215. package/dist/engines/cockroachdb/version-maps.js +37 -0
  216. package/dist/engines/cockroachdb/version-maps.js.map +1 -0
  217. package/dist/engines/couchdb/api-client.js +64 -0
  218. package/dist/engines/couchdb/api-client.js.map +1 -0
  219. package/dist/engines/couchdb/backup.js +90 -0
  220. package/dist/engines/couchdb/backup.js.map +1 -0
  221. package/dist/engines/couchdb/binary-manager.js +62 -0
  222. package/dist/engines/couchdb/binary-manager.js.map +1 -0
  223. package/dist/engines/couchdb/binary-urls.js +92 -0
  224. package/dist/engines/couchdb/binary-urls.js.map +1 -0
  225. package/dist/engines/couchdb/hostdb-releases.js +21 -0
  226. package/dist/engines/couchdb/hostdb-releases.js.map +1 -0
  227. package/dist/engines/couchdb/index.js +1043 -0
  228. package/dist/engines/couchdb/index.js.map +1 -0
  229. package/dist/engines/couchdb/restore.js +198 -0
  230. package/dist/engines/couchdb/restore.js.map +1 -0
  231. package/dist/engines/couchdb/version-maps.js +67 -0
  232. package/dist/engines/couchdb/version-maps.js.map +1 -0
  233. package/dist/engines/couchdb/version-validator.js +88 -0
  234. package/dist/engines/couchdb/version-validator.js.map +1 -0
  235. package/dist/engines/duckdb/binary-manager.js +33 -0
  236. package/dist/engines/duckdb/binary-manager.js.map +1 -0
  237. package/{engines/duckdb/binary-urls.ts → dist/engines/duckdb/binary-urls.js} +11 -16
  238. package/dist/engines/duckdb/binary-urls.js.map +1 -0
  239. package/dist/engines/duckdb/hostdb-releases.js +21 -0
  240. package/dist/engines/duckdb/hostdb-releases.js.map +1 -0
  241. package/dist/engines/duckdb/index.js +594 -0
  242. package/dist/engines/duckdb/index.js.map +1 -0
  243. package/dist/engines/duckdb/registry.js +265 -0
  244. package/dist/engines/duckdb/registry.js.map +1 -0
  245. package/dist/engines/duckdb/scanner.js +12 -0
  246. package/dist/engines/duckdb/scanner.js.map +1 -0
  247. package/dist/engines/duckdb/version-maps.js +67 -0
  248. package/dist/engines/duckdb/version-maps.js.map +1 -0
  249. package/dist/engines/duckdb/version-validator.js +62 -0
  250. package/dist/engines/duckdb/version-validator.js.map +1 -0
  251. package/dist/engines/ferretdb/backup.js +170 -0
  252. package/dist/engines/ferretdb/backup.js.map +1 -0
  253. package/dist/engines/ferretdb/binary-manager.js +765 -0
  254. package/dist/engines/ferretdb/binary-manager.js.map +1 -0
  255. package/dist/engines/ferretdb/binary-urls.js +135 -0
  256. package/dist/engines/ferretdb/binary-urls.js.map +1 -0
  257. package/dist/engines/ferretdb/index.js +1517 -0
  258. package/dist/engines/ferretdb/index.js.map +1 -0
  259. package/dist/engines/ferretdb/restore.js +310 -0
  260. package/dist/engines/ferretdb/restore.js.map +1 -0
  261. package/{engines/ferretdb/version-maps.ts → dist/engines/ferretdb/version-maps.js} +62 -79
  262. package/dist/engines/ferretdb/version-maps.js.map +1 -0
  263. package/dist/engines/file-based-utils.js +184 -0
  264. package/dist/engines/file-based-utils.js.map +1 -0
  265. package/dist/engines/index.js +124 -0
  266. package/dist/engines/index.js.map +1 -0
  267. package/dist/engines/influxdb/api-client.js +54 -0
  268. package/dist/engines/influxdb/api-client.js.map +1 -0
  269. package/dist/engines/influxdb/backup.js +119 -0
  270. package/dist/engines/influxdb/backup.js.map +1 -0
  271. package/dist/engines/influxdb/binary-manager.js +87 -0
  272. package/dist/engines/influxdb/binary-manager.js.map +1 -0
  273. package/dist/engines/influxdb/binary-urls.js +56 -0
  274. package/dist/engines/influxdb/binary-urls.js.map +1 -0
  275. package/dist/engines/influxdb/hostdb-releases.js +21 -0
  276. package/dist/engines/influxdb/hostdb-releases.js.map +1 -0
  277. package/dist/engines/influxdb/index.js +962 -0
  278. package/dist/engines/influxdb/index.js.map +1 -0
  279. package/dist/engines/influxdb/restore.js +329 -0
  280. package/dist/engines/influxdb/restore.js.map +1 -0
  281. package/dist/engines/influxdb/version-maps.js +64 -0
  282. package/dist/engines/influxdb/version-maps.js.map +1 -0
  283. package/dist/engines/influxdb/version-validator.js +109 -0
  284. package/dist/engines/influxdb/version-validator.js.map +1 -0
  285. package/dist/engines/mariadb/backup.js +178 -0
  286. package/dist/engines/mariadb/backup.js.map +1 -0
  287. package/dist/engines/mariadb/binary-manager.js +33 -0
  288. package/dist/engines/mariadb/binary-manager.js.map +1 -0
  289. package/{engines/mariadb/binary-urls.ts → dist/engines/mariadb/binary-urls.js} +38 -55
  290. package/dist/engines/mariadb/binary-urls.js.map +1 -0
  291. package/dist/engines/mariadb/hostdb-releases.js +21 -0
  292. package/dist/engines/mariadb/hostdb-releases.js.map +1 -0
  293. package/dist/engines/mariadb/index.js +1011 -0
  294. package/dist/engines/mariadb/index.js.map +1 -0
  295. package/dist/engines/mariadb/restore.js +322 -0
  296. package/dist/engines/mariadb/restore.js.map +1 -0
  297. package/dist/engines/mariadb/version-maps.js +63 -0
  298. package/dist/engines/mariadb/version-maps.js.map +1 -0
  299. package/dist/engines/mariadb/version-validator.js +143 -0
  300. package/dist/engines/mariadb/version-validator.js.map +1 -0
  301. package/dist/engines/meilisearch/api-client.js +50 -0
  302. package/dist/engines/meilisearch/api-client.js.map +1 -0
  303. package/dist/engines/meilisearch/backup.js +167 -0
  304. package/dist/engines/meilisearch/backup.js.map +1 -0
  305. package/dist/engines/meilisearch/binary-manager.js +31 -0
  306. package/dist/engines/meilisearch/binary-manager.js.map +1 -0
  307. package/dist/engines/meilisearch/binary-urls.js +56 -0
  308. package/dist/engines/meilisearch/binary-urls.js.map +1 -0
  309. package/dist/engines/meilisearch/hostdb-releases.js +21 -0
  310. package/dist/engines/meilisearch/hostdb-releases.js.map +1 -0
  311. package/dist/engines/meilisearch/index.js +992 -0
  312. package/dist/engines/meilisearch/index.js.map +1 -0
  313. package/dist/engines/meilisearch/restore.js +167 -0
  314. package/dist/engines/meilisearch/restore.js.map +1 -0
  315. package/dist/engines/meilisearch/version-maps.js +67 -0
  316. package/dist/engines/meilisearch/version-maps.js.map +1 -0
  317. package/dist/engines/meilisearch/version-validator.js +109 -0
  318. package/dist/engines/meilisearch/version-validator.js.map +1 -0
  319. package/dist/engines/mongodb/backup.js +109 -0
  320. package/dist/engines/mongodb/backup.js.map +1 -0
  321. package/dist/engines/mongodb/binary-manager.js +36 -0
  322. package/dist/engines/mongodb/binary-manager.js.map +1 -0
  323. package/dist/engines/mongodb/binary-urls.js +46 -0
  324. package/dist/engines/mongodb/binary-urls.js.map +1 -0
  325. package/dist/engines/mongodb/cli-utils.js +131 -0
  326. package/dist/engines/mongodb/cli-utils.js.map +1 -0
  327. package/dist/engines/mongodb/hostdb-releases.js +77 -0
  328. package/dist/engines/mongodb/hostdb-releases.js.map +1 -0
  329. package/dist/engines/mongodb/index.js +873 -0
  330. package/dist/engines/mongodb/index.js.map +1 -0
  331. package/dist/engines/mongodb/restore.js +276 -0
  332. package/dist/engines/mongodb/restore.js.map +1 -0
  333. package/dist/engines/mongodb/version-maps.js +79 -0
  334. package/dist/engines/mongodb/version-maps.js.map +1 -0
  335. package/dist/engines/mongodb/version-validator.js +133 -0
  336. package/dist/engines/mongodb/version-validator.js.map +1 -0
  337. package/dist/engines/mysql/backup.js +210 -0
  338. package/dist/engines/mysql/backup.js.map +1 -0
  339. package/dist/engines/mysql/binary-detection.js +325 -0
  340. package/dist/engines/mysql/binary-detection.js.map +1 -0
  341. package/dist/engines/mysql/binary-manager.js +30 -0
  342. package/dist/engines/mysql/binary-manager.js.map +1 -0
  343. package/dist/engines/mysql/binary-urls.js +87 -0
  344. package/dist/engines/mysql/binary-urls.js.map +1 -0
  345. package/{engines/mysql/hostdb-releases.ts → dist/engines/mysql/hostdb-releases.js} +20 -23
  346. package/dist/engines/mysql/hostdb-releases.js.map +1 -0
  347. package/dist/engines/mysql/index.js +1066 -0
  348. package/dist/engines/mysql/index.js.map +1 -0
  349. package/dist/engines/mysql/restore.js +361 -0
  350. package/dist/engines/mysql/restore.js.map +1 -0
  351. package/dist/engines/mysql/version-maps.js +79 -0
  352. package/dist/engines/mysql/version-maps.js.map +1 -0
  353. package/dist/engines/mysql/version-validator.js +266 -0
  354. package/dist/engines/mysql/version-validator.js.map +1 -0
  355. package/dist/engines/postgresql/backup.js +118 -0
  356. package/dist/engines/postgresql/backup.js.map +1 -0
  357. package/dist/engines/postgresql/binary-manager.js +85 -0
  358. package/dist/engines/postgresql/binary-manager.js.map +1 -0
  359. package/dist/engines/postgresql/binary-urls.js +80 -0
  360. package/dist/engines/postgresql/binary-urls.js.map +1 -0
  361. package/dist/engines/postgresql/hostdb-releases.js +21 -0
  362. package/dist/engines/postgresql/hostdb-releases.js.map +1 -0
  363. package/dist/engines/postgresql/index.js +852 -0
  364. package/dist/engines/postgresql/index.js.map +1 -0
  365. package/dist/engines/postgresql/remote-version.js +109 -0
  366. package/dist/engines/postgresql/remote-version.js.map +1 -0
  367. package/dist/engines/postgresql/restore.js +254 -0
  368. package/dist/engines/postgresql/restore.js.map +1 -0
  369. package/dist/engines/postgresql/version-maps.js +73 -0
  370. package/dist/engines/postgresql/version-maps.js.map +1 -0
  371. package/dist/engines/postgresql/version-validator.js +286 -0
  372. package/dist/engines/postgresql/version-validator.js.map +1 -0
  373. package/dist/engines/qdrant/api-client.js +50 -0
  374. package/dist/engines/qdrant/api-client.js.map +1 -0
  375. package/dist/engines/qdrant/backup.js +115 -0
  376. package/dist/engines/qdrant/backup.js.map +1 -0
  377. package/dist/engines/qdrant/binary-manager.js +31 -0
  378. package/dist/engines/qdrant/binary-manager.js.map +1 -0
  379. package/dist/engines/qdrant/binary-urls.js +92 -0
  380. package/dist/engines/qdrant/binary-urls.js.map +1 -0
  381. package/dist/engines/qdrant/cli-utils.js +39 -0
  382. package/dist/engines/qdrant/cli-utils.js.map +1 -0
  383. package/dist/engines/qdrant/hostdb-releases.js +21 -0
  384. package/dist/engines/qdrant/hostdb-releases.js.map +1 -0
  385. package/dist/engines/qdrant/index.js +1002 -0
  386. package/dist/engines/qdrant/index.js.map +1 -0
  387. package/dist/engines/qdrant/restore.js +154 -0
  388. package/dist/engines/qdrant/restore.js.map +1 -0
  389. package/dist/engines/qdrant/version-maps.js +67 -0
  390. package/dist/engines/qdrant/version-maps.js.map +1 -0
  391. package/dist/engines/qdrant/version-validator.js +109 -0
  392. package/dist/engines/qdrant/version-validator.js.map +1 -0
  393. package/dist/engines/questdb/backup.js +191 -0
  394. package/dist/engines/questdb/backup.js.map +1 -0
  395. package/dist/engines/questdb/binary-manager.js +247 -0
  396. package/dist/engines/questdb/binary-manager.js.map +1 -0
  397. package/dist/engines/questdb/binary-urls.js +27 -0
  398. package/dist/engines/questdb/binary-urls.js.map +1 -0
  399. package/dist/engines/questdb/hostdb-releases.js +21 -0
  400. package/dist/engines/questdb/hostdb-releases.js.map +1 -0
  401. package/dist/engines/questdb/index.js +814 -0
  402. package/dist/engines/questdb/index.js.map +1 -0
  403. package/dist/engines/questdb/restore.js +202 -0
  404. package/dist/engines/questdb/restore.js.map +1 -0
  405. package/dist/engines/questdb/version-maps.js +33 -0
  406. package/dist/engines/questdb/version-maps.js.map +1 -0
  407. package/dist/engines/questdb/version-validator.js +99 -0
  408. package/dist/engines/questdb/version-validator.js.map +1 -0
  409. package/dist/engines/redis/backup.js +292 -0
  410. package/dist/engines/redis/backup.js.map +1 -0
  411. package/dist/engines/redis/binary-manager.js +32 -0
  412. package/dist/engines/redis/binary-manager.js.map +1 -0
  413. package/dist/engines/redis/binary-urls.js +96 -0
  414. package/dist/engines/redis/binary-urls.js.map +1 -0
  415. package/dist/engines/redis/cli-utils.js +38 -0
  416. package/dist/engines/redis/cli-utils.js.map +1 -0
  417. package/dist/engines/redis/hostdb-releases.js +21 -0
  418. package/dist/engines/redis/hostdb-releases.js.map +1 -0
  419. package/dist/engines/redis/index.js +1263 -0
  420. package/dist/engines/redis/index.js.map +1 -0
  421. package/dist/engines/redis/restore.js +338 -0
  422. package/dist/engines/redis/restore.js.map +1 -0
  423. package/dist/engines/redis/version-maps.js +70 -0
  424. package/dist/engines/redis/version-maps.js.map +1 -0
  425. package/dist/engines/redis/version-validator.js +109 -0
  426. package/dist/engines/redis/version-validator.js.map +1 -0
  427. package/dist/engines/sqlite/binary-manager.js +39 -0
  428. package/dist/engines/sqlite/binary-manager.js.map +1 -0
  429. package/{engines/sqlite/binary-urls.ts → dist/engines/sqlite/binary-urls.js} +11 -16
  430. package/dist/engines/sqlite/binary-urls.js.map +1 -0
  431. package/dist/engines/sqlite/hostdb-releases.js +21 -0
  432. package/dist/engines/sqlite/hostdb-releases.js.map +1 -0
  433. package/dist/engines/sqlite/index.js +493 -0
  434. package/dist/engines/sqlite/index.js.map +1 -0
  435. package/dist/engines/sqlite/registry.js +163 -0
  436. package/dist/engines/sqlite/registry.js.map +1 -0
  437. package/dist/engines/sqlite/scanner.js +12 -0
  438. package/dist/engines/sqlite/scanner.js.map +1 -0
  439. package/dist/engines/sqlite/version-maps.js +57 -0
  440. package/dist/engines/sqlite/version-maps.js.map +1 -0
  441. package/dist/engines/surrealdb/backup.js +97 -0
  442. package/dist/engines/surrealdb/backup.js.map +1 -0
  443. package/dist/engines/surrealdb/binary-manager.js +33 -0
  444. package/dist/engines/surrealdb/binary-manager.js.map +1 -0
  445. package/dist/engines/surrealdb/binary-urls.js +33 -0
  446. package/dist/engines/surrealdb/binary-urls.js.map +1 -0
  447. package/dist/engines/surrealdb/cli-utils.js +147 -0
  448. package/dist/engines/surrealdb/cli-utils.js.map +1 -0
  449. package/dist/engines/surrealdb/hostdb-releases.js +21 -0
  450. package/dist/engines/surrealdb/hostdb-releases.js.map +1 -0
  451. package/dist/engines/surrealdb/index.js +1022 -0
  452. package/dist/engines/surrealdb/index.js.map +1 -0
  453. package/dist/engines/surrealdb/restore.js +224 -0
  454. package/dist/engines/surrealdb/restore.js.map +1 -0
  455. package/dist/engines/surrealdb/version-maps.js +36 -0
  456. package/dist/engines/surrealdb/version-maps.js.map +1 -0
  457. package/dist/engines/tigerbeetle/backup.js +36 -0
  458. package/dist/engines/tigerbeetle/backup.js.map +1 -0
  459. package/dist/engines/tigerbeetle/binary-manager.js +72 -0
  460. package/dist/engines/tigerbeetle/binary-manager.js.map +1 -0
  461. package/dist/engines/tigerbeetle/binary-urls.js +49 -0
  462. package/dist/engines/tigerbeetle/binary-urls.js.map +1 -0
  463. package/dist/engines/tigerbeetle/hostdb-releases.js +21 -0
  464. package/dist/engines/tigerbeetle/hostdb-releases.js.map +1 -0
  465. package/dist/engines/tigerbeetle/index.js +559 -0
  466. package/dist/engines/tigerbeetle/index.js.map +1 -0
  467. package/dist/engines/tigerbeetle/restore.js +91 -0
  468. package/dist/engines/tigerbeetle/restore.js.map +1 -0
  469. package/{engines/tigerbeetle/version-maps.ts → dist/engines/tigerbeetle/version-maps.js} +22 -31
  470. package/dist/engines/tigerbeetle/version-maps.js.map +1 -0
  471. package/dist/engines/tigerbeetle/version-validator.js +108 -0
  472. package/dist/engines/tigerbeetle/version-validator.js.map +1 -0
  473. package/dist/engines/typedb/backup.js +129 -0
  474. package/dist/engines/typedb/backup.js.map +1 -0
  475. package/dist/engines/typedb/binary-manager.js +151 -0
  476. package/dist/engines/typedb/binary-manager.js.map +1 -0
  477. package/dist/engines/typedb/binary-urls.js +33 -0
  478. package/dist/engines/typedb/binary-urls.js.map +1 -0
  479. package/dist/engines/typedb/cli-utils.js +163 -0
  480. package/dist/engines/typedb/cli-utils.js.map +1 -0
  481. package/dist/engines/typedb/hostdb-releases.js +21 -0
  482. package/dist/engines/typedb/hostdb-releases.js.map +1 -0
  483. package/dist/engines/typedb/index.js +1003 -0
  484. package/dist/engines/typedb/index.js.map +1 -0
  485. package/dist/engines/typedb/restore.js +279 -0
  486. package/dist/engines/typedb/restore.js.map +1 -0
  487. package/dist/engines/typedb/version-maps.js +40 -0
  488. package/dist/engines/typedb/version-maps.js.map +1 -0
  489. package/dist/engines/typedb/version-validator.js +103 -0
  490. package/dist/engines/typedb/version-validator.js.map +1 -0
  491. package/dist/engines/valkey/backup.js +292 -0
  492. package/dist/engines/valkey/backup.js.map +1 -0
  493. package/dist/engines/valkey/binary-manager.js +33 -0
  494. package/dist/engines/valkey/binary-manager.js.map +1 -0
  495. package/dist/engines/valkey/binary-urls.js +98 -0
  496. package/dist/engines/valkey/binary-urls.js.map +1 -0
  497. package/dist/engines/valkey/cli-utils.js +38 -0
  498. package/dist/engines/valkey/cli-utils.js.map +1 -0
  499. package/dist/engines/valkey/hostdb-releases.js +21 -0
  500. package/dist/engines/valkey/hostdb-releases.js.map +1 -0
  501. package/dist/engines/valkey/index.js +1257 -0
  502. package/dist/engines/valkey/index.js.map +1 -0
  503. package/dist/engines/valkey/restore.js +340 -0
  504. package/dist/engines/valkey/restore.js.map +1 -0
  505. package/dist/engines/valkey/version-maps.js +70 -0
  506. package/dist/engines/valkey/version-maps.js.map +1 -0
  507. package/dist/engines/valkey/version-validator.js +112 -0
  508. package/dist/engines/valkey/version-validator.js.map +1 -0
  509. package/dist/engines/weaviate/api-client.js +50 -0
  510. package/dist/engines/weaviate/api-client.js.map +1 -0
  511. package/dist/engines/weaviate/backup.js +95 -0
  512. package/dist/engines/weaviate/backup.js.map +1 -0
  513. package/dist/engines/weaviate/binary-manager.js +58 -0
  514. package/dist/engines/weaviate/binary-manager.js.map +1 -0
  515. package/dist/engines/weaviate/binary-urls.js +92 -0
  516. package/dist/engines/weaviate/binary-urls.js.map +1 -0
  517. package/dist/engines/weaviate/cli-utils.js +39 -0
  518. package/dist/engines/weaviate/cli-utils.js.map +1 -0
  519. package/dist/engines/weaviate/hostdb-releases.js +21 -0
  520. package/dist/engines/weaviate/hostdb-releases.js.map +1 -0
  521. package/dist/engines/weaviate/index.js +871 -0
  522. package/dist/engines/weaviate/index.js.map +1 -0
  523. package/dist/engines/weaviate/restore.js +185 -0
  524. package/dist/engines/weaviate/restore.js.map +1 -0
  525. package/dist/engines/weaviate/version-maps.js +67 -0
  526. package/dist/engines/weaviate/version-maps.js.map +1 -0
  527. package/dist/engines/weaviate/version-validator.js +109 -0
  528. package/dist/engines/weaviate/version-validator.js.map +1 -0
  529. package/dist/types/index.js +102 -0
  530. package/dist/types/index.js.map +1 -0
  531. package/package.json +12 -9
  532. package/bin/cli.js +0 -68
  533. package/cli/bin.ts +0 -10
  534. package/cli/commands/attach.ts +0 -139
  535. package/cli/commands/backup.ts +0 -290
  536. package/cli/commands/backups.ts +0 -247
  537. package/cli/commands/clone.ts +0 -159
  538. package/cli/commands/config.ts +0 -367
  539. package/cli/commands/connect.ts +0 -684
  540. package/cli/commands/create.ts +0 -1201
  541. package/cli/commands/databases.ts +0 -630
  542. package/cli/commands/delete.ts +0 -133
  543. package/cli/commands/deps.ts +0 -342
  544. package/cli/commands/detach.ts +0 -107
  545. package/cli/commands/doctor.ts +0 -689
  546. package/cli/commands/duckdb.ts +0 -273
  547. package/cli/commands/edit.ts +0 -683
  548. package/cli/commands/engines.ts +0 -1914
  549. package/cli/commands/export.ts +0 -544
  550. package/cli/commands/info.ts +0 -340
  551. package/cli/commands/list.ts +0 -284
  552. package/cli/commands/logs.ts +0 -102
  553. package/cli/commands/menu/backup-handlers.ts +0 -1571
  554. package/cli/commands/menu/container-handlers.ts +0 -2288
  555. package/cli/commands/menu/engine-handlers.ts +0 -355
  556. package/cli/commands/menu/index.ts +0 -342
  557. package/cli/commands/menu/settings-handlers.ts +0 -365
  558. package/cli/commands/menu/shared.ts +0 -23
  559. package/cli/commands/menu/shell-handlers.ts +0 -1811
  560. package/cli/commands/menu/sql-handlers.ts +0 -231
  561. package/cli/commands/menu/update-handlers.ts +0 -378
  562. package/cli/commands/menu/validators.ts +0 -8
  563. package/cli/commands/ports.ts +0 -211
  564. package/cli/commands/pull.ts +0 -223
  565. package/cli/commands/query.ts +0 -241
  566. package/cli/commands/restore.ts +0 -587
  567. package/cli/commands/run.ts +0 -178
  568. package/cli/commands/self-update.ts +0 -121
  569. package/cli/commands/sqlite.ts +0 -273
  570. package/cli/commands/start.ts +0 -218
  571. package/cli/commands/stop.ts +0 -241
  572. package/cli/commands/url.ts +0 -104
  573. package/cli/commands/users.ts +0 -264
  574. package/cli/commands/version.ts +0 -55
  575. package/cli/commands/which.ts +0 -290
  576. package/cli/constants.ts +0 -233
  577. package/cli/helpers.ts +0 -1593
  578. package/cli/index.ts +0 -162
  579. package/cli/ui/prompts.ts +0 -1525
  580. package/cli/ui/spinner.ts +0 -88
  581. package/cli/ui/theme.ts +0 -128
  582. package/cli/utils/file-follower.ts +0 -93
  583. package/config/backup-formats.ts +0 -446
  584. package/config/defaults.ts +0 -56
  585. package/config/engine-defaults.ts +0 -336
  586. package/config/engines-registry.ts +0 -150
  587. package/config/engines.schema.json +0 -135
  588. package/config/os-dependencies.ts +0 -888
  589. package/config/paths.ts +0 -200
  590. package/core/backup-restore.ts +0 -330
  591. package/core/base-binary-manager.ts +0 -562
  592. package/core/base-document-binary-manager.ts +0 -523
  593. package/core/base-embedded-binary-manager.ts +0 -547
  594. package/core/base-server-binary-manager.ts +0 -523
  595. package/core/config-manager.ts +0 -652
  596. package/core/container-manager.ts +0 -787
  597. package/core/credential-generator.ts +0 -93
  598. package/core/credential-manager.ts +0 -259
  599. package/core/dblab-utils.ts +0 -113
  600. package/core/dependency-manager.ts +0 -512
  601. package/core/docker-exporter.ts +0 -1345
  602. package/core/error-handler.ts +0 -419
  603. package/core/fs-error-utils.ts +0 -82
  604. package/core/homebrew-version-manager.ts +0 -352
  605. package/core/hostdb-client.ts +0 -344
  606. package/core/hostdb-metadata.ts +0 -350
  607. package/core/hostdb-releases-factory.ts +0 -237
  608. package/core/library-env.ts +0 -118
  609. package/core/pgweb-utils.ts +0 -62
  610. package/core/platform-service.ts +0 -829
  611. package/core/port-manager.ts +0 -165
  612. package/core/process-manager.ts +0 -576
  613. package/core/pull-manager.ts +0 -511
  614. package/core/query-parser.ts +0 -514
  615. package/core/spawn-utils.ts +0 -122
  616. package/core/start-with-retry.ts +0 -130
  617. package/core/test-cleanup.ts +0 -108
  618. package/core/tls-generator.ts +0 -116
  619. package/core/transaction-manager.ts +0 -158
  620. package/core/update-manager.ts +0 -308
  621. package/core/version-migration.ts +0 -346
  622. package/core/version-utils.ts +0 -104
  623. package/engines/base-engine.ts +0 -340
  624. package/engines/clickhouse/README.md +0 -231
  625. package/engines/clickhouse/backup.ts +0 -398
  626. package/engines/clickhouse/binary-manager.ts +0 -201
  627. package/engines/clickhouse/binary-urls.ts +0 -125
  628. package/engines/clickhouse/cli-utils.ts +0 -176
  629. package/engines/clickhouse/hostdb-releases.ts +0 -30
  630. package/engines/clickhouse/index.ts +0 -1345
  631. package/engines/clickhouse/restore.ts +0 -466
  632. package/engines/clickhouse/version-maps.ts +0 -95
  633. package/engines/clickhouse/version-validator.ts +0 -154
  634. package/engines/cockroachdb/README.md +0 -170
  635. package/engines/cockroachdb/backup.ts +0 -376
  636. package/engines/cockroachdb/binary-manager.ts +0 -45
  637. package/engines/cockroachdb/binary-urls.ts +0 -40
  638. package/engines/cockroachdb/cli-utils.ts +0 -384
  639. package/engines/cockroachdb/hostdb-releases.ts +0 -26
  640. package/engines/cockroachdb/index.ts +0 -1276
  641. package/engines/cockroachdb/restore.ts +0 -455
  642. package/engines/cockroachdb/version-maps.ts +0 -42
  643. package/engines/couchdb/README.md +0 -257
  644. package/engines/couchdb/api-client.ts +0 -81
  645. package/engines/couchdb/backup.ts +0 -137
  646. package/engines/couchdb/binary-manager.ts +0 -86
  647. package/engines/couchdb/binary-urls.ts +0 -115
  648. package/engines/couchdb/hostdb-releases.ts +0 -23
  649. package/engines/couchdb/index.ts +0 -1429
  650. package/engines/couchdb/restore.ts +0 -290
  651. package/engines/couchdb/version-maps.ts +0 -78
  652. package/engines/couchdb/version-validator.ts +0 -111
  653. package/engines/duckdb/README.md +0 -154
  654. package/engines/duckdb/binary-manager.ts +0 -45
  655. package/engines/duckdb/hostdb-releases.ts +0 -23
  656. package/engines/duckdb/index.ts +0 -749
  657. package/engines/duckdb/registry.ts +0 -303
  658. package/engines/duckdb/scanner.ts +0 -22
  659. package/engines/duckdb/version-maps.ts +0 -78
  660. package/engines/duckdb/version-validator.ts +0 -78
  661. package/engines/ferretdb/README.md +0 -262
  662. package/engines/ferretdb/backup.ts +0 -173
  663. package/engines/ferretdb/binary-manager.ts +0 -1095
  664. package/engines/ferretdb/binary-urls.ts +0 -183
  665. package/engines/ferretdb/index.ts +0 -1907
  666. package/engines/ferretdb/restore.ts +0 -357
  667. package/engines/file-based-utils.ts +0 -262
  668. package/engines/index.ts +0 -131
  669. package/engines/influxdb/README.md +0 -180
  670. package/engines/influxdb/api-client.ts +0 -64
  671. package/engines/influxdb/backup.ts +0 -160
  672. package/engines/influxdb/binary-manager.ts +0 -110
  673. package/engines/influxdb/binary-urls.ts +0 -69
  674. package/engines/influxdb/hostdb-releases.ts +0 -23
  675. package/engines/influxdb/index.ts +0 -1272
  676. package/engines/influxdb/restore.ts +0 -417
  677. package/engines/influxdb/version-maps.ts +0 -75
  678. package/engines/influxdb/version-validator.ts +0 -128
  679. package/engines/mariadb/README.md +0 -141
  680. package/engines/mariadb/backup.ts +0 -233
  681. package/engines/mariadb/binary-manager.ts +0 -45
  682. package/engines/mariadb/hostdb-releases.ts +0 -23
  683. package/engines/mariadb/index.ts +0 -1300
  684. package/engines/mariadb/restore.ts +0 -447
  685. package/engines/mariadb/version-maps.ts +0 -72
  686. package/engines/mariadb/version-validator.ts +0 -181
  687. package/engines/meilisearch/README.md +0 -255
  688. package/engines/meilisearch/api-client.ts +0 -61
  689. package/engines/meilisearch/backup.ts +0 -233
  690. package/engines/meilisearch/binary-manager.ts +0 -43
  691. package/engines/meilisearch/binary-urls.ts +0 -69
  692. package/engines/meilisearch/hostdb-releases.ts +0 -26
  693. package/engines/meilisearch/index.ts +0 -1292
  694. package/engines/meilisearch/restore.ts +0 -219
  695. package/engines/meilisearch/version-maps.ts +0 -78
  696. package/engines/meilisearch/version-validator.ts +0 -128
  697. package/engines/mongodb/README.md +0 -162
  698. package/engines/mongodb/backup.ts +0 -127
  699. package/engines/mongodb/binary-manager.ts +0 -48
  700. package/engines/mongodb/binary-urls.ts +0 -63
  701. package/engines/mongodb/cli-utils.ts +0 -171
  702. package/engines/mongodb/hostdb-releases.ts +0 -91
  703. package/engines/mongodb/index.ts +0 -1118
  704. package/engines/mongodb/restore.ts +0 -361
  705. package/engines/mongodb/version-maps.ts +0 -91
  706. package/engines/mongodb/version-validator.ts +0 -160
  707. package/engines/mysql/README.md +0 -142
  708. package/engines/mysql/backup.ts +0 -270
  709. package/engines/mysql/binary-detection.ts +0 -408
  710. package/engines/mysql/binary-manager.ts +0 -42
  711. package/engines/mysql/binary-urls.ts +0 -104
  712. package/engines/mysql/index.ts +0 -1361
  713. package/engines/mysql/restore.ts +0 -500
  714. package/engines/mysql/version-maps.ts +0 -91
  715. package/engines/mysql/version-validator.ts +0 -369
  716. package/engines/postgresql/README.md +0 -158
  717. package/engines/postgresql/backup.ts +0 -151
  718. package/engines/postgresql/binary-manager.ts +0 -114
  719. package/engines/postgresql/binary-urls.ts +0 -99
  720. package/engines/postgresql/hostdb-releases.ts +0 -26
  721. package/engines/postgresql/index.ts +0 -1143
  722. package/engines/postgresql/remote-version.ts +0 -161
  723. package/engines/postgresql/restore.ts +0 -342
  724. package/engines/postgresql/version-maps.ts +0 -83
  725. package/engines/postgresql/version-validator.ts +0 -413
  726. package/engines/qdrant/README.md +0 -222
  727. package/engines/qdrant/api-client.ts +0 -61
  728. package/engines/qdrant/backup.ts +0 -165
  729. package/engines/qdrant/binary-manager.ts +0 -43
  730. package/engines/qdrant/binary-urls.ts +0 -115
  731. package/engines/qdrant/cli-utils.ts +0 -43
  732. package/engines/qdrant/hostdb-releases.ts +0 -23
  733. package/engines/qdrant/index.ts +0 -1312
  734. package/engines/qdrant/restore.ts +0 -203
  735. package/engines/qdrant/version-maps.ts +0 -78
  736. package/engines/qdrant/version-validator.ts +0 -128
  737. package/engines/questdb/README.md +0 -334
  738. package/engines/questdb/backup.ts +0 -220
  739. package/engines/questdb/binary-manager.ts +0 -310
  740. package/engines/questdb/binary-urls.ts +0 -34
  741. package/engines/questdb/hostdb-releases.ts +0 -23
  742. package/engines/questdb/index.ts +0 -1023
  743. package/engines/questdb/restore.ts +0 -260
  744. package/engines/questdb/version-maps.ts +0 -37
  745. package/engines/questdb/version-validator.ts +0 -121
  746. package/engines/redis/README.md +0 -173
  747. package/engines/redis/backup.ts +0 -389
  748. package/engines/redis/binary-manager.ts +0 -44
  749. package/engines/redis/binary-urls.ts +0 -117
  750. package/engines/redis/cli-utils.ts +0 -42
  751. package/engines/redis/hostdb-releases.ts +0 -23
  752. package/engines/redis/index.ts +0 -1583
  753. package/engines/redis/restore.ts +0 -443
  754. package/engines/redis/version-maps.ts +0 -81
  755. package/engines/redis/version-validator.ts +0 -131
  756. package/engines/sqlite/README.md +0 -162
  757. package/engines/sqlite/binary-manager.ts +0 -52
  758. package/engines/sqlite/hostdb-releases.ts +0 -23
  759. package/engines/sqlite/index.ts +0 -641
  760. package/engines/sqlite/registry.ts +0 -198
  761. package/engines/sqlite/scanner.ts +0 -22
  762. package/engines/sqlite/version-maps.ts +0 -64
  763. package/engines/surrealdb/README.md +0 -218
  764. package/engines/surrealdb/backup.ts +0 -131
  765. package/engines/surrealdb/binary-manager.ts +0 -45
  766. package/engines/surrealdb/binary-urls.ts +0 -40
  767. package/engines/surrealdb/cli-utils.ts +0 -173
  768. package/engines/surrealdb/hostdb-releases.ts +0 -23
  769. package/engines/surrealdb/index.ts +0 -1246
  770. package/engines/surrealdb/restore.ts +0 -302
  771. package/engines/surrealdb/version-maps.ts +0 -41
  772. package/engines/tigerbeetle/README.md +0 -61
  773. package/engines/tigerbeetle/backup.ts +0 -49
  774. package/engines/tigerbeetle/binary-manager.ts +0 -95
  775. package/engines/tigerbeetle/binary-urls.ts +0 -62
  776. package/engines/tigerbeetle/hostdb-releases.ts +0 -26
  777. package/engines/tigerbeetle/index.ts +0 -746
  778. package/engines/tigerbeetle/restore.ts +0 -130
  779. package/engines/tigerbeetle/version-validator.ts +0 -126
  780. package/engines/typedb/backup.ts +0 -167
  781. package/engines/typedb/binary-manager.ts +0 -200
  782. package/engines/typedb/binary-urls.ts +0 -40
  783. package/engines/typedb/cli-utils.ts +0 -210
  784. package/engines/typedb/hostdb-releases.ts +0 -23
  785. package/engines/typedb/index.ts +0 -1275
  786. package/engines/typedb/restore.ts +0 -377
  787. package/engines/typedb/version-maps.ts +0 -48
  788. package/engines/typedb/version-validator.ts +0 -127
  789. package/engines/valkey/README.md +0 -219
  790. package/engines/valkey/backup.ts +0 -389
  791. package/engines/valkey/binary-manager.ts +0 -45
  792. package/engines/valkey/binary-urls.ts +0 -122
  793. package/engines/valkey/cli-utils.ts +0 -42
  794. package/engines/valkey/hostdb-releases.ts +0 -23
  795. package/engines/valkey/index.ts +0 -1585
  796. package/engines/valkey/restore.ts +0 -446
  797. package/engines/valkey/version-maps.ts +0 -81
  798. package/engines/valkey/version-validator.ts +0 -131
  799. package/engines/weaviate/README.md +0 -302
  800. package/engines/weaviate/api-client.ts +0 -61
  801. package/engines/weaviate/backup.ts +0 -145
  802. package/engines/weaviate/binary-manager.ts +0 -80
  803. package/engines/weaviate/binary-urls.ts +0 -115
  804. package/engines/weaviate/cli-utils.ts +0 -43
  805. package/engines/weaviate/hostdb-releases.ts +0 -23
  806. package/engines/weaviate/index.ts +0 -1139
  807. package/engines/weaviate/restore.ts +0 -235
  808. package/engines/weaviate/version-maps.ts +0 -78
  809. package/engines/weaviate/version-validator.ts +0 -128
  810. package/types/index.ts +0 -624
  811. /package/{config → dist/config}/engines.json +0 -0
@@ -1,787 +0,0 @@
1
- import { existsSync } from 'fs'
2
- import {
3
- mkdir,
4
- readdir,
5
- readFile,
6
- writeFile,
7
- rm,
8
- cp,
9
- unlink,
10
- rename as fsRename,
11
- } from 'fs/promises'
12
- import { paths } from '../config/paths'
13
- import { processManager } from './process-manager'
14
- import { portManager } from './port-manager'
15
- import { isWindows } from './platform-service'
16
- import { logDebug, UnsupportedOperationError } from './error-handler'
17
- import { getEngineDefaults, getSupportedEngines } from '../config/defaults'
18
- import { getEngine } from '../engines'
19
- import { sqliteRegistry } from '../engines/sqlite/registry'
20
- import { duckdbRegistry } from '../engines/duckdb/registry'
21
- import type { ContainerConfig } from '../types'
22
- import { Engine, isFileBasedEngine } from '../types'
23
-
24
- export type CreateOptions = {
25
- engine: Engine
26
- version: string
27
- port: number
28
- database: string
29
- /** Path to the engine binary (for system-installed engines like MySQL, MongoDB, Redis) */
30
- binaryPath?: string
31
- }
32
-
33
- export type DeleteOptions = {
34
- force?: boolean
35
- }
36
-
37
- export class ContainerManager {
38
- async create(name: string, options: CreateOptions): Promise<ContainerConfig> {
39
- const { engine, version, port, database, binaryPath } = options
40
-
41
- // Validate container name
42
- if (!this.isValidName(name)) {
43
- throw new Error(
44
- 'Container name must be alphanumeric with hyphens/underscores only',
45
- )
46
- }
47
-
48
- // Check if container already exists (for this engine)
49
- if (await this.exists(name, { engine })) {
50
- throw new Error(`Container "${name}" already exists for engine ${engine}`)
51
- }
52
-
53
- // Create container directory (engine-scoped)
54
- const containerPath = paths.getContainerPath(name, { engine })
55
- const dataPath = paths.getContainerDataPath(name, { engine })
56
-
57
- await mkdir(containerPath, { recursive: true })
58
- await mkdir(dataPath, { recursive: true })
59
-
60
- // Create container config
61
- const config: ContainerConfig = {
62
- name,
63
- engine,
64
- version,
65
- port,
66
- database,
67
- databases: [database],
68
- created: new Date().toISOString(),
69
- status: 'created',
70
- // Store binary path for system-installed engines (MySQL, MongoDB, Redis)
71
- // This ensures version consistency when starting the container
72
- ...(binaryPath && { binaryPath }),
73
- }
74
-
75
- await this.saveConfig(name, { engine }, config)
76
-
77
- return config
78
- }
79
-
80
- // If engine is not provided, searches all engine directories.
81
- // Automatically migrates old schemas to include databases array.
82
- async getConfig(
83
- name: string,
84
- options?: { engine?: string },
85
- ): Promise<ContainerConfig | null> {
86
- const { engine } = options || {}
87
-
88
- if (engine) {
89
- // SQLite uses registry instead of filesystem
90
- if (engine === Engine.SQLite) {
91
- return this.getSqliteConfig(name)
92
- }
93
-
94
- // Look in specific engine directory
95
- const configPath = paths.getContainerConfigPath(name, { engine })
96
- if (!existsSync(configPath)) {
97
- return null
98
- }
99
- const content = await readFile(configPath, 'utf8')
100
- const config = JSON.parse(content) as ContainerConfig
101
- return this.migrateConfig(config)
102
- }
103
-
104
- // Search SQLite registry first
105
- const sqliteConfig = await this.getSqliteConfig(name)
106
- if (sqliteConfig) {
107
- return sqliteConfig
108
- }
109
-
110
- // Search DuckDB registry
111
- const duckdbConfig = await this.getDuckDBConfig(name)
112
- if (duckdbConfig) {
113
- return duckdbConfig
114
- }
115
-
116
- // Search all engine directories (excluding file-based engines which use registries)
117
- const engines = getSupportedEngines().filter(
118
- (e) => e !== 'sqlite' && e !== 'duckdb',
119
- )
120
- for (const eng of engines) {
121
- const configPath = paths.getContainerConfigPath(name, { engine: eng })
122
- if (existsSync(configPath)) {
123
- const content = await readFile(configPath, 'utf8')
124
- const config = JSON.parse(content) as ContainerConfig
125
- return this.migrateConfig(config)
126
- }
127
- }
128
-
129
- return null
130
- }
131
-
132
- private async getSqliteConfig(name: string): Promise<ContainerConfig | null> {
133
- const entry = await sqliteRegistry.get(name)
134
- if (!entry) {
135
- return null
136
- }
137
-
138
- // Convert registry entry to ContainerConfig format
139
- const fileExists = existsSync(entry.filePath)
140
- return {
141
- name: entry.name,
142
- engine: Engine.SQLite,
143
- version: '3',
144
- port: 0,
145
- database: entry.filePath, // For SQLite, database field stores file path
146
- databases: [entry.filePath],
147
- created: entry.created,
148
- status: fileExists ? 'running' : 'stopped', // "running" = file exists
149
- }
150
- }
151
-
152
- private async getDuckDBConfig(name: string): Promise<ContainerConfig | null> {
153
- const entry = await duckdbRegistry.get(name)
154
- if (!entry) {
155
- return null
156
- }
157
-
158
- // Convert registry entry to ContainerConfig format
159
- const fileExists = existsSync(entry.filePath)
160
- return {
161
- name: entry.name,
162
- engine: Engine.DuckDB,
163
- version: '1',
164
- port: 0,
165
- database: entry.filePath, // For DuckDB, database field stores file path
166
- databases: [entry.filePath],
167
- created: entry.created,
168
- status: fileExists ? 'running' : 'stopped', // "running" = file exists
169
- }
170
- }
171
-
172
- // Migrates old container configs to include databases array.
173
- private async migrateConfig(
174
- config: ContainerConfig,
175
- ): Promise<ContainerConfig> {
176
- let needsSave = false
177
-
178
- // If databases array is missing, create it with the primary database
179
- if (!config.databases) {
180
- config.databases = [config.database]
181
- needsSave = true
182
- }
183
-
184
- // Ensure primary database is in the array
185
- if (!config.databases.includes(config.database)) {
186
- config.databases = [config.database, ...config.databases]
187
- needsSave = true
188
- }
189
-
190
- // Save if we made changes
191
- if (needsSave) {
192
- await this.saveConfig(config.name, { engine: config.engine }, config)
193
- }
194
-
195
- return config
196
- }
197
-
198
- async saveConfig(
199
- name: string,
200
- options: { engine: string },
201
- config: ContainerConfig,
202
- ): Promise<void> {
203
- const { engine } = options
204
- const configPath = paths.getContainerConfigPath(name, { engine })
205
- await writeFile(configPath, JSON.stringify(config, null, 2))
206
- }
207
-
208
- async updateConfig(
209
- name: string,
210
- updates: Partial<ContainerConfig>,
211
- ): Promise<ContainerConfig> {
212
- const config = await this.getConfig(name)
213
- if (!config) {
214
- throw new Error(`Container "${name}" not found`)
215
- }
216
-
217
- const updatedConfig = { ...config, ...updates }
218
- await this.saveConfig(name, { engine: config.engine }, updatedConfig)
219
- return updatedConfig
220
- }
221
-
222
- async exists(name: string, options?: { engine?: string }): Promise<boolean> {
223
- const { engine } = options || {}
224
-
225
- if (engine) {
226
- // SQLite uses registry
227
- if (engine === Engine.SQLite) {
228
- return sqliteRegistry.exists(name)
229
- }
230
- const configPath = paths.getContainerConfigPath(name, { engine })
231
- return existsSync(configPath)
232
- }
233
-
234
- // Check SQLite registry first
235
- if (await sqliteRegistry.exists(name)) {
236
- return true
237
- }
238
-
239
- // Check DuckDB registry
240
- if (await duckdbRegistry.exists(name)) {
241
- return true
242
- }
243
-
244
- // Check all engine directories (excluding file-based engines)
245
- const engines = getSupportedEngines().filter(
246
- (e) => e !== 'sqlite' && e !== 'duckdb',
247
- )
248
- for (const eng of engines) {
249
- const configPath = paths.getContainerConfigPath(name, { engine: eng })
250
- if (existsSync(configPath)) {
251
- return true
252
- }
253
- }
254
-
255
- return false
256
- }
257
-
258
- async list(): Promise<ContainerConfig[]> {
259
- const containers: ContainerConfig[] = []
260
-
261
- // List SQLite containers from registry
262
- const sqliteEntries = await sqliteRegistry.list()
263
- for (const entry of sqliteEntries) {
264
- const fileExists = existsSync(entry.filePath)
265
- containers.push({
266
- name: entry.name,
267
- engine: Engine.SQLite,
268
- version: '3',
269
- port: 0,
270
- database: entry.filePath,
271
- databases: [entry.filePath],
272
- created: entry.created,
273
- status: fileExists ? 'running' : 'stopped', // "running" = file exists
274
- })
275
- }
276
-
277
- // List DuckDB containers from registry
278
- const duckdbEntries = await duckdbRegistry.list()
279
- for (const entry of duckdbEntries) {
280
- const fileExists = existsSync(entry.filePath)
281
- containers.push({
282
- name: entry.name,
283
- engine: Engine.DuckDB,
284
- version: '1',
285
- port: 0,
286
- database: entry.filePath,
287
- databases: [entry.filePath],
288
- created: entry.created,
289
- status: fileExists ? 'running' : 'stopped', // "running" = file exists
290
- })
291
- }
292
-
293
- // List server-based containers (PostgreSQL, MySQL, etc.)
294
- const containersDir = paths.containers
295
- if (!existsSync(containersDir)) {
296
- return containers
297
- }
298
-
299
- const engines = getSupportedEngines().filter(
300
- (e) => e !== 'sqlite' && e !== 'duckdb',
301
- )
302
-
303
- // Collect all container check promises for parallel execution
304
- const containerChecks: Promise<ContainerConfig | null>[] = []
305
-
306
- for (const engine of engines) {
307
- const engineDir = paths.getEngineContainersPath(engine)
308
- if (!existsSync(engineDir)) {
309
- continue
310
- }
311
-
312
- const entries = await readdir(engineDir, { withFileTypes: true })
313
-
314
- for (const entry of entries) {
315
- if (entry.isDirectory()) {
316
- // Push async check as promise (don't await yet)
317
- containerChecks.push(
318
- (async () => {
319
- const config = await this.getConfig(entry.name, { engine })
320
- if (!config) return null
321
- const running = await processManager.isRunning(entry.name, {
322
- engine,
323
- })
324
- return { ...config, status: running ? 'running' : 'stopped' }
325
- })(),
326
- )
327
- }
328
- }
329
- }
330
-
331
- // Execute all container checks in parallel
332
- const results = await Promise.all(containerChecks)
333
- containers.push(...results.filter((c): c is ContainerConfig => c !== null))
334
-
335
- return containers
336
- }
337
-
338
- async delete(name: string, options: DeleteOptions = {}): Promise<void> {
339
- const { force = false } = options
340
-
341
- // Get container config to find engine
342
- const config = await this.getConfig(name)
343
- if (!config) {
344
- throw new Error(`Container "${name}" not found`)
345
- }
346
-
347
- const { engine } = config
348
-
349
- // SQLite: delete file, remove from registry, and clean up container directory
350
- if (engine === Engine.SQLite) {
351
- const entry = await sqliteRegistry.get(name)
352
- if (entry && existsSync(entry.filePath)) {
353
- await unlink(entry.filePath)
354
- }
355
- await sqliteRegistry.remove(name)
356
-
357
- // Also remove the container directory (created by containerManager.create)
358
- const containerPath = paths.getContainerPath(name, { engine })
359
- if (existsSync(containerPath)) {
360
- await rm(containerPath, { recursive: true, force: true })
361
- }
362
- return
363
- }
364
-
365
- // DuckDB: delete file, remove from registry, and clean up container directory
366
- if (engine === Engine.DuckDB) {
367
- const entry = await duckdbRegistry.get(name)
368
- if (entry && existsSync(entry.filePath)) {
369
- await unlink(entry.filePath)
370
- }
371
- await duckdbRegistry.remove(name)
372
-
373
- // Also remove the container directory (created by containerManager.create)
374
- const containerPath = paths.getContainerPath(name, { engine })
375
- if (existsSync(containerPath)) {
376
- await rm(containerPath, { recursive: true, force: true })
377
- }
378
- return
379
- }
380
-
381
- // Server databases: check if running first
382
- const running = await processManager.isRunning(name, { engine })
383
- if (running && !force) {
384
- throw new Error(
385
- `Container "${name}" is running. Stop it first or use --force`,
386
- )
387
- }
388
-
389
- const containerPath = paths.getContainerPath(name, { engine })
390
- await this.safeRemoveDirectory(containerPath)
391
- }
392
-
393
- // Removes a directory with retry logic for Windows EBUSY errors.
394
- // Windows may hold file handles after process termination.
395
- // Windows can hold file locks for 120+ seconds due to:
396
- // - Antivirus software scanning
397
- // - Windows Search indexer
398
- // - Memory-mapped files (SurrealDB's SurrealKV, QuestDB's columnar storage)
399
- // - Java JVM file handle cleanup (QuestDB)
400
- private async safeRemoveDirectory(dirPath: string): Promise<void> {
401
- const maxRetries = isWindows() ? 90 : 1 // 90 retries × 2s = 180 seconds max
402
- const retryDelay = 2000 // 2 seconds between retries
403
-
404
- for (let attempt = 1; attempt <= maxRetries; attempt++) {
405
- try {
406
- await rm(dirPath, { recursive: true, force: true })
407
- return // Success
408
- } catch (error) {
409
- const e = error as NodeJS.ErrnoException
410
- if (e.code === 'EBUSY' && attempt < maxRetries) {
411
- logDebug(
412
- `EBUSY on rmdir attempt ${attempt}/${maxRetries}, retrying in ${retryDelay}ms...`,
413
- )
414
- await new Promise((resolve) => setTimeout(resolve, retryDelay))
415
- } else {
416
- throw error
417
- }
418
- }
419
- }
420
- }
421
-
422
- async clone(
423
- sourceName: string,
424
- targetName: string,
425
- ): Promise<ContainerConfig> {
426
- // Validate target name
427
- if (!this.isValidName(targetName)) {
428
- throw new Error(
429
- 'Container name must be alphanumeric with hyphens/underscores only',
430
- )
431
- }
432
-
433
- // Get source config
434
- const sourceConfig = await this.getConfig(sourceName)
435
- if (!sourceConfig) {
436
- throw new Error(`Source container "${sourceName}" not found`)
437
- }
438
-
439
- const { engine } = sourceConfig
440
-
441
- // Check target doesn't exist (for this engine)
442
- if (await this.exists(targetName, { engine })) {
443
- throw new Error(`Target container "${targetName}" already exists`)
444
- }
445
-
446
- // Check source is not running
447
- const running = await processManager.isRunning(sourceName, { engine })
448
- if (running) {
449
- throw new Error(
450
- `Source container "${sourceName}" is running. Stop it first`,
451
- )
452
- }
453
-
454
- // Copy container directory
455
- const sourcePath = paths.getContainerPath(sourceName, { engine })
456
- const targetPath = paths.getContainerPath(targetName, { engine })
457
-
458
- await cp(sourcePath, targetPath, { recursive: true })
459
-
460
- // If anything fails after copy, clean up the target directory
461
- try {
462
- // Update target config
463
- const config = await this.getConfig(targetName, { engine })
464
- if (!config) {
465
- throw new Error('Failed to read cloned container config')
466
- }
467
-
468
- config.name = targetName
469
- config.created = new Date().toISOString()
470
- config.clonedFrom = sourceName
471
-
472
- // Assign new port (excluding ports already used by other containers)
473
- const engineDefaults = getEngineDefaults(engine)
474
- const { port } = await portManager.findAvailablePortExcludingContainers({
475
- portRange: engineDefaults.portRange,
476
- })
477
- config.port = port
478
-
479
- await this.saveConfig(targetName, { engine }, config)
480
-
481
- // ClickHouse stores absolute paths in config.xml - regenerate with new paths
482
- if (engine === Engine.ClickHouse) {
483
- const clickhouseEngine = getEngine(Engine.ClickHouse)
484
- if ('regenerateConfig' in clickhouseEngine) {
485
- await (
486
- clickhouseEngine as {
487
- regenerateConfig: (name: string, port: number) => Promise<void>
488
- }
489
- ).regenerateConfig(targetName, config.port)
490
- }
491
- }
492
-
493
- return config
494
- } catch (error) {
495
- // Clean up the copied directory on failure
496
- await rm(targetPath, { recursive: true, force: true }).catch(() => {
497
- // Ignore cleanup errors
498
- })
499
- throw error
500
- }
501
- }
502
-
503
- async rename(oldName: string, newName: string): Promise<ContainerConfig> {
504
- // Validate new name
505
- if (!this.isValidName(newName)) {
506
- throw new Error(
507
- 'Container name must be alphanumeric with hyphens/underscores only',
508
- )
509
- }
510
-
511
- // Get source config
512
- const sourceConfig = await this.getConfig(oldName)
513
- if (!sourceConfig) {
514
- throw new Error(`Container "${oldName}" not found`)
515
- }
516
-
517
- const { engine } = sourceConfig
518
-
519
- // Check target doesn't exist
520
- if (await this.exists(newName, { engine })) {
521
- throw new Error(`Container "${newName}" already exists`)
522
- }
523
-
524
- // SQLite: rename in registry and handle container directory
525
- if (engine === Engine.SQLite) {
526
- const entry = await sqliteRegistry.get(oldName)
527
- if (!entry) {
528
- throw new Error(`SQLite container "${oldName}" not found in registry`)
529
- }
530
-
531
- // Move container directory first (if it exists) - do filesystem ops before registry
532
- // This way if the move fails, registry is unchanged
533
- const oldContainerPath = paths.getContainerPath(oldName, { engine })
534
- const newContainerPath = paths.getContainerPath(newName, { engine })
535
- if (existsSync(oldContainerPath)) {
536
- await this.atomicMoveDirectory(oldContainerPath, newContainerPath)
537
- }
538
-
539
- // Now update registry - remove old entry and add new one with updated name
540
- await sqliteRegistry.remove(oldName)
541
- await sqliteRegistry.add({
542
- name: newName,
543
- filePath: entry.filePath,
544
- created: entry.created,
545
- lastVerified: entry.lastVerified,
546
- })
547
-
548
- // Return updated config
549
- return {
550
- ...sourceConfig,
551
- name: newName,
552
- }
553
- }
554
-
555
- // DuckDB: rename in registry and handle container directory
556
- if (engine === Engine.DuckDB) {
557
- const entry = await duckdbRegistry.get(oldName)
558
- if (!entry) {
559
- throw new Error(`DuckDB container "${oldName}" not found in registry`)
560
- }
561
-
562
- // Move container directory first (if it exists) - do filesystem ops before registry
563
- // This way if the move fails, registry is unchanged
564
- const oldContainerPath = paths.getContainerPath(oldName, { engine })
565
- const newContainerPath = paths.getContainerPath(newName, { engine })
566
- if (existsSync(oldContainerPath)) {
567
- await this.atomicMoveDirectory(oldContainerPath, newContainerPath)
568
- }
569
-
570
- // Now update registry - remove old entry and add new one with updated name
571
- await duckdbRegistry.remove(oldName)
572
- await duckdbRegistry.add({
573
- name: newName,
574
- filePath: entry.filePath,
575
- created: entry.created,
576
- lastVerified: entry.lastVerified,
577
- })
578
-
579
- // Return updated config
580
- return {
581
- ...sourceConfig,
582
- name: newName,
583
- }
584
- }
585
-
586
- // Server databases: check container is not running
587
- const running = await processManager.isRunning(oldName, { engine })
588
- if (running) {
589
- throw new Error(`Container "${oldName}" is running. Stop it first`)
590
- }
591
-
592
- // Rename directory
593
- const oldPath = paths.getContainerPath(oldName, { engine })
594
- const newPath = paths.getContainerPath(newName, { engine })
595
-
596
- await this.atomicMoveDirectory(oldPath, newPath)
597
-
598
- // Update config with new name
599
- const config = await this.getConfig(newName, { engine })
600
- if (!config) {
601
- throw new Error('Failed to read renamed container config')
602
- }
603
-
604
- config.name = newName
605
- await this.saveConfig(newName, { engine }, config)
606
-
607
- // ClickHouse stores absolute paths in config.xml - regenerate with new paths
608
- if (engine === Engine.ClickHouse) {
609
- const clickhouseEngine = getEngine(Engine.ClickHouse)
610
- if ('regenerateConfig' in clickhouseEngine) {
611
- await (
612
- clickhouseEngine as {
613
- regenerateConfig: (name: string, port: number) => Promise<void>
614
- }
615
- ).regenerateConfig(newName, config.port)
616
- }
617
- }
618
-
619
- return config
620
- }
621
-
622
- // Moves a directory atomically when possible (same filesystem).
623
- // Falls back to copy+delete for cross-filesystem moves.
624
- // On Windows, retries on EBUSY errors (file handles held after process termination).
625
- // Windows can hold file locks for 120+ seconds due to:
626
- // - Antivirus software scanning
627
- // - Windows Search indexer
628
- // - Memory-mapped files (SurrealDB's SurrealKV, QuestDB's columnar storage)
629
- // - Java JVM file handle cleanup (QuestDB)
630
- private async atomicMoveDirectory(
631
- sourcePath: string,
632
- targetPath: string,
633
- ): Promise<void> {
634
- const maxRetries = isWindows() ? 90 : 1 // 90 retries × 2s = 180 seconds max
635
- const retryDelay = 2000 // 2 seconds between retries
636
-
637
- for (let attempt = 1; attempt <= maxRetries; attempt++) {
638
- try {
639
- // Try atomic rename first (only works on same filesystem)
640
- await fsRename(sourcePath, targetPath)
641
- return // Success
642
- } catch (error) {
643
- const e = error as NodeJS.ErrnoException
644
- if (e.code === 'EXDEV') {
645
- // Cross-filesystem move - fall back to copy+delete
646
- await cp(sourcePath, targetPath, { recursive: true })
647
- try {
648
- await rm(sourcePath, { recursive: true, force: true })
649
- } catch {
650
- // If delete fails after copy, we have duplicates
651
- // Try to clean up the target to avoid inconsistency
652
- await rm(targetPath, { recursive: true, force: true }).catch(
653
- () => {},
654
- )
655
- throw new Error(
656
- `Failed to complete move: source and target may both exist. ` +
657
- `Please manually remove one of: ${sourcePath} or ${targetPath}`,
658
- )
659
- }
660
- return // Success
661
- } else if (e.code === 'EBUSY' && attempt < maxRetries) {
662
- // Windows: file handles may still be held - retry after delay
663
- logDebug(
664
- `EBUSY on rename attempt ${attempt}/${maxRetries}, retrying in ${retryDelay}ms...`,
665
- )
666
- await new Promise((resolve) => setTimeout(resolve, retryDelay))
667
- } else {
668
- throw error
669
- }
670
- }
671
- }
672
- }
673
-
674
- isValidName(name: string): boolean {
675
- return /^[a-zA-Z][a-zA-Z0-9_-]*$/.test(name)
676
- }
677
-
678
- async addDatabase(containerName: string, database: string): Promise<void> {
679
- const config = await this.getConfig(containerName)
680
- if (!config) {
681
- throw new Error(`Container "${containerName}" not found`)
682
- }
683
-
684
- // Ensure databases array exists
685
- if (!config.databases) {
686
- config.databases = [config.database]
687
- }
688
-
689
- // Add if not already present
690
- if (!config.databases.includes(database)) {
691
- config.databases.push(database)
692
- await this.saveConfig(containerName, { engine: config.engine }, config)
693
- }
694
- }
695
-
696
- async removeDatabase(containerName: string, database: string): Promise<void> {
697
- const config = await this.getConfig(containerName)
698
- if (!config) {
699
- throw new Error(`Container "${containerName}" not found`)
700
- }
701
-
702
- // Don't remove the primary database from the array
703
- if (database === config.database) {
704
- throw new Error(
705
- `Cannot remove primary database "${database}" from tracking`,
706
- )
707
- }
708
-
709
- if (config.databases) {
710
- config.databases = config.databases.filter((db) => db !== database)
711
- await this.saveConfig(containerName, { engine: config.engine }, config)
712
- }
713
- }
714
-
715
- /**
716
- * Sync the databases array with the actual databases on the server.
717
- * Queries the database server for all user databases and updates the registry.
718
- *
719
- * @param containerName - The container to sync
720
- * @returns The updated list of databases
721
- * @throws Error if the container is not running or doesn't support listing databases
722
- */
723
- async syncDatabases(containerName: string): Promise<string[]> {
724
- const config = await this.getConfig(containerName)
725
- if (!config) {
726
- throw new Error(`Container "${containerName}" not found`)
727
- }
728
-
729
- // File-based engines don't have multiple databases to sync
730
- if (isFileBasedEngine(config.engine)) {
731
- return config.databases || [config.database]
732
- }
733
-
734
- // Container must be running to query databases
735
- const running = await processManager.isRunning(containerName, {
736
- engine: config.engine,
737
- })
738
- if (!running) {
739
- throw new Error(
740
- `Container "${containerName}" is not running. Start it first to sync databases.`,
741
- )
742
- }
743
-
744
- const engine = getEngine(config.engine)
745
-
746
- // Query the actual database server for all databases
747
- let actualDatabases: string[]
748
- try {
749
- actualDatabases = await engine.listDatabases(config)
750
- } catch (error) {
751
- // If the engine doesn't support listDatabases, return current registry
752
- if (error instanceof UnsupportedOperationError) {
753
- logDebug(
754
- `listDatabases not supported for ${config.engine}, skipping sync`,
755
- )
756
- return config.databases || [config.database]
757
- }
758
- throw error
759
- }
760
-
761
- // Ensure primary database is always included
762
- if (!actualDatabases.includes(config.database)) {
763
- actualDatabases = [config.database, ...actualDatabases]
764
- }
765
-
766
- // Sort for consistent ordering (primary database first, then alphabetical)
767
- const sortedDatabases = [
768
- config.database,
769
- ...actualDatabases
770
- .filter((db) => db !== config.database)
771
- .sort((a, b) => a.localeCompare(b)),
772
- ]
773
-
774
- // Update the registry
775
- config.databases = sortedDatabases
776
- await this.saveConfig(containerName, { engine: config.engine }, config)
777
-
778
- return sortedDatabases
779
- }
780
-
781
- getConnectionString(config: ContainerConfig, database?: string): string {
782
- const engine = getEngine(config.engine)
783
- return engine.getConnectionString(config, database)
784
- }
785
- }
786
-
787
- export const containerManager = new ContainerManager()