@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,1060 @@
1
+ /**
2
+ * DO Migration System
3
+ *
4
+ * Durable Object-specific migration system designed for:
5
+ * - Fast, idempotent migrations (called on every request)
6
+ * - Memory-efficient for Workers environment
7
+ * - Support for schema snapshots for fast bootstrapping
8
+ * - Concurrent access protection with advisory locking
9
+ *
10
+ * @module migrations/do-migrations
11
+ */
12
+ import { createLogger, LogLevel } from '@dotdo/postgres-shared';
13
+ import { ValidationError, InvalidIdentifierError, StateError } from '@dotdo/postgres-shared/errors';
14
+ // =============================================================================
15
+ // Constants
16
+ // =============================================================================
17
+ const DEFAULT_META_TABLE = '_do_migrations';
18
+ const DEFAULT_LOCK_TIMEOUT_MS = 5000;
19
+ const DEFAULT_MIGRATION_TIMEOUT_MS = 30000;
20
+ const LOCK_KEY = 1; // Advisory lock key for migrations
21
+ // Module-level logger for DO migrations
22
+ // Level is DEBUG because the debug config flag gates whether log() is called at all.
23
+ // The logger just provides structured output - the filtering happens at call site.
24
+ const doMigrationLogger = createLogger({
25
+ level: LogLevel.DEBUG,
26
+ prefix: '[DOMigration]',
27
+ });
28
+ // Regex pattern for valid SQL identifiers (alphanumeric + underscore, starting with letter or underscore)
29
+ const VALID_SQL_IDENTIFIER_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
30
+ /**
31
+ * Validate that a string is a safe SQL identifier to prevent SQL injection.
32
+ * Must start with a letter or underscore, followed by letters, numbers, or underscores.
33
+ */
34
+ function isValidSqlIdentifier(name) {
35
+ return VALID_SQL_IDENTIFIER_PATTERN.test(name);
36
+ }
37
+ // =============================================================================
38
+ // Type Guards for MigrationExecutor
39
+ // =============================================================================
40
+ /**
41
+ * Type guard to check if executor is a plain SQL string
42
+ */
43
+ function isStringExecutor(executor) {
44
+ return typeof executor === 'string';
45
+ }
46
+ /**
47
+ * Type guard to check if executor is a function that returns SQL
48
+ * These are zero-arity functions that return string or Promise<string>
49
+ */
50
+ function isSqlFunctionExecutor(executor) {
51
+ if (typeof executor !== 'function')
52
+ return false;
53
+ // Check function signature - no parameters means SQL function
54
+ return executor.length === 0;
55
+ }
56
+ /**
57
+ * Type guard to check if executor is a function that operates on the database directly
58
+ * These are functions that take a PGlite instance and execute operations
59
+ */
60
+ function isDbFunctionExecutor(executor) {
61
+ if (typeof executor !== 'function')
62
+ return false;
63
+ // Check function signature - one parameter means DB function
64
+ return executor.length === 1;
65
+ }
66
+ // =============================================================================
67
+ // Utility Functions
68
+ // =============================================================================
69
+ /**
70
+ * Calculate a cryptographic checksum for migration content using SHA-256
71
+ */
72
+ async function calculateChecksum(content) {
73
+ const encoder = new TextEncoder();
74
+ const data = encoder.encode(content);
75
+ const hashBuffer = await crypto.subtle.digest('SHA-256', data);
76
+ const hashArray = new Uint8Array(hashBuffer);
77
+ // Use first 16 bytes (32 hex chars) for reasonable uniqueness
78
+ return Array.from(hashArray.slice(0, 16))
79
+ .map(b => b.toString(16).padStart(2, '0'))
80
+ .join('');
81
+ }
82
+ /**
83
+ * Execute a migration executor
84
+ */
85
+ async function executeExecutor(executor, db) {
86
+ if (isStringExecutor(executor)) {
87
+ await db.exec(executor);
88
+ return;
89
+ }
90
+ if (isDbFunctionExecutor(executor)) {
91
+ // Function expects db parameter - executes directly
92
+ await executor(db);
93
+ return;
94
+ }
95
+ if (isSqlFunctionExecutor(executor)) {
96
+ // Function returns SQL string
97
+ const sql = await executor();
98
+ await db.exec(sql);
99
+ return;
100
+ }
101
+ throw new ValidationError('Invalid executor type', {
102
+ code: 'INVALID_TYPE',
103
+ context: { executorType: typeof executor },
104
+ });
105
+ }
106
+ /**
107
+ * Get checksum content for a migration
108
+ */
109
+ function getMigrationChecksumContent(migration) {
110
+ const upContent = typeof migration.up === 'string' ? migration.up : migration.up.toString();
111
+ const downContent = migration.down
112
+ ? (typeof migration.down === 'string' ? migration.down : migration.down.toString())
113
+ : '';
114
+ return `v${migration.version}:${migration.name}:${upContent}:${downContent}`;
115
+ }
116
+ // =============================================================================
117
+ // DOMigrationRunner Implementation
118
+ // =============================================================================
119
+ class DOMigrationRunnerImpl {
120
+ _state = 'uninitialized';
121
+ db;
122
+ migrations;
123
+ config;
124
+ eventHandlers = new Set();
125
+ cachedVersion = null;
126
+ isInitialized = false;
127
+ constructor(db, migrations, config) {
128
+ // Validate metaTableName to prevent SQL injection
129
+ const metaTableName = config?.metaTableName ?? DEFAULT_META_TABLE;
130
+ if (!isValidSqlIdentifier(metaTableName)) {
131
+ throw new InvalidIdentifierError(metaTableName, 'table', 'Must be a valid SQL identifier (start with letter or underscore, contain only letters, numbers, and underscores)');
132
+ }
133
+ this.db = db;
134
+ this.migrations = [...migrations].sort((a, b) => a.version - b.version);
135
+ this.config = {
136
+ metaTableName,
137
+ useLocking: config?.useLocking ?? true,
138
+ lockTimeoutMs: config?.lockTimeoutMs ?? DEFAULT_LOCK_TIMEOUT_MS,
139
+ migrationTimeoutMs: config?.migrationTimeoutMs ?? DEFAULT_MIGRATION_TIMEOUT_MS,
140
+ useSnapshot: config?.useSnapshot ?? false,
141
+ allowVersionGaps: config?.allowVersionGaps ?? false,
142
+ debug: config?.debug ?? false,
143
+ dryRun: config?.dryRun ?? false,
144
+ ...(config?.snapshot !== undefined && { snapshot: config.snapshot }),
145
+ ...(config?.onEvent !== undefined && { onEvent: config.onEvent }),
146
+ };
147
+ if (config?.onEvent) {
148
+ this.eventHandlers.add(config.onEvent);
149
+ }
150
+ }
151
+ get state() {
152
+ return this._state;
153
+ }
154
+ emit(type, data) {
155
+ const event = {
156
+ type,
157
+ timestamp: new Date(),
158
+ ...data,
159
+ };
160
+ this.eventHandlers.forEach(handler => {
161
+ try {
162
+ handler(event);
163
+ }
164
+ catch (error) {
165
+ // Don't let event handler errors break migration
166
+ if (this.config.debug) {
167
+ doMigrationLogger.error('Event handler error', {
168
+ error: error instanceof Error ? error.message : String(error),
169
+ });
170
+ }
171
+ }
172
+ });
173
+ }
174
+ async acquireLock() {
175
+ if (!this.config.useLocking) {
176
+ return true;
177
+ }
178
+ try {
179
+ // Use pg_try_advisory_lock with timeout
180
+ const startTime = Date.now();
181
+ while (Date.now() - startTime < this.config.lockTimeoutMs) {
182
+ const result = await this.db.query(`SELECT pg_try_advisory_lock(${LOCK_KEY})`);
183
+ if (result.rows[0]?.pg_try_advisory_lock) {
184
+ this.emit('lock:acquired');
185
+ return true;
186
+ }
187
+ // Wait a bit before retrying
188
+ await new Promise(resolve => setTimeout(resolve, 50));
189
+ }
190
+ this.emit('lock:timeout');
191
+ return false;
192
+ }
193
+ catch (error) {
194
+ // If advisory locks aren't supported, proceed without locking
195
+ if (this.config.debug) {
196
+ doMigrationLogger.warn('Advisory lock not available, proceeding without lock');
197
+ }
198
+ return true;
199
+ }
200
+ }
201
+ async releaseLock() {
202
+ if (!this.config.useLocking) {
203
+ return;
204
+ }
205
+ try {
206
+ await this.db.query(`SELECT pg_advisory_unlock(${LOCK_KEY})`);
207
+ this.emit('lock:released');
208
+ }
209
+ catch (error) {
210
+ // Ignore unlock errors
211
+ if (this.config.debug) {
212
+ doMigrationLogger.warn('Failed to release advisory lock', {
213
+ error: error instanceof Error ? error.message : String(error),
214
+ });
215
+ }
216
+ }
217
+ }
218
+ async initialize() {
219
+ if (this.isInitialized) {
220
+ return;
221
+ }
222
+ this._state = 'initializing';
223
+ try {
224
+ // Create migrations meta table if not exists
225
+ await this.db.exec(`
226
+ CREATE TABLE IF NOT EXISTS ${this.config.metaTableName} (
227
+ version INTEGER PRIMARY KEY,
228
+ name TEXT NOT NULL,
229
+ checksum TEXT NOT NULL,
230
+ applied_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
231
+ execution_time_ms INTEGER
232
+ )
233
+ `);
234
+ this.isInitialized = true;
235
+ this._state = 'ready';
236
+ this.emit('initialized');
237
+ }
238
+ catch (error) {
239
+ this._state = 'error';
240
+ throw error;
241
+ }
242
+ }
243
+ async migrate() {
244
+ const startTime = Date.now();
245
+ const results = [];
246
+ let fromVersion = await this.getCurrentVersion();
247
+ let migrationsRun = 0;
248
+ let migrationsSkipped = 0;
249
+ if (!this.isInitialized) {
250
+ await this.initialize();
251
+ }
252
+ const pendingMigrations = await this.getPendingMigrations();
253
+ if (pendingMigrations.length === 0) {
254
+ return {
255
+ success: true,
256
+ fromVersion,
257
+ toVersion: fromVersion,
258
+ totalTimeMs: Date.now() - startTime,
259
+ results: [],
260
+ migrationsRun: 0,
261
+ migrationsSkipped: 0,
262
+ };
263
+ }
264
+ // Acquire lock
265
+ const lockAcquired = await this.acquireLock();
266
+ if (!lockAcquired) {
267
+ return {
268
+ success: false,
269
+ fromVersion,
270
+ toVersion: fromVersion,
271
+ totalTimeMs: Date.now() - startTime,
272
+ results: [],
273
+ migrationsRun: 0,
274
+ migrationsSkipped: 0,
275
+ error: 'Failed to acquire migration lock',
276
+ };
277
+ }
278
+ this._state = 'migrating';
279
+ this.emit('batch:start', { metadata: { fromVersion, pendingCount: pendingMigrations.length } });
280
+ try {
281
+ // Re-check pending migrations after acquiring lock (another process may have run them)
282
+ const actualPendingMigrations = await this.getPendingMigrations();
283
+ for (const migration of actualPendingMigrations) {
284
+ const migrationStartTime = Date.now();
285
+ this.emit('migration:start', { version: migration.version, name: migration.name });
286
+ try {
287
+ if (this.config.dryRun) {
288
+ // In dry-run mode, just record what would be done
289
+ results.push({
290
+ success: true,
291
+ version: migration.version,
292
+ name: migration.name,
293
+ executionTimeMs: 0,
294
+ skipped: true,
295
+ });
296
+ migrationsSkipped++;
297
+ this.emit('migration:skip', { version: migration.version, name: migration.name });
298
+ continue;
299
+ }
300
+ const transactional = migration.transactional !== false;
301
+ if (transactional) {
302
+ await this.db.exec('BEGIN');
303
+ }
304
+ try {
305
+ await executeExecutor(migration.up, this.db);
306
+ // Record the migration
307
+ const checksum = await calculateChecksum(getMigrationChecksumContent(migration));
308
+ const executionTimeMs = Date.now() - migrationStartTime;
309
+ await this.db.query(`INSERT INTO ${this.config.metaTableName} (version, name, checksum, execution_time_ms) VALUES ($1, $2, $3, $4)`, [migration.version, migration.name, checksum, executionTimeMs]);
310
+ if (transactional) {
311
+ await this.db.exec('COMMIT');
312
+ }
313
+ results.push({
314
+ success: true,
315
+ version: migration.version,
316
+ name: migration.name,
317
+ executionTimeMs,
318
+ checksum,
319
+ });
320
+ migrationsRun++;
321
+ this.cachedVersion = migration.version;
322
+ this.emit('migration:complete', {
323
+ version: migration.version,
324
+ name: migration.name,
325
+ durationMs: executionTimeMs,
326
+ });
327
+ }
328
+ catch (error) {
329
+ if (transactional) {
330
+ await this.db.exec('ROLLBACK');
331
+ }
332
+ throw error;
333
+ }
334
+ }
335
+ catch (error) {
336
+ const errorMessage = error instanceof Error ? error.message : String(error);
337
+ const executionTimeMs = Date.now() - migrationStartTime;
338
+ results.push({
339
+ success: false,
340
+ version: migration.version,
341
+ name: migration.name,
342
+ executionTimeMs,
343
+ error: errorMessage,
344
+ });
345
+ this.emit('migration:error', {
346
+ version: migration.version,
347
+ name: migration.name,
348
+ error: error instanceof Error ? error : new Error(errorMessage),
349
+ durationMs: executionTimeMs,
350
+ });
351
+ // Stop on first failure
352
+ break;
353
+ }
354
+ }
355
+ const toVersion = await this.getCurrentVersion();
356
+ const success = results.every(r => r.success);
357
+ this._state = success ? 'ready' : 'error';
358
+ const failedResult = results.find(r => !r.success);
359
+ const batchResult = {
360
+ success,
361
+ fromVersion,
362
+ toVersion,
363
+ totalTimeMs: Date.now() - startTime,
364
+ results,
365
+ migrationsRun,
366
+ migrationsSkipped,
367
+ ...(failedResult?.error !== undefined && { error: failedResult.error }),
368
+ };
369
+ this.emit(success ? 'batch:complete' : 'batch:error', {
370
+ durationMs: batchResult.totalTimeMs,
371
+ metadata: { fromVersion, toVersion, migrationsRun, migrationsSkipped },
372
+ ...(batchResult.error !== undefined && { error: new Error(batchResult.error) }),
373
+ });
374
+ return batchResult;
375
+ }
376
+ finally {
377
+ await this.releaseLock();
378
+ }
379
+ }
380
+ async ensureMigrated() {
381
+ if (!this.isInitialized) {
382
+ await this.initialize();
383
+ }
384
+ // Check if snapshot should be used for new DOs
385
+ if (this.config.useSnapshot && this.config.snapshot) {
386
+ const currentVersion = await this.getCurrentVersion();
387
+ if (currentVersion === 0) {
388
+ // New DO - use snapshot
389
+ return this.applySnapshot(this.config.snapshot);
390
+ }
391
+ }
392
+ return this.migrate();
393
+ }
394
+ async applySnapshot(snapshot) {
395
+ const startTime = Date.now();
396
+ // Validate snapshot checksum
397
+ const currentChecksum = await this.calculateMigrationsChecksum();
398
+ if (snapshot.migrationsChecksum !== currentChecksum) {
399
+ // Snapshot is stale, fall back to incremental migrations
400
+ if (this.config.debug) {
401
+ doMigrationLogger.warn('Snapshot checksum mismatch, falling back to incremental migrations');
402
+ }
403
+ return this.migrate();
404
+ }
405
+ const lockAcquired = await this.acquireLock();
406
+ if (!lockAcquired) {
407
+ return {
408
+ success: false,
409
+ fromVersion: 0,
410
+ toVersion: 0,
411
+ totalTimeMs: Date.now() - startTime,
412
+ results: [],
413
+ migrationsRun: 0,
414
+ migrationsSkipped: 0,
415
+ error: 'Failed to acquire migration lock',
416
+ };
417
+ }
418
+ this._state = 'migrating';
419
+ try {
420
+ await this.db.exec('BEGIN');
421
+ try {
422
+ // Apply schema DDL
423
+ await this.db.exec(snapshot.schemaDDL);
424
+ // Apply seed data if present
425
+ if (snapshot.seedDataDDL) {
426
+ await this.db.exec(snapshot.seedDataDDL);
427
+ }
428
+ // Record all migration versions
429
+ for (const version of snapshot.includedVersions) {
430
+ const migration = this.migrations.find(m => m.version === version);
431
+ if (migration) {
432
+ const checksum = await calculateChecksum(getMigrationChecksumContent(migration));
433
+ await this.db.query(`INSERT INTO ${this.config.metaTableName} (version, name, checksum, execution_time_ms) VALUES ($1, $2, $3, $4)`, [migration.version, migration.name, checksum, 0]);
434
+ }
435
+ }
436
+ await this.db.exec('COMMIT');
437
+ this.cachedVersion = snapshot.targetVersion;
438
+ this._state = 'ready';
439
+ this.emit('snapshot:applied', {
440
+ metadata: { targetVersion: snapshot.targetVersion, includedVersions: snapshot.includedVersions },
441
+ });
442
+ return {
443
+ success: true,
444
+ fromVersion: 0,
445
+ toVersion: snapshot.targetVersion,
446
+ totalTimeMs: Date.now() - startTime,
447
+ results: snapshot.includedVersions.map(v => {
448
+ const m = this.migrations.find(m => m.version === v);
449
+ return {
450
+ success: true,
451
+ version: v,
452
+ name: m?.name ?? `migration_${v}`,
453
+ executionTimeMs: 0,
454
+ skipped: false,
455
+ };
456
+ }),
457
+ migrationsRun: snapshot.includedVersions.length,
458
+ migrationsSkipped: 0,
459
+ };
460
+ }
461
+ catch (error) {
462
+ await this.db.exec('ROLLBACK');
463
+ throw error;
464
+ }
465
+ }
466
+ catch (error) {
467
+ this._state = 'error';
468
+ const errorMessage = error instanceof Error ? error.message : String(error);
469
+ // Fall back to incremental migrations
470
+ if (this.config.debug) {
471
+ doMigrationLogger.warn('Snapshot application failed, falling back to incremental migrations', {
472
+ error: errorMessage,
473
+ });
474
+ }
475
+ return this.migrate();
476
+ }
477
+ finally {
478
+ await this.releaseLock();
479
+ }
480
+ }
481
+ async calculateMigrationsChecksum() {
482
+ const content = this.migrations
483
+ .map(m => getMigrationChecksumContent(m))
484
+ .join('|');
485
+ return await calculateChecksum(content);
486
+ }
487
+ async getCurrentVersion() {
488
+ if (this.cachedVersion !== null) {
489
+ return this.cachedVersion;
490
+ }
491
+ if (!this.isInitialized) {
492
+ await this.initialize();
493
+ }
494
+ try {
495
+ const result = await this.db.query(`SELECT MAX(version) as max FROM ${this.config.metaTableName}`);
496
+ const version = result.rows[0]?.max ?? 0;
497
+ this.cachedVersion = version;
498
+ return version;
499
+ }
500
+ catch (error) {
501
+ // Table might not exist yet
502
+ return 0;
503
+ }
504
+ }
505
+ async getSchemaVersion() {
506
+ if (!this.isInitialized) {
507
+ await this.initialize();
508
+ }
509
+ try {
510
+ const result = await this.db.query(`
511
+ SELECT
512
+ MAX(version) as current_version,
513
+ COUNT(*) as applied_count,
514
+ MAX(applied_at) as last_migration_at
515
+ FROM ${this.config.metaTableName}
516
+ `);
517
+ const row = result.rows[0];
518
+ const currentVersion = row?.current_version ?? 0;
519
+ const appliedCount = Number(row?.applied_count ?? 0);
520
+ const lastMigrationAt = row?.last_migration_at ? new Date(row.last_migration_at) : null;
521
+ // Calculate schema checksum from applied migrations
522
+ const appliedMigrations = await this.getAppliedMigrations();
523
+ const schemaChecksum = appliedMigrations.length > 0
524
+ ? await calculateChecksum(appliedMigrations.map(m => m.checksum).join('|'))
525
+ : null;
526
+ return {
527
+ currentVersion,
528
+ appliedCount,
529
+ lastMigrationAt,
530
+ schemaChecksum,
531
+ };
532
+ }
533
+ catch (error) {
534
+ return {
535
+ currentVersion: 0,
536
+ appliedCount: 0,
537
+ lastMigrationAt: null,
538
+ schemaChecksum: null,
539
+ };
540
+ }
541
+ }
542
+ async getPendingMigrations() {
543
+ const currentVersion = await this.getCurrentVersion();
544
+ const appliedVersions = new Set((await this.getAppliedMigrations()).map(m => m.version));
545
+ return this.migrations.filter(m => m.version > currentVersion || !appliedVersions.has(m.version));
546
+ }
547
+ async hasPendingMigrations() {
548
+ const pending = await this.getPendingMigrations();
549
+ return pending.length > 0;
550
+ }
551
+ async rollbackTo(targetVersion, options) {
552
+ const startTime = Date.now();
553
+ const currentVersion = await this.getCurrentVersion();
554
+ const results = [];
555
+ if (targetVersion >= currentVersion) {
556
+ return {
557
+ success: true,
558
+ fromVersion: currentVersion,
559
+ toVersion: currentVersion,
560
+ totalTimeMs: Date.now() - startTime,
561
+ results: [],
562
+ migrationsRun: 0,
563
+ migrationsSkipped: 0,
564
+ };
565
+ }
566
+ // Get migrations to rollback (in reverse order)
567
+ const migrationsToRollback = this.migrations
568
+ .filter(m => m.version > targetVersion && m.version <= currentVersion)
569
+ .sort((a, b) => b.version - a.version);
570
+ // Check for non-reversible migrations
571
+ if (!options?.force) {
572
+ const nonReversible = migrationsToRollback.find(m => m.isReversible === false || (!m.down && m.isReversible !== true));
573
+ if (nonReversible) {
574
+ return {
575
+ success: false,
576
+ fromVersion: currentVersion,
577
+ toVersion: currentVersion,
578
+ totalTimeMs: Date.now() - startTime,
579
+ results: [],
580
+ migrationsRun: 0,
581
+ migrationsSkipped: 0,
582
+ error: `Migration ${nonReversible.version} (${nonReversible.name}) is not reversible. Use force option to skip.`,
583
+ };
584
+ }
585
+ }
586
+ if (options?.dryRun) {
587
+ return {
588
+ success: true,
589
+ fromVersion: currentVersion,
590
+ toVersion: targetVersion,
591
+ totalTimeMs: Date.now() - startTime,
592
+ results: migrationsToRollback.map(m => ({
593
+ success: true,
594
+ version: m.version,
595
+ name: m.name,
596
+ executionTimeMs: 0,
597
+ skipped: true,
598
+ })),
599
+ migrationsRun: 0,
600
+ migrationsSkipped: migrationsToRollback.length,
601
+ };
602
+ }
603
+ const lockAcquired = await this.acquireLock();
604
+ if (!lockAcquired) {
605
+ return {
606
+ success: false,
607
+ fromVersion: currentVersion,
608
+ toVersion: currentVersion,
609
+ totalTimeMs: Date.now() - startTime,
610
+ results: [],
611
+ migrationsRun: 0,
612
+ migrationsSkipped: 0,
613
+ error: 'Failed to acquire migration lock',
614
+ };
615
+ }
616
+ this._state = 'migrating';
617
+ try {
618
+ let migrationsRun = 0;
619
+ let migrationsSkipped = 0;
620
+ for (const migration of migrationsToRollback) {
621
+ const migrationStartTime = Date.now();
622
+ if (!migration.down) {
623
+ // Skip migrations without down
624
+ results.push({
625
+ success: true,
626
+ version: migration.version,
627
+ name: migration.name,
628
+ executionTimeMs: 0,
629
+ skipped: true,
630
+ });
631
+ migrationsSkipped++;
632
+ if (options?.onProgress) {
633
+ options.onProgress({
634
+ type: 'migration:skip',
635
+ timestamp: new Date(),
636
+ version: migration.version,
637
+ name: migration.name,
638
+ });
639
+ }
640
+ continue;
641
+ }
642
+ try {
643
+ const transactional = migration.transactional !== false;
644
+ if (transactional) {
645
+ await this.db.exec('BEGIN');
646
+ }
647
+ try {
648
+ await executeExecutor(migration.down, this.db);
649
+ // Remove the migration record
650
+ await this.db.query(`DELETE FROM ${this.config.metaTableName} WHERE version = $1`, [migration.version]);
651
+ if (transactional) {
652
+ await this.db.exec('COMMIT');
653
+ }
654
+ const executionTimeMs = Date.now() - migrationStartTime;
655
+ results.push({
656
+ success: true,
657
+ version: migration.version,
658
+ name: migration.name,
659
+ executionTimeMs,
660
+ });
661
+ migrationsRun++;
662
+ if (options?.onProgress) {
663
+ options.onProgress({
664
+ type: 'migration:complete',
665
+ timestamp: new Date(),
666
+ version: migration.version,
667
+ name: migration.name,
668
+ durationMs: executionTimeMs,
669
+ });
670
+ }
671
+ }
672
+ catch (error) {
673
+ if (transactional) {
674
+ await this.db.exec('ROLLBACK');
675
+ }
676
+ throw error;
677
+ }
678
+ }
679
+ catch (error) {
680
+ const errorMessage = error instanceof Error ? error.message : String(error);
681
+ results.push({
682
+ success: false,
683
+ version: migration.version,
684
+ name: migration.name,
685
+ executionTimeMs: Date.now() - migrationStartTime,
686
+ error: errorMessage,
687
+ });
688
+ if (options?.onProgress) {
689
+ options.onProgress({
690
+ type: 'migration:error',
691
+ timestamp: new Date(),
692
+ version: migration.version,
693
+ name: migration.name,
694
+ error: error instanceof Error ? error : new Error(errorMessage),
695
+ });
696
+ }
697
+ // Stop on first failure
698
+ break;
699
+ }
700
+ }
701
+ // Invalidate cache
702
+ this.cachedVersion = null;
703
+ const toVersion = await this.getCurrentVersion();
704
+ const success = results.every(r => r.success);
705
+ this._state = success ? 'ready' : 'error';
706
+ const failedError = results.find(r => !r.success)?.error;
707
+ const result = {
708
+ success,
709
+ fromVersion: currentVersion,
710
+ toVersion,
711
+ totalTimeMs: Date.now() - startTime,
712
+ results,
713
+ migrationsRun,
714
+ migrationsSkipped,
715
+ };
716
+ if (failedError !== undefined) {
717
+ result.error = failedError;
718
+ }
719
+ return result;
720
+ }
721
+ finally {
722
+ await this.releaseLock();
723
+ }
724
+ }
725
+ async rollbackLast(count = 1, options) {
726
+ const currentVersion = await this.getCurrentVersion();
727
+ const appliedMigrations = await this.getAppliedMigrations();
728
+ // Sort by version descending and take the last 'count' migrations
729
+ const toRollback = appliedMigrations
730
+ .sort((a, b) => b.version - a.version)
731
+ .slice(0, count);
732
+ if (toRollback.length === 0) {
733
+ return {
734
+ success: true,
735
+ fromVersion: currentVersion,
736
+ toVersion: currentVersion,
737
+ totalTimeMs: 0,
738
+ results: [],
739
+ migrationsRun: 0,
740
+ migrationsSkipped: 0,
741
+ };
742
+ }
743
+ // Find the target version (one less than the lowest version to rollback)
744
+ const lowestVersion = Math.min(...toRollback.map(m => m.version));
745
+ const targetVersion = this.migrations
746
+ .filter(m => m.version < lowestVersion)
747
+ .reduce((max, m) => Math.max(max, m.version), 0);
748
+ return this.rollbackTo(targetVersion, options);
749
+ }
750
+ async reset() {
751
+ const lockAcquired = await this.acquireLock();
752
+ if (!lockAcquired) {
753
+ throw new StateError('Failed to acquire migration lock for reset', {
754
+ currentState: 'locked',
755
+ expectedStates: ['unlocked'],
756
+ });
757
+ }
758
+ try {
759
+ await this.db.exec(`DROP TABLE IF EXISTS ${this.config.metaTableName}`);
760
+ this.cachedVersion = null;
761
+ this.isInitialized = false;
762
+ this._state = 'uninitialized';
763
+ }
764
+ finally {
765
+ await this.releaseLock();
766
+ }
767
+ }
768
+ async validate() {
769
+ const issues = [];
770
+ // Check for required fields
771
+ for (const migration of this.migrations) {
772
+ if (typeof migration.version !== 'number' || migration.version < 1) {
773
+ issues.push({
774
+ severity: 'error',
775
+ version: migration.version,
776
+ message: `Migration version must be a positive integer, got: ${migration.version}`,
777
+ suggestion: 'Use a positive integer for the version field',
778
+ });
779
+ }
780
+ if (!migration.name || typeof migration.name !== 'string') {
781
+ issues.push({
782
+ severity: 'error',
783
+ version: migration.version,
784
+ message: 'Migration name is required and must be a non-empty string',
785
+ suggestion: 'Add a descriptive name for the migration',
786
+ });
787
+ }
788
+ if (migration.up === undefined ||
789
+ (typeof migration.up !== 'string' && typeof migration.up !== 'function')) {
790
+ issues.push({
791
+ severity: 'error',
792
+ version: migration.version,
793
+ message: 'Migration up must be a string or function',
794
+ suggestion: 'Provide SQL string or function for the up migration',
795
+ });
796
+ }
797
+ if (migration.down !== undefined &&
798
+ typeof migration.down !== 'string' &&
799
+ typeof migration.down !== 'function') {
800
+ issues.push({
801
+ severity: 'error',
802
+ version: migration.version,
803
+ message: 'Migration down must be a string or function if provided',
804
+ suggestion: 'Provide SQL string or function for the down migration',
805
+ });
806
+ }
807
+ // Warning for missing down migration
808
+ if (!migration.down && migration.isReversible !== false) {
809
+ issues.push({
810
+ severity: 'warning',
811
+ version: migration.version,
812
+ message: 'Migration has no down migration defined',
813
+ suggestion: 'Add a down migration or set isReversible: false',
814
+ });
815
+ }
816
+ }
817
+ // Check for duplicate versions
818
+ const versions = new Set();
819
+ for (const migration of this.migrations) {
820
+ if (versions.has(migration.version)) {
821
+ issues.push({
822
+ severity: 'error',
823
+ version: migration.version,
824
+ message: `Duplicate migration version: ${migration.version}`,
825
+ suggestion: 'Use unique version numbers for each migration',
826
+ });
827
+ }
828
+ versions.add(migration.version);
829
+ }
830
+ // Check for sequential versions (if not allowing gaps)
831
+ if (!this.config.allowVersionGaps) {
832
+ const sortedVersions = Array.from(versions).sort((a, b) => a - b);
833
+ for (let i = 1; i < sortedVersions.length; i++) {
834
+ const currentVersion = sortedVersions[i];
835
+ const previousVersion = sortedVersions[i - 1];
836
+ if (currentVersion !== previousVersion + 1) {
837
+ issues.push({
838
+ severity: 'warning',
839
+ version: currentVersion,
840
+ message: `Gap in version numbers between ${previousVersion} and ${currentVersion}`,
841
+ suggestion: 'Use sequential version numbers or enable allowVersionGaps config',
842
+ });
843
+ }
844
+ }
845
+ }
846
+ // Check for checksum mismatches with applied migrations
847
+ try {
848
+ const appliedMigrations = await this.getAppliedMigrations();
849
+ const appliedByVersion = new Map(appliedMigrations.map(m => [m.version, m]));
850
+ for (const migration of this.migrations) {
851
+ const applied = appliedByVersion.get(migration.version);
852
+ if (applied) {
853
+ const currentChecksum = await calculateChecksum(getMigrationChecksumContent(migration));
854
+ if (applied.checksum !== currentChecksum) {
855
+ issues.push({
856
+ severity: 'error',
857
+ version: migration.version,
858
+ message: `Migration ${migration.version} has been modified after being applied`,
859
+ suggestion: 'Migrations should not be modified after being applied. Create a new migration instead.',
860
+ });
861
+ }
862
+ }
863
+ }
864
+ }
865
+ catch (error) {
866
+ // Meta table might not exist yet, skip checksum validation
867
+ }
868
+ const errorCount = issues.filter(i => i.severity === 'error').length;
869
+ const warningCount = issues.filter(i => i.severity === 'warning').length;
870
+ return {
871
+ valid: errorCount === 0,
872
+ issues,
873
+ errorCount,
874
+ warningCount,
875
+ };
876
+ }
877
+ getMigrations() {
878
+ return [...this.migrations];
879
+ }
880
+ getLatestVersion() {
881
+ if (this.migrations.length === 0) {
882
+ return 0;
883
+ }
884
+ return Math.max(...this.migrations.map(m => m.version));
885
+ }
886
+ async getAppliedMigrations() {
887
+ if (!this.isInitialized) {
888
+ await this.initialize();
889
+ }
890
+ try {
891
+ const result = await this.db.query(`
892
+ SELECT version, name, checksum, applied_at, execution_time_ms
893
+ FROM ${this.config.metaTableName}
894
+ ORDER BY version ASC
895
+ `);
896
+ return result.rows.map(row => ({
897
+ version: row.version,
898
+ name: row.name,
899
+ checksum: row.checksum,
900
+ appliedAt: new Date(row.applied_at),
901
+ executionTimeMs: row.execution_time_ms,
902
+ }));
903
+ }
904
+ catch (error) {
905
+ return [];
906
+ }
907
+ }
908
+ onEvent(handler) {
909
+ this.eventHandlers.add(handler);
910
+ return () => {
911
+ this.eventHandlers.delete(handler);
912
+ };
913
+ }
914
+ }
915
+ // =============================================================================
916
+ // Factory Functions
917
+ // =============================================================================
918
+ /**
919
+ * Create a DO migration runner
920
+ *
921
+ * @param db - PGlite database instance
922
+ * @param migrations - Array of migrations to manage
923
+ * @param config - Optional configuration for the runner
924
+ * @returns A configured DOMigrationRunner instance
925
+ *
926
+ * @example
927
+ * ```typescript
928
+ * import { createDOMigrationRunner } from './do-migrations'
929
+ *
930
+ * const migrations = [
931
+ * {
932
+ * version: 1,
933
+ * name: 'create_users_table',
934
+ * up: `CREATE TABLE users (
935
+ * id SERIAL PRIMARY KEY,
936
+ * email TEXT UNIQUE NOT NULL,
937
+ * created_at TIMESTAMPTZ DEFAULT NOW()
938
+ * )`,
939
+ * down: 'DROP TABLE users',
940
+ * },
941
+ * {
942
+ * version: 2,
943
+ * name: 'add_users_name',
944
+ * up: 'ALTER TABLE users ADD COLUMN name TEXT',
945
+ * down: 'ALTER TABLE users DROP COLUMN name',
946
+ * },
947
+ * ]
948
+ *
949
+ * const runner = createDOMigrationRunner(pglite, migrations, {
950
+ * metaTableName: '_migrations',
951
+ * useLocking: true,
952
+ * })
953
+ *
954
+ * // Run all pending migrations
955
+ * const result = await runner.migrate()
956
+ * console.log(`Migrated from v${result.fromVersion} to v${result.toVersion}`)
957
+ * ```
958
+ *
959
+ * @example
960
+ * ```typescript
961
+ * // With event handlers for logging
962
+ * const runner = createDOMigrationRunner(pglite, migrations, {
963
+ * onEvent: (event) => {
964
+ * if (event.type === 'migration:complete') {
965
+ * console.log(`Applied migration ${event.version}: ${event.name}`)
966
+ * }
967
+ * },
968
+ * })
969
+ * ```
970
+ */
971
+ export const createDOMigrationRunner = (db, migrations, config) => {
972
+ if (!db) {
973
+ throw new ValidationError('Database instance is required', {
974
+ code: 'VALIDATION_ERROR',
975
+ fields: { db: 'Required parameter is missing' },
976
+ });
977
+ }
978
+ if (!migrations || !Array.isArray(migrations)) {
979
+ throw new ValidationError('Migrations array is required', {
980
+ code: 'VALIDATION_ERROR',
981
+ fields: { migrations: 'Must be an array' },
982
+ });
983
+ }
984
+ return new DOMigrationRunnerImpl(db, migrations, config);
985
+ };
986
+ /**
987
+ * Generate a schema snapshot from migrations
988
+ *
989
+ * Creates a consolidated schema DDL from a set of migrations for fast
990
+ * bootstrapping of new Durable Objects.
991
+ *
992
+ * @param migrations - Array of migrations to consolidate
993
+ * @param options - Optional configuration
994
+ * @returns Schema snapshot with DDL and metadata
995
+ *
996
+ * @example
997
+ * ```typescript
998
+ * import { generateDOSchemaSnapshot } from './do-migrations'
999
+ *
1000
+ * const snapshot = await generateDOSchemaSnapshot(migrations, {
1001
+ * includeSeedData: true,
1002
+ * })
1003
+ *
1004
+ * console.log(`Target version: ${snapshot.targetVersion}`)
1005
+ * console.log(`Schema DDL:\n${snapshot.schemaDDL}`)
1006
+ *
1007
+ * // Use with runner for fast bootstrap
1008
+ * const runner = createDOMigrationRunner(pglite, migrations, {
1009
+ * useSnapshot: true,
1010
+ * snapshot,
1011
+ * })
1012
+ * ```
1013
+ */
1014
+ export const generateDOSchemaSnapshot = async (migrations, options) => {
1015
+ const sortedMigrations = [...migrations].sort((a, b) => a.version - b.version);
1016
+ const schemaSQLParts = [];
1017
+ const seedDataSQLParts = [];
1018
+ for (const migration of sortedMigrations) {
1019
+ const sql = typeof migration.up === 'string'
1020
+ ? migration.up
1021
+ : migration.up.toString();
1022
+ // Simple heuristic: seed data migrations often have INSERT statements
1023
+ // and are tagged as 'seed' or 'data'
1024
+ const isSeedData = migration.tags?.includes('seed') || migration.tags?.includes('data');
1025
+ if (isSeedData && options?.includeSeedData) {
1026
+ seedDataSQLParts.push(sql);
1027
+ }
1028
+ else {
1029
+ schemaSQLParts.push(sql);
1030
+ }
1031
+ }
1032
+ const targetVersion = sortedMigrations.length > 0
1033
+ ? Math.max(...sortedMigrations.map(m => m.version))
1034
+ : 0;
1035
+ const migrationsChecksum = await calculateChecksum(sortedMigrations.map(m => getMigrationChecksumContent(m)).join('|'));
1036
+ return {
1037
+ targetVersion,
1038
+ schemaDDL: schemaSQLParts.join('\n\n'),
1039
+ migrationsChecksum,
1040
+ includedVersions: sortedMigrations.map(m => m.version),
1041
+ generatedAt: new Date(),
1042
+ ...(seedDataSQLParts.length > 0 && { seedDataDDL: seedDataSQLParts.join('\n\n') }),
1043
+ };
1044
+ };
1045
+ /**
1046
+ * Convert standard Migration to DOMigration
1047
+ */
1048
+ export const convertToDOMigration = (migration) => {
1049
+ return {
1050
+ version: migration.version,
1051
+ name: migration.name,
1052
+ up: migration.up,
1053
+ ...(migration.down !== undefined && { down: migration.down }),
1054
+ ...(migration.isReversible !== undefined && { isReversible: migration.isReversible }),
1055
+ ...(migration.transactional !== undefined && { transactional: migration.transactional }),
1056
+ ...(migration.timeoutMs !== undefined && { timeoutMs: migration.timeoutMs }),
1057
+ ...(migration.tags !== undefined && { tags: migration.tags }),
1058
+ };
1059
+ };
1060
+ //# sourceMappingURL=do-migrations.js.map