spindb 0.37.2 → 0.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (811) hide show
  1. package/dist/cli/bin.js +9 -0
  2. package/dist/cli/bin.js.map +1 -0
  3. package/dist/cli/commands/attach.js +102 -0
  4. package/dist/cli/commands/attach.js.map +1 -0
  5. package/dist/cli/commands/backup.js +197 -0
  6. package/dist/cli/commands/backup.js.map +1 -0
  7. package/dist/cli/commands/backups.js +190 -0
  8. package/dist/cli/commands/backups.js.map +1 -0
  9. package/dist/cli/commands/clone.js +119 -0
  10. package/dist/cli/commands/clone.js.map +1 -0
  11. package/dist/cli/commands/config.js +276 -0
  12. package/dist/cli/commands/config.js.map +1 -0
  13. package/dist/cli/commands/connect.js +559 -0
  14. package/dist/cli/commands/connect.js.map +1 -0
  15. package/dist/cli/commands/create.js +952 -0
  16. package/dist/cli/commands/create.js.map +1 -0
  17. package/dist/cli/commands/databases.js +485 -0
  18. package/dist/cli/commands/databases.js.map +1 -0
  19. package/dist/cli/commands/delete.js +106 -0
  20. package/dist/cli/commands/delete.js.map +1 -0
  21. package/dist/cli/commands/deps.js +238 -0
  22. package/dist/cli/commands/deps.js.map +1 -0
  23. package/dist/cli/commands/detach.js +81 -0
  24. package/dist/cli/commands/detach.js.map +1 -0
  25. package/dist/cli/commands/doctor.js +567 -0
  26. package/dist/cli/commands/doctor.js.map +1 -0
  27. package/dist/cli/commands/duckdb.js +207 -0
  28. package/dist/cli/commands/duckdb.js.map +1 -0
  29. package/dist/cli/commands/edit.js +524 -0
  30. package/dist/cli/commands/edit.js.map +1 -0
  31. package/dist/cli/commands/engines.js +1414 -0
  32. package/dist/cli/commands/engines.js.map +1 -0
  33. package/dist/cli/commands/export.js +383 -0
  34. package/dist/cli/commands/export.js.map +1 -0
  35. package/dist/cli/commands/info.js +270 -0
  36. package/dist/cli/commands/info.js.map +1 -0
  37. package/dist/cli/commands/list.js +215 -0
  38. package/dist/cli/commands/list.js.map +1 -0
  39. package/dist/cli/commands/logs.js +81 -0
  40. package/dist/cli/commands/logs.js.map +1 -0
  41. package/dist/cli/commands/menu/backup-handlers.js +1202 -0
  42. package/dist/cli/commands/menu/backup-handlers.js.map +1 -0
  43. package/dist/cli/commands/menu/container-handlers.js +1788 -0
  44. package/dist/cli/commands/menu/container-handlers.js.map +1 -0
  45. package/dist/cli/commands/menu/engine-handlers.js +235 -0
  46. package/dist/cli/commands/menu/engine-handlers.js.map +1 -0
  47. package/dist/cli/commands/menu/index.js +266 -0
  48. package/dist/cli/commands/menu/index.js.map +1 -0
  49. package/dist/cli/commands/menu/settings-handlers.js +320 -0
  50. package/dist/cli/commands/menu/settings-handlers.js.map +1 -0
  51. package/dist/cli/commands/menu/shared.js +13 -0
  52. package/dist/cli/commands/menu/shared.js.map +1 -0
  53. package/dist/cli/commands/menu/shell-handlers.js +1573 -0
  54. package/dist/cli/commands/menu/shell-handlers.js.map +1 -0
  55. package/dist/cli/commands/menu/sql-handlers.js +185 -0
  56. package/dist/cli/commands/menu/sql-handlers.js.map +1 -0
  57. package/dist/cli/commands/menu/update-handlers.js +322 -0
  58. package/dist/cli/commands/menu/update-handlers.js.map +1 -0
  59. package/dist/cli/commands/menu/validators.js +9 -0
  60. package/dist/cli/commands/menu/validators.js.map +1 -0
  61. package/dist/cli/commands/ports.js +166 -0
  62. package/dist/cli/commands/ports.js.map +1 -0
  63. package/dist/cli/commands/pull.js +166 -0
  64. package/dist/cli/commands/pull.js.map +1 -0
  65. package/dist/cli/commands/query.js +180 -0
  66. package/dist/cli/commands/query.js.map +1 -0
  67. package/dist/cli/commands/restore.js +428 -0
  68. package/dist/cli/commands/restore.js.map +1 -0
  69. package/dist/cli/commands/run.js +115 -0
  70. package/dist/cli/commands/run.js.map +1 -0
  71. package/dist/cli/commands/self-update.js +99 -0
  72. package/dist/cli/commands/self-update.js.map +1 -0
  73. package/dist/cli/commands/sqlite.js +207 -0
  74. package/dist/cli/commands/sqlite.js.map +1 -0
  75. package/dist/cli/commands/start.js +196 -0
  76. package/dist/cli/commands/start.js.map +1 -0
  77. package/dist/cli/commands/stop.js +182 -0
  78. package/dist/cli/commands/stop.js.map +1 -0
  79. package/dist/cli/commands/url.js +88 -0
  80. package/dist/cli/commands/url.js.map +1 -0
  81. package/dist/cli/commands/users.js +189 -0
  82. package/dist/cli/commands/users.js.map +1 -0
  83. package/dist/cli/commands/version.js +52 -0
  84. package/dist/cli/commands/version.js.map +1 -0
  85. package/dist/cli/commands/which.js +258 -0
  86. package/dist/cli/commands/which.js.map +1 -0
  87. package/dist/cli/constants.js +212 -0
  88. package/dist/cli/constants.js.map +1 -0
  89. package/dist/cli/helpers.js +1120 -0
  90. package/dist/cli/helpers.js.map +1 -0
  91. package/dist/cli/index.js +146 -0
  92. package/dist/cli/index.js.map +1 -0
  93. package/dist/cli/ui/prompts.js +1002 -0
  94. package/dist/cli/ui/prompts.js.map +1 -0
  95. package/dist/cli/ui/spinner.js +74 -0
  96. package/dist/cli/ui/spinner.js.map +1 -0
  97. package/dist/cli/ui/theme.js +99 -0
  98. package/dist/cli/ui/theme.js.map +1 -0
  99. package/dist/cli/utils/file-follower.js +79 -0
  100. package/dist/cli/utils/file-follower.js.map +1 -0
  101. package/dist/config/backup-formats.js +363 -0
  102. package/dist/config/backup-formats.js.map +1 -0
  103. package/dist/config/defaults.js +25 -0
  104. package/dist/config/defaults.js.map +1 -0
  105. package/dist/config/engine-defaults.js +303 -0
  106. package/dist/config/engine-defaults.js.map +1 -0
  107. package/dist/config/engines-registry.js +103 -0
  108. package/dist/config/engines-registry.js.map +1 -0
  109. package/dist/config/os-dependencies.js +767 -0
  110. package/dist/config/os-dependencies.js.map +1 -0
  111. package/dist/config/paths.js +156 -0
  112. package/dist/config/paths.js.map +1 -0
  113. package/dist/config/version.js +3 -0
  114. package/dist/config/version.js.map +1 -0
  115. package/dist/core/backup-restore.js +219 -0
  116. package/dist/core/backup-restore.js.map +1 -0
  117. package/dist/core/base-binary-manager.js +403 -0
  118. package/dist/core/base-binary-manager.js.map +1 -0
  119. package/dist/core/base-document-binary-manager.js +364 -0
  120. package/dist/core/base-document-binary-manager.js.map +1 -0
  121. package/dist/core/base-embedded-binary-manager.js +364 -0
  122. package/dist/core/base-embedded-binary-manager.js.map +1 -0
  123. package/dist/core/base-server-binary-manager.js +368 -0
  124. package/dist/core/base-server-binary-manager.js.map +1 -0
  125. package/dist/core/config-manager.js +495 -0
  126. package/dist/core/config-manager.js.map +1 -0
  127. package/dist/core/container-manager.js +609 -0
  128. package/dist/core/container-manager.js.map +1 -0
  129. package/dist/core/credential-generator.js +67 -0
  130. package/dist/core/credential-generator.js.map +1 -0
  131. package/dist/core/credential-manager.js +211 -0
  132. package/dist/core/credential-manager.js.map +1 -0
  133. package/dist/core/dblab-utils.js +105 -0
  134. package/dist/core/dblab-utils.js.map +1 -0
  135. package/dist/core/dependency-manager.js +359 -0
  136. package/dist/core/dependency-manager.js.map +1 -0
  137. package/dist/core/docker-exporter.js +1077 -0
  138. package/dist/core/docker-exporter.js.map +1 -0
  139. package/dist/core/error-handler.js +295 -0
  140. package/dist/core/error-handler.js.map +1 -0
  141. package/dist/core/fs-error-utils.js +74 -0
  142. package/dist/core/fs-error-utils.js.map +1 -0
  143. package/dist/core/homebrew-version-manager.js +280 -0
  144. package/dist/core/homebrew-version-manager.js.map +1 -0
  145. package/dist/core/hostdb-client.js +252 -0
  146. package/dist/core/hostdb-client.js.map +1 -0
  147. package/dist/core/hostdb-metadata.js +243 -0
  148. package/dist/core/hostdb-metadata.js.map +1 -0
  149. package/dist/core/hostdb-releases-factory.js +161 -0
  150. package/dist/core/hostdb-releases-factory.js.map +1 -0
  151. package/dist/core/library-env.js +88 -0
  152. package/dist/core/library-env.js.map +1 -0
  153. package/dist/core/pgweb-utils.js +53 -0
  154. package/dist/core/pgweb-utils.js.map +1 -0
  155. package/dist/core/platform-service.js +632 -0
  156. package/dist/core/platform-service.js.map +1 -0
  157. package/dist/core/port-manager.js +136 -0
  158. package/dist/core/port-manager.js.map +1 -0
  159. package/dist/core/process-manager.js +445 -0
  160. package/dist/core/process-manager.js.map +1 -0
  161. package/dist/core/pull-manager.js +418 -0
  162. package/dist/core/pull-manager.js.map +1 -0
  163. package/dist/core/query-parser.js +449 -0
  164. package/dist/core/query-parser.js.map +1 -0
  165. package/dist/core/spawn-utils.js +90 -0
  166. package/dist/core/spawn-utils.js.map +1 -0
  167. package/dist/core/start-with-retry.js +90 -0
  168. package/dist/core/start-with-retry.js.map +1 -0
  169. package/dist/core/test-cleanup.js +85 -0
  170. package/dist/core/test-cleanup.js.map +1 -0
  171. package/dist/core/tls-generator.js +84 -0
  172. package/dist/core/tls-generator.js.map +1 -0
  173. package/dist/core/transaction-manager.js +139 -0
  174. package/dist/core/transaction-manager.js.map +1 -0
  175. package/dist/core/update-manager.js +241 -0
  176. package/dist/core/update-manager.js.map +1 -0
  177. package/dist/core/version-migration.js +260 -0
  178. package/dist/core/version-migration.js.map +1 -0
  179. package/dist/core/version-utils.js +91 -0
  180. package/dist/core/version-utils.js.map +1 -0
  181. package/dist/engines/base-engine.js +179 -0
  182. package/dist/engines/base-engine.js.map +1 -0
  183. package/dist/engines/clickhouse/backup.js +289 -0
  184. package/dist/engines/clickhouse/backup.js.map +1 -0
  185. package/dist/engines/clickhouse/binary-manager.js +145 -0
  186. package/dist/engines/clickhouse/binary-manager.js.map +1 -0
  187. package/dist/engines/clickhouse/binary-urls.js +100 -0
  188. package/dist/engines/clickhouse/binary-urls.js.map +1 -0
  189. package/dist/engines/clickhouse/cli-utils.js +143 -0
  190. package/dist/engines/clickhouse/cli-utils.js.map +1 -0
  191. package/dist/engines/clickhouse/hostdb-releases.js +24 -0
  192. package/dist/engines/clickhouse/hostdb-releases.js.map +1 -0
  193. package/dist/engines/clickhouse/index.js +1077 -0
  194. package/dist/engines/clickhouse/index.js.map +1 -0
  195. package/dist/engines/clickhouse/restore.js +335 -0
  196. package/dist/engines/clickhouse/restore.js.map +1 -0
  197. package/dist/engines/clickhouse/version-maps.js +83 -0
  198. package/dist/engines/clickhouse/version-maps.js.map +1 -0
  199. package/dist/engines/clickhouse/version-validator.js +133 -0
  200. package/dist/engines/clickhouse/version-validator.js.map +1 -0
  201. package/dist/engines/cockroachdb/backup.js +261 -0
  202. package/dist/engines/cockroachdb/backup.js.map +1 -0
  203. package/dist/engines/cockroachdb/binary-manager.js +33 -0
  204. package/dist/engines/cockroachdb/binary-manager.js.map +1 -0
  205. package/dist/engines/cockroachdb/binary-urls.js +33 -0
  206. package/dist/engines/cockroachdb/binary-urls.js.map +1 -0
  207. package/dist/engines/cockroachdb/cli-utils.js +338 -0
  208. package/dist/engines/cockroachdb/cli-utils.js.map +1 -0
  209. package/dist/engines/cockroachdb/hostdb-releases.js +21 -0
  210. package/dist/engines/cockroachdb/hostdb-releases.js.map +1 -0
  211. package/dist/engines/cockroachdb/index.js +1016 -0
  212. package/dist/engines/cockroachdb/index.js.map +1 -0
  213. package/dist/engines/cockroachdb/restore.js +323 -0
  214. package/dist/engines/cockroachdb/restore.js.map +1 -0
  215. package/dist/engines/cockroachdb/version-maps.js +37 -0
  216. package/dist/engines/cockroachdb/version-maps.js.map +1 -0
  217. package/dist/engines/couchdb/api-client.js +64 -0
  218. package/dist/engines/couchdb/api-client.js.map +1 -0
  219. package/dist/engines/couchdb/backup.js +90 -0
  220. package/dist/engines/couchdb/backup.js.map +1 -0
  221. package/dist/engines/couchdb/binary-manager.js +62 -0
  222. package/dist/engines/couchdb/binary-manager.js.map +1 -0
  223. package/dist/engines/couchdb/binary-urls.js +92 -0
  224. package/dist/engines/couchdb/binary-urls.js.map +1 -0
  225. package/dist/engines/couchdb/hostdb-releases.js +21 -0
  226. package/dist/engines/couchdb/hostdb-releases.js.map +1 -0
  227. package/dist/engines/couchdb/index.js +1043 -0
  228. package/dist/engines/couchdb/index.js.map +1 -0
  229. package/dist/engines/couchdb/restore.js +198 -0
  230. package/dist/engines/couchdb/restore.js.map +1 -0
  231. package/dist/engines/couchdb/version-maps.js +67 -0
  232. package/dist/engines/couchdb/version-maps.js.map +1 -0
  233. package/dist/engines/couchdb/version-validator.js +88 -0
  234. package/dist/engines/couchdb/version-validator.js.map +1 -0
  235. package/dist/engines/duckdb/binary-manager.js +33 -0
  236. package/dist/engines/duckdb/binary-manager.js.map +1 -0
  237. package/{engines/duckdb/binary-urls.ts → dist/engines/duckdb/binary-urls.js} +11 -16
  238. package/dist/engines/duckdb/binary-urls.js.map +1 -0
  239. package/dist/engines/duckdb/hostdb-releases.js +21 -0
  240. package/dist/engines/duckdb/hostdb-releases.js.map +1 -0
  241. package/dist/engines/duckdb/index.js +594 -0
  242. package/dist/engines/duckdb/index.js.map +1 -0
  243. package/dist/engines/duckdb/registry.js +265 -0
  244. package/dist/engines/duckdb/registry.js.map +1 -0
  245. package/dist/engines/duckdb/scanner.js +12 -0
  246. package/dist/engines/duckdb/scanner.js.map +1 -0
  247. package/dist/engines/duckdb/version-maps.js +67 -0
  248. package/dist/engines/duckdb/version-maps.js.map +1 -0
  249. package/dist/engines/duckdb/version-validator.js +62 -0
  250. package/dist/engines/duckdb/version-validator.js.map +1 -0
  251. package/dist/engines/ferretdb/backup.js +170 -0
  252. package/dist/engines/ferretdb/backup.js.map +1 -0
  253. package/dist/engines/ferretdb/binary-manager.js +765 -0
  254. package/dist/engines/ferretdb/binary-manager.js.map +1 -0
  255. package/dist/engines/ferretdb/binary-urls.js +135 -0
  256. package/dist/engines/ferretdb/binary-urls.js.map +1 -0
  257. package/dist/engines/ferretdb/index.js +1517 -0
  258. package/dist/engines/ferretdb/index.js.map +1 -0
  259. package/dist/engines/ferretdb/restore.js +310 -0
  260. package/dist/engines/ferretdb/restore.js.map +1 -0
  261. package/{engines/ferretdb/version-maps.ts → dist/engines/ferretdb/version-maps.js} +62 -79
  262. package/dist/engines/ferretdb/version-maps.js.map +1 -0
  263. package/dist/engines/file-based-utils.js +184 -0
  264. package/dist/engines/file-based-utils.js.map +1 -0
  265. package/dist/engines/index.js +124 -0
  266. package/dist/engines/index.js.map +1 -0
  267. package/dist/engines/influxdb/api-client.js +54 -0
  268. package/dist/engines/influxdb/api-client.js.map +1 -0
  269. package/dist/engines/influxdb/backup.js +119 -0
  270. package/dist/engines/influxdb/backup.js.map +1 -0
  271. package/dist/engines/influxdb/binary-manager.js +87 -0
  272. package/dist/engines/influxdb/binary-manager.js.map +1 -0
  273. package/dist/engines/influxdb/binary-urls.js +56 -0
  274. package/dist/engines/influxdb/binary-urls.js.map +1 -0
  275. package/dist/engines/influxdb/hostdb-releases.js +21 -0
  276. package/dist/engines/influxdb/hostdb-releases.js.map +1 -0
  277. package/dist/engines/influxdb/index.js +962 -0
  278. package/dist/engines/influxdb/index.js.map +1 -0
  279. package/dist/engines/influxdb/restore.js +329 -0
  280. package/dist/engines/influxdb/restore.js.map +1 -0
  281. package/dist/engines/influxdb/version-maps.js +64 -0
  282. package/dist/engines/influxdb/version-maps.js.map +1 -0
  283. package/dist/engines/influxdb/version-validator.js +109 -0
  284. package/dist/engines/influxdb/version-validator.js.map +1 -0
  285. package/dist/engines/mariadb/backup.js +178 -0
  286. package/dist/engines/mariadb/backup.js.map +1 -0
  287. package/dist/engines/mariadb/binary-manager.js +33 -0
  288. package/dist/engines/mariadb/binary-manager.js.map +1 -0
  289. package/{engines/mariadb/binary-urls.ts → dist/engines/mariadb/binary-urls.js} +38 -55
  290. package/dist/engines/mariadb/binary-urls.js.map +1 -0
  291. package/dist/engines/mariadb/hostdb-releases.js +21 -0
  292. package/dist/engines/mariadb/hostdb-releases.js.map +1 -0
  293. package/dist/engines/mariadb/index.js +1011 -0
  294. package/dist/engines/mariadb/index.js.map +1 -0
  295. package/dist/engines/mariadb/restore.js +322 -0
  296. package/dist/engines/mariadb/restore.js.map +1 -0
  297. package/dist/engines/mariadb/version-maps.js +63 -0
  298. package/dist/engines/mariadb/version-maps.js.map +1 -0
  299. package/dist/engines/mariadb/version-validator.js +143 -0
  300. package/dist/engines/mariadb/version-validator.js.map +1 -0
  301. package/dist/engines/meilisearch/api-client.js +50 -0
  302. package/dist/engines/meilisearch/api-client.js.map +1 -0
  303. package/dist/engines/meilisearch/backup.js +167 -0
  304. package/dist/engines/meilisearch/backup.js.map +1 -0
  305. package/dist/engines/meilisearch/binary-manager.js +31 -0
  306. package/dist/engines/meilisearch/binary-manager.js.map +1 -0
  307. package/dist/engines/meilisearch/binary-urls.js +56 -0
  308. package/dist/engines/meilisearch/binary-urls.js.map +1 -0
  309. package/dist/engines/meilisearch/hostdb-releases.js +21 -0
  310. package/dist/engines/meilisearch/hostdb-releases.js.map +1 -0
  311. package/dist/engines/meilisearch/index.js +992 -0
  312. package/dist/engines/meilisearch/index.js.map +1 -0
  313. package/dist/engines/meilisearch/restore.js +167 -0
  314. package/dist/engines/meilisearch/restore.js.map +1 -0
  315. package/dist/engines/meilisearch/version-maps.js +67 -0
  316. package/dist/engines/meilisearch/version-maps.js.map +1 -0
  317. package/dist/engines/meilisearch/version-validator.js +109 -0
  318. package/dist/engines/meilisearch/version-validator.js.map +1 -0
  319. package/dist/engines/mongodb/backup.js +109 -0
  320. package/dist/engines/mongodb/backup.js.map +1 -0
  321. package/dist/engines/mongodb/binary-manager.js +36 -0
  322. package/dist/engines/mongodb/binary-manager.js.map +1 -0
  323. package/dist/engines/mongodb/binary-urls.js +46 -0
  324. package/dist/engines/mongodb/binary-urls.js.map +1 -0
  325. package/dist/engines/mongodb/cli-utils.js +131 -0
  326. package/dist/engines/mongodb/cli-utils.js.map +1 -0
  327. package/dist/engines/mongodb/hostdb-releases.js +77 -0
  328. package/dist/engines/mongodb/hostdb-releases.js.map +1 -0
  329. package/dist/engines/mongodb/index.js +873 -0
  330. package/dist/engines/mongodb/index.js.map +1 -0
  331. package/dist/engines/mongodb/restore.js +276 -0
  332. package/dist/engines/mongodb/restore.js.map +1 -0
  333. package/dist/engines/mongodb/version-maps.js +79 -0
  334. package/dist/engines/mongodb/version-maps.js.map +1 -0
  335. package/dist/engines/mongodb/version-validator.js +133 -0
  336. package/dist/engines/mongodb/version-validator.js.map +1 -0
  337. package/dist/engines/mysql/backup.js +210 -0
  338. package/dist/engines/mysql/backup.js.map +1 -0
  339. package/dist/engines/mysql/binary-detection.js +325 -0
  340. package/dist/engines/mysql/binary-detection.js.map +1 -0
  341. package/dist/engines/mysql/binary-manager.js +30 -0
  342. package/dist/engines/mysql/binary-manager.js.map +1 -0
  343. package/dist/engines/mysql/binary-urls.js +87 -0
  344. package/dist/engines/mysql/binary-urls.js.map +1 -0
  345. package/{engines/mysql/hostdb-releases.ts → dist/engines/mysql/hostdb-releases.js} +20 -23
  346. package/dist/engines/mysql/hostdb-releases.js.map +1 -0
  347. package/dist/engines/mysql/index.js +1066 -0
  348. package/dist/engines/mysql/index.js.map +1 -0
  349. package/dist/engines/mysql/restore.js +361 -0
  350. package/dist/engines/mysql/restore.js.map +1 -0
  351. package/dist/engines/mysql/version-maps.js +79 -0
  352. package/dist/engines/mysql/version-maps.js.map +1 -0
  353. package/dist/engines/mysql/version-validator.js +266 -0
  354. package/dist/engines/mysql/version-validator.js.map +1 -0
  355. package/dist/engines/postgresql/backup.js +118 -0
  356. package/dist/engines/postgresql/backup.js.map +1 -0
  357. package/dist/engines/postgresql/binary-manager.js +85 -0
  358. package/dist/engines/postgresql/binary-manager.js.map +1 -0
  359. package/dist/engines/postgresql/binary-urls.js +80 -0
  360. package/dist/engines/postgresql/binary-urls.js.map +1 -0
  361. package/dist/engines/postgresql/hostdb-releases.js +21 -0
  362. package/dist/engines/postgresql/hostdb-releases.js.map +1 -0
  363. package/dist/engines/postgresql/index.js +852 -0
  364. package/dist/engines/postgresql/index.js.map +1 -0
  365. package/dist/engines/postgresql/remote-version.js +109 -0
  366. package/dist/engines/postgresql/remote-version.js.map +1 -0
  367. package/dist/engines/postgresql/restore.js +254 -0
  368. package/dist/engines/postgresql/restore.js.map +1 -0
  369. package/dist/engines/postgresql/version-maps.js +73 -0
  370. package/dist/engines/postgresql/version-maps.js.map +1 -0
  371. package/dist/engines/postgresql/version-validator.js +286 -0
  372. package/dist/engines/postgresql/version-validator.js.map +1 -0
  373. package/dist/engines/qdrant/api-client.js +50 -0
  374. package/dist/engines/qdrant/api-client.js.map +1 -0
  375. package/dist/engines/qdrant/backup.js +115 -0
  376. package/dist/engines/qdrant/backup.js.map +1 -0
  377. package/dist/engines/qdrant/binary-manager.js +31 -0
  378. package/dist/engines/qdrant/binary-manager.js.map +1 -0
  379. package/dist/engines/qdrant/binary-urls.js +92 -0
  380. package/dist/engines/qdrant/binary-urls.js.map +1 -0
  381. package/dist/engines/qdrant/cli-utils.js +39 -0
  382. package/dist/engines/qdrant/cli-utils.js.map +1 -0
  383. package/dist/engines/qdrant/hostdb-releases.js +21 -0
  384. package/dist/engines/qdrant/hostdb-releases.js.map +1 -0
  385. package/dist/engines/qdrant/index.js +1002 -0
  386. package/dist/engines/qdrant/index.js.map +1 -0
  387. package/dist/engines/qdrant/restore.js +154 -0
  388. package/dist/engines/qdrant/restore.js.map +1 -0
  389. package/dist/engines/qdrant/version-maps.js +67 -0
  390. package/dist/engines/qdrant/version-maps.js.map +1 -0
  391. package/dist/engines/qdrant/version-validator.js +109 -0
  392. package/dist/engines/qdrant/version-validator.js.map +1 -0
  393. package/dist/engines/questdb/backup.js +191 -0
  394. package/dist/engines/questdb/backup.js.map +1 -0
  395. package/dist/engines/questdb/binary-manager.js +247 -0
  396. package/dist/engines/questdb/binary-manager.js.map +1 -0
  397. package/dist/engines/questdb/binary-urls.js +27 -0
  398. package/dist/engines/questdb/binary-urls.js.map +1 -0
  399. package/dist/engines/questdb/hostdb-releases.js +21 -0
  400. package/dist/engines/questdb/hostdb-releases.js.map +1 -0
  401. package/dist/engines/questdb/index.js +814 -0
  402. package/dist/engines/questdb/index.js.map +1 -0
  403. package/dist/engines/questdb/restore.js +202 -0
  404. package/dist/engines/questdb/restore.js.map +1 -0
  405. package/dist/engines/questdb/version-maps.js +33 -0
  406. package/dist/engines/questdb/version-maps.js.map +1 -0
  407. package/dist/engines/questdb/version-validator.js +99 -0
  408. package/dist/engines/questdb/version-validator.js.map +1 -0
  409. package/dist/engines/redis/backup.js +292 -0
  410. package/dist/engines/redis/backup.js.map +1 -0
  411. package/dist/engines/redis/binary-manager.js +32 -0
  412. package/dist/engines/redis/binary-manager.js.map +1 -0
  413. package/dist/engines/redis/binary-urls.js +96 -0
  414. package/dist/engines/redis/binary-urls.js.map +1 -0
  415. package/dist/engines/redis/cli-utils.js +38 -0
  416. package/dist/engines/redis/cli-utils.js.map +1 -0
  417. package/dist/engines/redis/hostdb-releases.js +21 -0
  418. package/dist/engines/redis/hostdb-releases.js.map +1 -0
  419. package/dist/engines/redis/index.js +1263 -0
  420. package/dist/engines/redis/index.js.map +1 -0
  421. package/dist/engines/redis/restore.js +338 -0
  422. package/dist/engines/redis/restore.js.map +1 -0
  423. package/dist/engines/redis/version-maps.js +70 -0
  424. package/dist/engines/redis/version-maps.js.map +1 -0
  425. package/dist/engines/redis/version-validator.js +109 -0
  426. package/dist/engines/redis/version-validator.js.map +1 -0
  427. package/dist/engines/sqlite/binary-manager.js +39 -0
  428. package/dist/engines/sqlite/binary-manager.js.map +1 -0
  429. package/{engines/sqlite/binary-urls.ts → dist/engines/sqlite/binary-urls.js} +11 -16
  430. package/dist/engines/sqlite/binary-urls.js.map +1 -0
  431. package/dist/engines/sqlite/hostdb-releases.js +21 -0
  432. package/dist/engines/sqlite/hostdb-releases.js.map +1 -0
  433. package/dist/engines/sqlite/index.js +493 -0
  434. package/dist/engines/sqlite/index.js.map +1 -0
  435. package/dist/engines/sqlite/registry.js +163 -0
  436. package/dist/engines/sqlite/registry.js.map +1 -0
  437. package/dist/engines/sqlite/scanner.js +12 -0
  438. package/dist/engines/sqlite/scanner.js.map +1 -0
  439. package/dist/engines/sqlite/version-maps.js +57 -0
  440. package/dist/engines/sqlite/version-maps.js.map +1 -0
  441. package/dist/engines/surrealdb/backup.js +97 -0
  442. package/dist/engines/surrealdb/backup.js.map +1 -0
  443. package/dist/engines/surrealdb/binary-manager.js +33 -0
  444. package/dist/engines/surrealdb/binary-manager.js.map +1 -0
  445. package/dist/engines/surrealdb/binary-urls.js +33 -0
  446. package/dist/engines/surrealdb/binary-urls.js.map +1 -0
  447. package/dist/engines/surrealdb/cli-utils.js +147 -0
  448. package/dist/engines/surrealdb/cli-utils.js.map +1 -0
  449. package/dist/engines/surrealdb/hostdb-releases.js +21 -0
  450. package/dist/engines/surrealdb/hostdb-releases.js.map +1 -0
  451. package/dist/engines/surrealdb/index.js +1022 -0
  452. package/dist/engines/surrealdb/index.js.map +1 -0
  453. package/dist/engines/surrealdb/restore.js +224 -0
  454. package/dist/engines/surrealdb/restore.js.map +1 -0
  455. package/dist/engines/surrealdb/version-maps.js +36 -0
  456. package/dist/engines/surrealdb/version-maps.js.map +1 -0
  457. package/dist/engines/tigerbeetle/backup.js +36 -0
  458. package/dist/engines/tigerbeetle/backup.js.map +1 -0
  459. package/dist/engines/tigerbeetle/binary-manager.js +72 -0
  460. package/dist/engines/tigerbeetle/binary-manager.js.map +1 -0
  461. package/dist/engines/tigerbeetle/binary-urls.js +49 -0
  462. package/dist/engines/tigerbeetle/binary-urls.js.map +1 -0
  463. package/dist/engines/tigerbeetle/hostdb-releases.js +21 -0
  464. package/dist/engines/tigerbeetle/hostdb-releases.js.map +1 -0
  465. package/dist/engines/tigerbeetle/index.js +559 -0
  466. package/dist/engines/tigerbeetle/index.js.map +1 -0
  467. package/dist/engines/tigerbeetle/restore.js +91 -0
  468. package/dist/engines/tigerbeetle/restore.js.map +1 -0
  469. package/{engines/tigerbeetle/version-maps.ts → dist/engines/tigerbeetle/version-maps.js} +22 -31
  470. package/dist/engines/tigerbeetle/version-maps.js.map +1 -0
  471. package/dist/engines/tigerbeetle/version-validator.js +108 -0
  472. package/dist/engines/tigerbeetle/version-validator.js.map +1 -0
  473. package/dist/engines/typedb/backup.js +129 -0
  474. package/dist/engines/typedb/backup.js.map +1 -0
  475. package/dist/engines/typedb/binary-manager.js +151 -0
  476. package/dist/engines/typedb/binary-manager.js.map +1 -0
  477. package/dist/engines/typedb/binary-urls.js +33 -0
  478. package/dist/engines/typedb/binary-urls.js.map +1 -0
  479. package/dist/engines/typedb/cli-utils.js +163 -0
  480. package/dist/engines/typedb/cli-utils.js.map +1 -0
  481. package/dist/engines/typedb/hostdb-releases.js +21 -0
  482. package/dist/engines/typedb/hostdb-releases.js.map +1 -0
  483. package/dist/engines/typedb/index.js +1003 -0
  484. package/dist/engines/typedb/index.js.map +1 -0
  485. package/dist/engines/typedb/restore.js +279 -0
  486. package/dist/engines/typedb/restore.js.map +1 -0
  487. package/dist/engines/typedb/version-maps.js +40 -0
  488. package/dist/engines/typedb/version-maps.js.map +1 -0
  489. package/dist/engines/typedb/version-validator.js +103 -0
  490. package/dist/engines/typedb/version-validator.js.map +1 -0
  491. package/dist/engines/valkey/backup.js +292 -0
  492. package/dist/engines/valkey/backup.js.map +1 -0
  493. package/dist/engines/valkey/binary-manager.js +33 -0
  494. package/dist/engines/valkey/binary-manager.js.map +1 -0
  495. package/dist/engines/valkey/binary-urls.js +98 -0
  496. package/dist/engines/valkey/binary-urls.js.map +1 -0
  497. package/dist/engines/valkey/cli-utils.js +38 -0
  498. package/dist/engines/valkey/cli-utils.js.map +1 -0
  499. package/dist/engines/valkey/hostdb-releases.js +21 -0
  500. package/dist/engines/valkey/hostdb-releases.js.map +1 -0
  501. package/dist/engines/valkey/index.js +1257 -0
  502. package/dist/engines/valkey/index.js.map +1 -0
  503. package/dist/engines/valkey/restore.js +340 -0
  504. package/dist/engines/valkey/restore.js.map +1 -0
  505. package/dist/engines/valkey/version-maps.js +70 -0
  506. package/dist/engines/valkey/version-maps.js.map +1 -0
  507. package/dist/engines/valkey/version-validator.js +112 -0
  508. package/dist/engines/valkey/version-validator.js.map +1 -0
  509. package/dist/engines/weaviate/api-client.js +50 -0
  510. package/dist/engines/weaviate/api-client.js.map +1 -0
  511. package/dist/engines/weaviate/backup.js +95 -0
  512. package/dist/engines/weaviate/backup.js.map +1 -0
  513. package/dist/engines/weaviate/binary-manager.js +58 -0
  514. package/dist/engines/weaviate/binary-manager.js.map +1 -0
  515. package/dist/engines/weaviate/binary-urls.js +92 -0
  516. package/dist/engines/weaviate/binary-urls.js.map +1 -0
  517. package/dist/engines/weaviate/cli-utils.js +39 -0
  518. package/dist/engines/weaviate/cli-utils.js.map +1 -0
  519. package/dist/engines/weaviate/hostdb-releases.js +21 -0
  520. package/dist/engines/weaviate/hostdb-releases.js.map +1 -0
  521. package/dist/engines/weaviate/index.js +871 -0
  522. package/dist/engines/weaviate/index.js.map +1 -0
  523. package/dist/engines/weaviate/restore.js +185 -0
  524. package/dist/engines/weaviate/restore.js.map +1 -0
  525. package/dist/engines/weaviate/version-maps.js +67 -0
  526. package/dist/engines/weaviate/version-maps.js.map +1 -0
  527. package/dist/engines/weaviate/version-validator.js +109 -0
  528. package/dist/engines/weaviate/version-validator.js.map +1 -0
  529. package/dist/types/index.js +102 -0
  530. package/dist/types/index.js.map +1 -0
  531. package/package.json +12 -9
  532. package/bin/cli.js +0 -68
  533. package/cli/bin.ts +0 -10
  534. package/cli/commands/attach.ts +0 -139
  535. package/cli/commands/backup.ts +0 -290
  536. package/cli/commands/backups.ts +0 -247
  537. package/cli/commands/clone.ts +0 -159
  538. package/cli/commands/config.ts +0 -367
  539. package/cli/commands/connect.ts +0 -684
  540. package/cli/commands/create.ts +0 -1201
  541. package/cli/commands/databases.ts +0 -630
  542. package/cli/commands/delete.ts +0 -133
  543. package/cli/commands/deps.ts +0 -342
  544. package/cli/commands/detach.ts +0 -107
  545. package/cli/commands/doctor.ts +0 -689
  546. package/cli/commands/duckdb.ts +0 -273
  547. package/cli/commands/edit.ts +0 -683
  548. package/cli/commands/engines.ts +0 -1914
  549. package/cli/commands/export.ts +0 -544
  550. package/cli/commands/info.ts +0 -340
  551. package/cli/commands/list.ts +0 -284
  552. package/cli/commands/logs.ts +0 -102
  553. package/cli/commands/menu/backup-handlers.ts +0 -1571
  554. package/cli/commands/menu/container-handlers.ts +0 -2288
  555. package/cli/commands/menu/engine-handlers.ts +0 -355
  556. package/cli/commands/menu/index.ts +0 -342
  557. package/cli/commands/menu/settings-handlers.ts +0 -365
  558. package/cli/commands/menu/shared.ts +0 -23
  559. package/cli/commands/menu/shell-handlers.ts +0 -1811
  560. package/cli/commands/menu/sql-handlers.ts +0 -231
  561. package/cli/commands/menu/update-handlers.ts +0 -378
  562. package/cli/commands/menu/validators.ts +0 -8
  563. package/cli/commands/ports.ts +0 -211
  564. package/cli/commands/pull.ts +0 -223
  565. package/cli/commands/query.ts +0 -241
  566. package/cli/commands/restore.ts +0 -587
  567. package/cli/commands/run.ts +0 -178
  568. package/cli/commands/self-update.ts +0 -121
  569. package/cli/commands/sqlite.ts +0 -273
  570. package/cli/commands/start.ts +0 -218
  571. package/cli/commands/stop.ts +0 -241
  572. package/cli/commands/url.ts +0 -104
  573. package/cli/commands/users.ts +0 -264
  574. package/cli/commands/version.ts +0 -55
  575. package/cli/commands/which.ts +0 -290
  576. package/cli/constants.ts +0 -233
  577. package/cli/helpers.ts +0 -1593
  578. package/cli/index.ts +0 -162
  579. package/cli/ui/prompts.ts +0 -1525
  580. package/cli/ui/spinner.ts +0 -88
  581. package/cli/ui/theme.ts +0 -128
  582. package/cli/utils/file-follower.ts +0 -93
  583. package/config/backup-formats.ts +0 -446
  584. package/config/defaults.ts +0 -56
  585. package/config/engine-defaults.ts +0 -336
  586. package/config/engines-registry.ts +0 -150
  587. package/config/engines.schema.json +0 -135
  588. package/config/os-dependencies.ts +0 -888
  589. package/config/paths.ts +0 -200
  590. package/core/backup-restore.ts +0 -330
  591. package/core/base-binary-manager.ts +0 -562
  592. package/core/base-document-binary-manager.ts +0 -523
  593. package/core/base-embedded-binary-manager.ts +0 -547
  594. package/core/base-server-binary-manager.ts +0 -523
  595. package/core/config-manager.ts +0 -652
  596. package/core/container-manager.ts +0 -787
  597. package/core/credential-generator.ts +0 -93
  598. package/core/credential-manager.ts +0 -259
  599. package/core/dblab-utils.ts +0 -113
  600. package/core/dependency-manager.ts +0 -512
  601. package/core/docker-exporter.ts +0 -1345
  602. package/core/error-handler.ts +0 -419
  603. package/core/fs-error-utils.ts +0 -82
  604. package/core/homebrew-version-manager.ts +0 -352
  605. package/core/hostdb-client.ts +0 -344
  606. package/core/hostdb-metadata.ts +0 -350
  607. package/core/hostdb-releases-factory.ts +0 -237
  608. package/core/library-env.ts +0 -118
  609. package/core/pgweb-utils.ts +0 -62
  610. package/core/platform-service.ts +0 -829
  611. package/core/port-manager.ts +0 -165
  612. package/core/process-manager.ts +0 -576
  613. package/core/pull-manager.ts +0 -511
  614. package/core/query-parser.ts +0 -514
  615. package/core/spawn-utils.ts +0 -122
  616. package/core/start-with-retry.ts +0 -130
  617. package/core/test-cleanup.ts +0 -108
  618. package/core/tls-generator.ts +0 -116
  619. package/core/transaction-manager.ts +0 -158
  620. package/core/update-manager.ts +0 -308
  621. package/core/version-migration.ts +0 -346
  622. package/core/version-utils.ts +0 -104
  623. package/engines/base-engine.ts +0 -340
  624. package/engines/clickhouse/README.md +0 -231
  625. package/engines/clickhouse/backup.ts +0 -398
  626. package/engines/clickhouse/binary-manager.ts +0 -201
  627. package/engines/clickhouse/binary-urls.ts +0 -125
  628. package/engines/clickhouse/cli-utils.ts +0 -176
  629. package/engines/clickhouse/hostdb-releases.ts +0 -30
  630. package/engines/clickhouse/index.ts +0 -1345
  631. package/engines/clickhouse/restore.ts +0 -466
  632. package/engines/clickhouse/version-maps.ts +0 -95
  633. package/engines/clickhouse/version-validator.ts +0 -154
  634. package/engines/cockroachdb/README.md +0 -170
  635. package/engines/cockroachdb/backup.ts +0 -376
  636. package/engines/cockroachdb/binary-manager.ts +0 -45
  637. package/engines/cockroachdb/binary-urls.ts +0 -40
  638. package/engines/cockroachdb/cli-utils.ts +0 -384
  639. package/engines/cockroachdb/hostdb-releases.ts +0 -26
  640. package/engines/cockroachdb/index.ts +0 -1276
  641. package/engines/cockroachdb/restore.ts +0 -455
  642. package/engines/cockroachdb/version-maps.ts +0 -42
  643. package/engines/couchdb/README.md +0 -257
  644. package/engines/couchdb/api-client.ts +0 -81
  645. package/engines/couchdb/backup.ts +0 -137
  646. package/engines/couchdb/binary-manager.ts +0 -86
  647. package/engines/couchdb/binary-urls.ts +0 -115
  648. package/engines/couchdb/hostdb-releases.ts +0 -23
  649. package/engines/couchdb/index.ts +0 -1429
  650. package/engines/couchdb/restore.ts +0 -290
  651. package/engines/couchdb/version-maps.ts +0 -78
  652. package/engines/couchdb/version-validator.ts +0 -111
  653. package/engines/duckdb/README.md +0 -154
  654. package/engines/duckdb/binary-manager.ts +0 -45
  655. package/engines/duckdb/hostdb-releases.ts +0 -23
  656. package/engines/duckdb/index.ts +0 -749
  657. package/engines/duckdb/registry.ts +0 -303
  658. package/engines/duckdb/scanner.ts +0 -22
  659. package/engines/duckdb/version-maps.ts +0 -78
  660. package/engines/duckdb/version-validator.ts +0 -78
  661. package/engines/ferretdb/README.md +0 -262
  662. package/engines/ferretdb/backup.ts +0 -173
  663. package/engines/ferretdb/binary-manager.ts +0 -1095
  664. package/engines/ferretdb/binary-urls.ts +0 -183
  665. package/engines/ferretdb/index.ts +0 -1907
  666. package/engines/ferretdb/restore.ts +0 -357
  667. package/engines/file-based-utils.ts +0 -262
  668. package/engines/index.ts +0 -131
  669. package/engines/influxdb/README.md +0 -180
  670. package/engines/influxdb/api-client.ts +0 -64
  671. package/engines/influxdb/backup.ts +0 -160
  672. package/engines/influxdb/binary-manager.ts +0 -110
  673. package/engines/influxdb/binary-urls.ts +0 -69
  674. package/engines/influxdb/hostdb-releases.ts +0 -23
  675. package/engines/influxdb/index.ts +0 -1272
  676. package/engines/influxdb/restore.ts +0 -417
  677. package/engines/influxdb/version-maps.ts +0 -75
  678. package/engines/influxdb/version-validator.ts +0 -128
  679. package/engines/mariadb/README.md +0 -141
  680. package/engines/mariadb/backup.ts +0 -233
  681. package/engines/mariadb/binary-manager.ts +0 -45
  682. package/engines/mariadb/hostdb-releases.ts +0 -23
  683. package/engines/mariadb/index.ts +0 -1300
  684. package/engines/mariadb/restore.ts +0 -447
  685. package/engines/mariadb/version-maps.ts +0 -72
  686. package/engines/mariadb/version-validator.ts +0 -181
  687. package/engines/meilisearch/README.md +0 -255
  688. package/engines/meilisearch/api-client.ts +0 -61
  689. package/engines/meilisearch/backup.ts +0 -233
  690. package/engines/meilisearch/binary-manager.ts +0 -43
  691. package/engines/meilisearch/binary-urls.ts +0 -69
  692. package/engines/meilisearch/hostdb-releases.ts +0 -26
  693. package/engines/meilisearch/index.ts +0 -1292
  694. package/engines/meilisearch/restore.ts +0 -219
  695. package/engines/meilisearch/version-maps.ts +0 -78
  696. package/engines/meilisearch/version-validator.ts +0 -128
  697. package/engines/mongodb/README.md +0 -162
  698. package/engines/mongodb/backup.ts +0 -127
  699. package/engines/mongodb/binary-manager.ts +0 -48
  700. package/engines/mongodb/binary-urls.ts +0 -63
  701. package/engines/mongodb/cli-utils.ts +0 -171
  702. package/engines/mongodb/hostdb-releases.ts +0 -91
  703. package/engines/mongodb/index.ts +0 -1118
  704. package/engines/mongodb/restore.ts +0 -361
  705. package/engines/mongodb/version-maps.ts +0 -91
  706. package/engines/mongodb/version-validator.ts +0 -160
  707. package/engines/mysql/README.md +0 -142
  708. package/engines/mysql/backup.ts +0 -270
  709. package/engines/mysql/binary-detection.ts +0 -408
  710. package/engines/mysql/binary-manager.ts +0 -42
  711. package/engines/mysql/binary-urls.ts +0 -104
  712. package/engines/mysql/index.ts +0 -1361
  713. package/engines/mysql/restore.ts +0 -500
  714. package/engines/mysql/version-maps.ts +0 -91
  715. package/engines/mysql/version-validator.ts +0 -369
  716. package/engines/postgresql/README.md +0 -158
  717. package/engines/postgresql/backup.ts +0 -151
  718. package/engines/postgresql/binary-manager.ts +0 -114
  719. package/engines/postgresql/binary-urls.ts +0 -99
  720. package/engines/postgresql/hostdb-releases.ts +0 -26
  721. package/engines/postgresql/index.ts +0 -1143
  722. package/engines/postgresql/remote-version.ts +0 -161
  723. package/engines/postgresql/restore.ts +0 -342
  724. package/engines/postgresql/version-maps.ts +0 -83
  725. package/engines/postgresql/version-validator.ts +0 -413
  726. package/engines/qdrant/README.md +0 -222
  727. package/engines/qdrant/api-client.ts +0 -61
  728. package/engines/qdrant/backup.ts +0 -165
  729. package/engines/qdrant/binary-manager.ts +0 -43
  730. package/engines/qdrant/binary-urls.ts +0 -115
  731. package/engines/qdrant/cli-utils.ts +0 -43
  732. package/engines/qdrant/hostdb-releases.ts +0 -23
  733. package/engines/qdrant/index.ts +0 -1312
  734. package/engines/qdrant/restore.ts +0 -203
  735. package/engines/qdrant/version-maps.ts +0 -78
  736. package/engines/qdrant/version-validator.ts +0 -128
  737. package/engines/questdb/README.md +0 -334
  738. package/engines/questdb/backup.ts +0 -220
  739. package/engines/questdb/binary-manager.ts +0 -310
  740. package/engines/questdb/binary-urls.ts +0 -34
  741. package/engines/questdb/hostdb-releases.ts +0 -23
  742. package/engines/questdb/index.ts +0 -1023
  743. package/engines/questdb/restore.ts +0 -260
  744. package/engines/questdb/version-maps.ts +0 -37
  745. package/engines/questdb/version-validator.ts +0 -121
  746. package/engines/redis/README.md +0 -173
  747. package/engines/redis/backup.ts +0 -389
  748. package/engines/redis/binary-manager.ts +0 -44
  749. package/engines/redis/binary-urls.ts +0 -117
  750. package/engines/redis/cli-utils.ts +0 -42
  751. package/engines/redis/hostdb-releases.ts +0 -23
  752. package/engines/redis/index.ts +0 -1583
  753. package/engines/redis/restore.ts +0 -443
  754. package/engines/redis/version-maps.ts +0 -81
  755. package/engines/redis/version-validator.ts +0 -131
  756. package/engines/sqlite/README.md +0 -162
  757. package/engines/sqlite/binary-manager.ts +0 -52
  758. package/engines/sqlite/hostdb-releases.ts +0 -23
  759. package/engines/sqlite/index.ts +0 -641
  760. package/engines/sqlite/registry.ts +0 -198
  761. package/engines/sqlite/scanner.ts +0 -22
  762. package/engines/sqlite/version-maps.ts +0 -64
  763. package/engines/surrealdb/README.md +0 -218
  764. package/engines/surrealdb/backup.ts +0 -131
  765. package/engines/surrealdb/binary-manager.ts +0 -45
  766. package/engines/surrealdb/binary-urls.ts +0 -40
  767. package/engines/surrealdb/cli-utils.ts +0 -173
  768. package/engines/surrealdb/hostdb-releases.ts +0 -23
  769. package/engines/surrealdb/index.ts +0 -1246
  770. package/engines/surrealdb/restore.ts +0 -302
  771. package/engines/surrealdb/version-maps.ts +0 -41
  772. package/engines/tigerbeetle/README.md +0 -61
  773. package/engines/tigerbeetle/backup.ts +0 -49
  774. package/engines/tigerbeetle/binary-manager.ts +0 -95
  775. package/engines/tigerbeetle/binary-urls.ts +0 -62
  776. package/engines/tigerbeetle/hostdb-releases.ts +0 -26
  777. package/engines/tigerbeetle/index.ts +0 -746
  778. package/engines/tigerbeetle/restore.ts +0 -130
  779. package/engines/tigerbeetle/version-validator.ts +0 -126
  780. package/engines/typedb/backup.ts +0 -167
  781. package/engines/typedb/binary-manager.ts +0 -200
  782. package/engines/typedb/binary-urls.ts +0 -40
  783. package/engines/typedb/cli-utils.ts +0 -210
  784. package/engines/typedb/hostdb-releases.ts +0 -23
  785. package/engines/typedb/index.ts +0 -1275
  786. package/engines/typedb/restore.ts +0 -377
  787. package/engines/typedb/version-maps.ts +0 -48
  788. package/engines/typedb/version-validator.ts +0 -127
  789. package/engines/valkey/README.md +0 -219
  790. package/engines/valkey/backup.ts +0 -389
  791. package/engines/valkey/binary-manager.ts +0 -45
  792. package/engines/valkey/binary-urls.ts +0 -122
  793. package/engines/valkey/cli-utils.ts +0 -42
  794. package/engines/valkey/hostdb-releases.ts +0 -23
  795. package/engines/valkey/index.ts +0 -1585
  796. package/engines/valkey/restore.ts +0 -446
  797. package/engines/valkey/version-maps.ts +0 -81
  798. package/engines/valkey/version-validator.ts +0 -131
  799. package/engines/weaviate/README.md +0 -302
  800. package/engines/weaviate/api-client.ts +0 -61
  801. package/engines/weaviate/backup.ts +0 -145
  802. package/engines/weaviate/binary-manager.ts +0 -80
  803. package/engines/weaviate/binary-urls.ts +0 -115
  804. package/engines/weaviate/cli-utils.ts +0 -43
  805. package/engines/weaviate/hostdb-releases.ts +0 -23
  806. package/engines/weaviate/index.ts +0 -1139
  807. package/engines/weaviate/restore.ts +0 -235
  808. package/engines/weaviate/version-maps.ts +0 -78
  809. package/engines/weaviate/version-validator.ts +0 -128
  810. package/types/index.ts +0 -624
  811. /package/{config → dist/config}/engines.json +0 -0
