@mikeatlast/ponder 0.16.1-fork.1

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 (619) hide show
  1. package/CHANGELOG.md +3415 -0
  2. package/README.md +186 -0
  3. package/dist/esm/bin/commands/codegen.js +46 -0
  4. package/dist/esm/bin/commands/codegen.js.map +1 -0
  5. package/dist/esm/bin/commands/createViews.js +196 -0
  6. package/dist/esm/bin/commands/createViews.js.map +1 -0
  7. package/dist/esm/bin/commands/dev.js +430 -0
  8. package/dist/esm/bin/commands/dev.js.map +1 -0
  9. package/dist/esm/bin/commands/list.js +148 -0
  10. package/dist/esm/bin/commands/list.js.map +1 -0
  11. package/dist/esm/bin/commands/prune.js +223 -0
  12. package/dist/esm/bin/commands/prune.js.map +1 -0
  13. package/dist/esm/bin/commands/serve.js +198 -0
  14. package/dist/esm/bin/commands/serve.js.map +1 -0
  15. package/dist/esm/bin/commands/start.js +253 -0
  16. package/dist/esm/bin/commands/start.js.map +1 -0
  17. package/dist/esm/bin/isolatedController.js +200 -0
  18. package/dist/esm/bin/isolatedController.js.map +1 -0
  19. package/dist/esm/bin/isolatedWorker.js +146 -0
  20. package/dist/esm/bin/isolatedWorker.js.map +1 -0
  21. package/dist/esm/bin/ponder.js +137 -0
  22. package/dist/esm/bin/ponder.js.map +1 -0
  23. package/dist/esm/bin/utils/codegen.js +25 -0
  24. package/dist/esm/bin/utils/codegen.js.map +1 -0
  25. package/dist/esm/bin/utils/exit.js +100 -0
  26. package/dist/esm/bin/utils/exit.js.map +1 -0
  27. package/dist/esm/build/config.js +745 -0
  28. package/dist/esm/build/config.js.map +1 -0
  29. package/dist/esm/build/factory.js +82 -0
  30. package/dist/esm/build/factory.js.map +1 -0
  31. package/dist/esm/build/index.js +567 -0
  32. package/dist/esm/build/index.js.map +1 -0
  33. package/dist/esm/build/plugin.js +53 -0
  34. package/dist/esm/build/plugin.js.map +1 -0
  35. package/dist/esm/build/pre.js +83 -0
  36. package/dist/esm/build/pre.js.map +1 -0
  37. package/dist/esm/build/schema.js +202 -0
  38. package/dist/esm/build/schema.js.map +1 -0
  39. package/dist/esm/build/stacktrace.js +137 -0
  40. package/dist/esm/build/stacktrace.js.map +1 -0
  41. package/dist/esm/client/index.js +441 -0
  42. package/dist/esm/client/index.js.map +1 -0
  43. package/dist/esm/config/address.js +2 -0
  44. package/dist/esm/config/address.js.map +1 -0
  45. package/dist/esm/config/eventFilter.js +2 -0
  46. package/dist/esm/config/eventFilter.js.map +1 -0
  47. package/dist/esm/config/index.js +2 -0
  48. package/dist/esm/config/index.js.map +1 -0
  49. package/dist/esm/config/utilityTypes.js +2 -0
  50. package/dist/esm/config/utilityTypes.js.map +1 -0
  51. package/dist/esm/database/actions.js +445 -0
  52. package/dist/esm/database/actions.js.map +1 -0
  53. package/dist/esm/database/index.js +604 -0
  54. package/dist/esm/database/index.js.map +1 -0
  55. package/dist/esm/database/queryBuilder.js +314 -0
  56. package/dist/esm/database/queryBuilder.js.map +1 -0
  57. package/dist/esm/drizzle/bigint.js +38 -0
  58. package/dist/esm/drizzle/bigint.js.map +1 -0
  59. package/dist/esm/drizzle/bytes.js +47 -0
  60. package/dist/esm/drizzle/bytes.js.map +1 -0
  61. package/dist/esm/drizzle/hex.js +40 -0
  62. package/dist/esm/drizzle/hex.js.map +1 -0
  63. package/dist/esm/drizzle/index.js +28 -0
  64. package/dist/esm/drizzle/index.js.map +1 -0
  65. package/dist/esm/drizzle/json.js +123 -0
  66. package/dist/esm/drizzle/json.js.map +1 -0
  67. package/dist/esm/drizzle/kit/index.js +927 -0
  68. package/dist/esm/drizzle/kit/index.js.map +1 -0
  69. package/dist/esm/drizzle/onchain.js +184 -0
  70. package/dist/esm/drizzle/onchain.js.map +1 -0
  71. package/dist/esm/drizzle/text.js +61 -0
  72. package/dist/esm/drizzle/text.js.map +1 -0
  73. package/dist/esm/graphql/graphiql.html.js +59 -0
  74. package/dist/esm/graphql/graphiql.html.js.map +1 -0
  75. package/dist/esm/graphql/index.js +934 -0
  76. package/dist/esm/graphql/index.js.map +1 -0
  77. package/dist/esm/graphql/json.js +42 -0
  78. package/dist/esm/graphql/json.js.map +1 -0
  79. package/dist/esm/graphql/middleware.js +83 -0
  80. package/dist/esm/graphql/middleware.js.map +1 -0
  81. package/dist/esm/index.js +9 -0
  82. package/dist/esm/index.js.map +1 -0
  83. package/dist/esm/indexing/addStackTrace.js +54 -0
  84. package/dist/esm/indexing/addStackTrace.js.map +1 -0
  85. package/dist/esm/indexing/client.js +675 -0
  86. package/dist/esm/indexing/client.js.map +1 -0
  87. package/dist/esm/indexing/index.js +663 -0
  88. package/dist/esm/indexing/index.js.map +1 -0
  89. package/dist/esm/indexing/profile.js +584 -0
  90. package/dist/esm/indexing/profile.js.map +1 -0
  91. package/dist/esm/indexing-store/cache.js +666 -0
  92. package/dist/esm/indexing-store/cache.js.map +1 -0
  93. package/dist/esm/indexing-store/index.js +461 -0
  94. package/dist/esm/indexing-store/index.js.map +1 -0
  95. package/dist/esm/indexing-store/profile.js +428 -0
  96. package/dist/esm/indexing-store/profile.js.map +1 -0
  97. package/dist/esm/indexing-store/utils.js +111 -0
  98. package/dist/esm/indexing-store/utils.js.map +1 -0
  99. package/dist/esm/internal/common.js +2 -0
  100. package/dist/esm/internal/common.js.map +1 -0
  101. package/dist/esm/internal/errors.js +300 -0
  102. package/dist/esm/internal/errors.js.map +1 -0
  103. package/dist/esm/internal/logger.js +178 -0
  104. package/dist/esm/internal/logger.js.map +1 -0
  105. package/dist/esm/internal/metrics.js +1049 -0
  106. package/dist/esm/internal/metrics.js.map +1 -0
  107. package/dist/esm/internal/options.js +73 -0
  108. package/dist/esm/internal/options.js.map +1 -0
  109. package/dist/esm/internal/shutdown.js +24 -0
  110. package/dist/esm/internal/shutdown.js.map +1 -0
  111. package/dist/esm/internal/telemetry.js +200 -0
  112. package/dist/esm/internal/telemetry.js.map +1 -0
  113. package/dist/esm/internal/types.js +2 -0
  114. package/dist/esm/internal/types.js.map +1 -0
  115. package/dist/esm/rpc/actions.js +988 -0
  116. package/dist/esm/rpc/actions.js.map +1 -0
  117. package/dist/esm/rpc/http.js +130 -0
  118. package/dist/esm/rpc/http.js.map +1 -0
  119. package/dist/esm/rpc/index.js +749 -0
  120. package/dist/esm/rpc/index.js.map +1 -0
  121. package/dist/esm/runtime/events.js +664 -0
  122. package/dist/esm/runtime/events.js.map +1 -0
  123. package/dist/esm/runtime/filter.js +476 -0
  124. package/dist/esm/runtime/filter.js.map +1 -0
  125. package/dist/esm/runtime/fragments.js +478 -0
  126. package/dist/esm/runtime/fragments.js.map +1 -0
  127. package/dist/esm/runtime/historical.js +954 -0
  128. package/dist/esm/runtime/historical.js.map +1 -0
  129. package/dist/esm/runtime/index.js +316 -0
  130. package/dist/esm/runtime/index.js.map +1 -0
  131. package/dist/esm/runtime/init.js +12 -0
  132. package/dist/esm/runtime/init.js.map +1 -0
  133. package/dist/esm/runtime/isolated.js +464 -0
  134. package/dist/esm/runtime/isolated.js.map +1 -0
  135. package/dist/esm/runtime/multichain.js +511 -0
  136. package/dist/esm/runtime/multichain.js.map +1 -0
  137. package/dist/esm/runtime/omnichain.js +546 -0
  138. package/dist/esm/runtime/omnichain.js.map +1 -0
  139. package/dist/esm/runtime/realtime.js +722 -0
  140. package/dist/esm/runtime/realtime.js.map +1 -0
  141. package/dist/esm/server/error.js +56 -0
  142. package/dist/esm/server/error.js.map +1 -0
  143. package/dist/esm/server/index.js +121 -0
  144. package/dist/esm/server/index.js.map +1 -0
  145. package/dist/esm/sync-historical/index.js +703 -0
  146. package/dist/esm/sync-historical/index.js.map +1 -0
  147. package/dist/esm/sync-realtime/bloom.js +76 -0
  148. package/dist/esm/sync-realtime/bloom.js.map +1 -0
  149. package/dist/esm/sync-realtime/index.js +918 -0
  150. package/dist/esm/sync-realtime/index.js.map +1 -0
  151. package/dist/esm/sync-store/encode.js +105 -0
  152. package/dist/esm/sync-store/encode.js.map +1 -0
  153. package/dist/esm/sync-store/index.js +885 -0
  154. package/dist/esm/sync-store/index.js.map +1 -0
  155. package/dist/esm/sync-store/migrations.js +1595 -0
  156. package/dist/esm/sync-store/migrations.js.map +1 -0
  157. package/dist/esm/sync-store/schema.js +181 -0
  158. package/dist/esm/sync-store/schema.js.map +1 -0
  159. package/dist/esm/types/db.js +2 -0
  160. package/dist/esm/types/db.js.map +1 -0
  161. package/dist/esm/types/eth.js +2 -0
  162. package/dist/esm/types/eth.js.map +1 -0
  163. package/dist/esm/types/utils.js +2 -0
  164. package/dist/esm/types/utils.js.map +1 -0
  165. package/dist/esm/types/virtual.js +2 -0
  166. package/dist/esm/types/virtual.js.map +1 -0
  167. package/dist/esm/ui/app.js +157 -0
  168. package/dist/esm/ui/app.js.map +1 -0
  169. package/dist/esm/ui/index.js +29 -0
  170. package/dist/esm/ui/index.js.map +1 -0
  171. package/dist/esm/ui/patch.js +140 -0
  172. package/dist/esm/ui/patch.js.map +1 -0
  173. package/dist/esm/utils/abi.js +55 -0
  174. package/dist/esm/utils/abi.js.map +1 -0
  175. package/dist/esm/utils/bigint.js +37 -0
  176. package/dist/esm/utils/bigint.js.map +1 -0
  177. package/dist/esm/utils/chains.js +21 -0
  178. package/dist/esm/utils/chains.js.map +1 -0
  179. package/dist/esm/utils/checkpoint.js +139 -0
  180. package/dist/esm/utils/checkpoint.js.map +1 -0
  181. package/dist/esm/utils/chunk.js +8 -0
  182. package/dist/esm/utils/chunk.js.map +1 -0
  183. package/dist/esm/utils/copy.js +129 -0
  184. package/dist/esm/utils/copy.js.map +1 -0
  185. package/dist/esm/utils/date.js +27 -0
  186. package/dist/esm/utils/date.js.map +1 -0
  187. package/dist/esm/utils/debug.js +2 -0
  188. package/dist/esm/utils/debug.js.map +1 -0
  189. package/dist/esm/utils/decodeAbiParameters.js +290 -0
  190. package/dist/esm/utils/decodeAbiParameters.js.map +1 -0
  191. package/dist/esm/utils/decodeEventLog.js +75 -0
  192. package/dist/esm/utils/decodeEventLog.js.map +1 -0
  193. package/dist/esm/utils/dedupe.js +29 -0
  194. package/dist/esm/utils/dedupe.js.map +1 -0
  195. package/dist/esm/utils/duplicates.js +19 -0
  196. package/dist/esm/utils/duplicates.js.map +1 -0
  197. package/dist/esm/utils/estimate.js +6 -0
  198. package/dist/esm/utils/estimate.js.map +1 -0
  199. package/dist/esm/utils/finality.js +38 -0
  200. package/dist/esm/utils/finality.js.map +1 -0
  201. package/dist/esm/utils/format.js +20 -0
  202. package/dist/esm/utils/format.js.map +1 -0
  203. package/dist/esm/utils/generators.js +121 -0
  204. package/dist/esm/utils/generators.js.map +1 -0
  205. package/dist/esm/utils/hash.js +11 -0
  206. package/dist/esm/utils/hash.js.map +1 -0
  207. package/dist/esm/utils/interval.js +171 -0
  208. package/dist/esm/utils/interval.js.map +1 -0
  209. package/dist/esm/utils/lowercase.js +7 -0
  210. package/dist/esm/utils/lowercase.js.map +1 -0
  211. package/dist/esm/utils/mutex.js +26 -0
  212. package/dist/esm/utils/mutex.js.map +1 -0
  213. package/dist/esm/utils/never.js +4 -0
  214. package/dist/esm/utils/never.js.map +1 -0
  215. package/dist/esm/utils/offset.js +101 -0
  216. package/dist/esm/utils/offset.js.map +1 -0
  217. package/dist/esm/utils/order.js +18 -0
  218. package/dist/esm/utils/order.js.map +1 -0
  219. package/dist/esm/utils/partition.js +46 -0
  220. package/dist/esm/utils/partition.js.map +1 -0
  221. package/dist/esm/utils/pg.js +175 -0
  222. package/dist/esm/utils/pg.js.map +1 -0
  223. package/dist/esm/utils/pglite.js +80 -0
  224. package/dist/esm/utils/pglite.js.map +1 -0
  225. package/dist/esm/utils/port.js +30 -0
  226. package/dist/esm/utils/port.js.map +1 -0
  227. package/dist/esm/utils/print.js +23 -0
  228. package/dist/esm/utils/print.js.map +1 -0
  229. package/dist/esm/utils/promiseAllSettledWithThrow.js +19 -0
  230. package/dist/esm/utils/promiseAllSettledWithThrow.js.map +1 -0
  231. package/dist/esm/utils/promiseWithResolvers.js +13 -0
  232. package/dist/esm/utils/promiseWithResolvers.js.map +1 -0
  233. package/dist/esm/utils/queue.js +150 -0
  234. package/dist/esm/utils/queue.js.map +1 -0
  235. package/dist/esm/utils/range.js +8 -0
  236. package/dist/esm/utils/range.js.map +1 -0
  237. package/dist/esm/utils/result.js +10 -0
  238. package/dist/esm/utils/result.js.map +1 -0
  239. package/dist/esm/utils/sql-parse.js +1326 -0
  240. package/dist/esm/utils/sql-parse.js.map +1 -0
  241. package/dist/esm/utils/timer.js +9 -0
  242. package/dist/esm/utils/timer.js.map +1 -0
  243. package/dist/esm/utils/truncate.js +15 -0
  244. package/dist/esm/utils/truncate.js.map +1 -0
  245. package/dist/esm/utils/wait.js +10 -0
  246. package/dist/esm/utils/wait.js.map +1 -0
  247. package/dist/esm/utils/zipper.js +67 -0
  248. package/dist/esm/utils/zipper.js.map +1 -0
  249. package/dist/types/bin/commands/codegen.d.ts +5 -0
  250. package/dist/types/bin/commands/codegen.d.ts.map +1 -0
  251. package/dist/types/bin/commands/createViews.d.ts +8 -0
  252. package/dist/types/bin/commands/createViews.d.ts.map +1 -0
  253. package/dist/types/bin/commands/dev.d.ts +5 -0
  254. package/dist/types/bin/commands/dev.d.ts.map +1 -0
  255. package/dist/types/bin/commands/list.d.ts +5 -0
  256. package/dist/types/bin/commands/list.d.ts.map +1 -0
  257. package/dist/types/bin/commands/prune.d.ts +5 -0
  258. package/dist/types/bin/commands/prune.d.ts.map +1 -0
  259. package/dist/types/bin/commands/serve.d.ts +5 -0
  260. package/dist/types/bin/commands/serve.d.ts.map +1 -0
  261. package/dist/types/bin/commands/start.d.ts +19 -0
  262. package/dist/types/bin/commands/start.d.ts.map +1 -0
  263. package/dist/types/bin/isolatedController.d.ts +13 -0
  264. package/dist/types/bin/isolatedController.d.ts.map +1 -0
  265. package/dist/types/bin/isolatedWorker.d.ts +9 -0
  266. package/dist/types/bin/isolatedWorker.d.ts.map +1 -0
  267. package/dist/types/bin/ponder.d.ts +37 -0
  268. package/dist/types/bin/ponder.d.ts.map +1 -0
  269. package/dist/types/bin/utils/codegen.d.ts +6 -0
  270. package/dist/types/bin/utils/codegen.d.ts.map +1 -0
  271. package/dist/types/bin/utils/exit.d.ts +10 -0
  272. package/dist/types/bin/utils/exit.d.ts.map +1 -0
  273. package/dist/types/build/config.d.ts +97 -0
  274. package/dist/types/build/config.d.ts.map +1 -0
  275. package/dist/types/build/factory.d.ts +15 -0
  276. package/dist/types/build/factory.d.ts.map +1 -0
  277. package/dist/types/build/index.d.ts +84 -0
  278. package/dist/types/build/index.d.ts.map +1 -0
  279. package/dist/types/build/plugin.d.ts +4 -0
  280. package/dist/types/build/plugin.d.ts.map +1 -0
  281. package/dist/types/build/pre.d.ts +29 -0
  282. package/dist/types/build/pre.d.ts.map +1 -0
  283. package/dist/types/build/schema.d.ts +20 -0
  284. package/dist/types/build/schema.d.ts.map +1 -0
  285. package/dist/types/build/stacktrace.d.ts +13 -0
  286. package/dist/types/build/stacktrace.d.ts.map +1 -0
  287. package/dist/types/client/index.d.ts +27 -0
  288. package/dist/types/client/index.d.ts.map +1 -0
  289. package/dist/types/config/address.d.ts +34 -0
  290. package/dist/types/config/address.d.ts.map +1 -0
  291. package/dist/types/config/eventFilter.d.ts +18 -0
  292. package/dist/types/config/eventFilter.d.ts.map +1 -0
  293. package/dist/types/config/index.d.ts +144 -0
  294. package/dist/types/config/index.d.ts.map +1 -0
  295. package/dist/types/config/utilityTypes.d.ts +43 -0
  296. package/dist/types/config/utilityTypes.d.ts.map +1 -0
  297. package/dist/types/database/actions.d.ts +99 -0
  298. package/dist/types/database/actions.d.ts.map +1 -0
  299. package/dist/types/database/index.d.ts +493 -0
  300. package/dist/types/database/index.d.ts.map +1 -0
  301. package/dist/types/database/queryBuilder.d.ts +65 -0
  302. package/dist/types/database/queryBuilder.d.ts.map +1 -0
  303. package/dist/types/drizzle/bigint.d.ts +25 -0
  304. package/dist/types/drizzle/bigint.d.ts.map +1 -0
  305. package/dist/types/drizzle/bytes.d.ts +31 -0
  306. package/dist/types/drizzle/bytes.d.ts.map +1 -0
  307. package/dist/types/drizzle/hex.d.ts +25 -0
  308. package/dist/types/drizzle/hex.d.ts.map +1 -0
  309. package/dist/types/drizzle/index.d.ts +6 -0
  310. package/dist/types/drizzle/index.d.ts.map +1 -0
  311. package/dist/types/drizzle/json.d.ts +51 -0
  312. package/dist/types/drizzle/json.d.ts.map +1 -0
  313. package/dist/types/drizzle/kit/index.d.ts +187 -0
  314. package/dist/types/drizzle/kit/index.d.ts.map +1 -0
  315. package/dist/types/drizzle/onchain.d.ts +298 -0
  316. package/dist/types/drizzle/onchain.d.ts.map +1 -0
  317. package/dist/types/drizzle/text.d.ts +29 -0
  318. package/dist/types/drizzle/text.d.ts.map +1 -0
  319. package/dist/types/graphql/graphiql.html.d.ts +2 -0
  320. package/dist/types/graphql/graphiql.html.d.ts.map +1 -0
  321. package/dist/types/graphql/index.d.ts +12 -0
  322. package/dist/types/graphql/index.d.ts.map +1 -0
  323. package/dist/types/graphql/json.d.ts +3 -0
  324. package/dist/types/graphql/json.d.ts.map +1 -0
  325. package/dist/types/graphql/middleware.d.ts +29 -0
  326. package/dist/types/graphql/middleware.d.ts.map +1 -0
  327. package/dist/types/index.d.ts +23 -0
  328. package/dist/types/index.d.ts.map +1 -0
  329. package/dist/types/indexing/addStackTrace.d.ts +3 -0
  330. package/dist/types/indexing/addStackTrace.d.ts.map +1 -0
  331. package/dist/types/indexing/client.d.ts +154 -0
  332. package/dist/types/indexing/client.d.ts.map +1 -0
  333. package/dist/types/indexing/index.d.ts +72 -0
  334. package/dist/types/indexing/index.d.ts.map +1 -0
  335. package/dist/types/indexing/profile.d.ts +16 -0
  336. package/dist/types/indexing/profile.d.ts.map +1 -0
  337. package/dist/types/indexing-store/cache.d.ts +115 -0
  338. package/dist/types/indexing-store/cache.d.ts.map +1 -0
  339. package/dist/types/indexing-store/index.d.ts +24 -0
  340. package/dist/types/indexing-store/index.d.ts.map +1 -0
  341. package/dist/types/indexing-store/profile.d.ts +7 -0
  342. package/dist/types/indexing-store/profile.d.ts.map +1 -0
  343. package/dist/types/indexing-store/utils.d.ts +19 -0
  344. package/dist/types/indexing-store/utils.d.ts.map +1 -0
  345. package/dist/types/internal/common.d.ts +15 -0
  346. package/dist/types/internal/common.d.ts.map +1 -0
  347. package/dist/types/internal/errors.d.ts +101 -0
  348. package/dist/types/internal/errors.d.ts.map +1 -0
  349. package/dist/types/internal/logger.d.ts +37 -0
  350. package/dist/types/internal/logger.d.ts.map +1 -0
  351. package/dist/types/internal/metrics.d.ts +120 -0
  352. package/dist/types/internal/metrics.d.ts.map +1 -0
  353. package/dist/types/internal/options.d.ts +62 -0
  354. package/dist/types/internal/options.d.ts.map +1 -0
  355. package/dist/types/internal/shutdown.d.ts +8 -0
  356. package/dist/types/internal/shutdown.d.ts.map +1 -0
  357. package/dist/types/internal/telemetry.d.ts +43 -0
  358. package/dist/types/internal/telemetry.d.ts.map +1 -0
  359. package/dist/types/internal/types.d.ts +443 -0
  360. package/dist/types/internal/types.d.ts.map +1 -0
  361. package/dist/types/rpc/actions.d.ts +360 -0
  362. package/dist/types/rpc/actions.d.ts.map +1 -0
  363. package/dist/types/rpc/http.d.ts +17 -0
  364. package/dist/types/rpc/http.d.ts.map +1 -0
  365. package/dist/types/rpc/index.d.ts +43 -0
  366. package/dist/types/rpc/index.d.ts.map +1 -0
  367. package/dist/types/runtime/events.d.ts +40 -0
  368. package/dist/types/runtime/events.d.ts.map +1 -0
  369. package/dist/types/runtime/filter.d.ts +96 -0
  370. package/dist/types/runtime/filter.d.ts.map +1 -0
  371. package/dist/types/runtime/fragments.d.ts +30 -0
  372. package/dist/types/runtime/fragments.d.ts.map +1 -0
  373. package/dist/types/runtime/historical.d.ts +123 -0
  374. package/dist/types/runtime/historical.d.ts.map +1 -0
  375. package/dist/types/runtime/index.d.ts +89 -0
  376. package/dist/types/runtime/index.d.ts.map +1 -0
  377. package/dist/types/runtime/init.d.ts +28 -0
  378. package/dist/types/runtime/init.d.ts.map +1 -0
  379. package/dist/types/runtime/isolated.d.ts +14 -0
  380. package/dist/types/runtime/isolated.d.ts.map +1 -0
  381. package/dist/types/runtime/multichain.d.ts +13 -0
  382. package/dist/types/runtime/multichain.d.ts.map +1 -0
  383. package/dist/types/runtime/omnichain.d.ts +23 -0
  384. package/dist/types/runtime/omnichain.d.ts.map +1 -0
  385. package/dist/types/runtime/realtime.d.ts +93 -0
  386. package/dist/types/runtime/realtime.d.ts.map +1 -0
  387. package/dist/types/server/error.d.ts +5 -0
  388. package/dist/types/server/error.d.ts.map +1 -0
  389. package/dist/types/server/index.d.ts +13 -0
  390. package/dist/types/server/index.d.ts.map +1 -0
  391. package/dist/types/sync-historical/index.d.ts +36 -0
  392. package/dist/types/sync-historical/index.d.ts.map +1 -0
  393. package/dist/types/sync-realtime/bloom.d.ts +18 -0
  394. package/dist/types/sync-realtime/bloom.d.ts.map +1 -0
  395. package/dist/types/sync-realtime/index.d.ts +48 -0
  396. package/dist/types/sync-realtime/index.d.ts.map +1 -0
  397. package/dist/types/sync-store/encode.d.ts +25 -0
  398. package/dist/types/sync-store/encode.d.ts.map +1 -0
  399. package/dist/types/sync-store/index.d.ts +135 -0
  400. package/dist/types/sync-store/index.d.ts.map +1 -0
  401. package/dist/types/sync-store/migrations.d.ts +8 -0
  402. package/dist/types/sync-store/migrations.d.ts.map +1 -0
  403. package/dist/types/sync-store/schema.d.ts +1828 -0
  404. package/dist/types/sync-store/schema.d.ts.map +1 -0
  405. package/dist/types/types/db.d.ts +213 -0
  406. package/dist/types/types/db.d.ts.map +1 -0
  407. package/dist/types/types/eth.d.ts +196 -0
  408. package/dist/types/types/eth.d.ts.map +1 -0
  409. package/dist/types/types/utils.d.ts +38 -0
  410. package/dist/types/types/utils.d.ts.map +1 -0
  411. package/dist/types/types/virtual.d.ts +99 -0
  412. package/dist/types/types/virtual.d.ts.map +1 -0
  413. package/dist/types/ui/app.d.ts +22 -0
  414. package/dist/types/ui/app.d.ts.map +1 -0
  415. package/dist/types/ui/index.d.ts +5 -0
  416. package/dist/types/ui/index.d.ts.map +1 -0
  417. package/dist/types/ui/patch.d.ts +7 -0
  418. package/dist/types/ui/patch.d.ts.map +1 -0
  419. package/dist/types/utils/abi.d.ts +23 -0
  420. package/dist/types/utils/abi.d.ts.map +1 -0
  421. package/dist/types/utils/bigint.d.ts +15 -0
  422. package/dist/types/utils/bigint.d.ts.map +1 -0
  423. package/dist/types/utils/chains.d.ts +42 -0
  424. package/dist/types/utils/chains.d.ts.map +1 -0
  425. package/dist/types/utils/checkpoint.d.ts +52 -0
  426. package/dist/types/utils/checkpoint.d.ts.map +1 -0
  427. package/dist/types/utils/chunk.d.ts +2 -0
  428. package/dist/types/utils/chunk.d.ts.map +1 -0
  429. package/dist/types/utils/copy.d.ts +16 -0
  430. package/dist/types/utils/copy.d.ts.map +1 -0
  431. package/dist/types/utils/date.d.ts +7 -0
  432. package/dist/types/utils/date.d.ts.map +1 -0
  433. package/dist/types/utils/debug.d.ts +105 -0
  434. package/dist/types/utils/debug.d.ts.map +1 -0
  435. package/dist/types/utils/decodeAbiParameters.d.ts +28 -0
  436. package/dist/types/utils/decodeAbiParameters.d.ts.map +1 -0
  437. package/dist/types/utils/decodeEventLog.d.ts +12 -0
  438. package/dist/types/utils/decodeEventLog.d.ts.map +1 -0
  439. package/dist/types/utils/dedupe.d.ts +20 -0
  440. package/dist/types/utils/dedupe.d.ts.map +1 -0
  441. package/dist/types/utils/duplicates.d.ts +7 -0
  442. package/dist/types/utils/duplicates.d.ts.map +1 -0
  443. package/dist/types/utils/estimate.d.ts +11 -0
  444. package/dist/types/utils/estimate.d.ts.map +1 -0
  445. package/dist/types/utils/finality.d.ts +12 -0
  446. package/dist/types/utils/finality.d.ts.map +1 -0
  447. package/dist/types/utils/format.d.ts +3 -0
  448. package/dist/types/utils/format.d.ts.map +1 -0
  449. package/dist/types/utils/generators.d.ts +42 -0
  450. package/dist/types/utils/generators.d.ts.map +1 -0
  451. package/dist/types/utils/hash.d.ts +11 -0
  452. package/dist/types/utils/hash.d.ts.map +1 -0
  453. package/dist/types/utils/interval.d.ts +53 -0
  454. package/dist/types/utils/interval.d.ts.map +1 -0
  455. package/dist/types/utils/lowercase.d.ts +5 -0
  456. package/dist/types/utils/lowercase.d.ts.map +1 -0
  457. package/dist/types/utils/mutex.d.ts +5 -0
  458. package/dist/types/utils/mutex.d.ts.map +1 -0
  459. package/dist/types/utils/never.d.ts +2 -0
  460. package/dist/types/utils/never.d.ts.map +1 -0
  461. package/dist/types/utils/offset.d.ts +8 -0
  462. package/dist/types/utils/offset.d.ts.map +1 -0
  463. package/dist/types/utils/order.d.ts +2 -0
  464. package/dist/types/utils/order.d.ts.map +1 -0
  465. package/dist/types/utils/partition.d.ts +22 -0
  466. package/dist/types/utils/partition.d.ts.map +1 -0
  467. package/dist/types/utils/pg.d.ts +8 -0
  468. package/dist/types/utils/pg.d.ts.map +1 -0
  469. package/dist/types/utils/pglite.d.ts +25 -0
  470. package/dist/types/utils/pglite.d.ts.map +1 -0
  471. package/dist/types/utils/port.d.ts +5 -0
  472. package/dist/types/utils/port.d.ts.map +1 -0
  473. package/dist/types/utils/print.d.ts +2 -0
  474. package/dist/types/utils/print.d.ts.map +1 -0
  475. package/dist/types/utils/promiseAllSettledWithThrow.d.ts +8 -0
  476. package/dist/types/utils/promiseAllSettledWithThrow.d.ts.map +1 -0
  477. package/dist/types/utils/promiseWithResolvers.d.ts +10 -0
  478. package/dist/types/utils/promiseWithResolvers.d.ts.map +1 -0
  479. package/dist/types/utils/queue.d.ts +33 -0
  480. package/dist/types/utils/queue.d.ts.map +1 -0
  481. package/dist/types/utils/range.d.ts +8 -0
  482. package/dist/types/utils/range.d.ts.map +1 -0
  483. package/dist/types/utils/result.d.ts +17 -0
  484. package/dist/types/utils/result.d.ts.map +1 -0
  485. package/dist/types/utils/sql-parse.d.ts +21 -0
  486. package/dist/types/utils/sql-parse.d.ts.map +1 -0
  487. package/dist/types/utils/timer.d.ts +6 -0
  488. package/dist/types/utils/timer.d.ts.map +1 -0
  489. package/dist/types/utils/truncate.d.ts +9 -0
  490. package/dist/types/utils/truncate.d.ts.map +1 -0
  491. package/dist/types/utils/wait.d.ts +6 -0
  492. package/dist/types/utils/wait.d.ts.map +1 -0
  493. package/dist/types/utils/zipper.d.ts +36 -0
  494. package/dist/types/utils/zipper.d.ts.map +1 -0
  495. package/package.json +114 -0
  496. package/src/bin/commands/codegen.ts +56 -0
  497. package/src/bin/commands/createViews.ts +318 -0
  498. package/src/bin/commands/dev.ts +490 -0
  499. package/src/bin/commands/list.ts +208 -0
  500. package/src/bin/commands/prune.ts +322 -0
  501. package/src/bin/commands/serve.ts +236 -0
  502. package/src/bin/commands/start.ts +319 -0
  503. package/src/bin/isolatedController.ts +300 -0
  504. package/src/bin/isolatedWorker.ts +192 -0
  505. package/src/bin/ponder.ts +208 -0
  506. package/src/bin/utils/codegen.ts +32 -0
  507. package/src/bin/utils/exit.ts +112 -0
  508. package/src/build/config.ts +1141 -0
  509. package/src/build/factory.ts +147 -0
  510. package/src/build/index.ts +790 -0
  511. package/src/build/plugin.ts +58 -0
  512. package/src/build/pre.ts +114 -0
  513. package/src/build/schema.ts +358 -0
  514. package/src/build/stacktrace.ts +137 -0
  515. package/src/client/index.ts +551 -0
  516. package/src/config/address.ts +45 -0
  517. package/src/config/eventFilter.ts +33 -0
  518. package/src/config/index.ts +240 -0
  519. package/src/config/utilityTypes.ts +152 -0
  520. package/src/database/actions.ts +873 -0
  521. package/src/database/index.ts +1029 -0
  522. package/src/database/queryBuilder.ts +537 -0
  523. package/src/drizzle/bigint.ts +57 -0
  524. package/src/drizzle/bytes.ts +68 -0
  525. package/src/drizzle/hex.ts +58 -0
  526. package/src/drizzle/index.ts +40 -0
  527. package/src/drizzle/json.ts +159 -0
  528. package/src/drizzle/kit/index.ts +1348 -0
  529. package/src/drizzle/onchain.ts +476 -0
  530. package/src/drizzle/text.ts +77 -0
  531. package/src/graphql/graphiql.html.ts +59 -0
  532. package/src/graphql/index.ts +1351 -0
  533. package/src/graphql/json.ts +62 -0
  534. package/src/graphql/middleware.ts +115 -0
  535. package/src/index.ts +139 -0
  536. package/src/indexing/addStackTrace.ts +69 -0
  537. package/src/indexing/client.ts +1184 -0
  538. package/src/indexing/index.ts +976 -0
  539. package/src/indexing/profile.ts +771 -0
  540. package/src/indexing-store/cache.ts +1057 -0
  541. package/src/indexing-store/index.ts +628 -0
  542. package/src/indexing-store/profile.ts +557 -0
  543. package/src/indexing-store/utils.ts +162 -0
  544. package/src/internal/common.ts +15 -0
  545. package/src/internal/errors.ts +228 -0
  546. package/src/internal/logger.ts +252 -0
  547. package/src/internal/metrics.ts +1030 -0
  548. package/src/internal/options.ts +130 -0
  549. package/src/internal/shutdown.ts +32 -0
  550. package/src/internal/telemetry.ts +303 -0
  551. package/src/internal/types.ts +611 -0
  552. package/src/rpc/actions.ts +1344 -0
  553. package/src/rpc/http.ts +164 -0
  554. package/src/rpc/index.ts +959 -0
  555. package/src/runtime/events.ts +875 -0
  556. package/src/runtime/filter.ts +705 -0
  557. package/src/runtime/fragments.ts +674 -0
  558. package/src/runtime/historical.ts +1522 -0
  559. package/src/runtime/index.ts +569 -0
  560. package/src/runtime/init.ts +49 -0
  561. package/src/runtime/isolated.ts +775 -0
  562. package/src/runtime/multichain.ts +860 -0
  563. package/src/runtime/omnichain.ts +920 -0
  564. package/src/runtime/realtime.ts +1164 -0
  565. package/src/server/error.ts +68 -0
  566. package/src/server/index.ts +173 -0
  567. package/src/sync-historical/index.ts +1065 -0
  568. package/src/sync-realtime/bloom.ts +102 -0
  569. package/src/sync-realtime/index.ts +1304 -0
  570. package/src/sync-store/encode.ts +153 -0
  571. package/src/sync-store/index.ts +1633 -0
  572. package/src/sync-store/migrations.ts +1801 -0
  573. package/src/sync-store/schema.ts +248 -0
  574. package/src/types/db.ts +292 -0
  575. package/src/types/eth.ts +216 -0
  576. package/src/types/utils.ts +47 -0
  577. package/src/types/virtual.ts +244 -0
  578. package/src/types.d.ts +38 -0
  579. package/src/ui/app.ts +207 -0
  580. package/src/ui/index.ts +37 -0
  581. package/src/ui/patch.ts +204 -0
  582. package/src/utils/abi.ts +103 -0
  583. package/src/utils/bigint.ts +41 -0
  584. package/src/utils/chains.ts +22 -0
  585. package/src/utils/checkpoint.ts +203 -0
  586. package/src/utils/chunk.ts +7 -0
  587. package/src/utils/copy.ts +151 -0
  588. package/src/utils/date.ts +26 -0
  589. package/src/utils/debug.ts +110 -0
  590. package/src/utils/decodeAbiParameters.ts +428 -0
  591. package/src/utils/decodeEventLog.ts +100 -0
  592. package/src/utils/dedupe.ts +32 -0
  593. package/src/utils/duplicates.ts +19 -0
  594. package/src/utils/estimate.ts +27 -0
  595. package/src/utils/finality.ts +40 -0
  596. package/src/utils/format.ts +22 -0
  597. package/src/utils/generators.ts +157 -0
  598. package/src/utils/hash.ts +22 -0
  599. package/src/utils/interval.ts +212 -0
  600. package/src/utils/lowercase.ts +6 -0
  601. package/src/utils/mutex.ts +33 -0
  602. package/src/utils/never.ts +3 -0
  603. package/src/utils/offset.ts +133 -0
  604. package/src/utils/order.ts +16 -0
  605. package/src/utils/partition.ts +53 -0
  606. package/src/utils/pg.ts +230 -0
  607. package/src/utils/pglite.ts +97 -0
  608. package/src/utils/port.ts +34 -0
  609. package/src/utils/print.ts +31 -0
  610. package/src/utils/promiseAllSettledWithThrow.ts +27 -0
  611. package/src/utils/promiseWithResolvers.ts +20 -0
  612. package/src/utils/queue.ts +258 -0
  613. package/src/utils/range.ts +8 -0
  614. package/src/utils/result.ts +26 -0
  615. package/src/utils/sql-parse.ts +1477 -0
  616. package/src/utils/timer.ts +8 -0
  617. package/src/utils/truncate.ts +15 -0
  618. package/src/utils/wait.ts +8 -0
  619. package/src/utils/zipper.ts +80 -0
