@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,1082 @@
1
+ /**
2
+ * TieredVFS - Combine cache, DO, R2 layers for PGLite storage
3
+ * Task: postgres-xm8.9 - TieredVFS - combine cache, DO, R2 layers
4
+ * Consolidation: postgres-u2ut - Merged graceful degradation from pglite/tiered-vfs.ts
5
+ *
6
+ * Provides a unified virtual file system interface that:
7
+ * - Reads from Cache (hot) -> DO Storage (warm) -> R2 (cold)
8
+ * - Writes to DO Storage, promotes to Cache on access
9
+ * - Supports tier-aware operations for optimal performance
10
+ * - Gracefully degrades when storage tiers fail
11
+ *
12
+ * Tier Architecture:
13
+ * - Hot (Cache): Cloudflare Cache API - FREE, fastest, ephemeral, global edge
14
+ * - Warm (DO): Durable Object Storage - fast, persistent, limited (128KB-10MB)
15
+ * - Cold (R2): R2 Object Storage - durable, unlimited, slower, cheapest
16
+ *
17
+ * @module storage/tiered-vfs
18
+ */
19
+
20
+ import type { CacheLayer, CacheLayerStats } from './cache-layer'
21
+ import type { R2StorageLayer, R2StorageLayerStats } from './r2-layer'
22
+
23
+ // Re-export for external use
24
+ export type { CacheEntryMetadata } from './cache-layer'
25
+
26
+ // =============================================================================
27
+ // Configuration Constants
28
+ // =============================================================================
29
+
30
+ /**
31
+ * Default number of accesses before promoting data to a hotter tier.
32
+ * Prevents unnecessary promotion of rarely accessed data.
33
+ */
34
+ const DEFAULT_PROMOTION_THRESHOLD = 3
35
+
36
+ /**
37
+ * Default number of consecutive failures before marking a tier unavailable.
38
+ * Implements circuit breaker pattern to prevent cascading failures.
39
+ */
40
+ const DEFAULT_FAILURE_THRESHOLD = 3
41
+
42
+ /**
43
+ * Default time in milliseconds before attempting to use an unavailable tier again.
44
+ * Allows failing services time to recover before retrying.
45
+ */
46
+ const DEFAULT_RECOVERY_TIME_MS = 30000
47
+
48
+ /**
49
+ * Default maximum number of failure events to keep in history.
50
+ * Prevents unbounded memory growth from failure tracking.
51
+ */
52
+ const DEFAULT_MAX_FAILURE_HISTORY = 100
53
+
54
+ // =============================================================================
55
+ // Types
56
+ // =============================================================================
57
+
58
+ /**
59
+ * Storage tier identifiers
60
+ * - hot: Cloudflare Cache API (FREE, fastest, ephemeral)
61
+ * - warm: Durable Object Storage (fast, persistent, limited)
62
+ * - cold: R2 (durable, unlimited, slower)
63
+ */
64
+ export type StorageTier = 'hot' | 'warm' | 'cold'
65
+
66
+ /**
67
+ * Health status of a storage tier
68
+ * - healthy: Tier is operating normally
69
+ * - degraded: Tier has experienced recent failures but is still attempted
70
+ * - unavailable: Tier is skipped until recovery time passes
71
+ */
72
+ export type TierHealth = 'healthy' | 'degraded' | 'unavailable'
73
+
74
+ /**
75
+ * Information about a tier failure
76
+ */
77
+ export interface TierFailure {
78
+ /** The tier that failed */
79
+ tier: StorageTier
80
+ /** Timestamp of the failure */
81
+ timestamp: number
82
+ /** Error message */
83
+ error: string
84
+ /** Type of operation that failed */
85
+ operation: 'read' | 'write' | 'delete' | 'check'
86
+ /** Key involved (if applicable) */
87
+ key?: string | undefined
88
+ }
89
+
90
+ /**
91
+ * Health status for all tiers
92
+ */
93
+ export interface TierHealthStatus {
94
+ /** Health status of hot tier */
95
+ hot: TierHealth
96
+ /** Health status of warm tier */
97
+ warm: TierHealth
98
+ /** Health status of cold tier */
99
+ cold: TierHealth
100
+ /** Recent failure events */
101
+ recentFailures: TierFailure[]
102
+ /** Total failure counts per tier */
103
+ failureCounts: Record<StorageTier, number>
104
+ }
105
+
106
+ /**
107
+ * Callback for tier failure events
108
+ */
109
+ export type TierFailureCallback = (failure: TierFailure) => void
110
+
111
+ /**
112
+ * Result of locating a page across tiers
113
+ */
114
+ export interface PageLocation {
115
+ /** The tier where the page was found */
116
+ tier?: StorageTier
117
+ /** Whether the page was found */
118
+ found: boolean
119
+ /** The page key */
120
+ key: string
121
+ }
122
+
123
+ /**
124
+ * Options for read operations
125
+ */
126
+ export interface ReadOptions {
127
+ /** Whether to skip promotion after read */
128
+ skipPromotion?: boolean
129
+ /** Whether to track access for promotion/demotion decisions */
130
+ trackAccess?: boolean
131
+ }
132
+
133
+ /**
134
+ * Options for write operations
135
+ */
136
+ export interface WriteOptions {
137
+ /** Target tier for the write */
138
+ tier?: StorageTier
139
+ /** Custom metadata to attach */
140
+ metadata?: Record<string, string>
141
+ /** Whether to also write to hotter tiers for immediate availability */
142
+ writeThrough?: boolean
143
+ }
144
+
145
+ /**
146
+ * Configuration for TieredVFS
147
+ */
148
+ export interface TieredVFSConfig {
149
+ /** Cache layer for hot tier */
150
+ cacheLayer: CacheLayer
151
+ /** Durable Object storage for warm tier */
152
+ doStorage: DurableObjectStorage
153
+ /** R2 layer for cold tier */
154
+ r2Layer: R2StorageLayer
155
+ /** Page size in bytes (typically 8KB for PGLite) */
156
+ pageSize: number
157
+ /** Number of accesses before promoting to hotter tier */
158
+ promotionThreshold?: number
159
+ /** Whether to auto-promote on read from cold tiers */
160
+ autoPromote?: boolean
161
+ /** Number of consecutive failures before marking tier unavailable */
162
+ failureThreshold?: number
163
+ /** Time in ms before attempting unavailable tier again */
164
+ recoveryTimeMs?: number
165
+ /** Maximum number of failure events to keep in history */
166
+ maxFailureHistory?: number
167
+ }
168
+
169
+ /**
170
+ * Combined statistics from all tiers
171
+ */
172
+ export interface TieredVFSStats {
173
+ /** Cache layer statistics */
174
+ cache: CacheLayerStats
175
+ /** R2 layer statistics */
176
+ r2: R2StorageLayerStats
177
+ /** DO storage statistics (tracked internally) */
178
+ do: {
179
+ reads: number
180
+ writes: number
181
+ deletes: number
182
+ bytesRead: number
183
+ bytesWritten: number
184
+ }
185
+ /** Promotion statistics */
186
+ promotions: {
187
+ coldToWarm: number
188
+ warmToHot: number
189
+ }
190
+ /** Demotion statistics */
191
+ demotions: {
192
+ hotToWarm: number
193
+ warmToCold: number
194
+ }
195
+ /** Current tier health status */
196
+ tierHealth: TierHealthStatus
197
+ }
198
+
199
+ /**
200
+ * Promotion event data
201
+ */
202
+ export interface PromotionEvent {
203
+ key: string
204
+ fromTier: StorageTier
205
+ toTier: StorageTier
206
+ timestamp: number
207
+ success: boolean
208
+ error?: string
209
+ }
210
+
211
+ /**
212
+ * Callback for tier events
213
+ */
214
+ export type TierEventCallback = (event: PromotionEvent) => void
215
+
216
+ /**
217
+ * Result of delete operation
218
+ */
219
+ export interface DeleteResult {
220
+ /** Whether delete succeeded on all tiers */
221
+ success: boolean
222
+ /** Tiers where delete failed */
223
+ failedTiers: StorageTier[]
224
+ }
225
+
226
+ /**
227
+ * TieredVFS combines Cache, DO Storage, and R2 into a unified storage layer.
228
+ *
229
+ * Read path: Cache (hot) -> DO (warm) -> R2 (cold)
230
+ * Write path: Configurable target tier, default to DO (warm)
231
+ *
232
+ * Features:
233
+ * - Automatic promotion based on access patterns
234
+ * - Graceful degradation when tiers fail
235
+ * - Circuit breaker pattern for unavailable tiers
236
+ * - Comprehensive statistics including tier health
237
+ *
238
+ * @example
239
+ * ```typescript
240
+ * const tieredVFS = createTieredVFS({
241
+ * cacheLayer,
242
+ * doStorage: ctx.storage,
243
+ * r2Layer,
244
+ * pageSize: 8192,
245
+ * promotionThreshold: 3,
246
+ * autoPromote: true,
247
+ * failureThreshold: 3,
248
+ * recoveryTimeMs: 30000,
249
+ * })
250
+ *
251
+ * // Read with automatic tiered lookup and graceful degradation
252
+ * const page = await tieredVFS.readPage('page-123')
253
+ *
254
+ * // Write to warm tier (default)
255
+ * await tieredVFS.writePage('page-456', data)
256
+ *
257
+ * // Check tier health
258
+ * const health = tieredVFS.getTierHealth()
259
+ * console.log('Hot tier status:', health.hot)
260
+ * ```
261
+ */
262
+ export class TieredVFS {
263
+ private cacheLayer: CacheLayer
264
+ private doStorage: DurableObjectStorage
265
+ private r2Layer: R2StorageLayer
266
+ private pageSize: number
267
+ private promotionThreshold: number
268
+ private autoPromote: boolean
269
+ private failureThreshold: number
270
+ private recoveryTimeMs: number
271
+ private maxFailureHistory: number
272
+
273
+ private doStats: {
274
+ reads: number
275
+ writes: number
276
+ deletes: number
277
+ bytesRead: number
278
+ bytesWritten: number
279
+ }
280
+ private promotionStats: {
281
+ coldToWarm: number
282
+ warmToHot: number
283
+ }
284
+ private demotionStats: {
285
+ hotToWarm: number
286
+ warmToCold: number
287
+ }
288
+ private accessCounts: Map<string, number>
289
+ private onPromotionCallback?: TierEventCallback
290
+ private onDemotionCallback?: TierEventCallback
291
+
292
+ // Graceful degradation state
293
+ private tierHealth: Record<StorageTier, TierHealth>
294
+ private consecutiveFailures: Record<StorageTier, number>
295
+ private lastFailureTime: Record<StorageTier, number>
296
+ private failureCounts: Record<StorageTier, number>
297
+ private recentFailures: TierFailure[]
298
+ private failureCallbacks: TierFailureCallback[]
299
+
300
+ constructor(config: TieredVFSConfig) {
301
+ this.cacheLayer = config.cacheLayer
302
+ this.doStorage = config.doStorage
303
+ this.r2Layer = config.r2Layer
304
+ this.pageSize = config.pageSize
305
+ this.promotionThreshold = config.promotionThreshold ?? DEFAULT_PROMOTION_THRESHOLD
306
+ this.autoPromote = config.autoPromote ?? false
307
+ this.failureThreshold = config.failureThreshold ?? DEFAULT_FAILURE_THRESHOLD
308
+ this.recoveryTimeMs = config.recoveryTimeMs ?? DEFAULT_RECOVERY_TIME_MS
309
+ this.maxFailureHistory = config.maxFailureHistory ?? DEFAULT_MAX_FAILURE_HISTORY
310
+
311
+ this.doStats = {
312
+ reads: 0,
313
+ writes: 0,
314
+ deletes: 0,
315
+ bytesRead: 0,
316
+ bytesWritten: 0,
317
+ }
318
+ this.promotionStats = {
319
+ coldToWarm: 0,
320
+ warmToHot: 0,
321
+ }
322
+ this.demotionStats = {
323
+ hotToWarm: 0,
324
+ warmToCold: 0,
325
+ }
326
+ this.accessCounts = new Map()
327
+
328
+ // Initialize graceful degradation state
329
+ this.tierHealth = { hot: 'healthy', warm: 'healthy', cold: 'healthy' }
330
+ this.consecutiveFailures = { hot: 0, warm: 0, cold: 0 }
331
+ this.lastFailureTime = { hot: 0, warm: 0, cold: 0 }
332
+ this.failureCounts = { hot: 0, warm: 0, cold: 0 }
333
+ this.recentFailures = []
334
+ this.failureCallbacks = []
335
+ }
336
+
337
+ /**
338
+ * Set callback for promotion events
339
+ */
340
+ onPromotion(callback: TierEventCallback): void {
341
+ this.onPromotionCallback = callback
342
+ }
343
+
344
+ /**
345
+ * Set callback for demotion events
346
+ */
347
+ onDemotion(callback: TierEventCallback): void {
348
+ this.onDemotionCallback = callback
349
+ }
350
+
351
+ /**
352
+ * Set callback for tier failure events
353
+ */
354
+ onTierFailure(callback: TierFailureCallback): void {
355
+ this.failureCallbacks.push(callback)
356
+ }
357
+
358
+ /**
359
+ * Record a failure for a tier (updates health tracking)
360
+ */
361
+ private recordFailure(tier: StorageTier, operation: TierFailure['operation'], error: unknown, key?: string): void {
362
+ const failure: TierFailure = {
363
+ tier,
364
+ timestamp: Date.now(),
365
+ error: error instanceof Error ? error.message : String(error),
366
+ operation,
367
+ key,
368
+ }
369
+
370
+ this.consecutiveFailures[tier]++
371
+ this.failureCounts[tier]++
372
+ this.lastFailureTime[tier] = failure.timestamp
373
+ this.recentFailures.push(failure)
374
+
375
+ // Trim failure history
376
+ if (this.recentFailures.length > this.maxFailureHistory) {
377
+ this.recentFailures.shift()
378
+ }
379
+
380
+ // Update health status
381
+ if (this.consecutiveFailures[tier] >= this.failureThreshold) {
382
+ this.tierHealth[tier] = 'unavailable'
383
+ } else {
384
+ this.tierHealth[tier] = 'degraded'
385
+ }
386
+
387
+ // Notify callbacks
388
+ for (const cb of this.failureCallbacks) {
389
+ try {
390
+ cb(failure)
391
+ } catch {
392
+ // Don't let callback errors break the flow
393
+ }
394
+ }
395
+ }
396
+
397
+ /**
398
+ * Record a success for a tier (resets consecutive failures)
399
+ */
400
+ private recordSuccess(tier: StorageTier): void {
401
+ this.consecutiveFailures[tier] = 0
402
+ this.tierHealth[tier] = 'healthy'
403
+ }
404
+
405
+ /**
406
+ * Check if a tier should be attempted (based on health)
407
+ */
408
+ private shouldAttemptTier(tier: StorageTier): boolean {
409
+ const health = this.tierHealth[tier]
410
+ if (health === 'healthy' || health === 'degraded') {
411
+ return true
412
+ }
413
+ // Tier is unavailable - check if recovery time has passed
414
+ return Date.now() - this.lastFailureTime[tier] >= this.recoveryTimeMs
415
+ }
416
+
417
+ /**
418
+ * Increment access count and check if promotion is needed
419
+ */
420
+ private trackAccess(key: string): number {
421
+ const count = (this.accessCounts.get(key) ?? 0) + 1
422
+ this.accessCounts.set(key, count)
423
+ return count
424
+ }
425
+
426
+ /**
427
+ * Reset access count for a key
428
+ */
429
+ private resetAccessCount(key: string): void {
430
+ this.accessCounts.delete(key)
431
+ }
432
+
433
+ /**
434
+ * Read a page from the tiered storage
435
+ *
436
+ * Checks tiers in order: hot (Cache) -> warm (DO) -> cold (R2)
437
+ * Gracefully degrades when tiers fail.
438
+ * Optionally promotes pages to hotter tiers based on access patterns.
439
+ *
440
+ * @param key - The page key
441
+ * @param options - Read options
442
+ * @returns The page data or null if not found
443
+ */
444
+ async readPage(key: string, options?: ReadOptions): Promise<Uint8Array | null> {
445
+ const trackAccess = options?.trackAccess ?? true
446
+ const skipPromotion = options?.skipPromotion ?? false
447
+
448
+ // Try hot tier (Cache) first
449
+ if (this.shouldAttemptTier('hot')) {
450
+ try {
451
+ const cached = await this.cacheLayer.get(key)
452
+ if (cached) {
453
+ this.recordSuccess('hot')
454
+ if (trackAccess) {
455
+ this.trackAccess(key)
456
+ }
457
+ return cached
458
+ }
459
+ } catch (error) {
460
+ this.recordFailure('hot', 'read', error, key)
461
+ }
462
+ }
463
+
464
+ // Try warm tier (DO Storage)
465
+ if (this.shouldAttemptTier('warm')) {
466
+ try {
467
+ const doData = (await this.doStorage.get(key)) as Uint8Array | undefined
468
+ if (doData) {
469
+ this.doStats.reads++
470
+ this.doStats.bytesRead += doData.length
471
+ this.recordSuccess('warm')
472
+
473
+ if (trackAccess) {
474
+ const accessCount = this.trackAccess(key)
475
+
476
+ // Check for promotion to hot tier
477
+ if (!skipPromotion && this.autoPromote && accessCount >= this.promotionThreshold) {
478
+ await this.promoteToHot(key, doData)
479
+ }
480
+ }
481
+
482
+ return doData
483
+ }
484
+ } catch (error) {
485
+ this.recordFailure('warm', 'read', error, key)
486
+ }
487
+ }
488
+
489
+ // Try cold tier (R2)
490
+ if (this.shouldAttemptTier('cold')) {
491
+ try {
492
+ const r2Data = await this.r2Layer.get(key)
493
+ if (r2Data) {
494
+ this.recordSuccess('cold')
495
+
496
+ if (trackAccess) {
497
+ const accessCount = this.trackAccess(key)
498
+
499
+ // Check for promotion to warm tier
500
+ if (!skipPromotion && this.autoPromote && accessCount >= this.promotionThreshold) {
501
+ await this.promoteToWarm(key, r2Data)
502
+ }
503
+ }
504
+
505
+ return r2Data
506
+ }
507
+ } catch (error) {
508
+ this.recordFailure('cold', 'read', error, key)
509
+ }
510
+ }
511
+
512
+ return null
513
+ }
514
+
515
+ /**
516
+ * Read a page and return which tier it was found in
517
+ *
518
+ * @param key - The page key
519
+ * @returns The page data and location, or null if not found
520
+ */
521
+ async readPageWithLocation(
522
+ key: string
523
+ ): Promise<{ data: Uint8Array; tier: StorageTier } | null> {
524
+ // Try hot tier (Cache) first
525
+ if (this.shouldAttemptTier('hot')) {
526
+ try {
527
+ const cached = await this.cacheLayer.get(key)
528
+ if (cached) {
529
+ this.recordSuccess('hot')
530
+ return { data: cached, tier: 'hot' }
531
+ }
532
+ } catch (error) {
533
+ this.recordFailure('hot', 'read', error, key)
534
+ }
535
+ }
536
+
537
+ // Try warm tier (DO Storage)
538
+ if (this.shouldAttemptTier('warm')) {
539
+ try {
540
+ const doData = (await this.doStorage.get(key)) as Uint8Array | undefined
541
+ if (doData) {
542
+ this.doStats.reads++
543
+ this.doStats.bytesRead += doData.length
544
+ this.recordSuccess('warm')
545
+ return { data: doData, tier: 'warm' }
546
+ }
547
+ } catch (error) {
548
+ this.recordFailure('warm', 'read', error, key)
549
+ }
550
+ }
551
+
552
+ // Try cold tier (R2)
553
+ if (this.shouldAttemptTier('cold')) {
554
+ try {
555
+ const r2Data = await this.r2Layer.get(key)
556
+ if (r2Data) {
557
+ this.recordSuccess('cold')
558
+ return { data: r2Data, tier: 'cold' }
559
+ }
560
+ } catch (error) {
561
+ this.recordFailure('cold', 'read', error, key)
562
+ }
563
+ }
564
+
565
+ return null
566
+ }
567
+
568
+ /**
569
+ * Write a page to the tiered storage
570
+ *
571
+ * By default writes to warm tier (DO Storage).
572
+ * Can optionally write to hot (Cache) or cold (R2) tiers.
573
+ * Supports graceful degradation with fallback to other tiers.
574
+ *
575
+ * @param key - The page key
576
+ * @param data - The page data
577
+ * @param options - Write options
578
+ */
579
+ async writePage(key: string, data: Uint8Array, options?: WriteOptions): Promise<void> {
580
+ const tier = options?.tier ?? 'warm'
581
+ const errors: Error[] = []
582
+
583
+ if (tier === 'hot') {
584
+ // Write to both DO (for persistence) and Cache (for speed)
585
+ let persistSuccess = false
586
+
587
+ if (this.shouldAttemptTier('warm')) {
588
+ try {
589
+ await this.doStorage.put(key, data)
590
+ this.doStats.writes++
591
+ this.doStats.bytesWritten += data.length
592
+ this.recordSuccess('warm')
593
+ persistSuccess = true
594
+ } catch (error) {
595
+ this.recordFailure('warm', 'write', error, key)
596
+ errors.push(error instanceof Error ? error : new Error(String(error)))
597
+ }
598
+ }
599
+
600
+ if (this.shouldAttemptTier('hot')) {
601
+ try {
602
+ await this.cacheLayer.put(key, data, {
603
+ lastAccessed: Date.now(),
604
+ accessCount: 1,
605
+ })
606
+ this.recordSuccess('hot')
607
+ } catch (error) {
608
+ this.recordFailure('hot', 'write', error, key)
609
+ }
610
+ }
611
+
612
+ // Fallback to cold tier if warm failed
613
+ if (!persistSuccess && this.shouldAttemptTier('cold')) {
614
+ try {
615
+ await this.r2Layer.put(key, data, {
616
+ customMetadata: options?.metadata,
617
+ })
618
+ this.recordSuccess('cold')
619
+ return
620
+ } catch (error) {
621
+ this.recordFailure('cold', 'write', error, key)
622
+ errors.push(error instanceof Error ? error : new Error(String(error)))
623
+ }
624
+ }
625
+
626
+ if (!persistSuccess && errors.length > 0) {
627
+ throw new Error('Failed to write to any tier: ' + errors.map(e => e.message).join('; '))
628
+ }
629
+
630
+ // Optionally write through to cold tier for durability
631
+ if (persistSuccess && options?.writeThrough) {
632
+ try {
633
+ await this.r2Layer.put(key, data, {
634
+ customMetadata: options?.metadata,
635
+ })
636
+ } catch {
637
+ // Don't fail on write-through errors
638
+ }
639
+ }
640
+ } else if (tier === 'warm') {
641
+ // Try warm tier first
642
+ if (this.shouldAttemptTier('warm')) {
643
+ try {
644
+ await this.doStorage.put(key, data)
645
+ this.doStats.writes++
646
+ this.doStats.bytesWritten += data.length
647
+ this.recordSuccess('warm')
648
+
649
+ // Optionally write through to cold tier for durability
650
+ if (options?.writeThrough) {
651
+ try {
652
+ await this.r2Layer.put(key, data, {
653
+ customMetadata: options?.metadata,
654
+ })
655
+ } catch {
656
+ // Don't fail on write-through errors
657
+ }
658
+ }
659
+ return
660
+ } catch (error) {
661
+ this.recordFailure('warm', 'write', error, key)
662
+ errors.push(error instanceof Error ? error : new Error(String(error)))
663
+ }
664
+ }
665
+
666
+ // Fallback to cold tier
667
+ if (this.shouldAttemptTier('cold')) {
668
+ try {
669
+ await this.r2Layer.put(key, data, {
670
+ customMetadata: options?.metadata,
671
+ })
672
+ this.recordSuccess('cold')
673
+ return
674
+ } catch (error) {
675
+ this.recordFailure('cold', 'write', error, key)
676
+ errors.push(error instanceof Error ? error : new Error(String(error)))
677
+ }
678
+ }
679
+
680
+ if (errors.length > 0) {
681
+ throw new Error('Failed to write to any tier: ' + errors.map(e => e.message).join('; '))
682
+ }
683
+ } else {
684
+ // Cold tier - try cold first
685
+ if (this.shouldAttemptTier('cold')) {
686
+ try {
687
+ await this.r2Layer.put(key, data, {
688
+ customMetadata: options?.metadata,
689
+ })
690
+ this.recordSuccess('cold')
691
+ return
692
+ } catch (error) {
693
+ this.recordFailure('cold', 'write', error, key)
694
+ errors.push(error instanceof Error ? error : new Error(String(error)))
695
+ }
696
+ }
697
+
698
+ // Fallback to warm tier
699
+ if (this.shouldAttemptTier('warm')) {
700
+ try {
701
+ await this.doStorage.put(key, data)
702
+ this.doStats.writes++
703
+ this.doStats.bytesWritten += data.length
704
+ this.recordSuccess('warm')
705
+ return
706
+ } catch (error) {
707
+ this.recordFailure('warm', 'write', error, key)
708
+ errors.push(error instanceof Error ? error : new Error(String(error)))
709
+ }
710
+ }
711
+
712
+ if (errors.length > 0) {
713
+ throw new Error('Failed to write to any tier: ' + errors.map(e => e.message).join('; '))
714
+ }
715
+ }
716
+ }
717
+
718
+ /**
719
+ * Delete a page from all tiers
720
+ *
721
+ * @param key - The page key
722
+ * @returns Result indicating success and any failed tiers
723
+ */
724
+ async deletePage(key: string): Promise<DeleteResult> {
725
+ const failedTiers: StorageTier[] = []
726
+
727
+ // Delete from hot tier (Cache)
728
+ if (this.shouldAttemptTier('hot')) {
729
+ try {
730
+ await this.cacheLayer.delete(key)
731
+ this.recordSuccess('hot')
732
+ } catch (error) {
733
+ this.recordFailure('hot', 'delete', error, key)
734
+ failedTiers.push('hot')
735
+ }
736
+ }
737
+
738
+ // Delete from warm tier (DO)
739
+ if (this.shouldAttemptTier('warm')) {
740
+ try {
741
+ await this.doStorage.delete(key)
742
+ this.doStats.deletes++
743
+ this.recordSuccess('warm')
744
+ } catch (error) {
745
+ this.recordFailure('warm', 'delete', error, key)
746
+ failedTiers.push('warm')
747
+ }
748
+ }
749
+
750
+ // Delete from cold tier (R2)
751
+ if (this.shouldAttemptTier('cold')) {
752
+ try {
753
+ await this.r2Layer.delete(key)
754
+ this.recordSuccess('cold')
755
+ } catch (error) {
756
+ this.recordFailure('cold', 'delete', error, key)
757
+ failedTiers.push('cold')
758
+ }
759
+ }
760
+
761
+ // Clear access tracking
762
+ this.resetAccessCount(key)
763
+
764
+ return {
765
+ success: failedTiers.length === 0,
766
+ failedTiers,
767
+ }
768
+ }
769
+
770
+ /**
771
+ * Delete multiple pages from all tiers
772
+ *
773
+ * @param keys - The page keys to delete
774
+ * @returns Array of delete results
775
+ */
776
+ async deletePages(keys: string[]): Promise<DeleteResult[]> {
777
+ return Promise.all(keys.map((key) => this.deletePage(key)))
778
+ }
779
+
780
+ /**
781
+ * Locate which tier a page is stored in
782
+ *
783
+ * @param key - The page key
784
+ * @returns Location information
785
+ */
786
+ async locatePage(key: string): Promise<PageLocation> {
787
+ // Check hot tier
788
+ if (this.shouldAttemptTier('hot')) {
789
+ try {
790
+ const inCache = await this.cacheLayer.has(key)
791
+ if (inCache) {
792
+ this.recordSuccess('hot')
793
+ return { tier: 'hot', found: true, key }
794
+ }
795
+ } catch (error) {
796
+ this.recordFailure('hot', 'check', error, key)
797
+ }
798
+ }
799
+
800
+ // Check warm tier
801
+ if (this.shouldAttemptTier('warm')) {
802
+ try {
803
+ const doData = (await this.doStorage.get(key)) as Uint8Array | undefined
804
+ if (doData) {
805
+ this.recordSuccess('warm')
806
+ return { tier: 'warm', found: true, key }
807
+ }
808
+ } catch (error) {
809
+ this.recordFailure('warm', 'check', error, key)
810
+ }
811
+ }
812
+
813
+ // Check cold tier
814
+ if (this.shouldAttemptTier('cold')) {
815
+ try {
816
+ const inR2 = await this.r2Layer.has(key)
817
+ if (inR2) {
818
+ this.recordSuccess('cold')
819
+ return { tier: 'cold', found: true, key }
820
+ }
821
+ } catch (error) {
822
+ this.recordFailure('cold', 'check', error, key)
823
+ }
824
+ }
825
+
826
+ return { found: false, key }
827
+ }
828
+
829
+ /**
830
+ * Promote a page from cold (R2) to warm (DO) tier
831
+ *
832
+ * @param key - The page key
833
+ * @param data - The page data (optional, will be fetched if not provided)
834
+ */
835
+ async promoteToWarm(key: string, data?: Uint8Array): Promise<void> {
836
+ const pageData = data ?? (await this.r2Layer.get(key))
837
+ if (!pageData) {
838
+ return
839
+ }
840
+
841
+ const event: PromotionEvent = {
842
+ key,
843
+ fromTier: 'cold',
844
+ toTier: 'warm',
845
+ timestamp: Date.now(),
846
+ success: false,
847
+ }
848
+
849
+ try {
850
+ await this.doStorage.put(key, pageData)
851
+ this.doStats.writes++
852
+ this.doStats.bytesWritten += pageData.length
853
+ this.promotionStats.coldToWarm++
854
+ this.resetAccessCount(key)
855
+ event.success = true
856
+ } catch (error) {
857
+ event.error = error instanceof Error ? error.message : 'Unknown error'
858
+ }
859
+
860
+ this.onPromotionCallback?.(event)
861
+ }
862
+
863
+ /**
864
+ * Promote a page from warm (DO) to hot (Cache) tier
865
+ *
866
+ * @param key - The page key
867
+ * @param data - The page data (optional, will be fetched if not provided)
868
+ */
869
+ async promoteToHot(key: string, data?: Uint8Array): Promise<void> {
870
+ const pageData = data ?? ((await this.doStorage.get(key)) as Uint8Array | undefined)
871
+ if (!pageData) {
872
+ return
873
+ }
874
+
875
+ const event: PromotionEvent = {
876
+ key,
877
+ fromTier: 'warm',
878
+ toTier: 'hot',
879
+ timestamp: Date.now(),
880
+ success: false,
881
+ }
882
+
883
+ try {
884
+ await this.cacheLayer.put(key, pageData, {
885
+ lastAccessed: Date.now(),
886
+ accessCount: this.accessCounts.get(key) ?? 1,
887
+ })
888
+ this.promotionStats.warmToHot++
889
+ this.resetAccessCount(key)
890
+ event.success = true
891
+ } catch (error) {
892
+ event.error = error instanceof Error ? error.message : 'Unknown error'
893
+ }
894
+
895
+ this.onPromotionCallback?.(event)
896
+ }
897
+
898
+ /**
899
+ * Demote a page from hot (Cache) to warm (DO) tier
900
+ *
901
+ * @param key - The page key
902
+ */
903
+ async demoteFromHot(key: string): Promise<void> {
904
+ const event: PromotionEvent = {
905
+ key,
906
+ fromTier: 'hot',
907
+ toTier: 'warm',
908
+ timestamp: Date.now(),
909
+ success: false,
910
+ }
911
+
912
+ try {
913
+ // Just delete from cache - data should already be in DO
914
+ await this.cacheLayer.delete(key)
915
+ this.demotionStats.hotToWarm++
916
+ event.success = true
917
+ } catch (error) {
918
+ event.error = error instanceof Error ? error.message : 'Unknown error'
919
+ }
920
+
921
+ this.onDemotionCallback?.(event)
922
+ }
923
+
924
+ /**
925
+ * Demote a page from warm (DO) to cold (R2) tier
926
+ *
927
+ * @param key - The page key
928
+ */
929
+ async demoteFromWarm(key: string): Promise<void> {
930
+ const event: PromotionEvent = {
931
+ key,
932
+ fromTier: 'warm',
933
+ toTier: 'cold',
934
+ timestamp: Date.now(),
935
+ success: false,
936
+ }
937
+
938
+ try {
939
+ // Copy to R2, then delete from DO
940
+ const data = (await this.doStorage.get(key)) as Uint8Array | undefined
941
+ if (data) {
942
+ await this.r2Layer.put(key, data, {
943
+ customMetadata: {
944
+ demotedAt: Date.now().toString(),
945
+ },
946
+ })
947
+ await this.doStorage.delete(key)
948
+ this.doStats.deletes++
949
+ this.demotionStats.warmToCold++
950
+ event.success = true
951
+ }
952
+ } catch (error) {
953
+ event.error = error instanceof Error ? error.message : 'Unknown error'
954
+ }
955
+
956
+ this.onDemotionCallback?.(event)
957
+ }
958
+
959
+ /**
960
+ * Get tier health status
961
+ *
962
+ * @returns Current health status for all tiers
963
+ */
964
+ getTierHealth(): TierHealthStatus {
965
+ return {
966
+ hot: this.tierHealth.hot,
967
+ warm: this.tierHealth.warm,
968
+ cold: this.tierHealth.cold,
969
+ recentFailures: [...this.recentFailures],
970
+ failureCounts: { ...this.failureCounts },
971
+ }
972
+ }
973
+
974
+ /**
975
+ * Reset health status for a specific tier
976
+ *
977
+ * @param tier - The tier to reset
978
+ */
979
+ resetTierHealth(tier: StorageTier): void {
980
+ this.consecutiveFailures[tier] = 0
981
+ this.tierHealth[tier] = 'healthy'
982
+ this.lastFailureTime[tier] = 0
983
+ }
984
+
985
+ /**
986
+ * Reset health status for all tiers
987
+ */
988
+ resetAllTierHealth(): void {
989
+ this.resetTierHealth('hot')
990
+ this.resetTierHealth('warm')
991
+ this.resetTierHealth('cold')
992
+ }
993
+
994
+ /**
995
+ * Clear failure history and failure counts
996
+ */
997
+ clearFailureHistory(): void {
998
+ this.recentFailures = []
999
+ this.failureCounts = { hot: 0, warm: 0, cold: 0 }
1000
+ }
1001
+
1002
+ /**
1003
+ * Get combined statistics from all tiers
1004
+ */
1005
+ getStats(): TieredVFSStats {
1006
+ return {
1007
+ cache: this.cacheLayer.getStats(),
1008
+ r2: this.r2Layer.getStats(),
1009
+ do: { ...this.doStats },
1010
+ promotions: { ...this.promotionStats },
1011
+ demotions: { ...this.demotionStats },
1012
+ tierHealth: this.getTierHealth(),
1013
+ }
1014
+ }
1015
+
1016
+ /**
1017
+ * Reset all statistics
1018
+ */
1019
+ resetStats(): void {
1020
+ this.doStats = {
1021
+ reads: 0,
1022
+ writes: 0,
1023
+ deletes: 0,
1024
+ bytesRead: 0,
1025
+ bytesWritten: 0,
1026
+ }
1027
+ this.promotionStats = {
1028
+ coldToWarm: 0,
1029
+ warmToHot: 0,
1030
+ }
1031
+ this.demotionStats = {
1032
+ hotToWarm: 0,
1033
+ warmToCold: 0,
1034
+ }
1035
+ this.accessCounts.clear()
1036
+ }
1037
+
1038
+ /**
1039
+ * Get the configured page size
1040
+ */
1041
+ getPageSize(): number {
1042
+ return this.pageSize
1043
+ }
1044
+
1045
+ /**
1046
+ * Get the access count for a key
1047
+ */
1048
+ getAccessCount(key: string): number {
1049
+ return this.accessCounts.get(key) ?? 0
1050
+ }
1051
+
1052
+ /**
1053
+ * Get the promotion threshold
1054
+ */
1055
+ getPromotionThreshold(): number {
1056
+ return this.promotionThreshold
1057
+ }
1058
+
1059
+ /**
1060
+ * Set the promotion threshold
1061
+ */
1062
+ setPromotionThreshold(threshold: number): void {
1063
+ this.promotionThreshold = threshold
1064
+ }
1065
+
1066
+ /**
1067
+ * Enable or disable auto-promotion
1068
+ */
1069
+ setAutoPromote(enabled: boolean): void {
1070
+ this.autoPromote = enabled
1071
+ }
1072
+ }
1073
+
1074
+ /**
1075
+ * Create a new TieredVFS instance
1076
+ *
1077
+ * @param config - Configuration for the tiered VFS
1078
+ * @returns A configured TieredVFS instance
1079
+ */
1080
+ export function createTieredVFS(config: TieredVFSConfig): TieredVFS {
1081
+ return new TieredVFS(config)
1082
+ }