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,1023 +0,0 @@
1
- /**
2
- * QuestDB Engine Implementation
3
- *
4
- * QuestDB is a high-performance time-series database with built-in support for
5
- * SQL queries via PostgreSQL wire protocol.
6
- *
7
- * Key characteristics:
8
- * - Default PostgreSQL wire protocol port: 8812
9
- * - Default HTTP port: 9000 (REST API and Web Console)
10
- * - Default ILP (InfluxDB Line Protocol) port: 9009
11
- * - Java-based with bundled JRE (no Java installation required)
12
- * - Startup script: questdb.sh (Unix) or questdb.exe (Windows)
13
- * - Default database: qdb (root database)
14
- * - Default user: admin (password: quest)
15
- * - Query language: SQL (with time-series extensions)
16
- * - Web Console at http://localhost:9000
17
- */
18
-
19
- import { spawn, type SpawnOptions } from 'child_process'
20
- import { existsSync } from 'fs'
21
- import { mkdir, writeFile, readFile, unlink, readdir, stat } from 'fs/promises'
22
- import { join } from 'path'
23
- import { BaseEngine } from '../base-engine'
24
- import { paths } from '../../config/paths'
25
- import { getEngineDefaults } from '../../config/defaults'
26
- import { platformService } from '../../core/platform-service'
27
- import { configManager } from '../../core/config-manager'
28
- import { logDebug, logWarning } from '../../core/error-handler'
29
- import { findBinary } from '../../core/dependency-manager'
30
- import { processManager } from '../../core/process-manager'
31
- import { questdbBinaryManager } from './binary-manager'
32
- import { getBinaryUrl } from './binary-urls'
33
- import {
34
- normalizeVersion,
35
- SUPPORTED_MAJOR_VERSIONS,
36
- QUESTDB_VERSION_MAP,
37
- } from './version-maps'
38
- import { fetchAvailableVersions as fetchHostdbVersions } from './hostdb-releases'
39
- import {
40
- detectBackupFormat as detectBackupFormatImpl,
41
- restoreBackup,
42
- parseConnectionString,
43
- } from './restore'
44
- import { createBackup } from './backup'
45
- import {
46
- type Platform,
47
- type Arch,
48
- type ContainerConfig,
49
- type ProgressCallback,
50
- type BackupFormat,
51
- type BackupOptions,
52
- type BackupResult,
53
- type RestoreResult,
54
- type DumpResult,
55
- type StatusResult,
56
- type QueryResult,
57
- type QueryOptions,
58
- } from '../../types'
59
- import { parseCSVToQueryResult } from '../../core/query-parser'
60
-
61
- const ENGINE = 'questdb'
62
- const engineDef = getEngineDefaults(ENGINE)
63
-
64
- export class QuestDBEngine extends BaseEngine {
65
- name = ENGINE
66
- displayName = 'QuestDB'
67
- defaultPort = engineDef.defaultPort
68
- supportedVersions = SUPPORTED_MAJOR_VERSIONS
69
-
70
- // Get platform info for binary operations
71
- getPlatformInfo(): { platform: Platform; arch: Arch } {
72
- return platformService.getPlatformInfo()
73
- }
74
-
75
- // Fetch available versions from hostdb (dynamically or from cache/fallback)
76
- async fetchAvailableVersions(): Promise<Record<string, string[]>> {
77
- return fetchHostdbVersions()
78
- }
79
-
80
- // Get binary download URL from hostdb
81
- getBinaryUrl(version: string, platform: Platform, arch: Arch): string {
82
- return getBinaryUrl(version, platform, arch)
83
- }
84
-
85
- // Resolves version string to full version (e.g., '9' -> '9.2.3')
86
- resolveFullVersion(version: string): string {
87
- if (/^\d+\.\d+\.\d+$/.test(version)) {
88
- return version
89
- }
90
- return QUESTDB_VERSION_MAP[version] || version
91
- }
92
-
93
- // Get the path where binaries for a version would be installed
94
- getBinaryPath(version: string): string {
95
- const fullVersion = this.resolveFullVersion(version)
96
- const { platform: p, arch: a } = this.getPlatformInfo()
97
- return paths.getBinaryPath({
98
- engine: 'questdb',
99
- version: fullVersion,
100
- platform: p,
101
- arch: a,
102
- })
103
- }
104
-
105
- // Verify that QuestDB binaries are available
106
- async verifyBinary(binPath: string): Promise<boolean> {
107
- // Check both root and bin/ subdirectory (structure differs by platform)
108
- const { platform } = this.getPlatformInfo()
109
- if (platform === 'win32') {
110
- const exePathRoot = join(binPath, 'questdb.exe')
111
- const exePathBin = join(binPath, 'bin', 'questdb.exe')
112
- return existsSync(exePathRoot) || existsSync(exePathBin)
113
- } else {
114
- const shPathRoot = join(binPath, 'questdb.sh')
115
- const shPathBin = join(binPath, 'bin', 'questdb.sh')
116
- return existsSync(shPathRoot) || existsSync(shPathBin)
117
- }
118
- }
119
-
120
- // Check if a specific QuestDB version is installed (downloaded)
121
- async isBinaryInstalled(version: string): Promise<boolean> {
122
- const { platform, arch } = this.getPlatformInfo()
123
- return questdbBinaryManager.isInstalled(version, platform, arch)
124
- }
125
-
126
- /**
127
- * Ensure QuestDB binaries are available for a specific version
128
- * Downloads from hostdb if not already installed
129
- * Returns the path to the installation directory
130
- */
131
- async ensureBinaries(
132
- version: string,
133
- onProgress?: ProgressCallback,
134
- ): Promise<string> {
135
- const { platform, arch } = this.getPlatformInfo()
136
-
137
- const binPath = await questdbBinaryManager.ensureInstalled(
138
- version,
139
- platform,
140
- arch,
141
- onProgress,
142
- )
143
-
144
- // Ensure startup script is executable
145
- await questdbBinaryManager.postExtract(binPath, platform)
146
-
147
- // Register the startup script in config
148
- // Register the startup script in config - check both locations
149
- if (platform === 'win32') {
150
- const exePathRoot = join(binPath, 'questdb.exe')
151
- const exePathBin = join(binPath, 'bin', 'questdb.exe')
152
- const exePath = existsSync(exePathRoot) ? exePathRoot : exePathBin
153
- if (existsSync(exePath)) {
154
- await configManager.setBinaryPath('questdb', exePath, 'bundled')
155
- }
156
- } else {
157
- const shPathRoot = join(binPath, 'questdb.sh')
158
- const shPathBin = join(binPath, 'bin', 'questdb.sh')
159
- const shPath = existsSync(shPathRoot) ? shPathRoot : shPathBin
160
- if (existsSync(shPath)) {
161
- await configManager.setBinaryPath('questdb', shPath, 'bundled')
162
- }
163
- }
164
-
165
- return binPath
166
- }
167
-
168
- /**
169
- * Initialize a new QuestDB data directory
170
- */
171
- async initDataDir(
172
- containerName: string,
173
- _version: string,
174
- _options: Record<string, unknown> = {},
175
- ): Promise<string> {
176
- const dataDir = paths.getContainerDataPath(containerName, {
177
- engine: ENGINE,
178
- })
179
-
180
- // Create data directory
181
- await mkdir(dataDir, { recursive: true })
182
-
183
- logDebug(`Created QuestDB data directory: ${dataDir}`)
184
-
185
- return dataDir
186
- }
187
-
188
- // Get the path to QuestDB startup script for a version
189
- async getQuestDBPath(version: string): Promise<string> {
190
- const { platform, arch } = this.getPlatformInfo()
191
- const fullVersion = normalizeVersion(version)
192
-
193
- const binPath = paths.getBinaryPath({
194
- engine: 'questdb',
195
- version: fullVersion,
196
- platform,
197
- arch,
198
- })
199
-
200
- // Check both root and bin/ subdirectory (structure differs by platform)
201
- if (platform === 'win32') {
202
- const exePathRoot = join(binPath, 'questdb.exe')
203
- const exePathBin = join(binPath, 'bin', 'questdb.exe')
204
- if (existsSync(exePathRoot)) return exePathRoot
205
- if (existsSync(exePathBin)) return exePathBin
206
- } else {
207
- const shPathRoot = join(binPath, 'questdb.sh')
208
- const shPathBin = join(binPath, 'bin', 'questdb.sh')
209
- if (existsSync(shPathRoot)) return shPathRoot
210
- if (existsSync(shPathBin)) return shPathBin
211
- }
212
-
213
- throw new Error(
214
- `QuestDB ${version} is not installed. Run: spindb engines download questdb ${version}`,
215
- )
216
- }
217
-
218
- /**
219
- * Start QuestDB server
220
- */
221
- async start(
222
- container: ContainerConfig,
223
- onProgress?: ProgressCallback,
224
- ): Promise<{ port: number; connectionString: string }> {
225
- const { name, port, version, binaryPath } = container
226
-
227
- // Check if already running
228
- const alreadyRunning = await processManager.isRunning(name, {
229
- engine: ENGINE,
230
- })
231
- if (alreadyRunning) {
232
- return {
233
- port,
234
- connectionString: this.getConnectionString(container),
235
- }
236
- }
237
-
238
- // Get QuestDB binary path - check both root and bin/ subdirectory
239
- let questdbBinary: string | null = null
240
- const { platform } = this.getPlatformInfo()
241
-
242
- if (binaryPath && existsSync(binaryPath)) {
243
- if (platform === 'win32') {
244
- const exePathRoot = join(binaryPath, 'questdb.exe')
245
- const exePathBin = join(binaryPath, 'bin', 'questdb.exe')
246
- if (existsSync(exePathRoot)) {
247
- questdbBinary = exePathRoot
248
- logDebug(`Using stored binary path: ${questdbBinary}`)
249
- } else if (existsSync(exePathBin)) {
250
- questdbBinary = exePathBin
251
- logDebug(`Using stored binary path (bin/): ${questdbBinary}`)
252
- }
253
- } else {
254
- const shPathRoot = join(binaryPath, 'questdb.sh')
255
- const shPathBin = join(binaryPath, 'bin', 'questdb.sh')
256
- if (existsSync(shPathRoot)) {
257
- questdbBinary = shPathRoot
258
- logDebug(`Using stored binary path: ${questdbBinary}`)
259
- } else if (existsSync(shPathBin)) {
260
- questdbBinary = shPathBin
261
- logDebug(`Using stored binary path (bin/): ${questdbBinary}`)
262
- }
263
- }
264
- }
265
-
266
- if (!questdbBinary) {
267
- try {
268
- questdbBinary = await this.getQuestDBPath(version)
269
- } catch (error) {
270
- const originalMessage =
271
- error instanceof Error ? error.message : String(error)
272
- throw new Error(
273
- `QuestDB ${version} is not installed. Run: spindb engines download questdb ${version}\n` +
274
- ` Original error: ${originalMessage}`,
275
- )
276
- }
277
- }
278
-
279
- const containerDir = paths.getContainerPath(name, { engine: ENGINE })
280
- const dataDir = paths.getContainerDataPath(name, { engine: ENGINE })
281
- const pidFile = join(containerDir, 'questdb.pid')
282
-
283
- // Calculate HTTP port (default is PG port + 188, i.e., 8812 + 188 = 9000)
284
- const httpPort = port + 188
285
-
286
- onProgress?.({ stage: 'starting', message: 'Starting QuestDB...' })
287
-
288
- logDebug(`Starting QuestDB with data dir: ${dataDir}`)
289
-
290
- const isWindows = platform === 'win32'
291
-
292
- // QuestDB startup command
293
- // Windows: questdb.exe doesn't support 'start' subcommand reliably (GitHub #1222)
294
- // Run without 'start' command - it starts in interactive/foreground mode
295
- // Unix: questdb.sh start -d ... -t ... -n daemonizes properly
296
- // -t tag: Unique process tag allows multiple QuestDB instances to run simultaneously
297
- // Without this, QuestDB detects other instances by process label and refuses to start
298
- const args = isWindows
299
- ? ['-d', dataDir, '-t', name] // Windows: no 'start' command, no '-n' flag
300
- : ['start', '-d', dataDir, '-t', name, '-n'] // Unix: full daemon mode
301
-
302
- // Environment variables for QuestDB configuration
303
- // Note: Don't set QDB_LOG_W_FILE_LOCATION - QuestDB expects rolling log patterns with $
304
- // Logs are written to dataDir/log/ by default
305
- //
306
- // Port offsets from base PostgreSQL port:
307
- // - HTTP Server: +188 (default 9000)
308
- // - HTTP Min Server: +191 (default 9003) - for health checks/metrics
309
- // - ILP TCP: +197 (default 9009)
310
- const env = {
311
- ...process.env,
312
- QDB_HTTP_BIND_TO: `0.0.0.0:${httpPort}`,
313
- QDB_HTTP_MIN_NET_BIND_TO: `0.0.0.0:${port + 191}`, // HTTP Min Server (health/metrics)
314
- QDB_PG_NET_BIND_TO: `0.0.0.0:${port}`,
315
- QDB_LINE_TCP_NET_BIND_TO: `0.0.0.0:${port + 197}`, // ILP port
316
- }
317
-
318
- // IMPORTANT: Use 'ignore' for all stdio to prevent hanging
319
- // QuestDB runs as a daemon and we don't want to keep file descriptors open
320
- const spawnOptions: SpawnOptions = {
321
- stdio: ['ignore', 'ignore', 'ignore'],
322
- detached: true,
323
- cwd: containerDir,
324
- env,
325
- windowsHide: true,
326
- }
327
-
328
- logDebug(`Spawning QuestDB: ${questdbBinary} ${args.join(' ')}`)
329
-
330
- const proc = spawn(questdbBinary, args, spawnOptions)
331
-
332
- // Allow the process to detach immediately
333
- // Note: We don't write the PID file here because questdb.sh forks the Java
334
- // process and exits. The shell's PID becomes invalid immediately.
335
- // QuestDB writes its own PID file to {dataDir}/questdb.pid which we'll
336
- // read after waiting for the server to be ready.
337
- proc.unref()
338
-
339
- // Wait for server to be ready
340
- const timeout = isWindows ? 90000 : 60000
341
- logDebug(
342
- `Waiting for QuestDB to be ready on port ${port}... (timeout: ${timeout}ms)`,
343
- )
344
-
345
- // Give QuestDB a moment to start before checking
346
- await new Promise((resolve) => setTimeout(resolve, 2000))
347
-
348
- const ready = await this.waitForReady(port, version, timeout)
349
- logDebug(`waitForReady returned: ${ready}`)
350
-
351
- if (!ready) {
352
- // Clean up on failure - try to find and kill the QuestDB process by port
353
- try {
354
- const pids = await platformService.findProcessByPort(port)
355
- if (pids.length > 0) {
356
- logDebug(`Cleaning up failed QuestDB process (pid: ${pids[0]})`)
357
- await platformService.terminateProcess(pids[0], true)
358
- }
359
- } catch {
360
- // Ignore cleanup errors
361
- }
362
- throw new Error(
363
- `QuestDB failed to start within timeout. Check logs at: ${dataDir}/log/`,
364
- )
365
- }
366
-
367
- // QuestDB is ready - find the actual Java process PID by port
368
- // QuestDB doesn't create a PID file in daemon mode, so we find the process by port
369
- try {
370
- const pids = await platformService.findProcessByPort(port)
371
- if (pids.length > 0) {
372
- const actualPid = pids[0]
373
- await writeFile(pidFile, actualPid.toString(), 'utf-8')
374
- logDebug(`Wrote PID file: ${pidFile} (pid: ${actualPid})`)
375
- } else {
376
- logDebug(
377
- 'Could not find QuestDB process by port - PID file not created',
378
- )
379
- }
380
- } catch (err) {
381
- logDebug(
382
- `Could not find QuestDB PID: ${err instanceof Error ? err.message : String(err)}`,
383
- )
384
- // Don't fail - QuestDB is running, we just can't track its PID
385
- }
386
-
387
- return {
388
- port,
389
- connectionString: this.getConnectionString(container),
390
- }
391
- }
392
-
393
- // Wait for QuestDB to be ready using psql
394
- private async waitForReady(
395
- port: number,
396
- version: string,
397
- timeoutMs = 60000,
398
- ): Promise<boolean> {
399
- logDebug(`waitForReady called for port ${port}`)
400
- const startTime = Date.now()
401
- const checkInterval = 500
402
-
403
- // Try to find psql for connection checking
404
- let psqlPath = await configManager.getBinaryPath('psql')
405
- if (!psqlPath) {
406
- // Try system psql
407
- try {
408
- const result = await findBinary('psql')
409
- if (result?.path) {
410
- psqlPath = result.path
411
- }
412
- } catch {
413
- // Ignore
414
- }
415
- }
416
-
417
- // If no psql, try HTTP health check instead
418
- if (!psqlPath) {
419
- logDebug('psql not found, using HTTP health check')
420
- return this.waitForReadyHttp(port + 188, timeoutMs)
421
- }
422
-
423
- let attempt = 0
424
- while (Date.now() - startTime < timeoutMs) {
425
- attempt++
426
- logDebug(`Connection attempt ${attempt}...`)
427
- try {
428
- await new Promise<void>((resolve, reject) => {
429
- const proc = spawn(
430
- psqlPath!,
431
- [
432
- '-h',
433
- '127.0.0.1',
434
- '-p',
435
- String(port),
436
- '-U',
437
- 'admin',
438
- '-d',
439
- 'qdb',
440
- '-c',
441
- 'SELECT 1;',
442
- ],
443
- {
444
- stdio: ['ignore', 'pipe', 'pipe'],
445
- env: { ...process.env, PGPASSWORD: 'quest' },
446
- },
447
- )
448
-
449
- proc.on('close', (code) => {
450
- if (code === 0) resolve()
451
- else reject(new Error(`Exit code ${code}`))
452
- })
453
- proc.on('error', reject)
454
- })
455
- logDebug(`QuestDB ready on port ${port}`)
456
- return true
457
- } catch (err) {
458
- logDebug(`Attempt ${attempt} failed: ${err}`)
459
- await new Promise((resolve) => setTimeout(resolve, checkInterval))
460
- }
461
- }
462
-
463
- logWarning(`QuestDB did not become ready within ${timeoutMs}ms`)
464
- return false
465
- }
466
-
467
- // Fallback: wait using HTTP health check
468
- private async waitForReadyHttp(
469
- httpPort: number,
470
- timeoutMs: number,
471
- ): Promise<boolean> {
472
- const startTime = Date.now()
473
- const checkInterval = 500
474
-
475
- while (Date.now() - startTime < timeoutMs) {
476
- try {
477
- const response = await fetch(
478
- `http://127.0.0.1:${httpPort}/exec?query=SELECT%201`,
479
- )
480
- if (response.ok) {
481
- logDebug(`QuestDB HTTP ready on port ${httpPort}`)
482
- return true
483
- }
484
- } catch {
485
- // Not ready yet
486
- }
487
- await new Promise((resolve) => setTimeout(resolve, checkInterval))
488
- }
489
-
490
- return false
491
- }
492
-
493
- /**
494
- * Stop QuestDB server
495
- */
496
- async stop(container: ContainerConfig): Promise<void> {
497
- const { name, port } = container
498
- const containerDir = paths.getContainerPath(name, { engine: ENGINE })
499
- const pidFile = join(containerDir, 'questdb.pid')
500
-
501
- logDebug(`Stopping QuestDB container "${name}" on port ${port}`)
502
-
503
- // Try to find process by port first (most reliable)
504
- // QuestDB doesn't create a PID file, so port lookup is primary
505
- let pid: number | null = null
506
- try {
507
- const pids = await platformService.findProcessByPort(port)
508
- if (pids.length > 0) {
509
- pid = pids[0]
510
- }
511
- } catch {
512
- // Fall back to our PID file
513
- try {
514
- const pidStr = await readFile(pidFile, 'utf-8')
515
- const parsedPid = parseInt(pidStr.trim(), 10)
516
- if (!isNaN(parsedPid)) {
517
- pid = parsedPid
518
- }
519
- } catch {
520
- // Ignore
521
- }
522
- }
523
-
524
- // Kill process if found
525
- if (pid && platformService.isProcessRunning(pid)) {
526
- logDebug(`Killing QuestDB process ${pid}`)
527
- const { platform } = this.getPlatformInfo()
528
- const isWindows = platform === 'win32'
529
-
530
- try {
531
- await platformService.terminateProcess(pid, false)
532
- // Wait for graceful termination - Windows needs more time for Java to release file locks
533
- const gracefulWait = isWindows ? 5000 : 2000
534
- await new Promise((resolve) => setTimeout(resolve, gracefulWait))
535
-
536
- if (platformService.isProcessRunning(pid)) {
537
- logWarning(`Graceful termination failed, force killing ${pid}`)
538
- await platformService.terminateProcess(pid, true)
539
- // Additional wait after force kill on Windows
540
- if (isWindows) {
541
- await new Promise((resolve) => setTimeout(resolve, 2000))
542
- }
543
- }
544
- } catch (error) {
545
- logDebug(`Process termination error: ${error}`)
546
- }
547
- }
548
-
549
- // Cleanup our PID file
550
- if (existsSync(pidFile)) {
551
- try {
552
- await unlink(pidFile)
553
- } catch {
554
- // Ignore
555
- }
556
- }
557
-
558
- logDebug('QuestDB stopped')
559
- }
560
-
561
- // Get QuestDB server status
562
- async status(container: ContainerConfig): Promise<StatusResult> {
563
- const { port } = container
564
-
565
- // Try HTTP health check first
566
- const httpPort = port + 188
567
- try {
568
- const response = await fetch(
569
- `http://127.0.0.1:${httpPort}/exec?query=SELECT%201`,
570
- )
571
- if (response.ok) {
572
- return { running: true, message: 'QuestDB is running' }
573
- }
574
- } catch {
575
- // Not running or not responding
576
- }
577
-
578
- return { running: false, message: 'QuestDB is not running' }
579
- }
580
-
581
- // Detect backup format
582
- async detectBackupFormat(filePath: string): Promise<BackupFormat> {
583
- return detectBackupFormatImpl(filePath)
584
- }
585
-
586
- /**
587
- * Restore a backup
588
- */
589
- async restore(
590
- container: ContainerConfig,
591
- backupPath: string,
592
- options: { database?: string; clean?: boolean } = {},
593
- ): Promise<RestoreResult> {
594
- const { name, port, version } = container
595
-
596
- return restoreBackup(backupPath, {
597
- containerName: name,
598
- port,
599
- database: options.database || container.database || 'qdb',
600
- version,
601
- clean: options.clean,
602
- })
603
- }
604
-
605
- /**
606
- * Get connection string
607
- * Format: postgresql://admin:quest@127.0.0.1:PORT/DATABASE
608
- */
609
- getConnectionString(container: ContainerConfig, database?: string): string {
610
- const { port } = container
611
- const db = database || container.database || 'qdb'
612
- return `postgresql://admin:quest@127.0.0.1:${port}/${db}`
613
- }
614
-
615
- // Open psql interactive shell
616
- async connect(container: ContainerConfig, database?: string): Promise<void> {
617
- const { port } = container
618
- const db = database || container.database || 'qdb'
619
-
620
- // Find psql
621
- let psqlPath = await configManager.getBinaryPath('psql')
622
- if (!psqlPath) {
623
- const result = await findBinary('psql')
624
- if (result?.path) {
625
- psqlPath = result.path
626
- } else {
627
- throw new Error(
628
- 'psql not found. Install PostgreSQL client tools or use the Web Console at ' +
629
- `http://127.0.0.1:${port + 188}`,
630
- )
631
- }
632
- }
633
-
634
- const spawnOptions: SpawnOptions = {
635
- stdio: 'inherit',
636
- env: { ...process.env, PGPASSWORD: 'quest' },
637
- }
638
-
639
- return new Promise((resolve, reject) => {
640
- const proc = spawn(
641
- psqlPath!,
642
- ['-h', '127.0.0.1', '-p', String(port), '-U', 'admin', '-d', db],
643
- spawnOptions,
644
- )
645
-
646
- proc.on('error', reject)
647
- proc.on('close', () => resolve())
648
- })
649
- }
650
-
651
- /**
652
- * Create a new database
653
- * Note: QuestDB has a single-database model but supports schemas
654
- */
655
- async createDatabase(
656
- container: ContainerConfig,
657
- database: string,
658
- ): Promise<void> {
659
- logDebug(
660
- `QuestDB uses a single-database model. Database "${database}" will be a schema.`,
661
- )
662
- // QuestDB doesn't have traditional CREATE DATABASE
663
- // All tables exist in the default database
664
- }
665
-
666
- /**
667
- * Drop a database (schema in QuestDB)
668
- */
669
- async dropDatabase(
670
- container: ContainerConfig,
671
- database: string,
672
- ): Promise<void> {
673
- logDebug(
674
- `QuestDB uses a single-database model. Cannot drop database "${database}".`,
675
- )
676
- }
677
-
678
- /**
679
- * Get the database size
680
- */
681
- async getDatabaseSize(container: ContainerConfig): Promise<number | null> {
682
- const dataDir = paths.getContainerDataPath(container.name, {
683
- engine: ENGINE,
684
- })
685
- if (!existsSync(dataDir)) return null
686
-
687
- try {
688
- let totalSize = 0
689
- const entries = await readdir(dataDir, {
690
- withFileTypes: true,
691
- recursive: true,
692
- })
693
- for (const entry of entries) {
694
- if (entry.isFile()) {
695
- const filePath = join(entry.parentPath ?? dataDir, entry.name)
696
- const stats = await stat(filePath)
697
- totalSize += stats.size
698
- }
699
- }
700
- return totalSize
701
- } catch {
702
- return null
703
- }
704
- }
705
-
706
- /**
707
- * Dump from a remote QuestDB connection
708
- */
709
- async dumpFromConnectionString(
710
- connectionString: string,
711
- outputPath: string,
712
- ): Promise<DumpResult> {
713
- const { host, port, database, user, password } =
714
- parseConnectionString(connectionString)
715
-
716
- logDebug(
717
- `Connecting to remote QuestDB at ${host}:${port} (db: ${database})`,
718
- )
719
-
720
- // Find psql for remote operations
721
- let psqlPath = await configManager.getBinaryPath('psql')
722
- if (!psqlPath) {
723
- const result = await findBinary('psql')
724
- if (result?.path) {
725
- psqlPath = result.path
726
- } else {
727
- throw new Error(
728
- 'psql not found. Install PostgreSQL client tools to dump from remote QuestDB.',
729
- )
730
- }
731
- }
732
-
733
- const lines: string[] = []
734
- lines.push('-- QuestDB backup generated by SpinDB')
735
- lines.push(`-- Source: ${host}:${port}`)
736
- lines.push(`-- Database: ${database}`)
737
- lines.push(`-- Date: ${new Date().toISOString()}`)
738
- lines.push('')
739
-
740
- // Get list of tables
741
- const tablesQuery = `SELECT table_name FROM tables() WHERE table_name NOT LIKE 'sys.%'`
742
- const tablesResult = await this.execRemoteQuery(
743
- psqlPath,
744
- host,
745
- port,
746
- user,
747
- password ?? '',
748
- database,
749
- tablesQuery,
750
- )
751
- const tables = tablesResult.split('\n').filter((t) => t.trim())
752
-
753
- logDebug(`Found ${tables.length} tables`)
754
-
755
- for (const table of tables) {
756
- if (!table.trim()) continue
757
-
758
- lines.push(`-- Table: ${table}`)
759
- lines.push('')
760
-
761
- try {
762
- const createQuery = `SHOW CREATE TABLE "${table}"`
763
- const createResult = await this.execRemoteQuery(
764
- psqlPath,
765
- host,
766
- port,
767
- user,
768
- password ?? '',
769
- database,
770
- createQuery,
771
- )
772
- if (createResult) {
773
- lines.push(createResult + ';')
774
- lines.push('')
775
- }
776
- } catch (error) {
777
- logWarning(`Could not get CREATE TABLE for ${table}: ${error}`)
778
- }
779
- }
780
-
781
- const content = lines.join('\n')
782
- await writeFile(outputPath, content, 'utf-8')
783
-
784
- return {
785
- filePath: outputPath,
786
- warnings:
787
- tables.length === 0 ? ['No tables found in database'] : undefined,
788
- }
789
- }
790
-
791
- private async execRemoteQuery(
792
- psqlPath: string,
793
- host: string,
794
- port: number,
795
- user: string,
796
- password: string,
797
- database: string,
798
- query: string,
799
- ): Promise<string> {
800
- return new Promise((resolve, reject) => {
801
- const args = [
802
- '-h',
803
- host,
804
- '-p',
805
- String(port),
806
- '-U',
807
- user,
808
- '-d',
809
- database,
810
- '-t',
811
- '-A',
812
- '-c',
813
- query,
814
- ]
815
-
816
- const proc = spawn(psqlPath, args, {
817
- stdio: ['ignore', 'pipe', 'pipe'],
818
- env: { ...process.env, PGPASSWORD: password },
819
- })
820
-
821
- let stdout = ''
822
- let stderr = ''
823
-
824
- proc.stdout.on('data', (data: Buffer) => {
825
- stdout += data.toString()
826
- })
827
- proc.stderr.on('data', (data: Buffer) => {
828
- stderr += data.toString()
829
- })
830
-
831
- proc.on('close', (code) => {
832
- if (code === 0) {
833
- resolve(stdout.trim())
834
- } else {
835
- reject(new Error(stderr || `Exit code ${code}`))
836
- }
837
- })
838
- proc.on('error', reject)
839
- })
840
- }
841
-
842
- // Create a backup
843
- async backup(
844
- container: ContainerConfig,
845
- outputPath: string,
846
- options: BackupOptions,
847
- ): Promise<BackupResult> {
848
- return createBackup(container, outputPath, options)
849
- }
850
-
851
- // Run a SQL file or inline SQL statement
852
- async runScript(
853
- container: ContainerConfig,
854
- options: { file?: string; sql?: string; database?: string },
855
- ): Promise<void> {
856
- const { port } = container
857
- const db = options.database || container.database || 'qdb'
858
-
859
- // Find psql
860
- let psqlPath = await configManager.getBinaryPath('psql')
861
- if (!psqlPath) {
862
- const result = await findBinary('psql')
863
- if (result?.path) {
864
- psqlPath = result.path
865
- } else {
866
- throw new Error('psql not found. Install PostgreSQL client tools.')
867
- }
868
- }
869
-
870
- if (options.file) {
871
- // Run SQL file
872
- const args = [
873
- '-h',
874
- '127.0.0.1',
875
- '-p',
876
- String(port),
877
- '-U',
878
- 'admin',
879
- '-d',
880
- db,
881
- '-f',
882
- options.file,
883
- ]
884
-
885
- await new Promise<void>((resolve, reject) => {
886
- const proc = spawn(psqlPath!, args, {
887
- stdio: 'inherit',
888
- env: { ...process.env, PGPASSWORD: 'quest' },
889
- })
890
-
891
- proc.on('error', reject)
892
- proc.on('close', (code) => {
893
- if (code === 0) {
894
- resolve()
895
- } else {
896
- reject(new Error(`psql exited with code ${code}`))
897
- }
898
- })
899
- })
900
- } else if (options.sql) {
901
- // Run inline SQL
902
- const args = [
903
- '-h',
904
- '127.0.0.1',
905
- '-p',
906
- String(port),
907
- '-U',
908
- 'admin',
909
- '-d',
910
- db,
911
- '-c',
912
- options.sql,
913
- ]
914
-
915
- await new Promise<void>((resolve, reject) => {
916
- const proc = spawn(psqlPath!, args, {
917
- stdio: 'inherit',
918
- env: { ...process.env, PGPASSWORD: 'quest' },
919
- })
920
-
921
- proc.on('error', reject)
922
- proc.on('close', (code) => {
923
- if (code === 0) {
924
- resolve()
925
- } else {
926
- reject(new Error(`psql exited with code ${code}`))
927
- }
928
- })
929
- })
930
- } else {
931
- throw new Error('Either file or sql option must be provided')
932
- }
933
- }
934
-
935
- /**
936
- * Execute a SQL query and return structured results
937
- * Uses PostgreSQL wire protocol via psql
938
- */
939
- async executeQuery(
940
- container: ContainerConfig,
941
- query: string,
942
- options?: QueryOptions,
943
- ): Promise<QueryResult> {
944
- const { port } = container
945
- const db = options?.database || container.database || 'qdb'
946
-
947
- // Find psql
948
- let psqlPath = await configManager.getBinaryPath('psql')
949
- if (!psqlPath) {
950
- const result = await findBinary('psql')
951
- if (result?.path) {
952
- psqlPath = result.path
953
- } else {
954
- throw new Error(
955
- 'psql not found. Install PostgreSQL client tools or use the Web Console.',
956
- )
957
- }
958
- }
959
-
960
- return new Promise((resolve, reject) => {
961
- const args = [
962
- '-X', // Skip ~/.psqlrc to ensure deterministic CSV output
963
- '-h',
964
- '127.0.0.1',
965
- '-p',
966
- String(port),
967
- '-U',
968
- 'admin',
969
- '-d',
970
- db,
971
- '--csv',
972
- '-c',
973
- query,
974
- ]
975
-
976
- const proc = spawn(psqlPath!, args, {
977
- stdio: ['ignore', 'pipe', 'pipe'],
978
- env: { ...process.env, PGPASSWORD: 'quest' },
979
- })
980
-
981
- let stdout = ''
982
- let stderr = ''
983
-
984
- proc.stdout?.on('data', (data: Buffer) => {
985
- stdout += data.toString()
986
- })
987
- proc.stderr?.on('data', (data: Buffer) => {
988
- stderr += data.toString()
989
- })
990
-
991
- proc.on('error', reject)
992
-
993
- proc.on('close', (code) => {
994
- if (code !== 0) {
995
- reject(new Error(stderr || `psql exited with code ${code}`))
996
- return
997
- }
998
-
999
- try {
1000
- resolve(parseCSVToQueryResult(stdout))
1001
- } catch (error) {
1002
- reject(
1003
- new Error(
1004
- `Failed to parse query result: ${error instanceof Error ? error.message : error}`,
1005
- ),
1006
- )
1007
- }
1008
- })
1009
- })
1010
- }
1011
-
1012
- /**
1013
- * List databases for QuestDB.
1014
- * QuestDB has a single database 'qdb'. Returns the configured database.
1015
- */
1016
- async listDatabases(container: ContainerConfig): Promise<string[]> {
1017
- // QuestDB has a single database 'qdb'
1018
- // Return the container's configured database
1019
- return [container.database]
1020
- }
1021
- }
1022
-
1023
- export const questdbEngine = new QuestDBEngine()