@dotdo/postgres 0.1.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 (1129) hide show
  1. package/README.md +868 -0
  2. package/dist/cdc/change-stream.d.ts +44 -0
  3. package/dist/cdc/change-stream.d.ts.map +1 -0
  4. package/dist/cdc/change-stream.js +95 -0
  5. package/dist/cdc/change-stream.js.map +1 -0
  6. package/dist/cdc/filter.d.ts +58 -0
  7. package/dist/cdc/filter.d.ts.map +1 -0
  8. package/dist/cdc/filter.js +520 -0
  9. package/dist/cdc/filter.js.map +1 -0
  10. package/dist/cdc/index.d.ts +47 -0
  11. package/dist/cdc/index.d.ts.map +1 -0
  12. package/dist/cdc/index.js +50 -0
  13. package/dist/cdc/index.js.map +1 -0
  14. package/dist/cdc/resume-token.d.ts +60 -0
  15. package/dist/cdc/resume-token.d.ts.map +1 -0
  16. package/dist/cdc/resume-token.js +228 -0
  17. package/dist/cdc/resume-token.js.map +1 -0
  18. package/dist/cdc/transport/index.d.ts +7 -0
  19. package/dist/cdc/transport/index.d.ts.map +1 -0
  20. package/dist/cdc/transport/index.js +7 -0
  21. package/dist/cdc/transport/index.js.map +1 -0
  22. package/dist/cdc/transport/sse.d.ts +120 -0
  23. package/dist/cdc/transport/sse.d.ts.map +1 -0
  24. package/dist/cdc/transport/sse.js +590 -0
  25. package/dist/cdc/transport/sse.js.map +1 -0
  26. package/dist/cdc/transport/websocket.d.ts +130 -0
  27. package/dist/cdc/transport/websocket.d.ts.map +1 -0
  28. package/dist/cdc/transport/websocket.js +688 -0
  29. package/dist/cdc/transport/websocket.js.map +1 -0
  30. package/dist/cdc/types.d.ts +306 -0
  31. package/dist/cdc/types.d.ts.map +1 -0
  32. package/dist/cdc/types.js +8 -0
  33. package/dist/cdc/types.js.map +1 -0
  34. package/dist/config/index.d.ts +25 -0
  35. package/dist/config/index.d.ts.map +1 -0
  36. package/dist/config/index.js +25 -0
  37. package/dist/config/index.js.map +1 -0
  38. package/dist/config/memory.d.ts +139 -0
  39. package/dist/config/memory.d.ts.map +1 -0
  40. package/dist/config/memory.js +157 -0
  41. package/dist/config/memory.js.map +1 -0
  42. package/dist/config/storage.d.ts +157 -0
  43. package/dist/config/storage.d.ts.map +1 -0
  44. package/dist/config/storage.js +178 -0
  45. package/dist/config/storage.js.map +1 -0
  46. package/dist/config/streaming.d.ts +117 -0
  47. package/dist/config/streaming.d.ts.map +1 -0
  48. package/dist/config/streaming.js +132 -0
  49. package/dist/config/streaming.js.map +1 -0
  50. package/dist/config/timeouts.d.ts +168 -0
  51. package/dist/config/timeouts.d.ts.map +1 -0
  52. package/dist/config/timeouts.js +192 -0
  53. package/dist/config/timeouts.js.map +1 -0
  54. package/dist/extensions/config.d.ts +89 -0
  55. package/dist/extensions/config.d.ts.map +1 -0
  56. package/dist/extensions/config.js +216 -0
  57. package/dist/extensions/config.js.map +1 -0
  58. package/dist/extensions/geo.d.ts +452 -0
  59. package/dist/extensions/geo.d.ts.map +1 -0
  60. package/dist/extensions/geo.js +583 -0
  61. package/dist/extensions/geo.js.map +1 -0
  62. package/dist/extensions/index.d.ts +167 -0
  63. package/dist/extensions/index.d.ts.map +1 -0
  64. package/dist/extensions/index.js +99 -0
  65. package/dist/extensions/index.js.map +1 -0
  66. package/dist/extensions/loader.d.ts +226 -0
  67. package/dist/extensions/loader.d.ts.map +1 -0
  68. package/dist/extensions/loader.js +456 -0
  69. package/dist/extensions/loader.js.map +1 -0
  70. package/dist/extensions/pgmq-lite.d.ts +330 -0
  71. package/dist/extensions/pgmq-lite.d.ts.map +1 -0
  72. package/dist/extensions/pgmq-lite.js +648 -0
  73. package/dist/extensions/pgmq-lite.js.map +1 -0
  74. package/dist/extensions/plugins.d.ts +260 -0
  75. package/dist/extensions/plugins.d.ts.map +1 -0
  76. package/dist/extensions/plugins.js +535 -0
  77. package/dist/extensions/plugins.js.map +1 -0
  78. package/dist/extensions/registry.d.ts +93 -0
  79. package/dist/extensions/registry.d.ts.map +1 -0
  80. package/dist/extensions/registry.js +182 -0
  81. package/dist/extensions/registry.js.map +1 -0
  82. package/dist/extensions/vector.d.ts +106 -0
  83. package/dist/extensions/vector.d.ts.map +1 -0
  84. package/dist/extensions/vector.js +129 -0
  85. package/dist/extensions/vector.js.map +1 -0
  86. package/dist/iceberg/analytics.d.ts +279 -0
  87. package/dist/iceberg/analytics.d.ts.map +1 -0
  88. package/dist/iceberg/analytics.js +448 -0
  89. package/dist/iceberg/analytics.js.map +1 -0
  90. package/dist/iceberg/catalog-api.d.ts +39 -0
  91. package/dist/iceberg/catalog-api.d.ts.map +1 -0
  92. package/dist/iceberg/catalog-api.js +388 -0
  93. package/dist/iceberg/catalog-api.js.map +1 -0
  94. package/dist/iceberg/catalog.d.ts +401 -0
  95. package/dist/iceberg/catalog.d.ts.map +1 -0
  96. package/dist/iceberg/catalog.js +677 -0
  97. package/dist/iceberg/catalog.js.map +1 -0
  98. package/dist/iceberg/duckdb-wasm.d.ts +447 -0
  99. package/dist/iceberg/duckdb-wasm.d.ts.map +1 -0
  100. package/dist/iceberg/duckdb-wasm.js +600 -0
  101. package/dist/iceberg/duckdb-wasm.js.map +1 -0
  102. package/dist/iceberg/index.d.ts +92 -0
  103. package/dist/iceberg/index.d.ts.map +1 -0
  104. package/dist/iceberg/index.js +119 -0
  105. package/dist/iceberg/index.js.map +1 -0
  106. package/dist/iceberg/metadata.d.ts +214 -0
  107. package/dist/iceberg/metadata.d.ts.map +1 -0
  108. package/dist/iceberg/metadata.js +535 -0
  109. package/dist/iceberg/metadata.js.map +1 -0
  110. package/dist/iceberg/optimizer.d.ts +296 -0
  111. package/dist/iceberg/optimizer.d.ts.map +1 -0
  112. package/dist/iceberg/optimizer.js +889 -0
  113. package/dist/iceberg/optimizer.js.map +1 -0
  114. package/dist/iceberg/parquet.d.ts +447 -0
  115. package/dist/iceberg/parquet.d.ts.map +1 -0
  116. package/dist/iceberg/parquet.js +1225 -0
  117. package/dist/iceberg/parquet.js.map +1 -0
  118. package/dist/iceberg/r2-organization.d.ts +422 -0
  119. package/dist/iceberg/r2-organization.d.ts.map +1 -0
  120. package/dist/iceberg/r2-organization.js +672 -0
  121. package/dist/iceberg/r2-organization.js.map +1 -0
  122. package/dist/iceberg/scheduler-do-example.d.ts +158 -0
  123. package/dist/iceberg/scheduler-do-example.d.ts.map +1 -0
  124. package/dist/iceberg/scheduler-do-example.js +261 -0
  125. package/dist/iceberg/scheduler-do-example.js.map +1 -0
  126. package/dist/iceberg/scheduler.d.ts +434 -0
  127. package/dist/iceberg/scheduler.d.ts.map +1 -0
  128. package/dist/iceberg/scheduler.js +818 -0
  129. package/dist/iceberg/scheduler.js.map +1 -0
  130. package/dist/iceberg/schema.d.ts +149 -0
  131. package/dist/iceberg/schema.d.ts.map +1 -0
  132. package/dist/iceberg/schema.js +525 -0
  133. package/dist/iceberg/schema.js.map +1 -0
  134. package/dist/iceberg/snapshot-manager.d.ts +406 -0
  135. package/dist/iceberg/snapshot-manager.d.ts.map +1 -0
  136. package/dist/iceberg/snapshot-manager.js +934 -0
  137. package/dist/iceberg/snapshot-manager.js.map +1 -0
  138. package/dist/iceberg/sql-router.d.ts +194 -0
  139. package/dist/iceberg/sql-router.d.ts.map +1 -0
  140. package/dist/iceberg/sql-router.js +180 -0
  141. package/dist/iceberg/sql-router.js.map +1 -0
  142. package/dist/iceberg/test-fixtures.d.ts +151 -0
  143. package/dist/iceberg/test-fixtures.d.ts.map +1 -0
  144. package/dist/iceberg/test-fixtures.js +446 -0
  145. package/dist/iceberg/test-fixtures.js.map +1 -0
  146. package/dist/iceberg/time-travel-api.d.ts +102 -0
  147. package/dist/iceberg/time-travel-api.d.ts.map +1 -0
  148. package/dist/iceberg/time-travel-api.js +437 -0
  149. package/dist/iceberg/time-travel-api.js.map +1 -0
  150. package/dist/iceberg/time-travel.d.ts +293 -0
  151. package/dist/iceberg/time-travel.d.ts.map +1 -0
  152. package/dist/iceberg/time-travel.js +689 -0
  153. package/dist/iceberg/time-travel.js.map +1 -0
  154. package/dist/iceberg/transformer.d.ts +356 -0
  155. package/dist/iceberg/transformer.d.ts.map +1 -0
  156. package/dist/iceberg/transformer.js +770 -0
  157. package/dist/iceberg/transformer.js.map +1 -0
  158. package/dist/iceberg/types.d.ts +318 -0
  159. package/dist/iceberg/types.d.ts.map +1 -0
  160. package/dist/iceberg/types.js +9 -0
  161. package/dist/iceberg/types.js.map +1 -0
  162. package/dist/iceberg/writer.d.ts +144 -0
  163. package/dist/iceberg/writer.d.ts.map +1 -0
  164. package/dist/iceberg/writer.js +452 -0
  165. package/dist/iceberg/writer.js.map +1 -0
  166. package/dist/index.d.ts +50 -0
  167. package/dist/index.d.ts.map +1 -0
  168. package/dist/index.js +69 -0
  169. package/dist/index.js.map +1 -0
  170. package/dist/lineage/index.d.ts +11 -0
  171. package/dist/lineage/index.d.ts.map +1 -0
  172. package/dist/lineage/index.js +11 -0
  173. package/dist/lineage/index.js.map +1 -0
  174. package/dist/lineage/integration.d.ts +134 -0
  175. package/dist/lineage/integration.d.ts.map +1 -0
  176. package/dist/lineage/integration.js +258 -0
  177. package/dist/lineage/integration.js.map +1 -0
  178. package/dist/lineage/tracker.d.ts +189 -0
  179. package/dist/lineage/tracker.d.ts.map +1 -0
  180. package/dist/lineage/tracker.js +1352 -0
  181. package/dist/lineage/tracker.js.map +1 -0
  182. package/dist/lineage/types.d.ts +318 -0
  183. package/dist/lineage/types.d.ts.map +1 -0
  184. package/dist/lineage/types.js +9 -0
  185. package/dist/lineage/types.js.map +1 -0
  186. package/dist/middleware/index.d.ts +11 -0
  187. package/dist/middleware/index.d.ts.map +1 -0
  188. package/dist/middleware/index.js +16 -0
  189. package/dist/middleware/index.js.map +1 -0
  190. package/dist/middleware/rate-limit.d.ts +397 -0
  191. package/dist/middleware/rate-limit.d.ts.map +1 -0
  192. package/dist/middleware/rate-limit.js +507 -0
  193. package/dist/middleware/rate-limit.js.map +1 -0
  194. package/dist/migration-tooling/external-migration.d.ts +601 -0
  195. package/dist/migration-tooling/external-migration.d.ts.map +1 -0
  196. package/dist/migration-tooling/external-migration.js +1612 -0
  197. package/dist/migration-tooling/external-migration.js.map +1 -0
  198. package/dist/migration-tooling/index.d.ts +19 -0
  199. package/dist/migration-tooling/index.d.ts.map +1 -0
  200. package/dist/migration-tooling/index.js +19 -0
  201. package/dist/migration-tooling/index.js.map +1 -0
  202. package/dist/migrations/auto-migrator.d.ts +289 -0
  203. package/dist/migrations/auto-migrator.d.ts.map +1 -0
  204. package/dist/migrations/auto-migrator.js +396 -0
  205. package/dist/migrations/auto-migrator.js.map +1 -0
  206. package/dist/migrations/bulk-orchestrator.d.ts +403 -0
  207. package/dist/migrations/bulk-orchestrator.d.ts.map +1 -0
  208. package/dist/migrations/bulk-orchestrator.js +646 -0
  209. package/dist/migrations/bulk-orchestrator.js.map +1 -0
  210. package/dist/migrations/compatibility.d.ts +216 -0
  211. package/dist/migrations/compatibility.d.ts.map +1 -0
  212. package/dist/migrations/compatibility.js +651 -0
  213. package/dist/migrations/compatibility.js.map +1 -0
  214. package/dist/migrations/do-migrations.d.ts +101 -0
  215. package/dist/migrations/do-migrations.d.ts.map +1 -0
  216. package/dist/migrations/do-migrations.js +1060 -0
  217. package/dist/migrations/do-migrations.js.map +1 -0
  218. package/dist/migrations/do-migrations.types.d.ts +550 -0
  219. package/dist/migrations/do-migrations.types.d.ts.map +1 -0
  220. package/dist/migrations/do-migrations.types.js +15 -0
  221. package/dist/migrations/do-migrations.types.js.map +1 -0
  222. package/dist/migrations/drizzle-compat.d.ts +163 -0
  223. package/dist/migrations/drizzle-compat.d.ts.map +1 -0
  224. package/dist/migrations/drizzle-compat.js +273 -0
  225. package/dist/migrations/drizzle-compat.js.map +1 -0
  226. package/dist/migrations/index.d.ts +109 -0
  227. package/dist/migrations/index.d.ts.map +1 -0
  228. package/dist/migrations/index.js +127 -0
  229. package/dist/migrations/index.js.map +1 -0
  230. package/dist/migrations/migration-api.d.ts +161 -0
  231. package/dist/migrations/migration-api.d.ts.map +1 -0
  232. package/dist/migrations/migration-api.js +499 -0
  233. package/dist/migrations/migration-api.js.map +1 -0
  234. package/dist/migrations/progress-tracker-do.d.ts +195 -0
  235. package/dist/migrations/progress-tracker-do.d.ts.map +1 -0
  236. package/dist/migrations/progress-tracker-do.js +339 -0
  237. package/dist/migrations/progress-tracker-do.js.map +1 -0
  238. package/dist/migrations/progress-tracker-kv.d.ts +103 -0
  239. package/dist/migrations/progress-tracker-kv.d.ts.map +1 -0
  240. package/dist/migrations/progress-tracker-kv.js +231 -0
  241. package/dist/migrations/progress-tracker-kv.js.map +1 -0
  242. package/dist/migrations/progress-tracker.d.ts +320 -0
  243. package/dist/migrations/progress-tracker.d.ts.map +1 -0
  244. package/dist/migrations/progress-tracker.js +443 -0
  245. package/dist/migrations/progress-tracker.js.map +1 -0
  246. package/dist/migrations/registry.d.ts +231 -0
  247. package/dist/migrations/registry.d.ts.map +1 -0
  248. package/dist/migrations/registry.js +376 -0
  249. package/dist/migrations/registry.js.map +1 -0
  250. package/dist/migrations/runner.d.ts +197 -0
  251. package/dist/migrations/runner.d.ts.map +1 -0
  252. package/dist/migrations/runner.js +1167 -0
  253. package/dist/migrations/runner.js.map +1 -0
  254. package/dist/migrations/schema-generator.d.ts +111 -0
  255. package/dist/migrations/schema-generator.d.ts.map +1 -0
  256. package/dist/migrations/schema-generator.js +335 -0
  257. package/dist/migrations/schema-generator.js.map +1 -0
  258. package/dist/migrations/testing.d.ts +321 -0
  259. package/dist/migrations/testing.d.ts.map +1 -0
  260. package/dist/migrations/testing.js +645 -0
  261. package/dist/migrations/testing.js.map +1 -0
  262. package/dist/migrations/types.d.ts +503 -0
  263. package/dist/migrations/types.d.ts.map +1 -0
  264. package/dist/migrations/types.js +11 -0
  265. package/dist/migrations/types.js.map +1 -0
  266. package/dist/migrations/validator.d.ts +215 -0
  267. package/dist/migrations/validator.d.ts.map +1 -0
  268. package/dist/migrations/validator.js +494 -0
  269. package/dist/migrations/validator.js.map +1 -0
  270. package/dist/observability/alerting.d.ts +116 -0
  271. package/dist/observability/alerting.d.ts.map +1 -0
  272. package/dist/observability/alerting.js +353 -0
  273. package/dist/observability/alerting.js.map +1 -0
  274. package/dist/observability/analytics-engine.d.ts +357 -0
  275. package/dist/observability/analytics-engine.d.ts.map +1 -0
  276. package/dist/observability/analytics-engine.js +430 -0
  277. package/dist/observability/analytics-engine.js.map +1 -0
  278. package/dist/observability/cost-metrics.d.ts +269 -0
  279. package/dist/observability/cost-metrics.d.ts.map +1 -0
  280. package/dist/observability/cost-metrics.js +560 -0
  281. package/dist/observability/cost-metrics.js.map +1 -0
  282. package/dist/observability/cross-do-tracing.d.ts +305 -0
  283. package/dist/observability/cross-do-tracing.d.ts.map +1 -0
  284. package/dist/observability/cross-do-tracing.js +431 -0
  285. package/dist/observability/cross-do-tracing.js.map +1 -0
  286. package/dist/observability/error-rate-collector.d.ts +163 -0
  287. package/dist/observability/error-rate-collector.d.ts.map +1 -0
  288. package/dist/observability/error-rate-collector.js +306 -0
  289. package/dist/observability/error-rate-collector.js.map +1 -0
  290. package/dist/observability/exporters.d.ts +231 -0
  291. package/dist/observability/exporters.d.ts.map +1 -0
  292. package/dist/observability/exporters.js +479 -0
  293. package/dist/observability/exporters.js.map +1 -0
  294. package/dist/observability/health-check.d.ts +106 -0
  295. package/dist/observability/health-check.d.ts.map +1 -0
  296. package/dist/observability/health-check.js +243 -0
  297. package/dist/observability/health-check.js.map +1 -0
  298. package/dist/observability/index.d.ts +297 -0
  299. package/dist/observability/index.d.ts.map +1 -0
  300. package/dist/observability/index.js +455 -0
  301. package/dist/observability/index.js.map +1 -0
  302. package/dist/observability/instrumentation.d.ts +222 -0
  303. package/dist/observability/instrumentation.d.ts.map +1 -0
  304. package/dist/observability/instrumentation.js +532 -0
  305. package/dist/observability/instrumentation.js.map +1 -0
  306. package/dist/observability/memory-metrics.d.ts +227 -0
  307. package/dist/observability/memory-metrics.d.ts.map +1 -0
  308. package/dist/observability/memory-metrics.js +688 -0
  309. package/dist/observability/memory-metrics.js.map +1 -0
  310. package/dist/observability/metrics-endpoint.d.ts +91 -0
  311. package/dist/observability/metrics-endpoint.d.ts.map +1 -0
  312. package/dist/observability/metrics-endpoint.js +246 -0
  313. package/dist/observability/metrics-endpoint.js.map +1 -0
  314. package/dist/observability/metrics.d.ts +88 -0
  315. package/dist/observability/metrics.d.ts.map +1 -0
  316. package/dist/observability/metrics.js +253 -0
  317. package/dist/observability/metrics.js.map +1 -0
  318. package/dist/observability/observability-features.d.ts +488 -0
  319. package/dist/observability/observability-features.d.ts.map +1 -0
  320. package/dist/observability/observability-features.js +773 -0
  321. package/dist/observability/observability-features.js.map +1 -0
  322. package/dist/observability/prometheus.d.ts +39 -0
  323. package/dist/observability/prometheus.d.ts.map +1 -0
  324. package/dist/observability/prometheus.js +120 -0
  325. package/dist/observability/prometheus.js.map +1 -0
  326. package/dist/observability/propagation.d.ts +126 -0
  327. package/dist/observability/propagation.d.ts.map +1 -0
  328. package/dist/observability/propagation.js +234 -0
  329. package/dist/observability/propagation.js.map +1 -0
  330. package/dist/observability/query-latency.d.ts +243 -0
  331. package/dist/observability/query-latency.d.ts.map +1 -0
  332. package/dist/observability/query-latency.js +292 -0
  333. package/dist/observability/query-latency.js.map +1 -0
  334. package/dist/observability/query-performance.d.ts +169 -0
  335. package/dist/observability/query-performance.d.ts.map +1 -0
  336. package/dist/observability/query-performance.js +290 -0
  337. package/dist/observability/query-performance.js.map +1 -0
  338. package/dist/observability/storage-tier-metrics.d.ts +174 -0
  339. package/dist/observability/storage-tier-metrics.d.ts.map +1 -0
  340. package/dist/observability/storage-tier-metrics.js +306 -0
  341. package/dist/observability/storage-tier-metrics.js.map +1 -0
  342. package/dist/observability/tier-cost-optimizer.d.ts +155 -0
  343. package/dist/observability/tier-cost-optimizer.d.ts.map +1 -0
  344. package/dist/observability/tier-cost-optimizer.js +536 -0
  345. package/dist/observability/tier-cost-optimizer.js.map +1 -0
  346. package/dist/observability/tracer.d.ts +149 -0
  347. package/dist/observability/tracer.d.ts.map +1 -0
  348. package/dist/observability/tracer.js +435 -0
  349. package/dist/observability/tracer.js.map +1 -0
  350. package/dist/observability/types.d.ts +402 -0
  351. package/dist/observability/types.d.ts.map +1 -0
  352. package/dist/observability/types.js +103 -0
  353. package/dist/observability/types.js.map +1 -0
  354. package/dist/pglite/workers-pglite.d.ts +138 -0
  355. package/dist/pglite/workers-pglite.d.ts.map +1 -0
  356. package/dist/pglite/workers-pglite.js +143 -0
  357. package/dist/pglite/workers-pglite.js.map +1 -0
  358. package/dist/pglite-assets/pglite.data +0 -0
  359. package/dist/pglite-assets/pglite.wasm +0 -0
  360. package/dist/playground/index.d.ts +52 -0
  361. package/dist/playground/index.d.ts.map +1 -0
  362. package/dist/playground/index.js +55 -0
  363. package/dist/playground/index.js.map +1 -0
  364. package/dist/playground/keyboard-shortcuts.d.ts +116 -0
  365. package/dist/playground/keyboard-shortcuts.d.ts.map +1 -0
  366. package/dist/playground/keyboard-shortcuts.js +588 -0
  367. package/dist/playground/keyboard-shortcuts.js.map +1 -0
  368. package/dist/playground/playground.d.ts +82 -0
  369. package/dist/playground/playground.d.ts.map +1 -0
  370. package/dist/playground/playground.js +271 -0
  371. package/dist/playground/playground.js.map +1 -0
  372. package/dist/playground/query-executor.d.ts +115 -0
  373. package/dist/playground/query-executor.d.ts.map +1 -0
  374. package/dist/playground/query-executor.js +558 -0
  375. package/dist/playground/query-executor.js.map +1 -0
  376. package/dist/playground/query-history.d.ts +92 -0
  377. package/dist/playground/query-history.d.ts.map +1 -0
  378. package/dist/playground/query-history.js +259 -0
  379. package/dist/playground/query-history.js.map +1 -0
  380. package/dist/playground/result-formatter.d.ts +59 -0
  381. package/dist/playground/result-formatter.d.ts.map +1 -0
  382. package/dist/playground/result-formatter.js +341 -0
  383. package/dist/playground/result-formatter.js.map +1 -0
  384. package/dist/playground/sample-datasets.d.ts +77 -0
  385. package/dist/playground/sample-datasets.d.ts.map +1 -0
  386. package/dist/playground/sample-datasets.js +641 -0
  387. package/dist/playground/sample-datasets.js.map +1 -0
  388. package/dist/playground/sample-queries.d.ts +73 -0
  389. package/dist/playground/sample-queries.d.ts.map +1 -0
  390. package/dist/playground/sample-queries.js +1095 -0
  391. package/dist/playground/sample-queries.js.map +1 -0
  392. package/dist/playground/schema-explorer.d.ts +55 -0
  393. package/dist/playground/schema-explorer.d.ts.map +1 -0
  394. package/dist/playground/schema-explorer.js +473 -0
  395. package/dist/playground/schema-explorer.js.map +1 -0
  396. package/dist/playground/types.d.ts +430 -0
  397. package/dist/playground/types.d.ts.map +1 -0
  398. package/dist/playground/types.js +10 -0
  399. package/dist/playground/types.js.map +1 -0
  400. package/dist/readonly/cache-reader.d.ts +145 -0
  401. package/dist/readonly/cache-reader.d.ts.map +1 -0
  402. package/dist/readonly/cache-reader.js +198 -0
  403. package/dist/readonly/cache-reader.js.map +1 -0
  404. package/dist/readonly/config.d.ts +74 -0
  405. package/dist/readonly/config.d.ts.map +1 -0
  406. package/dist/readonly/config.js +67 -0
  407. package/dist/readonly/config.js.map +1 -0
  408. package/dist/readonly/index.d.ts +22 -0
  409. package/dist/readonly/index.d.ts.map +1 -0
  410. package/dist/readonly/index.js +17 -0
  411. package/dist/readonly/index.js.map +1 -0
  412. package/dist/readonly/pglite-wrapper.d.ts +82 -0
  413. package/dist/readonly/pglite-wrapper.d.ts.map +1 -0
  414. package/dist/readonly/pglite-wrapper.js +123 -0
  415. package/dist/readonly/pglite-wrapper.js.map +1 -0
  416. package/dist/readonly/worker.d.ts +142 -0
  417. package/dist/readonly/worker.d.ts.map +1 -0
  418. package/dist/readonly/worker.js +187 -0
  419. package/dist/readonly/worker.js.map +1 -0
  420. package/dist/readonly/write-blocker.d.ts +47 -0
  421. package/dist/readonly/write-blocker.d.ts.map +1 -0
  422. package/dist/readonly/write-blocker.js +136 -0
  423. package/dist/readonly/write-blocker.js.map +1 -0
  424. package/dist/recovery/disaster-recovery.d.ts +326 -0
  425. package/dist/recovery/disaster-recovery.d.ts.map +1 -0
  426. package/dist/recovery/disaster-recovery.js +799 -0
  427. package/dist/recovery/disaster-recovery.js.map +1 -0
  428. package/dist/recovery/index.d.ts +12 -0
  429. package/dist/recovery/index.d.ts.map +1 -0
  430. package/dist/recovery/index.js +12 -0
  431. package/dist/recovery/index.js.map +1 -0
  432. package/dist/recovery/parquet-parser.d.ts +321 -0
  433. package/dist/recovery/parquet-parser.d.ts.map +1 -0
  434. package/dist/recovery/parquet-parser.js +797 -0
  435. package/dist/recovery/parquet-parser.js.map +1 -0
  436. package/dist/retention/index.d.ts +50 -0
  437. package/dist/retention/index.d.ts.map +1 -0
  438. package/dist/retention/index.js +50 -0
  439. package/dist/retention/index.js.map +1 -0
  440. package/dist/retention/policy.d.ts +344 -0
  441. package/dist/retention/policy.d.ts.map +1 -0
  442. package/dist/retention/policy.js +472 -0
  443. package/dist/retention/policy.js.map +1 -0
  444. package/dist/retention/purger.d.ts +187 -0
  445. package/dist/retention/purger.d.ts.map +1 -0
  446. package/dist/retention/purger.js +411 -0
  447. package/dist/retention/purger.js.map +1 -0
  448. package/dist/rls/auth-integration.d.ts +280 -0
  449. package/dist/rls/auth-integration.d.ts.map +1 -0
  450. package/dist/rls/auth-integration.js +399 -0
  451. package/dist/rls/auth-integration.js.map +1 -0
  452. package/dist/rls/generator.d.ts +249 -0
  453. package/dist/rls/generator.d.ts.map +1 -0
  454. package/dist/rls/generator.js +495 -0
  455. package/dist/rls/generator.js.map +1 -0
  456. package/dist/rls/index.d.ts +26 -0
  457. package/dist/rls/index.d.ts.map +1 -0
  458. package/dist/rls/index.js +58 -0
  459. package/dist/rls/index.js.map +1 -0
  460. package/dist/rls/policy.d.ts +116 -0
  461. package/dist/rls/policy.d.ts.map +1 -0
  462. package/dist/rls/policy.js +77 -0
  463. package/dist/rls/policy.js.map +1 -0
  464. package/dist/rls/validator.d.ts +155 -0
  465. package/dist/rls/validator.d.ts.map +1 -0
  466. package/dist/rls/validator.js +792 -0
  467. package/dist/rls/validator.js.map +1 -0
  468. package/dist/routing/adaptive-router.d.ts +317 -0
  469. package/dist/routing/adaptive-router.d.ts.map +1 -0
  470. package/dist/routing/adaptive-router.js +554 -0
  471. package/dist/routing/adaptive-router.js.map +1 -0
  472. package/dist/routing/circuit-breaker.d.ts +339 -0
  473. package/dist/routing/circuit-breaker.d.ts.map +1 -0
  474. package/dist/routing/circuit-breaker.js +620 -0
  475. package/dist/routing/circuit-breaker.js.map +1 -0
  476. package/dist/routing/cost-metrics.d.ts +133 -0
  477. package/dist/routing/cost-metrics.d.ts.map +1 -0
  478. package/dist/routing/cost-metrics.js +259 -0
  479. package/dist/routing/cost-metrics.js.map +1 -0
  480. package/dist/routing/do-connection-pool.d.ts +243 -0
  481. package/dist/routing/do-connection-pool.d.ts.map +1 -0
  482. package/dist/routing/do-connection-pool.js +572 -0
  483. package/dist/routing/do-connection-pool.js.map +1 -0
  484. package/dist/routing/index.d.ts +59 -0
  485. package/dist/routing/index.d.ts.map +1 -0
  486. package/dist/routing/index.js +59 -0
  487. package/dist/routing/index.js.map +1 -0
  488. package/dist/routing/query-complexity-estimator.d.ts +73 -0
  489. package/dist/routing/query-complexity-estimator.d.ts.map +1 -0
  490. package/dist/routing/query-complexity-estimator.js +327 -0
  491. package/dist/routing/query-complexity-estimator.js.map +1 -0
  492. package/dist/routing/request-coalescing.d.ts +178 -0
  493. package/dist/routing/request-coalescing.d.ts.map +1 -0
  494. package/dist/routing/request-coalescing.js +325 -0
  495. package/dist/routing/request-coalescing.js.map +1 -0
  496. package/dist/routing/runtime-router.d.ts +107 -0
  497. package/dist/routing/runtime-router.d.ts.map +1 -0
  498. package/dist/routing/runtime-router.js +246 -0
  499. package/dist/routing/runtime-router.js.map +1 -0
  500. package/dist/routing/tenant-router.d.ts +848 -0
  501. package/dist/routing/tenant-router.d.ts.map +1 -0
  502. package/dist/routing/tenant-router.js +1056 -0
  503. package/dist/routing/tenant-router.js.map +1 -0
  504. package/dist/routing/websocket-pool.d.ts +119 -0
  505. package/dist/routing/websocket-pool.d.ts.map +1 -0
  506. package/dist/routing/websocket-pool.js +436 -0
  507. package/dist/routing/websocket-pool.js.map +1 -0
  508. package/dist/storage/cache-layer.d.ts +159 -0
  509. package/dist/storage/cache-layer.d.ts.map +1 -0
  510. package/dist/storage/cache-layer.js +245 -0
  511. package/dist/storage/cache-layer.js.map +1 -0
  512. package/dist/storage/cost-aware-tiering.d.ts +258 -0
  513. package/dist/storage/cost-aware-tiering.d.ts.map +1 -0
  514. package/dist/storage/cost-aware-tiering.js +526 -0
  515. package/dist/storage/cost-aware-tiering.js.map +1 -0
  516. package/dist/storage/index.d.ts +87 -0
  517. package/dist/storage/index.d.ts.map +1 -0
  518. package/dist/storage/index.js +78 -0
  519. package/dist/storage/index.js.map +1 -0
  520. package/dist/storage/interfaces.d.ts +856 -0
  521. package/dist/storage/interfaces.d.ts.map +1 -0
  522. package/dist/storage/interfaces.js +69 -0
  523. package/dist/storage/interfaces.js.map +1 -0
  524. package/dist/storage/r2-layer.d.ts +226 -0
  525. package/dist/storage/r2-layer.d.ts.map +1 -0
  526. package/dist/storage/r2-layer.js +307 -0
  527. package/dist/storage/r2-layer.js.map +1 -0
  528. package/dist/storage/r2-overflow.d.ts +344 -0
  529. package/dist/storage/r2-overflow.d.ts.map +1 -0
  530. package/dist/storage/r2-overflow.js +730 -0
  531. package/dist/storage/r2-overflow.js.map +1 -0
  532. package/dist/storage/r2-page-vfs.d.ts +374 -0
  533. package/dist/storage/r2-page-vfs.d.ts.map +1 -0
  534. package/dist/storage/r2-page-vfs.js +754 -0
  535. package/dist/storage/r2-page-vfs.js.map +1 -0
  536. package/dist/storage/swr-cache.d.ts +181 -0
  537. package/dist/storage/swr-cache.d.ts.map +1 -0
  538. package/dist/storage/swr-cache.js +295 -0
  539. package/dist/storage/swr-cache.js.map +1 -0
  540. package/dist/storage/tiered-orchestrator.d.ts +951 -0
  541. package/dist/storage/tiered-orchestrator.d.ts.map +1 -0
  542. package/dist/storage/tiered-orchestrator.js +1731 -0
  543. package/dist/storage/tiered-orchestrator.js.map +1 -0
  544. package/dist/storage/tiered-vfs-swr.d.ts +279 -0
  545. package/dist/storage/tiered-vfs-swr.d.ts.map +1 -0
  546. package/dist/storage/tiered-vfs-swr.js +584 -0
  547. package/dist/storage/tiered-vfs-swr.js.map +1 -0
  548. package/dist/storage/tiered-vfs.d.ts +405 -0
  549. package/dist/storage/tiered-vfs.d.ts.map +1 -0
  550. package/dist/storage/tiered-vfs.js +833 -0
  551. package/dist/storage/tiered-vfs.js.map +1 -0
  552. package/dist/streaming/backpressure-controller.d.ts +173 -0
  553. package/dist/streaming/backpressure-controller.d.ts.map +1 -0
  554. package/dist/streaming/backpressure-controller.js +344 -0
  555. package/dist/streaming/backpressure-controller.js.map +1 -0
  556. package/dist/streaming/buffer-pool.d.ts +241 -0
  557. package/dist/streaming/buffer-pool.d.ts.map +1 -0
  558. package/dist/streaming/buffer-pool.js +381 -0
  559. package/dist/streaming/buffer-pool.js.map +1 -0
  560. package/dist/streaming/cdc-iceberg-connector.d.ts +272 -0
  561. package/dist/streaming/cdc-iceberg-connector.d.ts.map +1 -0
  562. package/dist/streaming/cdc-iceberg-connector.js +408 -0
  563. package/dist/streaming/cdc-iceberg-connector.js.map +1 -0
  564. package/dist/streaming/index.d.ts +111 -0
  565. package/dist/streaming/index.d.ts.map +1 -0
  566. package/dist/streaming/index.js +128 -0
  567. package/dist/streaming/index.js.map +1 -0
  568. package/dist/streaming/live-cdc-stream.d.ts +400 -0
  569. package/dist/streaming/live-cdc-stream.d.ts.map +1 -0
  570. package/dist/streaming/live-cdc-stream.js +703 -0
  571. package/dist/streaming/live-cdc-stream.js.map +1 -0
  572. package/dist/streaming/memory-bounded-stream.d.ts +207 -0
  573. package/dist/streaming/memory-bounded-stream.d.ts.map +1 -0
  574. package/dist/streaming/memory-bounded-stream.js +340 -0
  575. package/dist/streaming/memory-bounded-stream.js.map +1 -0
  576. package/dist/streaming/query-streamer.d.ts +379 -0
  577. package/dist/streaming/query-streamer.d.ts.map +1 -0
  578. package/dist/streaming/query-streamer.js +495 -0
  579. package/dist/streaming/query-streamer.js.map +1 -0
  580. package/dist/streaming/response-streaming.d.ts +203 -0
  581. package/dist/streaming/response-streaming.d.ts.map +1 -0
  582. package/dist/streaming/response-streaming.js +449 -0
  583. package/dist/streaming/response-streaming.js.map +1 -0
  584. package/dist/types/branded.d.ts +859 -0
  585. package/dist/types/branded.d.ts.map +1 -0
  586. package/dist/types/branded.js +891 -0
  587. package/dist/types/branded.js.map +1 -0
  588. package/dist/types/utilities.d.ts +757 -0
  589. package/dist/types/utilities.d.ts.map +1 -0
  590. package/dist/types/utilities.js +447 -0
  591. package/dist/types/utilities.js.map +1 -0
  592. package/dist/wal/replay-engine.d.ts +344 -0
  593. package/dist/wal/replay-engine.d.ts.map +1 -0
  594. package/dist/wal/replay-engine.js +975 -0
  595. package/dist/wal/replay-engine.js.map +1 -0
  596. package/dist/worker/__mocks__/capnweb.d.ts +13 -0
  597. package/dist/worker/__mocks__/capnweb.d.ts.map +1 -0
  598. package/dist/worker/__mocks__/capnweb.js +15 -0
  599. package/dist/worker/__mocks__/capnweb.js.map +1 -0
  600. package/dist/worker/__mocks__/cloudflare-workers.d.ts +31 -0
  601. package/dist/worker/__mocks__/cloudflare-workers.d.ts.map +1 -0
  602. package/dist/worker/__mocks__/cloudflare-workers.js +33 -0
  603. package/dist/worker/__mocks__/cloudflare-workers.js.map +1 -0
  604. package/dist/worker/__mocks__/pglite.data.d.ts +3 -0
  605. package/dist/worker/__mocks__/pglite.data.d.ts.map +1 -0
  606. package/dist/worker/__mocks__/pglite.data.js +20 -0
  607. package/dist/worker/__mocks__/pglite.data.js.map +1 -0
  608. package/dist/worker/__mocks__/pglite.wasm.d.ts +3 -0
  609. package/dist/worker/__mocks__/pglite.wasm.d.ts.map +1 -0
  610. package/dist/worker/__mocks__/pglite.wasm.js +30 -0
  611. package/dist/worker/__mocks__/pglite.wasm.js.map +1 -0
  612. package/dist/worker/auth-rate-limiter.d.ts +270 -0
  613. package/dist/worker/auth-rate-limiter.d.ts.map +1 -0
  614. package/dist/worker/auth-rate-limiter.js +332 -0
  615. package/dist/worker/auth-rate-limiter.js.map +1 -0
  616. package/dist/worker/auth.d.ts +345 -0
  617. package/dist/worker/auth.d.ts.map +1 -0
  618. package/dist/worker/auth.js +837 -0
  619. package/dist/worker/auth.js.map +1 -0
  620. package/dist/worker/cdc-backpressure.d.ts +338 -0
  621. package/dist/worker/cdc-backpressure.d.ts.map +1 -0
  622. package/dist/worker/cdc-backpressure.js +619 -0
  623. package/dist/worker/cdc-backpressure.js.map +1 -0
  624. package/dist/worker/cdc-sse.d.ts +277 -0
  625. package/dist/worker/cdc-sse.d.ts.map +1 -0
  626. package/dist/worker/cdc-sse.js +528 -0
  627. package/dist/worker/cdc-sse.js.map +1 -0
  628. package/dist/worker/cdc-websocket.d.ts +252 -0
  629. package/dist/worker/cdc-websocket.d.ts.map +1 -0
  630. package/dist/worker/cdc-websocket.js +940 -0
  631. package/dist/worker/cdc-websocket.js.map +1 -0
  632. package/dist/worker/cdc.d.ts +95 -0
  633. package/dist/worker/cdc.d.ts.map +1 -0
  634. package/dist/worker/cdc.js +211 -0
  635. package/dist/worker/cdc.js.map +1 -0
  636. package/dist/worker/concerns/auth-concern.d.ts +50 -0
  637. package/dist/worker/concerns/auth-concern.d.ts.map +1 -0
  638. package/dist/worker/concerns/auth-concern.js +131 -0
  639. package/dist/worker/concerns/auth-concern.js.map +1 -0
  640. package/dist/worker/concerns/cdc-concern.d.ts +99 -0
  641. package/dist/worker/concerns/cdc-concern.d.ts.map +1 -0
  642. package/dist/worker/concerns/cdc-concern.js +137 -0
  643. package/dist/worker/concerns/cdc-concern.js.map +1 -0
  644. package/dist/worker/concerns/index.d.ts +22 -0
  645. package/dist/worker/concerns/index.d.ts.map +1 -0
  646. package/dist/worker/concerns/index.js +13 -0
  647. package/dist/worker/concerns/index.js.map +1 -0
  648. package/dist/worker/concerns/query-execution-concern.d.ts +104 -0
  649. package/dist/worker/concerns/query-execution-concern.d.ts.map +1 -0
  650. package/dist/worker/concerns/query-execution-concern.js +95 -0
  651. package/dist/worker/concerns/query-execution-concern.js.map +1 -0
  652. package/dist/worker/concerns/storage-orchestration-concern.d.ts +78 -0
  653. package/dist/worker/concerns/storage-orchestration-concern.d.ts.map +1 -0
  654. package/dist/worker/concerns/storage-orchestration-concern.js +240 -0
  655. package/dist/worker/concerns/storage-orchestration-concern.js.map +1 -0
  656. package/dist/worker/do-auth-manager.d.ts +108 -0
  657. package/dist/worker/do-auth-manager.d.ts.map +1 -0
  658. package/dist/worker/do-auth-manager.js +212 -0
  659. package/dist/worker/do-auth-manager.js.map +1 -0
  660. package/dist/worker/do-pglite-manager.d.ts +137 -0
  661. package/dist/worker/do-pglite-manager.d.ts.map +1 -0
  662. package/dist/worker/do-pglite-manager.js +228 -0
  663. package/dist/worker/do-pglite-manager.js.map +1 -0
  664. package/dist/worker/do.d.ts +556 -0
  665. package/dist/worker/do.d.ts.map +1 -0
  666. package/dist/worker/do.js +1441 -0
  667. package/dist/worker/do.js.map +1 -0
  668. package/dist/worker/entry.d.ts +23 -0
  669. package/dist/worker/entry.d.ts.map +1 -0
  670. package/dist/worker/entry.js +362 -0
  671. package/dist/worker/entry.js.map +1 -0
  672. package/dist/worker/errors.d.ts +106 -0
  673. package/dist/worker/errors.d.ts.map +1 -0
  674. package/dist/worker/errors.js +178 -0
  675. package/dist/worker/errors.js.map +1 -0
  676. package/dist/worker/health-check-manager.d.ts +141 -0
  677. package/dist/worker/health-check-manager.d.ts.map +1 -0
  678. package/dist/worker/health-check-manager.js +145 -0
  679. package/dist/worker/health-check-manager.js.map +1 -0
  680. package/dist/worker/index.d.ts +60 -0
  681. package/dist/worker/index.d.ts.map +1 -0
  682. package/dist/worker/index.js +67 -0
  683. package/dist/worker/index.js.map +1 -0
  684. package/dist/worker/memory-pressure.d.ts +892 -0
  685. package/dist/worker/memory-pressure.d.ts.map +1 -0
  686. package/dist/worker/memory-pressure.js +1990 -0
  687. package/dist/worker/memory-pressure.js.map +1 -0
  688. package/dist/worker/migration-manager.d.ts +153 -0
  689. package/dist/worker/migration-manager.d.ts.map +1 -0
  690. package/dist/worker/migration-manager.js +461 -0
  691. package/dist/worker/migration-manager.js.map +1 -0
  692. package/dist/worker/plugin-manager.d.ts +147 -0
  693. package/dist/worker/plugin-manager.d.ts.map +1 -0
  694. package/dist/worker/plugin-manager.js +408 -0
  695. package/dist/worker/plugin-manager.js.map +1 -0
  696. package/dist/worker/proxy.d.ts +330 -0
  697. package/dist/worker/proxy.d.ts.map +1 -0
  698. package/dist/worker/proxy.js +504 -0
  699. package/dist/worker/proxy.js.map +1 -0
  700. package/dist/worker/query-execution-manager.d.ts +107 -0
  701. package/dist/worker/query-execution-manager.d.ts.map +1 -0
  702. package/dist/worker/query-execution-manager.js +155 -0
  703. package/dist/worker/query-execution-manager.js.map +1 -0
  704. package/dist/worker/query-executor.d.ts +163 -0
  705. package/dist/worker/query-executor.d.ts.map +1 -0
  706. package/dist/worker/query-executor.js +413 -0
  707. package/dist/worker/query-executor.js.map +1 -0
  708. package/dist/worker/query-stats-manager.d.ts +117 -0
  709. package/dist/worker/query-stats-manager.d.ts.map +1 -0
  710. package/dist/worker/query-stats-manager.js +162 -0
  711. package/dist/worker/query-stats-manager.js.map +1 -0
  712. package/dist/worker/result-handler.d.ts +192 -0
  713. package/dist/worker/result-handler.d.ts.map +1 -0
  714. package/dist/worker/result-handler.js +346 -0
  715. package/dist/worker/result-handler.js.map +1 -0
  716. package/dist/worker/routes.d.ts +135 -0
  717. package/dist/worker/routes.d.ts.map +1 -0
  718. package/dist/worker/routes.js +460 -0
  719. package/dist/worker/routes.js.map +1 -0
  720. package/dist/worker/rpc-methods-manager.d.ts +142 -0
  721. package/dist/worker/rpc-methods-manager.d.ts.map +1 -0
  722. package/dist/worker/rpc-methods-manager.js +195 -0
  723. package/dist/worker/rpc-methods-manager.js.map +1 -0
  724. package/dist/worker/rpc.d.ts +259 -0
  725. package/dist/worker/rpc.d.ts.map +1 -0
  726. package/dist/worker/rpc.js +398 -0
  727. package/dist/worker/rpc.js.map +1 -0
  728. package/dist/worker/schema-version.d.ts +209 -0
  729. package/dist/worker/schema-version.d.ts.map +1 -0
  730. package/dist/worker/schema-version.js +450 -0
  731. package/dist/worker/schema-version.js.map +1 -0
  732. package/dist/worker/session-manager.d.ts +282 -0
  733. package/dist/worker/session-manager.d.ts.map +1 -0
  734. package/dist/worker/session-manager.js +523 -0
  735. package/dist/worker/session-manager.js.map +1 -0
  736. package/dist/worker/shutdown-manager.d.ts +188 -0
  737. package/dist/worker/shutdown-manager.d.ts.map +1 -0
  738. package/dist/worker/shutdown-manager.js +347 -0
  739. package/dist/worker/shutdown-manager.js.map +1 -0
  740. package/dist/worker/sql-transform.d.ts +61 -0
  741. package/dist/worker/sql-transform.d.ts.map +1 -0
  742. package/dist/worker/sql-transform.js +312 -0
  743. package/dist/worker/sql-transform.js.map +1 -0
  744. package/dist/worker/types.d.ts +738 -0
  745. package/dist/worker/types.d.ts.map +1 -0
  746. package/dist/worker/types.js +6 -0
  747. package/dist/worker/types.js.map +1 -0
  748. package/dist/worker/user-routes.d.ts +76 -0
  749. package/dist/worker/user-routes.d.ts.map +1 -0
  750. package/dist/worker/user-routes.js +188 -0
  751. package/dist/worker/user-routes.js.map +1 -0
  752. package/dist/worker/wal-facade.d.ts +138 -0
  753. package/dist/worker/wal-facade.d.ts.map +1 -0
  754. package/dist/worker/wal-facade.js +184 -0
  755. package/dist/worker/wal-facade.js.map +1 -0
  756. package/dist/worker/wal-r2.d.ts +271 -0
  757. package/dist/worker/wal-r2.d.ts.map +1 -0
  758. package/dist/worker/wal-r2.js +689 -0
  759. package/dist/worker/wal-r2.js.map +1 -0
  760. package/dist/worker/wal-replay.d.ts +361 -0
  761. package/dist/worker/wal-replay.d.ts.map +1 -0
  762. package/dist/worker/wal-replay.js +628 -0
  763. package/dist/worker/wal-replay.js.map +1 -0
  764. package/dist/worker/wal-retention.d.ts +389 -0
  765. package/dist/worker/wal-retention.d.ts.map +1 -0
  766. package/dist/worker/wal-retention.js +763 -0
  767. package/dist/worker/wal-retention.js.map +1 -0
  768. package/dist/worker/wal.d.ts +278 -0
  769. package/dist/worker/wal.d.ts.map +1 -0
  770. package/dist/worker/wal.js +467 -0
  771. package/dist/worker/wal.js.map +1 -0
  772. package/dist/worker/websocket.d.ts +85 -0
  773. package/dist/worker/websocket.d.ts.map +1 -0
  774. package/dist/worker/websocket.js +227 -0
  775. package/dist/worker/websocket.js.map +1 -0
  776. package/package.json +108 -0
  777. package/src/cdc/change-stream.ts +137 -0
  778. package/src/cdc/filter.ts +646 -0
  779. package/src/cdc/index.ts +112 -0
  780. package/src/cdc/resume-token.ts +280 -0
  781. package/src/cdc/transport/index.ts +7 -0
  782. package/src/cdc/transport/sse.ts +723 -0
  783. package/src/cdc/transport/websocket.ts +873 -0
  784. package/src/cdc/types.ts +346 -0
  785. package/src/config/index.ts +25 -0
  786. package/src/config/memory.ts +177 -0
  787. package/src/config/storage.ts +204 -0
  788. package/src/config/streaming.ts +147 -0
  789. package/src/config/timeouts.ts +221 -0
  790. package/src/extensions/config.test.ts +187 -0
  791. package/src/extensions/config.ts +278 -0
  792. package/src/extensions/geo.test.ts +455 -0
  793. package/src/extensions/geo.ts +858 -0
  794. package/src/extensions/index.test.ts +259 -0
  795. package/src/extensions/index.ts +227 -0
  796. package/src/extensions/loader.test.ts +555 -0
  797. package/src/extensions/loader.ts +588 -0
  798. package/src/extensions/pgmq-lite.test.ts +727 -0
  799. package/src/extensions/pgmq-lite.ts +770 -0
  800. package/src/extensions/plugins.test.ts +528 -0
  801. package/src/extensions/plugins.ts +718 -0
  802. package/src/extensions/registry.test.ts +202 -0
  803. package/src/extensions/registry.ts +267 -0
  804. package/src/extensions/vector.test.ts +195 -0
  805. package/src/extensions/vector.ts +217 -0
  806. package/src/iceberg/SCHEDULER.md +580 -0
  807. package/src/iceberg/analytics.test.ts +703 -0
  808. package/src/iceberg/analytics.ts +727 -0
  809. package/src/iceberg/catalog-api.test.ts +838 -0
  810. package/src/iceberg/catalog-api.ts +520 -0
  811. package/src/iceberg/catalog.test.ts +680 -0
  812. package/src/iceberg/catalog.ts +1007 -0
  813. package/src/iceberg/iceberg.test.ts +705 -0
  814. package/src/iceberg/index.ts +406 -0
  815. package/src/iceberg/metadata.test.ts +632 -0
  816. package/src/iceberg/metadata.ts +649 -0
  817. package/src/iceberg/optimizer.test.ts +868 -0
  818. package/src/iceberg/optimizer.ts +1287 -0
  819. package/src/iceberg/parquet.test.ts +899 -0
  820. package/src/iceberg/parquet.ts +1640 -0
  821. package/src/iceberg/r2-organization.test.ts +615 -0
  822. package/src/iceberg/r2-organization.ts +951 -0
  823. package/src/iceberg/scheduler-do-example.ts +364 -0
  824. package/src/iceberg/scheduler.test.ts +861 -0
  825. package/src/iceberg/scheduler.ts +1201 -0
  826. package/src/iceberg/schema.test.ts +547 -0
  827. package/src/iceberg/schema.ts +616 -0
  828. package/src/iceberg/snapshot-manager.test.ts +919 -0
  829. package/src/iceberg/snapshot-manager.ts +1369 -0
  830. package/src/iceberg/sql-router.test.ts +334 -0
  831. package/src/iceberg/sql-router.ts +337 -0
  832. package/src/iceberg/test-fixtures.ts +605 -0
  833. package/src/iceberg/time-travel-api.test.ts +1029 -0
  834. package/src/iceberg/time-travel-api.ts +731 -0
  835. package/src/iceberg/time-travel.test.ts +1218 -0
  836. package/src/iceberg/time-travel.ts +1052 -0
  837. package/src/iceberg/transformer.test.ts +689 -0
  838. package/src/iceberg/transformer.ts +1029 -0
  839. package/src/iceberg/types.ts +373 -0
  840. package/src/iceberg/writer.test.ts +716 -0
  841. package/src/iceberg/writer.ts +590 -0
  842. package/src/index.ts +212 -0
  843. package/src/lineage/index.ts +42 -0
  844. package/src/lineage/integration.ts +334 -0
  845. package/src/lineage/tracker.ts +1618 -0
  846. package/src/lineage/types.ts +354 -0
  847. package/src/middleware/index.ts +36 -0
  848. package/src/middleware/rate-limit-concurrent.test.ts +794 -0
  849. package/src/middleware/rate-limit.test.ts +1568 -0
  850. package/src/middleware/rate-limit.ts +840 -0
  851. package/src/migration-tooling/external-migration.test.ts +1864 -0
  852. package/src/migration-tooling/external-migration.ts +2355 -0
  853. package/src/migration-tooling/index.ts +19 -0
  854. package/src/migrations/ARCHITECTURE.md +474 -0
  855. package/src/migrations/PROGRESS_TRACKING.md +485 -0
  856. package/src/migrations/auto-migrator.test.ts +732 -0
  857. package/src/migrations/auto-migrator.ts +531 -0
  858. package/src/migrations/bulk-orchestrator.test.ts +801 -0
  859. package/src/migrations/bulk-orchestrator.ts +1039 -0
  860. package/src/migrations/compatibility.test.ts +958 -0
  861. package/src/migrations/compatibility.ts +902 -0
  862. package/src/migrations/do-migrations.test.ts +2620 -0
  863. package/src/migrations/do-migrations.ts +1289 -0
  864. package/src/migrations/do-migrations.types.ts +715 -0
  865. package/src/migrations/drizzle-compat.test.ts +210 -0
  866. package/src/migrations/drizzle-compat.ts +337 -0
  867. package/src/migrations/index.ts +334 -0
  868. package/src/migrations/migration-api.test.ts +438 -0
  869. package/src/migrations/migration-api.ts +704 -0
  870. package/src/migrations/progress-tracker-do.ts +518 -0
  871. package/src/migrations/progress-tracker-kv.ts +305 -0
  872. package/src/migrations/progress-tracker.test.ts +937 -0
  873. package/src/migrations/progress-tracker.ts +665 -0
  874. package/src/migrations/registry.test.ts +331 -0
  875. package/src/migrations/registry.ts +468 -0
  876. package/src/migrations/rollback.test.ts +644 -0
  877. package/src/migrations/runner.test.ts +807 -0
  878. package/src/migrations/runner.test.ts.backup +759 -0
  879. package/src/migrations/runner.ts +1459 -0
  880. package/src/migrations/schema-generator.test.ts +649 -0
  881. package/src/migrations/schema-generator.ts +513 -0
  882. package/src/migrations/testing.ts +1037 -0
  883. package/src/migrations/types.ts +573 -0
  884. package/src/migrations/validator.test.ts +660 -0
  885. package/src/migrations/validator.ts +741 -0
  886. package/src/observability/alerting.test.ts +1133 -0
  887. package/src/observability/alerting.ts +455 -0
  888. package/src/observability/analytics-engine.ts +733 -0
  889. package/src/observability/cost-metrics.ts +804 -0
  890. package/src/observability/cross-do-tracing.test.ts +516 -0
  891. package/src/observability/cross-do-tracing.ts +588 -0
  892. package/src/observability/dashboards/postgres-do-overview.json +1656 -0
  893. package/src/observability/error-rate-collector.test.ts +977 -0
  894. package/src/observability/error-rate-collector.ts +518 -0
  895. package/src/observability/exporters.test.ts +365 -0
  896. package/src/observability/exporters.ts +650 -0
  897. package/src/observability/health-check.test.ts +353 -0
  898. package/src/observability/health-check.ts +341 -0
  899. package/src/observability/index.test.ts +298 -0
  900. package/src/observability/index.ts +885 -0
  901. package/src/observability/instrumentation.test.ts +428 -0
  902. package/src/observability/instrumentation.ts +788 -0
  903. package/src/observability/memory-metrics.test.ts +355 -0
  904. package/src/observability/memory-metrics.ts +990 -0
  905. package/src/observability/metrics-endpoint.test.ts +402 -0
  906. package/src/observability/metrics-endpoint.ts +374 -0
  907. package/src/observability/metrics.test.ts +291 -0
  908. package/src/observability/metrics.ts +315 -0
  909. package/src/observability/observability-features.ts +1296 -0
  910. package/src/observability/prometheus.test.ts +292 -0
  911. package/src/observability/prometheus.ts +170 -0
  912. package/src/observability/propagation.test.ts +417 -0
  913. package/src/observability/propagation.ts +294 -0
  914. package/src/observability/query-latency.ts +586 -0
  915. package/src/observability/query-performance.test.ts +406 -0
  916. package/src/observability/query-performance.ts +491 -0
  917. package/src/observability/storage-tier-metrics.test.ts +633 -0
  918. package/src/observability/storage-tier-metrics.ts +570 -0
  919. package/src/observability/tier-cost-optimizer.ts +740 -0
  920. package/src/observability/tracer.test.ts +346 -0
  921. package/src/observability/tracer.ts +585 -0
  922. package/src/observability/types.test.ts +726 -0
  923. package/src/observability/types.ts +434 -0
  924. package/src/pglite/auto-demotion.test.ts +477 -0
  925. package/src/pglite/auto-demotion.ts +385 -0
  926. package/src/pglite/auto-promotion.test.ts +824 -0
  927. package/src/pglite/auto-promotion.ts +547 -0
  928. package/src/pglite/cache-layer.test.ts +469 -0
  929. package/src/pglite/cache-layer.ts +271 -0
  930. package/src/pglite/cold-start-manager.ts +1260 -0
  931. package/src/pglite/cold-start-optimizer.test.ts +937 -0
  932. package/src/pglite/cold-start-optimizer.ts +1895 -0
  933. package/src/pglite/dovfs-adapter.ts +1122 -0
  934. package/src/pglite/dovfs.ts +1258 -0
  935. package/src/pglite/etag-cache.test.ts +844 -0
  936. package/src/pglite/etag-cache.ts +526 -0
  937. package/src/pglite/index.ts +442 -0
  938. package/src/pglite/init.test.ts +455 -0
  939. package/src/pglite/init.ts +574 -0
  940. package/src/pglite/lifecycle.test.ts +599 -0
  941. package/src/pglite/lifecycle.ts +704 -0
  942. package/src/pglite/parallel-loader.test.ts +586 -0
  943. package/src/pglite/parallel-loader.ts +481 -0
  944. package/src/pglite/production-pglite.test.ts +666 -0
  945. package/src/pglite/production-pglite.ts +537 -0
  946. package/src/pglite/query-executor.ts +614 -0
  947. package/src/pglite/r2-layer.test.ts +501 -0
  948. package/src/pglite/r2-layer.ts +322 -0
  949. package/src/pglite/tiered-init.test.ts +725 -0
  950. package/src/pglite/tiered-init.ts +556 -0
  951. package/src/pglite/tiered-vfs.test.ts +726 -0
  952. package/src/pglite/tiered-vfs.ts +33 -0
  953. package/src/pglite/tiering-stats.test.ts +531 -0
  954. package/src/pglite/tiering-stats.ts +407 -0
  955. package/src/pglite/transaction-hooks.ts +343 -0
  956. package/src/pglite/warm-loader.test.ts +1701 -0
  957. package/src/pglite/warm-loader.ts +528 -0
  958. package/src/pglite/workers-pglite.ts +224 -0
  959. package/src/pglite-assets/pglite.data +0 -0
  960. package/src/pglite-assets/pglite.wasm +0 -0
  961. package/src/pglite.d.ts +47 -0
  962. package/src/playground/index.ts +137 -0
  963. package/src/playground/keyboard-shortcuts.ts +677 -0
  964. package/src/playground/playground.ts +323 -0
  965. package/src/playground/query-executor.ts +669 -0
  966. package/src/playground/query-history.ts +328 -0
  967. package/src/playground/result-formatter.ts +420 -0
  968. package/src/playground/sample-datasets.ts +674 -0
  969. package/src/playground/sample-queries.ts +1168 -0
  970. package/src/playground/schema-explorer.ts +558 -0
  971. package/src/playground/types.ts +518 -0
  972. package/src/readonly/cache-reader.test.ts +460 -0
  973. package/src/readonly/cache-reader.ts +313 -0
  974. package/src/readonly/config.test.ts +187 -0
  975. package/src/readonly/config.ts +128 -0
  976. package/src/readonly/index.ts +50 -0
  977. package/src/readonly/pglite-wrapper.test.ts +278 -0
  978. package/src/readonly/pglite-wrapper.ts +184 -0
  979. package/src/readonly/worker.test.ts +533 -0
  980. package/src/readonly/worker.ts +341 -0
  981. package/src/readonly/write-blocker.test.ts +459 -0
  982. package/src/readonly/write-blocker.ts +175 -0
  983. package/src/recovery/disaster-recovery.test.ts +618 -0
  984. package/src/recovery/disaster-recovery.ts +1181 -0
  985. package/src/recovery/index.ts +43 -0
  986. package/src/recovery/parquet-parser.ts +974 -0
  987. package/src/retention/index.ts +74 -0
  988. package/src/retention/policy.test.ts +571 -0
  989. package/src/retention/policy.ts +774 -0
  990. package/src/retention/purger.test.ts +465 -0
  991. package/src/retention/purger.ts +558 -0
  992. package/src/rls/auth-integration.test.ts +752 -0
  993. package/src/rls/auth-integration.ts +533 -0
  994. package/src/rls/generator.test.ts +829 -0
  995. package/src/rls/generator.ts +573 -0
  996. package/src/rls/index.ts +128 -0
  997. package/src/rls/policy.ts +208 -0
  998. package/src/rls/rls.test.ts +1071 -0
  999. package/src/rls/validator.test.ts +930 -0
  1000. package/src/rls/validator.ts +895 -0
  1001. package/src/routing/adaptive-router.test.ts +884 -0
  1002. package/src/routing/adaptive-router.ts +845 -0
  1003. package/src/routing/circuit-breaker.test.ts +1505 -0
  1004. package/src/routing/circuit-breaker.ts +852 -0
  1005. package/src/routing/cost-metrics.test.ts +565 -0
  1006. package/src/routing/cost-metrics.ts +408 -0
  1007. package/src/routing/do-connection-pool.test.ts +1109 -0
  1008. package/src/routing/do-connection-pool.ts +828 -0
  1009. package/src/routing/index.ts +158 -0
  1010. package/src/routing/query-complexity-estimator.test.ts +356 -0
  1011. package/src/routing/query-complexity-estimator.ts +444 -0
  1012. package/src/routing/request-coalescing.test.ts +738 -0
  1013. package/src/routing/request-coalescing.ts +475 -0
  1014. package/src/routing/runtime-router.test.ts +436 -0
  1015. package/src/routing/runtime-router.ts +357 -0
  1016. package/src/routing/tenant-router.test.ts +2493 -0
  1017. package/src/routing/tenant-router.ts +1908 -0
  1018. package/src/routing/websocket-pool.test.ts +551 -0
  1019. package/src/routing/websocket-pool.ts +577 -0
  1020. package/src/storage/access-pattern-tracker.test.ts +874 -0
  1021. package/src/storage/cache-layer.test.ts +560 -0
  1022. package/src/storage/cache-layer.ts +328 -0
  1023. package/src/storage/cost-aware-tiering.test.ts +652 -0
  1024. package/src/storage/cost-aware-tiering.ts +794 -0
  1025. package/src/storage/do-sqlite-blobs.test.ts +937 -0
  1026. package/src/storage/index.ts +272 -0
  1027. package/src/storage/interfaces.ts +974 -0
  1028. package/src/storage/r2-layer.test.ts +653 -0
  1029. package/src/storage/r2-layer.ts +434 -0
  1030. package/src/storage/r2-overflow.ts +920 -0
  1031. package/src/storage/r2-page-vfs.test.ts +2348 -0
  1032. package/src/storage/r2-page-vfs.ts +1054 -0
  1033. package/src/storage/swr-cache.test.ts +832 -0
  1034. package/src/storage/swr-cache.ts +398 -0
  1035. package/src/storage/swr-tiered-integration.test.ts +617 -0
  1036. package/src/storage/tiered-orchestrator.test.ts +2441 -0
  1037. package/src/storage/tiered-orchestrator.ts +2081 -0
  1038. package/src/storage/tiered-vfs-swr.test.ts +736 -0
  1039. package/src/storage/tiered-vfs-swr.ts +735 -0
  1040. package/src/storage/tiered-vfs.test.ts +793 -0
  1041. package/src/storage/tiered-vfs.ts +1082 -0
  1042. package/src/streaming/backpressure-controller.ts +452 -0
  1043. package/src/streaming/buffer-pool.ts +484 -0
  1044. package/src/streaming/cdc-iceberg-connector.ts +605 -0
  1045. package/src/streaming/index.ts +225 -0
  1046. package/src/streaming/live-cdc-stream.ts +985 -0
  1047. package/src/streaming/memory-bounded-stream.ts +443 -0
  1048. package/src/streaming/query-streamer.ts +662 -0
  1049. package/src/streaming/response-streaming.ts +557 -0
  1050. package/src/types/branded.ts +1075 -0
  1051. package/src/types/branded.ts.backup +273 -0
  1052. package/src/types/utilities.ts +1023 -0
  1053. package/src/types/wasm.d.ts +30 -0
  1054. package/src/validation/typed-errors.test.ts +420 -0
  1055. package/src/wal/replay-engine.ts +1264 -0
  1056. package/src/worker/__mocks__/capnweb.ts +15 -0
  1057. package/src/worker/__mocks__/pglite.data.ts +22 -0
  1058. package/src/worker/__mocks__/pglite.wasm.ts +33 -0
  1059. package/src/worker/auth-rate-limiter.test.ts +272 -0
  1060. package/src/worker/auth-rate-limiter.ts +448 -0
  1061. package/src/worker/auth.security-red.test.ts +1236 -0
  1062. package/src/worker/auth.security.test.ts +822 -0
  1063. package/src/worker/auth.test.ts +469 -0
  1064. package/src/worker/auth.ts +1104 -0
  1065. package/src/worker/cdc-backpressure.test.ts +726 -0
  1066. package/src/worker/cdc-backpressure.ts +866 -0
  1067. package/src/worker/cdc-sse.test.ts +780 -0
  1068. package/src/worker/cdc-sse.ts +728 -0
  1069. package/src/worker/cdc-websocket.ts +1229 -0
  1070. package/src/worker/cdc-ws.test.ts +1009 -0
  1071. package/src/worker/cdc.test.ts +327 -0
  1072. package/src/worker/cdc.ts +289 -0
  1073. package/src/worker/concerns/auth-concern.ts +179 -0
  1074. package/src/worker/concerns/cdc-concern.ts +247 -0
  1075. package/src/worker/concerns/index.ts +58 -0
  1076. package/src/worker/concerns/query-execution-concern.ts +194 -0
  1077. package/src/worker/concerns/storage-orchestration-concern.ts +373 -0
  1078. package/src/worker/discriminated-types.test.ts +280 -0
  1079. package/src/worker/do-auth-manager.ts +257 -0
  1080. package/src/worker/do-decomposition.test.ts +1236 -0
  1081. package/src/worker/do-pglite-manager.ts +302 -0
  1082. package/src/worker/do.test.ts +2254 -0
  1083. package/src/worker/do.ts +1878 -0
  1084. package/src/worker/entry.ts +417 -0
  1085. package/src/worker/errors.ts +285 -0
  1086. package/src/worker/health-check-manager.test.ts +261 -0
  1087. package/src/worker/health-check-manager.ts +231 -0
  1088. package/src/worker/index.ts +389 -0
  1089. package/src/worker/memory-pressure.test.ts +1460 -0
  1090. package/src/worker/memory-pressure.ts +2650 -0
  1091. package/src/worker/migration-manager.ts +582 -0
  1092. package/src/worker/neon-compat.test.ts +332 -0
  1093. package/src/worker/plugin-manager.ts +485 -0
  1094. package/src/worker/postgres.do-rpc.d.ts +76 -0
  1095. package/src/worker/proxy.ts +694 -0
  1096. package/src/worker/query-execution-manager.test.ts +303 -0
  1097. package/src/worker/query-execution-manager.ts +219 -0
  1098. package/src/worker/query-executor.test.ts +282 -0
  1099. package/src/worker/query-executor.ts +560 -0
  1100. package/src/worker/query-stats-manager.ts +229 -0
  1101. package/src/worker/result-handler.test.ts +364 -0
  1102. package/src/worker/result-handler.ts +510 -0
  1103. package/src/worker/routes.test.ts +795 -0
  1104. package/src/worker/routes.ts +650 -0
  1105. package/src/worker/rpc-methods-manager.test.ts +326 -0
  1106. package/src/worker/rpc-methods-manager.ts +276 -0
  1107. package/src/worker/rpc.ts +524 -0
  1108. package/src/worker/schema-version.ts +605 -0
  1109. package/src/worker/session-manager.test.ts +506 -0
  1110. package/src/worker/session-manager.ts +732 -0
  1111. package/src/worker/shutdown-manager.ts +469 -0
  1112. package/src/worker/sql-transform.test.ts +286 -0
  1113. package/src/worker/sql-transform.ts +368 -0
  1114. package/src/worker/supabase-compat.test.ts +621 -0
  1115. package/src/worker/types.test.ts +292 -0
  1116. package/src/worker/types.ts +873 -0
  1117. package/src/worker/user-routes.test.ts +703 -0
  1118. package/src/worker/user-routes.ts +303 -0
  1119. package/src/worker/wal-facade.ts +235 -0
  1120. package/src/worker/wal-r2.test.ts +570 -0
  1121. package/src/worker/wal-r2.ts +930 -0
  1122. package/src/worker/wal-replay.test.ts +845 -0
  1123. package/src/worker/wal-replay.ts +897 -0
  1124. package/src/worker/wal-retention.test.ts +758 -0
  1125. package/src/worker/wal-retention.ts +1075 -0
  1126. package/src/worker/wal.test.ts +618 -0
  1127. package/src/worker/wal.ts +697 -0
  1128. package/src/worker/websocket.test.ts +296 -0
  1129. package/src/worker/websocket.ts +284 -0