@@ -0,0 +1,230 @@
1
+ import type { Logger } from "@/internal/logger.js";
2
+ import pg, { type PoolConfig } from "pg";
3
+ import parse from "pg-connection-string";
4
+
5
+ // The default parser for numeric[] (1231) seems to parse values as Number
6
+ // or perhaps through JSON.parse(). Use the int8[] (1016) parser instead,
7
+ // which properly returns an array of strings.
8
+ const bigIntArrayParser = pg.types.getTypeParser(1016);
9
+ pg.types.setTypeParser(1231, bigIntArrayParser);
10
+
11
+ export const PG_BIGINT_MAX = 9223372036854775807n;
12
+ export const PG_INTEGER_MAX = 2147483647;
13
+
14
+ export function getDatabaseName(conf: PoolConfig) {
15
+ const config = parseBaseConfig(conf);
16
+ // https://github.com/brianc/node-postgres/blob/ecff60dc8aa0bd1ad5ea8f4623af0756a86dc110/packages/pg/lib/defaults.js#L3-L73
17
+ const defaults = {
18
+ hostname: "localhost",
19
+ port: "5432",
20
+ database: undefined,
21
+ };
22
+ const envVars = {
23
+ hostname: process.env.PGHOST,
24
+ database: process.env.PGDATABASE,
25
+ port: process.env.PGPORT,
26
+ };
27
+
28
+ // https://github.com/brianc/node-postgres/blob/ecff60dc8aa0bd1ad5ea8f4623af0756a86dc110/packages/pg/lib/connection-parameters.js#L18
29
+ // precedence is config > env vars > default
30
+ const hostname = config.hostname || envVars.hostname || defaults.hostname;
31
+ const database = config.database || envVars.database || defaults.database;
32
+ const port = config.port || envVars.port || defaults.port;
33
+
34
+ return `${hostname}:${port}/${database ?? ""}`;
35
+ }
36
+
37
+ const parseBaseConfig = (
38
+ config: PoolConfig,
39
+ ): {
40
+ hostname?: string;
41
+ port?: string;
42
+ database?: string;
43
+ } => {
44
+ const conf = {
45
+ hostname: config.host,
46
+ port: config.port?.toString(),
47
+ database: config.database,
48
+ };
49
+ if (!config.connectionString) return conf;
50
+ // https://github.com/brianc/node-postgres/blob/ecff60dc8aa0bd1ad5ea8f4623af0756a86dc110/packages/pg/lib/connection-parameters.js#L53-L57
51
+ // connString values override other values, even if a value from connstring is missing
52
+ const parsed = (parse as unknown as typeof parse.parse)(
53
+ config.connectionString,
54
+ );
55
+ return {
56
+ hostname: parsed.host ?? undefined,
57
+ database: parsed.database ?? undefined,
58
+ port: parsed.port ?? undefined,
59
+ };
60
+ };
61
+
62
+ export function createPool(config: PoolConfig, logger: Logger) {
63
+ class Client extends pg.Client {
64
+ // @ts-expect-error
65
+ override connect(
66
+ callback: (err: Error) => void | undefined,
67
+ ): void | Promise<void> {
68
+ if (callback) {
69
+ super.connect(() => {
70
+ this.query(
71
+ `
72
+ SET synchronous_commit = off;
73
+ SET idle_in_transaction_session_timeout = 3600000;`,
74
+ callback,
75
+ );
76
+ });
77
+ } else {
78
+ return super.connect().then(() =>
79
+ this.query(`
80
+ SET synchronous_commit = off;
81
+ SET idle_in_transaction_session_timeout = 3600000;`).then(() => {}),
82
+ );
83
+ }
84
+ }
85
+ }
86
+
87
+ const pool = new pg.Pool({
88
+ // https://stackoverflow.com/questions/59155572/how-to-set-query-timeout-in-relation-to-statement-timeout
89
+ statement_timeout: 2 * 60 * 1000, // 2 minutes
90
+ // @ts-expect-error: The custom Client is an undocumented option.
91
+ Client: Client,
92
+ ...config,
93
+ });
94
+
95
+ function onPoolError(error: Error) {
96
+ const client = (error as any).client as any | undefined;
97
+ const pid = (client?.processID as number | undefined) ?? "unknown";
98
+ const applicationName =
99
+ (client?.connectionParameters?.application_name as string | undefined) ??
100
+ "unknown";
101
+
102
+ logger.warn({
103
+ msg: "Postgres pool error",
104
+ application_name: applicationName,
105
+ pid,
106
+ error,
107
+ });
108
+
109
+ // NOTE: Errors thrown here cause an uncaughtException. It's better to just log and ignore -
110
+ // if the underlying problem persists, the process will crash due to downstream effects.
111
+ }
112
+
113
+ function onClientError(error: Error) {
114
+ logger.warn({ msg: "Postgres client error", error });
115
+
116
+ // NOTE: Errors thrown here cause an uncaughtException. It's better to just log and ignore -
117
+ // if the underlying problem persists, the process will crash due to downstream effects.
118
+ }
119
+
120
+ function onNotice(notice: { message?: string; code?: string }) {
121
+ const level =
122
+ typeof notice.code === "string" &&
123
+ ["42P06", "42P07"].includes(notice.code)
124
+ ? "trace"
125
+ : "debug";
126
+ logger[level]({
127
+ msg: "Postgres notice",
128
+ message: notice.message,
129
+ code: notice.code,
130
+ });
131
+ }
132
+
133
+ pool.on("error", onPoolError);
134
+ pool.on("connect", (client) => {
135
+ client.on("notice", onNotice);
136
+ client.on("error", onClientError);
137
+ });
138
+
139
+ return pool;
140
+ }
141
+
142
+ export function createReadonlyPool(
143
+ config: PoolConfig,
144
+ logger: Logger,
145
+ namespace: string,
146
+ ) {
147
+ class ReadonlyClient extends pg.Client {
148
+ // @ts-expect-error
149
+ override connect(
150
+ callback: (err: Error) => void | undefined,
151
+ ): void | Promise<void> {
152
+ if (callback) {
153
+ super.connect(() => {
154
+ this.query(
155
+ `
156
+ SET search_path = "${namespace}";
157
+ SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;
158
+ SET work_mem = '512MB';
159
+ SET lock_timeout = '500ms';`,
160
+ callback,
161
+ );
162
+ });
163
+ } else {
164
+ return super.connect().then(() =>
165
+ this.query(
166
+ `
167
+ SET search_path = "${namespace}";
168
+ SET SESSION CHARACTERISTICS AS TRANSACTION READ ONLY;
169
+ SET work_mem = '512MB';
170
+ SET lock_timeout = '500ms';`,
171
+ ).then(() => {}),
172
+ );
173
+ }
174
+ }
175
+ }
176
+
177
+ const pool = new pg.Pool({
178
+ // https://stackoverflow.com/questions/59155572/how-to-set-query-timeout-in-relation-to-statement-timeout
179
+ statement_timeout: 30 * 1000, // 30s
180
+ // @ts-expect-error: The custom Client is an undocumented option.
181
+ Client: ReadonlyClient,
182
+ ...config,
183
+ });
184
+
185
+ function onPoolError(error: Error) {
186
+ const client = (error as any).client as any | undefined;
187
+ const pid = (client?.processID as number | undefined) ?? "unknown";
188
+ const applicationName =
189
+ (client?.connectionParameters?.application_name as string | undefined) ??
190
+ "unknown";
191
+
192
+ logger.warn({
193
+ msg: "Postgres pool error",
194
+ application_name: applicationName,
195
+ pid,
196
+ error,
197
+ });
198
+
199
+ // NOTE: Errors thrown here cause an uncaughtException. It's better to just log and ignore -
200
+ // if the underlying problem persists, the process will crash due to downstream effects.
201
+ }
202
+
203
+ function onClientError(error: Error) {
204
+ logger.warn({ msg: "Postgres client error", error });
205
+
206
+ // NOTE: Errors thrown here cause an uncaughtException. It's better to just log and ignore -
207
+ // if the underlying problem persists, the process will crash due to downstream effects.
208
+ }
209
+
210
+ function onNotice(notice: { message?: string; code?: string }) {
211
+ const level =
212
+ typeof notice.code === "string" &&
213
+ ["42P06", "42P07"].includes(notice.code)
214
+ ? "trace"
215
+ : "debug";
216
+ logger[level]({
217
+ msg: "Postgres notice",
218
+ message: notice.message,
219
+ code: notice.code,
220
+ });
221
+ }
222
+
223
+ pool.on("error", onPoolError);
224
+ pool.on("connect", (client) => {
225
+ client.on("notice", onNotice);
226
+ client.on("error", onClientError);
227
+ });
228
+
229
+ return pool;
230
+ }
@@ -0,0 +1,97 @@
1
+ import { mkdirSync } from "node:fs";
2
+ import type { Prettify } from "@/types/utils.js";
3
+ import { type PGliteOptions as Options, PGlite } from "@electric-sql/pglite";
4
+ import {
5
+ CompiledQuery,
6
+ type DatabaseConnection,
7
+ type Dialect,
8
+ type Kysely,
9
+ PostgresAdapter,
10
+ PostgresIntrospector,
11
+ PostgresQueryCompiler,
12
+ type QueryResult,
13
+ type TransactionSettings,
14
+ } from "kysely";
15
+
16
+ export type PGliteOptions = Prettify<Options & { dataDir: string }>;
17
+
18
+ export function createPglite(options: PGliteOptions) {
19
+ // PGlite uses the memory FS by default, and Windows doesn't like the
20
+ // "memory://" path, so it's better to pass `undefined` here.
21
+ if (options.dataDir === "memory://") {
22
+ // @ts-expect-error
23
+ options.dataDir = undefined;
24
+ } else {
25
+ mkdirSync(options.dataDir, { recursive: true });
26
+ }
27
+
28
+ return new PGlite(options);
29
+ }
30
+
31
+ // Adapted from dnlsandiego/kysely-pglite
32
+ // https://github.com/dnlsandiego/kysely-pglite/blob/3891a0c4d9327a21bff26addf371784f0109260b/src/kysely-pglite.ts
33
+ export function createPgliteKyselyDialect(instance: PGlite) {
34
+ return {
35
+ createAdapter: () => new PostgresAdapter(),
36
+ createDriver: () => new PGliteDriver(instance),
37
+ createIntrospector: (db: Kysely<any>) => new PostgresIntrospector(db),
38
+ createQueryCompiler: () => new PostgresQueryCompiler(),
39
+ } satisfies Dialect;
40
+ }
41
+
42
+ // Adapted from dnlsandiego/kysely-pglite
43
+ // https://github.com/dnlsandiego/kysely-pglite/blob/3891a0c4d9327a21bff26addf371784f0109260b/src/pglite-driver.ts
44
+ export class PGliteDriver {
45
+ #client: PGlite;
46
+
47
+ constructor(client: PGlite) {
48
+ this.#client = client;
49
+ }
50
+
51
+ async acquireConnection(): Promise<DatabaseConnection> {
52
+ return new PGliteConnection(this.#client);
53
+ }
54
+
55
+ async beginTransaction(
56
+ connection: DatabaseConnection,
57
+ _settings: TransactionSettings,
58
+ ): Promise<void> {
59
+ await connection.executeQuery(CompiledQuery.raw("BEGIN"));
60
+ }
61
+
62
+ async commitTransaction(connection: DatabaseConnection): Promise<void> {
63
+ await connection.executeQuery(CompiledQuery.raw("COMMIT"));
64
+ }
65
+
66
+ async rollbackTransaction(connection: DatabaseConnection): Promise<void> {
67
+ await connection.executeQuery(CompiledQuery.raw("ROLLBACK"));
68
+ }
69
+
70
+ async destroy(): Promise<void> {
71
+ await this.#client.close();
72
+ }
73
+
74
+ async init(): Promise<void> {}
75
+ async releaseConnection(_connection: DatabaseConnection): Promise<void> {}
76
+ }
77
+
78
+ class PGliteConnection implements DatabaseConnection {
79
+ #client: PGlite;
80
+
81
+ constructor(client: PGlite) {
82
+ this.#client = client;
83
+ }
84
+
85
+ async executeQuery<R>(
86
+ compiledQuery: CompiledQuery<any>,
87
+ ): Promise<QueryResult<R>> {
88
+ return await this.#client.query<R>(compiledQuery.sql, [
89
+ ...compiledQuery.parameters,
90
+ ]);
91
+ }
92
+
93
+ // biome-ignore lint/correctness/useYield: <explanation>
94
+ async *streamQuery(): AsyncGenerator<never, void, unknown> {
95
+ throw new Error("PGlite does not support streaming.");
96
+ }
97
+ }
@@ -0,0 +1,34 @@
1
+ import http from "node:http";
2
+ import type { Common } from "@/internal/common.js";
3
+
4
+ export const getNextAvailablePort = async ({ common }: { common: Common }) => {
5
+ const server = http.createServer();
6
+
7
+ let port = common.options.port;
8
+
9
+ return new Promise<number>((resolve, reject) => {
10
+ server.once("error", (error: Error & { code: string }) => {
11
+ if (error.code === "EADDRINUSE") {
12
+ common.logger.warn({
13
+ msg: "Port in use",
14
+ port,
15
+ });
16
+ port += 1;
17
+ setTimeout(() => {
18
+ server.listen(port, common.options.hostname);
19
+ }, 5);
20
+ } else {
21
+ reject(error);
22
+ }
23
+ });
24
+
25
+ server.once("listening", () => {
26
+ // Port is available
27
+ resolve(port);
28
+ });
29
+
30
+ server.listen(port, common.options.hostname);
31
+ }).finally(() => {
32
+ server.close();
33
+ });
34
+ };
@@ -0,0 +1,31 @@
1
+ // Adapted from viem.
2
+ // https://github.com/wagmi-dev/viem/blob/021ce8e5a3fb02db6139564345a91fc77cba08a6/src/errors/transaction.ts#L6-L19
3
+ export function prettyPrint(
4
+ args?: Record<string, bigint | number | string | undefined | false | unknown>,
5
+ ) {
6
+ if (args === undefined) return "(undefined)";
7
+
8
+ const entries = Object.entries(args)
9
+ .map(([key, value]) => {
10
+ if (value === undefined) return null;
11
+
12
+ const trimmedValue =
13
+ typeof value === "string" && value.length > 80
14
+ ? value.slice(0, 80).concat("...")
15
+ : value;
16
+
17
+ return [key, trimmedValue];
18
+ })
19
+ .filter(Boolean) as [string, string][];
20
+
21
+ if (entries.length === 0) return " (empty object)";
22
+
23
+ const maxLength = entries.reduce(
24
+ (acc, [key]) => Math.max(acc, key.length),
25
+ 0,
26
+ );
27
+
28
+ return entries
29
+ .map(([key, value]) => ` ${`${key}`.padEnd(maxLength + 1)} ${value}`)
30
+ .join("\n");
31
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Like `Promise.allSettled` but throws if any of the promises reject.
3
+ *
4
+ * @dev This is very useful when dealing with multiple concurrent promises
5
+ * in a database transaction.
6
+ */
7
+ export async function promiseAllSettledWithThrow<T>(
8
+ promises: Promise<T>[],
9
+ ): Promise<T[]> {
10
+ let firstError: Error | undefined;
11
+
12
+ const result = await Promise.all(
13
+ promises.map((promise) =>
14
+ promise.catch((error) => {
15
+ if (firstError === undefined) {
16
+ firstError = error;
17
+ }
18
+ }),
19
+ ),
20
+ );
21
+
22
+ if (firstError === undefined) {
23
+ return result as T[];
24
+ }
25
+
26
+ throw firstError;
27
+ }
@@ -0,0 +1,20 @@
1
+ export type PromiseWithResolvers<TPromise> = {
2
+ resolve: (arg: TPromise) => void;
3
+ reject: (error: Error) => void;
4
+ promise: Promise<TPromise>;
5
+ };
6
+
7
+ /**
8
+ * @description Application level polyfill.
9
+ */
10
+ export const promiseWithResolvers = <
11
+ TPromise,
12
+ >(): PromiseWithResolvers<TPromise> => {
13
+ let resolve: (arg: TPromise) => void;
14
+ let reject: (error: Error) => void;
15
+ const promise = new Promise<TPromise>((_resolve, _reject) => {
16
+ resolve = _resolve;
17
+ reject = _reject;
18
+ });
19
+ return { resolve: resolve!, reject: reject!, promise };
20
+ };
@@ -0,0 +1,258 @@
1
+ import {
2
+ type PromiseWithResolvers,
3
+ promiseWithResolvers,
4
+ } from "./promiseWithResolvers.js";
5
+
6
+ export type InnerQueue<returnType, taskType> = {
7
+ task: taskType;
8
+ resolve: (arg: returnType) => void;
9
+ reject: (error: Error) => void;
10
+ }[];
11
+
12
+ export type Queue<returnType, taskType> = {
13
+ size: () => number;
14
+ pending: () => Promise<number>;
15
+ add: (task: taskType) => Promise<returnType>;
16
+ clear: (
17
+ callback?: (e: InnerQueue<returnType, taskType>[number]) => void,
18
+ ) => void;
19
+ isStarted: () => boolean;
20
+ start: () => Promise<void>;
21
+ pause: () => void;
22
+ onIdle: () => Promise<void>;
23
+ onEmpty: () => Promise<void>;
24
+ setParameters: (
25
+ parameters: Pick<
26
+ CreateQueueParameters<unknown, unknown>,
27
+ "frequency" | "concurrency"
28
+ >,
29
+ ) => void;
30
+ };
31
+
32
+ export type CreateQueueParameters<returnType, taskType> = {
33
+ worker: (task: taskType) => Promise<returnType>;
34
+ initialStart?: boolean;
35
+ browser?: boolean;
36
+ } & (
37
+ | {
38
+ concurrency: number;
39
+ frequency: number;
40
+ }
41
+ | { concurrency: number; frequency?: undefined }
42
+ | { concurrency?: undefined; frequency: number }
43
+ );
44
+
45
+ const validateParameters = ({
46
+ concurrency,
47
+ frequency,
48
+ }: Pick<
49
+ CreateQueueParameters<unknown, unknown>,
50
+ "frequency" | "concurrency"
51
+ >) => {
52
+ if (concurrency === undefined && frequency === undefined) {
53
+ throw new Error(
54
+ "Invalid queue configuration, must specify either 'concurrency' or 'frequency'.",
55
+ );
56
+ }
57
+
58
+ if (concurrency !== undefined && concurrency <= 0) {
59
+ throw new Error(
60
+ `Invalid value for queue 'concurrency' option. Got ${concurrency}, expected a number greater than zero.`,
61
+ );
62
+ }
63
+
64
+ if (frequency !== undefined && frequency <= 0) {
65
+ throw new Error(
66
+ `Invalid value for queue 'frequency' option. Got ${frequency}, expected a number greater than zero.`,
67
+ );
68
+ }
69
+ };
70
+
71
+ export const createQueue = <returnType, taskType = void>({
72
+ worker,
73
+ initialStart = false,
74
+ browser = true,
75
+ ..._parameters
76
+ }: CreateQueueParameters<returnType, taskType>): Queue<
77
+ returnType,
78
+ taskType
79
+ > => {
80
+ validateParameters(_parameters);
81
+
82
+ const parameters: Pick<
83
+ CreateQueueParameters<unknown, unknown>,
84
+ "frequency" | "concurrency"
85
+ > = _parameters;
86
+ let queue = new Array<InnerQueue<returnType, taskType>[number]>();
87
+ let pending = 0;
88
+ let timestamp = 0;
89
+ let requests = 0;
90
+ let isStarted = initialStart;
91
+
92
+ let timer: NodeJS.Timeout | undefined;
93
+
94
+ let emptyPromiseWithResolvers:
95
+ | (PromiseWithResolvers<void> & { completed: boolean })
96
+ | undefined = undefined;
97
+ let idlePromiseWithResolvers:
98
+ | (PromiseWithResolvers<void> & { completed: boolean })
99
+ | undefined = undefined;
100
+
101
+ const next = () => {
102
+ if (!isStarted) return;
103
+
104
+ const _timestamp = Date.now();
105
+
106
+ if (Math.floor(_timestamp / 1_000) !== timestamp) {
107
+ requests = 0;
108
+ timestamp = Math.floor(_timestamp / 1_000);
109
+ }
110
+
111
+ if (timer) return;
112
+
113
+ while (
114
+ (parameters.frequency !== undefined
115
+ ? requests < parameters.frequency
116
+ : true) &&
117
+ (parameters.concurrency !== undefined
118
+ ? pending < parameters.concurrency
119
+ : true) &&
120
+ queue.length > 0
121
+ ) {
122
+ const { task, resolve, reject } = queue.shift()!;
123
+
124
+ requests++;
125
+ pending++;
126
+
127
+ worker(task)
128
+ .then(resolve)
129
+ .catch(reject)
130
+ .finally(() => {
131
+ pending--;
132
+
133
+ if (
134
+ idlePromiseWithResolvers !== undefined &&
135
+ queue.length === 0 &&
136
+ pending === 0
137
+ ) {
138
+ idlePromiseWithResolvers.resolve();
139
+ idlePromiseWithResolvers.completed = true;
140
+ }
141
+
142
+ browser ? next() : process.nextTick(next);
143
+ });
144
+
145
+ if (emptyPromiseWithResolvers !== undefined && queue.length === 0) {
146
+ emptyPromiseWithResolvers.resolve();
147
+ emptyPromiseWithResolvers.completed = true;
148
+ }
149
+ }
150
+
151
+ if (
152
+ parameters.frequency !== undefined &&
153
+ requests >= parameters.frequency
154
+ ) {
155
+ timer = setTimeout(
156
+ () => {
157
+ timer = undefined;
158
+ next();
159
+ },
160
+ 1_000 - (_timestamp % 1_000),
161
+ );
162
+ return;
163
+ }
164
+ };
165
+
166
+ return {
167
+ size: () => queue.length,
168
+ pending: () => {
169
+ if (browser) {
170
+ return new Promise<number>((resolve) =>
171
+ setTimeout(() => resolve(pending)),
172
+ );
173
+ } else {
174
+ return new Promise<number>((resolve) =>
175
+ setImmediate(() => resolve(pending)),
176
+ );
177
+ }
178
+ },
179
+ add: (task: taskType) => {
180
+ const { promise, resolve, reject } = promiseWithResolvers<returnType>();
181
+ queue.push({ task, resolve, reject });
182
+
183
+ next();
184
+
185
+ return promise;
186
+ },
187
+ clear: (callback) => {
188
+ if (callback) {
189
+ for (const e of queue) {
190
+ callback(e);
191
+ }
192
+ }
193
+
194
+ queue = new Array<InnerQueue<returnType, taskType>[number]>();
195
+ clearTimeout(timer);
196
+ timer = undefined;
197
+ },
198
+ isStarted: () => isStarted,
199
+ start: () => {
200
+ if (browser) {
201
+ return new Promise<number>((resolve) =>
202
+ setTimeout(() => resolve(pending)),
203
+ ).then(() => {
204
+ isStarted = true;
205
+ next();
206
+ });
207
+ } else {
208
+ return new Promise<number>((resolve) =>
209
+ process.nextTick(() => resolve(pending)),
210
+ ).then(() => {
211
+ isStarted = true;
212
+ next();
213
+ });
214
+ }
215
+ },
216
+ pause: () => {
217
+ isStarted = false;
218
+ },
219
+ onIdle: () => {
220
+ if (
221
+ idlePromiseWithResolvers === undefined ||
222
+ idlePromiseWithResolvers.completed
223
+ ) {
224
+ if (queue.length === 0 && pending === 0) return Promise.resolve();
225
+
226
+ idlePromiseWithResolvers = {
227
+ ...promiseWithResolvers<void>(),
228
+ completed: false,
229
+ };
230
+ }
231
+ return idlePromiseWithResolvers.promise;
232
+ },
233
+ onEmpty: () => {
234
+ if (
235
+ emptyPromiseWithResolvers === undefined ||
236
+ emptyPromiseWithResolvers.completed
237
+ ) {
238
+ if (queue.length === 0) return Promise.resolve();
239
+
240
+ emptyPromiseWithResolvers = {
241
+ ...promiseWithResolvers<void>(),
242
+ completed: false,
243
+ };
244
+ }
245
+ return emptyPromiseWithResolvers.promise;
246
+ },
247
+ setParameters: (_parameters) => {
248
+ validateParameters(_parameters);
249
+
250
+ if ("frequency" in _parameters) {
251
+ parameters.frequency = _parameters.frequency;
252
+ }
253
+ if ("concurrency" in _parameters) {
254
+ parameters.concurrency = _parameters.concurrency;
255
+ }
256
+ },
257
+ } as Queue<returnType, taskType>;
258
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Generates an array of integers between two bounds. Exclusive on the right.
3
+ *
4
+ * @param start Integer to start at.
5
+ * @param stop Integer to stop at (exclusive).
6
+ */
7
+ export const range = (start: number, stop: number) =>
8
+ Array.from({ length: stop - start }, (_, i) => start + i);