@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,934 @@
1
+ /**
2
+ * Iceberg Snapshot Management and Compaction
3
+ * Task: postgres-iyx - Snapshot management and compaction
4
+ *
5
+ * Provides snapshot lifecycle management and data compaction for Iceberg tables:
6
+ * - Snapshot listing and metadata retrieval
7
+ * - Snapshot expiration/retention
8
+ * - File compaction (merge small files)
9
+ * - Orphan file cleanup
10
+ * - Manifest rewriting for optimization
11
+ * - Background compaction scheduling
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const manager = createSnapshotManager({
16
+ * bucket: env.ICEBERG_BUCKET,
17
+ * tablePath: 'iceberg/my-table',
18
+ * })
19
+ *
20
+ * await manager.initialize()
21
+ *
22
+ * // List snapshots
23
+ * const snapshots = manager.listSnapshots()
24
+ *
25
+ * // Expire old snapshots
26
+ * await manager.expireSnapshots({
27
+ * maxAgeDays: 30,
28
+ * minSnapshotsToRetain: 5,
29
+ * })
30
+ *
31
+ * // Compact small files
32
+ * await manager.compactFiles({
33
+ * minFileSizeBytes: 10 * 1024 * 1024, // 10 MB
34
+ * maxFilesPerCompaction: 100,
35
+ * })
36
+ *
37
+ * // Cleanup orphan files
38
+ * await manager.cleanupOrphanFiles()
39
+ * ```
40
+ */
41
+ import { IcebergMetadataBuilder, ManifestBuilder, ManifestListBuilder, generateMetadataFileName, generateManifestFileName, generateManifestListFileName, } from './metadata';
42
+ import { createLogger, LogLevel } from '@dotdo/postgres-shared';
43
+ // Module-level logger for snapshot manager errors
44
+ const snapshotLogger = createLogger({
45
+ level: LogLevel.ERROR,
46
+ prefix: '[SnapshotManager]',
47
+ });
48
+ // ========== Default Configuration ==========
49
+ const DEFAULT_RETENTION = {
50
+ maxAgeDays: 30,
51
+ minSnapshotsToRetain: 5,
52
+ maxSnapshotsToRetain: 100,
53
+ retainSnapshotIds: [],
54
+ };
55
+ const DEFAULT_COMPACTION = {
56
+ minFileSizeBytes: 10 * 1024 * 1024, // 10 MB
57
+ maxFilesPerCompaction: 100,
58
+ maxInputSizeBytes: 1024 * 1024 * 1024, // 1 GB
59
+ targetFileSizeBytes: 128 * 1024 * 1024, // 128 MB
60
+ strategy: 'bin-pack',
61
+ partitionFilter: {},
62
+ minFilesToCompact: 5,
63
+ };
64
+ // ========== Snapshot Manager Class ==========
65
+ /**
66
+ * Iceberg Snapshot Manager
67
+ *
68
+ * Manages snapshot lifecycle including expiration, compaction, and cleanup.
69
+ */
70
+ export class SnapshotManager {
71
+ bucket;
72
+ tablePath;
73
+ metadata = null;
74
+ metadataBuilder = null;
75
+ metadataVersion = 0;
76
+ initialized = false;
77
+ stats = {
78
+ totalSnapshotsExpired: 0,
79
+ totalCompactions: 0,
80
+ totalBytesFreedExpiration: 0,
81
+ totalBytesSavedCompaction: 0,
82
+ totalOrphanFilesCleaned: 0,
83
+ lastExpirationAt: null,
84
+ lastCompactionAt: null,
85
+ lastCleanupAt: null,
86
+ };
87
+ constructor(config) {
88
+ this.bucket = config.bucket;
89
+ this.tablePath = config.tablePath.replace(/\/$/, '');
90
+ // state is accepted for future use but not currently utilized
91
+ void config.state;
92
+ }
93
+ /**
94
+ * Initialize the snapshot manager
95
+ */
96
+ async initialize() {
97
+ if (this.initialized) {
98
+ return;
99
+ }
100
+ await this.loadMetadata();
101
+ this.initialized = true;
102
+ }
103
+ /**
104
+ * Ensure initialized
105
+ */
106
+ ensureInitialized() {
107
+ if (!this.initialized) {
108
+ throw new Error('SnapshotManager not initialized. Call initialize() first.');
109
+ }
110
+ }
111
+ /**
112
+ * Load table metadata from R2
113
+ */
114
+ async loadMetadata() {
115
+ // Try version hint first
116
+ const versionHint = await this.bucket.get(`${this.tablePath}/metadata/version-hint.text`);
117
+ if (versionHint) {
118
+ this.metadataVersion = parseInt(await versionHint.text(), 10);
119
+ const metadataPath = `${this.tablePath}/metadata/v${this.metadataVersion}.metadata.json`;
120
+ const metadataObj = await this.bucket.get(metadataPath);
121
+ if (metadataObj) {
122
+ this.metadata = JSON.parse(await metadataObj.text());
123
+ this.metadataBuilder = IcebergMetadataBuilder.fromMetadata(this.metadata);
124
+ return;
125
+ }
126
+ }
127
+ // Fall back to listing metadata files
128
+ const list = await this.bucket.list({
129
+ prefix: `${this.tablePath}/metadata/`,
130
+ });
131
+ const metadataFiles = list.objects
132
+ .filter((obj) => obj.key.endsWith('.metadata.json'))
133
+ .sort((a, b) => {
134
+ const versionA = parseInt(a.key.match(/v(\d+)\.metadata\.json/)?.[1] ?? '0', 10);
135
+ const versionB = parseInt(b.key.match(/v(\d+)\.metadata\.json/)?.[1] ?? '0', 10);
136
+ return versionB - versionA;
137
+ });
138
+ if (metadataFiles.length > 0 && metadataFiles[0]) {
139
+ const metadataObj = await this.bucket.get(metadataFiles[0].key);
140
+ if (metadataObj) {
141
+ this.metadata = JSON.parse(await metadataObj.text());
142
+ this.metadataBuilder = IcebergMetadataBuilder.fromMetadata(this.metadata);
143
+ this.metadataVersion = parseInt(metadataFiles[0].key.match(/v(\d+)\.metadata\.json/)?.[1] ?? '0', 10);
144
+ }
145
+ }
146
+ }
147
+ /**
148
+ * Refresh metadata from R2
149
+ */
150
+ async refreshMetadata() {
151
+ this.initialized = false;
152
+ this.metadata = null;
153
+ this.metadataBuilder = null;
154
+ await this.initialize();
155
+ }
156
+ // ========== Snapshot Listing and Metadata ==========
157
+ /**
158
+ * List all snapshots with computed metadata
159
+ */
160
+ listSnapshots() {
161
+ this.ensureInitialized();
162
+ if (!this.metadata?.snapshots) {
163
+ return [];
164
+ }
165
+ const now = Date.now();
166
+ return this.metadata.snapshots.map((snapshot) => this.snapshotToInfo(snapshot, now));
167
+ }
168
+ /**
169
+ * Get a specific snapshot by ID
170
+ */
171
+ getSnapshot(snapshotId) {
172
+ this.ensureInitialized();
173
+ const snapshot = this.metadata?.snapshots?.find((s) => s['snapshot-id'] === snapshotId);
174
+ if (!snapshot) {
175
+ return null;
176
+ }
177
+ return this.snapshotToInfo(snapshot, Date.now());
178
+ }
179
+ /**
180
+ * Get the current snapshot
181
+ */
182
+ getCurrentSnapshot() {
183
+ this.ensureInitialized();
184
+ if (!this.metadata?.['current-snapshot-id']) {
185
+ return null;
186
+ }
187
+ return this.getSnapshot(this.metadata['current-snapshot-id']);
188
+ }
189
+ /**
190
+ * Get snapshot ancestry (parent chain)
191
+ */
192
+ getSnapshotAncestry(snapshotId) {
193
+ this.ensureInitialized();
194
+ const ancestry = [];
195
+ let currentId = snapshotId;
196
+ while (currentId !== undefined) {
197
+ const snapshot = this.getSnapshot(currentId);
198
+ if (!snapshot) {
199
+ break;
200
+ }
201
+ ancestry.push(snapshot);
202
+ currentId = snapshot.parentSnapshotId;
203
+ }
204
+ return ancestry;
205
+ }
206
+ /**
207
+ * Convert IcebergSnapshot to SnapshotInfo
208
+ */
209
+ snapshotToInfo(snapshot, now) {
210
+ const summary = snapshot.summary;
211
+ return {
212
+ snapshotId: snapshot['snapshot-id'],
213
+ parentSnapshotId: snapshot['parent-snapshot-id'],
214
+ sequenceNumber: snapshot['sequence-number'],
215
+ timestampMs: snapshot['timestamp-ms'],
216
+ operation: summary.operation,
217
+ summary: {
218
+ addedDataFiles: parseInt(summary['added-data-files'] ?? '0', 10),
219
+ deletedDataFiles: parseInt(summary['deleted-data-files'] ?? '0', 10),
220
+ addedRecords: parseInt(summary['added-records'] ?? '0', 10),
221
+ deletedRecords: parseInt(summary['deleted-records'] ?? '0', 10),
222
+ totalRecords: parseInt(summary['total-records'] ?? '0', 10),
223
+ totalFilesSize: parseInt(summary['total-files-size'] ?? '0', 10),
224
+ },
225
+ manifestListPath: snapshot['manifest-list'],
226
+ schemaId: snapshot['schema-id'] ?? 0,
227
+ ageMs: now - snapshot['timestamp-ms'],
228
+ };
229
+ }
230
+ // ========== Snapshot Expiration ==========
231
+ /**
232
+ * Expire old snapshots based on retention policy
233
+ */
234
+ async expireSnapshots(config = {}) {
235
+ this.ensureInitialized();
236
+ const startTime = performance.now();
237
+ const retention = { ...DEFAULT_RETENTION, ...config };
238
+ if (!this.metadata?.snapshots || this.metadata.snapshots.length === 0) {
239
+ return {
240
+ snapshotsExpired: 0,
241
+ expiredSnapshotIds: [],
242
+ manifestsRemoved: 0,
243
+ manifestListsRemoved: 0,
244
+ metadataBytesFreed: 0,
245
+ durationMs: performance.now() - startTime,
246
+ };
247
+ }
248
+ const now = Date.now();
249
+ const maxAgeMs = retention.maxAgeDays * 24 * 60 * 60 * 1000;
250
+ const currentSnapshotId = this.metadata['current-snapshot-id'];
251
+ // Identify snapshots to expire
252
+ const snapshots = [...this.metadata.snapshots];
253
+ const snapshotsToKeep = [];
254
+ const snapshotsToExpire = [];
255
+ // Sort by timestamp (newest first) for minSnapshots logic
256
+ snapshots.sort((a, b) => b['timestamp-ms'] - a['timestamp-ms']);
257
+ for (let i = 0; i < snapshots.length; i++) {
258
+ const snapshot = snapshots[i];
259
+ const age = now - snapshot['timestamp-ms'];
260
+ const isCurrentSnapshot = snapshot['snapshot-id'] === currentSnapshotId;
261
+ const isRetainedById = retention.retainSnapshotIds.includes(snapshot['snapshot-id']);
262
+ const withinMinSnapshots = i < retention.minSnapshotsToRetain;
263
+ const withinMaxAge = age <= maxAgeMs;
264
+ const beyondMaxSnapshots = i >= retention.maxSnapshotsToRetain;
265
+ if (isCurrentSnapshot || isRetainedById || (withinMinSnapshots && !beyondMaxSnapshots)) {
266
+ snapshotsToKeep.push(snapshot);
267
+ }
268
+ else if (!withinMaxAge || beyondMaxSnapshots) {
269
+ snapshotsToExpire.push(snapshot);
270
+ }
271
+ else {
272
+ snapshotsToKeep.push(snapshot);
273
+ }
274
+ }
275
+ if (snapshotsToExpire.length === 0) {
276
+ return {
277
+ snapshotsExpired: 0,
278
+ expiredSnapshotIds: [],
279
+ manifestsRemoved: 0,
280
+ manifestListsRemoved: 0,
281
+ metadataBytesFreed: 0,
282
+ durationMs: performance.now() - startTime,
283
+ };
284
+ }
285
+ // Collect manifest lists and manifests to delete
286
+ const manifestListsToDelete = [];
287
+ const manifestsToDelete = new Set();
288
+ let metadataBytesFreed = 0;
289
+ // Get manifests referenced by snapshots to keep
290
+ const keptManifests = new Set();
291
+ for (const snapshot of snapshotsToKeep) {
292
+ const manifests = await this.loadManifestsFromList(snapshot['manifest-list']);
293
+ for (const manifest of manifests) {
294
+ keptManifests.add(manifest['manifest-path']);
295
+ }
296
+ }
297
+ // Identify manifest lists and manifests to delete
298
+ for (const snapshot of snapshotsToExpire) {
299
+ manifestListsToDelete.push(snapshot['manifest-list']);
300
+ const manifests = await this.loadManifestsFromList(snapshot['manifest-list']);
301
+ for (const manifest of manifests) {
302
+ // Only delete if not referenced by a kept snapshot
303
+ if (!keptManifests.has(manifest['manifest-path'])) {
304
+ manifestsToDelete.add(manifest['manifest-path']);
305
+ metadataBytesFreed += manifest['manifest-length'];
306
+ }
307
+ }
308
+ }
309
+ // Delete manifest files
310
+ for (const manifestPath of manifestsToDelete) {
311
+ try {
312
+ await this.bucket.delete(manifestPath);
313
+ }
314
+ catch (error) {
315
+ snapshotLogger.error('Failed to delete manifest', { manifestPath, error: error instanceof Error ? error.message : String(error) });
316
+ }
317
+ }
318
+ // Delete manifest lists
319
+ for (const manifestListPath of manifestListsToDelete) {
320
+ try {
321
+ const obj = await this.bucket.head(manifestListPath);
322
+ if (obj) {
323
+ metadataBytesFreed += obj.size;
324
+ }
325
+ await this.bucket.delete(manifestListPath);
326
+ }
327
+ catch (error) {
328
+ snapshotLogger.error('Failed to delete manifest list', { manifestListPath, error: error instanceof Error ? error.message : String(error) });
329
+ }
330
+ }
331
+ // Update metadata with remaining snapshots
332
+ await this.updateMetadataWithSnapshots(snapshotsToKeep);
333
+ // Update stats
334
+ const result = {
335
+ snapshotsExpired: snapshotsToExpire.length,
336
+ expiredSnapshotIds: snapshotsToExpire.map((s) => s['snapshot-id']),
337
+ manifestsRemoved: manifestsToDelete.size,
338
+ manifestListsRemoved: manifestListsToDelete.length,
339
+ metadataBytesFreed,
340
+ durationMs: performance.now() - startTime,
341
+ };
342
+ this.stats.totalSnapshotsExpired += result.snapshotsExpired;
343
+ this.stats.totalBytesFreedExpiration += result.metadataBytesFreed;
344
+ this.stats.lastExpirationAt = Date.now();
345
+ return result;
346
+ }
347
+ /**
348
+ * Load manifests from a manifest list
349
+ */
350
+ async loadManifestsFromList(manifestListPath) {
351
+ try {
352
+ const obj = await this.bucket.get(manifestListPath);
353
+ if (!obj) {
354
+ return [];
355
+ }
356
+ const data = JSON.parse(await obj.text());
357
+ return data.manifests ?? [];
358
+ }
359
+ catch (error) {
360
+ snapshotLogger.error('Failed to load manifest list', { manifestListPath, error: error instanceof Error ? error.message : String(error) });
361
+ return [];
362
+ }
363
+ }
364
+ /**
365
+ * Update metadata with new snapshot list
366
+ */
367
+ async updateMetadataWithSnapshots(snapshots) {
368
+ if (!this.metadata || !this.metadataBuilder) {
369
+ throw new Error('Metadata not loaded');
370
+ }
371
+ // Sort snapshots by timestamp
372
+ snapshots.sort((a, b) => a['timestamp-ms'] - b['timestamp-ms']);
373
+ // Create new metadata
374
+ const newMetadata = {
375
+ ...this.metadata,
376
+ 'last-updated-ms': Date.now(),
377
+ snapshots: snapshots,
378
+ 'snapshot-log': snapshots.map((s) => ({
379
+ 'timestamp-ms': s['timestamp-ms'],
380
+ 'snapshot-id': s['snapshot-id'],
381
+ })),
382
+ };
383
+ // Update current snapshot if needed
384
+ if (newMetadata['current-snapshot-id'] !== undefined &&
385
+ !snapshots.some((s) => s['snapshot-id'] === newMetadata['current-snapshot-id'])) {
386
+ // Current snapshot was expired, set to latest
387
+ const latestSnapshot = snapshots[snapshots.length - 1];
388
+ if (latestSnapshot) {
389
+ newMetadata['current-snapshot-id'] = latestSnapshot['snapshot-id'];
390
+ }
391
+ else {
392
+ delete newMetadata['current-snapshot-id'];
393
+ }
394
+ }
395
+ // Write new metadata version
396
+ this.metadataVersion++;
397
+ const metadataFileName = generateMetadataFileName(this.metadataVersion);
398
+ const metadataPath = `${this.tablePath}/metadata/${metadataFileName}`;
399
+ await this.bucket.put(metadataPath, JSON.stringify(newMetadata, null, 2), {
400
+ httpMetadata: { contentType: 'application/json' },
401
+ });
402
+ // Update version hint
403
+ await this.bucket.put(`${this.tablePath}/metadata/version-hint.text`, String(this.metadataVersion), { httpMetadata: { contentType: 'text/plain' } });
404
+ // Update internal state
405
+ this.metadata = newMetadata;
406
+ this.metadataBuilder = IcebergMetadataBuilder.fromMetadata(newMetadata);
407
+ }
408
+ // ========== File Compaction ==========
409
+ /**
410
+ * Analyze file statistics for compaction decisions
411
+ */
412
+ async analyzeFileStatistics(threshold = DEFAULT_COMPACTION.minFileSizeBytes) {
413
+ this.ensureInitialized();
414
+ const dataFiles = await this.getAllDataFiles();
415
+ const filesByPartition = new Map();
416
+ let totalSize = 0;
417
+ let minSize = Infinity;
418
+ let maxSize = 0;
419
+ let smallFileCount = 0;
420
+ let smallFilesSize = 0;
421
+ for (const file of dataFiles) {
422
+ const size = file['file-size-in-bytes'];
423
+ totalSize += size;
424
+ minSize = Math.min(minSize, size);
425
+ maxSize = Math.max(maxSize, size);
426
+ if (size < threshold) {
427
+ smallFileCount++;
428
+ smallFilesSize += size;
429
+ }
430
+ // Extract partition path
431
+ const partitionPath = this.extractPartitionPath(file['file-path']);
432
+ filesByPartition.set(partitionPath, (filesByPartition.get(partitionPath) ?? 0) + 1);
433
+ }
434
+ return {
435
+ totalFiles: dataFiles.length,
436
+ totalSizeBytes: totalSize,
437
+ avgFileSizeBytes: dataFiles.length > 0 ? totalSize / dataFiles.length : 0,
438
+ minFileSizeBytes: minSize === Infinity ? 0 : minSize,
439
+ maxFileSizeBytes: maxSize,
440
+ smallFileCount,
441
+ smallFilesSizeBytes: smallFilesSize,
442
+ filesByPartition,
443
+ };
444
+ }
445
+ /**
446
+ * Check if compaction should be triggered
447
+ */
448
+ async shouldCompact(config = {}) {
449
+ const compactionConfig = { ...DEFAULT_COMPACTION, ...config };
450
+ const stats = await this.analyzeFileStatistics(compactionConfig.minFileSizeBytes);
451
+ // Check file count threshold
452
+ if (stats.smallFileCount < compactionConfig.minFilesToCompact) {
453
+ return {
454
+ shouldCompact: false,
455
+ reason: `Small file count (${stats.smallFileCount}) below threshold (${compactionConfig.minFilesToCompact})`,
456
+ priority: 0,
457
+ estimatedBenefit: 0,
458
+ };
459
+ }
460
+ // Calculate compaction benefit
461
+ const avgSmallFileSize = stats.smallFileCount > 0
462
+ ? stats.smallFilesSizeBytes / stats.smallFileCount
463
+ : 0;
464
+ const targetFileCount = Math.ceil(stats.smallFilesSizeBytes / compactionConfig.targetFileSizeBytes);
465
+ const estimatedOutputFiles = Math.max(targetFileCount, 1);
466
+ const fileReduction = stats.smallFileCount - estimatedOutputFiles;
467
+ // Priority based on file count and size ratio
468
+ const fileCountRatio = stats.smallFileCount / stats.totalFiles;
469
+ const sizeRatio = avgSmallFileSize / compactionConfig.targetFileSizeBytes;
470
+ const priority = Math.min(100, Math.round((fileCountRatio * 50) + ((1 - sizeRatio) * 50)));
471
+ return {
472
+ shouldCompact: true,
473
+ reason: `${stats.smallFileCount} small files (${formatBytes(stats.smallFilesSizeBytes)}) can be compacted`,
474
+ priority,
475
+ estimatedBenefit: fileReduction * 1000, // Rough estimate of metadata savings per file
476
+ };
477
+ }
478
+ /**
479
+ * Compact small files
480
+ *
481
+ * Note: Full compaction requires reading and rewriting Parquet files.
482
+ * This implementation tracks which files should be compacted and creates
483
+ * a new snapshot with the compaction metadata. Actual file rewriting
484
+ * would require Parquet library support.
485
+ */
486
+ async compactFiles(config = {}) {
487
+ this.ensureInitialized();
488
+ const startTime = performance.now();
489
+ const compactionConfig = { ...DEFAULT_COMPACTION, ...config };
490
+ // Get all small files
491
+ const allDataFiles = await this.getAllDataFiles();
492
+ const smallFiles = allDataFiles.filter((f) => f['file-size-in-bytes'] < compactionConfig.minFileSizeBytes);
493
+ // Group by partition
494
+ const filesByPartition = new Map();
495
+ for (const file of smallFiles) {
496
+ const partitionPath = this.extractPartitionPath(file['file-path']);
497
+ // Apply partition filter if specified
498
+ if (Object.keys(compactionConfig.partitionFilter).length > 0) {
499
+ const matches = this.matchesPartitionFilter(file.partition, compactionConfig.partitionFilter);
500
+ if (!matches) {
501
+ continue;
502
+ }
503
+ }
504
+ const files = filesByPartition.get(partitionPath) ?? [];
505
+ files.push(file);
506
+ filesByPartition.set(partitionPath, files);
507
+ }
508
+ // Calculate compaction groups
509
+ const compactionGroups = [];
510
+ for (const [partition, files] of filesByPartition) {
511
+ if (files.length < compactionConfig.minFilesToCompact) {
512
+ continue;
513
+ }
514
+ // Sort by size (ascending) for bin-packing
515
+ files.sort((a, b) => a['file-size-in-bytes'] - b['file-size-in-bytes']);
516
+ // Create groups respecting maxFilesPerCompaction and maxInputSizeBytes
517
+ let currentGroup = [];
518
+ let currentSize = 0;
519
+ for (const file of files) {
520
+ if (currentGroup.length >= compactionConfig.maxFilesPerCompaction ||
521
+ currentSize + file['file-size-in-bytes'] > compactionConfig.maxInputSizeBytes) {
522
+ if (currentGroup.length >= compactionConfig.minFilesToCompact) {
523
+ compactionGroups.push({
524
+ partition,
525
+ files: currentGroup,
526
+ totalSize: currentSize,
527
+ });
528
+ }
529
+ currentGroup = [];
530
+ currentSize = 0;
531
+ }
532
+ currentGroup.push(file);
533
+ currentSize += file['file-size-in-bytes'];
534
+ }
535
+ // Add remaining files
536
+ if (currentGroup.length >= compactionConfig.minFilesToCompact) {
537
+ compactionGroups.push({
538
+ partition,
539
+ files: currentGroup,
540
+ totalSize: currentSize,
541
+ });
542
+ }
543
+ }
544
+ if (compactionGroups.length === 0) {
545
+ return {
546
+ inputFileCount: 0,
547
+ outputFileCount: 0,
548
+ inputSizeBytes: 0,
549
+ outputSizeBytes: 0,
550
+ sizeReductionBytes: 0,
551
+ recordsProcessed: 0,
552
+ partitionsCompacted: 0,
553
+ snapshot: null,
554
+ durationMs: performance.now() - startTime,
555
+ };
556
+ }
557
+ // Calculate totals
558
+ let totalInputFiles = 0;
559
+ let totalInputSize = 0;
560
+ let totalRecords = 0;
561
+ const partitionsCompacted = new Set();
562
+ for (const group of compactionGroups) {
563
+ totalInputFiles += group.files.length;
564
+ totalInputSize += group.totalSize;
565
+ partitionsCompacted.add(group.partition);
566
+ for (const file of group.files) {
567
+ totalRecords += file['record-count'];
568
+ }
569
+ }
570
+ // Create compaction snapshot
571
+ // Note: In a full implementation, this would:
572
+ // 1. Read all input Parquet files
573
+ // 2. Merge and write new Parquet files
574
+ // 3. Create manifest with DELETED entries for old files and ADDED for new
575
+ // For now, we create a metadata-only compaction marker
576
+ const snapshot = await this.createCompactionSnapshot(compactionGroups, compactionConfig.targetFileSizeBytes);
577
+ // Calculate output estimates
578
+ const estimatedOutputFiles = compactionGroups.reduce((sum, group) => {
579
+ return sum + Math.ceil(group.totalSize / compactionConfig.targetFileSizeBytes);
580
+ }, 0);
581
+ const result = {
582
+ inputFileCount: totalInputFiles,
583
+ outputFileCount: estimatedOutputFiles,
584
+ inputSizeBytes: totalInputSize,
585
+ outputSizeBytes: totalInputSize, // In reality would be slightly different
586
+ sizeReductionBytes: 0, // Actual reduction from file consolidation
587
+ recordsProcessed: totalRecords,
588
+ partitionsCompacted: partitionsCompacted.size,
589
+ snapshot,
590
+ durationMs: performance.now() - startTime,
591
+ };
592
+ this.stats.totalCompactions++;
593
+ this.stats.totalBytesSavedCompaction += result.sizeReductionBytes;
594
+ this.stats.lastCompactionAt = Date.now();
595
+ return result;
596
+ }
597
+ /**
598
+ * Create a compaction snapshot
599
+ */
600
+ async createCompactionSnapshot(compactionGroups, _targetFileSizeBytes) {
601
+ if (!this.metadata || !this.metadataBuilder) {
602
+ return null;
603
+ }
604
+ const snapshotId = Date.now() * 1000 + Math.floor(Math.random() * 1000);
605
+ const sequenceNumber = this.metadataBuilder.getSequenceNumber() + 1;
606
+ const partitionSpecId = this.metadata['default-spec-id'];
607
+ // Create manifest builder for compaction
608
+ const manifestBuilder = new ManifestBuilder({
609
+ partitionSpecId,
610
+ sequenceNumber,
611
+ snapshotId,
612
+ });
613
+ // Mark old files as deleted, add placeholder for compacted files
614
+ let totalDeletedFiles = 0;
615
+ let totalDeletedRecords = 0;
616
+ for (const group of compactionGroups) {
617
+ for (const file of group.files) {
618
+ manifestBuilder.deleteDataFile(file);
619
+ totalDeletedFiles++;
620
+ totalDeletedRecords += file['record-count'];
621
+ }
622
+ // In a real implementation, we would add the newly compacted files here
623
+ // For now, we just mark the intent to compact
624
+ }
625
+ // Write manifest
626
+ const manifestFileName = generateManifestFileName(snapshotId);
627
+ const manifestPath = `${this.tablePath}/metadata/${manifestFileName}`;
628
+ const manifestContent = manifestBuilder.toJSON();
629
+ const manifestBytes = new TextEncoder().encode(manifestContent);
630
+ await this.bucket.put(manifestPath, manifestBytes, {
631
+ httpMetadata: { contentType: 'application/json' },
632
+ });
633
+ const manifestFileMetadata = manifestBuilder.createManifestFileMetadata(manifestPath, manifestBytes.length);
634
+ // Create manifest list
635
+ const manifestListBuilder = new ManifestListBuilder(snapshotId, sequenceNumber);
636
+ manifestListBuilder.addManifest(manifestFileMetadata);
637
+ // Include existing manifests
638
+ const currentSnapshot = this.metadata.snapshots?.find((s) => s['snapshot-id'] === this.metadata['current-snapshot-id']);
639
+ if (currentSnapshot) {
640
+ const existingManifests = await this.loadManifestsFromList(currentSnapshot['manifest-list']);
641
+ for (const manifest of existingManifests) {
642
+ manifestListBuilder.addManifest(manifest);
643
+ }
644
+ }
645
+ // Write manifest list
646
+ const manifestListFileName = generateManifestListFileName(snapshotId);
647
+ const manifestListPath = `${this.tablePath}/metadata/${manifestListFileName}`;
648
+ const manifestListContent = manifestListBuilder.toJSON();
649
+ const manifestListBytes = new TextEncoder().encode(manifestListContent);
650
+ await this.bucket.put(manifestListPath, manifestListBytes, {
651
+ httpMetadata: { contentType: 'application/json' },
652
+ });
653
+ // Create snapshot
654
+ const summary = {
655
+ operation: 'replace',
656
+ 'added-data-files': '0',
657
+ 'deleted-data-files': String(totalDeletedFiles),
658
+ 'added-records': '0',
659
+ 'deleted-records': String(totalDeletedRecords),
660
+ 'compaction-type': 'bin-pack',
661
+ };
662
+ const snapshot = {
663
+ 'snapshot-id': snapshotId,
664
+ ...(this.metadata['current-snapshot-id'] !== undefined && {
665
+ 'parent-snapshot-id': this.metadata['current-snapshot-id'],
666
+ }),
667
+ 'sequence-number': sequenceNumber,
668
+ 'timestamp-ms': Date.now(),
669
+ 'manifest-list': manifestListPath,
670
+ summary,
671
+ 'schema-id': this.metadata['current-schema-id'],
672
+ };
673
+ // Update metadata
674
+ const newSnapshots = [...(this.metadata.snapshots ?? []), snapshot];
675
+ await this.updateMetadataWithSnapshots(newSnapshots);
676
+ return snapshot;
677
+ }
678
+ // ========== Orphan File Cleanup ==========
679
+ /**
680
+ * Find and clean up orphan files
681
+ *
682
+ * Orphan files are data files that exist in R2 but are not referenced
683
+ * by any manifest in any snapshot.
684
+ */
685
+ async cleanupOrphanFiles(dryRun = false) {
686
+ this.ensureInitialized();
687
+ const startTime = performance.now();
688
+ // Get all referenced data files from all snapshots
689
+ const referencedFiles = new Set();
690
+ if (this.metadata?.snapshots) {
691
+ for (const snapshot of this.metadata.snapshots) {
692
+ const manifests = await this.loadManifestsFromList(snapshot['manifest-list']);
693
+ for (const manifest of manifests) {
694
+ const entries = await this.loadManifestEntries(manifest['manifest-path']);
695
+ for (const entry of entries) {
696
+ // Only count EXISTING and ADDED files (not DELETED)
697
+ if (entry.status !== 2) {
698
+ referencedFiles.add(entry['data-file']['file-path']);
699
+ }
700
+ }
701
+ }
702
+ }
703
+ }
704
+ // List all data files in R2
705
+ const orphanFiles = [];
706
+ let cursor;
707
+ do {
708
+ const listOptions = {
709
+ prefix: `${this.tablePath}/data/`,
710
+ limit: 1000,
711
+ };
712
+ if (cursor) {
713
+ listOptions.cursor = cursor;
714
+ }
715
+ const result = await this.bucket.list(listOptions);
716
+ for (const obj of result.objects) {
717
+ if (obj.key.endsWith('.parquet') && !referencedFiles.has(obj.key)) {
718
+ orphanFiles.push({ key: obj.key, size: obj.size });
719
+ }
720
+ }
721
+ cursor = result.truncated ? result.cursor : undefined;
722
+ } while (cursor);
723
+ // Delete orphan files (unless dry run)
724
+ let bytesFreed = 0;
725
+ const deletedPaths = [];
726
+ if (!dryRun) {
727
+ for (const orphan of orphanFiles) {
728
+ try {
729
+ await this.bucket.delete(orphan.key);
730
+ bytesFreed += orphan.size;
731
+ deletedPaths.push(orphan.key);
732
+ }
733
+ catch (error) {
734
+ snapshotLogger.error('Failed to delete orphan file', { key: orphan.key, error: error instanceof Error ? error.message : String(error) });
735
+ }
736
+ }
737
+ }
738
+ else {
739
+ bytesFreed = orphanFiles.reduce((sum, f) => sum + f.size, 0);
740
+ }
741
+ const result = {
742
+ orphanFilesFound: orphanFiles.length,
743
+ orphanFilesDeleted: dryRun ? 0 : deletedPaths.length,
744
+ orphanFilePaths: orphanFiles.map((f) => f.key),
745
+ bytesFreed,
746
+ durationMs: performance.now() - startTime,
747
+ };
748
+ if (!dryRun) {
749
+ this.stats.totalOrphanFilesCleaned += result.orphanFilesDeleted;
750
+ this.stats.lastCleanupAt = Date.now();
751
+ }
752
+ return result;
753
+ }
754
+ /**
755
+ * Load manifest entries from a manifest file
756
+ */
757
+ async loadManifestEntries(manifestPath) {
758
+ try {
759
+ const obj = await this.bucket.get(manifestPath);
760
+ if (!obj) {
761
+ return [];
762
+ }
763
+ const data = JSON.parse(await obj.text());
764
+ return data.entries ?? [];
765
+ }
766
+ catch (error) {
767
+ snapshotLogger.error('Failed to load manifest', { manifestPath, error: error instanceof Error ? error.message : String(error) });
768
+ return [];
769
+ }
770
+ }
771
+ /**
772
+ * Get all data files from the current snapshot
773
+ */
774
+ async getAllDataFiles() {
775
+ if (!this.metadata?.['current-snapshot-id']) {
776
+ return [];
777
+ }
778
+ const currentSnapshot = this.metadata.snapshots?.find((s) => s['snapshot-id'] === this.metadata['current-snapshot-id']);
779
+ if (!currentSnapshot) {
780
+ return [];
781
+ }
782
+ const dataFiles = [];
783
+ const manifests = await this.loadManifestsFromList(currentSnapshot['manifest-list']);
784
+ for (const manifest of manifests) {
785
+ if (manifest.content !== 0) {
786
+ continue; // Skip delete manifests
787
+ }
788
+ const entries = await this.loadManifestEntries(manifest['manifest-path']);
789
+ for (const entry of entries) {
790
+ // Only include EXISTING (0) and ADDED (1) files
791
+ if (entry.status !== 2) {
792
+ dataFiles.push(entry['data-file']);
793
+ }
794
+ }
795
+ }
796
+ return dataFiles;
797
+ }
798
+ /**
799
+ * Extract partition path from file path
800
+ */
801
+ extractPartitionPath(filePath) {
802
+ const dataIndex = filePath.indexOf('/data/');
803
+ if (dataIndex === -1) {
804
+ return '';
805
+ }
806
+ const afterData = filePath.substring(dataIndex + 6); // Skip '/data/'
807
+ const lastSlash = afterData.lastIndexOf('/');
808
+ if (lastSlash === -1) {
809
+ return '';
810
+ }
811
+ return afterData.substring(0, lastSlash);
812
+ }
813
+ /**
814
+ * Check if partition values match filter
815
+ */
816
+ matchesPartitionFilter(partition, filter) {
817
+ for (const [key, value] of Object.entries(filter)) {
818
+ if (partition[key] !== value) {
819
+ return false;
820
+ }
821
+ }
822
+ return true;
823
+ }
824
+ // ========== Utility Methods ==========
825
+ /**
826
+ * Get manager statistics
827
+ */
828
+ getStats() {
829
+ return { ...this.stats };
830
+ }
831
+ /**
832
+ * Get the table metadata
833
+ */
834
+ getMetadata() {
835
+ return this.metadata;
836
+ }
837
+ /**
838
+ * Get the table path
839
+ */
840
+ getTablePath() {
841
+ return this.tablePath;
842
+ }
843
+ /**
844
+ * Get the current metadata version
845
+ */
846
+ getMetadataVersion() {
847
+ return this.metadataVersion;
848
+ }
849
+ }
850
+ // ========== Factory Function ==========
851
+ /**
852
+ * Create a snapshot manager
853
+ */
854
+ export function createSnapshotManager(config) {
855
+ return new SnapshotManager(config);
856
+ }
857
+ // ========== Utility Functions ==========
858
+ /**
859
+ * Format bytes as human-readable string
860
+ */
861
+ function formatBytes(bytes) {
862
+ const units = ['B', 'KB', 'MB', 'GB', 'TB'];
863
+ let unitIndex = 0;
864
+ let value = bytes;
865
+ while (value >= 1024 && unitIndex < units.length - 1) {
866
+ value /= 1024;
867
+ unitIndex++;
868
+ }
869
+ return `${value.toFixed(2)} ${units[unitIndex]}`;
870
+ }
871
+ /**
872
+ * Compaction scheduler for background maintenance
873
+ *
874
+ * Can be used with Durable Object alarms for scheduled maintenance.
875
+ */
876
+ export class CompactionScheduler {
877
+ manager;
878
+ checkIntervalMs;
879
+ compactionConfig;
880
+ retentionConfig;
881
+ enableOrphanCleanup;
882
+ orphanCleanupIntervalMs;
883
+ lastOrphanCleanup = 0;
884
+ constructor(config) {
885
+ this.manager = config.manager;
886
+ this.checkIntervalMs = config.checkIntervalMs ?? 60 * 60 * 1000; // 1 hour
887
+ this.compactionConfig = config.compactionConfig ?? {};
888
+ this.retentionConfig = config.retentionConfig ?? {};
889
+ this.enableOrphanCleanup = config.enableOrphanCleanup ?? true;
890
+ this.orphanCleanupIntervalMs = config.orphanCleanupIntervalMs ?? 24 * 60 * 60 * 1000; // 24 hours
891
+ }
892
+ /**
893
+ * Run scheduled maintenance
894
+ *
895
+ * This method should be called periodically (e.g., from a DO alarm).
896
+ */
897
+ async runMaintenance() {
898
+ await this.manager.initialize();
899
+ // Expire old snapshots
900
+ const expirationResult = await this.manager.expireSnapshots(this.retentionConfig);
901
+ // Check if compaction is needed
902
+ let compactionResult = null;
903
+ const triggerResult = await this.manager.shouldCompact(this.compactionConfig);
904
+ if (triggerResult.shouldCompact) {
905
+ compactionResult = await this.manager.compactFiles(this.compactionConfig);
906
+ }
907
+ // Run orphan cleanup if enabled and due
908
+ let cleanupResult = null;
909
+ const now = Date.now();
910
+ if (this.enableOrphanCleanup &&
911
+ now - this.lastOrphanCleanup >= this.orphanCleanupIntervalMs) {
912
+ cleanupResult = await this.manager.cleanupOrphanFiles();
913
+ this.lastOrphanCleanup = now;
914
+ }
915
+ return {
916
+ expirationResult,
917
+ compactionResult,
918
+ cleanupResult,
919
+ };
920
+ }
921
+ /**
922
+ * Get the check interval
923
+ */
924
+ getCheckIntervalMs() {
925
+ return this.checkIntervalMs;
926
+ }
927
+ }
928
+ /**
929
+ * Create a compaction scheduler
930
+ */
931
+ export function createCompactionScheduler(config) {
932
+ return new CompactionScheduler(config);
933
+ }
934
+ //# sourceMappingURL=snapshot-manager.js.map