@@ -0,0 +1,852 @@
1
+ import { join } from 'path';
2
+ import { spawn, exec } from 'child_process';
3
+ import { promisify } from 'util';
4
+ import { existsSync } from 'fs';
5
+ import { readFile, writeFile } from 'fs/promises';
6
+ import { BaseEngine } from '../base-engine.js';
7
+ import { postgresqlBinaryManager } from './binary-manager.js';
8
+ import { processManager } from '../../core/process-manager.js';
9
+ import { configManager } from '../../core/config-manager.js';
10
+ import { containerManager } from '../../core/container-manager.js';
11
+ import { platformService, isWindows, getWindowsSpawnOptions, } from '../../core/platform-service.js';
12
+ import { paths } from '../../config/paths.js';
13
+ import { defaults, getEngineDefaults } from '../../config/defaults.js';
14
+ import { getBinaryUrl } from './binary-urls.js';
15
+ import { fetchAvailableVersions, getLatestVersion } from './hostdb-releases.js';
16
+ import { SUPPORTED_MAJOR_VERSIONS, POSTGRESQL_VERSION_MAP, } from './version-maps.js';
17
+ import { detectBackupFormat, restoreBackup } from './restore.js';
18
+ import { createBackup } from './backup.js';
19
+ import { validateDumpCompatibility, } from './version-validator.js';
20
+ import { switchHomebrewVersion } from '../../core/homebrew-version-manager.js';
21
+ import { assertValidDatabaseName, assertValidUsername, SpinDBError, ErrorCodes, } from '../../core/error-handler.js';
22
+ import { parseCSVToQueryResult } from '../../core/query-parser.js';
23
+ const execAsync = promisify(exec);
24
+ /**
25
+ * Build a Windows-safe psql command string for either a file or inline SQL.
26
+ * This is exported for unit testing.
27
+ */
28
+ export function buildWindowsPsqlCommand(psqlPath, port, user, db, options) {
29
+ if (!options.file && !options.sql) {
30
+ throw new Error('Either file or sql option must be provided');
31
+ }
32
+ let cmd = `"${psqlPath}" -h 127.0.0.1 -p ${port} -U ${user} -d ${db}`;
33
+ if (options.file) {
34
+ cmd += ` -f "${options.file}"`;
35
+ }
36
+ else if (options.sql) {
37
+ // Escape double quotes in the SQL so the outer double quotes are preserved
38
+ const escaped = options.sql.replace(/"/g, '\\"');
39
+ cmd += ` -c "${escaped}"`;
40
+ }
41
+ return cmd;
42
+ }
43
+ export class PostgreSQLEngine extends BaseEngine {
44
+ name = 'postgresql';
45
+ displayName = 'PostgreSQL';
46
+ defaultPort = getEngineDefaults('postgresql').defaultPort;
47
+ supportedVersions = SUPPORTED_MAJOR_VERSIONS;
48
+ async fetchAvailableVersions() {
49
+ return fetchAvailableVersions();
50
+ }
51
+ getPlatformInfo() {
52
+ const info = platformService.getPlatformInfo();
53
+ return {
54
+ platform: info.platform,
55
+ arch: info.arch,
56
+ };
57
+ }
58
+ // Resolves version string to full version (e.g., '17' -> '17.7.0').
59
+ resolveFullVersion(version) {
60
+ // Check if already a full version (has at least one dot with numbers after)
61
+ if (/^\d+\.\d+/.test(version)) {
62
+ return version;
63
+ }
64
+ // It's a major version, resolve using fallback map (sync, no network)
65
+ return POSTGRESQL_VERSION_MAP[version] || `${version}.0.0`;
66
+ }
67
+ async resolveFullVersionAsync(version) {
68
+ // Check if already a full version
69
+ if (/^\d+\.\d+/.test(version)) {
70
+ return version;
71
+ }
72
+ // Resolve from network/cache
73
+ return getLatestVersion(version);
74
+ }
75
+ getBinaryPath(version) {
76
+ const fullVersion = this.resolveFullVersion(version);
77
+ const { platform: p, arch: a } = this.getPlatformInfo();
78
+ return paths.getBinaryPath({
79
+ engine: 'postgresql',
80
+ version: fullVersion,
81
+ platform: p,
82
+ arch: a,
83
+ });
84
+ }
85
+ /**
86
+ * Gets the binary path with self-healing fallback logic.
87
+ *
88
+ * If binaries for the exact version don't exist:
89
+ * 1. Looks for any installed binaries with the same major version
90
+ * 2. If found, uses those and optionally updates the container config
91
+ * 3. If not found, downloads the current supported version for that major
92
+ *
93
+ * @param version - The version from container config (e.g., "17.7.0")
94
+ * @param containerName - Container name for config updates (optional)
95
+ * @param onProgress - Progress callback for downloads
96
+ * @returns Object with binPath and actualVersion (may differ from requested)
97
+ */
98
+ async getBinaryPathWithFallback(version, containerName, onProgress) {
99
+ const fullVersion = this.resolveFullVersion(version);
100
+ const { platform: p, arch: a } = this.getPlatformInfo();
101
+ // Check if exact version binaries exist
102
+ const expectedPath = paths.getBinaryPath({
103
+ engine: 'postgresql',
104
+ version: fullVersion,
105
+ platform: p,
106
+ arch: a,
107
+ });
108
+ const ext = platformService.getExecutableExtension();
109
+ const pgCtlPath = join(expectedPath, 'bin', `pg_ctl${ext}`);
110
+ if (existsSync(pgCtlPath)) {
111
+ return {
112
+ binPath: expectedPath,
113
+ actualVersion: fullVersion,
114
+ wasHealed: false,
115
+ };
116
+ }
117
+ // Binaries don't exist - try to find same major version
118
+ const majorVersion = fullVersion.split('.')[0];
119
+ // Check if we have any installed binaries for this major version
120
+ const installed = paths.findInstalledBinaryForMajor('postgresql', majorVersion, p, a);
121
+ if (installed) {
122
+ // Found compatible binaries - verify they work
123
+ const installedPgCtl = join(installed.path, 'bin', `pg_ctl${ext}`);
124
+ if (existsSync(installedPgCtl)) {
125
+ // Update container config if container name provided
126
+ if (containerName) {
127
+ await containerManager.updateConfig(containerName, {
128
+ version: installed.version,
129
+ });
130
+ }
131
+ return {
132
+ binPath: installed.path,
133
+ actualVersion: installed.version,
134
+ wasHealed: true,
135
+ };
136
+ }
137
+ }
138
+ // No compatible binaries found - download the current supported version
139
+ const targetVersion = POSTGRESQL_VERSION_MAP[majorVersion];
140
+ if (!targetVersion) {
141
+ throw new Error(`PostgreSQL major version ${majorVersion} is not supported. ` +
142
+ `Supported versions: ${SUPPORTED_MAJOR_VERSIONS.join(', ')}`);
143
+ }
144
+ onProgress?.({
145
+ stage: 'downloading',
146
+ message: `Binaries for PostgreSQL ${fullVersion} not found, downloading ${targetVersion}...`,
147
+ });
148
+ const binPath = await this.ensureBinaries(targetVersion, onProgress);
149
+ // Update container config if container name provided
150
+ if (containerName && targetVersion !== fullVersion) {
151
+ await containerManager.updateConfig(containerName, {
152
+ version: targetVersion,
153
+ });
154
+ }
155
+ return {
156
+ binPath,
157
+ actualVersion: targetVersion,
158
+ wasHealed: targetVersion !== fullVersion,
159
+ };
160
+ }
161
+ getBinaryUrl(version, plat, arc) {
162
+ return getBinaryUrl(version, plat, arc);
163
+ }
164
+ async verifyBinary(binPath) {
165
+ const { platform: p, arch: a } = this.getPlatformInfo();
166
+ // Extract version from path like "postgresql-17.7.0-darwin-arm64"
167
+ const match = binPath.match(/postgresql-(\d+(?:\.\d+)*)/);
168
+ if (!match) {
169
+ throw new Error(`Could not extract PostgreSQL version from path: ${binPath}`);
170
+ }
171
+ const version = match[1];
172
+ return postgresqlBinaryManager.verify(version, p, a);
173
+ }
174
+ // Downloads binaries and registers all tools (server and client) in config.
175
+ // hostdb bundles all PostgreSQL binaries for all platforms.
176
+ async ensureBinaries(version, onProgress) {
177
+ const { platform: p, arch: a } = this.getPlatformInfo();
178
+ const binPath = await postgresqlBinaryManager.ensureInstalled(version, p, a, onProgress);
179
+ // Register all binaries from downloaded package in config
180
+ const ext = platformService.getExecutableExtension();
181
+ // All PostgreSQL tools bundled in hostdb downloads
182
+ const allTools = [
183
+ // Server binaries
184
+ 'postgres',
185
+ 'pg_ctl',
186
+ 'initdb',
187
+ // Client tools
188
+ 'psql',
189
+ 'pg_dump',
190
+ 'pg_restore',
191
+ 'pg_basebackup',
192
+ ];
193
+ for (const tool of allTools) {
194
+ const toolPath = join(binPath, 'bin', `${tool}${ext}`);
195
+ if (existsSync(toolPath)) {
196
+ await configManager.setBinaryPath(tool, toolPath, 'bundled');
197
+ }
198
+ }
199
+ return binPath;
200
+ }
201
+ async isBinaryInstalled(version) {
202
+ const { platform: p, arch: a } = this.getPlatformInfo();
203
+ return postgresqlBinaryManager.isInstalled(version, p, a);
204
+ }
205
+ /**
206
+ * Check if any compatible binaries are installed for the given version.
207
+ * Returns true if either the exact version OR any same-major-version binaries exist.
208
+ * This is used by the CLI to determine if it needs to prompt for download.
209
+ */
210
+ hasCompatibleBinaries(version) {
211
+ const fullVersion = this.resolveFullVersion(version);
212
+ const { platform: p, arch: a } = this.getPlatformInfo();
213
+ // Check if exact version exists
214
+ const expectedPath = paths.getBinaryPath({
215
+ engine: 'postgresql',
216
+ version: fullVersion,
217
+ platform: p,
218
+ arch: a,
219
+ });
220
+ const ext = platformService.getExecutableExtension();
221
+ const pgCtlPath = join(expectedPath, 'bin', `pg_ctl${ext}`);
222
+ if (existsSync(pgCtlPath)) {
223
+ return true;
224
+ }
225
+ // Check if any same-major version exists
226
+ const majorVersion = fullVersion.split('.')[0];
227
+ const installed = paths.findInstalledBinaryForMajor('postgresql', majorVersion, p, a);
228
+ return installed !== null;
229
+ }
230
+ async initDataDir(containerName, version, options = {}) {
231
+ const binPath = this.getBinaryPath(version);
232
+ const ext = platformService.getExecutableExtension();
233
+ const initdbPath = join(binPath, 'bin', `initdb${ext}`);
234
+ const dataDir = paths.getContainerDataPath(containerName, {
235
+ engine: this.name,
236
+ });
237
+ await processManager.initdb(initdbPath, dataDir, {
238
+ superuser: options.superuser || defaults.superuser,
239
+ });
240
+ // Configure max_connections after initdb creates postgresql.conf
241
+ const maxConnections = options.maxConnections ||
242
+ getEngineDefaults('postgresql').maxConnections;
243
+ await this.setConfigValue(dataDir, 'max_connections', String(maxConnections));
244
+ return dataDir;
245
+ }
246
+ getConfigPath(containerName) {
247
+ const dataDir = paths.getContainerDataPath(containerName, {
248
+ engine: this.name,
249
+ });
250
+ return join(dataDir, 'postgresql.conf');
251
+ }
252
+ // Updates or appends a configuration value in postgresql.conf.
253
+ async setConfigValue(dataDir, key, value) {
254
+ const configPath = join(dataDir, 'postgresql.conf');
255
+ let content = await readFile(configPath, 'utf8');
256
+ // Match both commented (#key = ...) and uncommented (key = ...) lines
257
+ const regex = new RegExp(`^#?\\s*${key}\\s*=.*$`, 'm');
258
+ if (regex.test(content)) {
259
+ // Update existing line (commented or not)
260
+ content = content.replace(regex, `${key} = ${value}`);
261
+ }
262
+ else {
263
+ // Append to end of file
264
+ content = content.trimEnd() + `\n${key} = ${value}\n`;
265
+ }
266
+ await writeFile(configPath, content, 'utf8');
267
+ }
268
+ async getConfigValue(dataDir, key) {
269
+ const configPath = join(dataDir, 'postgresql.conf');
270
+ const content = await readFile(configPath, 'utf8');
271
+ // Match only uncommented lines
272
+ const regex = new RegExp(`^${key}\\s*=\\s*(.+?)\\s*(?:#.*)?$`, 'm');
273
+ const match = content.match(regex);
274
+ if (match) {
275
+ // Remove quotes if present
276
+ return match[1].replace(/^['"]|['"]$/g, '');
277
+ }
278
+ return null;
279
+ }
280
+ async start(container, onProgress) {
281
+ const { name, version, port } = container;
282
+ // Check if already running (idempotent behavior)
283
+ const alreadyRunning = await processManager.isRunning(name, {
284
+ engine: this.name,
285
+ });
286
+ if (alreadyRunning) {
287
+ return {
288
+ port,
289
+ connectionString: this.getConnectionString(container),
290
+ };
291
+ }
292
+ // Get binary path with self-healing fallback
293
+ const { binPath, wasHealed } = await this.getBinaryPathWithFallback(version, name, onProgress);
294
+ if (wasHealed) {
295
+ onProgress?.({
296
+ stage: 'info',
297
+ message: 'Container version updated to match available binaries',
298
+ });
299
+ }
300
+ const ext = platformService.getExecutableExtension();
301
+ const pgCtlPath = join(binPath, 'bin', `pg_ctl${ext}`);
302
+ const dataDir = paths.getContainerDataPath(name, { engine: this.name });
303
+ const logFile = paths.getContainerLogPath(name, { engine: this.name });
304
+ onProgress?.({ stage: 'starting', message: 'Starting PostgreSQL...' });
305
+ await processManager.start(pgCtlPath, dataDir, {
306
+ port,
307
+ logFile,
308
+ });
309
+ return {
310
+ port,
311
+ connectionString: this.getConnectionString(container),
312
+ };
313
+ }
314
+ async stop(container) {
315
+ const { name, version } = container;
316
+ // Get binary path with self-healing fallback (no progress callback for stop)
317
+ const { binPath } = await this.getBinaryPathWithFallback(version, name);
318
+ const ext = platformService.getExecutableExtension();
319
+ const pgCtlPath = join(binPath, 'bin', `pg_ctl${ext}`);
320
+ const dataDir = paths.getContainerDataPath(name, { engine: this.name });
321
+ await processManager.stop(pgCtlPath, dataDir);
322
+ // Kill pgweb if running for this container
323
+ await this.stopPgweb(name);
324
+ }
325
+ async status(container) {
326
+ const { name, version } = container;
327
+ // Get binary path with self-healing fallback (no progress callback for status)
328
+ const { binPath } = await this.getBinaryPathWithFallback(version, name);
329
+ const ext = platformService.getExecutableExtension();
330
+ const pgCtlPath = join(binPath, 'bin', `pg_ctl${ext}`);
331
+ const dataDir = paths.getContainerDataPath(name, { engine: this.name });
332
+ return processManager.status(pgCtlPath, dataDir);
333
+ }
334
+ async detectBackupFormat(filePath) {
335
+ return detectBackupFormat(filePath);
336
+ }
337
+ async restore(container, backupPath, options = {}) {
338
+ const { version, port } = container;
339
+ const binPath = this.getBinaryPath(version);
340
+ const database = options.database || container.name;
341
+ // First create the database if it doesn't exist
342
+ if (options.createDatabase !== false) {
343
+ await this.createDatabase(container, database);
344
+ }
345
+ return restoreBackup(binPath, backupPath, {
346
+ port,
347
+ database,
348
+ user: defaults.superuser,
349
+ pgRestorePath: options.pgRestorePath, // Use custom path if provided
350
+ containerVersion: version, // Pass container version for version-matched binary lookup
351
+ ...options,
352
+ });
353
+ }
354
+ getConnectionString(container, database) {
355
+ const { port } = container;
356
+ const db = database || container.database || 'postgres';
357
+ return `postgresql://${defaults.superuser}@127.0.0.1:${port}/${db}`;
358
+ }
359
+ async getPsqlPath() {
360
+ const psqlPath = await configManager.getBinaryPath('psql');
361
+ if (!psqlPath) {
362
+ throw new Error('psql not found. Install PostgreSQL client tools:\n' +
363
+ ' macOS: brew install libpq && brew link --force libpq\n' +
364
+ ' Ubuntu/Debian: apt install postgresql-client\n\n' +
365
+ 'Or configure manually: spindb config set psql /path/to/psql');
366
+ }
367
+ return psqlPath;
368
+ }
369
+ async getPgRestorePath() {
370
+ const pgRestorePath = await configManager.getBinaryPath('pg_restore');
371
+ if (!pgRestorePath) {
372
+ throw new Error('pg_restore not found. Install PostgreSQL client tools:\n' +
373
+ ' macOS: brew install libpq && brew link --force libpq\n' +
374
+ ' Ubuntu/Debian: apt install postgresql-client\n\n' +
375
+ 'Or configure manually: spindb config set pg_restore /path/to/pg_restore');
376
+ }
377
+ return pgRestorePath;
378
+ }
379
+ async getPgDumpPath() {
380
+ const pgDumpPath = await configManager.getBinaryPath('pg_dump');
381
+ if (!pgDumpPath) {
382
+ throw new Error('pg_dump not found. Install PostgreSQL client tools:\n' +
383
+ ' macOS: brew install libpq && brew link --force libpq\n' +
384
+ ' Ubuntu/Debian: apt install postgresql-client\n\n' +
385
+ 'Or configure manually: spindb config set pg_dump /path/to/pg_dump');
386
+ }
387
+ return pgDumpPath;
388
+ }
389
+ /**
390
+ * Get a compatible pg_dump path for dumping from a remote database
391
+ *
392
+ * This checks the remote database version and finds a compatible pg_dump:
393
+ * 1. First checks if the current pg_dump is compatible
394
+ * 2. If not, tries to find a direct path to a compatible version
395
+ * 3. If that fails, tries to switch Homebrew links
396
+ * 4. If all else fails, throws an error with install instructions
397
+ */
398
+ async getCompatiblePgDumpPath(connectionString) {
399
+ const warnings = [];
400
+ // Get current pg_dump path with version validation
401
+ const { path, versionMismatch, cachedVersion, actualVersion } = await configManager.getBinaryPathWithVersionCheck('pg_dump');
402
+ if (!path) {
403
+ throw new SpinDBError(ErrorCodes.DEPENDENCY_MISSING, 'pg_dump not found. Install PostgreSQL client tools.', 'fatal', 'macOS: brew install postgresql@17 && brew link --overwrite postgresql@17\n' +
404
+ 'Ubuntu/Debian: apt install postgresql-client');
405
+ }
406
+ if (versionMismatch) {
407
+ warnings.push(`pg_dump version changed: ${cachedVersion} -> ${actualVersion} (Homebrew link changed)`);
408
+ }
409
+ // Check compatibility with remote database
410
+ let compatibility;
411
+ try {
412
+ compatibility = await validateDumpCompatibility({
413
+ connectionString,
414
+ pgDumpPath: path,
415
+ });
416
+ }
417
+ catch (error) {
418
+ // Connection or version detection failed
419
+ const e = error;
420
+ throw new SpinDBError(ErrorCodes.CONNECTION_FAILED, `Failed to detect remote database version: ${e.message}`, 'fatal', 'Check your connection string and ensure the database is accessible.');
421
+ }
422
+ if (compatibility.compatible) {
423
+ return { path, switched: false, warnings };
424
+ }
425
+ // Handle incompatibility based on required action
426
+ // All cases that don't return will fall through to VERSION_MISMATCH error below
427
+ switch (compatibility.requiredAction) {
428
+ case 'use_direct_path':
429
+ if (compatibility.alternativePath) {
430
+ warnings.push(`Using PostgreSQL ${compatibility.switchTarget} pg_dump (remote DB is v${compatibility.remoteDbVersion.majorVersion})`);
431
+ return {
432
+ path: compatibility.alternativePath,
433
+ switched: false,
434
+ warnings,
435
+ };
436
+ }
437
+ // No alternative path available - fall through to VERSION_MISMATCH error
438
+ break;
439
+ case 'switch_homebrew':
440
+ if (compatibility.switchTarget) {
441
+ const switchResult = await switchHomebrewVersion(compatibility.switchTarget);
442
+ if (switchResult.success) {
443
+ // Refresh config cache after switching
444
+ await configManager.refreshBinaryWithVersion('pg_dump');
445
+ await configManager.refreshBinaryWithVersion('pg_restore');
446
+ await configManager.refreshBinaryWithVersion('psql');
447
+ const newPath = await configManager.getBinaryPath('pg_dump');
448
+ if (newPath) {
449
+ warnings.push(`Switched Homebrew from PostgreSQL ${switchResult.previousVersion} to ${switchResult.currentVersion}`);
450
+ return { path: newPath, switched: true, warnings };
451
+ }
452
+ }
453
+ }
454
+ // Switch failed or no target - fall through to VERSION_MISMATCH error
455
+ break;
456
+ case 'install':
457
+ // User needs to install manually - fall through to VERSION_MISMATCH error
458
+ break;
459
+ }
460
+ // Cannot auto-fix - throw error with install instructions
461
+ throw new SpinDBError(ErrorCodes.VERSION_MISMATCH, compatibility.error ||
462
+ `Your pg_dump version (${compatibility.localToolVersion.major}) cannot dump from PostgreSQL ${compatibility.remoteDbVersion.majorVersion}`, 'fatal', `Install PostgreSQL ${compatibility.remoteDbVersion.majorVersion} client tools:\n` +
463
+ ` brew install postgresql@${compatibility.remoteDbVersion.majorVersion}`, { compatibility });
464
+ }
465
+ async connect(container, database) {
466
+ const { port } = container;
467
+ const db = database || 'postgres';
468
+ const psqlPath = await this.getPsqlPath();
469
+ const spawnOptions = {
470
+ stdio: 'inherit',
471
+ ...getWindowsSpawnOptions(),
472
+ };
473
+ return new Promise((resolve, reject) => {
474
+ const proc = spawn(psqlPath, [
475
+ '-h',
476
+ '127.0.0.1',
477
+ '-p',
478
+ String(port),
479
+ '-U',
480
+ defaults.superuser,
481
+ '-d',
482
+ db,
483
+ ], spawnOptions);
484
+ proc.on('error', (err) => {
485
+ reject(err);
486
+ });
487
+ proc.on('close', () => resolve());
488
+ });
489
+ }
490
+ async createDatabase(container, database) {
491
+ assertValidDatabaseName(database);
492
+ const { port } = container;
493
+ const psqlPath = await this.getPsqlPath();
494
+ // On Windows, single quotes don't work in cmd.exe - use double quotes and escape inner quotes
495
+ const sql = `CREATE DATABASE "${database}"`;
496
+ const cmd = isWindows()
497
+ ? `"${psqlPath}" -h 127.0.0.1 -p ${port} -U ${defaults.superuser} -d postgres -c "${sql.replace(/"/g, '\\"')}"`
498
+ : `"${psqlPath}" -h 127.0.0.1 -p ${port} -U ${defaults.superuser} -d postgres -c '${sql}'`;
499
+ try {
500
+ await execAsync(cmd);
501
+ }
502
+ catch (error) {
503
+ const err = error;
504
+ // Ignore "database already exists" error
505
+ if (!err.message.includes('already exists')) {
506
+ throw error;
507
+ }
508
+ }
509
+ }
510
+ async dropDatabase(container, database) {
511
+ assertValidDatabaseName(database);
512
+ const { port } = container;
513
+ const psqlPath = await this.getPsqlPath();
514
+ // On Windows, single quotes don't work in cmd.exe - use double quotes and escape inner quotes
515
+ const sql = `DROP DATABASE IF EXISTS "${database}"`;
516
+ const cmd = isWindows()
517
+ ? `"${psqlPath}" -h 127.0.0.1 -p ${port} -U ${defaults.superuser} -d postgres -c "${sql.replace(/"/g, '\\"')}"`
518
+ : `"${psqlPath}" -h 127.0.0.1 -p ${port} -U ${defaults.superuser} -d postgres -c '${sql}'`;
519
+ try {
520
+ await execAsync(cmd);
521
+ }
522
+ catch (error) {
523
+ const err = error;
524
+ // Ignore "database does not exist" error
525
+ if (!err.message.includes('does not exist')) {
526
+ throw error;
527
+ }
528
+ }
529
+ }
530
+ async getDatabaseSize(container) {
531
+ const { port, database } = container;
532
+ const db = database || 'postgres';
533
+ // Validate database name to prevent SQL injection
534
+ assertValidDatabaseName(db);
535
+ try {
536
+ const psqlPath = await this.getPsqlPath();
537
+ // Query pg_database_size for the specific database
538
+ // On Windows, use escaped double quotes; on Unix, use single quotes
539
+ const sql = `SELECT pg_database_size('${db}')`;
540
+ const cmd = isWindows()
541
+ ? `"${psqlPath}" -h 127.0.0.1 -p ${port} -U ${defaults.superuser} -d postgres -t -A -c "${sql.replace(/'/g, "''")}"`
542
+ : `"${psqlPath}" -h 127.0.0.1 -p ${port} -U ${defaults.superuser} -d postgres -t -A -c "${sql}"`;
543
+ const { stdout } = await execAsync(cmd);
544
+ const size = parseInt(stdout.trim(), 10);
545
+ return isNaN(size) ? null : size;
546
+ }
547
+ catch {
548
+ // Container not running or query failed
549
+ return null;
550
+ }
551
+ }
552
+ /**
553
+ * Dump a remote database to a file
554
+ *
555
+ * This method automatically detects the remote database version and uses
556
+ * a compatible pg_dump binary. If the current pg_dump is incompatible,
557
+ * it will try to find or switch to a compatible version.
558
+ */
559
+ async dumpFromConnectionString(connectionString, outputPath) {
560
+ // Get compatible pg_dump path (may switch versions or use direct path)
561
+ const { path: pgDumpPath, warnings } = await this.getCompatiblePgDumpPath(connectionString);
562
+ const spawnOptions = {
563
+ stdio: ['pipe', 'pipe', 'pipe'],
564
+ ...getWindowsSpawnOptions(),
565
+ };
566
+ return new Promise((resolve, reject) => {
567
+ const args = [connectionString, '-Fc', '-f', outputPath];
568
+ const proc = spawn(pgDumpPath, args, spawnOptions);
569
+ let stdout = '';
570
+ let stderr = '';
571
+ proc.stdout?.on('data', (data) => {
572
+ stdout += data.toString();
573
+ });
574
+ proc.stderr?.on('data', (data) => {
575
+ stderr += data.toString();
576
+ });
577
+ proc.on('error', (err) => {
578
+ reject(err);
579
+ });
580
+ proc.on('close', (code) => {
581
+ if (code === 0) {
582
+ resolve({
583
+ filePath: outputPath,
584
+ stdout,
585
+ stderr,
586
+ code,
587
+ warnings,
588
+ });
589
+ }
590
+ else {
591
+ // pg_dump failed
592
+ const errorMessage = stderr || `pg_dump exited with code ${code}`;
593
+ reject(new Error(errorMessage));
594
+ }
595
+ });
596
+ });
597
+ }
598
+ async backup(container, outputPath, options) {
599
+ return createBackup(container, outputPath, options);
600
+ }
601
+ async terminateConnections(container, database) {
602
+ assertValidDatabaseName(database);
603
+ const { port } = container;
604
+ const psqlPath = await this.getPsqlPath();
605
+ // Terminate all connections to the database except our own
606
+ const sql = `SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '${database}' AND pid <> pg_backend_pid()`;
607
+ // Connect to 'postgres' database for admin operations
608
+ // Escape single quotes for shell: ' becomes '\'' (end quote, escaped quote, start quote)
609
+ const shellEscapedSql = sql.replace(/'/g, "'\\''");
610
+ const cmd = isWindows()
611
+ ? `"${psqlPath}" -h 127.0.0.1 -p ${port} -U ${defaults.superuser} -d postgres -c "${sql.replace(/"/g, '\\"')}"`
612
+ : `"${psqlPath}" -h 127.0.0.1 -p ${port} -U ${defaults.superuser} -d postgres -c '${shellEscapedSql}'`;
613
+ try {
614
+ await execAsync(cmd);
615
+ }
616
+ catch {
617
+ // Ignore errors - connections may already be gone
618
+ }
619
+ }
620
+ async runScript(container, options) {
621
+ const { port } = container;
622
+ const db = options.database || container.database || 'postgres';
623
+ const psqlPath = await this.getPsqlPath();
624
+ // On Windows, build a single command string and use exec to avoid
625
+ // passing an args array with shell:true (DEP0190 and quoting issues).
626
+ if (isWindows()) {
627
+ const cmd = buildWindowsPsqlCommand(psqlPath, port, defaults.superuser, db, options);
628
+ try {
629
+ const { stdout, stderr } = await execAsync(cmd);
630
+ if (stdout)
631
+ process.stdout.write(stdout);
632
+ if (stderr)
633
+ process.stderr.write(stderr);
634
+ return;
635
+ }
636
+ catch (error) {
637
+ const err = error;
638
+ throw new Error(`psql failed: ${err.message}`);
639
+ }
640
+ }
641
+ // Non-Windows: spawn directly with args (no shell)
642
+ const args = [
643
+ '-h',
644
+ '127.0.0.1',
645
+ '-p',
646
+ String(port),
647
+ '-U',
648
+ defaults.superuser,
649
+ '-d',
650
+ db,
651
+ ];
652
+ if (options.file) {
653
+ args.push('-f', options.file);
654
+ }
655
+ else if (options.sql) {
656
+ args.push('-c', options.sql);
657
+ }
658
+ else {
659
+ throw new Error('Either file or sql option must be provided');
660
+ }
661
+ const spawnOptions = {
662
+ stdio: 'inherit',
663
+ };
664
+ return new Promise((resolve, reject) => {
665
+ const proc = spawn(psqlPath, args, spawnOptions);
666
+ proc.on('error', (err) => {
667
+ reject(err);
668
+ });
669
+ proc.on('close', (code) => {
670
+ if (code === 0) {
671
+ resolve();
672
+ }
673
+ else {
674
+ reject(new Error(`psql exited with code ${code}`));
675
+ }
676
+ });
677
+ });
678
+ }
679
+ async executeQuery(container, query, options) {
680
+ const { port } = container;
681
+ const db = options?.database || container.database || 'postgres';
682
+ const psqlPath = await this.getPsqlPath();
683
+ // Use --csv for machine-readable output
684
+ const args = [
685
+ '-X', // Skip ~/.psqlrc to ensure deterministic CSV output
686
+ '-h',
687
+ '127.0.0.1',
688
+ '-p',
689
+ String(port),
690
+ '-U',
691
+ defaults.superuser,
692
+ '-d',
693
+ db,
694
+ '--csv',
695
+ '-c',
696
+ query,
697
+ ];
698
+ return new Promise((resolve, reject) => {
699
+ const proc = spawn(psqlPath, args, {
700
+ stdio: ['pipe', 'pipe', 'pipe'],
701
+ });
702
+ let stdout = '';
703
+ let stderr = '';
704
+ proc.stdout?.on('data', (data) => {
705
+ stdout += data.toString();
706
+ });
707
+ proc.stderr?.on('data', (data) => {
708
+ stderr += data.toString();
709
+ });
710
+ proc.on('error', (err) => {
711
+ reject(err);
712
+ });
713
+ proc.on('close', (code) => {
714
+ if (code === 0) {
715
+ resolve(parseCSVToQueryResult(stdout));
716
+ }
717
+ else {
718
+ reject(new Error(stderr || `psql exited with code ${code}`));
719
+ }
720
+ });
721
+ });
722
+ }
723
+ /**
724
+ * List all user databases, excluding system databases (template0, template1, postgres).
725
+ */
726
+ async listDatabases(container) {
727
+ const { port } = container;
728
+ const psqlPath = await this.getPsqlPath();
729
+ // Query pg_database for all non-system databases
730
+ const sql = `SELECT datname FROM pg_database WHERE datname NOT IN ('template0', 'template1', 'postgres') AND datistemplate = false ORDER BY datname`;
731
+ const args = [
732
+ '-X', // Skip ~/.psqlrc
733
+ '-h',
734
+ '127.0.0.1',
735
+ '-p',
736
+ String(port),
737
+ '-U',
738
+ defaults.superuser,
739
+ '-d',
740
+ 'postgres',
741
+ '-t', // Tuples only (no headers)
742
+ '-A', // Unaligned output
743
+ '-c',
744
+ sql,
745
+ ];
746
+ return new Promise((resolve, reject) => {
747
+ const proc = spawn(psqlPath, args, {
748
+ stdio: ['pipe', 'pipe', 'pipe'],
749
+ });
750
+ let stdout = '';
751
+ let stderr = '';
752
+ proc.stdout?.on('data', (data) => {
753
+ stdout += data.toString();
754
+ });
755
+ proc.stderr?.on('data', (data) => {
756
+ stderr += data.toString();
757
+ });
758
+ proc.on('error', (err) => {
759
+ reject(err);
760
+ });
761
+ proc.on('close', (code) => {
762
+ if (code === 0) {
763
+ const databases = stdout
764
+ .trim()
765
+ .split('\n')
766
+ .map((db) => db.trim())
767
+ .filter((db) => db.length > 0);
768
+ resolve(databases);
769
+ }
770
+ else {
771
+ reject(new Error(stderr || `psql exited with code ${code}`));
772
+ }
773
+ });
774
+ });
775
+ }
776
+ async createUser(container, options) {
777
+ const { username, password, database } = options;
778
+ assertValidUsername(username);
779
+ const { port } = container;
780
+ const db = database || container.database;
781
+ if (!db) {
782
+ throw new Error('No target database specified. Provide a database name with --database or ensure the container has a default database.');
783
+ }
784
+ assertValidDatabaseName(db);
785
+ const psqlPath = await this.getPsqlPath();
786
+ // Pass SQL via stdin (psql -f -) to avoid exposing passwords in process listings
787
+ const psqlBaseArgs = [
788
+ '-h',
789
+ '127.0.0.1',
790
+ '-p',
791
+ String(port),
792
+ '-U',
793
+ defaults.superuser,
794
+ '-d',
795
+ 'postgres',
796
+ '-f',
797
+ '-',
798
+ ];
799
+ const runPsqlViaStdin = (sql) => new Promise((resolve, reject) => {
800
+ const proc = spawn(psqlPath, psqlBaseArgs, {
801
+ stdio: ['pipe', 'pipe', 'pipe'],
802
+ ...getWindowsSpawnOptions(),
803
+ });
804
+ let stderr = '';
805
+ proc.stderr?.on('data', (data) => {
806
+ stderr += data.toString();
807
+ });
808
+ proc.on('error', reject);
809
+ proc.on('close', (code) => {
810
+ if (code === 0)
811
+ resolve();
812
+ else
813
+ reject(new Error(stderr || `psql exited with code ${code}`));
814
+ });
815
+ proc.stdin?.write(sql);
816
+ proc.stdin?.end();
817
+ });
818
+ // Escape username for safe identifier interpolation (defense-in-depth)
819
+ const escapedIdent = username.replace(/"/g, '""');
820
+ const escapedPass = password.replace(/'/g, "''");
821
+ // Create the role with login and password
822
+ const createRoleSql = `CREATE ROLE "${escapedIdent}" WITH LOGIN PASSWORD '${escapedPass}'`;
823
+ try {
824
+ await runPsqlViaStdin(createRoleSql);
825
+ }
826
+ catch (error) {
827
+ const err = error;
828
+ if (err.message.includes('already exists')) {
829
+ // User exists — update password instead
830
+ const alterSql = `ALTER ROLE "${escapedIdent}" WITH PASSWORD '${escapedPass}'`;
831
+ await runPsqlViaStdin(alterSql);
832
+ }
833
+ else {
834
+ throw error;
835
+ }
836
+ }
837
+ // Grant all privileges on the target database
838
+ const grantSql = `GRANT ALL PRIVILEGES ON DATABASE "${db}" TO "${escapedIdent}"`;
839
+ await runPsqlViaStdin(grantSql);
840
+ const connectionString = `postgresql://${encodeURIComponent(username)}:${encodeURIComponent(password)}@127.0.0.1:${port}/${db}`;
841
+ return {
842
+ username,
843
+ password,
844
+ connectionString,
845
+ engine: container.engine,
846
+ container: container.name,
847
+ database: db,
848
+ };
849
+ }
850
+ }
851
+ export const postgresqlEngine = new PostgreSQLEngine();
852
+ //# sourceMappingURL=index.js.map