@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,1167 @@
1
+ /**
2
+ * Migration Runner
3
+ *
4
+ * Executes migrations against a PGLite database instance.
5
+ * Designed for postgres.do's unique multi-database model where
6
+ * each user gets their own Durable Object database.
7
+ *
8
+ * Key features:
9
+ * - Auto-migration on first connection to new databases
10
+ * - Idempotent execution (safe to run multiple times)
11
+ * - Transaction-based migrations with automatic rollback on failure
12
+ * - Advisory locks to prevent concurrent migrations
13
+ * - Checksum validation to detect modified migrations
14
+ *
15
+ * @module migrations/runner
16
+ */
17
+ import { MigrationError } from '@dotdo/postgres-shared/errors';
18
+ import { createLogger, LogLevel } from '@dotdo/postgres-shared';
19
+ export { MigrationError };
20
+ // Module-level logger for MigrationRunner
21
+ // Level is DEBUG because the debug config flag gates whether log() is called at all.
22
+ // The logger just provides structured output - the filtering happens at call site.
23
+ const runnerLogger = createLogger({
24
+ level: LogLevel.DEBUG,
25
+ prefix: '[MigrationRunner]',
26
+ });
27
+ /**
28
+ * Default runner configuration
29
+ */
30
+ const DEFAULT_CONFIG = {
31
+ tableName: '_migrations',
32
+ schema: 'public',
33
+ autoMigrate: true,
34
+ migrationTimeoutMs: 30000,
35
+ useLocking: true,
36
+ lockTimeoutMs: 5000,
37
+ debug: false,
38
+ };
39
+ /**
40
+ * SQL for creating the migrations table
41
+ */
42
+ const CREATE_MIGRATIONS_TABLE_SQL = (tableName, schema) => `
43
+ CREATE TABLE IF NOT EXISTS "${schema}"."${tableName}" (
44
+ id TEXT PRIMARY KEY,
45
+ name TEXT NOT NULL,
46
+ version INTEGER NOT NULL UNIQUE,
47
+ checksum TEXT NOT NULL,
48
+ applied_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
49
+ execution_time_ms INTEGER NOT NULL DEFAULT 0,
50
+ status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'applied', 'failed', 'rolled_back'))
51
+ );
52
+ CREATE INDEX IF NOT EXISTS idx_${tableName}_version ON "${schema}"."${tableName}" (version);
53
+ CREATE INDEX IF NOT EXISTS idx_${tableName}_status ON "${schema}"."${tableName}" (status);
54
+ `;
55
+ /**
56
+ * SQL for creating the rollback history table
57
+ */
58
+ const CREATE_ROLLBACK_HISTORY_TABLE_SQL = (tableName, schema) => `
59
+ CREATE TABLE IF NOT EXISTS "${schema}"."${tableName}_rollback_history" (
60
+ rollback_id TEXT PRIMARY KEY,
61
+ migration_id TEXT NOT NULL,
62
+ version INTEGER NOT NULL,
63
+ rolled_back_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
64
+ execution_time_ms INTEGER NOT NULL DEFAULT 0,
65
+ previous_status TEXT NOT NULL,
66
+ initiated_by TEXT,
67
+ reason TEXT
68
+ );
69
+ CREATE INDEX IF NOT EXISTS idx_${tableName}_rollback_history_migration ON "${schema}"."${tableName}_rollback_history" (migration_id);
70
+ CREATE INDEX IF NOT EXISTS idx_${tableName}_rollback_history_version ON "${schema}"."${tableName}_rollback_history" (version);
71
+ `;
72
+ /**
73
+ * Generate a unique rollback ID
74
+ */
75
+ function generateRollbackId() {
76
+ const timestamp = Date.now().toString(36);
77
+ const random = Math.random().toString(36).substring(2, 8);
78
+ return `rollback_${timestamp}_${random}`;
79
+ }
80
+ /**
81
+ * Calculate SHA-256 checksum for migration content
82
+ */
83
+ async function calculateChecksum(content) {
84
+ const encoder = new TextEncoder();
85
+ const data = encoder.encode(content);
86
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data);
87
+ const hashArray = Array.from(new Uint8Array(hashBuffer));
88
+ return hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');
89
+ }
90
+ /**
91
+ * Generate a unique lock ID
92
+ */
93
+ function generateLockId() {
94
+ const timestamp = Date.now().toString(36);
95
+ const random = Math.random().toString(36).substring(2, 8);
96
+ return `lock_${timestamp}_${random}`;
97
+ }
98
+ export class MigrationRunner {
99
+ executor;
100
+ registry;
101
+ config;
102
+ onProgress;
103
+ initialized = false;
104
+ listeners = [];
105
+ rollbackListeners = [];
106
+ currentLock = null;
107
+ constructor(executor, registry, config = {}) {
108
+ this.executor = executor;
109
+ this.registry = registry;
110
+ // Type assertions needed because MigrationRunnerConfig has explicit `| undefined` in property types
111
+ // which isn't narrowed away by `??` operator even when defaults are provided
112
+ this.config = {
113
+ tableName: (config.tableName ?? DEFAULT_CONFIG.tableName),
114
+ schema: (config.schema ?? DEFAULT_CONFIG.schema),
115
+ autoMigrate: (config.autoMigrate ?? DEFAULT_CONFIG.autoMigrate),
116
+ migrationTimeoutMs: (config.migrationTimeoutMs ?? DEFAULT_CONFIG.migrationTimeoutMs),
117
+ useLocking: (config.useLocking ?? DEFAULT_CONFIG.useLocking),
118
+ lockTimeoutMs: (config.lockTimeoutMs ?? DEFAULT_CONFIG.lockTimeoutMs),
119
+ debug: (config.debug ?? DEFAULT_CONFIG.debug),
120
+ };
121
+ this.onProgress = config.onProgress;
122
+ }
123
+ /**
124
+ * Log debug message
125
+ */
126
+ log(message, ...args) {
127
+ if (this.config.debug) {
128
+ runnerLogger.debug(message, args.length > 0 ? { args } : undefined);
129
+ }
130
+ }
131
+ /**
132
+ * Emit a migration event
133
+ */
134
+ async emitEvent(event) {
135
+ const fullEvent = {
136
+ ...event,
137
+ timestamp: new Date(),
138
+ };
139
+ for (const listener of this.listeners) {
140
+ try {
141
+ await listener(fullEvent);
142
+ }
143
+ catch (error) {
144
+ runnerLogger.error('Event listener error', {
145
+ error: error instanceof Error ? error.message : String(error),
146
+ });
147
+ }
148
+ }
149
+ }
150
+ /**
151
+ * Add an event listener
152
+ */
153
+ onEvent(listener) {
154
+ this.listeners.push(listener);
155
+ return () => {
156
+ const index = this.listeners.indexOf(listener);
157
+ if (index >= 0) {
158
+ this.listeners.splice(index, 1);
159
+ }
160
+ };
161
+ }
162
+ /**
163
+ * Emit a rollback event
164
+ */
165
+ async emitRollbackEvent(event) {
166
+ const fullEvent = {
167
+ ...event,
168
+ timestamp: new Date(),
169
+ };
170
+ for (const listener of this.rollbackListeners) {
171
+ try {
172
+ await listener(fullEvent);
173
+ }
174
+ catch (error) {
175
+ runnerLogger.error('Rollback event listener error', {
176
+ error: error instanceof Error ? error.message : String(error),
177
+ });
178
+ }
179
+ }
180
+ }
181
+ /**
182
+ * Add a rollback event listener
183
+ */
184
+ onRollbackEvent(listener) {
185
+ this.rollbackListeners.push(listener);
186
+ return () => {
187
+ const index = this.rollbackListeners.indexOf(listener);
188
+ if (index >= 0) {
189
+ this.rollbackListeners.splice(index, 1);
190
+ }
191
+ };
192
+ }
193
+ /**
194
+ * Get the full qualified table name
195
+ */
196
+ getTableName() {
197
+ return `"${this.config.schema}"."${this.config.tableName}"`;
198
+ }
199
+ /**
200
+ * Initialize the migration runner
201
+ *
202
+ * Creates the migrations table and rollback history table if they don't exist.
203
+ * Safe to call multiple times.
204
+ */
205
+ async initialize() {
206
+ if (this.initialized) {
207
+ return;
208
+ }
209
+ this.log('Initializing migrations table');
210
+ try {
211
+ await this.executor.query(CREATE_MIGRATIONS_TABLE_SQL(this.config.tableName, this.config.schema));
212
+ await this.executor.query(CREATE_ROLLBACK_HISTORY_TABLE_SQL(this.config.tableName, this.config.schema));
213
+ this.initialized = true;
214
+ await this.emitEvent({ type: 'table_created' });
215
+ this.log('Migrations table ready');
216
+ }
217
+ catch (error) {
218
+ this.log('Error creating migrations table:', error);
219
+ throw error;
220
+ }
221
+ }
222
+ /**
223
+ * Get the rollback history table name
224
+ */
225
+ getRollbackHistoryTableName() {
226
+ return `"${this.config.schema}"."${this.config.tableName}_rollback_history"`;
227
+ }
228
+ /**
229
+ * Acquire a migration lock
230
+ *
231
+ * Uses PostgreSQL advisory locks to prevent concurrent migrations.
232
+ * This is important in Cloudflare Workers where multiple requests
233
+ * might hit the same DO simultaneously.
234
+ */
235
+ async acquireLock() {
236
+ if (!this.config.useLocking) {
237
+ return true;
238
+ }
239
+ const lockId = generateLockId();
240
+ const lockKey = 12345; // Fixed lock key for migrations
241
+ try {
242
+ // Try to acquire an exclusive session-level advisory lock
243
+ const result = await this.executor.query(`SELECT pg_try_advisory_lock($1)`, [lockKey]);
244
+ if (result.rows[0]?.pg_try_advisory_lock) {
245
+ this.currentLock = {
246
+ acquired: true,
247
+ lockId,
248
+ acquiredAt: new Date(),
249
+ expiresAt: new Date(Date.now() + this.config.lockTimeoutMs),
250
+ };
251
+ await this.emitEvent({ type: 'lock_acquired', lock: this.currentLock });
252
+ this.log('Lock acquired:', lockId);
253
+ return true;
254
+ }
255
+ return false;
256
+ }
257
+ catch (error) {
258
+ // PGLite might not support advisory locks, continue without locking
259
+ this.log('Advisory lock not available, continuing without lock');
260
+ return true;
261
+ }
262
+ }
263
+ /**
264
+ * Release the migration lock
265
+ */
266
+ async releaseLock() {
267
+ if (!this.config.useLocking || !this.currentLock?.acquired) {
268
+ return;
269
+ }
270
+ const lockKey = 12345;
271
+ try {
272
+ await this.executor.query(`SELECT pg_advisory_unlock($1)`, [lockKey]);
273
+ await this.emitEvent({ type: 'lock_released', lock: this.currentLock });
274
+ this.log('Lock released:', this.currentLock.lockId);
275
+ }
276
+ catch {
277
+ // Ignore unlock errors
278
+ }
279
+ finally {
280
+ this.currentLock = null;
281
+ }
282
+ }
283
+ /**
284
+ * Get the current schema version and all migration records
285
+ */
286
+ async getSchemaVersion() {
287
+ await this.initialize();
288
+ const result = await this.executor.query(`SELECT id, name, version, checksum,
289
+ applied_at::text as applied_at,
290
+ execution_time_ms, status
291
+ FROM ${this.getTableName()}
292
+ ORDER BY version ASC`);
293
+ const migrations = result.rows;
294
+ const appliedMigrations = migrations.filter((m) => m.status === 'applied');
295
+ const currentVersion = appliedMigrations.length > 0
296
+ ? Math.max(...appliedMigrations.map((m) => m.version))
297
+ : 0;
298
+ const lastApplied = appliedMigrations.reduce((latest, m) => (!latest || m.applied_at > latest.applied_at ? m : latest), null);
299
+ return {
300
+ currentVersion,
301
+ appliedCount: appliedMigrations.length,
302
+ lastMigrationAt: lastApplied?.applied_at ?? null,
303
+ migrations,
304
+ };
305
+ }
306
+ /**
307
+ * Compare current schema version against the registry
308
+ */
309
+ async compareVersion() {
310
+ const schemaVersion = await this.getSchemaVersion();
311
+ const targetVersion = this.registry.getLatestVersion();
312
+ const appliedVersions = new Set(schemaVersion.migrations
313
+ .filter((m) => m.status === 'applied')
314
+ .map((m) => m.version));
315
+ // Find missing versions
316
+ const missingVersions = [];
317
+ for (const version of this.registry.getMigrationVersions()) {
318
+ if (!appliedVersions.has(version)) {
319
+ missingVersions.push(version);
320
+ }
321
+ }
322
+ return {
323
+ current: schemaVersion.currentVersion,
324
+ target: targetVersion,
325
+ needsMigration: missingVersions.length > 0,
326
+ pendingCount: missingVersions.length,
327
+ missingVersions,
328
+ };
329
+ }
330
+ /**
331
+ * Get a migration record by ID
332
+ */
333
+ async getMigrationRecord(id) {
334
+ await this.initialize();
335
+ const result = await this.executor.query(`SELECT id, name, version, checksum,
336
+ applied_at::text as applied_at,
337
+ execution_time_ms, status
338
+ FROM ${this.getTableName()}
339
+ WHERE id = $1`, [id]);
340
+ return result.rows[0] ?? null;
341
+ }
342
+ /**
343
+ * Check if a migration has been applied
344
+ */
345
+ async isMigrationApplied(id) {
346
+ const record = await this.getMigrationRecord(id);
347
+ return record?.status === 'applied';
348
+ }
349
+ /**
350
+ * Apply a single migration
351
+ */
352
+ async applyMigration(migration, index, total) {
353
+ const checksum = await calculateChecksum(migration.up);
354
+ const existing = await this.getMigrationRecord(migration.id);
355
+ // Check if already applied
356
+ if (existing && existing.status === 'applied') {
357
+ // Validate checksum
358
+ if (existing.checksum !== checksum) {
359
+ const error = `Migration checksum mismatch. Expected: ${existing.checksum}, Got: ${checksum}. This may indicate the migration content has changed.`;
360
+ this.log(`Migration ${migration.id} checksum mismatch`);
361
+ return {
362
+ success: false,
363
+ id: migration.id,
364
+ executionTimeMs: 0,
365
+ error,
366
+ };
367
+ }
368
+ // Already applied, skip
369
+ this.onProgress?.({
370
+ migration,
371
+ index,
372
+ total,
373
+ phase: 'skipped',
374
+ });
375
+ await this.emitEvent({
376
+ type: 'migration_skipped',
377
+ migration,
378
+ });
379
+ return {
380
+ success: true,
381
+ id: migration.id,
382
+ executionTimeMs: 0,
383
+ skipped: true,
384
+ };
385
+ }
386
+ // Emit start events
387
+ this.onProgress?.({
388
+ migration,
389
+ index,
390
+ total,
391
+ phase: 'starting',
392
+ });
393
+ await this.emitEvent({
394
+ type: 'migration_started',
395
+ migration,
396
+ });
397
+ const startTime = performance.now();
398
+ try {
399
+ // Begin transaction if migration is transactional
400
+ if (migration.transactional !== false) {
401
+ await this.executor.query('BEGIN');
402
+ }
403
+ // Execute migration SQL
404
+ this.onProgress?.({
405
+ migration,
406
+ index,
407
+ total,
408
+ phase: 'executing',
409
+ });
410
+ await this.executor.query(migration.up);
411
+ // Record the migration
412
+ await this.executor.query(`INSERT INTO ${this.getTableName()} (id, name, version, checksum, execution_time_ms, status)
413
+ VALUES ($1, $2, $3, $4, $5, 'applied')
414
+ ON CONFLICT (id) DO UPDATE SET
415
+ status = 'applied',
416
+ execution_time_ms = $5,
417
+ applied_at = CURRENT_TIMESTAMP`, [
418
+ migration.id,
419
+ migration.name,
420
+ migration.version,
421
+ checksum,
422
+ Math.round(performance.now() - startTime),
423
+ ]);
424
+ // Commit transaction
425
+ if (migration.transactional !== false) {
426
+ await this.executor.query('COMMIT');
427
+ }
428
+ const executionTimeMs = Math.round(performance.now() - startTime);
429
+ const result = {
430
+ success: true,
431
+ id: migration.id,
432
+ executionTimeMs,
433
+ };
434
+ // Emit completion events
435
+ this.onProgress?.({
436
+ migration,
437
+ index,
438
+ total,
439
+ phase: 'completed',
440
+ durationMs: executionTimeMs,
441
+ });
442
+ await this.emitEvent({
443
+ type: 'migration_completed',
444
+ migration,
445
+ result,
446
+ });
447
+ this.log(`Migration ${migration.id} applied in ${executionTimeMs}ms`);
448
+ return result;
449
+ }
450
+ catch (error) {
451
+ // Rollback on failure
452
+ if (migration.transactional !== false) {
453
+ try {
454
+ await this.executor.query('ROLLBACK');
455
+ }
456
+ catch {
457
+ // Ignore rollback errors
458
+ }
459
+ }
460
+ const executionTimeMs = Math.round(performance.now() - startTime);
461
+ const errorMessage = error instanceof Error ? error.message : String(error);
462
+ // Record failed migration
463
+ try {
464
+ await this.executor.query(`INSERT INTO ${this.getTableName()} (id, name, version, checksum, execution_time_ms, status)
465
+ VALUES ($1, $2, $3, $4, $5, 'failed')
466
+ ON CONFLICT (id) DO UPDATE SET
467
+ status = 'failed',
468
+ execution_time_ms = $5,
469
+ applied_at = CURRENT_TIMESTAMP`, [migration.id, migration.name, migration.version, checksum, executionTimeMs]);
470
+ }
471
+ catch {
472
+ // Ignore recording errors
473
+ }
474
+ const result = {
475
+ success: false,
476
+ id: migration.id,
477
+ executionTimeMs,
478
+ error: errorMessage,
479
+ };
480
+ // Emit failure events
481
+ this.onProgress?.({
482
+ migration,
483
+ index,
484
+ total,
485
+ phase: 'failed',
486
+ durationMs: executionTimeMs,
487
+ error: errorMessage,
488
+ });
489
+ await this.emitEvent({
490
+ type: 'migration_failed',
491
+ migration,
492
+ result,
493
+ error: error instanceof Error ? error : new Error(errorMessage),
494
+ });
495
+ this.log(`Migration ${migration.id} failed:`, errorMessage);
496
+ return result;
497
+ }
498
+ }
499
+ /**
500
+ * Run all pending migrations
501
+ *
502
+ * This is the main entry point for migration execution.
503
+ * Migrations are run in version order, stopping on first failure.
504
+ */
505
+ async migrate() {
506
+ await this.initialize();
507
+ // Acquire lock
508
+ const lockAcquired = await this.acquireLock();
509
+ if (!lockAcquired) {
510
+ throw new MigrationError('Failed to acquire migration lock - another migration may be in progress');
511
+ }
512
+ try {
513
+ const startVersion = (await this.getSchemaVersion()).currentVersion;
514
+ const startTime = performance.now();
515
+ // Get pending migrations
516
+ const comparison = await this.compareVersion();
517
+ if (!comparison.needsMigration) {
518
+ return {
519
+ success: true,
520
+ fromVersion: startVersion,
521
+ toVersion: startVersion,
522
+ durationMs: 0,
523
+ results: [],
524
+ migrationsRun: 0,
525
+ migrationsSkipped: 0,
526
+ };
527
+ }
528
+ // Get migrations to run
529
+ const pendingMigrations = this.registry
530
+ .getMigrations()
531
+ .filter((m) => comparison.missingVersions.includes(m.version));
532
+ await this.emitEvent({
533
+ type: 'batch_started',
534
+ metadata: {
535
+ count: pendingMigrations.length,
536
+ versions: pendingMigrations.map((m) => m.version),
537
+ },
538
+ });
539
+ // Run migrations
540
+ const results = [];
541
+ let migrationsRun = 0;
542
+ let migrationsSkipped = 0;
543
+ for (let i = 0; i < pendingMigrations.length; i++) {
544
+ const migration = pendingMigrations[i];
545
+ if (!migration)
546
+ continue;
547
+ const result = await this.applyMigration(migration, i, pendingMigrations.length);
548
+ results.push(result);
549
+ if (result.skipped) {
550
+ migrationsSkipped++;
551
+ }
552
+ else if (result.success) {
553
+ migrationsRun++;
554
+ }
555
+ else {
556
+ // Stop on failure
557
+ break;
558
+ }
559
+ }
560
+ const durationMs = Math.round(performance.now() - startTime);
561
+ const endVersion = (await this.getSchemaVersion()).currentVersion;
562
+ const success = results.every((r) => r.success);
563
+ const batchResult = {
564
+ success,
565
+ fromVersion: startVersion,
566
+ toVersion: endVersion,
567
+ durationMs,
568
+ results,
569
+ migrationsRun,
570
+ migrationsSkipped,
571
+ };
572
+ await this.emitEvent({
573
+ type: success ? 'batch_completed' : 'batch_failed',
574
+ batchResult,
575
+ });
576
+ return batchResult;
577
+ }
578
+ finally {
579
+ await this.releaseLock();
580
+ }
581
+ }
582
+ /**
583
+ * Migrate up to a specific version
584
+ */
585
+ async migrateToVersion(targetVersion) {
586
+ await this.initialize();
587
+ const lockAcquired = await this.acquireLock();
588
+ if (!lockAcquired) {
589
+ throw new MigrationError('Failed to acquire migration lock');
590
+ }
591
+ try {
592
+ const schemaVersion = await this.getSchemaVersion();
593
+ const startVersion = schemaVersion.currentVersion;
594
+ const startTime = performance.now();
595
+ // Get migrations up to target version that haven't been applied
596
+ const appliedIds = new Set(schemaVersion.migrations
597
+ .filter((m) => m.status === 'applied')
598
+ .map((m) => m.id));
599
+ const migrationsToRun = this.registry
600
+ .getMigrationsUpTo(targetVersion)
601
+ .filter((m) => !appliedIds.has(m.id));
602
+ if (migrationsToRun.length === 0) {
603
+ return {
604
+ success: true,
605
+ fromVersion: startVersion,
606
+ toVersion: startVersion,
607
+ durationMs: 0,
608
+ results: [],
609
+ migrationsRun: 0,
610
+ migrationsSkipped: 0,
611
+ };
612
+ }
613
+ // Run migrations
614
+ const results = [];
615
+ let migrationsRun = 0;
616
+ let migrationsSkipped = 0;
617
+ for (let i = 0; i < migrationsToRun.length; i++) {
618
+ const migration = migrationsToRun[i];
619
+ if (!migration)
620
+ continue;
621
+ const result = await this.applyMigration(migration, i, migrationsToRun.length);
622
+ results.push(result);
623
+ if (result.skipped) {
624
+ migrationsSkipped++;
625
+ }
626
+ else if (result.success) {
627
+ migrationsRun++;
628
+ }
629
+ else {
630
+ break;
631
+ }
632
+ }
633
+ const durationMs = Math.round(performance.now() - startTime);
634
+ const endVersion = (await this.getSchemaVersion()).currentVersion;
635
+ return {
636
+ success: results.every((r) => r.success),
637
+ fromVersion: startVersion,
638
+ toVersion: endVersion,
639
+ durationMs,
640
+ results,
641
+ migrationsRun,
642
+ migrationsSkipped,
643
+ };
644
+ }
645
+ finally {
646
+ await this.releaseLock();
647
+ }
648
+ }
649
+ /**
650
+ * Check if a migration is reversible
651
+ *
652
+ * A migration is reversible if:
653
+ * 1. It has down SQL defined
654
+ * 2. isReversible is not explicitly set to false
655
+ */
656
+ isReversible(migration) {
657
+ if (!migration.down) {
658
+ return false;
659
+ }
660
+ // If isReversible is explicitly set, use that value
661
+ // Otherwise, default to true if down SQL exists
662
+ return migration.isReversible !== false;
663
+ }
664
+ /**
665
+ * Record a rollback in the history table
666
+ */
667
+ async recordRollbackHistory(rollbackId, migration, previousStatus, executionTimeMs, reason) {
668
+ try {
669
+ await this.executor.query(`INSERT INTO ${this.getRollbackHistoryTableName()}
670
+ (rollback_id, migration_id, version, execution_time_ms, previous_status, reason)
671
+ VALUES ($1, $2, $3, $4, $5, $6)`, [rollbackId, migration.id, migration.version, executionTimeMs, previousStatus, reason ?? null]);
672
+ }
673
+ catch (error) {
674
+ this.log('Failed to record rollback history:', error);
675
+ // Don't throw - history recording is non-critical
676
+ }
677
+ }
678
+ /**
679
+ * Get rollback history
680
+ */
681
+ async getRollbackHistory() {
682
+ await this.initialize();
683
+ const result = await this.executor.query(`SELECT rollback_id, migration_id, version,
684
+ rolled_back_at::text as rolled_back_at,
685
+ execution_time_ms, previous_status, initiated_by, reason
686
+ FROM ${this.getRollbackHistoryTableName()}
687
+ ORDER BY rolled_back_at DESC`);
688
+ return result.rows;
689
+ }
690
+ /**
691
+ * Plan a rollback operation
692
+ *
693
+ * Returns what would be rolled back without making changes.
694
+ * Useful for dry-run mode.
695
+ */
696
+ async planRollback(options) {
697
+ await this.initialize();
698
+ const schemaVersion = await this.getSchemaVersion();
699
+ const { toVersion, force = false } = options;
700
+ // Get migrations to rollback (in reverse order)
701
+ const recordsToRollback = schemaVersion.migrations
702
+ .filter((m) => m.status === 'applied' && m.version > toVersion)
703
+ .sort((a, b) => b.version - a.version);
704
+ const migrations = [];
705
+ const blockers = [];
706
+ for (const record of recordsToRollback) {
707
+ const migration = this.registry.getMigration(record.id);
708
+ if (!migration) {
709
+ blockers.push({
710
+ id: record.id,
711
+ version: record.version,
712
+ reason: 'Migration not found in registry',
713
+ });
714
+ continue;
715
+ }
716
+ if (!migration.down) {
717
+ blockers.push({
718
+ id: migration.id,
719
+ version: migration.version,
720
+ reason: 'No down SQL defined',
721
+ });
722
+ if (!force)
723
+ continue;
724
+ }
725
+ if (!this.isReversible(migration) && !force) {
726
+ blockers.push({
727
+ id: migration.id,
728
+ version: migration.version,
729
+ reason: 'Migration marked as non-reversible',
730
+ });
731
+ continue;
732
+ }
733
+ migrations.push(migration);
734
+ }
735
+ return { migrations, blockers };
736
+ }
737
+ /**
738
+ * Rollback the last migration
739
+ *
740
+ * Enhanced version with dry-run and force support.
741
+ *
742
+ * @param options Optional rollback options
743
+ */
744
+ async rollbackLast(options = {}) {
745
+ await this.initialize();
746
+ const { dryRun = false, force = false, reason } = options;
747
+ const schemaVersion = await this.getSchemaVersion();
748
+ const lastApplied = schemaVersion.migrations
749
+ .filter((m) => m.status === 'applied')
750
+ .sort((a, b) => b.version - a.version)[0];
751
+ if (!lastApplied) {
752
+ this.log('No migrations to rollback');
753
+ return null;
754
+ }
755
+ const migration = this.registry.getMigration(lastApplied.id);
756
+ if (!migration) {
757
+ throw new MigrationError(`Migration ${lastApplied.id} not found in registry`);
758
+ }
759
+ if (!migration.down) {
760
+ throw new MigrationError(`Migration ${lastApplied.id} has no rollback SQL defined`);
761
+ }
762
+ if (!this.isReversible(migration) && !force) {
763
+ throw new MigrationError(`Migration ${lastApplied.id} is marked as non-reversible. Use force=true to override.`);
764
+ }
765
+ // Dry run - return what would happen without making changes
766
+ if (dryRun) {
767
+ return {
768
+ success: true,
769
+ id: migration.id,
770
+ version: migration.version,
771
+ executionTimeMs: 0,
772
+ isDryRun: true,
773
+ };
774
+ }
775
+ const lockAcquired = await this.acquireLock();
776
+ if (!lockAcquired) {
777
+ throw new MigrationError('Failed to acquire migration lock');
778
+ }
779
+ const rollbackId = generateRollbackId();
780
+ const startTime = performance.now();
781
+ try {
782
+ await this.emitRollbackEvent({
783
+ type: 'rollback_started',
784
+ migration,
785
+ });
786
+ // Execute rollback
787
+ await this.executor.query('BEGIN');
788
+ try {
789
+ await this.executor.query(migration.down);
790
+ // Update migration status
791
+ await this.executor.query(`UPDATE ${this.getTableName()}
792
+ SET status = 'rolled_back', applied_at = CURRENT_TIMESTAMP
793
+ WHERE id = $1`, [migration.id]);
794
+ await this.executor.query('COMMIT');
795
+ const executionTimeMs = Math.round(performance.now() - startTime);
796
+ // Record in history
797
+ await this.recordRollbackHistory(rollbackId, migration, lastApplied.status, executionTimeMs, reason);
798
+ const result = {
799
+ success: true,
800
+ id: migration.id,
801
+ version: migration.version,
802
+ executionTimeMs,
803
+ };
804
+ await this.emitEvent({
805
+ type: 'migration_rolled_back',
806
+ migration,
807
+ });
808
+ await this.emitRollbackEvent({
809
+ type: 'rollback_completed',
810
+ migration,
811
+ result,
812
+ });
813
+ this.log(`Rolled back migration ${migration.id} in ${executionTimeMs}ms`);
814
+ return result;
815
+ }
816
+ catch (error) {
817
+ await this.executor.query('ROLLBACK');
818
+ const executionTimeMs = Math.round(performance.now() - startTime);
819
+ const errorMessage = error instanceof Error ? error.message : String(error);
820
+ const result = {
821
+ success: false,
822
+ id: migration.id,
823
+ version: migration.version,
824
+ executionTimeMs,
825
+ error: errorMessage,
826
+ };
827
+ await this.emitRollbackEvent({
828
+ type: 'rollback_failed',
829
+ migration,
830
+ result,
831
+ error: error instanceof Error ? error : new Error(errorMessage),
832
+ });
833
+ throw new MigrationError(`Rollback failed for migration ${migration.id}: ${errorMessage}`, {
834
+ migrationId: migration.id,
835
+ phase: 'rollback',
836
+ cause: error instanceof Error ? error : undefined,
837
+ });
838
+ }
839
+ }
840
+ finally {
841
+ await this.releaseLock();
842
+ }
843
+ }
844
+ /**
845
+ * Rollback to a specific version
846
+ *
847
+ * Enhanced version with dry-run, force mode, and comprehensive error handling.
848
+ * Rolls back all migrations after the specified version in reverse order.
849
+ *
850
+ * @param options Rollback options including target version, dry-run, and force flags
851
+ */
852
+ async rollback(options) {
853
+ await this.initialize();
854
+ const { toVersion, dryRun = false, force = false, onProgress } = options;
855
+ const lockAcquired = await this.acquireLock();
856
+ if (!lockAcquired) {
857
+ throw new MigrationError('Failed to acquire migration lock');
858
+ }
859
+ try {
860
+ const schemaVersion = await this.getSchemaVersion();
861
+ const startVersion = schemaVersion.currentVersion;
862
+ const startTime = performance.now();
863
+ // Already at or below target version
864
+ if (startVersion <= toVersion) {
865
+ return {
866
+ success: true,
867
+ fromVersion: startVersion,
868
+ toVersion: startVersion,
869
+ durationMs: 0,
870
+ results: [],
871
+ rolledBackCount: 0,
872
+ skippedCount: 0,
873
+ isDryRun: dryRun,
874
+ };
875
+ }
876
+ // Plan the rollback
877
+ const { migrations: migrationsToRollback, blockers } = await this.planRollback(options);
878
+ // If there are blockers and not forcing, report them
879
+ if (blockers.length > 0 && !force) {
880
+ return {
881
+ success: false,
882
+ fromVersion: startVersion,
883
+ toVersion: startVersion,
884
+ durationMs: 0,
885
+ results: [],
886
+ rolledBackCount: 0,
887
+ skippedCount: blockers.length,
888
+ isDryRun: dryRun,
889
+ blockedBy: blockers,
890
+ };
891
+ }
892
+ await this.emitRollbackEvent({
893
+ type: 'batch_rollback_started',
894
+ options,
895
+ metadata: {
896
+ count: migrationsToRollback.length,
897
+ versions: migrationsToRollback.map((m) => m.version),
898
+ },
899
+ });
900
+ const results = [];
901
+ let rolledBackCount = 0;
902
+ let skippedCount = 0;
903
+ const rollbackId = generateRollbackId();
904
+ for (let i = 0; i < migrationsToRollback.length; i++) {
905
+ const migration = migrationsToRollback[i];
906
+ if (!migration)
907
+ continue;
908
+ const record = schemaVersion.migrations.find((m) => m.id === migration.id);
909
+ // Emit progress
910
+ onProgress?.({
911
+ migration,
912
+ index: i,
913
+ total: migrationsToRollback.length,
914
+ phase: 'starting',
915
+ isDryRun: dryRun,
916
+ });
917
+ // Check if migration can be rolled back
918
+ if (!migration.down) {
919
+ const result = {
920
+ success: false,
921
+ id: migration.id,
922
+ version: migration.version,
923
+ executionTimeMs: 0,
924
+ skipped: true,
925
+ skipReason: 'no_down_sql',
926
+ };
927
+ results.push(result);
928
+ skippedCount++;
929
+ onProgress?.({
930
+ migration,
931
+ index: i,
932
+ total: migrationsToRollback.length,
933
+ phase: 'skipped',
934
+ isDryRun: dryRun,
935
+ });
936
+ await this.emitRollbackEvent({
937
+ type: 'rollback_skipped',
938
+ migration,
939
+ result,
940
+ });
941
+ if (!force) {
942
+ // Stop on non-reversible migration unless forcing
943
+ break;
944
+ }
945
+ continue;
946
+ }
947
+ if (!this.isReversible(migration) && !force) {
948
+ const result = {
949
+ success: false,
950
+ id: migration.id,
951
+ version: migration.version,
952
+ executionTimeMs: 0,
953
+ skipped: true,
954
+ skipReason: 'non_reversible',
955
+ };
956
+ results.push(result);
957
+ skippedCount++;
958
+ onProgress?.({
959
+ migration,
960
+ index: i,
961
+ total: migrationsToRollback.length,
962
+ phase: 'skipped',
963
+ isDryRun: dryRun,
964
+ });
965
+ await this.emitRollbackEvent({
966
+ type: 'rollback_skipped',
967
+ migration,
968
+ result,
969
+ });
970
+ break;
971
+ }
972
+ // Dry run - just record what would happen
973
+ if (dryRun) {
974
+ const result = {
975
+ success: true,
976
+ id: migration.id,
977
+ version: migration.version,
978
+ executionTimeMs: 0,
979
+ isDryRun: true,
980
+ };
981
+ results.push(result);
982
+ rolledBackCount++;
983
+ onProgress?.({
984
+ migration,
985
+ index: i,
986
+ total: migrationsToRollback.length,
987
+ phase: 'completed',
988
+ durationMs: 0,
989
+ isDryRun: true,
990
+ });
991
+ continue;
992
+ }
993
+ // Execute the rollback
994
+ const migrationStartTime = performance.now();
995
+ onProgress?.({
996
+ migration,
997
+ index: i,
998
+ total: migrationsToRollback.length,
999
+ phase: 'executing',
1000
+ isDryRun: false,
1001
+ });
1002
+ try {
1003
+ await this.executor.query('BEGIN');
1004
+ await this.executor.query(migration.down);
1005
+ await this.executor.query(`UPDATE ${this.getTableName()}
1006
+ SET status = 'rolled_back', applied_at = CURRENT_TIMESTAMP
1007
+ WHERE id = $1`, [migration.id]);
1008
+ await this.executor.query('COMMIT');
1009
+ const executionTimeMs = Math.round(performance.now() - migrationStartTime);
1010
+ // Record in history
1011
+ await this.recordRollbackHistory(rollbackId, migration, record?.status ?? 'applied', executionTimeMs);
1012
+ const result = {
1013
+ success: true,
1014
+ id: migration.id,
1015
+ version: migration.version,
1016
+ executionTimeMs,
1017
+ };
1018
+ results.push(result);
1019
+ rolledBackCount++;
1020
+ onProgress?.({
1021
+ migration,
1022
+ index: i,
1023
+ total: migrationsToRollback.length,
1024
+ phase: 'completed',
1025
+ durationMs: executionTimeMs,
1026
+ isDryRun: false,
1027
+ });
1028
+ await this.emitEvent({
1029
+ type: 'migration_rolled_back',
1030
+ migration,
1031
+ });
1032
+ await this.emitRollbackEvent({
1033
+ type: 'rollback_completed',
1034
+ migration,
1035
+ result,
1036
+ });
1037
+ this.log(`Rolled back migration ${migration.id} in ${executionTimeMs}ms`);
1038
+ }
1039
+ catch (error) {
1040
+ try {
1041
+ await this.executor.query('ROLLBACK');
1042
+ }
1043
+ catch {
1044
+ // Ignore rollback errors
1045
+ }
1046
+ const executionTimeMs = Math.round(performance.now() - migrationStartTime);
1047
+ const errorMessage = error instanceof Error ? error.message : String(error);
1048
+ const result = {
1049
+ success: false,
1050
+ id: migration.id,
1051
+ version: migration.version,
1052
+ executionTimeMs,
1053
+ error: errorMessage,
1054
+ };
1055
+ results.push(result);
1056
+ onProgress?.({
1057
+ migration,
1058
+ index: i,
1059
+ total: migrationsToRollback.length,
1060
+ phase: 'failed',
1061
+ durationMs: executionTimeMs,
1062
+ error: errorMessage,
1063
+ isDryRun: false,
1064
+ });
1065
+ await this.emitRollbackEvent({
1066
+ type: 'rollback_failed',
1067
+ migration,
1068
+ result,
1069
+ error: error instanceof Error ? error : new Error(errorMessage),
1070
+ });
1071
+ this.log(`Rollback failed for ${migration.id}:`, errorMessage);
1072
+ // Stop on failure
1073
+ break;
1074
+ }
1075
+ }
1076
+ const durationMs = Math.round(performance.now() - startTime);
1077
+ const endVersion = dryRun
1078
+ ? toVersion
1079
+ : (await this.getSchemaVersion()).currentVersion;
1080
+ const success = results.every((r) => r.success || r.skipped);
1081
+ const batchResult = {
1082
+ success,
1083
+ fromVersion: startVersion,
1084
+ toVersion: endVersion,
1085
+ durationMs,
1086
+ results,
1087
+ rolledBackCount,
1088
+ skippedCount,
1089
+ isDryRun: dryRun,
1090
+ ...(blockers.length > 0 && { blockedBy: blockers }),
1091
+ };
1092
+ await this.emitRollbackEvent({
1093
+ type: success ? 'batch_rollback_completed' : 'batch_rollback_failed',
1094
+ batchResult,
1095
+ options,
1096
+ });
1097
+ return batchResult;
1098
+ }
1099
+ finally {
1100
+ await this.releaseLock();
1101
+ }
1102
+ }
1103
+ /**
1104
+ * Rollback to a specific version (legacy API)
1105
+ *
1106
+ * @deprecated Use rollback() instead for more options
1107
+ */
1108
+ async rollbackToVersion(targetVersion) {
1109
+ const result = await this.rollback({ toVersion: targetVersion });
1110
+ // Convert BatchRollbackResult to BatchMigrationResult for backwards compatibility
1111
+ return {
1112
+ success: result.success,
1113
+ fromVersion: result.fromVersion,
1114
+ toVersion: result.toVersion,
1115
+ durationMs: result.durationMs,
1116
+ results: result.results.map((r) => ({
1117
+ success: r.success,
1118
+ id: r.id,
1119
+ executionTimeMs: r.executionTimeMs,
1120
+ error: r.error,
1121
+ skipped: r.skipped,
1122
+ })),
1123
+ migrationsRun: result.rolledBackCount,
1124
+ migrationsSkipped: result.skippedCount,
1125
+ };
1126
+ }
1127
+ /**
1128
+ * Reset all migrations
1129
+ *
1130
+ * Drops the migrations table and all tracked migrations.
1131
+ * USE WITH CAUTION - this doesn't undo the schema changes!
1132
+ */
1133
+ async reset() {
1134
+ this.log('Resetting migrations table');
1135
+ await this.executor.query(`DROP TABLE IF EXISTS ${this.getTableName()} CASCADE`);
1136
+ this.initialized = false;
1137
+ }
1138
+ /**
1139
+ * Check if the runner has been initialized
1140
+ */
1141
+ isInitialized() {
1142
+ return this.initialized;
1143
+ }
1144
+ /**
1145
+ * Get the registry
1146
+ */
1147
+ getRegistry() {
1148
+ return this.registry;
1149
+ }
1150
+ }
1151
+ /**
1152
+ * Create a migration runner
1153
+ *
1154
+ * @example
1155
+ * ```typescript
1156
+ * const runner = createMigrationRunner(pglite, registry, {
1157
+ * debug: true,
1158
+ * onProgress: (event) => console.log(event),
1159
+ * })
1160
+ *
1161
+ * await runner.migrate()
1162
+ * ```
1163
+ */
1164
+ export function createMigrationRunner(executor, registry, config = {}) {
1165
+ return new MigrationRunner(executor, registry, config);
1166
+ }
1167
+ //# sourceMappingURL=runner.js.map