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,1095 +0,0 @@
1
- /**
2
- * FerretDB Composite Binary Manager
3
- *
4
- * Handles downloading and managing FerretDB binaries:
5
- *
6
- * v2 (default): Two binaries required:
7
- * 1. ferretdb - The MongoDB-compatible Go proxy
8
- * 2. postgresql-documentdb - PostgreSQL 17 with DocumentDB extension
9
- *
10
- * v1: Two binaries, but backend is shared:
11
- * 1. ferretdb - The MongoDB-compatible Go proxy
12
- * 2. Plain PostgreSQL - Managed by postgresqlBinaryManager (shared with standalone PG containers)
13
- *
14
- * This is a composite manager that coordinates the installation of both
15
- * binaries, which are required for FerretDB to function.
16
- */
17
-
18
- import { createWriteStream, existsSync } from 'fs'
19
- import { mkdir, readdir, rm, chmod, rename, cp } from 'fs/promises'
20
- import { join } from 'path'
21
- import { Readable } from 'stream'
22
- import { pipeline } from 'stream/promises'
23
- import { paths } from '../../config/paths'
24
- import { spawnAsync, extractWindowsArchive } from '../../core/spawn-utils'
25
- import { isRenameFallbackError } from '../../core/fs-error-utils'
26
- import { logDebug } from '../../core/error-handler'
27
- import { fetchWithRegistryFallback } from '../../core/hostdb-client'
28
- import {
29
- Engine,
30
- Platform,
31
- type Arch,
32
- type ProgressCallback,
33
- type InstalledBinary,
34
- isValidPlatform,
35
- isValidArch,
36
- } from '../../types'
37
- import {
38
- normalizeVersion,
39
- normalizeDocumentDBVersion,
40
- DEFAULT_DOCUMENTDB_VERSION,
41
- DEFAULT_V1_POSTGRESQL_VERSION,
42
- isV1,
43
- } from './version-maps'
44
- import {
45
- isPlatformSupported,
46
- getFerretDBBinaryUrl,
47
- getDocumentDBBinaryUrl,
48
- } from './binary-urls'
49
- import { postgresqlBinaryManager } from '../postgresql/binary-manager'
50
-
51
- const DOWNLOAD_TIMEOUT_MS = 5 * 60 * 1000 // 5 minutes
52
-
53
- /**
54
- * Result of ensuring both FerretDB binaries are installed
55
- */
56
- export type FerretDBBinaryPaths = {
57
- ferretdbPath: string // Path to ferretdb binary directory
58
- backendPath: string // Path to backend binary directory (postgresql-documentdb for v2, postgresql for v1)
59
- }
60
-
61
- /**
62
- * FerretDB Composite Binary Manager
63
- *
64
- * Manages the installation of both required binaries for FerretDB.
65
- */
66
- class FerretDBCompositeBinaryManager {
67
- /**
68
- * Check if the current platform supports FerretDB
69
- * @param version - Optional version to check platform support for (v1 supports Windows, v2 does not)
70
- */
71
- isPlatformSupported(
72
- platform: Platform,
73
- arch: Arch,
74
- version?: string,
75
- ): boolean {
76
- return isPlatformSupported(platform, arch, version)
77
- }
78
-
79
- /**
80
- * Get the full version string for a FerretDB version
81
- */
82
- getFullVersion(version: string): string {
83
- return normalizeVersion(version)
84
- }
85
-
86
- /**
87
- * Get the full version string for a postgresql-documentdb version
88
- */
89
- getFullDocumentDBVersion(version: string): string {
90
- return normalizeDocumentDBVersion(version)
91
- }
92
-
93
- /**
94
- * Check if FerretDB binaries are installed for a specific version
95
- */
96
- async isInstalled(
97
- version: string,
98
- platform: Platform,
99
- arch: Arch,
100
- backendVersion: string = DEFAULT_DOCUMENTDB_VERSION,
101
- ): Promise<boolean> {
102
- const fullVersion = this.getFullVersion(version)
103
-
104
- // Check FerretDB proxy
105
- const ferretdbPath = this.getFerretDBBinaryPath(fullVersion, platform, arch)
106
- const ext = platform === Platform.Win32 ? '.exe' : ''
107
- const ferretdbBinary = join(ferretdbPath, 'bin', `ferretdb${ext}`)
108
- if (!existsSync(ferretdbBinary)) {
109
- return false
110
- }
111
-
112
- // Check backend
113
- if (isV1(version)) {
114
- // v1: check plain PostgreSQL via postgresqlBinaryManager
115
- return postgresqlBinaryManager.isInstalled(
116
- DEFAULT_V1_POSTGRESQL_VERSION,
117
- platform,
118
- arch,
119
- )
120
- }
121
-
122
- // v2: check postgresql-documentdb
123
- const fullBackendVersion = this.getFullDocumentDBVersion(backendVersion)
124
- const documentdbPath = this.getDocumentDBBinaryPath(
125
- fullBackendVersion,
126
- platform,
127
- arch,
128
- )
129
- const pgCtlExt = platform === Platform.Win32 ? '.exe' : ''
130
- const pgCtl = join(documentdbPath, 'bin', `pg_ctl${pgCtlExt}`)
131
- if (!existsSync(pgCtl)) {
132
- return false
133
- }
134
-
135
- return true
136
- }
137
-
138
- /**
139
- * Get the path where FerretDB binaries would be installed
140
- * @param version - Full normalized version (e.g., "2.7.0", not "2" or "2.7")
141
- * @param platform - Operating system
142
- * @param arch - Architecture
143
- */
144
- getFerretDBBinaryPath(
145
- version: string,
146
- platform: Platform,
147
- arch: Arch,
148
- ): string {
149
- return join(paths.bin, `ferretdb-${version}-${platform}-${arch}`)
150
- }
151
-
152
- /**
153
- * Get the path where postgresql-documentdb binaries would be installed
154
- * @param version - Full normalized version (e.g., "17-0.107.0", not "17")
155
- * @param platform - Operating system
156
- * @param arch - Architecture
157
- */
158
- getDocumentDBBinaryPath(
159
- version: string,
160
- platform: Platform,
161
- arch: Arch,
162
- ): string {
163
- return join(
164
- paths.bin,
165
- `postgresql-documentdb-${version}-${platform}-${arch}`,
166
- )
167
- }
168
-
169
- /**
170
- * Get environment variables needed to run postgresql-documentdb binaries
171
- *
172
- * On Linux, the bundled binaries need LD_LIBRARY_PATH set to find libpq.so
173
- * and other shared libraries in the lib/ directory.
174
- *
175
- * On macOS, the binaries use @loader_path which doesn't need env vars.
176
- * On Windows, DLLs are found via PATH or same directory.
177
- *
178
- * @param version - Full normalized version (e.g., "17-0.107.0", not "17")
179
- * @param platform - Operating system
180
- * @param arch - Architecture
181
- */
182
- getDocumentDBSpawnEnv(
183
- version: string,
184
- platform: Platform,
185
- arch: Arch,
186
- ): Record<string, string> | undefined {
187
- // Only Linux needs LD_LIBRARY_PATH
188
- if (platform !== Platform.Linux) {
189
- return undefined
190
- }
191
-
192
- const documentdbPath = this.getDocumentDBBinaryPath(version, platform, arch)
193
- const libPath = join(documentdbPath, 'lib')
194
-
195
- // Prepend our lib path to any existing LD_LIBRARY_PATH
196
- const existingLdPath = process.env['LD_LIBRARY_PATH'] || ''
197
- const newLdPath = existingLdPath ? `${libPath}:${existingLdPath}` : libPath
198
-
199
- return {
200
- LD_LIBRARY_PATH: newLdPath,
201
- }
202
- }
203
-
204
- /**
205
- * Get the backend binary directory path for a FerretDB version.
206
- * For v1: returns the plain PostgreSQL binary path
207
- * For v2: returns the postgresql-documentdb binary path
208
- *
209
- * @param ferretdbVersion - FerretDB version (e.g., "1.24.2" or "2.7.0")
210
- * @param backendVersion - Backend version (PostgreSQL version for v1, DocumentDB version for v2)
211
- * @param platform - Operating system
212
- * @param arch - Architecture
213
- */
214
- getBackendBinaryPath(
215
- ferretdbVersion: string,
216
- backendVersion: string,
217
- platform: Platform,
218
- arch: Arch,
219
- ): string {
220
- if (isV1(ferretdbVersion)) {
221
- const pgFullVersion = postgresqlBinaryManager.getFullVersion(
222
- backendVersion || DEFAULT_V1_POSTGRESQL_VERSION,
223
- )
224
- return paths.getBinaryPath({
225
- engine: 'postgresql',
226
- version: pgFullVersion,
227
- platform,
228
- arch,
229
- })
230
- }
231
-
232
- const fullBackendVersion = this.getFullDocumentDBVersion(
233
- backendVersion || DEFAULT_DOCUMENTDB_VERSION,
234
- )
235
- return this.getDocumentDBBinaryPath(fullBackendVersion, platform, arch)
236
- }
237
-
238
- /**
239
- * Get environment variables needed to run backend binaries.
240
- * For v1: delegates to PostgreSQL's standard env (usually none needed)
241
- * For v2: delegates to getDocumentDBSpawnEnv
242
- *
243
- * @param ferretdbVersion - FerretDB version
244
- * @param backendVersion - Backend version
245
- * @param platform - Operating system
246
- * @param arch - Architecture
247
- */
248
- getBackendSpawnEnv(
249
- ferretdbVersion: string,
250
- backendVersion: string,
251
- platform: Platform,
252
- arch: Arch,
253
- ): Record<string, string> | undefined {
254
- if (isV1(ferretdbVersion)) {
255
- // Plain PostgreSQL doesn't need special env vars on most platforms
256
- // Linux may need LD_LIBRARY_PATH
257
- if (platform !== Platform.Linux) {
258
- return undefined
259
- }
260
- const pgPath = this.getBackendBinaryPath(
261
- ferretdbVersion,
262
- backendVersion,
263
- platform,
264
- arch,
265
- )
266
- const libPath = join(pgPath, 'lib')
267
- const existingLdPath = process.env['LD_LIBRARY_PATH'] || ''
268
- const newLdPath = existingLdPath
269
- ? `${libPath}:${existingLdPath}`
270
- : libPath
271
- return { LD_LIBRARY_PATH: newLdPath }
272
- }
273
-
274
- const fullBackendVersion = this.getFullDocumentDBVersion(
275
- backendVersion || DEFAULT_DOCUMENTDB_VERSION,
276
- )
277
- return this.getDocumentDBSpawnEnv(fullBackendVersion, platform, arch)
278
- }
279
-
280
- /**
281
- * List all installed FerretDB versions
282
- */
283
- async listInstalled(): Promise<InstalledBinary[]> {
284
- const binDir = paths.bin
285
- if (!existsSync(binDir)) {
286
- return []
287
- }
288
-
289
- const entries = await readdir(binDir, { withFileTypes: true })
290
- const installed: InstalledBinary[] = []
291
- const prefix = 'ferretdb-'
292
-
293
- for (const entry of entries) {
294
- if (!entry.isDirectory()) continue
295
- if (!entry.name.startsWith(prefix)) continue
296
-
297
- // Split from end to handle versions with dashes
298
- // Format: ferretdb-{version}-{platform}-{arch}
299
- const rest = entry.name.slice(prefix.length)
300
- const parts = rest.split('-')
301
- if (parts.length < 3) continue
302
-
303
- const arch = parts.pop()!
304
- const platform = parts.pop()!
305
- const version = parts.join('-')
306
-
307
- if (version && isValidPlatform(platform) && isValidArch(arch)) {
308
- installed.push({
309
- engine: Engine.FerretDB,
310
- version,
311
- platform,
312
- arch,
313
- })
314
- }
315
- }
316
-
317
- return installed
318
- }
319
-
320
- /**
321
- * Ensure both FerretDB binaries are installed
322
- *
323
- * @param version - FerretDB version
324
- * @param platform - Operating system
325
- * @param arch - Architecture
326
- * @param onProgress - Progress callback
327
- * @param backendVersion - Backend version (postgresql-documentdb for v2, PostgreSQL major for v1)
328
- * @returns Paths to both binary directories
329
- */
330
- async ensureInstalled(
331
- version: string,
332
- platform: Platform,
333
- arch: Arch,
334
- onProgress?: ProgressCallback,
335
- backendVersion?: string,
336
- ): Promise<FerretDBBinaryPaths> {
337
- const fullVersion = this.getFullVersion(version)
338
- const v1 = isV1(version)
339
- const effectiveBackendVersion =
340
- backendVersion ||
341
- (v1 ? DEFAULT_V1_POSTGRESQL_VERSION : DEFAULT_DOCUMENTDB_VERSION)
342
-
343
- // Check if already installed
344
- if (
345
- await this.isInstalled(version, platform, arch, effectiveBackendVersion)
346
- ) {
347
- onProgress?.({
348
- stage: 'cached',
349
- message: 'Using cached FerretDB binaries',
350
- })
351
- return {
352
- ferretdbPath: this.getFerretDBBinaryPath(fullVersion, platform, arch),
353
- backendPath: this.getBackendBinaryPath(
354
- fullVersion,
355
- effectiveBackendVersion,
356
- platform,
357
- arch,
358
- ),
359
- }
360
- }
361
-
362
- if (v1) {
363
- return this.ensureInstalledV1(
364
- version,
365
- platform,
366
- arch,
367
- onProgress,
368
- effectiveBackendVersion,
369
- )
370
- }
371
-
372
- return this.ensureInstalledV2(
373
- version,
374
- platform,
375
- arch,
376
- onProgress,
377
- effectiveBackendVersion,
378
- )
379
- }
380
-
381
- /**
382
- * Ensure v1 FerretDB binaries are installed (proxy + plain PostgreSQL)
383
- */
384
- private async ensureInstalledV1(
385
- version: string,
386
- platform: Platform,
387
- arch: Arch,
388
- onProgress?: ProgressCallback,
389
- backendVersion: string = DEFAULT_V1_POSTGRESQL_VERSION,
390
- ): Promise<FerretDBBinaryPaths> {
391
- // Download FerretDB v1 proxy
392
- const ferretdbPath = await this.downloadFerretDB(
393
- version,
394
- platform,
395
- arch,
396
- onProgress,
397
- )
398
-
399
- // Ensure plain PostgreSQL is installed via postgresqlBinaryManager
400
- onProgress?.({
401
- stage: 'downloading',
402
- message: 'Ensuring PostgreSQL backend is available...',
403
- })
404
- const backendPath = await postgresqlBinaryManager.ensureInstalled(
405
- backendVersion,
406
- platform,
407
- arch,
408
- onProgress,
409
- )
410
-
411
- return { ferretdbPath, backendPath }
412
- }
413
-
414
- /**
415
- * Ensure v2 FerretDB binaries are installed (proxy + postgresql-documentdb)
416
- */
417
- private async ensureInstalledV2(
418
- version: string,
419
- platform: Platform,
420
- arch: Arch,
421
- onProgress?: ProgressCallback,
422
- backendVersion: string = DEFAULT_DOCUMENTDB_VERSION,
423
- ): Promise<FerretDBBinaryPaths> {
424
- const fullVersion = this.getFullVersion(version)
425
-
426
- // Check if FerretDB is already installed (DocumentDB might be missing)
427
- const ext = platform === Platform.Win32 ? '.exe' : ''
428
- const ferretdbBinaryPath = this.getFerretDBBinaryPath(
429
- fullVersion,
430
- platform,
431
- arch,
432
- )
433
- const ferretdbBinary = join(ferretdbBinaryPath, 'bin', `ferretdb${ext}`)
434
- const ferretdbAlreadyInstalled = existsSync(ferretdbBinary)
435
-
436
- // Download both binaries - ensure atomicity by cleaning up FerretDB if DocumentDB fails
437
- // (only if FerretDB was newly downloaded in this call)
438
- const ferretdbPath = await this.downloadFerretDB(
439
- version,
440
- platform,
441
- arch,
442
- onProgress,
443
- )
444
-
445
- let backendPath: string
446
- try {
447
- backendPath = await this.downloadDocumentDB(
448
- backendVersion,
449
- platform,
450
- arch,
451
- onProgress,
452
- )
453
- } catch (error) {
454
- // Only clean up FerretDB if it was newly downloaded (not pre-existing)
455
- if (!ferretdbAlreadyInstalled) {
456
- onProgress?.({
457
- stage: 'error',
458
- message:
459
- 'postgresql-documentdb download failed, cleaning up FerretDB...',
460
- })
461
- await rm(ferretdbPath, { recursive: true, force: true }).catch(() => {})
462
- }
463
- throw error
464
- }
465
-
466
- return { ferretdbPath, backendPath }
467
- }
468
-
469
- /**
470
- * Download FerretDB proxy binary
471
- */
472
- private async downloadFerretDB(
473
- version: string,
474
- platform: Platform,
475
- arch: Arch,
476
- onProgress?: ProgressCallback,
477
- ): Promise<string> {
478
- const fullVersion = this.getFullVersion(version)
479
- const binPath = this.getFerretDBBinaryPath(fullVersion, platform, arch)
480
-
481
- // Check if FerretDB is already installed
482
- const ext = platform === Platform.Win32 ? '.exe' : ''
483
- const ferretdbBinary = join(binPath, 'bin', `ferretdb${ext}`)
484
- if (existsSync(ferretdbBinary)) {
485
- onProgress?.({
486
- stage: 'cached',
487
- message: 'FerretDB proxy already installed',
488
- })
489
- return binPath
490
- }
491
-
492
- const url = getFerretDBBinaryUrl(version, platform, arch)
493
- const tempDir = join(
494
- paths.bin,
495
- `temp-ferretdb-${fullVersion}-${platform}-${arch}`,
496
- )
497
- const archiveExt = platform === Platform.Win32 ? 'zip' : 'tar.gz'
498
- const archiveFile = join(tempDir, `ferretdb.${archiveExt}`)
499
-
500
- // Clean up any partial installation
501
- if (existsSync(binPath)) {
502
- await rm(binPath, { recursive: true, force: true })
503
- }
504
-
505
- // Ensure directories exist
506
- await mkdir(paths.bin, { recursive: true })
507
- await mkdir(tempDir, { recursive: true })
508
- await mkdir(binPath, { recursive: true })
509
-
510
- let success = false
511
- try {
512
- onProgress?.({
513
- stage: 'downloading',
514
- message: 'Downloading FerretDB proxy...',
515
- })
516
-
517
- await this.downloadArchive(url, archiveFile, 'FerretDB')
518
-
519
- if (platform === Platform.Win32) {
520
- await this.extractWindowsBinaries(
521
- archiveFile,
522
- binPath,
523
- tempDir,
524
- onProgress,
525
- )
526
- } else {
527
- await this.extractUnixBinaries(
528
- archiveFile,
529
- binPath,
530
- tempDir,
531
- onProgress,
532
- )
533
- }
534
-
535
- // Make binaries executable (Unix only)
536
- if (platform !== Platform.Win32) {
537
- const binDir = join(binPath, 'bin')
538
- if (existsSync(binDir)) {
539
- const binaries = await readdir(binDir)
540
- for (const binary of binaries) {
541
- await chmod(join(binDir, binary), 0o755)
542
- }
543
- }
544
- }
545
-
546
- // On macOS, re-sign binaries to fix code signature issues
547
- if (platform === Platform.Darwin) {
548
- onProgress?.({
549
- stage: 'signing',
550
- message: 'Re-signing FerretDB binaries for macOS...',
551
- })
552
- await this.resignMacOSBinaries(binPath)
553
- }
554
-
555
- // Verify the installation
556
- onProgress?.({ stage: 'verifying', message: 'Verifying FerretDB...' })
557
- await this.verifyFerretDB(fullVersion, platform, arch)
558
-
559
- success = true
560
- return binPath
561
- } finally {
562
- // Clean up temp directory
563
- await rm(tempDir, { recursive: true, force: true })
564
- // Clean up binPath on failure
565
- if (!success) {
566
- await rm(binPath, { recursive: true, force: true })
567
- }
568
- }
569
- }
570
-
571
- /**
572
- * Download postgresql-documentdb backend binary
573
- */
574
- private async downloadDocumentDB(
575
- version: string,
576
- platform: Platform,
577
- arch: Arch,
578
- onProgress?: ProgressCallback,
579
- ): Promise<string> {
580
- const fullVersion = this.getFullDocumentDBVersion(version)
581
- const binPath = this.getDocumentDBBinaryPath(fullVersion, platform, arch)
582
-
583
- // Check if postgresql-documentdb is already installed
584
- const ext = platform === Platform.Win32 ? '.exe' : ''
585
- const pgCtl = join(binPath, 'bin', `pg_ctl${ext}`)
586
- if (existsSync(pgCtl)) {
587
- onProgress?.({
588
- stage: 'cached',
589
- message: 'postgresql-documentdb already installed',
590
- })
591
- return binPath
592
- }
593
-
594
- const url = getDocumentDBBinaryUrl(version, platform, arch)
595
- const tempDir = join(
596
- paths.bin,
597
- `temp-postgresql-documentdb-${fullVersion}-${platform}-${arch}`,
598
- )
599
- const archiveFile = join(tempDir, 'postgresql-documentdb.tar.gz')
600
-
601
- // Clean up any partial installation
602
- if (existsSync(binPath)) {
603
- await rm(binPath, { recursive: true, force: true })
604
- }
605
-
606
- // Ensure directories exist
607
- await mkdir(paths.bin, { recursive: true })
608
- await mkdir(tempDir, { recursive: true })
609
- await mkdir(binPath, { recursive: true })
610
-
611
- let success = false
612
- try {
613
- onProgress?.({
614
- stage: 'downloading',
615
- message: 'Downloading postgresql-documentdb backend...',
616
- })
617
-
618
- await this.downloadArchive(url, archiveFile, 'postgresql-documentdb')
619
-
620
- await this.extractUnixBinaries(archiveFile, binPath, tempDir, onProgress)
621
-
622
- // Make binaries executable
623
- const binaryDir = join(binPath, 'bin')
624
- if (existsSync(binaryDir)) {
625
- const binaries = await readdir(binaryDir)
626
- for (const binary of binaries) {
627
- await chmod(join(binaryDir, binary), 0o755)
628
- }
629
- }
630
-
631
- // On macOS, re-sign binaries and libraries to fix code signature issues
632
- // (signatures become invalid after download due to quarantine/Gatekeeper)
633
- if (platform === Platform.Darwin) {
634
- onProgress?.({
635
- stage: 'signing',
636
- message: 'Re-signing binaries for macOS...',
637
- })
638
- await this.resignMacOSBinaries(binPath)
639
- }
640
-
641
- // Verify the installation
642
- onProgress?.({
643
- stage: 'verifying',
644
- message: 'Verifying postgresql-documentdb...',
645
- })
646
- await this.verifyDocumentDB(fullVersion, platform, arch)
647
-
648
- success = true
649
- return binPath
650
- } finally {
651
- // Clean up temp directory
652
- await rm(tempDir, { recursive: true, force: true })
653
- // Clean up binPath on failure
654
- if (!success) {
655
- await rm(binPath, { recursive: true, force: true })
656
- }
657
- }
658
- }
659
-
660
- /**
661
- * Download an archive file
662
- */
663
- private async downloadArchive(
664
- url: string,
665
- archiveFile: string,
666
- displayName: string,
667
- ): Promise<void> {
668
- const controller = new AbortController()
669
- const timeoutId = setTimeout(() => controller.abort(), DOWNLOAD_TIMEOUT_MS)
670
-
671
- try {
672
- const response = await fetchWithRegistryFallback(url, {
673
- signal: controller.signal,
674
- })
675
-
676
- if (!response.ok) {
677
- if (response.status === 404) {
678
- throw new Error(
679
- `${displayName} binaries not found (404). ` +
680
- 'This version may have been removed from hostdb. ' +
681
- 'Try a different version or check https://registry.layerbase.host',
682
- )
683
- }
684
- throw new Error(
685
- `Failed to download ${displayName} binaries: ${response.status} ${response.statusText}`,
686
- )
687
- }
688
-
689
- if (!response.body) {
690
- throw new Error(
691
- `Download failed: response has no body (status ${response.status})`,
692
- )
693
- }
694
-
695
- const fileStream = createWriteStream(archiveFile)
696
- try {
697
- const nodeStream = Readable.fromWeb(response.body)
698
- await pipeline(nodeStream, fileStream)
699
- } catch (pipelineError) {
700
- fileStream.destroy()
701
- throw pipelineError
702
- }
703
- } catch (error) {
704
- const err = error as Error
705
- if (err.name === 'AbortError') {
706
- throw new Error(
707
- `Download timed out after ${DOWNLOAD_TIMEOUT_MS / 1000 / 60} minutes. ` +
708
- 'Check your network connection and try again.',
709
- )
710
- }
711
- throw error
712
- } finally {
713
- clearTimeout(timeoutId)
714
- }
715
- }
716
-
717
- /**
718
- * Extract Unix binaries from tar.gz file
719
- */
720
- private async extractUnixBinaries(
721
- tarFile: string,
722
- binPath: string,
723
- tempDir: string,
724
- onProgress?: ProgressCallback,
725
- ): Promise<void> {
726
- onProgress?.({
727
- stage: 'extracting',
728
- message: 'Extracting binaries...',
729
- })
730
-
731
- const extractDir = join(tempDir, 'extract')
732
- await mkdir(extractDir, { recursive: true })
733
-
734
- try {
735
- await spawnAsync('tar', ['-xzf', tarFile, '-C', extractDir])
736
- } catch (error) {
737
- const err = error as Error & { code?: string | number }
738
-
739
- // Check if extraction actually succeeded despite the error
740
- const entries = await readdir(extractDir)
741
- if (entries.length === 0) {
742
- throw new Error(
743
- `Extraction failed: ${err.message}${err.code ? ` (code: ${err.code})` : ''}`,
744
- )
745
- }
746
-
747
- logDebug('FerretDB extraction recovered from tar error', {
748
- tarFile,
749
- entriesExtracted: entries.length,
750
- errorMessage: err.message,
751
- errorCode: err.code,
752
- })
753
- }
754
-
755
- await this.moveExtractedEntries(extractDir, binPath)
756
- }
757
-
758
- /**
759
- * Extract Windows binaries from ZIP file
760
- *
761
- * FerretDB v1 supports Windows. v2 does not (postgresql-documentdb startup issues).
762
- */
763
- private async extractWindowsBinaries(
764
- zipFile: string,
765
- binPath: string,
766
- tempDir: string,
767
- onProgress?: ProgressCallback,
768
- ): Promise<void> {
769
- onProgress?.({
770
- stage: 'extracting',
771
- message: 'Extracting binaries...',
772
- })
773
-
774
- const extractDir = join(tempDir, 'extract')
775
- await mkdir(extractDir, { recursive: true })
776
-
777
- await extractWindowsArchive(zipFile, extractDir)
778
- await this.moveExtractedEntries(extractDir, binPath)
779
- }
780
-
781
- /**
782
- * Move extracted entries from extractDir to binPath
783
- */
784
- private async moveExtractedEntries(
785
- extractDir: string,
786
- binPath: string,
787
- ): Promise<void> {
788
- const entries = await readdir(extractDir, { withFileTypes: true })
789
-
790
- // Look for engine directory (ferretdb-* or postgresql-documentdb-*)
791
- const engineDir = entries.find(
792
- (e) =>
793
- e.isDirectory() &&
794
- (e.name === 'ferretdb' ||
795
- e.name.startsWith('ferretdb-') ||
796
- e.name === 'postgresql-documentdb' ||
797
- e.name.startsWith('postgresql-documentdb-')),
798
- )
799
-
800
- const sourceDir = engineDir ? join(extractDir, engineDir.name) : extractDir
801
- const sourceEntries = engineDir
802
- ? await readdir(sourceDir, { withFileTypes: true })
803
- : entries
804
-
805
- for (const entry of sourceEntries) {
806
- const sourcePath = join(sourceDir, entry.name)
807
- const destPath = join(binPath, entry.name)
808
- try {
809
- await rename(sourcePath, destPath)
810
- } catch (error) {
811
- if (isRenameFallbackError(error)) {
812
- await cp(sourcePath, destPath, { recursive: true })
813
- await rm(sourcePath, { recursive: true, force: true })
814
- } else {
815
- throw error
816
- }
817
- }
818
- }
819
- }
820
-
821
- /**
822
- * Verify FerretDB binary installation
823
- */
824
- private async verifyFerretDB(
825
- version: string,
826
- platform: Platform,
827
- arch: Arch,
828
- ): Promise<void> {
829
- const binPath = this.getFerretDBBinaryPath(version, platform, arch)
830
- const ext = platform === Platform.Win32 ? '.exe' : ''
831
- const ferretdbBinary = join(binPath, 'bin', `ferretdb${ext}`)
832
-
833
- if (!existsSync(ferretdbBinary)) {
834
- throw new Error(`FerretDB binary not found at ${binPath}/bin/`)
835
- }
836
-
837
- // FerretDB v1 hostdb builds panic on --version due to missing version.txt
838
- // at build time. For v1, just verify the binary exists (checked above).
839
- if (isV1(version)) {
840
- return
841
- }
842
-
843
- try {
844
- const { stdout } = await spawnAsync(ferretdbBinary, ['--version'])
845
- const match = stdout.match(
846
- /(?:ferretdb\s+)?(?:version\s+)?v?(\d+\.\d+\.\d+)/,
847
- )
848
- if (!match) {
849
- throw new Error(
850
- `Could not parse FerretDB version from: ${stdout.trim()}`,
851
- )
852
- }
853
-
854
- const reportedVersion = match[1]
855
- const expectedMajor = version.split('.')[0]
856
- const reportedMajor = reportedVersion.split('.')[0]
857
-
858
- if (expectedMajor !== reportedMajor) {
859
- throw new Error(
860
- `Version mismatch: expected ${version}, got ${reportedVersion}`,
861
- )
862
- }
863
- } catch (error) {
864
- const err = error as Error
865
- throw new Error(`Failed to verify FerretDB binary: ${err.message}`)
866
- }
867
- }
868
-
869
- /**
870
- * Verify postgresql-documentdb binary installation
871
- * Tests both pg_ctl and initdb since initdb is used during container creation
872
- */
873
- private async verifyDocumentDB(
874
- version: string,
875
- platform: Platform,
876
- arch: Arch,
877
- ): Promise<void> {
878
- const binPath = this.getDocumentDBBinaryPath(version, platform, arch)
879
- const ext = platform === Platform.Win32 ? '.exe' : ''
880
- const pgCtl = join(binPath, 'bin', `pg_ctl${ext}`)
881
- const initdb = join(binPath, 'bin', `initdb${ext}`)
882
-
883
- if (!existsSync(pgCtl)) {
884
- throw new Error(
885
- `postgresql-documentdb binary not found at ${binPath}/bin/`,
886
- )
887
- }
888
-
889
- if (!existsSync(initdb)) {
890
- throw new Error(
891
- `initdb not found at ${binPath}/bin/ - required for container initialization`,
892
- )
893
- }
894
-
895
- // Get spawn env for Linux (LD_LIBRARY_PATH)
896
- const spawnEnv = this.getDocumentDBSpawnEnv(version, platform, arch)
897
-
898
- // Verify pg_ctl works
899
- try {
900
- const { stdout } = await spawnAsync(pgCtl, ['--version'], {
901
- env: spawnEnv,
902
- })
903
- // Expected output: "pg_ctl (PostgreSQL) 17.x.x"
904
- const match = stdout.match(/PostgreSQL[)\s]+(\d+)/)
905
- if (!match) {
906
- throw new Error(
907
- `Could not parse PostgreSQL version from: ${stdout.trim()}`,
908
- )
909
- }
910
-
911
- // version is like "17-0.107.0", extract PostgreSQL major version
912
- const expectedPgMajor = version.split('-')[0]
913
- const reportedPgMajor = match[1]
914
-
915
- if (expectedPgMajor !== reportedPgMajor) {
916
- throw new Error(
917
- `PostgreSQL version mismatch: expected ${expectedPgMajor}, got ${reportedPgMajor}`,
918
- )
919
- }
920
- } catch (error) {
921
- const err = error as Error & { code?: string | number | null }
922
-
923
- // Check for library loading issues (common on macOS/Linux with hostdb binaries)
924
- if (
925
- !err.code ||
926
- err.code === 'ENOENT' ||
927
- err.message.includes('dyld') ||
928
- err.message.includes('GLIBC')
929
- ) {
930
- throw new Error(
931
- `postgresql-documentdb pg_ctl failed to execute. This is likely due to missing or incompatible libraries.\n` +
932
- `The hostdb binaries may need to be rebuilt with proper rpath settings.\n` +
933
- `See: https://github.com/robertjbass/hostdb/issues\n` +
934
- `Original error: ${err.message || 'Process killed (library loading failed)'}`,
935
- )
936
- }
937
-
938
- throw new Error(
939
- `Failed to verify postgresql-documentdb pg_ctl: ${err.message}`,
940
- )
941
- }
942
-
943
- // Verify initdb works (critical for container creation)
944
- try {
945
- const { stdout } = await spawnAsync(initdb, ['--version'], {
946
- env: spawnEnv,
947
- })
948
- // Expected output: "initdb (PostgreSQL) 17.x.x"
949
- const match = stdout.match(/PostgreSQL[)\s]+(\d+)/)
950
- if (!match) {
951
- throw new Error(`Could not parse initdb version from: ${stdout.trim()}`)
952
- }
953
- logDebug(`initdb verified: ${stdout.trim()}`)
954
- } catch (error) {
955
- const err = error as Error & { code?: string | number | null }
956
-
957
- // Check for library loading issues
958
- if (
959
- !err.code ||
960
- err.code === 'ENOENT' ||
961
- err.message.includes('dyld') ||
962
- err.message.includes('GLIBC')
963
- ) {
964
- throw new Error(
965
- `postgresql-documentdb initdb failed to execute. This is likely due to missing or incompatible libraries.\n` +
966
- `initdb is required for FerretDB container initialization.\n` +
967
- `The hostdb binaries may need to be rebuilt with proper rpath settings.\n` +
968
- `See: https://github.com/robertjbass/hostdb/issues\n` +
969
- `Original error: ${err.message || 'Process killed (library loading failed)'}`,
970
- )
971
- }
972
-
973
- throw new Error(
974
- `Failed to verify postgresql-documentdb initdb: ${err.message}`,
975
- )
976
- }
977
- }
978
-
979
- /**
980
- * Delete installed binaries for a specific version
981
- *
982
- * For v1: Only deletes the FerretDB proxy. Plain PostgreSQL binaries are shared
983
- * with standalone PostgreSQL containers and should NOT be deleted.
984
- *
985
- * For v2: Deletes both FerretDB proxy and postgresql-documentdb backend.
986
- */
987
- async delete(
988
- version: string,
989
- platform: Platform,
990
- arch: Arch,
991
- backendVersion: string = DEFAULT_DOCUMENTDB_VERSION,
992
- ): Promise<void> {
993
- const fullVersion = this.getFullVersion(version)
994
-
995
- const ferretdbPath = this.getFerretDBBinaryPath(fullVersion, platform, arch)
996
- if (existsSync(ferretdbPath)) {
997
- await rm(ferretdbPath, { recursive: true, force: true })
998
- }
999
-
1000
- // v1: Don't delete shared PostgreSQL binaries (cascadeDelete: false)
1001
- if (isV1(version)) {
1002
- logDebug(
1003
- 'Skipping PostgreSQL backend deletion for FerretDB v1 (shared with standalone PG containers)',
1004
- )
1005
- return
1006
- }
1007
-
1008
- // v2: Delete postgresql-documentdb backend
1009
- const fullBackendVersion = this.getFullDocumentDBVersion(backendVersion)
1010
- const documentdbPath = this.getDocumentDBBinaryPath(
1011
- fullBackendVersion,
1012
- platform,
1013
- arch,
1014
- )
1015
- if (existsSync(documentdbPath)) {
1016
- await rm(documentdbPath, { recursive: true, force: true })
1017
- }
1018
- }
1019
-
1020
- /**
1021
- * Re-sign macOS binaries with ad-hoc signature
1022
- *
1023
- * Downloaded binaries may have invalid signatures due to Gatekeeper quarantine.
1024
- * Re-signing with ad-hoc signature (-s -) allows them to run without issues.
1025
- */
1026
- private async resignMacOSBinaries(binPath: string): Promise<void> {
1027
- // Sign all dylibs first (binaries depend on them)
1028
- const libDir = join(binPath, 'lib')
1029
- if (existsSync(libDir)) {
1030
- const libs = await readdir(libDir)
1031
- for (const lib of libs) {
1032
- if (lib.endsWith('.dylib')) {
1033
- const libPath = join(libDir, lib)
1034
- try {
1035
- await spawnAsync('codesign', [
1036
- '--force',
1037
- '--deep',
1038
- '-s',
1039
- '-',
1040
- libPath,
1041
- ])
1042
- } catch {
1043
- // Ignore signing errors for individual libs
1044
- logDebug(`Failed to sign ${lib}, continuing...`)
1045
- }
1046
- }
1047
- }
1048
-
1049
- // Also sign libs in postgresql/ subdirectory if it exists
1050
- const pgLibDir = join(libDir, 'postgresql')
1051
- if (existsSync(pgLibDir)) {
1052
- const pgLibs = await readdir(pgLibDir)
1053
- for (const lib of pgLibs) {
1054
- if (lib.endsWith('.dylib')) {
1055
- const libPath = join(pgLibDir, lib)
1056
- try {
1057
- await spawnAsync('codesign', [
1058
- '--force',
1059
- '--deep',
1060
- '-s',
1061
- '-',
1062
- libPath,
1063
- ])
1064
- } catch {
1065
- logDebug(`Failed to sign ${lib}, continuing...`)
1066
- }
1067
- }
1068
- }
1069
- }
1070
- }
1071
-
1072
- // Sign all binaries
1073
- const binDir = join(binPath, 'bin')
1074
- if (existsSync(binDir)) {
1075
- const binaries = await readdir(binDir)
1076
- for (const binary of binaries) {
1077
- const binaryPath = join(binDir, binary)
1078
- try {
1079
- await spawnAsync('codesign', [
1080
- '--force',
1081
- '--deep',
1082
- '-s',
1083
- '-',
1084
- binaryPath,
1085
- ])
1086
- } catch {
1087
- // Ignore signing errors for individual binaries
1088
- logDebug(`Failed to sign ${binary}, continuing...`)
1089
- }
1090
- }
1091
- }
1092
- }
1093
- }
1094
-
1095
- export const ferretdbBinaryManager = new FerretDBCompositeBinaryManager()