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,1118 +0,0 @@
1
- /**
2
- * MongoDB Engine implementation
3
- * Manages MongoDB database containers using hostdb-downloaded binaries
4
- */
5
-
6
- import { spawn, exec, type SpawnOptions } from 'child_process'
7
- import { promisify } from 'util'
8
- import { existsSync } from 'fs'
9
- import net from 'net'
10
- import { mkdir, writeFile, readFile, unlink } from 'fs/promises'
11
- import { join, basename } from 'path'
12
- import { BaseEngine } from '../base-engine'
13
- import { paths } from '../../config/paths'
14
- import { getEngineDefaults } from '../../config/defaults'
15
- import { platformService, isWindows } from '../../core/platform-service'
16
- import { configManager } from '../../core/config-manager'
17
- import {
18
- logDebug,
19
- logWarning,
20
- assertValidDatabaseName,
21
- assertValidUsername,
22
- } from '../../core/error-handler'
23
- import { processManager } from '../../core/process-manager'
24
- import { mongodbBinaryManager } from './binary-manager'
25
- import { SUPPORTED_MAJOR_VERSIONS, FALLBACK_VERSION_MAP } from './version-maps'
26
- import { getBinaryUrl } from './binary-urls'
27
- import {
28
- detectBackupFormat as detectBackupFormatImpl,
29
- restoreBackup,
30
- parseConnectionString,
31
- } from './restore'
32
- import { createBackup } from './backup'
33
- import { getMongodumpPath, MONGODUMP_NOT_FOUND_ERROR } from './cli-utils'
34
- import {
35
- Platform,
36
- type Arch,
37
- type ContainerConfig,
38
- type ProgressCallback,
39
- type BackupFormat,
40
- type BackupOptions,
41
- type BackupResult,
42
- type RestoreResult,
43
- type DumpResult,
44
- type StatusResult,
45
- type QueryResult,
46
- type QueryOptions,
47
- type CreateUserOptions,
48
- type UserCredentials,
49
- } from '../../types'
50
- import { parseMongoDBResult } from '../../core/query-parser'
51
-
52
- const execAsync = promisify(exec)
53
-
54
- const ENGINE = 'mongodb'
55
- const engineDef = getEngineDefaults(ENGINE)
56
-
57
- // Build a mongosh command for inline JavaScript execution
58
- export function buildMongoshCommand(
59
- mongoshPath: string,
60
- port: number,
61
- database: string,
62
- script: string,
63
- options?: { quiet?: boolean },
64
- ): string {
65
- const quietFlag = options?.quiet ? ' --quiet' : ''
66
- if (isWindows()) {
67
- // Windows: use double quotes
68
- const escaped = script.replace(/"/g, '\\"')
69
- return `"${mongoshPath}" --host 127.0.0.1 --port ${port} ${database}${quietFlag} --eval "${escaped}"`
70
- } else {
71
- // Unix: use single quotes
72
- const escaped = script.replace(/'/g, "'\\''")
73
- return `"${mongoshPath}" --host 127.0.0.1 --port ${port} ${database}${quietFlag} --eval '${escaped}'`
74
- }
75
- }
76
-
77
- /**
78
- * Extract JSON from mongosh output that may contain extra messages/prompts
79
- * Returns the parsed JSON or null if extraction fails
80
- */
81
- function extractJson(output: string): unknown | null {
82
- const trimmed = output.trim()
83
-
84
- // Find the first '{' and last '}' to extract JSON object
85
- const firstBrace = trimmed.indexOf('{')
86
- const lastBrace = trimmed.lastIndexOf('}')
87
-
88
- if (firstBrace === -1 || lastBrace === -1 || lastBrace <= firstBrace) {
89
- return null
90
- }
91
-
92
- try {
93
- return JSON.parse(trimmed.substring(firstBrace, lastBrace + 1))
94
- } catch {
95
- return null
96
- }
97
- }
98
-
99
- export class MongoDBEngine extends BaseEngine {
100
- name = ENGINE
101
- displayName = 'MongoDB'
102
- defaultPort = engineDef.defaultPort
103
- supportedVersions = SUPPORTED_MAJOR_VERSIONS
104
-
105
- // Get the current platform and architecture
106
- getPlatformInfo(): { platform: Platform; arch: Arch } {
107
- return platformService.getPlatformInfo()
108
- }
109
-
110
- /**
111
- * Returns available MongoDB versions from the fallback version map.
112
- *
113
- * Note: This returns cached/fallback data from FALLBACK_VERSION_MAP and does not
114
- * perform network I/O. This matches the behavior of other engines that maintain
115
- * a static version map synchronized with hostdb releases.json.
116
- */
117
- async fetchAvailableVersions(): Promise<Record<string, string[]>> {
118
- const versions: Record<string, string[]> = {}
119
-
120
- for (const [majorMinor, full] of Object.entries(FALLBACK_VERSION_MAP)) {
121
- versions[majorMinor] = [full]
122
- }
123
-
124
- return versions
125
- }
126
-
127
- // Get binary download URL from hostdb
128
- getBinaryUrl(version: string, platform: Platform, arch: Arch): string {
129
- return getBinaryUrl(version, platform, arch)
130
- }
131
-
132
- // Resolves version string to full version (e.g., '8' -> '8.0.17')
133
- resolveFullVersion(version: string): string {
134
- // Check if already a full version (has at least two dots)
135
- if (/^\d+\.\d+\.\d+$/.test(version)) {
136
- return version
137
- }
138
- // It's a major or major.minor version, resolve using fallback map
139
- return FALLBACK_VERSION_MAP[version] || `${version}.0.0`
140
- }
141
-
142
- // Get the path where binaries for a version would be installed
143
- getBinaryPath(version: string): string {
144
- const fullVersion = this.resolveFullVersion(version)
145
- const { platform: p, arch: a } = this.getPlatformInfo()
146
- return paths.getBinaryPath({
147
- engine: 'mongodb',
148
- version: fullVersion,
149
- platform: p,
150
- arch: a,
151
- })
152
- }
153
-
154
- /**
155
- * Verify that MongoDB binaries are available and functional
156
- *
157
- * Delegates to mongodbBinaryManager.verify() which:
158
- * 1. Checks file existence
159
- * 2. Executes `mongod --version`
160
- * 3. Validates version output matches expected version
161
- *
162
- * @param binPath - Path to MongoDB binary directory (e.g., ~/.spindb/bin/mongodb-8.0.17-darwin-arm64)
163
- * @param version - Optional explicit version to verify against
164
- */
165
- async verifyBinary(binPath: string, version?: string): Promise<boolean> {
166
- const { platform: p, arch: a } = this.getPlatformInfo()
167
-
168
- // Use explicit version if provided
169
- if (version) {
170
- return mongodbBinaryManager.verify(version, p, a)
171
- }
172
-
173
- // Fallback: extract version from directory name (format: mongodb-{version}-{platform}-{arch})
174
- // Use basename to avoid issues with dashes in parent directory names
175
- const dirName = basename(binPath)
176
- const match = dirName.match(/^mongodb-([\d.]+)-/)
177
- if (match) {
178
- const extractedVersion = match[1]
179
- return mongodbBinaryManager.verify(extractedVersion, p, a)
180
- }
181
-
182
- // Last resort: just check file existence
183
- const ext = platformService.getExecutableExtension()
184
- const mongodPath = join(binPath, 'bin', `mongod${ext}`)
185
- return existsSync(mongodPath)
186
- }
187
-
188
- // Check if a specific MongoDB version is installed
189
- async isBinaryInstalled(version: string): Promise<boolean> {
190
- const { platform, arch } = this.getPlatformInfo()
191
- return mongodbBinaryManager.isInstalled(version, platform, arch)
192
- }
193
-
194
- /**
195
- * Ensure MongoDB binaries are available for a specific version
196
- * Downloads from hostdb for all platforms
197
- */
198
- async ensureBinaries(
199
- version: string,
200
- onProgress?: ProgressCallback,
201
- ): Promise<string> {
202
- const { platform, arch } = this.getPlatformInfo()
203
-
204
- // Download from hostdb
205
- const binPath = await mongodbBinaryManager.ensureInstalled(
206
- version,
207
- platform,
208
- arch,
209
- onProgress,
210
- )
211
-
212
- // Register binaries in config (includes server + client tools)
213
- const ext = platformService.getExecutableExtension()
214
- const bundledTools = [
215
- 'mongod', // server
216
- 'mongosh', // shell client
217
- 'mongodump', // backup utility
218
- 'mongorestore', // restore utility
219
- ] as const
220
-
221
- for (const tool of bundledTools) {
222
- const toolPath = join(binPath, 'bin', `${tool}${ext}`)
223
- if (existsSync(toolPath)) {
224
- await configManager.setBinaryPath(tool, toolPath, 'bundled')
225
- }
226
- }
227
-
228
- return binPath
229
- }
230
-
231
- /**
232
- * Initialize a new MongoDB data directory
233
- * Unlike MySQL, MongoDB doesn't require initialization - just create the directory
234
- */
235
- async initDataDir(
236
- containerName: string,
237
- _version: string,
238
- _options: Record<string, unknown> = {},
239
- ): Promise<string> {
240
- const dataDir = paths.getContainerDataPath(containerName, {
241
- engine: ENGINE,
242
- })
243
-
244
- // Create data directory if it doesn't exist
245
- if (!existsSync(dataDir)) {
246
- await mkdir(dataDir, { recursive: true })
247
- logDebug(`Created MongoDB data directory: ${dataDir}`)
248
- }
249
-
250
- return dataDir
251
- }
252
-
253
- /**
254
- * Start MongoDB server
255
- * CLI wrapper: mongod --dbpath {dir} --port {port} --bind_ip 127.0.0.1
256
- */
257
- async start(
258
- container: ContainerConfig,
259
- onProgress?: ProgressCallback,
260
- ): Promise<{ port: number; connectionString: string }> {
261
- const { name, port, version, binaryPath } = container
262
-
263
- // Check if already running (idempotent behavior)
264
- const alreadyRunning = await processManager.isRunning(name, {
265
- engine: ENGINE,
266
- })
267
- if (alreadyRunning) {
268
- return {
269
- port,
270
- connectionString: this.getConnectionString(container),
271
- }
272
- }
273
-
274
- // Use stored binary path if available (from container creation)
275
- // This ensures version consistency - the container uses the same binary it was created with
276
- let mongod: string | null = null
277
-
278
- if (binaryPath && existsSync(binaryPath)) {
279
- // binaryPath is the directory (e.g., ~/.spindb/bin/mongodb-8.0.17-linux-arm64)
280
- // We need to construct the full path to mongod
281
- const ext = platformService.getExecutableExtension()
282
- const serverPath = join(binaryPath, 'bin', `mongod${ext}`)
283
- if (existsSync(serverPath)) {
284
- mongod = serverPath
285
- logDebug(`Using stored binary path: ${mongod}`)
286
- }
287
- }
288
-
289
- // If we didn't find the binary above, fall back to normal path
290
- if (!mongod) {
291
- // Get mongod from config or download if needed
292
- const mongodPath = await configManager.getBinaryPath('mongod')
293
- if (mongodPath && existsSync(mongodPath)) {
294
- mongod = mongodPath
295
- logDebug(`Using registered binary path: ${mongod}`)
296
- } else {
297
- // Try to ensure binaries are available
298
- const binPath = await this.ensureBinaries(version, onProgress)
299
- const ext = platformService.getExecutableExtension()
300
- mongod = join(binPath, 'bin', `mongod${ext}`)
301
-
302
- if (!existsSync(mongod)) {
303
- throw new Error(
304
- `MongoDB ${version} is not installed. ` +
305
- `Run: spindb engines download mongodb ${version}`,
306
- )
307
- }
308
- }
309
- }
310
-
311
- logDebug(`Using mongod for version ${version}: ${mongod}`)
312
-
313
- const dataDir = paths.getContainerDataPath(name, { engine: ENGINE })
314
- const logFile = paths.getContainerLogPath(name, { engine: ENGINE })
315
- const containerDir = paths.getContainerPath(name, { engine: ENGINE })
316
- const pidFile = join(containerDir, 'mongod.pid')
317
-
318
- onProgress?.({ stage: 'starting', message: 'Starting MongoDB...' })
319
-
320
- const args = [
321
- '--dbpath',
322
- dataDir,
323
- '--port',
324
- String(port),
325
- '--bind_ip',
326
- '127.0.0.1',
327
- '--logpath',
328
- logFile,
329
- '--logappend',
330
- ]
331
-
332
- // Note: --fork is not supported on macOS (Sonoma+), so we use detached spawn
333
- // for both macOS and Windows. Only Linux still supports --fork.
334
- const { platform } = platformService.getPlatformInfo()
335
- const useDetachedSpawn =
336
- platform === Platform.Win32 || platform === Platform.Darwin
337
-
338
- if (!useDetachedSpawn) {
339
- // Linux: can use --fork for native daemonization
340
- args.push('--fork')
341
- }
342
-
343
- logDebug(`Starting mongod with args: ${args.join(' ')}`)
344
-
345
- if (useDetachedSpawn) {
346
- // macOS/Windows: spawn detached process
347
- const spawnOpts: SpawnOptions = {
348
- stdio: ['ignore', 'pipe', 'pipe'],
349
- detached: true,
350
- }
351
- if (isWindows()) {
352
- spawnOpts.windowsHide = true
353
- }
354
-
355
- const proc = spawn(mongod, args, spawnOpts)
356
-
357
- proc.stdout?.on('data', (data: Buffer) => {
358
- logDebug(`mongod stdout: ${data.toString()}`)
359
- })
360
- proc.stderr?.on('data', (data: Buffer) => {
361
- logDebug(`mongod stderr: ${data.toString()}`)
362
- })
363
-
364
- proc.unref()
365
-
366
- // Write PID file
367
- if (proc.pid) {
368
- await writeFile(pidFile, String(proc.pid))
369
- }
370
- } else {
371
- // Linux: mongod --fork handles daemonization itself
372
- return new Promise((resolve, reject) => {
373
- const proc = spawn(mongod, args, {
374
- stdio: ['ignore', 'pipe', 'pipe'],
375
- })
376
-
377
- let stdout = ''
378
- let stderr = ''
379
-
380
- proc.stdout?.on('data', (data: Buffer) => {
381
- stdout += data.toString()
382
- })
383
- proc.stderr?.on('data', (data: Buffer) => {
384
- stderr += data.toString()
385
- })
386
-
387
- proc.on('close', async (code) => {
388
- if (code === 0) {
389
- // MongoDB forked successfully, now wait for it to be ready
390
- const ready = await this.waitForReady(port)
391
- if (ready) {
392
- // Read PID from lock file
393
- const lockFile = join(dataDir, 'mongod.lock')
394
- try {
395
- const pid = await readFile(lockFile, 'utf8')
396
- await writeFile(pidFile, pid.trim())
397
- } catch {
398
- // Lock file might not exist yet
399
- }
400
- resolve({
401
- port,
402
- connectionString: this.getConnectionString(container),
403
- })
404
- } else {
405
- reject(new Error('MongoDB failed to start within timeout'))
406
- }
407
- } else {
408
- reject(
409
- new Error(stderr || stdout || `mongod exited with code ${code}`),
410
- )
411
- }
412
- })
413
-
414
- proc.on('error', reject)
415
- })
416
- }
417
-
418
- // Wait for MongoDB to be ready (Windows path)
419
- const ready = await this.waitForReady(port)
420
- if (!ready) {
421
- throw new Error('MongoDB failed to start within timeout')
422
- }
423
-
424
- return {
425
- port,
426
- connectionString: this.getConnectionString(container),
427
- }
428
- }
429
-
430
- // Check if a TCP port is accepting connections
431
- private checkPortOpen(port: number): Promise<boolean> {
432
- return new Promise((resolve) => {
433
- const socket = new net.Socket()
434
- socket.setTimeout(1000)
435
- socket.once('connect', () => {
436
- socket.destroy()
437
- resolve(true)
438
- })
439
- socket.once('error', () => {
440
- socket.destroy()
441
- resolve(false)
442
- })
443
- socket.once('timeout', () => {
444
- socket.destroy()
445
- resolve(false)
446
- })
447
- socket.connect(port, '127.0.0.1')
448
- })
449
- }
450
-
451
- /**
452
- * Wait for MongoDB to be ready to accept connections
453
- *
454
- * Uses two strategies depending on tool availability:
455
- * 1. **Preferred (mongosh available)**: Executes `db.runCommand({ping:1})` via mongosh
456
- * to verify MongoDB is fully operational and responding to commands.
457
- * 2. **Fallback (mongosh unavailable)**: Uses TCP port check via checkPortOpen().
458
- * TCP connectivity is a less thorough check than a mongosh ping - it only confirms
459
- * the port is accepting connections, not that MongoDB is fully initialized and
460
- * ready to process queries. However, for local development containers this is
461
- * acceptable since MongoDB typically accepts connections shortly after becoming
462
- * ready, and this avoids requiring mongosh to be installed.
463
- */
464
- private async waitForReady(
465
- port: number,
466
- timeoutMs = 30000,
467
- ): Promise<boolean> {
468
- const startTime = Date.now()
469
- const checkInterval = 500
470
-
471
- const mongosh = await configManager.getBinaryPath('mongosh')
472
- if (!mongosh) {
473
- // Fallback: TCP port check when mongosh is unavailable
474
- // Less thorough than db.runCommand({ping:1}) but sufficient for local dev containers
475
- logDebug(
476
- `mongosh not found, using TCP port check for MongoDB on port ${port}`,
477
- )
478
- while (Date.now() - startTime < timeoutMs) {
479
- const isOpen = await this.checkPortOpen(port)
480
- if (isOpen) return true
481
- await new Promise((r) => setTimeout(r, checkInterval))
482
- }
483
- return false
484
- }
485
-
486
- while (Date.now() - startTime < timeoutMs) {
487
- try {
488
- const cmd = buildMongoshCommand(
489
- mongosh,
490
- port,
491
- 'admin',
492
- 'db.runCommand({ping:1})',
493
- { quiet: true },
494
- )
495
- await execAsync(cmd, { timeout: 5000 })
496
- return true
497
- } catch {
498
- await new Promise((resolve) => setTimeout(resolve, checkInterval))
499
- }
500
- }
501
-
502
- return false
503
- }
504
-
505
- /**
506
- * Stop MongoDB server
507
- * Uses db.adminCommand({shutdown:1}) via mongosh or SIGTERM
508
- */
509
- async stop(container: ContainerConfig): Promise<void> {
510
- const { name, port } = container
511
- const containerDir = paths.getContainerPath(name, { engine: ENGINE })
512
- const dataDir = paths.getContainerDataPath(name, { engine: ENGINE })
513
- const pidFile = join(containerDir, 'mongod.pid')
514
- const lockFile = join(dataDir, 'mongod.lock')
515
-
516
- logDebug(`Stopping MongoDB container "${name}" on port ${port}`)
517
-
518
- // Try graceful shutdown via mongosh
519
- const mongosh = await configManager.getBinaryPath('mongosh')
520
- if (mongosh) {
521
- try {
522
- const cmd = buildMongoshCommand(
523
- mongosh,
524
- port,
525
- 'admin',
526
- 'db.adminCommand({shutdown:1})',
527
- )
528
- await execAsync(cmd, { timeout: 10000 })
529
- logDebug('MongoDB shutdown command sent')
530
- // Wait a bit for process to exit
531
- await new Promise((resolve) => setTimeout(resolve, 2000))
532
- } catch (error) {
533
- logDebug(`mongosh shutdown failed: ${error}`)
534
- // Continue to PID-based shutdown
535
- }
536
- }
537
-
538
- // Get PID and force kill if needed
539
- let pid: number | null = null
540
-
541
- // Try PID file first
542
- if (existsSync(pidFile)) {
543
- try {
544
- const content = await readFile(pidFile, 'utf8')
545
- pid = parseInt(content.trim(), 10)
546
- } catch {
547
- // Ignore
548
- }
549
- }
550
-
551
- // Try lock file if no PID from pid file
552
- if (!pid && existsSync(lockFile)) {
553
- try {
554
- const content = await readFile(lockFile, 'utf8')
555
- const parsed = parseInt(content.trim(), 10)
556
- if (!isNaN(parsed) && parsed > 0) {
557
- pid = parsed
558
- }
559
- } catch {
560
- // Ignore
561
- }
562
- }
563
-
564
- // Kill process if still running
565
- if (pid && platformService.isProcessRunning(pid)) {
566
- logDebug(`Killing MongoDB process ${pid}`)
567
- try {
568
- await platformService.terminateProcess(pid, false)
569
- await new Promise((resolve) => setTimeout(resolve, 2000))
570
-
571
- if (platformService.isProcessRunning(pid)) {
572
- logWarning(`Graceful termination failed, force killing ${pid}`)
573
- await platformService.terminateProcess(pid, true)
574
- }
575
- } catch (error) {
576
- logDebug(`Process termination error: ${error}`)
577
- }
578
- }
579
-
580
- // Cleanup PID file
581
- if (existsSync(pidFile)) {
582
- try {
583
- await unlink(pidFile)
584
- } catch {
585
- // Ignore
586
- }
587
- }
588
-
589
- logDebug('MongoDB stopped')
590
- }
591
-
592
- // Get MongoDB server status
593
- async status(container: ContainerConfig): Promise<StatusResult> {
594
- const { name, port } = container
595
- const containerDir = paths.getContainerPath(name, { engine: ENGINE })
596
- const dataDir = paths.getContainerDataPath(name, { engine: ENGINE })
597
- const pidFile = join(containerDir, 'mongod.pid')
598
- const lockFile = join(dataDir, 'mongod.lock')
599
-
600
- // Try pinging with mongosh
601
- const mongosh = await configManager.getBinaryPath('mongosh')
602
- if (mongosh) {
603
- try {
604
- const cmd = buildMongoshCommand(
605
- mongosh,
606
- port,
607
- 'admin',
608
- 'db.runCommand({ping:1})',
609
- { quiet: true },
610
- )
611
- await execAsync(cmd, { timeout: 5000 })
612
- return { running: true, message: 'MongoDB is running' }
613
- } catch {
614
- // Not responding, check PID
615
- }
616
- }
617
-
618
- // Check PID file
619
- for (const file of [pidFile, lockFile]) {
620
- if (existsSync(file)) {
621
- try {
622
- const content = await readFile(file, 'utf8')
623
- const pid = parseInt(content.trim(), 10)
624
- if (!isNaN(pid) && pid > 0 && platformService.isProcessRunning(pid)) {
625
- return {
626
- running: true,
627
- message: `MongoDB is running (PID: ${pid})`,
628
- }
629
- }
630
- } catch {
631
- // Ignore
632
- }
633
- }
634
- }
635
-
636
- return { running: false, message: 'MongoDB is not running' }
637
- }
638
-
639
- // Detect backup format
640
- async detectBackupFormat(filePath: string): Promise<BackupFormat> {
641
- return detectBackupFormatImpl(filePath)
642
- }
643
-
644
- // Restore a backup
645
- async restore(
646
- container: ContainerConfig,
647
- backupPath: string,
648
- options: Record<string, unknown> = {},
649
- ): Promise<RestoreResult> {
650
- const { port, version } = container
651
- const database = (options.database as string) || container.database
652
-
653
- return restoreBackup(backupPath, {
654
- port,
655
- database,
656
- drop: options.drop !== false,
657
- validateVersion: options.validateVersion !== false,
658
- containerVersion: version,
659
- })
660
- }
661
-
662
- // Get connection string
663
- getConnectionString(container: ContainerConfig, database?: string): string {
664
- const { port } = container
665
- const db = database || container.database || 'test'
666
- return `mongodb://127.0.0.1:${port}/${db}`
667
- }
668
-
669
- // Get path to mongosh
670
- override async getMongoshPath(): Promise<string> {
671
- const cached = await configManager.getBinaryPath('mongosh')
672
- if (cached && existsSync(cached)) return cached
673
-
674
- // Try to find in PATH as fallback
675
- const detected = await platformService.findToolPath('mongosh')
676
- if (detected) {
677
- await configManager.setBinaryPath('mongosh', detected, 'system')
678
- return detected
679
- }
680
-
681
- throw new Error(
682
- 'mongosh not found. Download MongoDB binaries:\n' +
683
- ' Run: spindb engines download mongodb <version>\n' +
684
- ' Or install mongosh from: https://www.mongodb.com/try/download/shell',
685
- )
686
- }
687
-
688
- // Open mongosh interactive shell
689
- async connect(container: ContainerConfig, database?: string): Promise<void> {
690
- const { port } = container
691
- const db = database || container.database || 'test'
692
-
693
- const mongosh = await this.getMongoshPath()
694
-
695
- // Note: Don't use shell mode - spawn handles paths with spaces correctly
696
- // when shell: false (the default). Shell mode breaks paths like "C:\Program Files\..."
697
- const spawnOptions: SpawnOptions = {
698
- stdio: 'inherit',
699
- }
700
-
701
- return new Promise((resolve, reject) => {
702
- const proc = spawn(
703
- mongosh,
704
- ['--host', '127.0.0.1', '--port', String(port), db],
705
- spawnOptions,
706
- )
707
-
708
- proc.on('error', reject)
709
- proc.on('close', () => resolve())
710
- })
711
- }
712
-
713
- /**
714
- * Create a new database
715
- * MongoDB creates databases implicitly when you first write to them.
716
- * To force immediate creation, we create a temporary collection and drop it.
717
- * This leaves the database visible in tools without any marker clutter.
718
- */
719
- async createDatabase(
720
- container: ContainerConfig,
721
- database: string,
722
- ): Promise<void> {
723
- assertValidDatabaseName(database)
724
- const { port } = container
725
-
726
- const mongosh = await this.getMongoshPath()
727
-
728
- // MongoDB creates databases implicitly when you write to them.
729
- // Create a temp collection then immediately drop it to force database creation
730
- // without leaving any visible marker collections.
731
- // First drop any existing _spindb_init collection (ignore errors), then create and drop.
732
- // This ensures cleanup even if a previous createDatabase was interrupted.
733
- // NOTE: Use db.getCollection() instead of db._spindb_init shorthand because
734
- // mongosh doesn't support shorthand notation for collection names starting with underscore.
735
- const cmd = buildMongoshCommand(
736
- mongosh,
737
- port,
738
- database,
739
- 'try { db.getCollection("_spindb_init").drop(); } catch(e) {} db.createCollection("_spindb_init"); db.getCollection("_spindb_init").drop();',
740
- )
741
-
742
- await execAsync(cmd, { timeout: 10000 })
743
- }
744
-
745
- // Drop a database
746
- async dropDatabase(
747
- container: ContainerConfig,
748
- database: string,
749
- ): Promise<void> {
750
- assertValidDatabaseName(database)
751
- const { port } = container
752
-
753
- const mongosh = await this.getMongoshPath()
754
-
755
- const cmd = buildMongoshCommand(
756
- mongosh,
757
- port,
758
- database,
759
- 'db.dropDatabase()',
760
- )
761
-
762
- try {
763
- await execAsync(cmd, { timeout: 10000 })
764
- } catch (error) {
765
- const err = error as Error
766
- // Ignore "database doesn't exist" scenarios
767
- logDebug(`dropDatabase result: ${err.message}`)
768
- }
769
- }
770
-
771
- // Get the size of the database in bytes
772
- async getDatabaseSize(container: ContainerConfig): Promise<number | null> {
773
- const { port, database } = container
774
- const db = database || 'test'
775
-
776
- try {
777
- const mongosh = await this.getMongoshPath()
778
- const cmd = buildMongoshCommand(
779
- mongosh,
780
- port,
781
- db,
782
- 'JSON.stringify(db.stats())',
783
- { quiet: true },
784
- )
785
-
786
- const { stdout } = await execAsync(cmd, { timeout: 10000 })
787
-
788
- // Defensively extract JSON from output (may contain extra messages)
789
- const stats = extractJson(stdout) as { dataSize?: number } | null
790
- return stats?.dataSize || null
791
- } catch {
792
- return null
793
- }
794
- }
795
-
796
- // Create a dump from a remote database
797
- async dumpFromConnectionString(
798
- connectionString: string,
799
- outputPath: string,
800
- ): Promise<DumpResult> {
801
- const mongodump = await getMongodumpPath()
802
- if (!mongodump) {
803
- throw new Error(MONGODUMP_NOT_FOUND_ERROR)
804
- }
805
-
806
- const parsed = parseConnectionString(connectionString)
807
-
808
- // Always use --uri to avoid exposing credentials as separate CLI arguments
809
- // The URI keeps credentials embedded (still visible in process listings,
810
- // but this is MongoDB's recommended approach and handles all edge cases)
811
- const args = [
812
- '--uri',
813
- connectionString,
814
- '--db',
815
- parsed.database,
816
- '--archive=' + outputPath,
817
- '--gzip',
818
- ]
819
-
820
- // Note: Don't use shell mode - spawn handles paths with spaces correctly
821
- // when shell: false (the default). Shell mode breaks paths like "C:\Program Files\..."
822
- const spawnOptions: SpawnOptions = {
823
- stdio: ['pipe', 'pipe', 'pipe'],
824
- }
825
-
826
- return new Promise((resolve, reject) => {
827
- const proc = spawn(mongodump, args, spawnOptions)
828
-
829
- let stdout = ''
830
- let stderr = ''
831
-
832
- proc.stdout?.on('data', (data: Buffer) => {
833
- stdout += data.toString()
834
- })
835
- proc.stderr?.on('data', (data: Buffer) => {
836
- stderr += data.toString()
837
- })
838
-
839
- proc.on('error', reject)
840
-
841
- proc.on('close', (code) => {
842
- if (code === 0) {
843
- resolve({
844
- filePath: outputPath,
845
- stdout,
846
- stderr,
847
- code,
848
- })
849
- } else {
850
- reject(new Error(stderr || `mongodump exited with code ${code}`))
851
- }
852
- })
853
- })
854
- }
855
-
856
- // Create a backup
857
- async backup(
858
- container: ContainerConfig,
859
- outputPath: string,
860
- options: BackupOptions,
861
- ): Promise<BackupResult> {
862
- return createBackup(container, outputPath, options)
863
- }
864
-
865
- // Run a JavaScript file or inline script against the database
866
- async runScript(
867
- container: ContainerConfig,
868
- options: { file?: string; sql?: string; database?: string },
869
- ): Promise<void> {
870
- const { port } = container
871
- const db = options.database || container.database || 'test'
872
-
873
- const mongosh = await this.getMongoshPath()
874
-
875
- if (options.file) {
876
- // Run script file
877
- // Note: Don't use shell mode here - spawn handles paths with spaces correctly
878
- // when shell: false (the default). Shell mode would require quoting the path.
879
- const spawnOptions: SpawnOptions = {
880
- stdio: 'inherit',
881
- }
882
-
883
- return new Promise((resolve, reject) => {
884
- const proc = spawn(
885
- mongosh,
886
- [
887
- '--host',
888
- '127.0.0.1',
889
- '--port',
890
- String(port),
891
- db,
892
- '--file',
893
- options.file!,
894
- ],
895
- spawnOptions,
896
- )
897
-
898
- proc.on('error', reject)
899
- proc.on('close', (code) => {
900
- if (code === 0) {
901
- resolve()
902
- } else {
903
- reject(new Error(`mongosh exited with code ${code}`))
904
- }
905
- })
906
- })
907
- } else if (options.sql) {
908
- // Run inline script (using sql field for compatibility, but it's actually JS)
909
- const cmd = buildMongoshCommand(mongosh, port, db, options.sql)
910
- const { stdout, stderr } = await execAsync(cmd, { timeout: 60000 })
911
- if (stdout) process.stdout.write(stdout)
912
- if (stderr) process.stderr.write(stderr)
913
- } else {
914
- throw new Error('Either file or sql option must be provided')
915
- }
916
- }
917
-
918
- async executeQuery(
919
- container: ContainerConfig,
920
- query: string,
921
- options?: QueryOptions,
922
- ): Promise<QueryResult> {
923
- const { port } = container
924
- const db = options?.database || container.database || 'test'
925
-
926
- const mongosh = await this.getMongoshPath()
927
-
928
- // Reject "use " shell helper - it doesn't work with JSON output
929
- const trimmedQuery = query.trim()
930
- if (trimmedQuery.toLowerCase().startsWith('use ')) {
931
- throw new Error(
932
- 'The "use" command is not supported in executeQuery. ' +
933
- 'To switch databases, set options.database or container.database instead.',
934
- )
935
- }
936
-
937
- // Auto-prepend db. if not already present for collection methods
938
- // But don't prepend for shell helper functions
939
- let script = trimmedQuery
940
- const shellFunctions = [
941
- 'print',
942
- 'printjson',
943
- 'sleep',
944
- 'ObjectId',
945
- 'ISODate',
946
- 'NumberLong',
947
- 'NumberInt',
948
- 'NumberDecimal',
949
- 'UUID',
950
- 'BinData',
951
- 'Timestamp',
952
- 'MinKey',
953
- 'MaxKey',
954
- ]
955
- const startsWithShellFunction = shellFunctions.some(
956
- (fn) => script.startsWith(`${fn}(`) || script.startsWith(`${fn} (`),
957
- )
958
- if (!script.startsWith('db.') && !startsWithShellFunction) {
959
- script = `db.${script}`
960
- }
961
-
962
- // Wrap in JSON.stringify for parseable output
963
- // Handle both toArray() results and single document results
964
- const wrappedScript = `JSON.stringify(${script})`
965
-
966
- const cmd = buildMongoshCommand(mongosh, port, db, wrappedScript, {
967
- quiet: true,
968
- })
969
-
970
- const { stdout, stderr } = await execAsync(cmd, { timeout: 60000 })
971
-
972
- if (stderr && !stdout.trim()) {
973
- throw new Error(`${stderr}${stdout ? `\nOutput: ${stdout}` : ''}`)
974
- }
975
-
976
- // Extract JSON from output (mongosh may include extra output)
977
- const jsonMatch = stdout.match(/\[[\s\S]*\]|\{[\s\S]*\}/)
978
- if (!jsonMatch) {
979
- // Handle scalar results
980
- return {
981
- columns: ['result'],
982
- rows: [{ result: stdout.trim() }],
983
- rowCount: 1,
984
- }
985
- }
986
-
987
- return parseMongoDBResult(jsonMatch[0])
988
- }
989
-
990
- /**
991
- * List all user databases, excluding system databases (admin, config, local).
992
- */
993
- async listDatabases(container: ContainerConfig): Promise<string[]> {
994
- const { port } = container
995
- const mongosh = await this.getMongoshPath()
996
-
997
- return new Promise((resolve, reject) => {
998
- // Use JSON output for reliable parsing
999
- const script = `JSON.stringify(db.adminCommand({listDatabases: 1}).databases.map(d => d.name))`
1000
- const args = ['--quiet', '--host', `127.0.0.1:${port}`, '--eval', script]
1001
-
1002
- const proc = spawn(mongosh, args, {
1003
- stdio: ['ignore', 'pipe', 'pipe'],
1004
- })
1005
-
1006
- let stdout = ''
1007
- let stderr = ''
1008
-
1009
- proc.stdout?.on('data', (data: Buffer) => {
1010
- stdout += data.toString()
1011
- })
1012
- proc.stderr?.on('data', (data: Buffer) => {
1013
- stderr += data.toString()
1014
- })
1015
-
1016
- proc.on('error', reject)
1017
-
1018
- proc.on('close', (code) => {
1019
- if (code !== 0) {
1020
- reject(new Error(stderr || `mongosh exited with code ${code}`))
1021
- return
1022
- }
1023
-
1024
- try {
1025
- const allDatabases = JSON.parse(stdout.trim()) as string[]
1026
- const systemDatabases = ['admin', 'config', 'local']
1027
- const databases = allDatabases.filter(
1028
- (db) => !systemDatabases.includes(db),
1029
- )
1030
- resolve(databases)
1031
- } catch (error) {
1032
- reject(new Error(`Failed to parse database list: ${error}`))
1033
- }
1034
- })
1035
- })
1036
- }
1037
-
1038
- async createUser(
1039
- container: ContainerConfig,
1040
- options: CreateUserOptions,
1041
- ): Promise<UserCredentials> {
1042
- const { username, password, database } = options
1043
- assertValidUsername(username)
1044
- const { port } = container
1045
- const db = database || container.database || 'admin'
1046
- assertValidDatabaseName(db)
1047
- const mongosh = await this.getMongoshPath()
1048
-
1049
- // Create user with readWrite role on the target database
1050
- // Auth is not enforced (no --auth flag) but user is still created
1051
- // Use JSON.stringify for password to safely escape all special characters in JS context
1052
- // Pass script via stdin to avoid exposing passwords in process listings
1053
- const jsonPwd = JSON.stringify(password)
1054
- const script = `db.getSiblingDB('${db}').createUser({user:'${username}',pwd:${jsonPwd},roles:[{role:'readWrite',db:'${db}'}]})`
1055
-
1056
- const mongoshArgs = ['--host', '127.0.0.1', '--port', String(port), 'admin']
1057
-
1058
- const runMongoshViaStdin = (js: string): Promise<void> =>
1059
- new Promise((resolve, reject) => {
1060
- const proc = spawn(mongosh, mongoshArgs, {
1061
- stdio: ['pipe', 'pipe', 'pipe'],
1062
- })
1063
-
1064
- let stderr = ''
1065
- proc.stderr?.on('data', (data: Buffer) => {
1066
- stderr += data.toString()
1067
- })
1068
-
1069
- const timeout = setTimeout(() => {
1070
- proc.kill('SIGTERM')
1071
- reject(new Error('mongosh timed out after 10 seconds'))
1072
- }, 10000)
1073
-
1074
- proc.on('error', (err) => {
1075
- clearTimeout(timeout)
1076
- reject(err)
1077
- })
1078
-
1079
- proc.on('close', (code) => {
1080
- clearTimeout(timeout)
1081
- if (code === 0) resolve()
1082
- else reject(new Error(stderr || `mongosh exited with code ${code}`))
1083
- })
1084
-
1085
- proc.stdin?.write(js)
1086
- proc.stdin?.end()
1087
- })
1088
-
1089
- try {
1090
- await runMongoshViaStdin(script)
1091
- } catch (error) {
1092
- const err = error as Error
1093
- if (
1094
- err.message.includes('51003') ||
1095
- err.message.includes('already exists')
1096
- ) {
1097
- // User exists — update password instead
1098
- const updateScript = `db.getSiblingDB('${db}').updateUser('${username}',{pwd:${jsonPwd}})`
1099
- await runMongoshViaStdin(updateScript)
1100
- } else {
1101
- throw error
1102
- }
1103
- }
1104
-
1105
- const connectionString = `mongodb://${encodeURIComponent(username)}:${encodeURIComponent(password)}@127.0.0.1:${port}/${db}`
1106
-
1107
- return {
1108
- username,
1109
- password,
1110
- connectionString,
1111
- engine: container.engine,
1112
- container: container.name,
1113
- database: db,
1114
- }
1115
- }
1116
- }
1117
-
1118
- export const mongodbEngine = new MongoDBEngine()