@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,537 @@
1
+ import crypto from "node:crypto";
2
+ import type { Common } from "@/internal/common.js";
3
+ import { BaseError } from "@/internal/errors.js";
4
+ import {
5
+ BigIntSerializationError,
6
+ CheckConstraintError,
7
+ DbConnectionError,
8
+ NonRetryableUserError,
9
+ NotNullConstraintError,
10
+ ShutdownError,
11
+ UniqueConstraintError,
12
+ } from "@/internal/errors.js";
13
+ import type { Logger } from "@/internal/logger.js";
14
+ import type { Schema } from "@/internal/types.js";
15
+ import type { Drizzle } from "@/types/db.js";
16
+ import { startClock } from "@/utils/timer.js";
17
+ import { wait } from "@/utils/wait.js";
18
+ import { PGlite } from "@electric-sql/pglite";
19
+ import type { ExtractTablesWithRelations } from "drizzle-orm";
20
+ import type {
21
+ PgDatabase,
22
+ PgQueryResultHKT,
23
+ PgTransaction,
24
+ PgTransactionConfig,
25
+ } from "drizzle-orm/pg-core";
26
+ import type pg from "pg";
27
+
28
+ const RETRY_COUNT = 9;
29
+ const BASE_DURATION = 125;
30
+
31
+ type InnerQB<
32
+ TSchema extends Schema = Schema,
33
+ TClient extends PGlite | pg.Pool | pg.PoolClient =
34
+ | PGlite
35
+ | pg.Pool
36
+ | pg.PoolClient,
37
+ > = Omit<Drizzle<TSchema>, "transaction"> & TransactionQB<TSchema, TClient>;
38
+
39
+ type TransactionQB<
40
+ TSchema extends Schema = Schema,
41
+ TClient extends PGlite | pg.Pool | pg.PoolClient =
42
+ | PGlite
43
+ | pg.Pool
44
+ | pg.PoolClient,
45
+ > = {
46
+ /**
47
+ * Transaction with retries, logging, metrics, and error parsing.
48
+ */
49
+ transaction<T>(
50
+ transaction: (tx: QB<TSchema, TClient>) => Promise<T>,
51
+ config?: PgTransactionConfig,
52
+ context?: { logger?: Logger },
53
+ ): Promise<T>;
54
+ transaction<T>(
55
+ { label }: { label: string },
56
+ transaction: (tx: QB<TSchema, TClient>) => Promise<T>,
57
+ config?: PgTransactionConfig,
58
+ context?: { logger?: Logger },
59
+ ): Promise<T>;
60
+ };
61
+
62
+ /**
63
+ * Query builder with built-in retry logic, logging, and metrics.
64
+ */
65
+ export type QB<
66
+ TSchema extends Schema = Schema,
67
+ TClient extends PGlite | pg.Pool | pg.PoolClient =
68
+ | PGlite
69
+ | pg.Pool
70
+ | pg.PoolClient,
71
+ > = TransactionQB<TSchema, TClient> & {
72
+ raw: Drizzle<TSchema>;
73
+ /**
74
+ * Query with retries, logging, metrics, and error parsing.
75
+ */
76
+ wrap<T>(
77
+ query: (db: InnerQB<TSchema, TClient>) => T,
78
+ context?: { logger?: Logger },
79
+ ): T;
80
+ wrap<T>(
81
+ { label }: { label: string },
82
+ query: (db: InnerQB<TSchema, TClient>) => T,
83
+ context?: { logger?: Logger },
84
+ ): T;
85
+ } & (
86
+ | { $dialect: "pglite"; $client: PGlite }
87
+ | { $dialect: "postgres"; $client: pg.Pool | pg.PoolClient }
88
+ );
89
+
90
+ export const parseDbError = (error: any): Error => {
91
+ const stack = error.stack;
92
+
93
+ if (error instanceof BaseError) {
94
+ return error;
95
+ }
96
+
97
+ if (error?.message?.includes("violates not-null constraint")) {
98
+ error = new NotNullConstraintError(error.message);
99
+ } else if (error?.message?.includes("violates unique constraint")) {
100
+ error = new UniqueConstraintError(error.message);
101
+ } else if (error?.message?.includes("violates check constraint")) {
102
+ error = new CheckConstraintError(error.message);
103
+ } else if (
104
+ // nodejs error message
105
+ error?.message?.includes("Do not know how to serialize a BigInt") ||
106
+ // bun error message
107
+ error?.message?.includes("cannot serialize BigInt")
108
+ ) {
109
+ error = new BigIntSerializationError(error.message);
110
+ error.meta.push(
111
+ "Hint:\n The JSON column type does not support BigInt values. Use the replaceBigInts() helper function before inserting into the database. Docs: https://ponder.sh/docs/api-reference/ponder-utils#replacebigints",
112
+ );
113
+ } else if (error?.message?.includes("does not exist")) {
114
+ error = new NonRetryableUserError(error.message);
115
+ } else if (error?.message?.includes("already exists")) {
116
+ error = new NonRetryableUserError(error.message);
117
+ } else if (
118
+ error?.message?.includes(
119
+ "terminating connection due to administrator command",
120
+ ) ||
121
+ error?.message?.includes("connection to client lost") ||
122
+ error?.message?.includes("too many clients already") ||
123
+ error?.message?.includes("Connection terminated unexpectedly") ||
124
+ error?.message?.includes("ECONNRESET") ||
125
+ error?.message?.includes("ETIMEDOUT") ||
126
+ error?.message?.includes("timeout exceeded when trying to connect")
127
+ ) {
128
+ error = new DbConnectionError(error.message);
129
+ }
130
+
131
+ error.stack = stack;
132
+
133
+ return error;
134
+ };
135
+
136
+ /**
137
+ * Create a query builder.
138
+ *
139
+ * @example
140
+ * ```ts
141
+ * const qb = createQB(drizzle(pool), { casing: "snake_case", common });
142
+ * const result1 = await qb.wrap((db) => db.select().from(accounts));
143
+ * const result2 = await qb.wrap({ label: "label" }, (db) => db.select().from(accounts));
144
+ * ```
145
+ */
146
+ export const createQB = <
147
+ TSchema extends Schema = { [name: string]: never },
148
+ TClient extends PGlite | pg.Pool | pg.PoolClient =
149
+ | PGlite
150
+ | pg.Pool
151
+ | pg.PoolClient,
152
+ >(
153
+ db: Drizzle<TSchema> & { $client: TClient },
154
+ { common, isAdmin }: { common: Common; isAdmin?: boolean },
155
+ ): QB<TSchema, TClient> => {
156
+ const dialect = db.$client instanceof PGlite ? "pglite" : "postgres";
157
+
158
+ // Retry, logging, metrics, and error parsing wrapper
159
+ const retryLogMetricErrorWrap = async <T>(
160
+ fn: () => Promise<T>,
161
+ {
162
+ label,
163
+ isTransaction,
164
+ isTransactionStatement,
165
+ logger,
166
+ }: {
167
+ label?: string;
168
+ isTransaction: boolean;
169
+ isTransactionStatement: boolean;
170
+ logger: Logger;
171
+ },
172
+ ): Promise<T> => {
173
+ // First error thrown is often the most useful
174
+ let firstError: any;
175
+ let hasError = false;
176
+
177
+ for (let i = 0; i <= RETRY_COUNT; i++) {
178
+ const endClock = startClock();
179
+ const id = crypto.randomUUID().slice(0, 8);
180
+
181
+ if (label) {
182
+ logger.trace({
183
+ msg: "Started database query",
184
+ query: label,
185
+ query_id: id,
186
+ });
187
+ }
188
+
189
+ try {
190
+ if (common.shutdown.isKilled && isAdmin === false) {
191
+ throw new ShutdownError();
192
+ }
193
+
194
+ const result = await fn();
195
+ if (label) {
196
+ common.metrics.ponder_database_method_duration.observe(
197
+ { method: label },
198
+ endClock(),
199
+ );
200
+ }
201
+
202
+ if (label) {
203
+ logger.trace({
204
+ msg: "Completed database query",
205
+ query: label,
206
+ query_id: id,
207
+ duration: endClock(),
208
+ });
209
+ }
210
+
211
+ return result;
212
+ } catch (e) {
213
+ const error = parseDbError(e);
214
+
215
+ if (common.shutdown.isKilled) {
216
+ throw new ShutdownError();
217
+ }
218
+
219
+ if (label) {
220
+ common.metrics.ponder_database_method_duration.observe(
221
+ { method: label },
222
+ endClock(),
223
+ );
224
+ common.metrics.ponder_database_method_error_total.inc({
225
+ method: label,
226
+ });
227
+ }
228
+
229
+ if (!hasError) {
230
+ hasError = true;
231
+ firstError = error;
232
+ }
233
+
234
+ // Two types of transaction environments
235
+ // 1. Inside callback (running user statements or control flow statements): Throw error, retry
236
+ // later. We want the error bubbled up out of the callback, so the transaction is properly rolled back.
237
+ // 2. Outside callback (running entire transaction, user statements + control flow statements): Retry immediately.
238
+
239
+ if (isTransaction) {
240
+ if (error instanceof NonRetryableUserError) {
241
+ throw error;
242
+ }
243
+ } else if (isTransactionStatement) {
244
+ // Transaction statements are not immediately retried, so the transaction will be properly rolled back.
245
+ logger.warn({
246
+ msg: "Failed database query",
247
+ query: label,
248
+ query_id: id,
249
+ duration: endClock(),
250
+ error,
251
+ });
252
+ throw error;
253
+ } else if (error instanceof NonRetryableUserError) {
254
+ logger.warn({
255
+ msg: "Failed database query",
256
+ query: label,
257
+ query_id: id,
258
+ duration: endClock(),
259
+ error,
260
+ });
261
+ throw error;
262
+ }
263
+
264
+ if (i === RETRY_COUNT) {
265
+ logger.warn({
266
+ msg: "Failed database query",
267
+ query: label,
268
+ query_id: id,
269
+ retry_count: i,
270
+ duration: endClock(),
271
+ error,
272
+ });
273
+ throw firstError;
274
+ }
275
+
276
+ const duration = BASE_DURATION * 2 ** i;
277
+ logger.warn({
278
+ msg: "Failed database query",
279
+ query: label,
280
+ query_id: id,
281
+ retry_count: i,
282
+ retry_delay: duration,
283
+ duration: endClock(),
284
+ error,
285
+ });
286
+ await wait(duration);
287
+ }
288
+ }
289
+
290
+ throw "unreachable";
291
+ };
292
+
293
+ // Add QB methods to the transaction object
294
+ const addQBMethods = (db: PgDatabase<PgQueryResultHKT, TSchema>) => {
295
+ const _transaction = db.transaction.bind(db);
296
+ // @ts-ignore
297
+ db.transaction = async (...args) => {
298
+ if (typeof args[0] === "function") {
299
+ const [callback, config, transactionContext] = args as unknown as [
300
+ (
301
+ tx: PgTransaction<
302
+ PgQueryResultHKT,
303
+ TSchema,
304
+ ExtractTablesWithRelations<TSchema>
305
+ >,
306
+ ) => Promise<unknown>,
307
+ PgTransactionConfig | undefined,
308
+ { logger?: Logger } | undefined,
309
+ ];
310
+
311
+ // Note: We want to retry errors from `callback` but include
312
+ // the transaction control statements in `_transaction`.
313
+
314
+ return retryLogMetricErrorWrap(
315
+ () =>
316
+ _transaction(async (tx) => {
317
+ addQBMethods(tx);
318
+
319
+ // @ts-expect-error
320
+ tx.raw = tx;
321
+
322
+ Object.assign(tx, { $dialect: dialect });
323
+ // @ts-expect-error
324
+ Object.assign(tx, { $client: tx.session.client });
325
+
326
+ // Note: `tx.wrap` should not retry errors, because the transaction will be aborted
327
+ // @ts-ignore
328
+ (tx as unknown as QB<TSchema, TClient>).wrap = (...args) => {
329
+ if (typeof args[0] === "function") {
330
+ const [query, context] = args as [
331
+ (db: InnerQB<TSchema, TClient>) => unknown,
332
+ { logger?: Logger } | undefined,
333
+ ];
334
+ return retryLogMetricErrorWrap(
335
+ async () =>
336
+ query(tx as unknown as InnerQB<TSchema, TClient>),
337
+ {
338
+ isTransaction: false,
339
+ isTransactionStatement: true,
340
+ logger:
341
+ context?.logger ??
342
+ transactionContext?.logger ??
343
+ common.logger,
344
+ },
345
+ );
346
+ } else {
347
+ const [{ label }, query, context] = args as [
348
+ { label: string },
349
+ (db: InnerQB<TSchema, TClient>) => unknown,
350
+ { logger?: Logger } | undefined,
351
+ ];
352
+ return retryLogMetricErrorWrap(
353
+ async () =>
354
+ query(tx as unknown as InnerQB<TSchema, TClient>),
355
+ {
356
+ label,
357
+ isTransaction: false,
358
+ isTransactionStatement: true,
359
+ logger:
360
+ context?.logger ??
361
+ transactionContext?.logger ??
362
+ common.logger,
363
+ },
364
+ );
365
+ }
366
+ };
367
+
368
+ const result = await callback(tx);
369
+ return result;
370
+ }, config),
371
+ {
372
+ isTransaction: true,
373
+ isTransactionStatement: false,
374
+ logger: transactionContext?.logger ?? common.logger,
375
+ },
376
+ );
377
+ } else {
378
+ const [{ label }, callback, config, transactionContext] =
379
+ args as unknown as [
380
+ { label: string },
381
+ (
382
+ tx: PgTransaction<
383
+ PgQueryResultHKT,
384
+ TSchema,
385
+ ExtractTablesWithRelations<TSchema>
386
+ >,
387
+ ) => Promise<unknown>,
388
+ PgTransactionConfig | undefined,
389
+ { logger?: Logger } | undefined,
390
+ ];
391
+
392
+ // Note: We want to retry errors from `callback` but include
393
+ // the transaction control statements in `_transaction`.
394
+
395
+ return retryLogMetricErrorWrap(
396
+ () =>
397
+ _transaction(async (tx) => {
398
+ addQBMethods(tx);
399
+
400
+ // @ts-expect-error
401
+ tx.raw = tx;
402
+
403
+ Object.assign(tx, { $dialect: dialect });
404
+ // @ts-expect-error
405
+ Object.assign(tx, { $client: tx.session.client });
406
+
407
+ // Note: `tx.wrap` should not retry errors, because the transaction will be aborted
408
+ // @ts-ignore
409
+ (tx as unknown as QB<TSchema, TClient>).wrap = (...args) => {
410
+ if (typeof args[0] === "function") {
411
+ const [query, context] = args as [
412
+ (db: InnerQB<TSchema, TClient>) => unknown,
413
+ { logger?: Logger } | undefined,
414
+ ];
415
+ return retryLogMetricErrorWrap(
416
+ async () =>
417
+ query(tx as unknown as InnerQB<TSchema, TClient>),
418
+ {
419
+ label,
420
+ isTransaction: false,
421
+ isTransactionStatement: true,
422
+ logger:
423
+ context?.logger ??
424
+ transactionContext?.logger ??
425
+ common.logger,
426
+ },
427
+ );
428
+ } else {
429
+ const [{ label }, query, context] = args as [
430
+ { label: string },
431
+ (db: InnerQB<TSchema, TClient>) => unknown,
432
+ { logger?: Logger } | undefined,
433
+ ];
434
+ return retryLogMetricErrorWrap(
435
+ async () =>
436
+ query(tx as unknown as InnerQB<TSchema, TClient>),
437
+ {
438
+ label,
439
+ isTransaction: false,
440
+ isTransactionStatement: true,
441
+ logger:
442
+ context?.logger ??
443
+ transactionContext?.logger ??
444
+ common.logger,
445
+ },
446
+ );
447
+ }
448
+ };
449
+
450
+ const result = await callback(tx);
451
+ return result;
452
+ }, config),
453
+ {
454
+ label,
455
+ isTransaction: true,
456
+ isTransactionStatement: false,
457
+ logger: transactionContext?.logger ?? common.logger,
458
+ },
459
+ );
460
+ }
461
+ };
462
+ };
463
+
464
+ if (dialect === "postgres") {
465
+ addQBMethods(db);
466
+ } else {
467
+ // @ts-ignore
468
+ db.transaction = async (...args) => {
469
+ if (typeof args[0] === "function") {
470
+ const [callback, context] = args as [
471
+ (
472
+ tx: PgTransaction<
473
+ PgQueryResultHKT,
474
+ TSchema,
475
+ ExtractTablesWithRelations<TSchema>
476
+ >,
477
+ ) => Promise<unknown>,
478
+ { logger?: Logger } | undefined,
479
+ ];
480
+
481
+ // @ts-expect-error
482
+ return retryLogMetricErrorWrap(() => callback(db), {
483
+ isTransactionStatement: true,
484
+ logger: context?.logger ?? common.logger,
485
+ });
486
+ } else {
487
+ const [{ label }, callback, context] = args as [
488
+ { label: string },
489
+ (
490
+ tx: PgTransaction<
491
+ PgQueryResultHKT,
492
+ TSchema,
493
+ ExtractTablesWithRelations<TSchema>
494
+ >,
495
+ ) => Promise<unknown>,
496
+ { logger?: Logger } | undefined,
497
+ ];
498
+
499
+ // @ts-expect-error
500
+ return retryLogMetricErrorWrap(() => callback(db), {
501
+ label,
502
+ isTransactionStatement: true,
503
+ logger: context?.logger ?? common.logger,
504
+ });
505
+ }
506
+ };
507
+ }
508
+
509
+ const qb = db as unknown as QB<TSchema, TClient>;
510
+ qb.raw = db;
511
+
512
+ qb.$dialect = dialect;
513
+ qb.$client = db.$client;
514
+
515
+ qb.wrap = async (...args) => {
516
+ if (typeof args[0] === "function") {
517
+ const [query, context] = args;
518
+ // @ts-expect-error
519
+ return retryLogMetricErrorWrap(() => query(qb), {
520
+ isTransactionStatement: false,
521
+ // @ts-expect-error
522
+ logger: context?.logger ?? common.logger,
523
+ });
524
+ } else {
525
+ const [{ label }, query, context] = args;
526
+ // @ts-expect-error
527
+ return retryLogMetricErrorWrap(() => query(qb), {
528
+ isTransactionStatement: false,
529
+ label,
530
+ // @ts-expect-error
531
+ logger: context?.logger ?? common.logger,
532
+ });
533
+ }
534
+ };
535
+
536
+ return qb;
537
+ };
@@ -0,0 +1,57 @@
1
+ import {
2
+ type ColumnBaseConfig,
3
+ type ColumnBuilderBaseConfig,
4
+ type ColumnBuilderRuntimeConfig,
5
+ type MakeColumnConfig,
6
+ entityKind,
7
+ } from "drizzle-orm";
8
+ import {
9
+ type AnyPgTable,
10
+ PgColumn,
11
+ PgColumnBuilder,
12
+ } from "drizzle-orm/pg-core";
13
+
14
+ export type PgBigintBuilderInitial<TName extends string> = PgBigintBuilder<{
15
+ name: TName;
16
+ dataType: "bigint";
17
+ columnType: "PgEvmBigint";
18
+ data: bigint;
19
+ driverParam: string;
20
+ enumValues: undefined;
21
+ generated: undefined;
22
+ }>;
23
+
24
+ export class PgBigintBuilder<
25
+ T extends ColumnBuilderBaseConfig<"bigint", "PgEvmBigint">,
26
+ > extends PgColumnBuilder<T> {
27
+ static readonly [entityKind]: string = "PgEvmBigintBuilder";
28
+
29
+ constructor(name: T["name"]) {
30
+ super(name, "bigint", "PgEvmBigint");
31
+ }
32
+
33
+ /** @internal */
34
+ // @ts-ignore
35
+ override build<TTableName extends string>(
36
+ table: AnyPgTable<{ name: TTableName }>,
37
+ ): PgBigint<MakeColumnConfig<T, TTableName>> {
38
+ return new PgBigint<MakeColumnConfig<T, TTableName>>(
39
+ table,
40
+ this.config as ColumnBuilderRuntimeConfig<any, any>,
41
+ );
42
+ }
43
+ }
44
+
45
+ export class PgBigint<
46
+ T extends ColumnBaseConfig<"bigint", "PgEvmBigint">,
47
+ > extends PgColumn<T> {
48
+ static readonly [entityKind]: string = "PgEvmBigint";
49
+
50
+ getSQLType(): string {
51
+ return "numeric(78)";
52
+ }
53
+
54
+ override mapFromDriverValue(value: string): bigint {
55
+ return BigInt(value);
56
+ }
57
+ }
@@ -0,0 +1,68 @@
1
+ import {
2
+ type ColumnBaseConfig,
3
+ type ColumnBuilderBaseConfig,
4
+ type ColumnBuilderRuntimeConfig,
5
+ type MakeColumnConfig,
6
+ entityKind,
7
+ } from "drizzle-orm";
8
+ import {
9
+ type AnyPgTable,
10
+ PgColumn,
11
+ PgColumnBuilder,
12
+ } from "drizzle-orm/pg-core";
13
+
14
+ export type PgBytesBuilderInitial<TName extends string> = PgBytesBuilder<{
15
+ name: TName;
16
+ dataType: "buffer";
17
+ columnType: "PgBytes";
18
+ data: Uint8Array;
19
+ driverParam: string;
20
+ enumValues: undefined;
21
+ generated: undefined;
22
+ }>;
23
+
24
+ export class PgBytesBuilder<
25
+ T extends ColumnBuilderBaseConfig<"buffer", "PgBytes">,
26
+ > extends PgColumnBuilder<T> {
27
+ static readonly [entityKind]: string = "PgBytesBuilder";
28
+
29
+ constructor(name: T["name"]) {
30
+ super(name, "buffer", "PgBytes");
31
+ }
32
+
33
+ /** @internal */
34
+ // @ts-ignore
35
+ override build<TTableName extends string>(
36
+ table: AnyPgTable<{ name: TTableName }>,
37
+ ): PgBytes<MakeColumnConfig<T, TTableName>> {
38
+ return new PgBytes<MakeColumnConfig<T, TTableName>>(
39
+ table,
40
+ this.config as ColumnBuilderRuntimeConfig<any, any>,
41
+ );
42
+ }
43
+
44
+ /**
45
+ * @deprecated Bytes columns cannot be used as arrays
46
+ */
47
+ override array(): never {
48
+ throw new Error("bytes().array() is not supported");
49
+ }
50
+ }
51
+
52
+ export class PgBytes<
53
+ T extends ColumnBaseConfig<"buffer", "PgBytes">,
54
+ > extends PgColumn<T> {
55
+ static readonly [entityKind]: string = "PgBytes";
56
+
57
+ getSQLType(): string {
58
+ return "bytea";
59
+ }
60
+
61
+ override mapFromDriverValue(value: Buffer): Uint8Array {
62
+ return new Uint8Array(value);
63
+ }
64
+
65
+ override mapToDriverValue(value: Uint8Array): Buffer {
66
+ return Buffer.from(value);
67
+ }
68
+ }