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
@@ -0,0 +1,952 @@
1
+ import { Command } from 'commander';
2
+ import { existsSync } from 'fs';
3
+ import { rm } from 'fs/promises';
4
+ import chalk from 'chalk';
5
+ import { containerManager } from '../../core/container-manager.js';
6
+ import { portManager } from '../../core/port-manager.js';
7
+ import { getEngine } from '../../engines/index.js';
8
+ import { getEngineDefaults } from '../../config/defaults.js';
9
+ import { promptCreateOptions, promptInstallDependencies, promptContainerName, promptConfirm, } from '../ui/prompts.js';
10
+ import { createSpinner } from '../ui/spinner.js';
11
+ import { header, connectionBox } from '../ui/theme.js';
12
+ import { tmpdir } from 'os';
13
+ import { join } from 'path';
14
+ import { getMissingDependencies } from '../../core/dependency-manager.js';
15
+ import { platformService } from '../../core/platform-service.js';
16
+ import { startWithRetry } from '../../core/start-with-retry.js';
17
+ import { TransactionManager } from '../../core/transaction-manager.js';
18
+ import { isValidDatabaseName, exitWithError } from '../../core/error-handler.js';
19
+ import { resolve } from 'path';
20
+ import { Engine, Platform, ALL_ENGINES } from '../../types/index.js';
21
+ import { FERRETDB_VERSION_MAP, isV1 as isFerretDBv1, } from '../../engines/ferretdb/version-maps.js';
22
+ import { getEngineMetadata } from '../helpers.js';
23
+ /**
24
+ * Simplified SQLite container creation flow
25
+ * SQLite is file-based, so no port, start/stop, or server management needed
26
+ */
27
+ async function createSqliteContainer(containerName, dbEngine, version, options) {
28
+ const { path: filePath, from: restoreLocation, connect, force, json, } = options;
29
+ // Check dependencies
30
+ const depsSpinner = json ? null : createSpinner('Checking required tools...');
31
+ depsSpinner?.start();
32
+ const missingDeps = await getMissingDependencies('sqlite');
33
+ if (missingDeps.length > 0) {
34
+ if (json) {
35
+ return exitWithError({
36
+ message: `Missing tools: ${missingDeps.map((d) => d.name).join(', ')}`,
37
+ json: true,
38
+ });
39
+ }
40
+ depsSpinner?.warn(`Missing tools: ${missingDeps.map((d) => d.name).join(', ')}`);
41
+ const installed = await promptInstallDependencies(missingDeps[0].binary, 'sqlite');
42
+ if (!installed) {
43
+ return exitWithError({ message: 'Required tools not installed' });
44
+ }
45
+ }
46
+ else {
47
+ depsSpinner?.succeed('Required tools available');
48
+ }
49
+ // Check if container already exists
50
+ if (await containerManager.exists(containerName)) {
51
+ if (force) {
52
+ // Delete existing container with force
53
+ if (!json) {
54
+ console.log(chalk.yellow(` Removing existing container "${containerName}"...`));
55
+ }
56
+ await containerManager.delete(containerName, { force: true });
57
+ }
58
+ else if (json) {
59
+ return exitWithError({
60
+ message: `Container "${containerName}" already exists. Use --force to overwrite.`,
61
+ json: true,
62
+ });
63
+ }
64
+ else {
65
+ while (await containerManager.exists(containerName)) {
66
+ console.log(chalk.yellow(` Container "${containerName}" already exists.`));
67
+ containerName = await promptContainerName();
68
+ }
69
+ }
70
+ }
71
+ // Determine file path
72
+ const defaultPath = `./${containerName}.sqlite`;
73
+ const absolutePath = resolve(filePath || defaultPath);
74
+ // Check if file already exists
75
+ if (existsSync(absolutePath)) {
76
+ return exitWithError({
77
+ message: `File already exists: ${absolutePath}`,
78
+ json,
79
+ });
80
+ }
81
+ const createSpinnerInstance = json
82
+ ? null
83
+ : createSpinner('Creating SQLite database...');
84
+ createSpinnerInstance?.start();
85
+ try {
86
+ // Initialize the SQLite database file and register in registry
87
+ await dbEngine.initDataDir(containerName, version, { path: absolutePath });
88
+ createSpinnerInstance?.succeed('SQLite database created');
89
+ }
90
+ catch (error) {
91
+ createSpinnerInstance?.fail('Failed to create SQLite database');
92
+ throw error;
93
+ }
94
+ // Handle --from restore
95
+ if (restoreLocation) {
96
+ const config = await containerManager.getConfig(containerName);
97
+ if (config) {
98
+ const format = await dbEngine.detectBackupFormat(restoreLocation);
99
+ const restoreSpinner = json
100
+ ? null
101
+ : createSpinner(`Restoring from ${format.description}...`);
102
+ restoreSpinner?.start();
103
+ try {
104
+ await dbEngine.restore(config, restoreLocation);
105
+ restoreSpinner?.succeed('Backup restored successfully');
106
+ }
107
+ catch (error) {
108
+ restoreSpinner?.fail('Failed to restore backup');
109
+ // Clean up the created container on restore failure
110
+ try {
111
+ await containerManager.delete(containerName, { force: true });
112
+ }
113
+ catch {
114
+ // Ignore cleanup errors - still throw the original restore error
115
+ }
116
+ throw error;
117
+ }
118
+ }
119
+ }
120
+ const connectionString = `sqlite:///${absolutePath}`;
121
+ // Display success
122
+ if (json) {
123
+ const metadata = await getEngineMetadata('sqlite');
124
+ console.log(JSON.stringify({
125
+ success: true,
126
+ name: containerName,
127
+ engine: 'sqlite',
128
+ version,
129
+ path: absolutePath,
130
+ database: containerName,
131
+ connectionString,
132
+ restored: !!restoreLocation,
133
+ ...metadata,
134
+ }));
135
+ }
136
+ else {
137
+ console.log();
138
+ console.log(chalk.green(' ✓ SQLite database ready'));
139
+ console.log();
140
+ console.log(chalk.gray(' File path:'));
141
+ console.log(chalk.cyan(` ${absolutePath}`));
142
+ console.log();
143
+ console.log(chalk.gray(' Connection string:'));
144
+ console.log(chalk.cyan(` ${connectionString}`));
145
+ console.log();
146
+ if (connect) {
147
+ const config = await containerManager.getConfig(containerName);
148
+ if (config) {
149
+ console.log(chalk.gray(' Opening shell...'));
150
+ console.log();
151
+ await dbEngine.connect(config);
152
+ }
153
+ }
154
+ else {
155
+ console.log(chalk.gray(' Connect with:'));
156
+ console.log(chalk.cyan(` spindb connect ${containerName}`));
157
+ console.log();
158
+ }
159
+ }
160
+ }
161
+ /**
162
+ * Simplified DuckDB container creation flow
163
+ * DuckDB is file-based, so no port, start/stop, or server management needed
164
+ */
165
+ async function createDuckDBContainer(containerName, dbEngine, version, options) {
166
+ const { path: filePath, from: restoreLocation, connect, force, json, } = options;
167
+ // Check dependencies
168
+ const depsSpinner = json ? null : createSpinner('Checking required tools...');
169
+ depsSpinner?.start();
170
+ const missingDeps = await getMissingDependencies('duckdb');
171
+ if (missingDeps.length > 0) {
172
+ if (json) {
173
+ return exitWithError({
174
+ message: `Missing tools: ${missingDeps.map((d) => d.name).join(', ')}`,
175
+ json: true,
176
+ });
177
+ }
178
+ depsSpinner?.warn(`Missing tools: ${missingDeps.map((d) => d.name).join(', ')}`);
179
+ const installed = await promptInstallDependencies(missingDeps[0].binary, 'duckdb');
180
+ if (!installed) {
181
+ return exitWithError({ message: 'Required tools not installed' });
182
+ }
183
+ }
184
+ else {
185
+ depsSpinner?.succeed('Required tools available');
186
+ }
187
+ // Check if container already exists
188
+ if (await containerManager.exists(containerName)) {
189
+ if (force) {
190
+ // Delete existing container with force
191
+ if (!json) {
192
+ console.log(chalk.yellow(` Removing existing container "${containerName}"...`));
193
+ }
194
+ await containerManager.delete(containerName, { force: true });
195
+ }
196
+ else if (json) {
197
+ return exitWithError({
198
+ message: `Container "${containerName}" already exists. Use --force to overwrite.`,
199
+ json: true,
200
+ });
201
+ }
202
+ else {
203
+ while (await containerManager.exists(containerName)) {
204
+ console.log(chalk.yellow(` Container "${containerName}" already exists.`));
205
+ containerName = await promptContainerName();
206
+ }
207
+ }
208
+ }
209
+ // Determine file path
210
+ const defaultPath = `./${containerName}.duckdb`;
211
+ const absolutePath = resolve(filePath || defaultPath);
212
+ // Check if file already exists
213
+ if (existsSync(absolutePath)) {
214
+ return exitWithError({
215
+ message: `File already exists: ${absolutePath}`,
216
+ json,
217
+ });
218
+ }
219
+ const createSpinnerInstance = json
220
+ ? null
221
+ : createSpinner('Creating DuckDB database...');
222
+ createSpinnerInstance?.start();
223
+ try {
224
+ // Initialize the DuckDB database file and register in registry
225
+ await dbEngine.initDataDir(containerName, version, { path: absolutePath });
226
+ createSpinnerInstance?.succeed('DuckDB database created');
227
+ }
228
+ catch (error) {
229
+ createSpinnerInstance?.fail('Failed to create DuckDB database');
230
+ throw error;
231
+ }
232
+ // Handle --from restore
233
+ if (restoreLocation) {
234
+ const config = await containerManager.getConfig(containerName);
235
+ if (config) {
236
+ const format = await dbEngine.detectBackupFormat(restoreLocation);
237
+ const restoreSpinner = json
238
+ ? null
239
+ : createSpinner(`Restoring from ${format.description}...`);
240
+ restoreSpinner?.start();
241
+ try {
242
+ await dbEngine.restore(config, restoreLocation);
243
+ restoreSpinner?.succeed('Backup restored successfully');
244
+ }
245
+ catch (error) {
246
+ restoreSpinner?.fail('Failed to restore backup');
247
+ // Clean up the created container on restore failure
248
+ try {
249
+ await containerManager.delete(containerName, { force: true });
250
+ }
251
+ catch {
252
+ // Ignore cleanup errors - still throw the original restore error
253
+ }
254
+ throw error;
255
+ }
256
+ }
257
+ }
258
+ const connectionString = `duckdb:///${absolutePath}`;
259
+ // Display success
260
+ if (json) {
261
+ const metadata = await getEngineMetadata('duckdb');
262
+ console.log(JSON.stringify({
263
+ success: true,
264
+ name: containerName,
265
+ engine: 'duckdb',
266
+ version,
267
+ path: absolutePath,
268
+ database: containerName,
269
+ connectionString,
270
+ restored: !!restoreLocation,
271
+ ...metadata,
272
+ }));
273
+ }
274
+ else {
275
+ console.log();
276
+ console.log(chalk.green(' ✓ DuckDB database ready'));
277
+ console.log();
278
+ console.log(chalk.gray(' File path:'));
279
+ console.log(chalk.cyan(` ${absolutePath}`));
280
+ console.log();
281
+ console.log(chalk.gray(' Connection string:'));
282
+ console.log(chalk.cyan(` ${connectionString}`));
283
+ console.log();
284
+ if (connect) {
285
+ const config = await containerManager.getConfig(containerName);
286
+ if (config) {
287
+ console.log(chalk.gray(' Opening shell...'));
288
+ console.log();
289
+ await dbEngine.connect(config);
290
+ }
291
+ }
292
+ else {
293
+ console.log(chalk.gray(' Connect with:'));
294
+ console.log(chalk.cyan(` spindb connect ${containerName}`));
295
+ console.log();
296
+ }
297
+ }
298
+ }
299
+ export function detectLocationType(location) {
300
+ if (location.startsWith('postgresql://') ||
301
+ location.startsWith('postgres://')) {
302
+ return { type: 'connection', inferredEngine: Engine.PostgreSQL };
303
+ }
304
+ if (location.startsWith('mysql://')) {
305
+ return { type: 'connection', inferredEngine: Engine.MySQL };
306
+ }
307
+ if (location.startsWith('sqlite://')) {
308
+ return { type: 'connection', inferredEngine: Engine.SQLite };
309
+ }
310
+ if (location.startsWith('duckdb://')) {
311
+ return { type: 'connection', inferredEngine: Engine.DuckDB };
312
+ }
313
+ if (location.startsWith('redis://') || location.startsWith('rediss://')) {
314
+ return { type: 'connection', inferredEngine: Engine.Redis };
315
+ }
316
+ if (location.startsWith('valkey://') || location.startsWith('valkeys://')) {
317
+ return { type: 'connection', inferredEngine: Engine.Valkey };
318
+ }
319
+ if (location.startsWith('meilisearch://')) {
320
+ return { type: 'connection', inferredEngine: Engine.Meilisearch };
321
+ }
322
+ if (location.startsWith('influxdb://')) {
323
+ return { type: 'connection', inferredEngine: Engine.InfluxDB };
324
+ }
325
+ if (existsSync(location)) {
326
+ // Check if it's a SQLite file (case-insensitive)
327
+ const lowerLocation = location.toLowerCase();
328
+ if (lowerLocation.endsWith('.sqlite') ||
329
+ lowerLocation.endsWith('.sqlite3')) {
330
+ return { type: 'file', inferredEngine: Engine.SQLite };
331
+ }
332
+ // Check if it's a DuckDB file (case-insensitive)
333
+ // Note: We don't infer DuckDB from '.db' extension because it's commonly used by SQLite
334
+ if (lowerLocation.endsWith('.duckdb') || lowerLocation.endsWith('.ddb')) {
335
+ return { type: 'file', inferredEngine: Engine.DuckDB };
336
+ }
337
+ return { type: 'file' };
338
+ }
339
+ return { type: 'not_found' };
340
+ }
341
+ export const createCommand = new Command('create')
342
+ .description('Create a new database container')
343
+ .argument('[name]', 'Container name')
344
+ .option('-e, --engine <engine>', `Database engine (${ALL_ENGINES.join(', ')})`)
345
+ .option('--db-version <version>', 'Database version (e.g., 17, 8.0)')
346
+ .option('-d, --database <database>', 'Database name')
347
+ .option('-p, --port <port>', 'Port number')
348
+ .option('--path <path>', 'Path for SQLite/DuckDB database file (default: ./<name>.sqlite or ./<name>.duckdb)')
349
+ .option('--max-connections <number>', 'Maximum number of database connections (default: 200)')
350
+ .option('-f, --force', 'Overwrite existing container without prompting (deletes existing data)')
351
+ .option('--start', 'Start the container after creation (skip prompt)')
352
+ .option('--no-start', 'Do not start the container after creation')
353
+ .option('--connect', 'Open a shell connection after creation')
354
+ .option('--from <location>', 'Restore from a dump file or connection string after creation')
355
+ .option('-j, --json', 'Output result as JSON')
356
+ .action(async (name, options) => {
357
+ let tempDumpPath = null;
358
+ try {
359
+ let containerName = name;
360
+ let engine = options.engine || Engine.PostgreSQL;
361
+ let version = options.dbVersion;
362
+ let database = options.database;
363
+ let restoreLocation = null;
364
+ let restoreType = null;
365
+ if (options.from) {
366
+ const locationInfo = detectLocationType(options.from);
367
+ if (locationInfo.type === 'not_found') {
368
+ return exitWithError({
369
+ message: `Location not found: ${options.from}. Provide a valid file path or connection string (postgresql://, mysql://, redis://, sqlite://, duckdb://)`,
370
+ json: options.json,
371
+ });
372
+ }
373
+ restoreLocation = options.from;
374
+ restoreType = locationInfo.type;
375
+ if (!options.engine && locationInfo.inferredEngine) {
376
+ engine = locationInfo.inferredEngine;
377
+ if (!options.json) {
378
+ console.log(chalk.gray(` Inferred engine "${engine}" from connection string`));
379
+ }
380
+ }
381
+ if (options.start === false) {
382
+ return exitWithError({
383
+ message: 'Cannot use --no-start with --from (restore requires running container)',
384
+ json: options.json,
385
+ });
386
+ }
387
+ }
388
+ const engineDefaults = getEngineDefaults(engine);
389
+ if (!version) {
390
+ version = engineDefaults.defaultVersion;
391
+ }
392
+ if (!containerName) {
393
+ // JSON mode requires container name argument
394
+ if (options.json) {
395
+ return exitWithError({
396
+ message: 'Container name is required',
397
+ json: true,
398
+ });
399
+ }
400
+ const answers = await promptCreateOptions();
401
+ containerName = answers.name;
402
+ engine = answers.engine;
403
+ version = answers.version;
404
+ database = answers.database;
405
+ }
406
+ // FerretDB: force v1 on Windows (v2 requires postgresql-documentdb, not available on Windows)
407
+ // Runs after both CLI and interactive paths have resolved engine + version
408
+ if (engine === Engine.FerretDB &&
409
+ !isFerretDBv1(version) &&
410
+ platformService.getPlatformInfo().platform === Platform.Win32) {
411
+ version = FERRETDB_VERSION_MAP['1'];
412
+ if (!options.json) {
413
+ console.log(chalk.yellow(` FerretDB v2 is not supported on Windows — using v1 (${version})`));
414
+ }
415
+ }
416
+ // Redis/Valkey use numbered databases (0-15), default to "0"
417
+ // Other engines default to container name (with hyphens replaced by underscores for SQL compatibility)
418
+ if (engine === Engine.Redis || engine === Engine.Valkey) {
419
+ database = database ?? '0';
420
+ // Validate Redis/Valkey database is a pure integer string 0-15
421
+ // Reject decimals ("1.5"), scientific notation ("1e2"), and trailing garbage ("5abc")
422
+ if (!/^[0-9]+$/.test(database)) {
423
+ return exitWithError({
424
+ message: 'Redis/Valkey database must be an integer between 0 and 15',
425
+ json: options.json,
426
+ });
427
+ }
428
+ const dbIndex = parseInt(database, 10);
429
+ if (dbIndex < 0 || dbIndex > 15) {
430
+ return exitWithError({
431
+ message: 'Redis/Valkey database must be an integer between 0 and 15',
432
+ json: options.json,
433
+ });
434
+ }
435
+ }
436
+ else {
437
+ database = database ?? containerName.replace(/-/g, '_');
438
+ // Validate database name to prevent SQL injection
439
+ if (!isValidDatabaseName(database)) {
440
+ return exitWithError({
441
+ message: 'Database name must start with a letter and contain only letters, numbers, and underscores',
442
+ json: options.json,
443
+ });
444
+ }
445
+ }
446
+ if (!options.json) {
447
+ console.log(header('Creating Database Container'));
448
+ console.log();
449
+ }
450
+ const dbEngine = getEngine(engine);
451
+ const isPostgreSQL = engine === Engine.PostgreSQL;
452
+ // SQLite has a simplified flow (no port, no start/stop)
453
+ if (engine === Engine.SQLite) {
454
+ await createSqliteContainer(containerName, dbEngine, version, {
455
+ path: options.path,
456
+ from: restoreLocation,
457
+ connect: options.connect,
458
+ force: options.force,
459
+ json: options.json,
460
+ });
461
+ return;
462
+ }
463
+ // DuckDB has a simplified flow (no port, no start/stop)
464
+ if (engine === Engine.DuckDB) {
465
+ await createDuckDBContainer(containerName, dbEngine, version, {
466
+ path: options.path,
467
+ from: restoreLocation,
468
+ connect: options.connect,
469
+ force: options.force,
470
+ json: options.json,
471
+ });
472
+ return;
473
+ }
474
+ // For server databases, validate --connect with --no-start
475
+ if (options.connect && options.start === false) {
476
+ return exitWithError({
477
+ message: 'Cannot use --no-start with --connect (connection requires running container)',
478
+ json: options.json,
479
+ });
480
+ }
481
+ // In JSON mode, require explicit --start or --no-start flag to avoid interactive prompts
482
+ if (options.json &&
483
+ options.start === undefined &&
484
+ !restoreLocation &&
485
+ !options.connect) {
486
+ return exitWithError({
487
+ message: 'In JSON mode, you must specify --start or --no-start for server databases',
488
+ json: true,
489
+ });
490
+ }
491
+ // Validate --max-connections if provided
492
+ if (options.maxConnections) {
493
+ const parsed = parseInt(options.maxConnections, 10);
494
+ if (!Number.isFinite(parsed) || parsed <= 0) {
495
+ return exitWithError({
496
+ message: 'Invalid --max-connections value: must be a positive integer',
497
+ json: options.json,
498
+ });
499
+ }
500
+ }
501
+ const portSpinner = options.json
502
+ ? null
503
+ : createSpinner('Finding available port...');
504
+ portSpinner?.start();
505
+ let port;
506
+ if (options.port) {
507
+ port = parseInt(options.port, 10);
508
+ const available = await portManager.isPortAvailable(port);
509
+ if (!available) {
510
+ portSpinner?.fail(`Port ${port} is already in use`);
511
+ return exitWithError({
512
+ message: `Port ${port} is already in use`,
513
+ json: options.json,
514
+ });
515
+ }
516
+ portSpinner?.succeed(`Using port ${port}`);
517
+ }
518
+ else {
519
+ const { port: foundPort, isDefault } = await portManager.findAvailablePort({
520
+ preferredPort: engineDefaults.defaultPort,
521
+ portRange: engineDefaults.portRange,
522
+ });
523
+ port = foundPort;
524
+ if (isDefault) {
525
+ portSpinner?.succeed(`Using default port ${port}`);
526
+ }
527
+ else {
528
+ portSpinner?.warn(`Default port ${engineDefaults.defaultPort} is in use, using port ${port}`);
529
+ }
530
+ }
531
+ // For PostgreSQL, ensure binaries FIRST - they include client tools (psql, pg_dump, etc.)
532
+ // ensureBinaries also registers tool paths in config cache so getMissingDependencies can find them
533
+ if (isPostgreSQL) {
534
+ const binarySpinner = options.json
535
+ ? null
536
+ : createSpinner(`Checking ${dbEngine.displayName} ${version} binaries...`);
537
+ binarySpinner?.start();
538
+ // Always call ensureBinaries - it handles cached binaries gracefully
539
+ // and registers client tool paths in config (needed for dependency checks)
540
+ await dbEngine.ensureBinaries(version, ({ stage, message }) => {
541
+ if (binarySpinner) {
542
+ if (stage === 'cached') {
543
+ binarySpinner.text = `${dbEngine.displayName} ${version} binaries ready (cached)`;
544
+ }
545
+ else {
546
+ binarySpinner.text = message;
547
+ }
548
+ }
549
+ });
550
+ binarySpinner?.succeed(`${dbEngine.displayName} ${version} binaries ready`);
551
+ }
552
+ // Check dependencies (all engines need this)
553
+ // For PostgreSQL, this runs AFTER binary download so client tools are available
554
+ const depsSpinner = options.json
555
+ ? null
556
+ : createSpinner('Checking required tools...');
557
+ depsSpinner?.start();
558
+ let missingDeps = await getMissingDependencies(engine);
559
+ if (missingDeps.length > 0) {
560
+ // In JSON mode, error out instead of prompting
561
+ if (options.json) {
562
+ return exitWithError({
563
+ message: `Missing tools: ${missingDeps.map((d) => d.name).join(', ')}`,
564
+ json: true,
565
+ });
566
+ }
567
+ depsSpinner?.warn(`Missing tools: ${missingDeps.map((d) => d.name).join(', ')}`);
568
+ const installed = await promptInstallDependencies(missingDeps[0].binary, engine);
569
+ if (!installed) {
570
+ return exitWithError({ message: 'Required tools not installed' });
571
+ }
572
+ missingDeps = await getMissingDependencies(engine);
573
+ if (missingDeps.length > 0) {
574
+ return exitWithError({
575
+ message: `Still missing tools: ${missingDeps.map((d) => d.name).join(', ')}`,
576
+ });
577
+ }
578
+ console.log(chalk.green(' ✓ All required tools are now available'));
579
+ console.log();
580
+ }
581
+ else {
582
+ depsSpinner?.succeed('Required tools available');
583
+ }
584
+ // For non-PostgreSQL engines, validate version and get binary path
585
+ // Store the binary path for version consistency
586
+ let binaryPath;
587
+ if (!isPostgreSQL) {
588
+ const binarySpinner = options.json
589
+ ? null
590
+ : createSpinner(`Checking ${dbEngine.displayName} ${version} binaries...`);
591
+ binarySpinner?.start();
592
+ try {
593
+ // ensureBinaries validates the version and returns the binary path
594
+ binaryPath = await dbEngine.ensureBinaries(version, ({ message }) => {
595
+ if (binarySpinner) {
596
+ binarySpinner.text = message;
597
+ }
598
+ });
599
+ binarySpinner?.succeed(`${dbEngine.displayName} ${version} binaries ready`);
600
+ }
601
+ catch (error) {
602
+ binarySpinner?.fail(`${dbEngine.displayName} ${version} not available`);
603
+ if (options.json) {
604
+ return exitWithError({
605
+ message: `${dbEngine.displayName} ${version} not available`,
606
+ json: true,
607
+ });
608
+ }
609
+ throw error;
610
+ }
611
+ }
612
+ if (await containerManager.exists(containerName)) {
613
+ if (options.force) {
614
+ // Stop the container if it's running, then delete it
615
+ const existingConfig = await containerManager.getConfig(containerName);
616
+ if (existingConfig?.status === 'running') {
617
+ if (!options.json) {
618
+ console.log(chalk.yellow(` Stopping existing container "${containerName}"...`));
619
+ }
620
+ try {
621
+ await dbEngine.stop(existingConfig);
622
+ }
623
+ catch {
624
+ // Ignore stop errors - container may already be stopped
625
+ }
626
+ }
627
+ if (!options.json) {
628
+ console.log(chalk.yellow(` Removing existing container "${containerName}"...`));
629
+ }
630
+ await containerManager.delete(containerName, { force: true });
631
+ }
632
+ else if (options.json) {
633
+ return exitWithError({
634
+ message: `Container "${containerName}" already exists. Use --force to overwrite.`,
635
+ json: true,
636
+ });
637
+ }
638
+ else {
639
+ while (await containerManager.exists(containerName)) {
640
+ console.log(chalk.yellow(` Container "${containerName}" already exists.`));
641
+ containerName = await promptContainerName();
642
+ }
643
+ }
644
+ }
645
+ const tx = new TransactionManager();
646
+ const createSpinnerInstance = createSpinner('Creating container...');
647
+ createSpinnerInstance.start();
648
+ try {
649
+ await containerManager.create(containerName, {
650
+ engine: dbEngine.name,
651
+ version,
652
+ port,
653
+ database,
654
+ binaryPath,
655
+ });
656
+ tx.addRollback({
657
+ description: `Delete container "${containerName}"`,
658
+ execute: async () => {
659
+ await containerManager.delete(containerName, { force: true });
660
+ },
661
+ });
662
+ createSpinnerInstance.succeed('Container created');
663
+ }
664
+ catch (error) {
665
+ createSpinnerInstance.fail('Failed to create container');
666
+ throw error;
667
+ }
668
+ const initSpinner = createSpinner('Initializing database cluster...');
669
+ initSpinner.start();
670
+ try {
671
+ await dbEngine.initDataDir(containerName, version, {
672
+ port,
673
+ superuser: engineDefaults.superuser,
674
+ maxConnections: options.maxConnections
675
+ ? parseInt(options.maxConnections, 10)
676
+ : undefined,
677
+ });
678
+ initSpinner.succeed('Database cluster initialized');
679
+ }
680
+ catch (error) {
681
+ initSpinner.fail('Failed to initialize database cluster');
682
+ await tx.rollback();
683
+ throw error;
684
+ }
685
+ // --from requires start, --start forces start, --no-start skips, otherwise ask user
686
+ // --connect implies --start for server databases
687
+ let shouldStart = false;
688
+ if (restoreLocation || options.connect) {
689
+ shouldStart = true;
690
+ }
691
+ else if (options.start === true) {
692
+ shouldStart = true;
693
+ }
694
+ else if (options.start === false) {
695
+ shouldStart = false;
696
+ }
697
+ else {
698
+ // In non-interactive mode (no TTY), default to not starting
699
+ // This allows scripts/CI to run without --no-start flag
700
+ if (!process.stdin.isTTY) {
701
+ shouldStart = false;
702
+ }
703
+ else {
704
+ console.log();
705
+ shouldStart = await promptConfirm(`Start ${containerName} now?`, true);
706
+ }
707
+ }
708
+ const config = await containerManager.getConfig(containerName);
709
+ if (shouldStart && config) {
710
+ const startSpinner = createSpinner(`Starting ${dbEngine.displayName}...`);
711
+ startSpinner.start();
712
+ try {
713
+ const result = await startWithRetry({
714
+ engine: dbEngine,
715
+ config,
716
+ onPortChange: (oldPort, newPort) => {
717
+ startSpinner.text = `Port ${oldPort} was in use, retrying with port ${newPort}...`;
718
+ port = newPort;
719
+ },
720
+ });
721
+ if (!result.success) {
722
+ startSpinner.fail(`Failed to start ${dbEngine.displayName}`);
723
+ await tx.rollback();
724
+ if (result.error) {
725
+ throw result.error;
726
+ }
727
+ throw new Error('Failed to start container');
728
+ }
729
+ tx.addRollback({
730
+ description: `Stop container "${containerName}"`,
731
+ execute: async () => {
732
+ try {
733
+ await dbEngine.stop(config);
734
+ }
735
+ catch {
736
+ // Ignore stop errors during rollback
737
+ }
738
+ },
739
+ });
740
+ await containerManager.updateConfig(containerName, {
741
+ status: 'running',
742
+ });
743
+ if (result.retriesUsed > 0) {
744
+ startSpinner.warn(`${dbEngine.displayName} started on port ${result.finalPort} (original port was in use)`);
745
+ }
746
+ else {
747
+ startSpinner.succeed(`${dbEngine.displayName} started`);
748
+ }
749
+ }
750
+ catch (error) {
751
+ if (!startSpinner.isSpinning) {
752
+ // Error was already handled above
753
+ }
754
+ else {
755
+ startSpinner.fail(`Failed to start ${dbEngine.displayName}`);
756
+ }
757
+ await tx.rollback();
758
+ throw error;
759
+ }
760
+ const defaultDb = engineDefaults.superuser;
761
+ if (database !== defaultDb) {
762
+ const dbSpinner = createSpinner(`Creating database "${database}"...`);
763
+ dbSpinner.start();
764
+ try {
765
+ await dbEngine.createDatabase(config, database);
766
+ dbSpinner.succeed(`Database "${database}" created`);
767
+ }
768
+ catch (error) {
769
+ dbSpinner.fail(`Failed to create database "${database}"`);
770
+ await tx.rollback();
771
+ throw error;
772
+ }
773
+ }
774
+ }
775
+ if (restoreLocation && restoreType && config && shouldStart) {
776
+ let backupPath = '';
777
+ if (restoreType === 'connection') {
778
+ const timestamp = Date.now();
779
+ tempDumpPath = join(tmpdir(), `spindb-dump-${timestamp}.dump`);
780
+ let dumpSuccess = false;
781
+ let attempts = 0;
782
+ const maxAttempts = 2;
783
+ while (!dumpSuccess && attempts < maxAttempts) {
784
+ attempts++;
785
+ const dumpSpinner = createSpinner('Creating dump from remote database...');
786
+ dumpSpinner.start();
787
+ try {
788
+ const dumpResult = await dbEngine.dumpFromConnectionString(restoreLocation, tempDumpPath);
789
+ dumpSpinner.succeed('Dump created from remote database');
790
+ if (dumpResult.warnings?.length) {
791
+ for (const warning of dumpResult.warnings) {
792
+ console.log(chalk.yellow(` ${warning}`));
793
+ }
794
+ }
795
+ backupPath = tempDumpPath;
796
+ dumpSuccess = true;
797
+ }
798
+ catch (error) {
799
+ const e = error;
800
+ dumpSpinner.fail('Failed to create dump');
801
+ if (e.message.includes('pg_dump not found') ||
802
+ e.message.includes('ENOENT')) {
803
+ // In JSON mode, don't prompt - just exit with error
804
+ if (options.json) {
805
+ return exitWithError({
806
+ message: 'pg_dump not installed',
807
+ json: true,
808
+ });
809
+ }
810
+ const installed = await promptInstallDependencies('pg_dump');
811
+ if (!installed) {
812
+ return exitWithError({
813
+ message: 'pg_dump not installed',
814
+ json: options.json,
815
+ });
816
+ }
817
+ continue;
818
+ }
819
+ return exitWithError({
820
+ message: `pg_dump error: ${e.message}`,
821
+ json: options.json,
822
+ });
823
+ }
824
+ }
825
+ if (!dumpSuccess) {
826
+ return exitWithError({
827
+ message: 'Failed to create dump after retries',
828
+ json: options.json,
829
+ });
830
+ }
831
+ }
832
+ else {
833
+ backupPath = restoreLocation;
834
+ }
835
+ const detectSpinner = createSpinner('Detecting backup format...');
836
+ detectSpinner.start();
837
+ const format = await dbEngine.detectBackupFormat(backupPath);
838
+ detectSpinner.succeed(`Detected: ${format.description}`);
839
+ const restoreSpinner = createSpinner('Restoring backup...');
840
+ restoreSpinner.start();
841
+ const result = await dbEngine.restore(config, backupPath, {
842
+ database,
843
+ createDatabase: false,
844
+ });
845
+ if (result.code === 0) {
846
+ restoreSpinner.succeed('Backup restored successfully');
847
+ }
848
+ else {
849
+ restoreSpinner.warn('Restore completed with warnings');
850
+ if (result.stderr) {
851
+ console.log(chalk.yellow('\n Warnings:'));
852
+ const lines = result.stderr.split('\n').slice(0, 5);
853
+ lines.forEach((line) => {
854
+ if (line.trim()) {
855
+ console.log(chalk.gray(` ${line}`));
856
+ }
857
+ });
858
+ if (result.stderr.split('\n').length > 5) {
859
+ console.log(chalk.gray(' ...'));
860
+ }
861
+ }
862
+ }
863
+ }
864
+ tx.commit();
865
+ const finalConfig = await containerManager.getConfig(containerName);
866
+ if (finalConfig) {
867
+ const connectionString = dbEngine.getConnectionString(finalConfig);
868
+ if (options.json) {
869
+ const metadata = await getEngineMetadata(finalConfig.engine);
870
+ console.log(JSON.stringify({
871
+ success: true,
872
+ name: containerName,
873
+ engine: finalConfig.engine,
874
+ version: finalConfig.version,
875
+ port: finalConfig.port,
876
+ database,
877
+ connectionString,
878
+ status: finalConfig.status,
879
+ restored: !!restoreLocation,
880
+ ...metadata,
881
+ }));
882
+ }
883
+ else {
884
+ console.log();
885
+ console.log(connectionBox(containerName, connectionString, finalConfig.port));
886
+ console.log();
887
+ if (options.connect && shouldStart) {
888
+ // --connect flag: open shell directly
889
+ const copied = await platformService.copyToClipboard(connectionString);
890
+ if (copied) {
891
+ console.log(chalk.gray(' Connection string copied to clipboard'));
892
+ }
893
+ console.log(chalk.gray(' Opening shell...'));
894
+ console.log();
895
+ await dbEngine.connect(finalConfig, database);
896
+ }
897
+ else if (shouldStart) {
898
+ console.log(chalk.gray(' Connect with:'));
899
+ console.log(chalk.cyan(` spindb connect ${containerName}`));
900
+ const copied = await platformService.copyToClipboard(connectionString);
901
+ if (copied) {
902
+ console.log(chalk.gray(' Connection string copied to clipboard'));
903
+ }
904
+ console.log();
905
+ }
906
+ else {
907
+ console.log(chalk.gray(' Start the container:'));
908
+ console.log(chalk.cyan(` spindb start ${containerName}`));
909
+ console.log();
910
+ }
911
+ }
912
+ }
913
+ }
914
+ catch (error) {
915
+ const e = error;
916
+ const missingToolPatterns = [
917
+ 'pg_restore not found',
918
+ 'psql not found',
919
+ 'pg_dump not found',
920
+ 'mysql not found',
921
+ 'mysqldump not found',
922
+ 'mysqld not found',
923
+ ];
924
+ const matchingPattern = missingToolPatterns.find((p) => e.message.includes(p));
925
+ if (matchingPattern) {
926
+ if (options.json) {
927
+ return exitWithError({ message: e.message, json: true });
928
+ }
929
+ const missingTool = matchingPattern.replace(' not found', '');
930
+ const installed = await promptInstallDependencies(missingTool);
931
+ if (installed) {
932
+ console.log(chalk.yellow(' Please re-run your command to continue.'));
933
+ }
934
+ return exitWithError({
935
+ message: 'Missing required tools',
936
+ json: options.json,
937
+ });
938
+ }
939
+ return exitWithError({ message: e.message, json: options.json });
940
+ }
941
+ finally {
942
+ if (tempDumpPath) {
943
+ try {
944
+ await rm(tempDumpPath, { force: true });
945
+ }
946
+ catch {
947
+ // Ignore cleanup errors
948
+ }
949
+ }
950
+ }
951
+ });
952
+ //# sourceMappingURL=create.js.map