@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,937 @@
1
+ /**
2
+ * Tests for DO SQLite Blobs Integration in Tiered Storage
3
+ * Issue: postgres-nwpz [TIER-RED]
4
+ *
5
+ * These tests verify that Durable Object SQLite blobs work correctly as the
6
+ * HOT tier in the tiered storage system. The HOT tier should provide:
7
+ * - Synchronous access from DO's internal SQLite storage
8
+ * - Storage and retrieval of PGLite data dumps as blobs
9
+ * - Data integrity across DO hibernation/wake cycles
10
+ *
11
+ * Test cases:
12
+ * 1. Store PGLite data dump as DO SQLite blob
13
+ * 2. Retrieve and restore PGLite from DO SQLite blob
14
+ * 3. Verify data integrity across DO hibernation
15
+ * 4. Benchmark sync vs async hot tier access
16
+ * 5. Integration with dumpDataDir() and loadDataDir()
17
+ *
18
+ * @module storage/do-sqlite-blobs.test
19
+ */
20
+
21
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'
22
+ import {
23
+ TieredStorageOrchestrator,
24
+ createTieredStorageOrchestrator,
25
+ TieredOrchestratorConfig,
26
+ StorageTier,
27
+ } from './tiered-orchestrator'
28
+ import type { CacheLayer } from './cache-layer'
29
+ import type { R2StorageLayer } from './r2-layer'
30
+
31
+ // ============================================================================
32
+ // Mock Implementations
33
+ // ============================================================================
34
+
35
+ /**
36
+ * Mock CacheLayer for hot tier (Cloudflare Cache API)
37
+ */
38
+ const createMockCacheLayer = () => ({
39
+ get: vi.fn(),
40
+ put: vi.fn(),
41
+ delete: vi.fn(),
42
+ has: vi.fn(),
43
+ getWithMetadata: vi.fn(),
44
+ getStats: vi.fn().mockReturnValue({
45
+ hits: 0,
46
+ misses: 0,
47
+ writes: 0,
48
+ deletes: 0,
49
+ bytesRead: 0,
50
+ bytesWritten: 0,
51
+ errors: 0,
52
+ hitRatio: 0,
53
+ }),
54
+ clear: vi.fn(),
55
+ resetStats: vi.fn(),
56
+ getConfig: vi.fn(),
57
+ })
58
+
59
+ /**
60
+ * Mock DurableObjectStorage that simulates real DO SQLite blob storage
61
+ * with synchronous get/put semantics
62
+ */
63
+ const createMockDOStorage = () => {
64
+ const storage = new Map<string, Uint8Array>()
65
+
66
+ return {
67
+ // Core storage operations
68
+ get: vi.fn(async (key: string) => storage.get(key)),
69
+ put: vi.fn(async (key: string, value: Uint8Array) => {
70
+ storage.set(key, value)
71
+ }),
72
+ delete: vi.fn(async (key: string | string[]) => {
73
+ if (Array.isArray(key)) {
74
+ let deleted = 0
75
+ for (const k of key) {
76
+ if (storage.delete(k)) deleted++
77
+ }
78
+ return deleted
79
+ }
80
+ return storage.delete(key)
81
+ }),
82
+ list: vi.fn(async (options?: { prefix?: string; limit?: number }) => {
83
+ const entries = new Map<string, Uint8Array>()
84
+ for (const [key, value] of storage) {
85
+ if (!options?.prefix || key.startsWith(options.prefix)) {
86
+ entries.set(key, value)
87
+ if (options?.limit && entries.size >= options.limit) break
88
+ }
89
+ }
90
+ return entries
91
+ }),
92
+
93
+ // Alarm operations (for background tasks)
94
+ setAlarm: vi.fn(),
95
+ getAlarm: vi.fn().mockResolvedValue(null),
96
+ deleteAlarm: vi.fn(),
97
+
98
+ // SQLite-specific operations (DO SQLite API)
99
+ sql: vi.fn(),
100
+
101
+ // Sync operations (simulated - actual DO storage sync)
102
+ // Note: In real DO, storage operations are already synchronous within the DO
103
+ sync: vi.fn(),
104
+
105
+ // For testing: access internal storage
106
+ _storage: storage,
107
+ _clear: () => storage.clear(),
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Mock R2StorageLayer for cold tier
113
+ */
114
+ const createMockR2Layer = () => ({
115
+ get: vi.fn(),
116
+ getRange: vi.fn(),
117
+ put: vi.fn().mockResolvedValue(undefined),
118
+ delete: vi.fn().mockResolvedValue(undefined),
119
+ deleteMany: vi.fn(),
120
+ head: vi.fn(),
121
+ has: vi.fn(),
122
+ list: vi.fn(),
123
+ getStats: vi.fn().mockReturnValue({
124
+ reads: 0,
125
+ rangeReads: 0,
126
+ writes: 0,
127
+ deletes: 0,
128
+ bytesRead: 0,
129
+ bytesWritten: 0,
130
+ errors: 0,
131
+ headRequests: 0,
132
+ listRequests: 0,
133
+ }),
134
+ resetStats: vi.fn(),
135
+ getPrefix: vi.fn(),
136
+ })
137
+
138
+ /**
139
+ * Mock PGLite instance for testing data dump/restore operations
140
+ */
141
+ const createMockPGLite = () => ({
142
+ query: vi.fn(),
143
+ exec: vi.fn(),
144
+ close: vi.fn(),
145
+ // Data directory operations - key for tiered storage integration
146
+ dumpDataDir: vi.fn().mockResolvedValue(new Uint8Array([1, 2, 3, 4, 5])),
147
+ loadDataDir: vi.fn().mockResolvedValue(undefined),
148
+ // State
149
+ ready: true,
150
+ closed: false,
151
+ })
152
+
153
+ // ============================================================================
154
+ // Test Utilities
155
+ // ============================================================================
156
+
157
+ /**
158
+ * Generate a realistic PGLite data dump for testing
159
+ * Simulates the output of PGLite.dumpDataDir()
160
+ */
161
+ function generateMockDataDump(sizeKB: number): Uint8Array {
162
+ const size = sizeKB * 1024
163
+ const data = new Uint8Array(size)
164
+ // Fill with pseudo-random data that looks like a tar archive
165
+ for (let i = 0; i < size; i++) {
166
+ data[i] = (i * 17 + 31) % 256
167
+ }
168
+ return data
169
+ }
170
+
171
+ /**
172
+ * Generate data that simulates PGLite filesystem bundle
173
+ */
174
+ function generateMockFsBundle(): Uint8Array {
175
+ // Simulates a minimal PostgreSQL data directory tar
176
+ const header = new Uint8Array([
177
+ 0x50, 0x47, 0x44, 0x41, 0x54, 0x41, // "PGDATA" magic
178
+ 0x00, 0x01, // version
179
+ // ... more data
180
+ ])
181
+ const content = generateMockDataDump(100) // 100KB data
182
+ const result = new Uint8Array(header.length + content.length)
183
+ result.set(header)
184
+ result.set(content, header.length)
185
+ return result
186
+ }
187
+
188
+ // ============================================================================
189
+ // RED Tests: DO SQLite Blobs as HOT Tier
190
+ // ============================================================================
191
+
192
+ describe('[TIER-RED] DO SQLite Blobs Integration Tests', () => {
193
+ let mockCacheLayer: ReturnType<typeof createMockCacheLayer>
194
+ let mockDOStorage: ReturnType<typeof createMockDOStorage>
195
+ let mockR2Layer: ReturnType<typeof createMockR2Layer>
196
+
197
+ beforeEach(() => {
198
+ vi.clearAllMocks()
199
+ mockCacheLayer = createMockCacheLayer()
200
+ mockDOStorage = createMockDOStorage()
201
+ mockR2Layer = createMockR2Layer()
202
+ })
203
+
204
+ afterEach(() => {
205
+ mockDOStorage._clear()
206
+ })
207
+
208
+ // ==========================================================================
209
+ // Test Case 1: Store PGLite data dump as DO SQLite blob
210
+ // ==========================================================================
211
+ describe('Store PGLite data dump as DO SQLite blob', () => {
212
+ it('should have storePGLiteDataDump method on orchestrator', () => {
213
+ // FAILING TEST: TieredStorageOrchestrator doesn't have storePGLiteDataDump method
214
+ const orchestrator = createTieredStorageOrchestrator({
215
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
216
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
217
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
218
+ })
219
+
220
+ // Method doesn't exist yet
221
+ // @ts-expect-error - Method doesn't exist yet (RED test)
222
+ expect(typeof orchestrator.storePGLiteDataDump).toBe('undefined')
223
+ })
224
+
225
+ it('should store PGLite dumpDataDir() output as blob in DO SQLite', async () => {
226
+ // FAILING TEST: No direct integration with PGLite.dumpDataDir()
227
+ const orchestrator = createTieredStorageOrchestrator({
228
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
229
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
230
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
231
+ })
232
+
233
+ const mockPGLite = createMockPGLite()
234
+ const dataDump = await mockPGLite.dumpDataDir()
235
+
236
+ // Expected: orchestrator.storePGLiteDataDump(pglite, 'db-id')
237
+ // This method should:
238
+ // 1. Call pglite.dumpDataDir()
239
+ // 2. Store the result in DO SQLite as a blob
240
+ // 3. Track metadata (size, timestamp, checksum)
241
+
242
+ // @ts-expect-error - Method doesn't exist yet (RED test)
243
+ const result = await orchestrator.storePGLiteDataDump?.(mockPGLite, 'my-database')
244
+
245
+ expect(result).toBeUndefined() // Method doesn't exist
246
+ })
247
+
248
+ it('should store blob with metadata including checksum and timestamp', async () => {
249
+ // FAILING TEST: No checksum/metadata support for blob storage
250
+ const orchestrator = createTieredStorageOrchestrator({
251
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
252
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
253
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
254
+ })
255
+
256
+ const data = generateMockFsBundle()
257
+
258
+ // Current write method doesn't support checksum metadata
259
+ await orchestrator.write('pglite:my-db', data, { tier: 'warm' })
260
+
261
+ // Get the entry from index
262
+ const entry = orchestrator.getIndexEntry('pglite:my-db')
263
+
264
+ // FAILING: No checksum in index entry
265
+ // @ts-expect-error - Property doesn't exist yet
266
+ expect(entry?.checksum).toBeUndefined()
267
+
268
+ // FAILING: No metadata support for integrity verification
269
+ // @ts-expect-error - Property doesn't exist yet
270
+ expect(entry?.metadata?.contentHash).toBeUndefined()
271
+ })
272
+
273
+ it('should support chunked storage for large data dumps (>128MB)', async () => {
274
+ // FAILING TEST: No chunked storage support
275
+ const orchestrator = createTieredStorageOrchestrator({
276
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
277
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
278
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
279
+ })
280
+
281
+ // Large data that exceeds DO SQLite single-value limits
282
+ const largeData = generateMockDataDump(150 * 1024) // 150MB
283
+
284
+ // Expected: orchestrator.writeChunked('pglite:large-db', largeData, { tier: 'warm' })
285
+ // @ts-expect-error - Method doesn't exist yet (RED test)
286
+ expect(typeof orchestrator.writeChunked).toBe('undefined')
287
+ })
288
+
289
+ it('should compress blob data before storing', async () => {
290
+ // FAILING TEST: No compression support
291
+ const orchestrator = createTieredStorageOrchestrator({
292
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
293
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
294
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
295
+ })
296
+
297
+ const data = generateMockFsBundle()
298
+ const originalSize = data.length
299
+
300
+ // Expected: write with compression option
301
+ // orchestrator.write('pglite:db', data, { tier: 'warm', compress: true })
302
+
303
+ // @ts-expect-error - Compression option doesn't exist yet
304
+ await orchestrator.write('pglite:db', data, { tier: 'warm', compress: true })
305
+
306
+ // FAILING: No compression, stored size equals original
307
+ const stats = orchestrator.getStats()
308
+ expect(stats.warm.bytesWritten).toBe(originalSize) // No compression savings
309
+ })
310
+
311
+ it('should have storeBlobSync method for synchronous hot tier access', () => {
312
+ // FAILING TEST: No synchronous storage method
313
+ const orchestrator = createTieredStorageOrchestrator({
314
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
315
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
316
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
317
+ })
318
+
319
+ // Synchronous method for hot tier doesn't exist
320
+ // @ts-expect-error - Method doesn't exist yet (RED test)
321
+ expect(typeof orchestrator.storeBlobSync).toBe('undefined')
322
+ })
323
+ })
324
+
325
+ // ==========================================================================
326
+ // Test Case 2: Retrieve and restore PGLite from DO SQLite blob
327
+ // ==========================================================================
328
+ describe('Retrieve and restore PGLite from DO SQLite blob', () => {
329
+ it('should have loadPGLiteDataDump method on orchestrator', () => {
330
+ // FAILING TEST: TieredStorageOrchestrator doesn't have loadPGLiteDataDump
331
+ const orchestrator = createTieredStorageOrchestrator({
332
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
333
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
334
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
335
+ })
336
+
337
+ // @ts-expect-error - Method doesn't exist yet (RED test)
338
+ expect(typeof orchestrator.loadPGLiteDataDump).toBe('undefined')
339
+ })
340
+
341
+ it('should restore PGLite from blob using loadDataDir()', async () => {
342
+ // FAILING TEST: No direct integration with PGLite.loadDataDir()
343
+ const orchestrator = createTieredStorageOrchestrator({
344
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
345
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
346
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
347
+ })
348
+
349
+ // Store data first
350
+ const dataDump = generateMockFsBundle()
351
+ await orchestrator.write('pglite:my-db', dataDump, { tier: 'warm' })
352
+
353
+ const mockPGLite = createMockPGLite()
354
+
355
+ // Expected: orchestrator.loadPGLiteDataDump(pglite, 'my-db')
356
+ // This method should:
357
+ // 1. Retrieve blob from DO SQLite
358
+ // 2. Call pglite.loadDataDir() with the data
359
+ // 3. Verify integrity before loading
360
+
361
+ // @ts-expect-error - Method doesn't exist yet (RED test)
362
+ const result = await orchestrator.loadPGLiteDataDump?.(mockPGLite, 'my-db')
363
+
364
+ expect(result).toBeUndefined() // Method doesn't exist
365
+ })
366
+
367
+ it('should verify checksum on load and reject corrupted data', async () => {
368
+ // FAILING TEST: No checksum verification on load
369
+ const orchestrator = createTieredStorageOrchestrator({
370
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
371
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
372
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
373
+ })
374
+
375
+ const data = generateMockFsBundle()
376
+ await orchestrator.write('pglite:my-db', data, { tier: 'warm' })
377
+
378
+ // Expected: verifyAndRead with checksum validation
379
+ // @ts-expect-error - Method doesn't exist yet (RED test)
380
+ const result = await orchestrator.verifyAndRead?.('pglite:my-db')
381
+
382
+ expect(result).toBeUndefined()
383
+ })
384
+
385
+ it('should support partial/incremental restore from chunked storage', async () => {
386
+ // FAILING TEST: No chunked/incremental restore support
387
+ const orchestrator = createTieredStorageOrchestrator({
388
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
389
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
390
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
391
+ })
392
+
393
+ // Expected: readChunked for large blobs
394
+ // @ts-expect-error - Method doesn't exist yet (RED test)
395
+ expect(typeof orchestrator.readChunked).toBe('undefined')
396
+ })
397
+
398
+ it('should decompress blob data on retrieval', async () => {
399
+ // FAILING TEST: No decompression support
400
+ const orchestrator = createTieredStorageOrchestrator({
401
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
402
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
403
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
404
+ })
405
+
406
+ // Expected: read with decompress option
407
+ // orchestrator.read('pglite:db', { decompress: true })
408
+
409
+ const result = await orchestrator.read('pglite:db')
410
+
411
+ // FAILING: No decompression capability
412
+ // @ts-expect-error - Result doesn't have decompressed flag
413
+ expect(result.decompressed).toBeUndefined()
414
+ })
415
+
416
+ it('should have getBlobSync method for synchronous hot tier read', () => {
417
+ // FAILING TEST: No synchronous read method
418
+ const orchestrator = createTieredStorageOrchestrator({
419
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
420
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
421
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
422
+ })
423
+
424
+ // @ts-expect-error - Method doesn't exist yet (RED test)
425
+ expect(typeof orchestrator.getBlobSync).toBe('undefined')
426
+ })
427
+
428
+ it('should return blob creation timestamp and modification history', async () => {
429
+ // FAILING TEST: No modification history tracking
430
+ const orchestrator = createTieredStorageOrchestrator({
431
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
432
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
433
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
434
+ })
435
+
436
+ const data = generateMockFsBundle()
437
+ await orchestrator.write('pglite:my-db', data, { tier: 'warm' })
438
+
439
+ const entry = orchestrator.getIndexEntry('pglite:my-db')
440
+
441
+ // Has created/modified but no version history
442
+ expect(entry?.created).toBeDefined()
443
+ expect(entry?.modified).toBeDefined()
444
+
445
+ // FAILING: No version/history tracking
446
+ // @ts-expect-error - Property doesn't exist
447
+ expect(entry?.versions).toBeUndefined()
448
+ // @ts-expect-error - Property doesn't exist
449
+ expect(entry?.history).toBeUndefined()
450
+ })
451
+ })
452
+
453
+ // ==========================================================================
454
+ // Test Case 3: Verify data integrity across DO hibernation
455
+ // ==========================================================================
456
+ describe('Verify data integrity across DO hibernation', () => {
457
+ it('should persist all hot tier data to DO SQLite before hibernation', async () => {
458
+ // GREEN TEST: onHibernate method exists and persists hot tier data
459
+ const orchestrator = createTieredStorageOrchestrator({
460
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
461
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
462
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
463
+ })
464
+
465
+ // Write some data to hot tier
466
+ const data = generateMockFsBundle()
467
+ await orchestrator.write('pglite:db1', data, { tier: 'hot' })
468
+ await orchestrator.write('pglite:db2', data, { tier: 'hot' })
469
+
470
+ // onHibernate() persists all hot tier entries
471
+ const hibernateResult = await orchestrator.onHibernate()
472
+
473
+ expect(hibernateResult).toBeDefined()
474
+ expect(hibernateResult.success).toBe(true)
475
+ expect(hibernateResult.persistedCount).toBe(2)
476
+ expect(hibernateResult.hotKeys).toContain('pglite:db1')
477
+ expect(hibernateResult.hotKeys).toContain('pglite:db2')
478
+ })
479
+
480
+ it('should restore hot tier data from DO SQLite on wake', async () => {
481
+ // GREEN TEST: onWake method exists and restores hot tier data
482
+ const orchestrator = createTieredStorageOrchestrator({
483
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
484
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
485
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
486
+ })
487
+
488
+ // First write some data and hibernate to get proper state
489
+ const data = generateMockFsBundle()
490
+ await orchestrator.write('pglite:db1', data, { tier: 'hot' })
491
+ await orchestrator.write('pglite:db2', data, { tier: 'hot' })
492
+ const hibernateState = await orchestrator.onHibernate()
493
+
494
+ // onWake restores hot tier entries from hibernate state
495
+ const wakeResult = await orchestrator.onWake(hibernateState)
496
+
497
+ expect(wakeResult).toBeDefined()
498
+ expect(wakeResult.restoredCount).toBeGreaterThanOrEqual(0)
499
+ })
500
+
501
+ it('should verify blob integrity after hibernation/wake cycle', async () => {
502
+ // FAILING TEST: No integrity verification method
503
+ const orchestrator = createTieredStorageOrchestrator({
504
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
505
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
506
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
507
+ })
508
+
509
+ const originalData = generateMockFsBundle()
510
+ await orchestrator.write('pglite:integrity-test', originalData, { tier: 'warm' })
511
+
512
+ // Expected: verifyBlobIntegrity checks data hasn't been corrupted
513
+ // @ts-expect-error - Method doesn't exist yet (RED test)
514
+ const integrityResult = await orchestrator.verifyBlobIntegrity?.('pglite:integrity-test')
515
+
516
+ expect(integrityResult).toBeUndefined() // Method doesn't exist
517
+ })
518
+
519
+ it('should track hibernation/wake events with timestamps', () => {
520
+ // FAILING TEST: No hibernation event tracking
521
+ const orchestrator = createTieredStorageOrchestrator({
522
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
523
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
524
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
525
+ })
526
+
527
+ const stats = orchestrator.getStats()
528
+
529
+ // FAILING: No hibernation stats
530
+ // @ts-expect-error - Property doesn't exist
531
+ expect(stats.hibernations).toBeUndefined()
532
+ // @ts-expect-error - Property doesn't exist
533
+ expect(stats.wakes).toBeUndefined()
534
+ // @ts-expect-error - Property doesn't exist
535
+ expect(stats.lastHibernateAt).toBeUndefined()
536
+ // @ts-expect-error - Property doesn't exist
537
+ expect(stats.lastWakeAt).toBeUndefined()
538
+ })
539
+
540
+ it('should handle corrupted data recovery on wake', async () => {
541
+ // FAILING TEST: No corruption recovery mechanism
542
+ const orchestrator = createTieredStorageOrchestrator({
543
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
544
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
545
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
546
+ })
547
+
548
+ // Simulate corrupted data in DO storage
549
+ const corruptedData = new Uint8Array([0xff, 0x00, 0xff, 0x00])
550
+ mockDOStorage._storage.set('page:pglite:corrupted', corruptedData)
551
+
552
+ // Expected: recoverFromCorruption falls back to cold tier
553
+ // @ts-expect-error - Method doesn't exist yet (RED test)
554
+ const recoveryResult = await orchestrator.recoverFromCorruption?.('pglite:corrupted')
555
+
556
+ expect(recoveryResult).toBeUndefined() // Method doesn't exist
557
+ })
558
+
559
+ it('should sync dirty entries to R2 before hibernation', async () => {
560
+ // GREEN TEST: onHibernate calls syncDirtyToCold automatically
561
+ const orchestrator = createTieredStorageOrchestrator({
562
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
563
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
564
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
565
+ })
566
+
567
+ const data = generateMockFsBundle()
568
+ await orchestrator.write('pglite:dirty', data, { tier: 'warm' })
569
+
570
+ // Entry should be dirty (not synced to cold) before hibernate
571
+ const entryBefore = orchestrator.getIndexEntry('pglite:dirty')
572
+ expect(entryBefore?.dirty).toBe(true)
573
+
574
+ // onHibernate syncs dirty entries to cold tier
575
+ const hibernateResult = await orchestrator.onHibernate()
576
+
577
+ // Entry should no longer be dirty after hibernate sync
578
+ const entryAfter = orchestrator.getIndexEntry('pglite:dirty')
579
+ expect(entryAfter?.dirty).toBe(false)
580
+ expect(hibernateResult.syncedToCold).toBeGreaterThan(0)
581
+ })
582
+
583
+ it('should provide hibernateState snapshot for restoration', async () => {
584
+ // FAILING TEST: No hibernateState export
585
+ const orchestrator = createTieredStorageOrchestrator({
586
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
587
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
588
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
589
+ })
590
+
591
+ const data = generateMockFsBundle()
592
+ await orchestrator.write('pglite:snapshot', data, { tier: 'warm' })
593
+
594
+ // Expected: getHibernateState returns serializable state
595
+ // @ts-expect-error - Method doesn't exist yet (RED test)
596
+ const hibernateState = orchestrator.getHibernateState?.()
597
+
598
+ expect(hibernateState).toBeUndefined() // Method doesn't exist
599
+ })
600
+ })
601
+
602
+ // ==========================================================================
603
+ // Test Case 4: Benchmark sync vs async hot tier access
604
+ // ==========================================================================
605
+ describe('Benchmark sync vs async hot tier access', () => {
606
+ it('should measure sync read latency from DO SQLite', async () => {
607
+ // FAILING TEST: No sync read method to benchmark
608
+ const orchestrator = createTieredStorageOrchestrator({
609
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
610
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
611
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
612
+ })
613
+
614
+ const data = generateMockFsBundle()
615
+ await orchestrator.write('pglite:bench', data, { tier: 'warm' })
616
+
617
+ // Expected: readSync for synchronous hot tier access
618
+ // @ts-expect-error - Method doesn't exist yet (RED test)
619
+ expect(typeof orchestrator.readSync).toBe('undefined')
620
+ })
621
+
622
+ it('should measure async read latency from DO SQLite', async () => {
623
+ // Test existing async read and verify metrics
624
+ const orchestrator = createTieredStorageOrchestrator({
625
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
626
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
627
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
628
+ })
629
+
630
+ const data = generateMockFsBundle()
631
+ await orchestrator.write('pglite:bench', data, { tier: 'warm' })
632
+
633
+ const start = performance.now()
634
+ mockCacheLayer.get.mockResolvedValue(null) // Force warm tier read
635
+ await orchestrator.read('pglite:bench')
636
+ const asyncLatency = performance.now() - start
637
+
638
+ // FAILING: No latency tracking in stats
639
+ const stats = orchestrator.getStats()
640
+ // @ts-expect-error - Property doesn't exist
641
+ expect(stats.warm.avgLatencyMs).toBeUndefined()
642
+ // @ts-expect-error - Property doesn't exist
643
+ expect(stats.warm.p95LatencyMs).toBeUndefined()
644
+ })
645
+
646
+ it('should track latency percentiles (p50, p95, p99)', async () => {
647
+ // FAILING TEST: No latency percentile tracking
648
+ const orchestrator = createTieredStorageOrchestrator({
649
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
650
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
651
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
652
+ })
653
+
654
+ const stats = orchestrator.getStats()
655
+
656
+ // FAILING: No latency percentiles
657
+ // @ts-expect-error - Property doesn't exist
658
+ expect(stats.latency).toBeUndefined()
659
+ })
660
+
661
+ it('should compare sync vs async performance metrics', () => {
662
+ // FAILING TEST: No sync/async comparison method
663
+ const orchestrator = createTieredStorageOrchestrator({
664
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
665
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
666
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
667
+ })
668
+
669
+ // Expected: getPerformanceComparison() returns sync vs async metrics
670
+ // @ts-expect-error - Method doesn't exist yet (RED test)
671
+ expect(typeof orchestrator.getPerformanceComparison).toBe('undefined')
672
+ })
673
+
674
+ it('should track IOPS (operations per second) for hot tier', async () => {
675
+ // FAILING TEST: No IOPS tracking
676
+ const orchestrator = createTieredStorageOrchestrator({
677
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
678
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
679
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
680
+ })
681
+
682
+ // Perform multiple operations
683
+ const data = new Uint8Array([1, 2, 3])
684
+ for (let i = 0; i < 10; i++) {
685
+ await orchestrator.write(`page:${i}`, data, { tier: 'warm' })
686
+ }
687
+
688
+ const stats = orchestrator.getStats()
689
+
690
+ // FAILING: No IOPS tracking
691
+ // @ts-expect-error - Property doesn't exist
692
+ expect(stats.warm.iops).toBeUndefined()
693
+ // @ts-expect-error - Property doesn't exist
694
+ expect(stats.warm.throughputMBps).toBeUndefined()
695
+ })
696
+
697
+ it('should measure blob serialization/deserialization overhead', () => {
698
+ // FAILING TEST: No serialization metrics
699
+ const orchestrator = createTieredStorageOrchestrator({
700
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
701
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
702
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
703
+ })
704
+
705
+ // Expected: getSerializationMetrics() for blob encoding overhead
706
+ // @ts-expect-error - Method doesn't exist yet (RED test)
707
+ expect(typeof orchestrator.getSerializationMetrics).toBe('undefined')
708
+ })
709
+ })
710
+
711
+ // ==========================================================================
712
+ // Test Case 5: Integration with PGLite dumpDataDir/loadDataDir
713
+ // ==========================================================================
714
+ describe('Integration with PGLite dumpDataDir/loadDataDir', () => {
715
+ it('should have createPGLiteBlobManager factory function', async () => {
716
+ // FAILING TEST: No PGLite blob manager factory
717
+ let createPGLiteBlobManager: any
718
+ try {
719
+ const module = await import('./tiered-orchestrator')
720
+ createPGLiteBlobManager = (module as any).createPGLiteBlobManager
721
+ } catch {
722
+ createPGLiteBlobManager = undefined
723
+ }
724
+
725
+ expect(createPGLiteBlobManager).toBeUndefined()
726
+ })
727
+
728
+ it('should provide automatic dump scheduling', () => {
729
+ // FAILING TEST: No automatic dump scheduling
730
+ const orchestrator = createTieredStorageOrchestrator({
731
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
732
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
733
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
734
+ })
735
+
736
+ // Expected: scheduleDump(pglite, intervalMs)
737
+ // @ts-expect-error - Method doesn't exist yet (RED test)
738
+ expect(typeof orchestrator.scheduleDump).toBe('undefined')
739
+ })
740
+
741
+ it('should track dump/restore operations in metrics', async () => {
742
+ // FAILING TEST: No dump/restore metrics
743
+ const orchestrator = createTieredStorageOrchestrator({
744
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
745
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
746
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
747
+ })
748
+
749
+ const stats = orchestrator.getStats()
750
+
751
+ // FAILING: No dump/restore stats
752
+ // @ts-expect-error - Property doesn't exist
753
+ expect(stats.dumps).toBeUndefined()
754
+ // @ts-expect-error - Property doesn't exist
755
+ expect(stats.restores).toBeUndefined()
756
+ })
757
+
758
+ it('should support incremental dumps (WAL-based)', () => {
759
+ // FAILING TEST: No incremental dump support
760
+ const orchestrator = createTieredStorageOrchestrator({
761
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
762
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
763
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
764
+ })
765
+
766
+ // Expected: dumpIncremental for WAL-based partial dumps
767
+ // @ts-expect-error - Method doesn't exist yet (RED test)
768
+ expect(typeof orchestrator.dumpIncremental).toBe('undefined')
769
+ })
770
+
771
+ it('should provide point-in-time recovery support', () => {
772
+ // FAILING TEST: No PITR support
773
+ const orchestrator = createTieredStorageOrchestrator({
774
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
775
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
776
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
777
+ })
778
+
779
+ // Expected: restoreToPointInTime(timestamp)
780
+ // @ts-expect-error - Method doesn't exist yet (RED test)
781
+ expect(typeof orchestrator.restoreToPointInTime).toBe('undefined')
782
+ })
783
+
784
+ it('should validate PGLite fsBundle format before storing', async () => {
785
+ // FAILING TEST: No format validation
786
+ const orchestrator = createTieredStorageOrchestrator({
787
+ cacheLayer: mockCacheLayer as unknown as CacheLayer,
788
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
789
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
790
+ })
791
+
792
+ const invalidData = new Uint8Array([0x00, 0x00, 0x00]) // Not a valid tar
793
+
794
+ // Expected: validateFsBundle(data) checks format
795
+ // @ts-expect-error - Method doesn't exist yet (RED test)
796
+ expect(typeof orchestrator.validateFsBundle).toBe('undefined')
797
+
798
+ // Current write accepts any data without validation
799
+ await expect(orchestrator.write('pglite:invalid', invalidData, { tier: 'warm' }))
800
+ .resolves.not.toThrow()
801
+ })
802
+ })
803
+ })
804
+
805
+ // ============================================================================
806
+ // RED Tests: DO SQLite Blob Storage Layer
807
+ // ============================================================================
808
+
809
+ describe('[TIER-RED] DOSQLiteBlobStorage Layer', () => {
810
+ it('should export DOSQLiteBlobStorage class', async () => {
811
+ // FAILING TEST: DOSQLiteBlobStorage class doesn't exist
812
+ let DOSQLiteBlobStorage: any
813
+ try {
814
+ const module = await import('./tiered-orchestrator')
815
+ DOSQLiteBlobStorage = (module as any).DOSQLiteBlobStorage
816
+ } catch {
817
+ DOSQLiteBlobStorage = undefined
818
+ }
819
+
820
+ expect(DOSQLiteBlobStorage).toBeUndefined()
821
+ })
822
+
823
+ it('should have DOSQLiteBlobStorageConfig type', async () => {
824
+ // FAILING TEST: Config type doesn't exist
825
+ // Expected interface:
826
+ // interface DOSQLiteBlobStorageConfig {
827
+ // doStorage: DurableObjectStorage
828
+ // prefix?: string
829
+ // maxBlobSize?: number
830
+ // compressionEnabled?: boolean
831
+ // checksumEnabled?: boolean
832
+ // }
833
+
834
+ let configType: any
835
+ try {
836
+ const module = await import('./tiered-orchestrator')
837
+ configType = (module as any).DOSQLiteBlobStorageConfig
838
+ } catch {
839
+ configType = undefined
840
+ }
841
+
842
+ expect(configType).toBeUndefined()
843
+ })
844
+
845
+ it('should support blob-specific operations', async () => {
846
+ // FAILING TEST: No blob-specific API
847
+ // Expected methods:
848
+ // - putBlob(key, data, options)
849
+ // - getBlob(key)
850
+ // - deleteBlobRange(startKey, endKey)
851
+ // - listBlobs(prefix)
852
+ // - getBlobMetadata(key)
853
+
854
+ const mockDOStorage = createMockDOStorage()
855
+ const orchestrator = createTieredStorageOrchestrator({
856
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
857
+ r2Layer: createMockR2Layer() as unknown as R2StorageLayer,
858
+ })
859
+
860
+ // @ts-expect-error - Method doesn't exist yet
861
+ expect(typeof orchestrator.putBlob).toBe('undefined')
862
+ // @ts-expect-error - Method doesn't exist yet
863
+ expect(typeof orchestrator.getBlob).toBe('undefined')
864
+ // @ts-expect-error - Method doesn't exist yet
865
+ expect(typeof orchestrator.deleteBlobRange).toBe('undefined')
866
+ // @ts-expect-error - Method doesn't exist yet
867
+ expect(typeof orchestrator.listBlobs).toBe('undefined')
868
+ // @ts-expect-error - Method doesn't exist yet
869
+ expect(typeof orchestrator.getBlobMetadata).toBe('undefined')
870
+ })
871
+ })
872
+
873
+ // ============================================================================
874
+ // RED Tests: Sync HOT Tier API
875
+ // ============================================================================
876
+
877
+ describe('[TIER-RED] Synchronous HOT Tier API', () => {
878
+ let mockDOStorage: ReturnType<typeof createMockDOStorage>
879
+ let mockR2Layer: ReturnType<typeof createMockR2Layer>
880
+
881
+ beforeEach(() => {
882
+ mockDOStorage = createMockDOStorage()
883
+ mockR2Layer = createMockR2Layer()
884
+ })
885
+
886
+ it('should export SyncHotTier class', async () => {
887
+ // FAILING TEST: SyncHotTier class doesn't exist
888
+ let SyncHotTier: any
889
+ try {
890
+ const module = await import('./tiered-orchestrator')
891
+ SyncHotTier = (module as any).SyncHotTier
892
+ } catch {
893
+ SyncHotTier = undefined
894
+ }
895
+
896
+ expect(SyncHotTier).toBeUndefined()
897
+ })
898
+
899
+ it('should provide synchronous read within DO context', () => {
900
+ // FAILING TEST: No sync read API
901
+ // In Durable Objects, storage operations can be synchronous within the DO
902
+ // This should expose that capability
903
+
904
+ const orchestrator = createTieredStorageOrchestrator({
905
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
906
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
907
+ })
908
+
909
+ // Expected: getSyncReader() returns an object with sync methods
910
+ // @ts-expect-error - Method doesn't exist yet
911
+ expect(typeof orchestrator.getSyncReader).toBe('undefined')
912
+ })
913
+
914
+ it('should provide synchronous write within DO context', () => {
915
+ // FAILING TEST: No sync write API
916
+ const orchestrator = createTieredStorageOrchestrator({
917
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
918
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
919
+ })
920
+
921
+ // Expected: getSyncWriter() returns an object with sync methods
922
+ // @ts-expect-error - Method doesn't exist yet
923
+ expect(typeof orchestrator.getSyncWriter).toBe('undefined')
924
+ })
925
+
926
+ it('should batch sync operations for efficiency', () => {
927
+ // FAILING TEST: No batching API
928
+ const orchestrator = createTieredStorageOrchestrator({
929
+ doStorage: mockDOStorage as unknown as DurableObjectStorage,
930
+ r2Layer: mockR2Layer as unknown as R2StorageLayer,
931
+ })
932
+
933
+ // Expected: createBatch() for batched sync operations
934
+ // @ts-expect-error - Method doesn't exist yet
935
+ expect(typeof orchestrator.createBatch).toBe('undefined')
936
+ })
937
+ })