@@ -0,0 +1,1109 @@
1
+ /**
2
+ * Tests for DO Connection Pool
3
+ *
4
+ * Task: postgres-zjj
5
+ *
6
+ * Tests cover:
7
+ * - Basic pool operations (acquire, release, destroy)
8
+ * - Connection reuse
9
+ * - Max pool size enforcement
10
+ * - Idle connection timeout
11
+ * - Health checking
12
+ * - Fair queuing when pool exhausted
13
+ * - High-concurrency scenarios
14
+ * - Pool metrics
15
+ */
16
+
17
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
18
+ import {
19
+ DOConnectionPool,
20
+ DOPoolConfig,
21
+ DOPoolMetrics,
22
+ PoolableConnection,
23
+ ConnectionFactory,
24
+ HealthChecker,
25
+ } from './do-connection-pool'
26
+
27
+ // Mock connection implementation
28
+ class MockConnection implements PoolableConnection {
29
+ readonly id: string
30
+ private lastActivity: number
31
+ private _healthy = true
32
+ private _closed = false
33
+ public closeDelay = 0
34
+
35
+ constructor(id: string) {
36
+ this.id = id
37
+ this.lastActivity = Date.now()
38
+ }
39
+
40
+ isHealthy(): boolean {
41
+ return this._healthy && !this._closed
42
+ }
43
+
44
+ async close(): Promise<void> {
45
+ if (this.closeDelay > 0) {
46
+ await new Promise(resolve => setTimeout(resolve, this.closeDelay))
47
+ }
48
+ this._closed = true
49
+ }
50
+
51
+ getLastActivity(): number {
52
+ return this.lastActivity
53
+ }
54
+
55
+ touch(): void {
56
+ this.lastActivity = Date.now()
57
+ }
58
+
59
+ markUnhealthy(): void {
60
+ this._healthy = false
61
+ }
62
+
63
+ markHealthy(): void {
64
+ this._healthy = true
65
+ }
66
+
67
+ get isClosed(): boolean {
68
+ return this._closed
69
+ }
70
+ }
71
+
72
+ // Factory helper
73
+ let connectionIdCounter = 0
74
+
75
+ function createMockFactory(delay = 0): ConnectionFactory<MockConnection> {
76
+ return async () => {
77
+ if (delay > 0) {
78
+ await new Promise(resolve => setTimeout(resolve, delay))
79
+ }
80
+ return new MockConnection(`mock-${++connectionIdCounter}`)
81
+ }
82
+ }
83
+
84
+ function createFailingFactory(failCount: number): ConnectionFactory<MockConnection> {
85
+ let failures = 0
86
+ return async () => {
87
+ if (failures < failCount) {
88
+ failures++
89
+ throw new Error('Connection failed')
90
+ }
91
+ return new MockConnection(`mock-${++connectionIdCounter}`)
92
+ }
93
+ }
94
+
95
+ describe('DOConnectionPool', () => {
96
+ beforeEach(() => {
97
+ connectionIdCounter = 0
98
+ vi.useFakeTimers()
99
+ })
100
+
101
+ afterEach(() => {
102
+ vi.useRealTimers()
103
+ })
104
+
105
+ describe('basic operations', () => {
106
+ it('should acquire a connection when pool is empty', async () => {
107
+ const pool = new DOConnectionPool({
108
+ factory: createMockFactory(),
109
+ maxSize: 5,
110
+ })
111
+
112
+ const conn = await pool.acquire()
113
+
114
+ expect(conn).toBeDefined()
115
+ expect(conn.id).toBe('mock-1')
116
+ expect(pool.size).toBe(1)
117
+
118
+ await pool.close()
119
+ })
120
+
121
+ it('should release connection back to pool', async () => {
122
+ const pool = new DOConnectionPool({
123
+ factory: createMockFactory(),
124
+ maxSize: 5,
125
+ })
126
+
127
+ const conn = await pool.acquire()
128
+ await pool.release(conn)
129
+
130
+ expect(pool.size).toBe(1)
131
+ expect(pool.availableCount).toBe(1)
132
+
133
+ await pool.close()
134
+ })
135
+
136
+ it('should destroy connection without returning to pool', async () => {
137
+ const pool = new DOConnectionPool({
138
+ factory: createMockFactory(),
139
+ maxSize: 5,
140
+ })
141
+
142
+ const conn = await pool.acquire()
143
+ await pool.destroy(conn)
144
+
145
+ expect(pool.size).toBe(0)
146
+ expect(pool.availableCount).toBe(0)
147
+ expect(conn.isClosed).toBe(true)
148
+
149
+ await pool.close()
150
+ })
151
+
152
+ it('should throw when acquiring from closed pool', async () => {
153
+ const pool = new DOConnectionPool({
154
+ factory: createMockFactory(),
155
+ maxSize: 5,
156
+ })
157
+
158
+ await pool.close()
159
+
160
+ await expect(pool.acquire()).rejects.toThrow('Pool is closed')
161
+ })
162
+ })
163
+
164
+ describe('connection reuse', () => {
165
+ it('should reuse released connections', async () => {
166
+ vi.useRealTimers()
167
+
168
+ const pool = new DOConnectionPool({
169
+ factory: createMockFactory(),
170
+ maxSize: 5,
171
+ enableHealthCheck: false,
172
+ })
173
+
174
+ const conn1 = await pool.acquire()
175
+ const conn1Id = conn1.id
176
+ await pool.release(conn1)
177
+
178
+ const conn2 = await pool.acquire()
179
+
180
+ expect(conn2.id).toBe(conn1Id)
181
+ expect(pool.size).toBe(1)
182
+
183
+ await pool.close()
184
+ })
185
+
186
+ it('should create new connection when no idle available', async () => {
187
+ const pool = new DOConnectionPool({
188
+ factory: createMockFactory(),
189
+ maxSize: 5,
190
+ })
191
+
192
+ const conn1 = await pool.acquire()
193
+ const conn2 = await pool.acquire()
194
+
195
+ expect(conn1.id).not.toBe(conn2.id)
196
+ expect(pool.size).toBe(2)
197
+
198
+ await pool.close()
199
+ })
200
+
201
+ it('should track connection use count', async () => {
202
+ vi.useRealTimers()
203
+
204
+ const pool = new DOConnectionPool({
205
+ factory: createMockFactory(),
206
+ maxSize: 5,
207
+ enableHealthCheck: false,
208
+ })
209
+
210
+ const conn1 = await pool.acquire()
211
+ await pool.release(conn1)
212
+
213
+ const conn2 = await pool.acquire()
214
+ await pool.release(conn2)
215
+
216
+ const stats = pool.getConnectionStats()
217
+ expect(stats[0].useCount).toBe(2)
218
+
219
+ await pool.close()
220
+ })
221
+ })
222
+
223
+ describe('max pool size', () => {
224
+ it('should respect max pool size', async () => {
225
+ const pool = new DOConnectionPool({
226
+ factory: createMockFactory(),
227
+ maxSize: 2,
228
+ fairQueue: false,
229
+ })
230
+
231
+ const conn1 = await pool.acquire()
232
+ const conn2 = await pool.acquire()
233
+
234
+ await expect(pool.acquire()).rejects.toThrow('Pool exhausted')
235
+
236
+ await pool.close()
237
+ })
238
+
239
+ it('should queue requests when pool exhausted with fairQueue enabled', async () => {
240
+ vi.useRealTimers()
241
+
242
+ const pool = new DOConnectionPool({
243
+ factory: createMockFactory(),
244
+ maxSize: 1,
245
+ fairQueue: true,
246
+ acquireTimeoutMs: 5000,
247
+ })
248
+
249
+ const conn1 = await pool.acquire()
250
+
251
+ // Start acquiring second connection (should queue)
252
+ const conn2Promise = pool.acquire()
253
+
254
+ // Release first connection after delay
255
+ setTimeout(async () => {
256
+ await pool.release(conn1)
257
+ }, 50)
258
+
259
+ const conn2 = await conn2Promise
260
+
261
+ expect(conn2.id).toBe(conn1.id)
262
+
263
+ await pool.close()
264
+ })
265
+
266
+ it('should timeout when queue wait exceeds timeout', async () => {
267
+ vi.useRealTimers()
268
+
269
+ const pool = new DOConnectionPool({
270
+ factory: createMockFactory(),
271
+ maxSize: 1,
272
+ fairQueue: true,
273
+ acquireTimeoutMs: 50,
274
+ })
275
+
276
+ await pool.acquire()
277
+
278
+ await expect(pool.acquire()).rejects.toThrow('Acquire timeout')
279
+
280
+ await pool.close()
281
+ })
282
+
283
+ it('should enforce max queue size', async () => {
284
+ const pool = new DOConnectionPool({
285
+ factory: createMockFactory(),
286
+ maxSize: 1,
287
+ fairQueue: true,
288
+ maxQueueSize: 1,
289
+ acquireTimeoutMs: 5000,
290
+ })
291
+
292
+ await pool.acquire()
293
+ pool.acquire().catch(() => {}) // First queued request
294
+
295
+ await expect(pool.acquire()).rejects.toThrow('max queue size reached')
296
+
297
+ await pool.close()
298
+ })
299
+ })
300
+
301
+ describe('idle connection timeout', () => {
302
+ it('should close idle connections after timeout', async () => {
303
+ const pool = new DOConnectionPool({
304
+ factory: createMockFactory(),
305
+ maxSize: 5,
306
+ idleTimeoutMs: 100,
307
+ minSize: 0,
308
+ enableHealthCheck: false, // Disable to avoid infinite interval loops
309
+ })
310
+
311
+ const conn = await pool.acquire()
312
+ await pool.release(conn)
313
+
314
+ expect(pool.size).toBe(1)
315
+
316
+ // Fast-forward past idle timeout using async version for single advance
317
+ await vi.advanceTimersByTimeAsync(150)
318
+
319
+ expect(pool.size).toBe(0)
320
+
321
+ await pool.close()
322
+ })
323
+
324
+ it('should not close connections below minSize', async () => {
325
+ vi.useRealTimers()
326
+
327
+ const pool = new DOConnectionPool({
328
+ factory: createMockFactory(),
329
+ maxSize: 5,
330
+ minSize: 1,
331
+ idleTimeoutMs: 50,
332
+ enableHealthCheck: false, // Disable to avoid interval loops
333
+ })
334
+
335
+ const conn = await pool.acquire()
336
+ await pool.release(conn)
337
+
338
+ // Wait for idle timeout to pass
339
+ await new Promise(resolve => setTimeout(resolve, 100))
340
+
341
+ // Connection should still exist due to minSize
342
+ expect(pool.size).toBe(1)
343
+
344
+ await pool.close()
345
+ })
346
+ })
347
+
348
+ describe('health checking', () => {
349
+ it('should reject unhealthy connections on acquire', async () => {
350
+ vi.useRealTimers()
351
+
352
+ const pool = new DOConnectionPool({
353
+ factory: createMockFactory(),
354
+ maxSize: 5,
355
+ enableHealthCheck: true,
356
+ })
357
+
358
+ const conn1 = await pool.acquire()
359
+ conn1.markUnhealthy()
360
+ await pool.release(conn1)
361
+
362
+ // Next acquire should get a new connection (old one is unhealthy)
363
+ const conn2 = await pool.acquire()
364
+ expect(conn2.id).not.toBe(conn1.id)
365
+
366
+ await pool.close()
367
+ })
368
+
369
+ it('should run periodic health checks', async () => {
370
+ vi.useRealTimers()
371
+
372
+ const healthChecker = vi.fn().mockResolvedValue(true)
373
+
374
+ const pool = new DOConnectionPool({
375
+ factory: createMockFactory(),
376
+ maxSize: 5,
377
+ enableHealthCheck: true,
378
+ healthCheckIntervalMs: 50,
379
+ healthChecker,
380
+ })
381
+
382
+ const conn = await pool.acquire()
383
+ await pool.release(conn)
384
+
385
+ // Wait for health check interval to fire
386
+ await new Promise(resolve => setTimeout(resolve, 100))
387
+
388
+ expect(healthChecker).toHaveBeenCalled()
389
+
390
+ await pool.close()
391
+ })
392
+
393
+ it('should remove connections that fail health check', async () => {
394
+ vi.useRealTimers()
395
+
396
+ let healthCheckCount = 0
397
+ const healthChecker: HealthChecker<MockConnection> = async () => {
398
+ healthCheckCount++
399
+ return healthCheckCount === 1 // Pass first, fail second
400
+ }
401
+
402
+ const pool = new DOConnectionPool({
403
+ factory: createMockFactory(),
404
+ maxSize: 5,
405
+ enableHealthCheck: true,
406
+ healthCheckIntervalMs: 50,
407
+ healthChecker,
408
+ minSize: 0,
409
+ })
410
+
411
+ const conn = await pool.acquire()
412
+ await pool.release(conn)
413
+
414
+ expect(pool.size).toBe(1)
415
+
416
+ // Wait for first health check (should pass)
417
+ await new Promise(resolve => setTimeout(resolve, 75))
418
+
419
+ expect(pool.size).toBe(1)
420
+
421
+ // Wait for second health check (should fail)
422
+ await new Promise(resolve => setTimeout(resolve, 75))
423
+
424
+ expect(pool.size).toBe(0)
425
+
426
+ await pool.close()
427
+ })
428
+
429
+ it('should use custom health checker', async () => {
430
+ vi.useRealTimers()
431
+
432
+ const customChecker = vi.fn().mockResolvedValue(true)
433
+
434
+ const pool = new DOConnectionPool({
435
+ factory: createMockFactory(),
436
+ maxSize: 5,
437
+ enableHealthCheck: true,
438
+ healthChecker: customChecker,
439
+ healthCheckIntervalMs: 50,
440
+ })
441
+
442
+ const conn = await pool.acquire()
443
+ await pool.release(conn)
444
+
445
+ // Wait for health check interval to fire
446
+ await new Promise(resolve => setTimeout(resolve, 100))
447
+
448
+ expect(customChecker).toHaveBeenCalledWith(conn)
449
+
450
+ await pool.close()
451
+ })
452
+ })
453
+
454
+ describe('fair queuing', () => {
455
+ it('should process queued requests in FIFO order', async () => {
456
+ vi.useRealTimers()
457
+
458
+ const pool = new DOConnectionPool({
459
+ factory: createMockFactory(),
460
+ maxSize: 1,
461
+ fairQueue: true,
462
+ acquireTimeoutMs: 5000,
463
+ enableHealthCheck: false, // Disable to avoid interval issues
464
+ })
465
+
466
+ const conn1 = await pool.acquire()
467
+
468
+ const order: number[] = []
469
+ const connections: MockConnection[] = []
470
+
471
+ // Queue multiple requests - store connections so we can release them
472
+ const p1 = pool.acquire().then(c => { order.push(1); connections.push(c); return c })
473
+ const p2 = pool.acquire().then(c => { order.push(2); connections.push(c); return c })
474
+ const p3 = pool.acquire().then(c => { order.push(3); connections.push(c); return c })
475
+
476
+ // Give time for requests to queue
477
+ await new Promise(resolve => setTimeout(resolve, 10))
478
+
479
+ // Release initial connection - this triggers p1
480
+ await pool.release(conn1)
481
+ await p1
482
+
483
+ // Release for p2
484
+ if (connections.length > 0) {
485
+ await pool.release(connections[0])
486
+ await p2
487
+ }
488
+
489
+ // Release for p3
490
+ if (connections.length > 1) {
491
+ await pool.release(connections[1])
492
+ await p3
493
+ }
494
+
495
+ // Requests should be processed in FIFO order
496
+ expect(order).toEqual([1, 2, 3])
497
+
498
+ await pool.close()
499
+ })
500
+
501
+ it('should handle release to waiting request directly', async () => {
502
+ vi.useRealTimers()
503
+
504
+ const pool = new DOConnectionPool({
505
+ factory: createMockFactory(),
506
+ maxSize: 1,
507
+ fairQueue: true,
508
+ acquireTimeoutMs: 5000,
509
+ enableHealthCheck: false, // Disable to avoid background interval issues
510
+ })
511
+
512
+ const conn1 = await pool.acquire()
513
+
514
+ // Start waiting for second connection (don't await yet)
515
+ const conn2Promise = pool.acquire()
516
+
517
+ // Give microtask queue time to process
518
+ await new Promise(resolve => setTimeout(resolve, 10))
519
+
520
+ // Release should go directly to waiting request
521
+ await pool.release(conn1)
522
+
523
+ const conn2 = await conn2Promise
524
+
525
+ expect(conn2.id).toBe(conn1.id)
526
+ expect(pool.queueLength).toBe(0)
527
+
528
+ await pool.close()
529
+ })
530
+ })
531
+
532
+ describe('high concurrency', () => {
533
+ it('should handle many concurrent acquire requests', async () => {
534
+ vi.useRealTimers()
535
+
536
+ const pool = new DOConnectionPool({
537
+ factory: createMockFactory(5), // 5ms delay for each connection
538
+ maxSize: 10,
539
+ fairQueue: true,
540
+ acquireTimeoutMs: 10000,
541
+ })
542
+
543
+ // Acquire 10 connections concurrently
544
+ const promises = Array(10).fill(null).map(() => pool.acquire())
545
+ const connections = await Promise.all(promises)
546
+
547
+ expect(connections).toHaveLength(10)
548
+ expect(pool.size).toBe(10)
549
+
550
+ // All connections should be unique
551
+ const ids = new Set(connections.map(c => c.id))
552
+ expect(ids.size).toBe(10)
553
+
554
+ await pool.close()
555
+ })
556
+
557
+ it('should handle concurrent acquire and release', async () => {
558
+ vi.useRealTimers()
559
+
560
+ const pool = new DOConnectionPool({
561
+ factory: createMockFactory(),
562
+ maxSize: 5,
563
+ fairQueue: true,
564
+ acquireTimeoutMs: 5000,
565
+ enableHealthCheck: false,
566
+ })
567
+
568
+ // Simulate high-concurrency scenario
569
+ const operations: Promise<void>[] = []
570
+
571
+ for (let i = 0; i < 50; i++) {
572
+ operations.push((async () => {
573
+ const conn = await pool.acquire()
574
+ // Simulate some work
575
+ await new Promise(resolve => setTimeout(resolve, Math.random() * 10))
576
+ await pool.release(conn)
577
+ })())
578
+ }
579
+
580
+ await Promise.all(operations)
581
+
582
+ const metrics = pool.getMetrics()
583
+ expect(metrics.totalAcquisitions).toBe(50)
584
+ expect(metrics.totalReleases).toBe(50)
585
+
586
+ await pool.close()
587
+ })
588
+
589
+ it('should handle acquire timeout under load', async () => {
590
+ vi.useRealTimers()
591
+
592
+ const pool = new DOConnectionPool({
593
+ factory: createMockFactory(100), // Slow connection creation
594
+ maxSize: 2,
595
+ fairQueue: true,
596
+ acquireTimeoutMs: 50,
597
+ })
598
+
599
+ // Fill the pool
600
+ const conn1 = await pool.acquire()
601
+ const conn2 = await pool.acquire()
602
+
603
+ // Next acquire should timeout
604
+ const startTime = Date.now()
605
+ await expect(pool.acquire()).rejects.toThrow('timeout')
606
+ const elapsed = Date.now() - startTime
607
+
608
+ expect(elapsed).toBeGreaterThanOrEqual(40) // Allow some tolerance
609
+ expect(elapsed).toBeLessThan(150)
610
+
611
+ await pool.close()
612
+ })
613
+
614
+ it('should track timeout metrics', async () => {
615
+ vi.useRealTimers()
616
+
617
+ const pool = new DOConnectionPool({
618
+ factory: createMockFactory(),
619
+ maxSize: 1,
620
+ fairQueue: true,
621
+ acquireTimeoutMs: 20,
622
+ })
623
+
624
+ await pool.acquire()
625
+
626
+ // Try to acquire more (should timeout)
627
+ const promises = [
628
+ pool.acquire().catch(() => {}),
629
+ pool.acquire().catch(() => {}),
630
+ ]
631
+
632
+ await Promise.all(promises)
633
+
634
+ const metrics = pool.getMetrics()
635
+ expect(metrics.totalTimeouts).toBe(2)
636
+
637
+ await pool.close()
638
+ })
639
+ })
640
+
641
+ describe('pool metrics', () => {
642
+ it('should track basic metrics', async () => {
643
+ vi.useRealTimers()
644
+
645
+ const pool = new DOConnectionPool({
646
+ factory: createMockFactory(),
647
+ maxSize: 5,
648
+ enableHealthCheck: false,
649
+ })
650
+
651
+ const conn1 = await pool.acquire()
652
+ const conn2 = await pool.acquire()
653
+ await pool.release(conn1)
654
+
655
+ const metrics = pool.getMetrics()
656
+
657
+ expect(metrics.totalCreated).toBe(2)
658
+ expect(metrics.currentSize).toBe(2)
659
+ expect(metrics.inUse).toBe(1)
660
+ expect(metrics.available).toBe(1)
661
+ expect(metrics.totalAcquisitions).toBe(2)
662
+ expect(metrics.totalReleases).toBe(1)
663
+
664
+ await pool.close()
665
+ })
666
+
667
+ it('should calculate utilization percentage', async () => {
668
+ const pool = new DOConnectionPool({
669
+ factory: createMockFactory(),
670
+ maxSize: 5,
671
+ })
672
+
673
+ const conn1 = await pool.acquire()
674
+ const conn2 = await pool.acquire()
675
+
676
+ let metrics = pool.getMetrics()
677
+ expect(metrics.utilizationPercent).toBe(100) // 2/2 = 100%
678
+
679
+ await pool.release(conn1)
680
+
681
+ metrics = pool.getMetrics()
682
+ expect(metrics.utilizationPercent).toBe(50) // 1/2 = 50%
683
+
684
+ await pool.close()
685
+ })
686
+
687
+ it('should track wait times', async () => {
688
+ vi.useRealTimers()
689
+
690
+ const pool = new DOConnectionPool({
691
+ factory: createMockFactory(50), // 50ms delay
692
+ maxSize: 5,
693
+ })
694
+
695
+ await pool.acquire()
696
+ await pool.acquire()
697
+
698
+ const metrics = pool.getMetrics()
699
+ expect(metrics.avgWaitTimeMs).toBeGreaterThan(0)
700
+
701
+ await pool.close()
702
+ })
703
+
704
+ it('should track health check metrics', async () => {
705
+ vi.useRealTimers()
706
+
707
+ const healthChecker = vi.fn()
708
+ .mockResolvedValueOnce(true)
709
+ .mockResolvedValueOnce(false)
710
+
711
+ const pool = new DOConnectionPool({
712
+ factory: createMockFactory(),
713
+ maxSize: 5,
714
+ enableHealthCheck: true,
715
+ healthCheckIntervalMs: 30,
716
+ healthChecker,
717
+ minSize: 0,
718
+ })
719
+
720
+ const conn = await pool.acquire()
721
+ await pool.release(conn)
722
+
723
+ // Wait for health checks to run
724
+ await new Promise(resolve => setTimeout(resolve, 50))
725
+ await new Promise(resolve => setTimeout(resolve, 50))
726
+
727
+ const metrics = pool.getMetrics()
728
+ expect(metrics.totalHealthChecks).toBeGreaterThanOrEqual(1)
729
+ expect(metrics.totalHealthCheckFailures).toBeGreaterThanOrEqual(1)
730
+
731
+ await pool.close()
732
+ })
733
+
734
+ it('should track queue length', async () => {
735
+ vi.useRealTimers()
736
+
737
+ const pool = new DOConnectionPool({
738
+ factory: createMockFactory(),
739
+ maxSize: 1,
740
+ fairQueue: true,
741
+ acquireTimeoutMs: 5000,
742
+ })
743
+
744
+ await pool.acquire()
745
+
746
+ // Queue some requests
747
+ pool.acquire().catch(() => {})
748
+ pool.acquire().catch(() => {})
749
+
750
+ // Allow microtask queue to process
751
+ await new Promise(resolve => setTimeout(resolve, 0))
752
+
753
+ const metrics = pool.getMetrics()
754
+ expect(metrics.queueLength).toBe(2)
755
+ expect(metrics.pendingRequests).toBe(2)
756
+
757
+ await pool.close()
758
+ })
759
+ })
760
+
761
+ describe('connection stats', () => {
762
+ it('should provide per-connection statistics', async () => {
763
+ vi.useRealTimers()
764
+
765
+ const pool = new DOConnectionPool({
766
+ factory: createMockFactory(),
767
+ maxSize: 5,
768
+ enableHealthCheck: false,
769
+ })
770
+
771
+ const conn = await pool.acquire()
772
+ await pool.release(conn)
773
+ await pool.acquire()
774
+
775
+ const stats = pool.getConnectionStats()
776
+
777
+ expect(stats).toHaveLength(1)
778
+ expect(stats[0].id).toBe(conn.id)
779
+ expect(stats[0].useCount).toBe(2)
780
+ expect(stats[0].createdAt).toBeDefined()
781
+ expect(stats[0].lastUsedAt).toBeDefined()
782
+
783
+ await pool.close()
784
+ })
785
+ })
786
+
787
+ describe('minimum pool size', () => {
788
+ it('should maintain minimum connections after destroy', async () => {
789
+ vi.useRealTimers()
790
+
791
+ const pool = new DOConnectionPool({
792
+ factory: createMockFactory(),
793
+ maxSize: 5,
794
+ minSize: 2,
795
+ warmOnStart: true,
796
+ warmCount: 2,
797
+ enableHealthCheck: false, // Disable to avoid interval issues
798
+ })
799
+
800
+ // Initialize with min size
801
+ await pool.initialize()
802
+
803
+ expect(pool.size).toBeGreaterThanOrEqual(2)
804
+
805
+ // Destroy a connection
806
+ const conn = await pool.acquire()
807
+ await pool.destroy(conn)
808
+
809
+ // Should create new connection to maintain min size (ensureMinSize is called in destroy)
810
+ // Give async operations time to complete
811
+ await new Promise(resolve => setTimeout(resolve, 50))
812
+
813
+ expect(pool.size).toBeGreaterThanOrEqual(1)
814
+
815
+ await pool.close()
816
+ })
817
+ })
818
+
819
+ describe('warm start', () => {
820
+ it('should warm connections on initialize', async () => {
821
+ const pool = new DOConnectionPool({
822
+ factory: createMockFactory(),
823
+ maxSize: 10,
824
+ warmOnStart: true,
825
+ warmCount: 3,
826
+ })
827
+
828
+ await pool.initialize()
829
+
830
+ expect(pool.size).toBe(3)
831
+ expect(pool.availableCount).toBe(3)
832
+
833
+ await pool.close()
834
+ })
835
+
836
+ it('should respect maxSize during warm start', async () => {
837
+ const pool = new DOConnectionPool({
838
+ factory: createMockFactory(),
839
+ maxSize: 2,
840
+ warmOnStart: true,
841
+ warmCount: 5,
842
+ })
843
+
844
+ await pool.initialize()
845
+
846
+ expect(pool.size).toBe(2)
847
+
848
+ await pool.close()
849
+ })
850
+
851
+ it('should handle warm start failures gracefully', async () => {
852
+ const pool = new DOConnectionPool({
853
+ factory: createFailingFactory(2),
854
+ maxSize: 5,
855
+ warmOnStart: true,
856
+ warmCount: 3,
857
+ })
858
+
859
+ // Should not throw
860
+ await pool.initialize()
861
+
862
+ // Only 1 connection should have succeeded
863
+ expect(pool.size).toBe(1)
864
+
865
+ await pool.close()
866
+ })
867
+ })
868
+
869
+ describe('auto scaling', () => {
870
+ it('should scale up when utilization exceeds threshold', async () => {
871
+ vi.useRealTimers()
872
+
873
+ const pool = new DOConnectionPool({
874
+ factory: createMockFactory(),
875
+ maxSize: 10,
876
+ minSize: 1,
877
+ autoScale: true,
878
+ scaleUpThreshold: 0.5,
879
+ healthCheckIntervalMs: 50,
880
+ warmOnStart: true,
881
+ warmCount: 1,
882
+ })
883
+
884
+ // Start with one connection
885
+ await pool.initialize()
886
+ const conn = await pool.acquire()
887
+
888
+ // Utilization is now 100%, above threshold
889
+ // Wait for auto-scale check interval to fire
890
+ await new Promise(resolve => setTimeout(resolve, 100))
891
+
892
+ // Should have scaled up
893
+ expect(pool.size).toBeGreaterThanOrEqual(1)
894
+
895
+ await pool.close()
896
+ })
897
+ })
898
+
899
+ describe('pool closure', () => {
900
+ it('should reject pending requests on close', async () => {
901
+ vi.useRealTimers()
902
+
903
+ const pool = new DOConnectionPool({
904
+ factory: createMockFactory(),
905
+ maxSize: 1,
906
+ fairQueue: true,
907
+ acquireTimeoutMs: 5000,
908
+ enableHealthCheck: false, // Disable to avoid interval issues
909
+ })
910
+
911
+ await pool.acquire()
912
+
913
+ const pendingPromise = pool.acquire()
914
+
915
+ // Give time for the request to be queued
916
+ await new Promise(resolve => setTimeout(resolve, 10))
917
+
918
+ await pool.close()
919
+
920
+ await expect(pendingPromise).rejects.toThrow('Pool closed')
921
+ })
922
+
923
+ it('should close all connections on pool close', async () => {
924
+ const pool = new DOConnectionPool({
925
+ factory: createMockFactory(),
926
+ maxSize: 5,
927
+ })
928
+
929
+ const connections = await Promise.all([
930
+ pool.acquire(),
931
+ pool.acquire(),
932
+ pool.acquire(),
933
+ ])
934
+
935
+ await pool.close()
936
+
937
+ for (const conn of connections) {
938
+ expect(conn.isClosed).toBe(true)
939
+ }
940
+ })
941
+
942
+ it('should release connection to closed pool gracefully', async () => {
943
+ const pool = new DOConnectionPool({
944
+ factory: createMockFactory(),
945
+ maxSize: 5,
946
+ })
947
+
948
+ const conn = await pool.acquire()
949
+ await pool.close()
950
+
951
+ // Should not throw
952
+ await pool.release(conn)
953
+ expect(conn.isClosed).toBe(true)
954
+ })
955
+ })
956
+
957
+ describe('error handling', () => {
958
+ it('should handle factory errors', async () => {
959
+ const failingFactory = vi.fn().mockRejectedValue(new Error('Factory error'))
960
+
961
+ const pool = new DOConnectionPool({
962
+ factory: failingFactory,
963
+ maxSize: 5,
964
+ fairQueue: false,
965
+ })
966
+
967
+ await expect(pool.acquire()).rejects.toThrow('Factory error')
968
+
969
+ await pool.close()
970
+ })
971
+
972
+ it('should handle connection close errors gracefully', async () => {
973
+ vi.useRealTimers()
974
+
975
+ const factory: ConnectionFactory<MockConnection> = async () => {
976
+ const conn = new MockConnection(`mock-${++connectionIdCounter}`)
977
+ conn.closeDelay = 10
978
+ const originalClose = conn.close.bind(conn)
979
+ conn.close = async () => {
980
+ await originalClose()
981
+ throw new Error('Close error')
982
+ }
983
+ return conn
984
+ }
985
+
986
+ const pool = new DOConnectionPool({
987
+ factory,
988
+ maxSize: 5,
989
+ enableHealthCheck: false, // Disable to avoid interval issues
990
+ })
991
+
992
+ const conn = await pool.acquire()
993
+
994
+ // Should not throw
995
+ await pool.destroy(conn)
996
+
997
+ await pool.close()
998
+ })
999
+
1000
+ it('should handle validation timeout', async () => {
1001
+ vi.useRealTimers()
1002
+
1003
+ const slowHealthChecker: HealthChecker<MockConnection> = async () => {
1004
+ await new Promise(resolve => setTimeout(resolve, 1000))
1005
+ return true
1006
+ }
1007
+
1008
+ const pool = new DOConnectionPool({
1009
+ factory: createMockFactory(),
1010
+ maxSize: 5,
1011
+ enableHealthCheck: true,
1012
+ healthChecker: slowHealthChecker,
1013
+ validationTimeoutMs: 50,
1014
+ })
1015
+
1016
+ const conn = await pool.acquire()
1017
+ conn.markHealthy()
1018
+ await pool.release(conn)
1019
+
1020
+ // Try to acquire - validation should timeout
1021
+ const conn2 = await pool.acquire()
1022
+
1023
+ // Should get a new connection since validation timed out
1024
+ expect(conn2.id).not.toBe(conn.id)
1025
+
1026
+ await pool.close()
1027
+ })
1028
+ })
1029
+
1030
+ describe('load testing', () => {
1031
+ it('should handle sustained load', async () => {
1032
+ vi.useRealTimers()
1033
+
1034
+ const pool = new DOConnectionPool({
1035
+ factory: createMockFactory(),
1036
+ maxSize: 5,
1037
+ fairQueue: true,
1038
+ acquireTimeoutMs: 5000,
1039
+ enableHealthCheck: false,
1040
+ })
1041
+
1042
+ const iterations = 100
1043
+ let completed = 0
1044
+ const errors: Error[] = []
1045
+
1046
+ const worker = async () => {
1047
+ for (let i = 0; i < iterations / 10; i++) {
1048
+ try {
1049
+ const conn = await pool.acquire()
1050
+ await new Promise(resolve => setTimeout(resolve, Math.random() * 5))
1051
+ await pool.release(conn)
1052
+ completed++
1053
+ } catch (e) {
1054
+ errors.push(e as Error)
1055
+ }
1056
+ }
1057
+ }
1058
+
1059
+ // Run 10 concurrent workers
1060
+ await Promise.all(Array(10).fill(null).map(() => worker()))
1061
+
1062
+ expect(completed).toBe(iterations)
1063
+ expect(errors).toHaveLength(0)
1064
+
1065
+ const metrics = pool.getMetrics()
1066
+ expect(metrics.totalAcquisitions).toBe(iterations)
1067
+ expect(metrics.totalReleases).toBe(iterations)
1068
+
1069
+ await pool.close()
1070
+ })
1071
+
1072
+ it('should maintain fairness under load', async () => {
1073
+ vi.useRealTimers()
1074
+
1075
+ const pool = new DOConnectionPool({
1076
+ factory: createMockFactory(),
1077
+ maxSize: 1,
1078
+ fairQueue: true,
1079
+ acquireTimeoutMs: 10000,
1080
+ enableHealthCheck: false, // Disable to avoid interval issues
1081
+ })
1082
+
1083
+ const conn = await pool.acquire()
1084
+ const acquisitionOrder: number[] = []
1085
+
1086
+ // Queue requests
1087
+ const promises = [1, 2, 3, 4, 5].map(n =>
1088
+ pool.acquire().then(c => {
1089
+ acquisitionOrder.push(n)
1090
+ // Immediately release for next request
1091
+ return pool.release(c)
1092
+ })
1093
+ )
1094
+
1095
+ // Give time for requests to queue
1096
+ await new Promise(resolve => setTimeout(resolve, 10))
1097
+
1098
+ // Release initial connection to start processing queue
1099
+ await pool.release(conn)
1100
+
1101
+ await Promise.all(promises)
1102
+
1103
+ // Requests should be processed in FIFO order
1104
+ expect(acquisitionOrder).toEqual([1, 2, 3, 4, 5])
1105
+
1106
+ await pool.close()
1107
+ })
1108
+ })
1109
+ })