@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,1260 @@
1
+ /**
2
+ * Cold Start Manager - Durable Object Lifecycle Integration
3
+ *
4
+ * This module provides lifecycle-aware cold start optimization for PGLite
5
+ * running in Cloudflare Durable Objects. It integrates with DO hibernation
6
+ * to minimize latency across the full request lifecycle.
7
+ *
8
+ * ## Overview
9
+ *
10
+ * Durable Objects have a unique lifecycle:
11
+ * 1. **Cold start**: First request creates new DO, full initialization required
12
+ * 2. **Warm requests**: Subsequent requests reuse initialized state
13
+ * 3. **Hibernation**: After inactivity, DO hibernates to save resources
14
+ * 4. **Wake**: Request to hibernated DO triggers wake sequence
15
+ *
16
+ * The ColdStartManager optimizes each phase:
17
+ *
18
+ * ```
19
+ * ┌──────────────────────────────────────────────────────────────────────┐
20
+ * │ Durable Object Lifecycle │
21
+ * ├──────────────────────────────────────────────────────────────────────┤
22
+ * │ │
23
+ * │ Request → [Cold Start] → [Warm Requests] → [Hibernation] → Wake │
24
+ * │ ↓ ↓ ↓ ↓ │
25
+ * │ 1500ms <50ms persist <10ms │
26
+ * │ state │
27
+ * └──────────────────────────────────────────────────────────────────────┘
28
+ * ```
29
+ *
30
+ * ## Performance Targets
31
+ *
32
+ * | Scenario | p50 Target | p95 Target | Notes |
33
+ * |----------|------------|------------|-------|
34
+ * | Cold start | < 800ms | < 1500ms | First request, full init |
35
+ * | Warm request | < 10ms | < 50ms | Cached PGLite instance |
36
+ * | Hibernation wake | < 5ms | < 10ms | Optimized state restore |
37
+ * | Hot storage access | < 1ms | < 10ms | DO SQLite, synchronous |
38
+ *
39
+ * ## Key Features
40
+ *
41
+ * ### 1. Optimized Hibernation Wake
42
+ *
43
+ * When a DO wakes from hibernation, the manager restores state from
44
+ * persisted storage WITHOUT reinitializing PGLite. PGLite initialization
45
+ * is deferred to the first actual query, achieving sub-10ms wake times.
46
+ *
47
+ * ### 2. Hot Page Tracking
48
+ *
49
+ * The manager tracks frequently accessed database pages (tables) and
50
+ * can prefetch them during initialization, reducing first-query latency.
51
+ *
52
+ * ### 3. Cumulative Metrics
53
+ *
54
+ * Metrics are accumulated across hibernation cycles, providing visibility
55
+ * into long-term performance trends.
56
+ *
57
+ * ### 4. Prefetch Strategies
58
+ *
59
+ * Configure prefetch behavior based on your workload:
60
+ * - `none`: No prefetching (lowest memory)
61
+ * - `hot-only`: Only prefetch HOT tier data
62
+ * - `hot-warm`: Prefetch HOT and WARM tiers (recommended)
63
+ * - `aggressive`: Prefetch all tiers in parallel
64
+ *
65
+ * ## Architecture
66
+ *
67
+ * ```
68
+ * ┌─────────────────────────────────────────────────────────────────────┐
69
+ * │ ColdStartManager │
70
+ * ├─────────────────────────────────────────────────────────────────────┤
71
+ * │ │
72
+ * │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
73
+ * │ │ Hibernation │ │ Hot Page │ │ Cumulative │ │
74
+ * │ │ State │────│ Tracking │────│ Metrics │ │
75
+ * │ └─────────────┘ └─────────────┘ └─────────────┘ │
76
+ * │ │ │ │ │
77
+ * │ ▼ ▼ ▼ │
78
+ * │ ┌─────────────────────────────────────────────────────┐ │
79
+ * │ │ ColdStartOptimizer │ │
80
+ * │ │ (WASM caching, parallel fetch, lazy init) │ │
81
+ * │ └─────────────────────────────────────────────────────┘ │
82
+ * │ │ │
83
+ * │ ▼ │
84
+ * │ ┌─────────────────────────────────────────────────────┐ │
85
+ * │ │ PGLite │ │
86
+ * │ └─────────────────────────────────────────────────────┘ │
87
+ * └─────────────────────────────────────────────────────────────────────┘
88
+ * ```
89
+ *
90
+ * ## Usage
91
+ *
92
+ * ```typescript
93
+ * import pgliteWasm from './pglite.wasm'
94
+ * import { createColdStartManager } from '@dotdo/postgres/pglite'
95
+ *
96
+ * export class MyDurableObject {
97
+ * private coldStartManager: ColdStartManager
98
+ *
99
+ * constructor(ctx: DurableObjectState, env: Env) {
100
+ * this.coldStartManager = createColdStartManager({
101
+ * databaseId: ctx.id.toString(),
102
+ * wasmModule: pgliteWasm,
103
+ * doStorage: ctx.storage,
104
+ * r2Bucket: env.R2_BUCKET,
105
+ * prefetchStrategy: 'hot-warm',
106
+ * })
107
+ * }
108
+ *
109
+ * async fetch(request: Request) {
110
+ * // Optimized wake - sub-10ms even from hibernation
111
+ * await this.coldStartManager.ensureReady()
112
+ *
113
+ * // First query triggers lazy PGLite init
114
+ * const result = await this.coldStartManager.query('SELECT * FROM users')
115
+ * return new Response(JSON.stringify(result.rows))
116
+ * }
117
+ *
118
+ * async alarm() {
119
+ * // Persist state before hibernation
120
+ * await this.coldStartManager.prepareHibernation()
121
+ * }
122
+ * }
123
+ * ```
124
+ *
125
+ * @module pglite/cold-start-manager
126
+ * @see {@link ColdStartOptimizer} for low-level optimization
127
+ * @see {@link TieredVFS} for storage tier details
128
+ * @issue postgres-m9rp
129
+ */
130
+
131
+ import type { PGlite, PGliteOptions } from '@dotdo/pglite'
132
+ import type { CacheLayer } from './cache-layer'
133
+ import type { R2StorageLayer } from './r2-layer'
134
+ import type {
135
+ ColdStartOptimizer,
136
+ ColdStartConfig,
137
+ ColdStartMetrics,
138
+ ColdStartPhase,
139
+ } from './cold-start-optimizer'
140
+ import { createColdStartOptimizer, clearWasmCache, getWasmCacheStats } from './cold-start-optimizer'
141
+
142
+ // ============================================================================
143
+ // Types
144
+ // ============================================================================
145
+
146
+ /**
147
+ * Hibernation state persisted to DO storage for quick recovery
148
+ *
149
+ * This state is saved when the DO hibernates and restored on wake,
150
+ * allowing sub-10ms recovery without full PGLite reinitialization.
151
+ *
152
+ * ## Persisted Data
153
+ *
154
+ * - Database metadata (ID, size, data source)
155
+ * - Cumulative performance metrics
156
+ * - Hot page list for prefetch optimization
157
+ * - Schema checksum for validation
158
+ *
159
+ * ## Storage Keys
160
+ *
161
+ * State is stored in DO SQLite using configurable key prefix:
162
+ * - `{prefix}hibernate_state` - Main hibernation state
163
+ * - `{prefix}hot_pages` - List of frequently accessed pages
164
+ *
165
+ * @example
166
+ * ```typescript
167
+ * // Prepare hibernation before DO sleeps
168
+ * const state = await manager.prepareHibernation()
169
+ * console.log(`Hibernating with ${state.hotPages.length} hot pages`)
170
+ *
171
+ * // Wake from hibernation (in new isolate)
172
+ * const result = await manager.wakeFromHibernation(state)
173
+ * console.log(`Woke in ${result.wakeTimeMs}ms`)
174
+ * ```
175
+ */
176
+ export interface ColdStartHibernateState {
177
+ /** Database ID for cache keying */
178
+ databaseId: string
179
+ /** Last known data size in bytes */
180
+ lastDataSizeBytes: number
181
+ /** Last data source used */
182
+ lastDataSource: 'hot' | 'warm' | 'cold' | 'empty'
183
+ /** Timestamp of last initialization */
184
+ lastInitAt: number
185
+ /** Cumulative metrics from previous sessions */
186
+ cumulativeMetrics: {
187
+ totalInits: number
188
+ coldStarts: number
189
+ warmStarts: number
190
+ hibernationWakes: number
191
+ avgColdStartMs: number
192
+ avgWarmStartMs: number
193
+ avgWakeMs: number
194
+ }
195
+ /** Frequently accessed pages for prefetch */
196
+ hotPages: string[]
197
+ /** Schema checksum for validation */
198
+ schemaChecksum?: string
199
+ }
200
+
201
+ /**
202
+ * Result from waking up after hibernation
203
+ *
204
+ * Contains timing information and status of the wake process.
205
+ * Use this to monitor hibernation recovery performance.
206
+ *
207
+ * ## Wake Types
208
+ *
209
+ * - **Quick wake** (`isQuickWake: true`): State restored without PGLite init,
210
+ * typically < 10ms. First query will trigger lazy initialization.
211
+ *
212
+ * - **Full wake** (`isQuickWake: false`): Full PGLite reinitialization,
213
+ * typically 500-1500ms. Used when cached instance is invalid.
214
+ *
215
+ * @example
216
+ * ```typescript
217
+ * const result = await manager.wakeFromHibernation()
218
+ *
219
+ * if (result.isQuickWake) {
220
+ * console.log(`Quick wake: ${result.wakeTimeMs}ms`)
221
+ * } else {
222
+ * console.log(`Full wake: ${result.wakeTimeMs}ms`)
223
+ * console.log(`PGLite init: ${result.metrics?.pgliteInitMs}ms`)
224
+ * }
225
+ * ```
226
+ */
227
+ export interface ColdStartWakeResult {
228
+ /** Time to wake in milliseconds */
229
+ wakeTimeMs: number
230
+ /** Whether hot pages were restored */
231
+ hotPagesRestored: boolean
232
+ /** Number of pages prefetched */
233
+ pagesPrefetched: number
234
+ /** Whether this was a full cold start or quick wake */
235
+ isQuickWake: boolean
236
+ /** Underlying cold start metrics */
237
+ metrics: ColdStartMetrics | null
238
+ }
239
+
240
+ /**
241
+ * Prefetch strategy for storage tier warming
242
+ *
243
+ * Controls how aggressively the manager prefetches data during initialization.
244
+ * Choose based on your latency vs memory trade-offs:
245
+ *
246
+ * | Strategy | Behavior | Use Case |
247
+ * |----------|----------|----------|
248
+ * | `none` | No prefetching | Memory-constrained, simple workloads |
249
+ * | `hot-only` | Only HOT tier | Low-memory, frequently accessed data |
250
+ * | `hot-warm` | HOT + WARM tiers | **Recommended** - balanced approach |
251
+ * | `aggressive` | All tiers parallel | Latency-critical, memory available |
252
+ *
253
+ * @default 'hot-warm'
254
+ */
255
+ export type PrefetchStrategy = 'none' | 'hot-only' | 'hot-warm' | 'aggressive'
256
+
257
+ /**
258
+ * Configuration for ColdStartManager
259
+ *
260
+ * Extends ColdStartConfig with DO-specific options for hibernation
261
+ * state management and lifecycle integration.
262
+ *
263
+ * ## Required Options
264
+ *
265
+ * - `databaseId`: Unique identifier for caching and state persistence
266
+ * - `wasmModule`: Pre-compiled WASM module (from ColdStartConfig)
267
+ *
268
+ * ## Recommended Options
269
+ *
270
+ * - `doStorage`: DO SQLite for hibernation state persistence
271
+ * - `prefetchStrategy`: 'hot-warm' for balanced performance
272
+ * - `speculativePrefetch`: true for optimal cold start times
273
+ *
274
+ * @example
275
+ * ```typescript
276
+ * const config: ColdStartManagerConfig = {
277
+ * // Required
278
+ * databaseId: ctx.id.toString(),
279
+ * wasmModule: pgliteWasm,
280
+ *
281
+ * // DO integration
282
+ * doStorage: ctx.storage,
283
+ * persistHibernationState: true,
284
+ *
285
+ * // Storage tiers
286
+ * cacheLayer: myCacheLayer,
287
+ * warmCacheKey: `db:${databaseId}`,
288
+ * r2Bucket: env.R2_BUCKET,
289
+ * coldStorageKey: `databases/${databaseId}/data.tar`,
290
+ *
291
+ * // Optimization
292
+ * prefetchStrategy: 'hot-warm',
293
+ * speculativePrefetch: true,
294
+ *
295
+ * // Callbacks
296
+ * onWake: (result) => {
297
+ * analytics.track('do_wake', { wakeTimeMs: result.wakeTimeMs })
298
+ * },
299
+ * }
300
+ * ```
301
+ */
302
+ export interface ColdStartManagerConfig extends ColdStartConfig {
303
+ /**
304
+ * Database identifier for caching and prefetch
305
+ */
306
+ databaseId: string
307
+
308
+ /**
309
+ * Durable Object storage for hibernation state
310
+ */
311
+ doStorage?: DurableObjectStorage
312
+
313
+ /**
314
+ * Prefetch strategy for storage tier warming
315
+ * - none: No prefetching
316
+ * - hot-only: Only prefetch hot tier data
317
+ * - hot-warm: Prefetch hot and warm tier data
318
+ * - aggressive: Prefetch all tiers in parallel
319
+ * Default: 'hot-warm'
320
+ */
321
+ prefetchStrategy?: PrefetchStrategy
322
+
323
+ /**
324
+ * Maximum number of hot pages to track for prefetch
325
+ * Default: 100
326
+ */
327
+ maxHotPages?: number
328
+
329
+ /**
330
+ * Enable hibernation state persistence
331
+ * Default: true
332
+ */
333
+ persistHibernationState?: boolean
334
+
335
+ /**
336
+ * Key prefix for hibernation state in DO storage
337
+ * Default: '__cold_start_'
338
+ */
339
+ hibernationKeyPrefix?: string
340
+
341
+ /**
342
+ * Time in milliseconds to consider instance "warm" for reuse
343
+ * Default: 30000 (30 seconds)
344
+ */
345
+ warmInstanceTtlMs?: number
346
+
347
+ /**
348
+ * Enable speculative prefetch during initialization
349
+ * Fetches likely-needed pages while PGLite initializes
350
+ * Default: true
351
+ */
352
+ speculativePrefetch?: boolean
353
+
354
+ /**
355
+ * Callback for hibernation state changes
356
+ */
357
+ onHibernate?: (state: ColdStartHibernateState) => void
358
+
359
+ /**
360
+ * Callback for wake completion
361
+ */
362
+ onWake?: (result: ColdStartWakeResult) => void
363
+ }
364
+
365
+ /**
366
+ * Manager lifecycle status
367
+ *
368
+ * Tracks the current state of the ColdStartManager:
369
+ *
370
+ * ```
371
+ * not_started → initializing → ready → hibernating
372
+ * ↑ ↓ ↑ ↓
373
+ * └── error ←────┘ └── waking ┘
374
+ * ```
375
+ *
376
+ * - `not_started`: Manager created but not initialized
377
+ * - `initializing`: Cold start in progress
378
+ * - `ready`: Ready for queries (PGLite may still be lazy)
379
+ * - `hibernating`: Preparing hibernation state
380
+ * - `waking`: Recovering from hibernation
381
+ * - `error`: Initialization or operation failed
382
+ */
383
+ export type ManagerStatus =
384
+ | 'not_started'
385
+ | 'initializing'
386
+ | 'ready'
387
+ | 'hibernating'
388
+ | 'waking'
389
+ | 'error'
390
+
391
+ /**
392
+ * Comprehensive manager statistics
393
+ *
394
+ * Provides visibility into cold start performance, caching effectiveness,
395
+ * and prefetch behavior across the manager's lifetime.
396
+ *
397
+ * ## Key Metrics
398
+ *
399
+ * - `cumulativeMetrics`: Aggregated stats across all initializations
400
+ * - `wasmCacheStats`: WASM cache hit/miss information
401
+ * - `prefetchStats`: Prefetch effectiveness tracking
402
+ *
403
+ * @example
404
+ * ```typescript
405
+ * const stats = manager.getStats()
406
+ *
407
+ * console.log(`Status: ${stats.status}`)
408
+ * console.log(`Total inits: ${stats.cumulativeMetrics.totalInits}`)
409
+ * console.log(`Cold starts: ${stats.cumulativeMetrics.coldStarts}`)
410
+ * console.log(`Warm starts: ${stats.cumulativeMetrics.warmStarts}`)
411
+ * console.log(`Avg cold start: ${stats.cumulativeMetrics.avgColdStartMs}ms`)
412
+ * console.log(`Hot pages tracked: ${stats.prefetchStats.hotPagesTracked}`)
413
+ * ```
414
+ */
415
+ export interface ColdStartManagerStats {
416
+ status: ManagerStatus
417
+ currentMetrics: ColdStartMetrics | null
418
+ cumulativeMetrics: ColdStartHibernateState['cumulativeMetrics']
419
+ wasmCacheStats: ReturnType<typeof getWasmCacheStats>
420
+ prefetchStats: {
421
+ hotPagesTracked: number
422
+ prefetchesTriggered: number
423
+ prefetchHits: number
424
+ prefetchMisses: number
425
+ }
426
+ }
427
+
428
+ // ============================================================================
429
+ // Storage Key Constants
430
+ // ============================================================================
431
+
432
+ const HIBERNATE_STATE_KEY = 'hibernate_state'
433
+ const HOT_PAGES_KEY = 'hot_pages'
434
+
435
+ // ============================================================================
436
+ // ColdStartManager Implementation
437
+ // ============================================================================
438
+
439
+ /**
440
+ * Cold Start Manager for Durable Object lifecycle integration
441
+ *
442
+ * Provides optimized cold start handling with:
443
+ * - Lazy initialization with parallel data fetch
444
+ * - Hibernation state persistence and quick wake
445
+ * - Hot page tracking for intelligent prefetch
446
+ * - Cumulative metrics across sessions
447
+ *
448
+ * @example
449
+ * ```typescript
450
+ * // In DO constructor
451
+ * this.coldStartManager = createColdStartManager({
452
+ * databaseId: this.ctx.id.toString(),
453
+ * wasmModule: pgliteWasm,
454
+ * doStorage: this.ctx.storage,
455
+ * r2Bucket: env.R2_BUCKET,
456
+ * prefetchStrategy: 'hot-warm',
457
+ * })
458
+ *
459
+ * // In DO fetch handler
460
+ * async fetch(request: Request) {
461
+ * await this.coldStartManager.ensureReady()
462
+ * const pglite = await this.coldStartManager.getInstance()
463
+ * // ... execute query
464
+ * }
465
+ *
466
+ * // In DO alarm handler (hibernation)
467
+ * async alarm() {
468
+ * await this.coldStartManager.prepareHibernation()
469
+ * }
470
+ * ```
471
+ */
472
+ export class ColdStartManager {
473
+ private config: Required<
474
+ Pick<
475
+ ColdStartManagerConfig,
476
+ | 'databaseId'
477
+ | 'prefetchStrategy'
478
+ | 'maxHotPages'
479
+ | 'persistHibernationState'
480
+ | 'hibernationKeyPrefix'
481
+ | 'warmInstanceTtlMs'
482
+ | 'speculativePrefetch'
483
+ >
484
+ > & ColdStartManagerConfig
485
+
486
+ private optimizer: ColdStartOptimizer | null = null
487
+ private status: ManagerStatus = 'not_started'
488
+ private hibernateState: ColdStartHibernateState | null = null
489
+ private hotPages: Set<string> = new Set()
490
+ private lastAccessTime: number = 0
491
+ private initPromise: Promise<void> | null = null
492
+ private wakePromise: Promise<ColdStartWakeResult> | null = null
493
+
494
+ // Prefetch statistics
495
+ private prefetchStats = {
496
+ prefetchesTriggered: 0,
497
+ prefetchHits: 0,
498
+ prefetchMisses: 0,
499
+ }
500
+
501
+ // Cumulative metrics (persisted across hibernations)
502
+ private cumulativeMetrics: ColdStartHibernateState['cumulativeMetrics'] = {
503
+ totalInits: 0,
504
+ coldStarts: 0,
505
+ warmStarts: 0,
506
+ hibernationWakes: 0,
507
+ avgColdStartMs: 0,
508
+ avgWarmStartMs: 0,
509
+ avgWakeMs: 0,
510
+ }
511
+
512
+ constructor(config: ColdStartManagerConfig) {
513
+ this.config = {
514
+ ...config,
515
+ databaseId: config.databaseId,
516
+ prefetchStrategy: config.prefetchStrategy ?? 'hot-warm',
517
+ maxHotPages: config.maxHotPages ?? 100,
518
+ persistHibernationState: config.persistHibernationState ?? true,
519
+ hibernationKeyPrefix: config.hibernationKeyPrefix ?? '__cold_start_',
520
+ warmInstanceTtlMs: config.warmInstanceTtlMs ?? 30000,
521
+ speculativePrefetch: config.speculativePrefetch ?? true,
522
+ }
523
+ }
524
+
525
+ // ==========================================================================
526
+ // Public API
527
+ // ==========================================================================
528
+
529
+ /**
530
+ * Get the current manager status
531
+ */
532
+ getStatus(): ManagerStatus {
533
+ return this.status
534
+ }
535
+
536
+ /**
537
+ * Check if the manager is ready
538
+ * Returns true after optimized wake even if PGLite is not yet initialized
539
+ */
540
+ isReady(): boolean {
541
+ // After optimized wake, status is 'ready' but optimizer may be null
542
+ return this.status === 'ready'
543
+ }
544
+
545
+ /**
546
+ * Check if PGLite optimizer is fully initialized
547
+ */
548
+ isPGLiteReady(): boolean {
549
+ return this.status === 'ready' && this.optimizer?.isReady() === true
550
+ }
551
+
552
+ /**
553
+ * Ensure the manager is ready for queries
554
+ * After wakeFromHibernation(), ensureReady() is a no-op (< 1ms)
555
+ */
556
+ async ensureReady(): Promise<void> {
557
+ // Fast path: already ready (including after optimized wake)
558
+ if (this.status === 'ready') {
559
+ this.lastAccessTime = Date.now()
560
+ return
561
+ }
562
+
563
+ // Check if we have pre-loaded hibernation state that just needs state restoration
564
+ if (this.status === 'not_started' && this.config.persistHibernationState && this.config.doStorage) {
565
+ const loaded = await this.tryLoadAndRestoreState()
566
+ if (loaded) {
567
+ return
568
+ }
569
+ }
570
+
571
+ // Check if we can do a quick wake (optimizer still valid within TTL)
572
+ if (this.hibernateState && this.canQuickWake()) {
573
+ await this.quickWake()
574
+ return
575
+ }
576
+
577
+ // Full initialization required
578
+ if (!this.initPromise) {
579
+ this.initPromise = this.initialize()
580
+ }
581
+
582
+ await this.initPromise
583
+ }
584
+
585
+ /**
586
+ * Try to load and restore state from DO storage without full initialization
587
+ */
588
+ private async tryLoadAndRestoreState(): Promise<boolean> {
589
+ try {
590
+ const stateKey = this.config.hibernationKeyPrefix + HIBERNATE_STATE_KEY
591
+ const pagesKey = this.config.hibernationKeyPrefix + HOT_PAGES_KEY
592
+
593
+ const [state, pages] = await Promise.all([
594
+ this.config.doStorage!.get<ColdStartHibernateState>(stateKey),
595
+ this.config.doStorage!.get<string[]>(pagesKey),
596
+ ])
597
+
598
+ if (state) {
599
+ this.hibernateState = state
600
+ this.cumulativeMetrics = state.cumulativeMetrics
601
+
602
+ if (pages) {
603
+ this.hotPages = new Set(pages)
604
+ }
605
+
606
+ this.status = 'ready'
607
+ this.lastAccessTime = Date.now()
608
+ this.cumulativeMetrics.hibernationWakes++
609
+ this.cumulativeMetrics.totalInits++
610
+
611
+ return true
612
+ }
613
+ } catch {
614
+ // Ignore errors - will fall back to full initialization
615
+ }
616
+ return false
617
+ }
618
+
619
+ /**
620
+ * Get the PGLite instance (initializes if needed)
621
+ * After optimized wake, this lazily creates the PGLite instance
622
+ */
623
+ async getInstance(): Promise<PGlite> {
624
+ await this.ensureReady()
625
+ await this.ensurePGLiteInitialized()
626
+ return this.optimizer!.getInstance()
627
+ }
628
+
629
+ /**
630
+ * Execute a query (auto-initializes if needed)
631
+ * After optimized wake, the first query triggers lazy PGLite initialization
632
+ */
633
+ async query<T = unknown>(sql: string, params?: unknown[]): Promise<{ rows: T[] }> {
634
+ await this.ensureReady()
635
+ await this.ensurePGLiteInitialized()
636
+
637
+ // Track hot page access (simple heuristic based on table access)
638
+ this.trackPageAccess(sql)
639
+
640
+ return this.optimizer!.query<T>(sql, params)
641
+ }
642
+
643
+ /**
644
+ * Ensure PGLite optimizer is initialized
645
+ * Called lazily on first query after optimized wake
646
+ */
647
+ private async ensurePGLiteInitialized(): Promise<void> {
648
+ if (this.optimizer?.isReady()) {
649
+ return
650
+ }
651
+
652
+ // Create optimizer lazily
653
+ if (!this.optimizer) {
654
+ this.optimizer = createColdStartOptimizer({
655
+ ...this.config,
656
+ database: this.config.databaseId,
657
+ onReady: (metrics) => {
658
+ this.updateCumulativeMetrics(metrics)
659
+ this.config.onReady?.(metrics)
660
+ },
661
+ onPhaseChange: this.config.onPhaseChange,
662
+ onError: this.config.onError,
663
+ })
664
+ }
665
+
666
+ await this.optimizer.initialize()
667
+ }
668
+
669
+ /**
670
+ * Get current metrics
671
+ */
672
+ getMetrics(): ColdStartMetrics | null {
673
+ return this.optimizer?.getMetrics() ?? null
674
+ }
675
+
676
+ /**
677
+ * Get comprehensive manager statistics
678
+ */
679
+ getStats(): ColdStartManagerStats {
680
+ return {
681
+ status: this.status,
682
+ currentMetrics: this.optimizer?.getMetrics() ?? null,
683
+ cumulativeMetrics: { ...this.cumulativeMetrics },
684
+ wasmCacheStats: getWasmCacheStats(),
685
+ prefetchStats: {
686
+ hotPagesTracked: this.hotPages.size,
687
+ ...this.prefetchStats,
688
+ },
689
+ }
690
+ }
691
+
692
+ /**
693
+ * Prepare for hibernation by persisting state to DO storage
694
+ *
695
+ * Call this before the DO hibernates (e.g., in an alarm handler or after
696
+ * detecting inactivity) to ensure quick recovery on the next wake.
697
+ *
698
+ * ## What Gets Persisted
699
+ *
700
+ * - Database ID and metadata
701
+ * - Cumulative performance metrics
702
+ * - Hot page list (for prefetch optimization)
703
+ * - Last known data source and size
704
+ *
705
+ * ## Usage
706
+ *
707
+ * ```typescript
708
+ * // In DO alarm handler
709
+ * async alarm() {
710
+ * const state = await this.manager.prepareHibernation()
711
+ * console.log(`Hibernating with ${state.hotPages.length} hot pages`)
712
+ * }
713
+ * ```
714
+ *
715
+ * @returns The hibernation state that was persisted
716
+ */
717
+ async prepareHibernation(): Promise<ColdStartHibernateState> {
718
+ this.status = 'hibernating'
719
+
720
+ const metrics = this.optimizer?.getMetrics()
721
+ const state: ColdStartHibernateState = {
722
+ databaseId: this.config.databaseId,
723
+ lastDataSizeBytes: metrics?.dataSizeBytes ?? 0,
724
+ lastDataSource: metrics?.dataSource ?? 'empty',
725
+ lastInitAt: Date.now(),
726
+ cumulativeMetrics: { ...this.cumulativeMetrics },
727
+ hotPages: Array.from(this.hotPages).slice(0, this.config.maxHotPages),
728
+ }
729
+
730
+ // Persist hibernation state
731
+ if (this.config.persistHibernationState && this.config.doStorage) {
732
+ const stateKey = this.config.hibernationKeyPrefix + HIBERNATE_STATE_KEY
733
+ const pagesKey = this.config.hibernationKeyPrefix + HOT_PAGES_KEY
734
+
735
+ await this.config.doStorage.put(stateKey, state)
736
+ await this.config.doStorage.put(pagesKey, Array.from(this.hotPages))
737
+ }
738
+
739
+ this.hibernateState = state
740
+ this.config.onHibernate?.(state)
741
+
742
+ return state
743
+ }
744
+
745
+ /**
746
+ * Wake from hibernation with optimized state restoration
747
+ *
748
+ * This method provides sub-10ms wake times by only restoring state metadata.
749
+ * PGLite initialization is deferred until the first actual query.
750
+ *
751
+ * ## How It Works
752
+ *
753
+ * 1. Loads hibernation state from DO storage (if not provided)
754
+ * 2. Restores hot page tracking and cumulative metrics
755
+ * 3. Sets status to 'ready' immediately
756
+ * 4. First query triggers lazy PGLite initialization
757
+ *
758
+ * ## Performance
759
+ *
760
+ * | Scenario | Time | Notes |
761
+ * |----------|------|-------|
762
+ * | Optimized wake | < 10ms | State restoration only |
763
+ * | First query | 500-1500ms | PGLite init + query |
764
+ * | Subsequent queries | < 50ms | Warm PGLite instance |
765
+ *
766
+ * ## Usage
767
+ *
768
+ * ```typescript
769
+ * async fetch(request: Request) {
770
+ * // Optimized wake - sub-10ms
771
+ * const result = await this.manager.wakeFromHibernation()
772
+ * console.log(`Woke in ${result.wakeTimeMs}ms`)
773
+ *
774
+ * // First query triggers PGLite init
775
+ * const users = await this.manager.query('SELECT * FROM users')
776
+ * return new Response(JSON.stringify(users.rows))
777
+ * }
778
+ * ```
779
+ *
780
+ * @param state - Optional pre-loaded hibernation state (skips storage read)
781
+ * @returns Wake result with timing and status information
782
+ */
783
+ async wakeFromHibernation(
784
+ state?: ColdStartHibernateState
785
+ ): Promise<ColdStartWakeResult> {
786
+ if (this.wakePromise) {
787
+ return this.wakePromise
788
+ }
789
+
790
+ this.status = 'waking'
791
+ // Use optimized wake that restores state without reinitializing PGLite
792
+ this.wakePromise = this.performOptimizedWake(state)
793
+
794
+ try {
795
+ return await this.wakePromise
796
+ } finally {
797
+ this.wakePromise = null
798
+ }
799
+ }
800
+
801
+ /**
802
+ * Close the manager and release all resources
803
+ *
804
+ * This method:
805
+ * - Closes the underlying PGLite instance
806
+ * - Removes from WASM cache
807
+ * - Resets status to 'not_started'
808
+ *
809
+ * Call this when the DO is being destroyed or the database is no longer needed.
810
+ *
811
+ * @example
812
+ * ```typescript
813
+ * // Clean shutdown
814
+ * await manager.prepareHibernation()
815
+ * await manager.close()
816
+ * ```
817
+ */
818
+ async close(): Promise<void> {
819
+ if (this.optimizer) {
820
+ await this.optimizer.close()
821
+ this.optimizer = null
822
+ }
823
+ this.status = 'not_started'
824
+ this.initPromise = null
825
+ this.wakePromise = null
826
+ }
827
+
828
+ /**
829
+ * Clear all caches
830
+ *
831
+ * Clears WASM cache, hot page tracking, and hibernation state.
832
+ * Primarily useful for testing to ensure clean state between tests.
833
+ *
834
+ * @example
835
+ * ```typescript
836
+ * // In tests
837
+ * beforeEach(() => {
838
+ * manager.clearCaches()
839
+ * })
840
+ * ```
841
+ */
842
+ clearCaches(): void {
843
+ clearWasmCache()
844
+ this.hotPages.clear()
845
+ this.hibernateState = null
846
+ }
847
+
848
+ // ==========================================================================
849
+ // Private Methods
850
+ // ==========================================================================
851
+
852
+ /**
853
+ * Full cold start initialization
854
+ */
855
+ private async initialize(): Promise<void> {
856
+ const startTime = performance.now()
857
+ this.status = 'initializing'
858
+
859
+ try {
860
+ // Load persisted hibernation state
861
+ await this.loadHibernationState()
862
+
863
+ // Start speculative prefetch in parallel with optimizer creation
864
+ let prefetchPromise: Promise<void> | null = null
865
+ if (
866
+ this.config.speculativePrefetch &&
867
+ this.hibernateState?.hotPages?.length
868
+ ) {
869
+ prefetchPromise = this.prefetchHotPages()
870
+ }
871
+
872
+ // Create and initialize the optimizer
873
+ this.optimizer = createColdStartOptimizer({
874
+ ...this.config,
875
+ database: this.config.databaseId,
876
+ onReady: (metrics) => {
877
+ this.updateCumulativeMetrics(metrics)
878
+ this.config.onReady?.(metrics)
879
+ },
880
+ onPhaseChange: this.config.onPhaseChange,
881
+ onError: this.config.onError,
882
+ })
883
+
884
+ await this.optimizer.initialize()
885
+
886
+ // Wait for prefetch to complete (if started)
887
+ if (prefetchPromise) {
888
+ await prefetchPromise.catch(() => {
889
+ // Ignore prefetch errors - not critical
890
+ })
891
+ }
892
+
893
+ this.status = 'ready'
894
+ this.lastAccessTime = Date.now()
895
+
896
+ // Track timing
897
+ const totalMs = performance.now() - startTime
898
+ const metrics = this.optimizer.getMetrics()
899
+ if (metrics) {
900
+ this.logDebug(
901
+ `Cold start complete: ${totalMs.toFixed(2)}ms ` +
902
+ `(isWarm: ${metrics.isWarmStart}, source: ${metrics.dataSource})`
903
+ )
904
+ }
905
+ } catch (error) {
906
+ this.status = 'error'
907
+ throw error
908
+ }
909
+ }
910
+
911
+ /**
912
+ * Quick wake from hibernation (when instance is still warm)
913
+ */
914
+ private async quickWake(): Promise<void> {
915
+ const startTime = performance.now()
916
+ this.status = 'waking'
917
+
918
+ // For quick wake, we just verify the optimizer is still valid
919
+ if (this.optimizer?.isReady()) {
920
+ const wakeTimeMs = performance.now() - startTime
921
+
922
+ // Update cumulative metrics
923
+ this.cumulativeMetrics.hibernationWakes++
924
+ this.cumulativeMetrics.avgWakeMs = this.updateRunningAverage(
925
+ this.cumulativeMetrics.avgWakeMs,
926
+ wakeTimeMs,
927
+ this.cumulativeMetrics.hibernationWakes
928
+ )
929
+
930
+ this.status = 'ready'
931
+ this.lastAccessTime = Date.now()
932
+
933
+ const result: ColdStartWakeResult = {
934
+ wakeTimeMs,
935
+ hotPagesRestored: false,
936
+ pagesPrefetched: 0,
937
+ isQuickWake: true,
938
+ metrics: this.optimizer.getMetrics(),
939
+ }
940
+
941
+ this.config.onWake?.(result)
942
+ return
943
+ }
944
+
945
+ // Fall back to full wake
946
+ await this.performWake()
947
+ }
948
+
949
+ /**
950
+ * Optimized wake that only restores state metadata
951
+ * PGLite initialization is deferred to first query for < 10ms wake time
952
+ */
953
+ private async performOptimizedWake(
954
+ state?: ColdStartHibernateState
955
+ ): Promise<ColdStartWakeResult> {
956
+ const startTime = performance.now()
957
+
958
+ // Load state if not provided
959
+ const hibernateState = state ?? this.hibernateState
960
+ if (!hibernateState && !state) {
961
+ await this.loadHibernationState()
962
+ }
963
+ const finalState = state ?? this.hibernateState
964
+
965
+ // Restore hot pages (fast - just Set construction)
966
+ if (finalState?.hotPages) {
967
+ this.hotPages = new Set(finalState.hotPages)
968
+ }
969
+
970
+ // Restore cumulative metrics (fast - object copy)
971
+ if (finalState?.cumulativeMetrics) {
972
+ this.cumulativeMetrics = { ...finalState.cumulativeMetrics }
973
+ }
974
+
975
+ // Store hibernation state for later lazy initialization
976
+ this.hibernateState = finalState ?? null
977
+
978
+ // Mark as ready - PGLite initialization deferred to first query
979
+ this.status = 'ready'
980
+ this.lastAccessTime = Date.now()
981
+
982
+ // Update cumulative metrics for this wake
983
+ this.cumulativeMetrics.hibernationWakes++
984
+ this.cumulativeMetrics.totalInits++
985
+
986
+ const wakeTimeMs = performance.now() - startTime
987
+
988
+ // Update average wake time
989
+ this.cumulativeMetrics.avgWakeMs = this.updateRunningAverage(
990
+ this.cumulativeMetrics.avgWakeMs,
991
+ wakeTimeMs,
992
+ this.cumulativeMetrics.hibernationWakes
993
+ )
994
+
995
+ const result: ColdStartWakeResult = {
996
+ wakeTimeMs,
997
+ hotPagesRestored: this.hotPages.size > 0,
998
+ pagesPrefetched: 0,
999
+ isQuickWake: true, // Optimized wake is always quick
1000
+ metrics: null, // No PGLite metrics yet - deferred initialization
1001
+ }
1002
+
1003
+ this.config.onWake?.(result)
1004
+ return result
1005
+ }
1006
+
1007
+ /**
1008
+ * Perform full wake from hibernation
1009
+ */
1010
+ private async performWake(
1011
+ state?: ColdStartHibernateState
1012
+ ): Promise<ColdStartWakeResult> {
1013
+ const startTime = performance.now()
1014
+
1015
+ // Load state if not provided
1016
+ if (!state && !this.hibernateState) {
1017
+ await this.loadHibernationState()
1018
+ }
1019
+ const hibernateState = state ?? this.hibernateState
1020
+
1021
+ // Restore hot pages
1022
+ if (hibernateState?.hotPages) {
1023
+ this.hotPages = new Set(hibernateState.hotPages)
1024
+ }
1025
+
1026
+ // Restore cumulative metrics
1027
+ if (hibernateState?.cumulativeMetrics) {
1028
+ this.cumulativeMetrics = { ...hibernateState.cumulativeMetrics }
1029
+ }
1030
+
1031
+ // Initialize with hot data if available
1032
+ const hotData = await this.loadHotData()
1033
+
1034
+ this.optimizer = createColdStartOptimizer({
1035
+ ...this.config,
1036
+ database: this.config.databaseId,
1037
+ hotData,
1038
+ onReady: (metrics) => {
1039
+ this.updateCumulativeMetrics(metrics)
1040
+ this.config.onReady?.(metrics)
1041
+ },
1042
+ })
1043
+
1044
+ await this.optimizer.initialize()
1045
+
1046
+ // Prefetch hot pages
1047
+ let pagesPrefetched = 0
1048
+ if (this.config.prefetchStrategy !== 'none' && this.hotPages.size > 0) {
1049
+ pagesPrefetched = await this.prefetchHotPages()
1050
+ .then(() => this.hotPages.size)
1051
+ .catch(() => 0)
1052
+ }
1053
+
1054
+ const wakeTimeMs = performance.now() - startTime
1055
+
1056
+ // Update cumulative metrics
1057
+ this.cumulativeMetrics.hibernationWakes++
1058
+ this.cumulativeMetrics.avgWakeMs = this.updateRunningAverage(
1059
+ this.cumulativeMetrics.avgWakeMs,
1060
+ wakeTimeMs,
1061
+ this.cumulativeMetrics.hibernationWakes
1062
+ )
1063
+
1064
+ this.status = 'ready'
1065
+ this.lastAccessTime = Date.now()
1066
+
1067
+ const result: ColdStartWakeResult = {
1068
+ wakeTimeMs,
1069
+ hotPagesRestored: hotData !== undefined,
1070
+ pagesPrefetched,
1071
+ isQuickWake: false,
1072
+ metrics: this.optimizer.getMetrics(),
1073
+ }
1074
+
1075
+ this.config.onWake?.(result)
1076
+ return result
1077
+ }
1078
+
1079
+ /**
1080
+ * Check if we can do a quick wake (instance still warm)
1081
+ */
1082
+ private canQuickWake(): boolean {
1083
+ if (!this.optimizer) return false
1084
+ if (!this.lastAccessTime) return false
1085
+
1086
+ const timeSinceLastAccess = Date.now() - this.lastAccessTime
1087
+ return timeSinceLastAccess < this.config.warmInstanceTtlMs
1088
+ }
1089
+
1090
+ /**
1091
+ * Load hibernation state from DO storage
1092
+ */
1093
+ private async loadHibernationState(): Promise<void> {
1094
+ if (!this.config.doStorage || !this.config.persistHibernationState) {
1095
+ return
1096
+ }
1097
+
1098
+ try {
1099
+ const stateKey = this.config.hibernationKeyPrefix + HIBERNATE_STATE_KEY
1100
+ const pagesKey = this.config.hibernationKeyPrefix + HOT_PAGES_KEY
1101
+
1102
+ const [state, pages] = await Promise.all([
1103
+ this.config.doStorage.get<ColdStartHibernateState>(stateKey),
1104
+ this.config.doStorage.get<string[]>(pagesKey),
1105
+ ])
1106
+
1107
+ if (state) {
1108
+ this.hibernateState = state
1109
+ this.cumulativeMetrics = state.cumulativeMetrics
1110
+ }
1111
+
1112
+ if (pages) {
1113
+ this.hotPages = new Set(pages)
1114
+ }
1115
+ } catch {
1116
+ // Ignore errors loading state - will cold start
1117
+ }
1118
+ }
1119
+
1120
+ /**
1121
+ * Load hot data from DO storage (for quick restore)
1122
+ */
1123
+ private async loadHotData(): Promise<ArrayBuffer | undefined> {
1124
+ // This would integrate with the tiered storage system
1125
+ // For now, we rely on the optimizer's hot data path
1126
+ return undefined
1127
+ }
1128
+
1129
+ /**
1130
+ * Prefetch hot pages into cache
1131
+ */
1132
+ private async prefetchHotPages(): Promise<void> {
1133
+ if (!this.config.cacheLayer || this.hotPages.size === 0) {
1134
+ return
1135
+ }
1136
+
1137
+ this.prefetchStats.prefetchesTriggered++
1138
+ const prefetchKeys = Array.from(this.hotPages).slice(0, 10) // Limit concurrent prefetches
1139
+
1140
+ // This would integrate with the cache layer for prefetch
1141
+ // For now, we track the intent
1142
+ this.logDebug(`Would prefetch ${prefetchKeys.length} hot pages`)
1143
+ }
1144
+
1145
+ /**
1146
+ * Track page access for hot page identification
1147
+ */
1148
+ private trackPageAccess(sql: string): void {
1149
+ // Simple heuristic: extract table names from query
1150
+ const tableMatch = sql.match(/FROM\s+([a-zA-Z_][a-zA-Z0-9_]*)/i)
1151
+ if (tableMatch?.[1]) {
1152
+ const pageKey = `table:${tableMatch[1].toLowerCase()}`
1153
+ this.hotPages.add(pageKey)
1154
+
1155
+ // Enforce max size
1156
+ if (this.hotPages.size > this.config.maxHotPages) {
1157
+ const oldest = this.hotPages.values().next().value
1158
+ if (oldest) {
1159
+ this.hotPages.delete(oldest)
1160
+ }
1161
+ }
1162
+ }
1163
+ }
1164
+
1165
+ /**
1166
+ * Update cumulative metrics with new initialization
1167
+ */
1168
+ private updateCumulativeMetrics(metrics: ColdStartMetrics): void {
1169
+ this.cumulativeMetrics.totalInits++
1170
+
1171
+ if (metrics.isWarmStart) {
1172
+ this.cumulativeMetrics.warmStarts++
1173
+ this.cumulativeMetrics.avgWarmStartMs = this.updateRunningAverage(
1174
+ this.cumulativeMetrics.avgWarmStartMs,
1175
+ metrics.totalMs,
1176
+ this.cumulativeMetrics.warmStarts
1177
+ )
1178
+ } else {
1179
+ this.cumulativeMetrics.coldStarts++
1180
+ this.cumulativeMetrics.avgColdStartMs = this.updateRunningAverage(
1181
+ this.cumulativeMetrics.avgColdStartMs,
1182
+ metrics.totalMs,
1183
+ this.cumulativeMetrics.coldStarts
1184
+ )
1185
+ }
1186
+ }
1187
+
1188
+ /**
1189
+ * Calculate running average
1190
+ */
1191
+ private updateRunningAverage(
1192
+ currentAvg: number,
1193
+ newValue: number,
1194
+ count: number
1195
+ ): number {
1196
+ if (count === 1) return newValue
1197
+ return currentAvg + (newValue - currentAvg) / count
1198
+ }
1199
+
1200
+ /**
1201
+ * Debug logging
1202
+ */
1203
+ private logDebug(message: string): void {
1204
+ if (this.config.debug) {
1205
+ console.log(`[ColdStartManager:${this.config.databaseId}] ${message}`)
1206
+ }
1207
+ }
1208
+ }
1209
+
1210
+ // ============================================================================
1211
+ // Factory Functions
1212
+ // ============================================================================
1213
+
1214
+ /**
1215
+ * Create a ColdStartManager instance
1216
+ *
1217
+ * @example
1218
+ * ```typescript
1219
+ * const manager = createColdStartManager({
1220
+ * databaseId: 'my-db',
1221
+ * wasmModule: pgliteWasm,
1222
+ * doStorage: ctx.storage,
1223
+ * r2Bucket: env.R2_BUCKET,
1224
+ * })
1225
+ * ```
1226
+ */
1227
+ export function createColdStartManager(
1228
+ config: ColdStartManagerConfig
1229
+ ): ColdStartManager {
1230
+ return new ColdStartManager(config)
1231
+ }
1232
+
1233
+ /**
1234
+ * Create a ColdStartManager factory for consistent configuration
1235
+ *
1236
+ * @example
1237
+ * ```typescript
1238
+ * const createManager = createColdStartManagerFactory({
1239
+ * wasmModule: pgliteWasm,
1240
+ * r2Bucket: env.R2_BUCKET,
1241
+ * prefetchStrategy: 'hot-warm',
1242
+ * })
1243
+ *
1244
+ * // In DO constructor
1245
+ * this.coldStartManager = createManager({
1246
+ * databaseId: this.ctx.id.toString(),
1247
+ * doStorage: this.ctx.storage,
1248
+ * })
1249
+ * ```
1250
+ */
1251
+ export function createColdStartManagerFactory(
1252
+ baseConfig: Omit<ColdStartManagerConfig, 'databaseId'>
1253
+ ): (instanceConfig: Pick<ColdStartManagerConfig, 'databaseId' | 'doStorage'>) => ColdStartManager {
1254
+ return (instanceConfig) => {
1255
+ return createColdStartManager({
1256
+ ...baseConfig,
1257
+ ...instanceConfig,
1258
+ })
1259
+ }
1260
+ }