ponder 0.9.5-debug.1 → 0.9.5

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 (462) hide show
  1. package/dist/{types/bin → bin}/ponder.d.ts +6 -5
  2. package/dist/bin/ponder.js +12933 -0
  3. package/dist/bin/ponder.js.map +1 -0
  4. package/dist/chunk-K2TLRLX3.js +163 -0
  5. package/dist/chunk-K2TLRLX3.js.map +1 -0
  6. package/dist/chunk-LHCA5XFV.js +257 -0
  7. package/dist/chunk-LHCA5XFV.js.map +1 -0
  8. package/dist/{types/drizzle → drizzle}/onchain.d.ts +96 -49
  9. package/dist/drizzle/onchain.js +19 -0
  10. package/dist/drizzle/onchain.js.map +1 -0
  11. package/dist/index.d.ts +819 -0
  12. package/dist/index.js +2217 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/utils-ceNucOJb.d.ts +14 -0
  15. package/package.json +17 -17
  16. package/src/bin/commands/dev.ts +1 -1
  17. package/src/bin/ponder.ts +1 -1
  18. package/src/build/configAndIndexingFunctions.ts +1 -1
  19. package/src/build/factory.ts +1 -1
  20. package/src/client/index.ts +1 -1
  21. package/src/indexing-store/historical.ts +1 -1
  22. package/src/indexing-store/realtime.ts +1 -1
  23. package/src/internal/telemetry.ts +1 -1
  24. package/src/sync/fragments.ts +1 -1
  25. package/src/sync-realtime/index.ts +1 -1
  26. package/src/utils/generators.ts +1 -1
  27. package/src/utils/mutex.ts +1 -1
  28. package/src/utils/requestQueue.ts +1 -1
  29. package/CHANGELOG.md +0 -2201
  30. package/dist/esm/bin/commands/codegen.js +0 -37
  31. package/dist/esm/bin/commands/codegen.js.map +0 -1
  32. package/dist/esm/bin/commands/dev.js +0 -242
  33. package/dist/esm/bin/commands/dev.js.map +0 -1
  34. package/dist/esm/bin/commands/list.js +0 -103
  35. package/dist/esm/bin/commands/list.js.map +0 -1
  36. package/dist/esm/bin/commands/serve.js +0 -123
  37. package/dist/esm/bin/commands/serve.js.map +0 -1
  38. package/dist/esm/bin/commands/start.js +0 -136
  39. package/dist/esm/bin/commands/start.js.map +0 -1
  40. package/dist/esm/bin/ponder.js +0 -118
  41. package/dist/esm/bin/ponder.js.map +0 -1
  42. package/dist/esm/bin/utils/codegen.js +0 -26
  43. package/dist/esm/bin/utils/codegen.js.map +0 -1
  44. package/dist/esm/bin/utils/exit.js +0 -69
  45. package/dist/esm/bin/utils/exit.js.map +0 -1
  46. package/dist/esm/bin/utils/run.js +0 -247
  47. package/dist/esm/bin/utils/run.js.map +0 -1
  48. package/dist/esm/bin/utils/runServer.js +0 -8
  49. package/dist/esm/bin/utils/runServer.js.map +0 -1
  50. package/dist/esm/build/configAndIndexingFunctions.js +0 -654
  51. package/dist/esm/build/configAndIndexingFunctions.js.map +0 -1
  52. package/dist/esm/build/factory.js +0 -43
  53. package/dist/esm/build/factory.js.map +0 -1
  54. package/dist/esm/build/index.js +0 -431
  55. package/dist/esm/build/index.js.map +0 -1
  56. package/dist/esm/build/plugin.js +0 -43
  57. package/dist/esm/build/plugin.js.map +0 -1
  58. package/dist/esm/build/pre.js +0 -112
  59. package/dist/esm/build/pre.js.map +0 -1
  60. package/dist/esm/build/schema.js +0 -89
  61. package/dist/esm/build/schema.js.map +0 -1
  62. package/dist/esm/build/stacktrace.js +0 -137
  63. package/dist/esm/build/stacktrace.js.map +0 -1
  64. package/dist/esm/client/index.js +0 -124
  65. package/dist/esm/client/index.js.map +0 -1
  66. package/dist/esm/client/validate.js +0 -1151
  67. package/dist/esm/client/validate.js.map +0 -1
  68. package/dist/esm/config/address.js +0 -2
  69. package/dist/esm/config/address.js.map +0 -1
  70. package/dist/esm/config/eventFilter.js +0 -2
  71. package/dist/esm/config/eventFilter.js.map +0 -1
  72. package/dist/esm/config/index.js +0 -2
  73. package/dist/esm/config/index.js.map +0 -1
  74. package/dist/esm/config/networks.js +0 -120
  75. package/dist/esm/config/networks.js.map +0 -1
  76. package/dist/esm/config/utilityTypes.js +0 -2
  77. package/dist/esm/config/utilityTypes.js.map +0 -1
  78. package/dist/esm/database/index.js +0 -914
  79. package/dist/esm/database/index.js.map +0 -1
  80. package/dist/esm/drizzle/bigint.js +0 -36
  81. package/dist/esm/drizzle/bigint.js.map +0 -1
  82. package/dist/esm/drizzle/hex.js +0 -38
  83. package/dist/esm/drizzle/hex.js.map +0 -1
  84. package/dist/esm/drizzle/index.js +0 -43
  85. package/dist/esm/drizzle/index.js.map +0 -1
  86. package/dist/esm/drizzle/kit/index.js +0 -658
  87. package/dist/esm/drizzle/kit/index.js.map +0 -1
  88. package/dist/esm/drizzle/onchain.js +0 -102
  89. package/dist/esm/drizzle/onchain.js.map +0 -1
  90. package/dist/esm/graphql/index.js +0 -704
  91. package/dist/esm/graphql/index.js.map +0 -1
  92. package/dist/esm/graphql/json.js +0 -42
  93. package/dist/esm/graphql/json.js.map +0 -1
  94. package/dist/esm/graphql/middleware.js +0 -80
  95. package/dist/esm/graphql/middleware.js.map +0 -1
  96. package/dist/esm/index.js +0 -9
  97. package/dist/esm/index.js.map +0 -1
  98. package/dist/esm/indexing/addStackTrace.js +0 -54
  99. package/dist/esm/indexing/addStackTrace.js.map +0 -1
  100. package/dist/esm/indexing/index.js +0 -10
  101. package/dist/esm/indexing/index.js.map +0 -1
  102. package/dist/esm/indexing/ponderActions.js +0 -60
  103. package/dist/esm/indexing/ponderActions.js.map +0 -1
  104. package/dist/esm/indexing/service.js +0 -312
  105. package/dist/esm/indexing/service.js.map +0 -1
  106. package/dist/esm/indexing-store/historical.js +0 -591
  107. package/dist/esm/indexing-store/historical.js.map +0 -1
  108. package/dist/esm/indexing-store/index.js +0 -19
  109. package/dist/esm/indexing-store/index.js.map +0 -1
  110. package/dist/esm/indexing-store/metadata.js +0 -46
  111. package/dist/esm/indexing-store/metadata.js.map +0 -1
  112. package/dist/esm/indexing-store/realtime.js +0 -295
  113. package/dist/esm/indexing-store/realtime.js.map +0 -1
  114. package/dist/esm/internal/common.js +0 -2
  115. package/dist/esm/internal/common.js.map +0 -1
  116. package/dist/esm/internal/errors.js +0 -175
  117. package/dist/esm/internal/errors.js.map +0 -1
  118. package/dist/esm/internal/logger.js +0 -96
  119. package/dist/esm/internal/logger.js.map +0 -1
  120. package/dist/esm/internal/metrics.js +0 -569
  121. package/dist/esm/internal/metrics.js.map +0 -1
  122. package/dist/esm/internal/options.js +0 -69
  123. package/dist/esm/internal/options.js.map +0 -1
  124. package/dist/esm/internal/shutdown.js +0 -18
  125. package/dist/esm/internal/shutdown.js.map +0 -1
  126. package/dist/esm/internal/telemetry.js +0 -199
  127. package/dist/esm/internal/telemetry.js.map +0 -1
  128. package/dist/esm/internal/types.js +0 -2
  129. package/dist/esm/internal/types.js.map +0 -1
  130. package/dist/esm/server/error.js +0 -55
  131. package/dist/esm/server/error.js.map +0 -1
  132. package/dist/esm/server/index.js +0 -107
  133. package/dist/esm/server/index.js.map +0 -1
  134. package/dist/esm/sync/abi.js +0 -67
  135. package/dist/esm/sync/abi.js.map +0 -1
  136. package/dist/esm/sync/events.js +0 -607
  137. package/dist/esm/sync/events.js.map +0 -1
  138. package/dist/esm/sync/filter.js +0 -356
  139. package/dist/esm/sync/filter.js.map +0 -1
  140. package/dist/esm/sync/fragments.js +0 -300
  141. package/dist/esm/sync/fragments.js.map +0 -1
  142. package/dist/esm/sync/index.js +0 -1001
  143. package/dist/esm/sync/index.js.map +0 -1
  144. package/dist/esm/sync/transport.js +0 -94
  145. package/dist/esm/sync/transport.js.map +0 -1
  146. package/dist/esm/sync-historical/index.js +0 -590
  147. package/dist/esm/sync-historical/index.js.map +0 -1
  148. package/dist/esm/sync-realtime/bloom.js +0 -75
  149. package/dist/esm/sync-realtime/bloom.js.map +0 -1
  150. package/dist/esm/sync-realtime/index.js +0 -794
  151. package/dist/esm/sync-realtime/index.js.map +0 -1
  152. package/dist/esm/sync-store/encoding.js +0 -157
  153. package/dist/esm/sync-store/encoding.js.map +0 -1
  154. package/dist/esm/sync-store/index.js +0 -727
  155. package/dist/esm/sync-store/index.js.map +0 -1
  156. package/dist/esm/sync-store/migrations.js +0 -1186
  157. package/dist/esm/sync-store/migrations.js.map +0 -1
  158. package/dist/esm/types/db.js +0 -2
  159. package/dist/esm/types/db.js.map +0 -1
  160. package/dist/esm/types/eth.js +0 -2
  161. package/dist/esm/types/eth.js.map +0 -1
  162. package/dist/esm/types/sync.js +0 -2
  163. package/dist/esm/types/sync.js.map +0 -1
  164. package/dist/esm/types/utils.js +0 -2
  165. package/dist/esm/types/utils.js.map +0 -1
  166. package/dist/esm/types/virtual.js +0 -2
  167. package/dist/esm/types/virtual.js.map +0 -1
  168. package/dist/esm/ui/ProgressBar.js +0 -11
  169. package/dist/esm/ui/ProgressBar.js.map +0 -1
  170. package/dist/esm/ui/Table.js +0 -50
  171. package/dist/esm/ui/Table.js.map +0 -1
  172. package/dist/esm/ui/app.js +0 -113
  173. package/dist/esm/ui/app.js.map +0 -1
  174. package/dist/esm/ui/graphiql.html.js +0 -59
  175. package/dist/esm/ui/graphiql.html.js.map +0 -1
  176. package/dist/esm/ui/index.js +0 -21
  177. package/dist/esm/ui/index.js.map +0 -1
  178. package/dist/esm/utils/bigint.js +0 -37
  179. package/dist/esm/utils/bigint.js.map +0 -1
  180. package/dist/esm/utils/chains.js +0 -3
  181. package/dist/esm/utils/chains.js.map +0 -1
  182. package/dist/esm/utils/checkpoint.js +0 -114
  183. package/dist/esm/utils/checkpoint.js.map +0 -1
  184. package/dist/esm/utils/chunk.js +0 -8
  185. package/dist/esm/utils/chunk.js.map +0 -1
  186. package/dist/esm/utils/date.js +0 -27
  187. package/dist/esm/utils/date.js.map +0 -1
  188. package/dist/esm/utils/debug.js +0 -2
  189. package/dist/esm/utils/debug.js.map +0 -1
  190. package/dist/esm/utils/dedupe.js +0 -33
  191. package/dist/esm/utils/dedupe.js.map +0 -1
  192. package/dist/esm/utils/duplicates.js +0 -19
  193. package/dist/esm/utils/duplicates.js.map +0 -1
  194. package/dist/esm/utils/estimate.js +0 -6
  195. package/dist/esm/utils/estimate.js.map +0 -1
  196. package/dist/esm/utils/extend.js +0 -28
  197. package/dist/esm/utils/extend.js.map +0 -1
  198. package/dist/esm/utils/format.js +0 -20
  199. package/dist/esm/utils/format.js.map +0 -1
  200. package/dist/esm/utils/generators.js +0 -77
  201. package/dist/esm/utils/generators.js.map +0 -1
  202. package/dist/esm/utils/hash.js +0 -11
  203. package/dist/esm/utils/hash.js.map +0 -1
  204. package/dist/esm/utils/interval.js +0 -171
  205. package/dist/esm/utils/interval.js.map +0 -1
  206. package/dist/esm/utils/lowercase.js +0 -7
  207. package/dist/esm/utils/lowercase.js.map +0 -1
  208. package/dist/esm/utils/mutex.js +0 -25
  209. package/dist/esm/utils/mutex.js.map +0 -1
  210. package/dist/esm/utils/never.js +0 -4
  211. package/dist/esm/utils/never.js.map +0 -1
  212. package/dist/esm/utils/offset.js +0 -73
  213. package/dist/esm/utils/offset.js.map +0 -1
  214. package/dist/esm/utils/order.js +0 -18
  215. package/dist/esm/utils/order.js.map +0 -1
  216. package/dist/esm/utils/partition.js +0 -37
  217. package/dist/esm/utils/partition.js.map +0 -1
  218. package/dist/esm/utils/pg.js +0 -126
  219. package/dist/esm/utils/pg.js.map +0 -1
  220. package/dist/esm/utils/pglite.js +0 -80
  221. package/dist/esm/utils/pglite.js.map +0 -1
  222. package/dist/esm/utils/port.js +0 -30
  223. package/dist/esm/utils/port.js.map +0 -1
  224. package/dist/esm/utils/print.js +0 -23
  225. package/dist/esm/utils/print.js.map +0 -1
  226. package/dist/esm/utils/promiseWithResolvers.js +0 -13
  227. package/dist/esm/utils/promiseWithResolvers.js.map +0 -1
  228. package/dist/esm/utils/queue.js +0 -145
  229. package/dist/esm/utils/queue.js.map +0 -1
  230. package/dist/esm/utils/range.js +0 -8
  231. package/dist/esm/utils/range.js.map +0 -1
  232. package/dist/esm/utils/requestQueue.js +0 -127
  233. package/dist/esm/utils/requestQueue.js.map +0 -1
  234. package/dist/esm/utils/result.js +0 -10
  235. package/dist/esm/utils/result.js.map +0 -1
  236. package/dist/esm/utils/rpc.js +0 -202
  237. package/dist/esm/utils/rpc.js.map +0 -1
  238. package/dist/esm/utils/serialize.js +0 -23
  239. package/dist/esm/utils/serialize.js.map +0 -1
  240. package/dist/esm/utils/timer.js +0 -17
  241. package/dist/esm/utils/timer.js.map +0 -1
  242. package/dist/esm/utils/wait.js +0 -8
  243. package/dist/esm/utils/wait.js.map +0 -1
  244. package/dist/esm/utils/zipper.js +0 -67
  245. package/dist/esm/utils/zipper.js.map +0 -1
  246. package/dist/types/bin/commands/codegen.d.ts +0 -5
  247. package/dist/types/bin/commands/codegen.d.ts.map +0 -1
  248. package/dist/types/bin/commands/dev.d.ts +0 -5
  249. package/dist/types/bin/commands/dev.d.ts.map +0 -1
  250. package/dist/types/bin/commands/list.d.ts +0 -5
  251. package/dist/types/bin/commands/list.d.ts.map +0 -1
  252. package/dist/types/bin/commands/serve.d.ts +0 -5
  253. package/dist/types/bin/commands/serve.d.ts.map +0 -1
  254. package/dist/types/bin/commands/start.d.ts +0 -5
  255. package/dist/types/bin/commands/start.d.ts.map +0 -1
  256. package/dist/types/bin/ponder.d.ts.map +0 -1
  257. package/dist/types/bin/utils/codegen.d.ts +0 -6
  258. package/dist/types/bin/utils/codegen.d.ts.map +0 -1
  259. package/dist/types/bin/utils/exit.d.ts +0 -9
  260. package/dist/types/bin/utils/exit.d.ts.map +0 -1
  261. package/dist/types/bin/utils/run.d.ts +0 -14
  262. package/dist/types/bin/utils/run.d.ts.map +0 -1
  263. package/dist/types/bin/utils/runServer.d.ts +0 -12
  264. package/dist/types/bin/utils/runServer.d.ts.map +0 -1
  265. package/dist/types/build/configAndIndexingFunctions.d.ts +0 -37
  266. package/dist/types/build/configAndIndexingFunctions.d.ts.map +0 -1
  267. package/dist/types/build/factory.d.ts +0 -10
  268. package/dist/types/build/factory.d.ts.map +0 -1
  269. package/dist/types/build/index.d.ts +0 -70
  270. package/dist/types/build/index.d.ts.map +0 -1
  271. package/dist/types/build/plugin.d.ts +0 -4
  272. package/dist/types/build/plugin.d.ts.map +0 -1
  273. package/dist/types/build/pre.d.ts +0 -35
  274. package/dist/types/build/pre.d.ts.map +0 -1
  275. package/dist/types/build/schema.d.ts +0 -18
  276. package/dist/types/build/schema.d.ts.map +0 -1
  277. package/dist/types/build/stacktrace.d.ts +0 -13
  278. package/dist/types/build/stacktrace.d.ts.map +0 -1
  279. package/dist/types/client/index.d.ts +0 -27
  280. package/dist/types/client/index.d.ts.map +0 -1
  281. package/dist/types/client/validate.d.ts +0 -2
  282. package/dist/types/client/validate.d.ts.map +0 -1
  283. package/dist/types/config/address.d.ts +0 -14
  284. package/dist/types/config/address.d.ts.map +0 -1
  285. package/dist/types/config/eventFilter.d.ts +0 -18
  286. package/dist/types/config/eventFilter.d.ts.map +0 -1
  287. package/dist/types/config/index.d.ts +0 -143
  288. package/dist/types/config/index.d.ts.map +0 -1
  289. package/dist/types/config/networks.d.ts +0 -30
  290. package/dist/types/config/networks.d.ts.map +0 -1
  291. package/dist/types/config/utilityTypes.d.ts +0 -43
  292. package/dist/types/config/utilityTypes.d.ts.map +0 -1
  293. package/dist/types/database/index.d.ts +0 -91
  294. package/dist/types/database/index.d.ts.map +0 -1
  295. package/dist/types/drizzle/bigint.d.ts +0 -25
  296. package/dist/types/drizzle/bigint.d.ts.map +0 -1
  297. package/dist/types/drizzle/hex.d.ts +0 -25
  298. package/dist/types/drizzle/hex.d.ts.map +0 -1
  299. package/dist/types/drizzle/index.d.ts +0 -14
  300. package/dist/types/drizzle/index.d.ts.map +0 -1
  301. package/dist/types/drizzle/kit/index.d.ts +0 -49
  302. package/dist/types/drizzle/kit/index.d.ts.map +0 -1
  303. package/dist/types/drizzle/onchain.d.ts.map +0 -1
  304. package/dist/types/graphql/index.d.ts +0 -14
  305. package/dist/types/graphql/index.d.ts.map +0 -1
  306. package/dist/types/graphql/json.d.ts +0 -3
  307. package/dist/types/graphql/json.d.ts.map +0 -1
  308. package/dist/types/graphql/middleware.d.ts +0 -29
  309. package/dist/types/graphql/middleware.d.ts.map +0 -1
  310. package/dist/types/index.d.ts +0 -18
  311. package/dist/types/index.d.ts.map +0 -1
  312. package/dist/types/indexing/addStackTrace.d.ts +0 -3
  313. package/dist/types/indexing/addStackTrace.d.ts.map +0 -1
  314. package/dist/types/indexing/index.d.ts +0 -575
  315. package/dist/types/indexing/index.d.ts.map +0 -1
  316. package/dist/types/indexing/ponderActions.d.ts +0 -47
  317. package/dist/types/indexing/ponderActions.d.ts.map +0 -1
  318. package/dist/types/indexing/service.d.ts +0 -73
  319. package/dist/types/indexing/service.d.ts.map +0 -1
  320. package/dist/types/indexing-store/historical.d.ts +0 -19
  321. package/dist/types/indexing-store/historical.d.ts.map +0 -1
  322. package/dist/types/indexing-store/index.d.ts +0 -10
  323. package/dist/types/indexing-store/index.d.ts.map +0 -1
  324. package/dist/types/indexing-store/metadata.d.ts +0 -10
  325. package/dist/types/indexing-store/metadata.d.ts.map +0 -1
  326. package/dist/types/indexing-store/realtime.d.ts +0 -10
  327. package/dist/types/indexing-store/realtime.d.ts.map +0 -1
  328. package/dist/types/internal/common.d.ts +0 -13
  329. package/dist/types/internal/common.d.ts.map +0 -1
  330. package/dist/types/internal/errors.d.ts +0 -55
  331. package/dist/types/internal/errors.d.ts.map +0 -1
  332. package/dist/types/internal/logger.d.ts +0 -26
  333. package/dist/types/internal/logger.d.ts.map +0 -1
  334. package/dist/types/internal/metrics.d.ts +0 -77
  335. package/dist/types/internal/metrics.d.ts.map +0 -1
  336. package/dist/types/internal/options.d.ts +0 -59
  337. package/dist/types/internal/options.d.ts.map +0 -1
  338. package/dist/types/internal/shutdown.d.ts +0 -8
  339. package/dist/types/internal/shutdown.d.ts.map +0 -1
  340. package/dist/types/internal/telemetry.d.ts +0 -43
  341. package/dist/types/internal/telemetry.d.ts.map +0 -1
  342. package/dist/types/internal/types.d.ts +0 -328
  343. package/dist/types/internal/types.d.ts.map +0 -1
  344. package/dist/types/server/error.d.ts +0 -5
  345. package/dist/types/server/error.d.ts.map +0 -1
  346. package/dist/types/server/index.d.ts +0 -13
  347. package/dist/types/server/index.d.ts.map +0 -1
  348. package/dist/types/sync/abi.d.ts +0 -54
  349. package/dist/types/sync/abi.d.ts.map +0 -1
  350. package/dist/types/sync/events.d.ts +0 -24
  351. package/dist/types/sync/events.d.ts.map +0 -1
  352. package/dist/types/sync/filter.d.ts +0 -71
  353. package/dist/types/sync/filter.d.ts.map +0 -1
  354. package/dist/types/sync/fragments.d.ts +0 -21
  355. package/dist/types/sync/fragments.d.ts.map +0 -1
  356. package/dist/types/sync/index.d.ts +0 -112
  357. package/dist/types/sync/index.d.ts.map +0 -1
  358. package/dist/types/sync/transport.d.ts +0 -8
  359. package/dist/types/sync/transport.d.ts.map +0 -1
  360. package/dist/types/sync-historical/index.d.ts +0 -28
  361. package/dist/types/sync-historical/index.d.ts.map +0 -1
  362. package/dist/types/sync-realtime/bloom.d.ts +0 -19
  363. package/dist/types/sync-realtime/bloom.d.ts.map +0 -1
  364. package/dist/types/sync-realtime/index.d.ts +0 -48
  365. package/dist/types/sync-realtime/index.d.ts.map +0 -1
  366. package/dist/types/sync-store/encoding.d.ts +0 -151
  367. package/dist/types/sync-store/encoding.d.ts.map +0 -1
  368. package/dist/types/sync-store/index.d.ts +0 -104
  369. package/dist/types/sync-store/index.d.ts.map +0 -1
  370. package/dist/types/sync-store/migrations.d.ts +0 -13
  371. package/dist/types/sync-store/migrations.d.ts.map +0 -1
  372. package/dist/types/types/db.d.ts +0 -213
  373. package/dist/types/types/db.d.ts.map +0 -1
  374. package/dist/types/types/eth.d.ts +0 -196
  375. package/dist/types/types/eth.d.ts.map +0 -1
  376. package/dist/types/types/sync.d.ts +0 -15
  377. package/dist/types/types/sync.d.ts.map +0 -1
  378. package/dist/types/types/utils.d.ts +0 -22
  379. package/dist/types/types/utils.d.ts.map +0 -1
  380. package/dist/types/types/virtual.d.ts +0 -95
  381. package/dist/types/types/virtual.d.ts.map +0 -1
  382. package/dist/types/ui/ProgressBar.d.ts +0 -7
  383. package/dist/types/ui/ProgressBar.d.ts.map +0 -1
  384. package/dist/types/ui/Table.d.ts +0 -24
  385. package/dist/types/ui/Table.d.ts.map +0 -1
  386. package/dist/types/ui/app.d.ts +0 -14
  387. package/dist/types/ui/app.d.ts.map +0 -1
  388. package/dist/types/ui/graphiql.html.d.ts +0 -2
  389. package/dist/types/ui/graphiql.html.d.ts.map +0 -1
  390. package/dist/types/ui/index.d.ts +0 -5
  391. package/dist/types/ui/index.d.ts.map +0 -1
  392. package/dist/types/utils/bigint.d.ts +0 -15
  393. package/dist/types/utils/bigint.d.ts.map +0 -1
  394. package/dist/types/utils/chains.d.ts +0 -3
  395. package/dist/types/utils/chains.d.ts.map +0 -1
  396. package/dist/types/utils/checkpoint.d.ts +0 -40
  397. package/dist/types/utils/checkpoint.d.ts.map +0 -1
  398. package/dist/types/utils/chunk.d.ts +0 -2
  399. package/dist/types/utils/chunk.d.ts.map +0 -1
  400. package/dist/types/utils/date.d.ts +0 -7
  401. package/dist/types/utils/date.d.ts.map +0 -1
  402. package/dist/types/utils/debug.d.ts +0 -105
  403. package/dist/types/utils/debug.d.ts.map +0 -1
  404. package/dist/types/utils/dedupe.d.ts +0 -20
  405. package/dist/types/utils/dedupe.d.ts.map +0 -1
  406. package/dist/types/utils/duplicates.d.ts +0 -7
  407. package/dist/types/utils/duplicates.d.ts.map +0 -1
  408. package/dist/types/utils/estimate.d.ts +0 -11
  409. package/dist/types/utils/estimate.d.ts.map +0 -1
  410. package/dist/types/utils/extend.d.ts +0 -13
  411. package/dist/types/utils/extend.d.ts.map +0 -1
  412. package/dist/types/utils/format.d.ts +0 -3
  413. package/dist/types/utils/format.d.ts.map +0 -1
  414. package/dist/types/utils/generators.d.ts +0 -23
  415. package/dist/types/utils/generators.d.ts.map +0 -1
  416. package/dist/types/utils/hash.d.ts +0 -11
  417. package/dist/types/utils/hash.d.ts.map +0 -1
  418. package/dist/types/utils/interval.d.ts +0 -53
  419. package/dist/types/utils/interval.d.ts.map +0 -1
  420. package/dist/types/utils/lowercase.d.ts +0 -5
  421. package/dist/types/utils/lowercase.d.ts.map +0 -1
  422. package/dist/types/utils/mutex.d.ts +0 -8
  423. package/dist/types/utils/mutex.d.ts.map +0 -1
  424. package/dist/types/utils/never.d.ts +0 -2
  425. package/dist/types/utils/never.d.ts.map +0 -1
  426. package/dist/types/utils/offset.d.ts +0 -3
  427. package/dist/types/utils/offset.d.ts.map +0 -1
  428. package/dist/types/utils/order.d.ts +0 -2
  429. package/dist/types/utils/order.d.ts.map +0 -1
  430. package/dist/types/utils/partition.d.ts +0 -22
  431. package/dist/types/utils/partition.d.ts.map +0 -1
  432. package/dist/types/utils/pg.d.ts +0 -5
  433. package/dist/types/utils/pg.d.ts.map +0 -1
  434. package/dist/types/utils/pglite.d.ts +0 -25
  435. package/dist/types/utils/pglite.d.ts.map +0 -1
  436. package/dist/types/utils/port.d.ts +0 -5
  437. package/dist/types/utils/port.d.ts.map +0 -1
  438. package/dist/types/utils/print.d.ts +0 -2
  439. package/dist/types/utils/print.d.ts.map +0 -1
  440. package/dist/types/utils/promiseWithResolvers.d.ts +0 -10
  441. package/dist/types/utils/promiseWithResolvers.d.ts.map +0 -1
  442. package/dist/types/utils/queue.d.ts +0 -33
  443. package/dist/types/utils/queue.d.ts.map +0 -1
  444. package/dist/types/utils/range.d.ts +0 -8
  445. package/dist/types/utils/range.d.ts.map +0 -1
  446. package/dist/types/utils/requestQueue.d.ts +0 -21
  447. package/dist/types/utils/requestQueue.d.ts.map +0 -1
  448. package/dist/types/utils/result.d.ts +0 -17
  449. package/dist/types/utils/result.d.ts.map +0 -1
  450. package/dist/types/utils/rpc.d.ts +0 -57
  451. package/dist/types/utils/rpc.d.ts.map +0 -1
  452. package/dist/types/utils/serialize.d.ts +0 -19
  453. package/dist/types/utils/serialize.d.ts.map +0 -1
  454. package/dist/types/utils/timer.d.ts +0 -11
  455. package/dist/types/utils/timer.d.ts.map +0 -1
  456. package/dist/types/utils/wait.d.ts +0 -6
  457. package/dist/types/utils/wait.d.ts.map +0 -1
  458. package/dist/types/utils/zipper.d.ts +0 -36
  459. package/dist/types/utils/zipper.d.ts.map +0 -1
  460. package/src/utils/dedupe.ts +0 -40
  461. package/src/utils/promiseWithResolvers.ts +0 -20
  462. package/src/utils/queue.ts +0 -250
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config/index.ts","../src/config/address.ts","../src/index.ts","../src/client/index.ts","../src/client/validate.ts","../src/ui/graphiql.html.ts","../src/graphql/middleware.ts","../src/graphql/index.ts","../src/graphql/json.ts"],"sourcesContent":["import type { Prettify } from \"@/types/utils.js\";\nimport type { Abi } from \"abitype\";\nimport type { Narrow, Transport } from \"viem\";\nimport type { AddressConfig } from \"./address.js\";\nimport type { GetEventFilter } from \"./eventFilter.js\";\n\nexport type Config = {\n database?: DatabaseConfig;\n ordering?: \"omnichain\" | \"multichain\";\n networks: { [networkName: string]: NetworkConfig<unknown> };\n contracts: { [contractName: string]: GetContract };\n accounts: { [accountName: string]: AccountConfig<unknown> };\n blocks: {\n [sourceName: string]: GetBlockFilter<unknown>;\n };\n};\n\nexport type CreateConfigReturnType<networks, contracts, accounts, blocks> = {\n database?: DatabaseConfig;\n ordering?: \"omnichain\" | \"multichain\";\n networks: networks;\n contracts: contracts;\n accounts: accounts;\n blocks: blocks;\n};\n\nexport const createConfig = <\n const networks,\n const contracts = {},\n const accounts = {},\n const blocks = {},\n>(config: {\n database?: DatabaseConfig;\n ordering?: \"omnichain\" | \"multichain\";\n // TODO: add jsdoc to these properties.\n networks: NetworksConfig<Narrow<networks>>;\n contracts?: ContractsConfig<networks, Narrow<contracts>>;\n accounts?: AccountsConfig<networks, Narrow<accounts>>;\n blocks?: BlockFiltersConfig<networks, blocks>;\n}): CreateConfigReturnType<networks, contracts, accounts, blocks> =>\n config as Prettify<\n CreateConfigReturnType<networks, contracts, accounts, blocks>\n >;\n\n// database\n\ntype DatabaseConfig =\n | {\n kind: \"pglite\";\n /** Directory path to use for PGlite database files. Default: `\".ponder/pglite\"`. */\n directory?: string;\n }\n | {\n kind: \"postgres\";\n /** Postgres database connection string. Default: `DATABASE_PRIVATE_URL` > `DATABASE_URL` environment variable. */\n connectionString?: string;\n /** Postgres pool configuration passed to `node-postgres`. */\n poolConfig?: {\n /** Maximum number of clients in the pool. Default: `30`. */\n max?: number;\n };\n };\n\n// base\n\ntype BlockConfig = {\n /** Block number at which to start indexing events (inclusive). If `undefined`, events will be processed from block 0. Default: `undefined`. */\n startBlock?: number | \"latest\";\n /** Block number at which to stop indexing events (inclusive). If `undefined`, events will be processed in real-time. Default: `undefined`. */\n endBlock?: number | \"latest\";\n};\n\ntype TransactionReceiptConfig = {\n includeTransactionReceipts?: boolean;\n};\n\ntype FunctionCallConfig = {\n /*\n * Enable call trace indexing for this contract.\n *\n * - Docs: https://ponder.sh/docs/indexing/call-traces\n */\n includeCallTraces?: boolean;\n};\n\n// network\n\ntype NetworkConfig<network> = {\n /** Chain ID of the network. */\n chainId: network extends { chainId: infer chainId extends number }\n ? chainId | number\n : number;\n /** A viem `http`, `webSocket`, or `fallback` [Transport](https://viem.sh/docs/clients/transports/http.html).\n *\n * __To avoid rate limiting, include a custom RPC URL.__ Usage:\n *\n * ```ts\n * import { http } from \"viem\";\n *\n * const network = {\n * name: \"mainnet\",\n * chainId: 1,\n * transport: http(\"https://eth-mainnet.g.alchemy.com/v2/...\"),\n * }\n * ```\n */\n transport: Transport;\n /** Polling interval (in ms). Default: `1_000`. */\n pollingInterval?: number;\n /** Maximum number of RPC requests per second. Default: `50`. */\n maxRequestsPerSecond?: number;\n /** Disable RPC request caching. Default: `false`. */\n disableCache?: boolean;\n};\n\ntype NetworksConfig<networks> = {} extends networks\n ? {}\n : {\n [networkName in keyof networks]: NetworkConfig<networks[networkName]>;\n };\n\n// contracts\n\ntype AbiConfig<abi extends Abi | readonly unknown[]> = {\n /** Contract application byte interface. */\n abi: abi;\n};\n\ntype GetContractNetwork<\n networks,\n abi extends Abi,\n ///\n allNetworkNames extends string = [keyof networks] extends [never]\n ? string\n : keyof networks & string,\n> = {\n /**\n * Network that this contract is deployed to. Must match a network name in `networks`.\n * Any filter information overrides the values in the higher level \"contracts\" property.\n */\n network:\n | allNetworkNames\n | {\n [name in allNetworkNames]?: Prettify<\n AddressConfig &\n GetEventFilter<abi> &\n TransactionReceiptConfig &\n FunctionCallConfig &\n BlockConfig\n >;\n };\n};\n\ntype ContractConfig<networks, abi extends Abi> = Prettify<\n AbiConfig<abi> &\n GetContractNetwork<networks, abi> &\n AddressConfig &\n GetEventFilter<abi> &\n TransactionReceiptConfig &\n FunctionCallConfig &\n BlockConfig\n>;\n\ntype GetContract<networks = unknown, contract = unknown> = contract extends {\n abi: infer abi extends Abi;\n}\n ? // 1. Contract has a valid abi\n ContractConfig<networks, abi>\n : // 2. Contract has an invalid abi\n ContractConfig<networks, Abi>;\n\ntype ContractsConfig<networks, contracts> = {} extends contracts\n ? // contracts empty, return empty\n {}\n : {\n [name in keyof contracts]: GetContract<networks, contracts[name]>;\n };\n\n// accounts\n\ntype GetAccountNetwork<\n networks,\n ///\n allNetworkNames extends string = [keyof networks] extends [never]\n ? string\n : keyof networks & string,\n> = {\n /**\n * Network that this account is deployed to. Must match a network name in `networks`.\n * Any filter information overrides the values in the higher level \"accounts\" property.\n */\n network:\n | allNetworkNames\n | {\n [name in allNetworkNames]?: Prettify<\n AddressConfig & TransactionReceiptConfig & BlockConfig\n >;\n };\n};\n\ntype AccountConfig<networks> = Prettify<\n GetAccountNetwork<networks> &\n Required<AddressConfig> &\n TransactionReceiptConfig &\n BlockConfig\n>;\n\ntype AccountsConfig<networks, accounts> = {} extends accounts\n ? {}\n : {\n [name in keyof accounts]: AccountConfig<networks>;\n };\n\n// blocks\n\ntype BlockFilterConfig = {\n /** Block number at which to start indexing events (inclusive). If `undefined`, events will be processed from block 0. Default: `undefined`. */\n startBlock?: number | \"latest\";\n /** Block number at which to stop indexing events (inclusive). If `undefined`, events will be processed in real-time. Default: `undefined`. */\n endBlock?: number | \"latest\";\n interval?: number;\n};\n\ntype GetBlockFilter<\n networks,\n ///\n allNetworkNames extends string = [keyof networks] extends [never]\n ? string\n : keyof networks & string,\n> = BlockFilterConfig & {\n network:\n | allNetworkNames\n | {\n [name in allNetworkNames]?: BlockFilterConfig;\n };\n};\n\ntype BlockFiltersConfig<\n networks = unknown,\n blocks = unknown,\n> = {} extends blocks\n ? {}\n : {\n [name in keyof blocks]: GetBlockFilter<networks>;\n };\n","import type { AbiEvent } from \"viem\";\n\nexport type Factory<event extends AbiEvent = AbiEvent> = {\n /** Address of the factory contract that creates this contract. */\n address: `0x${string}` | readonly `0x${string}`[];\n /** ABI event that announces the creation of a new instance of this contract. */\n event: event;\n /** Name of the factory event parameter that contains the new child contract address. */\n parameter: Exclude<event[\"inputs\"][number][\"name\"], undefined>;\n};\n\nexport const factory = <event extends AbiEvent>(factory: Factory<event>) =>\n factory;\n\nexport type AddressConfig = {\n address?: `0x${string}` | readonly `0x${string}`[] | Factory;\n};\n","export { createConfig } from \"@/config/index.js\";\nexport { factory } from \"@/config/address.js\";\nexport type {\n Block,\n Log,\n Transaction,\n TransactionReceipt,\n} from \"@/types/eth.js\";\nexport type { Virtual } from \"@/types/virtual.js\";\nexport {\n type MergeAbis,\n type ReplaceBigInts,\n mergeAbis,\n loadBalance,\n rateLimit,\n replaceBigInts,\n} from \"@ponder/utils\";\n\nimport type { Config } from \"@/config/index.js\";\nimport type { Prettify } from \"./types/utils.js\";\n\nexport type ContractConfig = Prettify<Config[\"contracts\"][string]>;\nexport type NetworkConfig = Prettify<Config[\"networks\"][string]>;\nexport type BlockConfig = Prettify<Config[\"blocks\"][string]>;\nexport type DatabaseConfig = Prettify<Config[\"database\"]>;\n\nexport {\n onchainTable,\n onchainEnum,\n primaryKey,\n hex,\n bigint,\n} from \"@/drizzle/onchain.js\";\n\nexport type { ReadonlyDrizzle } from \"@/types/db.js\";\n\nexport { client } from \"@/client/index.js\";\n\nexport { graphql } from \"@/graphql/middleware.js\";\n\nexport {\n sql,\n eq,\n gt,\n gte,\n lt,\n lte,\n ne,\n isNull,\n isNotNull,\n inArray,\n notInArray,\n exists,\n notExists,\n between,\n notBetween,\n like,\n notLike,\n ilike,\n notIlike,\n not,\n asc,\n desc,\n and,\n or,\n count,\n countDistinct,\n avg,\n avgDistinct,\n sum,\n sumDistinct,\n max,\n min,\n relations,\n} from \"drizzle-orm\";\n\nexport {\n bigint as int8,\n boolean,\n char,\n cidr,\n date,\n doublePrecision,\n inet,\n integer,\n interval,\n json,\n jsonb,\n line,\n macaddr,\n macaddr8,\n numeric,\n point,\n real,\n smallint,\n text,\n time,\n timestamp,\n uuid,\n varchar,\n index,\n uniqueIndex,\n alias,\n foreignKey,\n union,\n unionAll,\n intersect,\n intersectAll,\n except,\n exceptAll,\n} from \"drizzle-orm/pg-core\";\n","import type { Schema } from \"@/internal/types.js\";\nimport type { ReadonlyDrizzle } from \"@/types/db.js\";\nimport { promiseWithResolvers } from \"@ponder/common\";\nimport type { QueryWithTypings } from \"drizzle-orm\";\nimport { type PgSession, pgTable } from \"drizzle-orm/pg-core\";\nimport { createMiddleware } from \"hono/factory\";\nimport { streamSSE } from \"hono/streaming\";\nimport superjson from \"superjson\";\nimport { validateQuery } from \"./validate.js\";\n\nconst status = pgTable(\"_ponder_status\", (t) => ({\n chainId: t.bigint({ mode: \"number\" }).primaryKey(),\n blockNumber: t.bigint({ mode: \"number\" }),\n blockTimestamp: t.bigint({ mode: \"number\" }),\n ready: t.boolean().notNull(),\n}));\n\n/**\n * Middleware for `@ponder/client`.\n *\n * @param db - Drizzle database instance\n * @param schema - Ponder schema\n *\n * @example\n * ```ts\n * import { db } from \"ponder:api\";\n * import schema from \"ponder:schema\";\n * import { Hono } from \"hono\";\n * import { client } from \"ponder\";\n *\n * const app = new Hono();\n *\n * app.use(\"/sql/*\", client({ db, schema }));\n *\n * export default app;\n * ```\n */\nexport const client = ({\n db,\n}: { db: ReadonlyDrizzle<Schema>; schema: Schema }) => {\n // @ts-ignore\n const session: PgSession = db._.session;\n const driver = globalThis.PONDER_DATABASE.driver;\n let statusResolver = promiseWithResolvers<void>();\n\n const channel = `${globalThis.PONDER_NAMESPACE_BUILD}_status_channel`;\n\n if (\"instance\" in driver) {\n driver.instance.query(`LISTEN \"${channel}\"`).then(() => {\n driver.instance.onNotification(async () => {\n statusResolver.resolve();\n statusResolver = promiseWithResolvers();\n });\n });\n } else {\n const pool = driver.internal;\n\n const connectAndListen = async () => {\n driver.listen = await pool.connect();\n\n await driver.listen.query(`LISTEN \"${channel}\"`);\n\n driver.listen.on(\"error\", async () => {\n driver.listen?.release();\n await connectAndListen();\n });\n\n driver.listen.on(\"notification\", () => {\n statusResolver.resolve();\n statusResolver = promiseWithResolvers();\n });\n };\n\n connectAndListen();\n }\n\n return createMiddleware(async (c, next) => {\n if (c.req.path === \"/sql/db\") {\n const queryString = c.req.query(\"sql\");\n if (queryString === undefined) {\n return c.text('Missing \"sql\" query parameter', 400);\n }\n const query = superjson.parse(queryString) as QueryWithTypings;\n\n if (\"instance\" in driver) {\n try {\n await validateQuery(query.sql);\n const result = await session\n .prepareQuery(query, undefined, undefined, false)\n .execute();\n return c.json(result as object);\n } catch (error) {\n (error as Error).stack = undefined;\n return c.text((error as Error).message, 500);\n }\n } else {\n const client = await driver.internal.connect();\n\n try {\n await validateQuery(query.sql);\n await client.query(\"BEGIN READ ONLY\");\n const result = await session\n .prepareQuery(query, undefined, undefined, false)\n .execute();\n return c.json(result as object);\n } catch (error) {\n (error as Error).stack = undefined;\n return c.text((error as Error).message, 500);\n } finally {\n await client.query(\"ROLLBACK\");\n client.release();\n }\n }\n }\n\n if (c.req.path === \"/sql/live\") {\n c.header(\"Content-Type\", \"text/event-stream\");\n c.header(\"Cache-Control\", \"no-cache\");\n c.header(\"Connection\", \"keep-alive\");\n\n return streamSSE(c, async (stream) => {\n while (stream.closed === false && stream.aborted === false) {\n try {\n await stream.writeSSE({ data: \"\" });\n } catch {}\n await statusResolver.promise;\n }\n });\n }\n\n if (c.req.path === \"/sql/status\") {\n const statusResult = await db.select().from(status);\n return c.json(statusResult);\n }\n\n return next();\n });\n};\n","import type { Node, RawStmt } from \"@pgsql/types\";\n\ntype ValidatorNode<\n node extends Node extends infer T ? (T extends T ? keyof T : never) : never,\n> = {\n node: node | (string & {});\n children: (node: Extract<Node, { [key in node]: unknown }>[node]) => Node[];\n validate?: (node: Extract<Node, { [key in node]: unknown }>[node]) => void;\n};\n\nconst getNodeType = (node: Node) => Object.keys(node)[0]!;\n\nconst ALLOW_CACHE = new Map<string, boolean>();\n\nexport const validateQuery = async (sql: string) => {\n // @ts-ignore\n const Parser = await import(/* webpackIgnore: true */ \"pg-query-emscripten\");\n const crypto = await import(/* webpackIgnore: true */ \"node:crypto\");\n\n const hash = crypto\n .createHash(\"sha256\")\n .update(sql)\n .digest(\"hex\")\n .slice(0, 10);\n\n if (ALLOW_CACHE.has(hash)) {\n const result = ALLOW_CACHE.get(hash)!;\n\n ALLOW_CACHE.delete(hash);\n ALLOW_CACHE.set(hash, result);\n\n if (result) return;\n throw new Error(\"Invalid query\");\n } else {\n ALLOW_CACHE.set(hash, false);\n }\n\n const { parse } = await Parser.default();\n const parseResult = parse(sql) as {\n parse_tree: { stmts: RawStmt[] };\n error: string | null;\n };\n\n if (parseResult.error !== null) {\n throw new Error(parseResult.error);\n }\n\n if (parseResult.parse_tree.stmts.length === 0) {\n throw new Error(\"Invalid query\");\n }\n\n if (parseResult.parse_tree.stmts.length > 1) {\n throw new Error(\"Multiple statements not supported\");\n }\n\n const stmt = parseResult.parse_tree.stmts[0]!;\n\n if (stmt.stmt === undefined) {\n throw new Error(\"Invalid query\");\n }\n\n const validate = (node: Node) => {\n if (ALLOW_LIST.has(getNodeType(node)) === false) {\n throw new Error(`${getNodeType(node)} not supported`);\n }\n\n // @ts-ignore\n ALLOW_LIST.get(getNodeType(node))!.validate?.(node[getNodeType(node)]);\n\n for (const child of ALLOW_LIST.get(getNodeType(node))!.children(\n // @ts-ignore\n node[getNodeType(node)],\n )) {\n validate(child);\n }\n };\n\n validate(stmt.stmt);\n\n ALLOW_CACHE.set(hash, true);\n if (ALLOW_CACHE.size > 1_000_000) {\n const firstKey = ALLOW_CACHE.keys().next().value;\n if (firstKey) ALLOW_CACHE.delete(firstKey);\n }\n};\n\n// https://github.com/launchql/pgsql-parser/blob/f1df82ed4358e47c682e007bc5aa306b58f25514/packages/types/src/types.ts#L38\n\nconst INTEGER_VALIDATOR: ValidatorNode<\"Integer\"> = {\n node: \"Integer\",\n children: () => [],\n};\n\nconst FLOAT_VALIDATOR: ValidatorNode<\"Float\"> = {\n node: \"Float\",\n children: () => [],\n};\n\nconst BOOLEAN_VALIDATOR: ValidatorNode<\"Boolean\"> = {\n node: \"Boolean\",\n children: () => [],\n};\n\nconst STRING_VALIDATOR: ValidatorNode<\"String\"> = {\n node: \"String\",\n children: () => [],\n};\n\nconst BIT_STRING_VALIDATOR: ValidatorNode<\"BitString\"> = {\n node: \"BitString\",\n children: () => [],\n};\n\nconst LIST_VALIDATOR: ValidatorNode<\"List\"> = {\n node: \"List\",\n children: (node) => [...(node.items ?? [])],\n};\n\nconst OID_LIST_VALIDATOR: ValidatorNode<\"OidList\"> = {\n node: \"OidList\",\n children: (node) => [...(node.items ?? [])],\n};\n\nconst INT_LIST_VALIDATOR: ValidatorNode<\"IntList\"> = {\n node: \"IntList\",\n children: (node) => [...(node.items ?? [])],\n};\n\nconst A_CONST_VALIDATOR: ValidatorNode<\"A_Const\"> = {\n node: \"A_Const\",\n children: () => [],\n};\n\nconst ALIAS_VALIDATOR: ValidatorNode<\"Alias\"> = {\n node: \"Alias\",\n children: (node) => [...(node.colnames ?? [])],\n};\n\nconst RANGE_VAR_VALIDATOR: ValidatorNode<\"RangeVar\"> = {\n node: \"RangeVar\",\n children: (node) => [...(node.alias ? [{ Alias: node.alias }] : [])],\n validate: (node) => {\n if (node.schemaname) {\n throw new Error(\"Schema name not supported\");\n }\n\n if (node.relname && SYSTEM_TABLES.has(node.relname)) {\n throw new Error(\"System tables not supported\");\n }\n },\n};\n\nconst VAR_VALIDATOR: ValidatorNode<\"Var\"> = {\n node: \"Var\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst PARAM_VALIDATOR: ValidatorNode<\"Param\"> = {\n node: \"Param\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst AGGREF_VALIDATOR: ValidatorNode<\"Aggref\"> = {\n node: \"Aggref\",\n children: (node) => [\n ...(node.aggargtypes ?? []),\n ...(node.aggdirectargs ?? []),\n ...(node.args ?? []),\n ...(node.aggorder ?? []),\n ...(node.aggdistinct ?? []),\n ...(node.aggfilter ? [node.aggfilter] : []),\n ],\n};\n\nconst GROUPING_FUNC_VALIDATOR: ValidatorNode<\"GroupingFunc\"> = {\n node: \"GroupingFunc\",\n children: (node) => [...(node.args ?? []), ...(node.refs ?? [])],\n};\n\nconst WINDOW_FUNC_VALIDATOR: ValidatorNode<\"WindowFunc\"> = {\n node: \"WindowFunc\",\n children: (node) => [\n ...(node.args ?? []),\n ...(node.aggfilter ? [node.aggfilter] : []),\n ],\n};\n\nconst NAMED_ARG_EXPR_VALIDATOR: ValidatorNode<\"NamedArgExpr\"> = {\n node: \"NamedArgExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst OP_EXPR_VALIDATOR: ValidatorNode<\"OpExpr\"> = {\n node: \"OpExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst DISTINCT_EXPR_VALIDATOR: ValidatorNode<\"DistinctExpr\"> = {\n node: \"DistinctExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst NULL_IF_EXPR_VALIDATOR: ValidatorNode<\"NullIfExpr\"> = {\n node: \"NullIfExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst SCALAR_ARRAY_OP_EXPR_VALIDATOR: ValidatorNode<\"ScalarArrayOpExpr\"> = {\n node: \"ScalarArrayOpExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst BOOL_EXPR_VALIDATOR: ValidatorNode<\"BoolExpr\"> = {\n node: \"BoolExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst FIELD_SELECT_VALIDATOR: ValidatorNode<\"FieldSelect\"> = {\n node: \"FieldSelect\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst RELABEL_TYPE_VALIDATOR: ValidatorNode<\"RelabelType\"> = {\n node: \"RelabelType\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst ARRAY_COERCE_EXPR_VALIDATOR: ValidatorNode<\"ArrayCoerceExpr\"> = {\n node: \"ArrayCoerceExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ...(node.elemexpr ? [node.elemexpr] : []),\n ],\n};\n\nconst CONVERT_ROWTYPE_EXPR_VALIDATOR: ValidatorNode<\"ConvertRowtypeExpr\"> = {\n node: \"ConvertRowtypeExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst COLLATE_EXPR_VALIDATOR: ValidatorNode<\"CollateExpr\"> = {\n node: \"CollateExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst CASE_EXPR_VALIDATOR: ValidatorNode<\"CaseExpr\"> = {\n node: \"CaseExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ...(node.args ?? []),\n ...(node.defresult ? [node.defresult] : []),\n ],\n};\n\nconst CASE_WHEN_VALIDATOR: ValidatorNode<\"CaseWhen\"> = {\n node: \"CaseWhen\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.expr ? [node.expr] : []),\n ...(node.result ? [node.result] : []),\n ],\n};\n\nconst CASE_TEST_EXPR_VALIDATOR: ValidatorNode<\"CaseTestExpr\"> = {\n node: \"CaseTestExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst ARRAY_EXPR_VALIDATOR: ValidatorNode<\"ArrayExpr\"> = {\n node: \"ArrayExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.elements ?? []),\n ],\n};\n\nconst ROW_EXPR_VALIDATOR: ValidatorNode<\"RowExpr\"> = {\n node: \"RowExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.args ?? []),\n ...(node.colnames ?? []),\n ],\n};\n\nconst ROW_COMPARE_EXPR_VALIDATOR: ValidatorNode<\"RowCompareExpr\"> = {\n node: \"RowCompareExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.opnos ?? []),\n ...(node.opfamilies ?? []),\n ...(node.inputcollids ?? []),\n ...(node.largs ?? []),\n ...(node.rargs ?? []),\n ],\n};\n\nconst COALESC_EXPR_VALIDATOR: ValidatorNode<\"CoalesceExpr\"> = {\n node: \"CoalesceExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst MIN_MAX_EXPR_VALIDATOR: ValidatorNode<\"MinMaxExpr\"> = {\n node: \"MinMaxExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : []), ...(node.args ?? [])],\n};\n\nconst SQL_VALUE_FUNCTION_VALIDATOR: ValidatorNode<\"SQLValueFunction\"> = {\n node: \"SQLValueFunction\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst JSON_FORMAT_VALIDATOR: ValidatorNode<\"JsonFormat\"> = {\n node: \"JsonFormat\",\n children: () => [],\n};\n\nconst JSON_RETURNING_VALIDATOR: ValidatorNode<\"JsonReturning\"> = {\n node: \"JsonReturning\",\n children: (node) => [...(node.format ? [{ JsonFormat: node.format }] : [])],\n};\n\nconst JSON_VALUE_EXPR_VALIDATOR: ValidatorNode<\"JsonValueExpr\"> = {\n node: \"JsonValueExpr\",\n children: (node) => [\n ...(node.raw_expr ? [node.raw_expr] : []),\n ...(node.formatted_expr ? [node.formatted_expr] : []),\n ...(node.format ? [{ JsonFormat: node.format }] : []),\n ],\n};\n\nconst JSON_CONSTRUCTOR_EXPR_VALIDATOR: ValidatorNode<\"JsonConstructorExpr\"> = {\n node: \"JsonConstructorExpr\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.args ?? []),\n ...(node.func ? [node.func] : []),\n ...(node.coercion ? [node.coercion] : []),\n ...(node.returning ? [{ JsonReturning: node.returning }] : []),\n ],\n};\n\nconst JSON_IS_PREDICATE_VALIDATOR: ValidatorNode<\"JsonIsPredicate\"> = {\n node: \"JsonIsPredicate\",\n children: (node) => [\n ...(node.expr ? [node.expr] : []),\n ...(node.format ? [{ JsonFormat: node.format }] : []),\n ],\n};\n\nconst NULL_TEST_VALIDATOR: ValidatorNode<\"NullTest\"> = {\n node: \"NullTest\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst BOOLEAN_TEST_VALIDATOR: ValidatorNode<\"BooleanTest\"> = {\n node: \"BooleanTest\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst COERCE_TO_DOMAIN_VALIDATOR: ValidatorNode<\"CoerceToDomain\"> = {\n node: \"CoerceToDomain\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.arg ? [node.arg] : []),\n ],\n};\n\nconst COERCE_TO_DOMAIN_VALUE_VALIDATOR: ValidatorNode<\"CoerceToDomainValue\"> = {\n node: \"CoerceToDomainValue\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst CURRENT_OF_EXPR_VALIDATOR: ValidatorNode<\"CurrentOfExpr\"> = {\n node: \"CurrentOfExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst NEXT_VALUE_EXPR_VALIDATOR: ValidatorNode<\"NextValueExpr\"> = {\n node: \"NextValueExpr\",\n children: (node) => [...(node.xpr ? [node.xpr] : [])],\n};\n\nconst INFERENCE_ELEM_VALIDATOR: ValidatorNode<\"InferenceElem\"> = {\n node: \"InferenceElem\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.expr ? [node.expr] : []),\n ],\n};\n\nconst TARGET_ENTRY_VALIDATOR: ValidatorNode<\"TargetEntry\"> = {\n node: \"TargetEntry\",\n children: (node) => [\n ...(node.xpr ? [node.xpr] : []),\n ...(node.expr ? [node.expr] : []),\n ],\n};\n\nconst RANGE_TBL_REF_VALIDATOR: ValidatorNode<\"RangeTblRef\"> = {\n node: \"RangeTblRef\",\n children: () => [],\n};\n\nconst JOIN_EXPR_VALIDATOR: ValidatorNode<\"JoinExpr\"> = {\n node: \"JoinExpr\",\n children: (node) => [\n ...(node.larg ? [node.larg] : []),\n ...(node.rarg ? [node.rarg] : []),\n ...(node.usingClause ?? []),\n ...(node.join_using_alias ? [{ Alias: node.join_using_alias }] : []),\n ...(node.quals ? [node.quals] : []),\n ...(node.alias ? [{ Alias: node.alias }] : []),\n ],\n};\n\nconst FROM_EXPR_VALIDATOR: ValidatorNode<\"FromExpr\"> = {\n node: \"FromExpr\",\n children: (node) => [\n ...(node.fromlist ?? []),\n ...(node.quals ? [node.quals] : []),\n ],\n};\n\nconst ON_CONFLICT_EXPR_VALIDATOR: ValidatorNode<\"OnConflictExpr\"> = {\n node: \"OnConflictExpr\",\n children: (node) => [\n ...(node.arbiterElems ?? []),\n ...(node.arbiterWhere ? [node.arbiterWhere] : []),\n ...(node.onConflictSet ?? []),\n ...(node.onConflictWhere ? [node.onConflictWhere] : []),\n ...(node.exclRelTlist ?? []),\n ],\n};\n\nconst TYPE_NAME_VALIDATOR: ValidatorNode<\"TypeName\"> = {\n node: \"TypeName\",\n children: (node) => [\n ...(node.names ?? []),\n ...(node.typmods ?? []),\n ...(node.arrayBounds ?? []),\n ],\n};\n\nconst COLUMN_REF_VALIDATOR: ValidatorNode<\"ColumnRef\"> = {\n node: \"ColumnRef\",\n children: (node) => [...(node.fields ?? [])],\n};\n\nconst PARAM_REF_VALIDATOR: ValidatorNode<\"ParamRef\"> = {\n node: \"ParamRef\",\n children: () => [],\n};\n\nconst A_EXPR_VALIDATOR: ValidatorNode<\"A_Expr\"> = {\n node: \"A_Expr\",\n children: (node) => [\n ...(node.name ?? []),\n ...(node.lexpr ? [node.lexpr] : []),\n ...(node.rexpr ? [node.rexpr] : []),\n ],\n};\n\nconst TYPE_CAST_VALIDATOR: ValidatorNode<\"TypeCast\"> = {\n node: \"TypeCast\",\n children: (node) => [\n ...(node.arg ? [node.arg] : []),\n ...(node.typeName ? [{ TypeName: node.typeName }] : []),\n ],\n};\n\nconst COLLATE_CLAUSE_VALIDATOR: ValidatorNode<\"CollateClause\"> = {\n node: \"CollateClause\",\n children: (node) => [\n ...(node.arg ? [node.arg] : []),\n ...(node.collname ?? []),\n ],\n};\n\nconst ALLOWED_FUNCTIONS = new Set([\n \"count\",\n \"sum\",\n \"avg\",\n \"min\",\n \"max\",\n \"lower\",\n \"upper\",\n \"length\",\n \"trim\",\n \"replace\",\n \"substring\",\n \"cast\",\n \"concat\",\n \"now\",\n \"current_timestamp\",\n \"current_date\",\n \"current_time\",\n \"coalesce\",\n \"json_agg\",\n \"json_object\",\n \"json_array\",\n \"json_object_agg\",\n \"json_array_agg\",\n]);\n\nconst FUNC_CALL_VALIDATOR: ValidatorNode<\"FuncCall\"> = {\n node: \"FuncCall\",\n children: (node) => [\n ...(node.funcname ?? []),\n ...(node.args ?? []),\n ...(node.agg_order ?? []),\n ...(node.agg_filter ? [node.agg_filter] : []),\n ...(node.over ? [{ WindowDef: node.over }] : []),\n ],\n validate: (node) => {\n if (\n node.funcname?.every(\n (name) =>\n getNodeType(name) === \"String\" &&\n // @ts-ignore\n ALLOWED_FUNCTIONS.has(name.String.sval),\n )\n ) {\n return;\n }\n throw new Error(\"Function call not supported\");\n },\n};\n\nconst A_STAR_VALIDATOR: ValidatorNode<\"A_Star\"> = {\n node: \"A_Star\",\n children: () => [],\n};\n\nconst A_INDICES_VALIDATOR: ValidatorNode<\"A_Indices\"> = {\n node: \"A_Indices\",\n children: (node) => [\n ...(node.lidx ? [node.lidx] : []),\n ...(node.uidx ? [node.uidx] : []),\n ],\n};\n\nconst A_INDIRECTION_VALIDATOR: ValidatorNode<\"A_Indirection\"> = {\n node: \"A_Indirection\",\n children: (node) => [\n ...(node.arg ? [node.arg] : []),\n ...(node.indirection ?? []),\n ],\n};\n\nconst A_ARRAY_EXPR_VALIDATOR: ValidatorNode<\"A_ArrayExpr\"> = {\n node: \"A_ArrayExpr\",\n children: (node) => [...(node.elements ?? [])],\n};\n\nconst RES_TARGET_VALIDATOR: ValidatorNode<\"ResTarget\"> = {\n node: \"ResTarget\",\n children: (node) => [\n ...(node.indirection ?? []),\n ...(node.val ? [node.val] : []),\n ],\n};\n\nconst MULTI_ASSIGN_REF_VALIDATOR: ValidatorNode<\"MultiAssignRef\"> = {\n node: \"MultiAssignRef\",\n children: (node) => [...(node.source ? [node.source] : [])],\n};\n\nconst SORT_BY_VALIDATOR: ValidatorNode<\"SortBy\"> = {\n node: \"SortBy\",\n children: (node) => [\n ...(node.node ? [node.node] : []),\n ...(node.useOp ?? []),\n ],\n};\n\nconst RANGE_SUBSELECT_VALIDATOR: ValidatorNode<\"RangeSubselect\"> = {\n node: \"RangeSubselect\",\n children: (node) => [\n ...(node.subquery ? [node.subquery] : []),\n ...(node.alias ? [{ Alias: node.alias }] : []),\n ],\n};\n\nconst SORT_GROUP_CLAUSE_VALIDATOR: ValidatorNode<\"SortGroupClause\"> = {\n node: \"SortGroupClause\",\n children: () => [],\n};\n\nconst GROUPING_SET_VALIDATOR: ValidatorNode<\"GroupingSet\"> = {\n node: \"GroupingSet\",\n children: (node) => [...(node.content ?? [])],\n};\n\nconst WITH_CLAUSE_VALIDATOR: ValidatorNode<\"WithClause\"> = {\n node: \"WithClause\",\n children: (node) => [...(node.ctes ?? [])],\n validate: (node) => {\n if (node.recursive) {\n throw new Error(\"Recursive CTEs not supported\");\n }\n },\n};\n\nconst COMMON_TABLE_EXPR_VALIDATOR: ValidatorNode<\"CommonTableExpr\"> = {\n node: \"CommonTableExpr\",\n children: (node) => [\n ...(node.aliascolnames ?? []),\n ...(node.ctequery ? [node.ctequery] : []),\n ...(node.search_clause ? [{ CTESearchClause: node.search_clause }] : []),\n ...(node.cycle_clause ? [{ CTECycleClause: node.cycle_clause }] : []),\n ...(node.ctecolnames ?? []),\n ...(node.ctecoltypes ?? []),\n ...(node.ctecoltypmods ?? []),\n ...(node.ctecolcollations ?? []),\n ],\n validate: (node) => {\n if (node.ctematerialized === \"CTEMaterializeAlways\" || node.cterecursive) {\n throw new Error(\"Invalid CTE\");\n }\n },\n};\n\nconst JSON_OUTPUT_VALIDATOR: ValidatorNode<\"JsonOutput\"> = {\n node: \"JsonOutput\",\n children: (node) => [\n ...(node.returning ? [{ JsonReturning: node.returning }] : []),\n ],\n};\n\nconst JSON_KEY_VALUE_VALIDATOR: ValidatorNode<\"JsonKeyValue\"> = {\n node: \"JsonKeyValue\",\n children: (node) => [\n ...(node.key ? [node.key] : []),\n ...(node.value ? [{ JsonValueExpr: node.value }] : []),\n ],\n};\n\nconst JSON_OBJECT_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonObjectConstructor\"> =\n {\n node: \"JsonObjectConstructor\",\n children: (node) => [\n ...(node.exprs ?? []),\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ],\n };\n\nconst JSON_ARRAY_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonArrayConstructor\"> =\n {\n node: \"JsonArrayConstructor\",\n children: (node) => [\n ...(node.exprs ?? []),\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ],\n };\n\nconst JSON_ARRAY_QUERY_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonArrayQueryConstructor\"> =\n {\n node: \"JsonArrayQueryConstructor\",\n children: (node) => [\n ...(node.query ? [node.query] : []),\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ...(node.format ? [{ JsonFormat: node.format }] : []),\n ],\n };\n\nconst JSON_AGG_CONSTRUCTOR_VALIDATOR: ValidatorNode<\"JsonAggConstructor\"> = {\n node: \"JsonAggConstructor\",\n children: (node) => [\n ...(node.output ? [{ JsonOutput: node.output }] : []),\n ...(node.agg_filter ? [node.agg_filter] : []),\n ...(node.agg_order ?? []),\n ...(node.over ? [{ WindowDef: node.over }] : []),\n ],\n};\n\nconst JSON_OBJECT_AGG_VALIDATOR: ValidatorNode<\"JsonObjectAgg\"> = {\n node: \"JsonObjectAgg\",\n children: (node) => [\n ...(node.constructor ? [{ JsonAggConstructor: node.constructor }] : []),\n ...(node.arg ? [{ JsonKeyValue: node.arg }] : []),\n ],\n};\n\nconst JSON_ARRAY_AGG_VALIDATOR: ValidatorNode<\"JsonArrayAgg\"> = {\n node: \"JsonArrayAgg\",\n children: (node) => [\n ...(node.constructor ? [{ JsonAggConstructor: node.constructor }] : []),\n ...(node.arg ? [{ JsonValueExpr: node.arg }] : []),\n ],\n};\n\nconst SELECT_STMT_VALIDATOR: ValidatorNode<\"SelectStmt\"> = {\n node: \"SelectStmt\",\n children: (node) => [\n ...(node.distinctClause ?? []),\n ...(node.intoClause ? [{ IntoClause: node.intoClause }] : []),\n ...(node.targetList ?? []),\n ...(node.fromClause ?? []),\n ...(node.whereClause ? [node.whereClause] : []),\n ...(node.groupClause ?? []),\n ...(node.havingClause ? [node.havingClause] : []),\n ...(node.windowClause ?? []),\n ...(node.valuesLists ?? []),\n ...(node.sortClause ?? []),\n ...(node.limitOffset ? [node.limitOffset] : []),\n ...(node.limitCount ? [node.limitCount] : []),\n ...(node.lockingClause ?? []),\n ...(node.withClause ? [{ WithClause: node.withClause }] : []),\n ...(node.larg ? [{ SelectStmt: node.larg }] : []),\n ...(node.rarg ? [{ SelectStmt: node.rarg }] : []),\n ],\n validate: (node) => {\n if (node.lockingClause) {\n throw new Error(\"Invalid query\");\n }\n },\n};\n\nconst COMMENT_STMT_VALIDATOR: ValidatorNode<\"CommentStmt\"> = {\n node: \"CommentStmt\",\n children: (node) => [...(node.object ? [node.object] : [])],\n};\n\n/** Validation rules for allowed Postgres SQL AST nodes. */\nconst ALLOW_LIST = new Map(\n [\n INTEGER_VALIDATOR,\n FLOAT_VALIDATOR,\n BOOLEAN_VALIDATOR,\n STRING_VALIDATOR,\n BIT_STRING_VALIDATOR,\n LIST_VALIDATOR,\n OID_LIST_VALIDATOR,\n INT_LIST_VALIDATOR,\n A_CONST_VALIDATOR,\n ALIAS_VALIDATOR,\n RANGE_VAR_VALIDATOR,\n VAR_VALIDATOR,\n PARAM_VALIDATOR,\n AGGREF_VALIDATOR,\n GROUPING_FUNC_VALIDATOR,\n WINDOW_FUNC_VALIDATOR,\n NAMED_ARG_EXPR_VALIDATOR,\n OP_EXPR_VALIDATOR,\n DISTINCT_EXPR_VALIDATOR,\n NULL_IF_EXPR_VALIDATOR,\n SCALAR_ARRAY_OP_EXPR_VALIDATOR,\n BOOL_EXPR_VALIDATOR,\n FIELD_SELECT_VALIDATOR,\n RELABEL_TYPE_VALIDATOR,\n ARRAY_COERCE_EXPR_VALIDATOR,\n CONVERT_ROWTYPE_EXPR_VALIDATOR,\n COLLATE_EXPR_VALIDATOR,\n CASE_EXPR_VALIDATOR,\n CASE_WHEN_VALIDATOR,\n CASE_TEST_EXPR_VALIDATOR,\n ARRAY_EXPR_VALIDATOR,\n ROW_EXPR_VALIDATOR,\n ROW_COMPARE_EXPR_VALIDATOR,\n COALESC_EXPR_VALIDATOR,\n MIN_MAX_EXPR_VALIDATOR,\n SQL_VALUE_FUNCTION_VALIDATOR,\n JSON_FORMAT_VALIDATOR,\n JSON_RETURNING_VALIDATOR,\n JSON_VALUE_EXPR_VALIDATOR,\n JSON_CONSTRUCTOR_EXPR_VALIDATOR,\n JSON_IS_PREDICATE_VALIDATOR,\n NULL_TEST_VALIDATOR,\n BOOLEAN_TEST_VALIDATOR,\n COERCE_TO_DOMAIN_VALIDATOR,\n COERCE_TO_DOMAIN_VALUE_VALIDATOR,\n CURRENT_OF_EXPR_VALIDATOR,\n NEXT_VALUE_EXPR_VALIDATOR,\n INFERENCE_ELEM_VALIDATOR,\n TARGET_ENTRY_VALIDATOR,\n RANGE_TBL_REF_VALIDATOR,\n JOIN_EXPR_VALIDATOR,\n FROM_EXPR_VALIDATOR,\n ON_CONFLICT_EXPR_VALIDATOR,\n TYPE_NAME_VALIDATOR,\n COLUMN_REF_VALIDATOR,\n PARAM_REF_VALIDATOR,\n A_EXPR_VALIDATOR,\n TYPE_CAST_VALIDATOR,\n COLLATE_CLAUSE_VALIDATOR,\n FUNC_CALL_VALIDATOR,\n A_STAR_VALIDATOR,\n A_INDICES_VALIDATOR,\n A_INDIRECTION_VALIDATOR,\n A_ARRAY_EXPR_VALIDATOR,\n RES_TARGET_VALIDATOR,\n MULTI_ASSIGN_REF_VALIDATOR,\n SORT_BY_VALIDATOR,\n RANGE_SUBSELECT_VALIDATOR,\n SORT_GROUP_CLAUSE_VALIDATOR,\n GROUPING_SET_VALIDATOR,\n WITH_CLAUSE_VALIDATOR,\n COMMON_TABLE_EXPR_VALIDATOR,\n JSON_OUTPUT_VALIDATOR,\n JSON_KEY_VALUE_VALIDATOR,\n JSON_OBJECT_CONSTRUCTOR_VALIDATOR,\n JSON_ARRAY_CONSTRUCTOR_VALIDATOR,\n JSON_ARRAY_QUERY_CONSTRUCTOR_VALIDATOR,\n JSON_AGG_CONSTRUCTOR_VALIDATOR,\n JSON_OBJECT_AGG_VALIDATOR,\n JSON_ARRAY_AGG_VALIDATOR,\n SELECT_STMT_VALIDATOR,\n COMMENT_STMT_VALIDATOR,\n ].map((node) => [node.node, node]),\n);\n\n// NOT_ALLOW_LIST\n// ParseResult\n// ScanResult\n// TableFunc\n// IntoClause\n// SubscriptingRef\n// FuncExpr\n// SubLink\n// SubPlan\n// AlternativeSubPlan\n// FieldStore\n// CoerceViaIO\n// XmlExpr\n// SetToDefault\n// Query\n// RoleSpec\n// WindowDef\n// RangeFunction\n// RangeTableFunc\n// RangeTableFuncCol\n// RangeTableSample\n// ColumnDef\n// TableLikeClause\n// IndexElem\n// DefElem\n// LockingClause\n// XmlSerialize\n// PartitionElem\n// PartitionSpec\n// PartitionBounSpec\n// PartitionRangeDatum\n// PartitionCmd\n// RangeTableEntry\n// RTEPermissionInfo\n// RangeTblFunction\n// TableSampleClause\n// WithCheckOption\n// WindowClause\n// RowMarkClause\n// InferClausej\n// OnConflictClause\n// CTESearchClause\n// CTECycleClause\n// MergeWhenClause\n// MergeAction\n// TriggerTransition\n// RawStmt\n// InsertStmt\n// DeleteStmt\n// UpdateStmt\n// MergeStmt\n// SetOperationStmt\n// ReturnStmt\n// PLAssignStmt\n// CreateSchemaStmt\n// AlterTableStmt\n// ReplicaIdentityStmt\n// AlterTableCmd\n// AlterCollationStmt\n// AlterDomainStmt\n// GrantStmt\n// ObjectWithArgs\n// AccessPriv\n// GrantRoleStmt\n// AlterDefaultPrivilegesStmt\n// CopyStmt\n// VariableSetStmt\n// VariableShowStmt\n// CreateStmt\n// Constraint\n// CreateTableSpaceStmt\n// DropTableSpaceStmt\n// AlterTableSpaceOptionsStmt\n// AlterTableMoveAllStmt\n// CreateExtensionStmt\n// AlterExtensionStmt\n// AlterExtensionContentsStmt\n// CreateFdwStmt\n// AlterFdwStmt\n// CreateForeignServerStmt\n// AlterForeignServerStmt\n// CreateForeignTableStmt\n// CreateUserMappingStmt\n// AlterUserMappingStmt\n// DropUserMappingStmt\n// ImportForeignSchemaStmt\n// CreatePolicyStmt\n// AlterPolicyStmt\n// CreateAmStmt\n// CreateTrigStmt\n// CreateEventTrigStmt\n// AlterEventTrigStmt\n// CreatePLangStmt\n// CreateRoleStmt\n// AlterRoleStmt\n// AlterRoleSetStmt\n// DropRoleStmt\n// CreateSeqStmt\n// AlterSeqStmt\n// DefineStmt\n// CreateDomainStmt\n// CreateOpClassStmt\n// CreateOpClassItem\n// CreateOpFamilyStmt\n// AlterOpFamilyStmt\n// DropStmt\n// TruncateStmt\n// SecLabelStmt\n// DeclareCursorStmt\n// ClosePortalStmt\n// FetchStmt\n// IndexStmt\n// CreateStatsStmt\n// StatsElem\n// AlterStatsStmt\n// CreateFunctionStmt\n// FunctionParameter\n// AlterFunctionStmt\n// DoStmt\n// InlineCodeBlock\n// CallStmt\n// CallContext\n// RenameStmt\n// AlterObjectDependsStmt\n// AlterObjectSchemaStmt\n// AlterOwnerStmt\n// AlterOperatorStmt\n// AlterTypeStmt\n// RuleStmt\n// NotifyStmt\n// ListenStmt\n// UnlistenStmt\n// TransactionStmt\n// CompositeTypeStmt\n// CreateEnumStmt\n// CreateRangeStmt\n// AlterEnumStmt\n// ViewStmt\n// LoadStmt\n// CreatedbStmt\n// AlterDatabaseStmt\n// AlterDatabaseRefreshCollStmt\n// AlterDatabaseSetStmt\n// DropdbStmt\n// AlterSystemStmt\n// ClusterStmt\n// VacuumStmt\n// VacuumRelation\n// ExplainStmt\n// CreateTableAsStmt\n// RefreshMatViewStmt\n// CheckPointStmt\n// DiscardStmt\n// LockStmt\n// ConstraintsSetStmt\n// ReindexStmt\n// CreateConversionStmt\n// CreateCastStmt\n// CreateTransformStmt\n// PrepareStmt\n// ExecuteStmt\n// DeallocateStmt\n// DropOwnedStmt\n// ReassignOwnedStmt\n// AlterTSDictionaryStmt\n// AlterTSConfigurationStmt\n// PublicationTable\n// PublicationObjSpec\n// CreatePublicationStmt\n// AlterPublicationStmt\n// CreateSubscriptionStmt\n// AlterSubscriptionStmt\n// DropSubscriptionStmt\n// ScanToken\n\nconst SYSTEM_TABLES = new Set([\n \"pg_statistic\",\n \"pg_type\",\n \"pg_foreign_table\",\n \"pg_proc_oid_index\",\n \"pg_proc_proname_args_nsp_index\",\n \"pg_type_oid_index\",\n \"pg_type_typname_nsp_index\",\n \"pg_attribute_relid_attnam_index\",\n \"pg_attribute_relid_attnum_index\",\n \"pg_class_oid_index\",\n \"pg_class_relname_nsp_index\",\n \"pg_class_tblspc_relfilenode_index\",\n \"pg_attrdef_adrelid_adnum_index\",\n \"pg_attrdef_oid_index\",\n \"pg_constraint_conname_nsp_index\",\n \"pg_constraint_conrelid_contypid_conname_index\",\n \"pg_constraint_contypid_index\",\n \"pg_constraint_oid_index\",\n \"pg_constraint_conparentid_index\",\n \"pg_inherits_relid_seqno_index\",\n \"pg_inherits_parent_index\",\n \"pg_index_indrelid_index\",\n \"pg_index_indexrelid_index\",\n \"pg_operator_oid_index\",\n \"pg_operator_oprname_l_r_n_index\",\n \"pg_opfamily_am_name_nsp_index\",\n \"pg_opfamily_oid_index\",\n \"pg_opclass_am_name_nsp_index\",\n \"pg_opclass_oid_index\",\n \"pg_am_name_index\",\n \"pg_am_oid_index\",\n \"pg_amop_fam_strat_index\",\n \"pg_amop_opr_fam_index\",\n \"pg_amop_oid_index\",\n \"pg_amproc_fam_proc_index\",\n \"pg_amproc_oid_index\",\n \"pg_language_name_index\",\n \"pg_language_oid_index\",\n \"pg_largeobject_metadata_oid_index\",\n \"pg_largeobject_loid_pn_index\",\n \"pg_aggregate_fnoid_index\",\n \"pg_statistic_relid_att_inh_index\",\n \"pg_statistic_ext_oid_index\",\n \"pg_statistic_ext_name_index\",\n \"pg_statistic_ext_relid_index\",\n \"pg_statistic_ext_data_stxoid_inh_index\",\n \"pg_rewrite_oid_index\",\n \"pg_rewrite_rel_rulename_index\",\n \"pg_trigger_tgconstraint_index\",\n \"pg_trigger_tgrelid_tgname_index\",\n \"pg_trigger_oid_index\",\n \"pg_event_trigger_evtname_index\",\n \"pg_event_trigger_oid_index\",\n \"pg_description_o_c_o_index\",\n \"pg_cast_oid_index\",\n \"pg_cast_source_target_index\",\n \"pg_enum_oid_index\",\n \"pg_enum_typid_label_index\",\n \"pg_enum_typid_sortorder_index\",\n \"pg_namespace_nspname_index\",\n \"pg_namespace_oid_index\",\n \"pg_conversion_default_index\",\n \"pg_conversion_name_nsp_index\",\n \"pg_conversion_oid_index\",\n \"pg_depend_depender_index\",\n \"pg_depend_reference_index\",\n \"pg_database_datname_index\",\n \"pg_database_oid_index\",\n \"pg_db_role_setting_databaseid_rol_index\",\n \"pg_tablespace_oid_index\",\n \"pg_tablespace_spcname_index\",\n \"pg_authid_rolname_index\",\n \"pg_authid_oid_index\",\n \"pg_auth_members_oid_index\",\n \"pg_auth_members_role_member_index\",\n \"pg_auth_members_member_role_index\",\n \"pg_auth_members_grantor_index\",\n \"pg_shdepend_depender_index\",\n \"pg_shdepend_reference_index\",\n \"pg_shdescription_o_c_index\",\n \"pg_ts_config_cfgname_index\",\n \"pg_ts_config_oid_index\",\n \"pg_ts_config_map_index\",\n \"pg_ts_dict_dictname_index\",\n \"pg_ts_dict_oid_index\",\n \"pg_ts_parser_prsname_index\",\n \"pg_ts_parser_oid_index\",\n \"pg_ts_template_tmplname_index\",\n \"pg_ts_template_oid_index\",\n \"pg_extension_oid_index\",\n \"pg_extension_name_index\",\n \"pg_foreign_data_wrapper_oid_index\",\n \"pg_foreign_data_wrapper_name_index\",\n \"pg_foreign_server_oid_index\",\n \"pg_foreign_server_name_index\",\n \"pg_user_mapping_oid_index\",\n \"pg_user_mapping_user_server_index\",\n \"pg_foreign_table_relid_index\",\n \"pg_policy_oid_index\",\n \"pg_policy_polrelid_polname_index\",\n \"pg_replication_origin_roiident_index\",\n \"pg_replication_origin_roname_index\",\n \"pg_default_acl_role_nsp_obj_index\",\n \"pg_default_acl_oid_index\",\n \"pg_init_privs_o_c_o_index\",\n \"pg_seclabel_object_index\",\n \"pg_shseclabel_object_index\",\n \"pg_collation_name_enc_nsp_index\",\n \"pg_collation_oid_index\",\n \"pg_parameter_acl_parname_index\",\n \"pg_parameter_acl_oid_index\",\n \"pg_partitioned_table_partrelid_index\",\n \"pg_range_rngtypid_index\",\n \"pg_range_rngmultitypid_index\",\n \"pg_transform_oid_index\",\n \"pg_transform_type_lang_index\",\n \"pg_sequence_seqrelid_index\",\n \"pg_publication_oid_index\",\n \"pg_publication_pubname_index\",\n \"pg_publication_namespace_oid_index\",\n \"pg_publication_namespace_pnnspid_pnpubid_index\",\n \"pg_publication_rel_oid_index\",\n \"pg_publication_rel_prrelid_prpubid_index\",\n \"pg_publication_rel_prpubid_index\",\n \"pg_subscription_oid_index\",\n \"pg_subscription_subname_index\",\n \"pg_subscription_rel_srrelid_srsubid_index\",\n \"pg_authid\",\n \"pg_shadow\",\n \"pg_roles\",\n \"pg_statistic_ext_data\",\n \"pg_hba_file_rules\",\n \"pg_settings\",\n \"pg_file_settings\",\n \"pg_backend_memory_contexts\",\n \"pg_ident_file_mappings\",\n \"pg_config\",\n \"pg_shmem_allocations\",\n \"pg_tables\",\n \"pg_user_mapping\",\n \"pg_replication_origin_status\",\n \"pg_subscription\",\n \"pg_attribute\",\n \"pg_proc\",\n \"pg_class\",\n \"pg_attrdef\",\n \"pg_constraint\",\n \"pg_inherits\",\n \"pg_index\",\n \"pg_operator\",\n \"pg_statio_all_sequences\",\n \"pg_opfamily\",\n \"pg_opclass\",\n \"pg_am\",\n \"pg_amop\",\n \"pg_amproc\",\n \"pg_language\",\n \"pg_largeobject_metadata\",\n \"pg_aggregate\",\n \"pg_statistic_ext\",\n \"pg_rewrite\",\n \"pg_trigger\",\n \"pg_event_trigger\",\n \"pg_description\",\n \"pg_cast\",\n \"pg_enum\",\n \"pg_namespace\",\n \"pg_conversion\",\n \"pg_depend\",\n \"pg_database\",\n \"pg_db_role_setting\",\n \"pg_tablespace\",\n \"pg_auth_members\",\n \"pg_shdepend\",\n \"pg_shdescription\",\n \"pg_ts_config\",\n \"pg_ts_config_map\",\n \"pg_ts_dict\",\n \"pg_ts_parser\",\n \"pg_ts_template\",\n \"pg_extension\",\n \"pg_foreign_data_wrapper\",\n \"pg_foreign_server\",\n \"pg_policy\",\n \"pg_replication_origin\",\n \"pg_default_acl\",\n \"pg_init_privs\",\n \"pg_seclabel\",\n \"pg_shseclabel\",\n \"pg_collation\",\n \"pg_parameter_acl\",\n \"pg_partitioned_table\",\n \"pg_range\",\n \"pg_transform\",\n \"pg_sequence\",\n \"pg_publication\",\n \"pg_publication_namespace\",\n \"pg_publication_rel\",\n \"pg_subscription_rel\",\n \"pg_group\",\n \"pg_user\",\n \"pg_policies\",\n \"pg_rules\",\n \"pg_views\",\n \"pg_matviews\",\n \"pg_indexes\",\n \"pg_sequences\",\n \"pg_stats\",\n \"pg_stats_ext\",\n \"pg_stats_ext_exprs\",\n \"pg_publication_tables\",\n \"pg_locks\",\n \"pg_cursors\",\n \"pg_available_extensions\",\n \"pg_available_extension_versions\",\n \"pg_prepared_xacts\",\n \"pg_prepared_statements\",\n \"pg_seclabels\",\n \"pg_timezone_abbrevs\",\n \"pg_timezone_names\",\n \"pg_stat_all_tables\",\n \"pg_stat_xact_all_tables\",\n \"pg_stat_xact_user_tables\",\n \"pg_stat_sys_tables\",\n \"pg_stat_xact_sys_tables\",\n \"pg_stat_user_tables\",\n \"pg_statio_all_tables\",\n \"pg_statio_sys_tables\",\n \"pg_statio_user_tables\",\n \"pg_stat_all_indexes\",\n \"pg_stat_sys_indexes\",\n \"pg_stat_user_indexes\",\n \"pg_statio_all_indexes\",\n \"pg_statio_sys_indexes\",\n \"pg_statio_user_indexes\",\n \"pg_statio_sys_sequences\",\n \"pg_statio_user_sequences\",\n \"pg_stat_activity\",\n \"pg_stat_replication\",\n \"pg_stat_slru\",\n \"pg_stat_wal_receiver\",\n \"pg_stat_recovery_prefetch\",\n \"pg_stat_subscription\",\n \"pg_stat_ssl\",\n \"pg_stat_gssapi\",\n \"pg_replication_slots\",\n \"pg_stat_replication_slots\",\n \"pg_stat_database\",\n \"pg_stat_database_conflicts\",\n \"pg_stat_user_functions\",\n \"pg_stat_xact_user_functions\",\n \"pg_stat_archiver\",\n \"pg_stat_bgwriter\",\n \"pg_stat_io\",\n \"pg_stat_wal\",\n \"pg_stat_progress_analyze\",\n \"pg_stat_progress_vacuum\",\n \"pg_stat_progress_cluster\",\n \"pg_stat_progress_create_index\",\n \"pg_stat_progress_basebackup\",\n \"pg_stat_progress_copy\",\n \"pg_user_mappings\",\n \"pg_stat_subscription_stats\",\n \"pg_largeobject\",\n]);\n","// https://github.com/graphql/graphiql/blob/main/examples/graphiql-cdn/index.html\n\nexport const graphiQLHtml = (path: string) => `<!--\n * Copyright (c) 2021 GraphQL Contributors\n * All rights reserved.\n *\n * This source code is licensed under the license found in the\n * LICENSE file in the root directory of this source tree.\n-->\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <title>Ponder Playground</title>\n <style>\n body {\n height: 100%;\n margin: 0;\n width: 100%;\n overflow: hidden;\n }\n #graphiql {\n height: 100vh;\n }\n *::-webkit-scrollbar {\n height: 0.3rem;\n width: 0.5rem;\n }\n *::-webkit-scrollbar-track {\n -ms-overflow-style: none;\n overflow: -moz-scrollbars-none;\n }\n *::-webkit-scrollbar-thumb {\n -ms-overflow-style: none;\n overflow: -moz-scrollbars-none;\n }\n </style>\n <link rel=\"stylesheet\" href=\"https://unpkg.com/graphiql@3.7.2/graphiql.min.css\" />\n <link rel=\"stylesheet\" href=\"https://unpkg.com/@graphiql/plugin-explorer@3.2.3/dist/style.css\" />\n </head>\n <body>\n <div id=\"graphiql\">Loading...</div>\n <script crossorigin src=\"https://unpkg.com/react@18.3.1/umd/react.development.js\"></script>1\n <script crossorigin src=\"https://unpkg.com/react-dom@18.3.1/umd/react-dom.development.js\"></script>\n <script src=\"https://unpkg.com/graphiql@3.7.2/graphiql.min.js\" crossorigin=\"anonymous\"></script>\n <script src=\"https://unpkg.com/@graphiql/plugin-explorer@3.2.3/dist/index.umd.js\" crossorigin=\"anonymous\"></script>\n <script>\n const fetcher = GraphiQL.createFetcher({ url: \"${path}\" });\n const explorerPlugin = GraphiQLPluginExplorer.explorerPlugin();\n const root = ReactDOM.createRoot(document.getElementById(\"graphiql\"));\n root.render(\n React.createElement(GraphiQL, {\n fetcher,\n plugins: [explorerPlugin],\n defaultEditorToolsVisibility: false,\n })\n );\n </script>\n </body>\n</html>`;\n","import { getMetadataStore } from \"@/indexing-store/metadata.js\";\nimport type { Schema } from \"@/internal/types.js\";\nimport type { ReadonlyDrizzle } from \"@/types/db.js\";\nimport { graphiQLHtml } from \"@/ui/graphiql.html.js\";\nimport { maxAliasesPlugin } from \"@escape.tech/graphql-armor-max-aliases\";\nimport { maxDepthPlugin } from \"@escape.tech/graphql-armor-max-depth\";\nimport { maxTokensPlugin } from \"@escape.tech/graphql-armor-max-tokens\";\nimport { type GraphQLSchema, printSchema } from \"graphql\";\nimport { createYoga } from \"graphql-yoga\";\nimport { createMiddleware } from \"hono/factory\";\nimport { buildDataLoaderCache, buildGraphQLSchema } from \"./index.js\";\n\n/**\n * Middleware for GraphQL with an interactive web view.\n *\n * - Docs: https://ponder.sh/docs/query/api-functions#register-graphql-middleware\n *\n * @example\n * import { db } from \"ponder:api\";\n * import schema from \"ponder:schema\";\n * import { graphql } from \"@/index.js\";\n * import { Hono } from \"hono\";\n *\n * const app = new Hono();\n *\n * app.use(\"/graphql\", graphql({ db, schema }));\n *\n * export default app;\n *\n */\nexport const graphql = (\n { db, schema }: { db: ReadonlyDrizzle<Schema>; schema: Schema },\n {\n maxOperationTokens = 1000,\n maxOperationDepth = 100,\n maxOperationAliases = 30,\n }: {\n maxOperationTokens?: number;\n maxOperationDepth?: number;\n maxOperationAliases?: number;\n } = {\n // Default limits are from Apollo:\n // https://www.apollographql.com/blog/prevent-graph-misuse-with-operation-size-and-complexity-limit\n maxOperationTokens: 1000,\n maxOperationDepth: 100,\n maxOperationAliases: 30,\n },\n) => {\n const graphqlSchema = buildGraphQLSchema({ schema });\n\n generateSchema({ graphqlSchema }).catch(() => {});\n\n const metadataStore = getMetadataStore({\n database: globalThis.PONDER_DATABASE,\n });\n\n const yoga = createYoga({\n graphqlEndpoint: \"*\", // Disable built-in route validation, use Hono routing instead\n schema: graphqlSchema,\n context: () => {\n const getDataLoader = buildDataLoaderCache({ drizzle: db });\n\n return { drizzle: db, metadataStore, getDataLoader };\n },\n maskedErrors: process.env.NODE_ENV === \"production\",\n logging: false,\n graphiql: false,\n parserAndValidationCache: false,\n plugins: [\n maxTokensPlugin({ n: maxOperationTokens }),\n maxDepthPlugin({ n: maxOperationDepth, ignoreIntrospection: false }),\n maxAliasesPlugin({ n: maxOperationAliases, allowList: [] }),\n ],\n });\n\n return createMiddleware(async (c) => {\n if (c.req.method === \"GET\") {\n return c.html(graphiQLHtml(c.req.path));\n }\n\n const response = await yoga.handle(c.req.raw);\n // TODO: Figure out why Yoga is returning 500 status codes for GraphQL errors.\n // @ts-expect-error\n response.status = 200;\n // @ts-expect-error\n response.statusText = \"OK\";\n\n return response;\n });\n};\n\nasync function generateSchema({\n graphqlSchema,\n}: { graphqlSchema: GraphQLSchema }) {\n const fs = await import(/* webpackIgnore: true */ \"node:fs\");\n const path = await import(/* webpackIgnore: true */ \"node:path\");\n\n fs.mkdirSync(path.join(process.cwd(), \"generated\"), { recursive: true });\n fs.writeFileSync(\n path.join(process.cwd(), \"generated\", \"schema.graphql\"),\n printSchema(graphqlSchema),\n \"utf-8\",\n );\n\n // common.logger.debug({\n // service: \"codegen\",\n // msg: \"Wrote new file at generated/schema.graphql\",\n // });\n}\n","import type { OnchainTable } from \"@/drizzle/onchain.js\";\nimport type { MetadataStore } from \"@/indexing-store/metadata.js\";\nimport type { Schema } from \"@/internal/types.js\";\nimport type { Drizzle, ReadonlyDrizzle } from \"@/types/db.js\";\nimport { never } from \"@/utils/never.js\";\nimport { deserialize, serialize } from \"@/utils/serialize.js\";\nimport DataLoader from \"dataloader\";\nimport {\n type Column,\n Many,\n One,\n type SQL,\n type TableRelationalConfig,\n and,\n arrayContained,\n arrayContains,\n asc,\n count,\n createTableRelationsHelpers,\n desc,\n eq,\n extractTablesRelationalConfig,\n getTableColumns,\n gt,\n gte,\n inArray,\n is,\n like,\n lt,\n lte,\n ne,\n not,\n notInArray,\n notLike,\n or,\n} from \"drizzle-orm\";\nimport {\n type PgEnum,\n PgEnumColumn,\n PgInteger,\n PgSerial,\n isPgEnum,\n} from \"drizzle-orm/pg-core\";\nimport {\n GraphQLBoolean,\n GraphQLEnumType,\n type GraphQLFieldConfig,\n type GraphQLFieldConfigMap,\n GraphQLFloat,\n type GraphQLInputFieldConfigMap,\n GraphQLInputObjectType,\n type GraphQLInputType,\n GraphQLInt,\n GraphQLList,\n GraphQLNonNull,\n GraphQLObjectType,\n type GraphQLOutputType,\n type GraphQLResolveInfo,\n GraphQLScalarType,\n GraphQLSchema,\n GraphQLString,\n} from \"graphql\";\nimport { GraphQLJSON } from \"./json.js\";\n\ntype Parent = Record<string, any>;\ntype Context = {\n getDataLoader: ReturnType<typeof buildDataLoaderCache>;\n metadataStore: MetadataStore;\n drizzle: Drizzle<{ [key: string]: OnchainTable }>;\n};\n\ntype PluralArgs = {\n where?: { [key: string]: number | string };\n after?: string;\n before?: string;\n limit?: number;\n orderBy?: string;\n orderDirection?: \"asc\" | \"desc\";\n};\n\nconst DEFAULT_LIMIT = 50 as const;\nconst MAX_LIMIT = 1000 as const;\n\nexport function buildGraphQLSchema({\n schema,\n}: { schema: Schema }): GraphQLSchema {\n const tablesConfig = extractTablesRelationalConfig(\n schema,\n createTableRelationsHelpers,\n );\n\n const tables = Object.values(tablesConfig.tables) as TableRelationalConfig[];\n\n const enums = Object.entries(schema).filter(\n (el): el is [string, PgEnum<[string, ...string[]]>] => isPgEnum(el[1]),\n );\n const enumTypes: Record<string, GraphQLEnumType> = {};\n for (const [enumTsName, enumObject] of enums) {\n // Note that this is keyed by enumName (the SQL name) because that's what is\n // available on the PgEnumColumn type. See `columnToGraphQLCore` for context.\n enumTypes[enumObject.enumName] = new GraphQLEnumType({\n name: enumTsName,\n values: enumObject.enumValues.reduce(\n (acc: Record<string, {}>, cur) => ({ ...acc, [cur]: {} }),\n {},\n ),\n });\n }\n\n const entityFilterTypes: Record<string, GraphQLInputObjectType> = {};\n for (const table of tables) {\n const filterType = new GraphQLInputObjectType({\n name: `${table.tsName}Filter`,\n fields: () => {\n const filterFields: GraphQLInputFieldConfigMap = {\n // Logical operators\n AND: { type: new GraphQLList(filterType) },\n OR: { type: new GraphQLList(filterType) },\n };\n\n for (const [columnName, column] of Object.entries(table.columns)) {\n const type = columnToGraphQLCore(column, enumTypes);\n\n // List fields => universal, plural\n if (type instanceof GraphQLList) {\n const baseType = innerType(type);\n\n conditionSuffixes.universal.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: new GraphQLList(baseType),\n };\n });\n\n conditionSuffixes.plural.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = { type: baseType };\n });\n }\n\n // JSON => no filters.\n // Boolean => universal and singular only.\n // All other scalar => universal, singular, numeric OR string depending on type\n if (\n type instanceof GraphQLScalarType ||\n type instanceof GraphQLEnumType\n ) {\n if (type.name === \"JSON\") continue;\n\n conditionSuffixes.universal.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type,\n };\n });\n\n conditionSuffixes.singular.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: new GraphQLList(type),\n };\n });\n\n if ([\"String\", \"ID\"].includes(type.name)) {\n conditionSuffixes.string.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: type,\n };\n });\n }\n\n if ([\"Int\", \"Float\", \"BigInt\"].includes(type.name)) {\n conditionSuffixes.numeric.forEach((suffix) => {\n filterFields[`${columnName}${suffix}`] = {\n type: type,\n };\n });\n }\n }\n }\n\n return filterFields;\n },\n });\n entityFilterTypes[table.tsName] = filterType;\n }\n\n const entityTypes: Record<string, GraphQLObjectType<Parent, Context>> = {};\n const entityPageTypes: Record<string, GraphQLObjectType> = {};\n\n for (const table of tables) {\n entityTypes[table.tsName] = new GraphQLObjectType({\n name: table.tsName,\n fields: () => {\n const fieldConfigMap: GraphQLFieldConfigMap<Parent, Context> = {};\n\n // Scalar fields\n for (const [columnName, column] of Object.entries(table.columns)) {\n const type = columnToGraphQLCore(column, enumTypes);\n fieldConfigMap[columnName] = {\n type: column.notNull ? new GraphQLNonNull(type) : type,\n };\n }\n\n // Relations\n const relations = Object.entries(table.relations);\n for (const [relationName, relation] of relations) {\n const referencedTable = tables.find(\n (table) => table.dbName === relation.referencedTableName,\n );\n if (!referencedTable)\n throw new Error(\n `Internal error: Referenced table \"${relation.referencedTableName}\" not found`,\n );\n\n const referencedEntityType = entityTypes[referencedTable.tsName];\n const referencedEntityPageType =\n entityPageTypes[referencedTable.tsName];\n const referencedEntityFilterType =\n entityFilterTypes[referencedTable.tsName];\n if (\n referencedEntityType === undefined ||\n referencedEntityPageType === undefined ||\n referencedEntityFilterType === undefined\n )\n throw new Error(\n `Internal error: Referenced entity types not found for table \"${referencedTable.tsName}\" `,\n );\n\n if (is(relation, One)) {\n const fields = relation.config?.fields ?? [];\n const references = relation.config?.references ?? [];\n\n if (fields.length !== references.length) {\n throw new Error(\n \"Internal error: Fields and references arrays must be the same length\",\n );\n }\n\n fieldConfigMap[relationName] = {\n // Note: There is a `relation.isNullable` field here but it appears\n // to be internal / incorrect. Until we have support for foriegn\n // key constraints, all `one` relations must be nullable.\n type: referencedEntityType,\n resolve: (parent, _args, context) => {\n const loader = context.getDataLoader({\n table: referencedTable,\n });\n\n const rowFragment: Record<string, unknown> = {};\n for (let i = 0; i < references.length; i++) {\n const referenceColumn = references[i]!;\n const fieldColumn = fields[i]!;\n\n const fieldColumnTsName = getColumnTsName(fieldColumn);\n const referenceColumnTsName =\n getColumnTsName(referenceColumn);\n\n rowFragment[referenceColumnTsName] =\n parent[fieldColumnTsName];\n }\n const encodedId = encodeRowFragment(rowFragment);\n\n return loader.load(encodedId);\n },\n };\n } else if (is(relation, Many)) {\n // Search the relations of the referenced table for the corresponding `one` relation.\n // If \"relationName\" is not provided, use the first `one` relation that references this table.\n const oneRelation = Object.values(referencedTable.relations).find(\n (relation) =>\n relation.relationName === relationName ||\n (is(relation, One) &&\n relation.referencedTableName === table.dbName),\n ) as One | undefined;\n if (!oneRelation)\n throw new Error(\n `Internal error: Relation \"${relationName}\" not found in table \"${referencedTable.tsName}\"`,\n );\n\n const fields = oneRelation.config?.fields ?? [];\n const references = oneRelation.config?.references ?? [];\n\n fieldConfigMap[relationName] = {\n type: referencedEntityPageType,\n args: {\n where: { type: referencedEntityFilterType },\n orderBy: { type: GraphQLString },\n orderDirection: { type: GraphQLString },\n before: { type: GraphQLString },\n after: { type: GraphQLString },\n limit: { type: GraphQLInt },\n },\n resolve: (parent, args: PluralArgs, context, info) => {\n const relationalConditions = [];\n for (let i = 0; i < references.length; i++) {\n const column = fields[i]!;\n const value = parent[references[i]!.name];\n relationalConditions.push(eq(column, value));\n }\n\n const includeTotalCount = selectionIncludesField(\n info,\n \"totalCount\",\n );\n\n return executePluralQuery(\n referencedTable,\n context.drizzle,\n args,\n includeTotalCount,\n relationalConditions,\n );\n },\n };\n } else {\n throw new Error(\n `Internal error: Relation \"${relationName}\" is unsupported, expected One or Many`,\n );\n }\n }\n\n return fieldConfigMap;\n },\n });\n\n entityPageTypes[table.tsName] = new GraphQLObjectType({\n name: `${table.tsName}Page`,\n fields: () => ({\n items: {\n type: new GraphQLNonNull(\n new GraphQLList(new GraphQLNonNull(entityTypes[table.tsName]!)),\n ),\n },\n pageInfo: { type: new GraphQLNonNull(GraphQLPageInfo) },\n totalCount: { type: new GraphQLNonNull(GraphQLInt) },\n }),\n });\n }\n\n const queryFields: Record<string, GraphQLFieldConfig<Parent, Context>> = {};\n for (const table of tables) {\n const entityType = entityTypes[table.tsName]!;\n const entityPageType = entityPageTypes[table.tsName]!;\n const entityFilterType = entityFilterTypes[table.tsName]!;\n\n const singularFieldName =\n table.tsName.charAt(0).toLowerCase() + table.tsName.slice(1);\n const pluralFieldName = `${singularFieldName}s`;\n\n queryFields[singularFieldName] = {\n type: entityType,\n // Find the primary key columns and GraphQL core types and include them\n // as arguments to the singular query type.\n args: Object.fromEntries(\n table.primaryKey.map((column) => [\n getColumnTsName(column),\n {\n type: new GraphQLNonNull(\n columnToGraphQLCore(column, enumTypes) as GraphQLInputType,\n ),\n },\n ]),\n ),\n resolve: async (_parent, args, context) => {\n const loader = context.getDataLoader({ table });\n\n // The `args` object here should be a valid `where` argument that\n // uses the `eq` shorthand for each primary key column.\n const encodedId = encodeRowFragment(args);\n\n return loader.load(encodedId);\n },\n };\n\n queryFields[pluralFieldName] = {\n type: new GraphQLNonNull(entityPageType),\n args: {\n where: { type: entityFilterType },\n orderBy: { type: GraphQLString },\n orderDirection: { type: GraphQLString },\n before: { type: GraphQLString },\n after: { type: GraphQLString },\n limit: { type: GraphQLInt },\n },\n resolve: async (_parent, args: PluralArgs, context, info) => {\n const includeTotalCount = selectionIncludesField(info, \"totalCount\");\n\n return executePluralQuery(\n table,\n context.drizzle,\n args,\n includeTotalCount,\n );\n },\n };\n }\n\n queryFields._meta = {\n type: GraphQLMeta,\n resolve: async (_source, _args, context) => {\n const status = await context.metadataStore.getStatus();\n return { status };\n },\n };\n\n return new GraphQLSchema({\n // Include these here so they are listed first in the printed schema.\n types: [GraphQLJSON, GraphQLBigInt, GraphQLPageInfo, GraphQLMeta],\n query: new GraphQLObjectType({\n name: \"Query\",\n fields: queryFields,\n }),\n });\n}\n\nconst GraphQLPageInfo = new GraphQLObjectType({\n name: \"PageInfo\",\n fields: {\n hasNextPage: { type: new GraphQLNonNull(GraphQLBoolean) },\n hasPreviousPage: { type: new GraphQLNonNull(GraphQLBoolean) },\n startCursor: { type: GraphQLString },\n endCursor: { type: GraphQLString },\n },\n});\n\nconst GraphQLBigInt = new GraphQLScalarType({\n name: \"BigInt\",\n serialize: (value) => String(value),\n parseValue: (value) => BigInt(value as any),\n parseLiteral: (value) => {\n if (value.kind === \"StringValue\") {\n return BigInt(value.value);\n } else {\n throw new Error(\n `Invalid value kind provided for field of type BigInt: ${value.kind}. Expected: StringValue`,\n );\n }\n },\n});\n\nconst GraphQLMeta = new GraphQLObjectType({\n name: \"Meta\",\n fields: { status: { type: GraphQLJSON } },\n});\n\nconst columnToGraphQLCore = (\n column: Column,\n enumTypes: Record<string, GraphQLEnumType>,\n): GraphQLOutputType => {\n if (column.columnType === \"PgEvmBigint\") {\n return GraphQLBigInt;\n }\n\n if (column instanceof PgEnumColumn) {\n if (column.enum === undefined) {\n throw new Error(\n `Internal error: Expected enum column \"${getColumnTsName(column)}\" to have an \"enum\" property`,\n );\n }\n const enumType = enumTypes[column.enum.enumName];\n if (enumType === undefined) {\n throw new Error(\n `Internal error: Expected to find a GraphQL enum named \"${column.enum.enumName}\". This may happen if \"${column.enum.enumName}\" has not been exported from your Ponder schema`,\n );\n }\n\n return enumType;\n }\n\n switch (column.dataType) {\n case \"boolean\":\n return GraphQLBoolean;\n case \"json\":\n return GraphQLJSON;\n case \"date\":\n return GraphQLString;\n case \"string\":\n return GraphQLString;\n case \"bigint\":\n return GraphQLString;\n case \"number\":\n return is(column, PgInteger) || is(column, PgSerial)\n ? GraphQLInt\n : GraphQLFloat;\n case \"buffer\":\n return new GraphQLList(new GraphQLNonNull(GraphQLInt));\n case \"array\": {\n if (column.columnType === \"PgVector\") {\n return new GraphQLList(new GraphQLNonNull(GraphQLFloat));\n }\n\n if (column.columnType === \"PgGeometry\") {\n return new GraphQLList(new GraphQLNonNull(GraphQLFloat));\n }\n\n const innerType = columnToGraphQLCore(\n (column as any).baseColumn,\n enumTypes,\n );\n\n return new GraphQLList(new GraphQLNonNull(innerType));\n }\n default:\n throw new Error(`Type ${column.dataType} is not implemented`);\n }\n};\n\nconst innerType = (\n type: GraphQLOutputType,\n): GraphQLScalarType | GraphQLEnumType => {\n if (type instanceof GraphQLScalarType || type instanceof GraphQLEnumType)\n return type;\n if (type instanceof GraphQLList || type instanceof GraphQLNonNull)\n return innerType(type.ofType);\n throw new Error(`Type ${type.toString()} is not implemented`);\n};\n\nasync function executePluralQuery(\n table: TableRelationalConfig,\n drizzle: Drizzle<{ [key: string]: OnchainTable }>,\n args: PluralArgs,\n includeTotalCount: boolean,\n extraConditions: (SQL | undefined)[] = [],\n) {\n const rawTable = drizzle._.fullSchema[table.tsName];\n const baseQuery = drizzle.query[table.tsName];\n if (rawTable === undefined || baseQuery === undefined)\n throw new Error(`Internal error: Table \"${table.tsName}\" not found in RQB`);\n\n const limit = args.limit ?? DEFAULT_LIMIT;\n if (limit > MAX_LIMIT) {\n throw new Error(`Invalid limit. Got ${limit}, expected <=${MAX_LIMIT}.`);\n }\n\n const orderBySchema = buildOrderBySchema(table, args);\n const orderBy = orderBySchema.map(([columnName, direction]) => {\n const column = table.columns[columnName];\n if (column === undefined) {\n throw new Error(\n `Unknown column \"${columnName}\" used in orderBy argument`,\n );\n }\n return direction === \"asc\" ? asc(column) : desc(column);\n });\n const orderByReversed = orderBySchema.map(([columnName, direction]) => {\n const column = table.columns[columnName];\n if (column === undefined) {\n throw new Error(\n `Unknown column \"${columnName}\" used in orderBy argument`,\n );\n }\n return direction === \"asc\" ? desc(column) : asc(column);\n });\n\n const whereConditions = buildWhereConditions(args.where, table.columns);\n\n const after = args.after ?? null;\n const before = args.before ?? null;\n\n if (after !== null && before !== null) {\n throw new Error(\"Cannot specify both before and after cursors.\");\n }\n\n let startCursor = null;\n let endCursor = null;\n let hasPreviousPage = false;\n let hasNextPage = false;\n\n const totalCountPromise = includeTotalCount\n ? drizzle\n .select({ count: count() })\n .from(rawTable)\n .where(and(...whereConditions, ...extraConditions))\n .then((rows) => rows[0]?.count ?? null)\n : Promise.resolve(null);\n\n // Neither cursors are specified, apply the order conditions and execute.\n if (after === null && before === null) {\n const [rows, totalCount] = await Promise.all([\n baseQuery.findMany({\n where: and(...whereConditions, ...extraConditions),\n orderBy,\n limit: limit + 1,\n }),\n totalCountPromise,\n ]);\n\n if (rows.length === limit + 1) {\n rows.pop();\n hasNextPage = true;\n }\n\n startCursor =\n rows.length > 0 ? encodeCursor(orderBySchema, rows[0]!) : null;\n endCursor =\n rows.length > 0\n ? encodeCursor(orderBySchema, rows[rows.length - 1]!)\n : null;\n\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n if (after !== null) {\n // User specified an 'after' cursor.\n const cursorObject = decodeCursor(after);\n const cursorCondition = buildCursorCondition(\n table,\n orderBySchema,\n \"after\",\n cursorObject,\n );\n\n const [rows, totalCount] = await Promise.all([\n baseQuery.findMany({\n where: and(...whereConditions, cursorCondition, ...extraConditions),\n orderBy,\n limit: limit + 2,\n }),\n totalCountPromise,\n ]);\n\n if (rows.length === 0) {\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n // If the cursor of the first returned record equals the `after` cursor,\n // `hasPreviousPage` is true. Remove that record.\n if (encodeCursor(orderBySchema, rows[0]!) === after) {\n rows.shift();\n hasPreviousPage = true;\n } else {\n // Otherwise, remove the last record.\n rows.pop();\n }\n\n // Now if the length of the records is still equal to limit + 1,\n // there is a next page.\n if (rows.length === limit + 1) {\n rows.pop();\n hasNextPage = true;\n }\n\n // Now calculate the cursors.\n startCursor =\n rows.length > 0 ? encodeCursor(orderBySchema, rows[0]!) : null;\n endCursor =\n rows.length > 0\n ? encodeCursor(orderBySchema, rows[rows.length - 1]!)\n : null;\n\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n // User specified a 'before' cursor.\n const cursorObject = decodeCursor(before!);\n const cursorCondition = buildCursorCondition(\n table,\n orderBySchema,\n \"before\",\n cursorObject,\n );\n\n // Reverse the order by conditions to get the previous page,\n // then reverse the results back to the original order.\n const [rows, totalCount] = await Promise.all([\n baseQuery\n .findMany({\n where: and(...whereConditions, cursorCondition, ...extraConditions),\n orderBy: orderByReversed,\n limit: limit + 2,\n })\n .then((rows) => rows.reverse()),\n totalCountPromise,\n ]);\n\n if (rows.length === 0) {\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n }\n\n // If the cursor of the last returned record equals the `before` cursor,\n // `hasNextPage` is true. Remove that record.\n if (encodeCursor(orderBySchema, rows[rows.length - 1]!) === before) {\n rows.pop();\n hasNextPage = true;\n } else {\n // Otherwise, remove the first record.\n rows.shift();\n }\n\n // Now if the length of the records is equal to limit + 1, we know\n // there is a previous page.\n if (rows.length === limit + 1) {\n rows.shift();\n hasPreviousPage = true;\n }\n\n // Now calculate the cursors.\n startCursor = rows.length > 0 ? encodeCursor(orderBySchema, rows[0]!) : null;\n endCursor =\n rows.length > 0\n ? encodeCursor(orderBySchema, rows[rows.length - 1]!)\n : null;\n\n return {\n items: rows,\n totalCount,\n pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },\n };\n}\n\nconst conditionSuffixes = {\n universal: [\"\", \"_not\"],\n singular: [\"_in\", \"_not_in\"],\n plural: [\"_has\", \"_not_has\"],\n numeric: [\"_gt\", \"_lt\", \"_gte\", \"_lte\"],\n string: [\n \"_contains\",\n \"_not_contains\",\n \"_starts_with\",\n \"_ends_with\",\n \"_not_starts_with\",\n \"_not_ends_with\",\n ],\n} as const;\n\nconst conditionSuffixesByLengthDesc = Object.values(conditionSuffixes)\n .flat()\n .sort((a, b) => b.length - a.length);\n\nfunction buildWhereConditions(\n where: Record<string, any> | undefined,\n columns: Record<string, Column>,\n): (SQL | undefined)[] {\n const conditions: (SQL | undefined)[] = [];\n\n if (where === undefined) return conditions;\n\n for (const [whereKey, rawValue] of Object.entries(where)) {\n // Handle the `AND` and `OR` operators\n if (whereKey === \"AND\" || whereKey === \"OR\") {\n if (!Array.isArray(rawValue)) {\n throw new Error(\n `Invalid query: Expected an array for the ${whereKey} operator. Got: ${rawValue}`,\n );\n }\n\n const nestedConditions = rawValue.flatMap((subWhere) =>\n buildWhereConditions(subWhere, columns),\n );\n\n if (nestedConditions.length > 0) {\n conditions.push(\n whereKey === \"AND\"\n ? and(...nestedConditions)\n : or(...nestedConditions),\n );\n }\n continue;\n }\n\n // Search for a valid filter suffix, traversing the list from longest to shortest\n // to avoid ambiguity between cases like `_not_in` and `_in`.\n const conditionSuffix = conditionSuffixesByLengthDesc.find((s) =>\n whereKey.endsWith(s),\n );\n if (conditionSuffix === undefined) {\n throw new Error(\n `Invariant violation: Condition suffix not found for where key ${whereKey}`,\n );\n }\n\n // Remove the condition suffix and use the remaining string as the column name.\n const columnName = whereKey.slice(\n 0,\n whereKey.length - conditionSuffix.length,\n );\n\n // Validate that the column name is present in the table.\n const column = columns[columnName];\n if (column === undefined) {\n throw new Error(\n `Invalid query: Where clause contains unknown column ${columnName}`,\n );\n }\n\n switch (conditionSuffix) {\n case \"\":\n if (column.columnType === \"PgArray\") {\n conditions.push(\n and(\n arrayContains(column, rawValue),\n arrayContained(column, rawValue),\n ),\n );\n } else {\n conditions.push(eq(column, rawValue));\n }\n break;\n case \"_not\":\n if (column.columnType === \"PgArray\") {\n conditions.push(\n not(\n and(\n arrayContains(column, rawValue),\n arrayContained(column, rawValue),\n )!,\n ),\n );\n } else {\n conditions.push(ne(column, rawValue));\n }\n break;\n case \"_in\":\n conditions.push(inArray(column, rawValue));\n break;\n case \"_not_in\":\n conditions.push(notInArray(column, rawValue));\n break;\n case \"_has\":\n conditions.push(arrayContains(column, [rawValue]));\n break;\n case \"_not_has\":\n conditions.push(not(arrayContains(column, [rawValue])));\n break;\n case \"_gt\":\n conditions.push(gt(column, rawValue));\n break;\n case \"_lt\":\n conditions.push(lt(column, rawValue));\n break;\n case \"_gte\":\n conditions.push(gte(column, rawValue));\n break;\n case \"_lte\":\n conditions.push(lte(column, rawValue));\n break;\n case \"_contains\":\n conditions.push(like(column, `%${rawValue}%`));\n break;\n case \"_not_contains\":\n conditions.push(notLike(column, `%${rawValue}%`));\n break;\n case \"_starts_with\":\n conditions.push(like(column, `${rawValue}%`));\n break;\n case \"_ends_with\":\n conditions.push(like(column, `%${rawValue}`));\n break;\n case \"_not_starts_with\":\n conditions.push(notLike(column, `${rawValue}%`));\n break;\n case \"_not_ends_with\":\n conditions.push(notLike(column, `%${rawValue}`));\n break;\n default:\n never(conditionSuffix);\n }\n }\n\n return conditions;\n}\n\nfunction buildOrderBySchema(table: TableRelationalConfig, args: PluralArgs) {\n // If the user-provided order by does not include the ALL of the ID columns,\n // add any missing ID columns to the end of the order by clause (asc).\n // This ensures a consistent sort order to unblock cursor pagination.\n const userDirection = args.orderDirection ?? \"asc\";\n const userColumns: [string, \"asc\" | \"desc\"][] =\n args.orderBy !== undefined ? [[args.orderBy, userDirection]] : [];\n const pkColumns = table.primaryKey.map((column) => [\n getColumnTsName(column),\n userDirection,\n ]);\n const missingPkColumns = pkColumns.filter(\n (pkColumn) =>\n !userColumns.some((userColumn) => userColumn[0] === pkColumn[0]),\n ) as [string, \"asc\" | \"desc\"][];\n return [...userColumns, ...missingPkColumns];\n}\n\nfunction encodeCursor(\n orderBySchema: [string, \"asc\" | \"desc\"][],\n row: { [k: string]: unknown },\n): string {\n const cursorObject = Object.fromEntries(\n orderBySchema.map(([columnName, _]) => [columnName, row[columnName]]),\n );\n return encodeRowFragment(cursorObject);\n}\nfunction decodeCursor(cursor: string): { [k: string]: unknown } {\n return decodeRowFragment(cursor);\n}\n\nfunction encodeRowFragment(rowFragment: { [k: string]: unknown }): string {\n return Buffer.from(serialize(rowFragment)).toString(\"base64\");\n}\nfunction decodeRowFragment(encodedRowFragment: string): {\n [k: string]: unknown;\n} {\n return deserialize(Buffer.from(encodedRowFragment, \"base64\").toString());\n}\n\nfunction buildCursorCondition(\n table: TableRelationalConfig,\n orderBySchema: [string, \"asc\" | \"desc\"][],\n direction: \"after\" | \"before\",\n cursorObject: { [k: string]: unknown },\n): SQL | undefined {\n const cursorColumns = orderBySchema.map(([columnName, orderDirection]) => {\n const column = table.columns[columnName];\n if (column === undefined)\n throw new Error(\n `Unknown column \"${columnName}\" used in orderBy argument`,\n );\n\n const value = cursorObject[columnName];\n\n let comparator: typeof gt | typeof lt;\n let comparatorOrEquals: typeof gte | typeof lte;\n if (direction === \"after\") {\n [comparator, comparatorOrEquals] =\n orderDirection === \"asc\" ? [gt, gte] : [lt, lte];\n } else {\n [comparator, comparatorOrEquals] =\n orderDirection === \"asc\" ? [lt, lte] : [gt, gte];\n }\n\n return { column, value, comparator, comparatorOrEquals };\n });\n\n const buildCondition = (index: number): SQL | undefined => {\n if (index === cursorColumns.length - 1) {\n const { column, value, comparatorOrEquals } = cursorColumns[index]!;\n return comparatorOrEquals(column, value);\n }\n\n const currentColumn = cursorColumns[index]!;\n const nextCondition = buildCondition(index + 1);\n\n return or(\n currentColumn.comparator(currentColumn.column, currentColumn.value),\n and(eq(currentColumn.column, currentColumn.value), nextCondition),\n );\n };\n\n return buildCondition(0);\n}\n\nexport function buildDataLoaderCache({\n drizzle,\n}: { drizzle: ReadonlyDrizzle<Schema> }) {\n const dataLoaderMap = new Map<\n TableRelationalConfig,\n DataLoader<string, any> | undefined\n >();\n return ({ table }: { table: TableRelationalConfig }) => {\n const baseQuery = (drizzle as Drizzle<{ [key: string]: OnchainTable }>)\n .query[table.tsName];\n if (baseQuery === undefined)\n throw new Error(\n `Internal error: Unknown table \"${table.tsName}\" in data loader cache`,\n );\n\n let dataLoader = dataLoaderMap.get(table);\n if (dataLoader === undefined) {\n dataLoader = new DataLoader(\n async (encodedIds) => {\n const decodedRowFragments = encodedIds.map(decodeRowFragment);\n\n // The decoded row fragments should be valid `where` objects\n // which use the `eq` object shorthand for each primary key column.\n const idConditions = decodedRowFragments.map((decodedRowFragment) =>\n and(...buildWhereConditions(decodedRowFragment, table.columns)),\n );\n\n const rows = await baseQuery.findMany({\n where: or(...idConditions),\n limit: encodedIds.length,\n });\n\n return decodedRowFragments.map((decodedRowFragment) => {\n return rows.find((row) =>\n Object.entries(decodedRowFragment).every(\n ([col, val]) => row[col] === val,\n ),\n );\n });\n },\n { maxBatchSize: 1_000 },\n );\n dataLoaderMap.set(table, dataLoader);\n }\n\n return dataLoader;\n };\n}\n\nfunction getColumnTsName(column: Column) {\n const tableColumns = getTableColumns(column.table);\n return Object.entries(tableColumns).find(\n ([_, c]) => c.name === column.name,\n )![0];\n}\n\n/**\n * Returns `true` if the query includes a specific field.\n * Does not consider nested selections; only works one \"layer\" deep.\n */\nfunction selectionIncludesField(\n info: GraphQLResolveInfo,\n fieldName: string,\n): boolean {\n for (const fieldNode of info.fieldNodes) {\n for (const selection of fieldNode.selectionSet?.selections ?? []) {\n if (selection.kind === \"Field\" && selection.name.value === fieldName) {\n return true;\n }\n }\n }\n return false;\n}\n","// Modified from https://github.com/taion/graphql-type-json/blob/master/src/index.js\nimport {\n type GraphQLScalarLiteralParser,\n GraphQLScalarType,\n Kind,\n type ObjectValueNode,\n type ValueNode,\n print,\n} from \"graphql\";\n\nexport const GraphQLJSON = new GraphQLScalarType({\n name: \"JSON\",\n description:\n \"The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).\",\n serialize: (x) => x,\n parseValue: (x) => x,\n parseLiteral: (ast, variables) => {\n if (ast.kind !== Kind.OBJECT) {\n throw new TypeError(\n `JSONObject cannot represent non-object value: ${print(ast)}`,\n );\n }\n\n return parseObject(ast, variables);\n },\n});\n\nconst parseLiteral = (\n ast: ValueNode,\n variables: Parameters<GraphQLScalarType[\"parseLiteral\"]>[1],\n): ReturnType<GraphQLScalarLiteralParser<unknown>> => {\n switch (ast.kind) {\n case Kind.STRING:\n case Kind.BOOLEAN:\n return ast.value;\n case Kind.INT:\n case Kind.FLOAT:\n return Number.parseFloat(ast.value);\n case Kind.OBJECT:\n return parseObject(ast, variables);\n case Kind.LIST:\n return ast.values.map((n) => parseLiteral(n, variables));\n case Kind.NULL:\n return null;\n case Kind.VARIABLE:\n return variables ? variables[ast.name.value] : undefined;\n default:\n throw new TypeError(`JSON cannot represent value: ${print(ast)}`);\n }\n};\n\nconst parseObject = (\n ast: ObjectValueNode,\n variables: Parameters<GraphQLScalarType[\"parseLiteral\"]>[1],\n) => {\n const value = Object.create(null);\n ast.fields.forEach((field) => {\n value[field.name.value] = parseLiteral(field.value, variables);\n });\n\n return value;\n};\n"],"mappings":";;;;;;;;;;;;;;;;AA0BO,IAAM,eAAe,CAK1B,WASA;;;AC7BK,IAAM,UAAU,CAAyBA,aAC9CA;;;ACHF;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACZP,SAAyB,eAAe;AACxC,SAAS,wBAAwB;AACjC,SAAS,iBAAiB;AAC1B,OAAO,eAAe;;;ACGtB,IAAM,cAAc,CAAC,SAAe,OAAO,KAAK,IAAI,EAAE,CAAC;AAEvD,IAAM,cAAc,oBAAI,IAAqB;AAEtC,IAAM,gBAAgB,OAAOC,SAAgB;AAElD,QAAM,SAAS,MAAM;AAAA;AAAA,IAAiC;AAAA,EAAqB;AAC3E,QAAM,SAAS,MAAM;AAAA;AAAA,IAAiC;AAAA,EAAa;AAEnE,QAAM,OAAO,OACV,WAAW,QAAQ,EACnB,OAAOA,IAAG,EACV,OAAO,KAAK,EACZ,MAAM,GAAG,EAAE;AAEd,MAAI,YAAY,IAAI,IAAI,GAAG;AACzB,UAAM,SAAS,YAAY,IAAI,IAAI;AAEnC,gBAAY,OAAO,IAAI;AACvB,gBAAY,IAAI,MAAM,MAAM;AAE5B,QAAI;AAAQ;AACZ,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC,OAAO;AACL,gBAAY,IAAI,MAAM,KAAK;AAAA,EAC7B;AAEA,QAAM,EAAE,MAAM,IAAI,MAAM,OAAO,QAAQ;AACvC,QAAM,cAAc,MAAMA,IAAG;AAK7B,MAAI,YAAY,UAAU,MAAM;AAC9B,UAAM,IAAI,MAAM,YAAY,KAAK;AAAA,EACnC;AAEA,MAAI,YAAY,WAAW,MAAM,WAAW,GAAG;AAC7C,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AAEA,MAAI,YAAY,WAAW,MAAM,SAAS,GAAG;AAC3C,UAAM,IAAI,MAAM,mCAAmC;AAAA,EACrD;AAEA,QAAM,OAAO,YAAY,WAAW,MAAM,CAAC;AAE3C,MAAI,KAAK,SAAS,QAAW;AAC3B,UAAM,IAAI,MAAM,eAAe;AAAA,EACjC;AAEA,QAAM,WAAW,CAAC,SAAe;AAC/B,QAAI,WAAW,IAAI,YAAY,IAAI,CAAC,MAAM,OAAO;AAC/C,YAAM,IAAI,MAAM,GAAG,YAAY,IAAI,CAAC,gBAAgB;AAAA,IACtD;AAGA,eAAW,IAAI,YAAY,IAAI,CAAC,EAAG,WAAW,KAAK,YAAY,IAAI,CAAC,CAAC;AAErE,eAAW,SAAS,WAAW,IAAI,YAAY,IAAI,CAAC,EAAG;AAAA;AAAA,MAErD,KAAK,YAAY,IAAI,CAAC;AAAA,IACxB,GAAG;AACD,eAAS,KAAK;AAAA,IAChB;AAAA,EACF;AAEA,WAAS,KAAK,IAAI;AAElB,cAAY,IAAI,MAAM,IAAI;AAC1B,MAAI,YAAY,OAAO,KAAW;AAChC,UAAM,WAAW,YAAY,KAAK,EAAE,KAAK,EAAE;AAC3C,QAAI;AAAU,kBAAY,OAAO,QAAQ;AAAA,EAC3C;AACF;AAIA,IAAM,oBAA8C;AAAA,EAClD,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,kBAA0C;AAAA,EAC9C,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,oBAA8C;AAAA,EAClD,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,mBAA4C;AAAA,EAChD,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,uBAAmD;AAAA,EACvD,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,iBAAwC;AAAA,EAC5C,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,SAAS,CAAC,CAAE;AAC5C;AAEA,IAAM,qBAA+C;AAAA,EACnD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,SAAS,CAAC,CAAE;AAC5C;AAEA,IAAM,qBAA+C;AAAA,EACnD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,SAAS,CAAC,CAAE;AAC5C;AAEA,IAAM,oBAA8C;AAAA,EAClD,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,kBAA0C;AAAA,EAC9C,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,YAAY,CAAC,CAAE;AAC/C;AAEA,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,CAAE;AAAA,EACnE,UAAU,CAAC,SAAS;AAClB,QAAI,KAAK,YAAY;AACnB,YAAM,IAAI,MAAM,2BAA2B;AAAA,IAC7C;AAEA,QAAI,KAAK,WAAW,cAAc,IAAI,KAAK,OAAO,GAAG;AACnD,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAAA,EACF;AACF;AAEA,IAAM,gBAAsC;AAAA,EAC1C,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAE;AACtD;AAEA,IAAM,kBAA0C;AAAA,EAC9C,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAE;AACtD;AAEA,IAAM,mBAA4C;AAAA,EAChD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,eAAe,CAAC;AAAA,IACzB,GAAI,KAAK,iBAAiB,CAAC;AAAA,IAC3B,GAAI,KAAK,QAAQ,CAAC;AAAA,IAClB,GAAI,KAAK,YAAY,CAAC;AAAA,IACtB,GAAI,KAAK,eAAe,CAAC;AAAA,IACzB,GAAI,KAAK,YAAY,CAAC,KAAK,SAAS,IAAI,CAAC;AAAA,EAC3C;AACF;AAEA,IAAM,0BAAyD;AAAA,EAC7D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,QAAQ,CAAC,GAAI,GAAI,KAAK,QAAQ,CAAC,CAAE;AACjE;AAEA,IAAM,wBAAqD;AAAA,EACzD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,QAAQ,CAAC;AAAA,IAClB,GAAI,KAAK,YAAY,CAAC,KAAK,SAAS,IAAI,CAAC;AAAA,EAC3C;AACF;AAEA,IAAM,2BAA0D;AAAA,EAC9D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,EAC/B;AACF;AAEA,IAAM,oBAA6C;AAAA,EACjD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAI,GAAI,KAAK,QAAQ,CAAC,CAAE;AAC5E;AAEA,IAAM,0BAAyD;AAAA,EAC7D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAI,GAAI,KAAK,QAAQ,CAAC,CAAE;AAC5E;AAEA,IAAM,yBAAsD;AAAA,EAC1D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAI,GAAI,KAAK,QAAQ,CAAC,CAAE;AAC5E;AAEA,IAAM,iCAAqE;AAAA,EACzE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAI,GAAI,KAAK,QAAQ,CAAC,CAAE;AAC5E;AAEA,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAI,GAAI,KAAK,QAAQ,CAAC,CAAE;AAC5E;AAEA,IAAM,yBAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,EAC/B;AACF;AAEA,IAAM,yBAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,EAC/B;AACF;AAEA,IAAM,8BAAgE;AAAA,EACpE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,WAAW,CAAC,KAAK,QAAQ,IAAI,CAAC;AAAA,EACzC;AACF;AAEA,IAAM,iCAAsE;AAAA,EAC1E,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,EAC/B;AACF;AAEA,IAAM,yBAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,EAC/B;AACF;AAEA,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,QAAQ,CAAC;AAAA,IAClB,GAAI,KAAK,YAAY,CAAC,KAAK,SAAS,IAAI,CAAC;AAAA,EAC3C;AACF;AAEA,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAC/B,GAAI,KAAK,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC;AAAA,EACrC;AACF;AAEA,IAAM,2BAA0D;AAAA,EAC9D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAE;AACtD;AAEA,IAAM,uBAAmD;AAAA,EACvD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,YAAY,CAAC;AAAA,EACxB;AACF;AAEA,IAAM,qBAA+C;AAAA,EACnD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,QAAQ,CAAC;AAAA,IAClB,GAAI,KAAK,YAAY,CAAC;AAAA,EACxB;AACF;AAEA,IAAM,6BAA8D;AAAA,EAClE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,SAAS,CAAC;AAAA,IACnB,GAAI,KAAK,cAAc,CAAC;AAAA,IACxB,GAAI,KAAK,gBAAgB,CAAC;AAAA,IAC1B,GAAI,KAAK,SAAS,CAAC;AAAA,IACnB,GAAI,KAAK,SAAS,CAAC;AAAA,EACrB;AACF;AAEA,IAAM,yBAAwD;AAAA,EAC5D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAI,GAAI,KAAK,QAAQ,CAAC,CAAE;AAC5E;AAEA,IAAM,yBAAsD;AAAA,EAC1D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAI,GAAI,KAAK,QAAQ,CAAC,CAAE;AAC5E;AAEA,IAAM,+BAAkE;AAAA,EACtE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAE;AACtD;AAEA,IAAM,wBAAqD;AAAA,EACzD,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,2BAA2D;AAAA,EAC/D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,SAAS,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAE;AAC5E;AAEA,IAAM,4BAA4D;AAAA,EAChE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,WAAW,CAAC,KAAK,QAAQ,IAAI,CAAC;AAAA,IACvC,GAAI,KAAK,iBAAiB,CAAC,KAAK,cAAc,IAAI,CAAC;AAAA,IACnD,GAAI,KAAK,SAAS,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC;AAAA,EACrD;AACF;AAEA,IAAM,kCAAwE;AAAA,EAC5E,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,QAAQ,CAAC;AAAA,IAClB,GAAI,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAC/B,GAAI,KAAK,WAAW,CAAC,KAAK,QAAQ,IAAI,CAAC;AAAA,IACvC,GAAI,KAAK,YAAY,CAAC,EAAE,eAAe,KAAK,UAAU,CAAC,IAAI,CAAC;AAAA,EAC9D;AACF;AAEA,IAAM,8BAAgE;AAAA,EACpE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAC/B,GAAI,KAAK,SAAS,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC;AAAA,EACrD;AACF;AAEA,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,EAC/B;AACF;AAEA,IAAM,yBAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,EAC/B;AACF;AAEA,IAAM,6BAA8D;AAAA,EAClE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,EAC/B;AACF;AAEA,IAAM,mCAAyE;AAAA,EAC7E,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAE;AACtD;AAEA,IAAM,4BAA4D;AAAA,EAChE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAE;AACtD;AAEA,IAAM,4BAA4D;AAAA,EAChE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,CAAE;AACtD;AAEA,IAAM,2BAA2D;AAAA,EAC/D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,EACjC;AACF;AAEA,IAAM,yBAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,EACjC;AACF;AAEA,IAAM,0BAAwD;AAAA,EAC5D,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAC/B,GAAI,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAC/B,GAAI,KAAK,eAAe,CAAC;AAAA,IACzB,GAAI,KAAK,mBAAmB,CAAC,EAAE,OAAO,KAAK,iBAAiB,CAAC,IAAI,CAAC;AAAA,IAClE,GAAI,KAAK,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AAAA,IACjC,GAAI,KAAK,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC;AAAA,EAC9C;AACF;AAEA,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,YAAY,CAAC;AAAA,IACtB,GAAI,KAAK,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AAAA,EACnC;AACF;AAEA,IAAM,6BAA8D;AAAA,EAClE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,gBAAgB,CAAC;AAAA,IAC1B,GAAI,KAAK,eAAe,CAAC,KAAK,YAAY,IAAI,CAAC;AAAA,IAC/C,GAAI,KAAK,iBAAiB,CAAC;AAAA,IAC3B,GAAI,KAAK,kBAAkB,CAAC,KAAK,eAAe,IAAI,CAAC;AAAA,IACrD,GAAI,KAAK,gBAAgB,CAAC;AAAA,EAC5B;AACF;AAEA,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,SAAS,CAAC;AAAA,IACnB,GAAI,KAAK,WAAW,CAAC;AAAA,IACrB,GAAI,KAAK,eAAe,CAAC;AAAA,EAC3B;AACF;AAEA,IAAM,uBAAmD;AAAA,EACvD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,UAAU,CAAC,CAAE;AAC7C;AAEA,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,mBAA4C;AAAA,EAChD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,QAAQ,CAAC;AAAA,IAClB,GAAI,KAAK,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AAAA,IACjC,GAAI,KAAK,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AAAA,EACnC;AACF;AAEA,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,WAAW,CAAC,EAAE,UAAU,KAAK,SAAS,CAAC,IAAI,CAAC;AAAA,EACvD;AACF;AAEA,IAAM,2BAA2D;AAAA,EAC/D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,YAAY,CAAC;AAAA,EACxB;AACF;AAEA,IAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,sBAAiD;AAAA,EACrD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,YAAY,CAAC;AAAA,IACtB,GAAI,KAAK,QAAQ,CAAC;AAAA,IAClB,GAAI,KAAK,aAAa,CAAC;AAAA,IACvB,GAAI,KAAK,aAAa,CAAC,KAAK,UAAU,IAAI,CAAC;AAAA,IAC3C,GAAI,KAAK,OAAO,CAAC,EAAE,WAAW,KAAK,KAAK,CAAC,IAAI,CAAC;AAAA,EAChD;AAAA,EACA,UAAU,CAAC,SAAS;AAClB,QACE,KAAK,UAAU;AAAA,MACb,CAAC,SACC,YAAY,IAAI,MAAM;AAAA,MAEtB,kBAAkB,IAAI,KAAK,OAAO,IAAI;AAAA,IAC1C,GACA;AACA;AAAA,IACF;AACA,UAAM,IAAI,MAAM,6BAA6B;AAAA,EAC/C;AACF;AAEA,IAAM,mBAA4C;AAAA,EAChD,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,sBAAkD;AAAA,EACtD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAC/B,GAAI,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,EACjC;AACF;AAEA,IAAM,0BAA0D;AAAA,EAC9D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,eAAe,CAAC;AAAA,EAC3B;AACF;AAEA,IAAM,yBAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,YAAY,CAAC,CAAE;AAC/C;AAEA,IAAM,uBAAmD;AAAA,EACvD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,eAAe,CAAC;AAAA,IACzB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,EAC/B;AACF;AAEA,IAAM,6BAA8D;AAAA,EAClE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC,CAAE;AAC5D;AAEA,IAAM,oBAA6C;AAAA,EACjD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC;AAAA,IAC/B,GAAI,KAAK,SAAS,CAAC;AAAA,EACrB;AACF;AAEA,IAAM,4BAA6D;AAAA,EACjE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,WAAW,CAAC,KAAK,QAAQ,IAAI,CAAC;AAAA,IACvC,GAAI,KAAK,QAAQ,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC;AAAA,EAC9C;AACF;AAEA,IAAM,8BAAgE;AAAA,EACpE,MAAM;AAAA,EACN,UAAU,MAAM,CAAC;AACnB;AAEA,IAAM,yBAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,WAAW,CAAC,CAAE;AAC9C;AAEA,IAAM,wBAAqD;AAAA,EACzD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,QAAQ,CAAC,CAAE;AAAA,EACzC,UAAU,CAAC,SAAS;AAClB,QAAI,KAAK,WAAW;AAClB,YAAM,IAAI,MAAM,8BAA8B;AAAA,IAChD;AAAA,EACF;AACF;AAEA,IAAM,8BAAgE;AAAA,EACpE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,iBAAiB,CAAC;AAAA,IAC3B,GAAI,KAAK,WAAW,CAAC,KAAK,QAAQ,IAAI,CAAC;AAAA,IACvC,GAAI,KAAK,gBAAgB,CAAC,EAAE,iBAAiB,KAAK,cAAc,CAAC,IAAI,CAAC;AAAA,IACtE,GAAI,KAAK,eAAe,CAAC,EAAE,gBAAgB,KAAK,aAAa,CAAC,IAAI,CAAC;AAAA,IACnE,GAAI,KAAK,eAAe,CAAC;AAAA,IACzB,GAAI,KAAK,eAAe,CAAC;AAAA,IACzB,GAAI,KAAK,iBAAiB,CAAC;AAAA,IAC3B,GAAI,KAAK,oBAAoB,CAAC;AAAA,EAChC;AAAA,EACA,UAAU,CAAC,SAAS;AAClB,QAAI,KAAK,oBAAoB,0BAA0B,KAAK,cAAc;AACxE,YAAM,IAAI,MAAM,aAAa;AAAA,IAC/B;AAAA,EACF;AACF;AAEA,IAAM,wBAAqD;AAAA,EACzD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,YAAY,CAAC,EAAE,eAAe,KAAK,UAAU,CAAC,IAAI,CAAC;AAAA,EAC9D;AACF;AAEA,IAAM,2BAA0D;AAAA,EAC9D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;AAAA,IAC7B,GAAI,KAAK,QAAQ,CAAC,EAAE,eAAe,KAAK,MAAM,CAAC,IAAI,CAAC;AAAA,EACtD;AACF;AAEA,IAAM,oCACJ;AAAA,EACE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,SAAS,CAAC;AAAA,IACnB,GAAI,KAAK,SAAS,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC;AAAA,EACrD;AACF;AAEF,IAAM,mCACJ;AAAA,EACE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,SAAS,CAAC;AAAA,IACnB,GAAI,KAAK,SAAS,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC;AAAA,EACrD;AACF;AAEF,IAAM,yCACJ;AAAA,EACE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,QAAQ,CAAC,KAAK,KAAK,IAAI,CAAC;AAAA,IACjC,GAAI,KAAK,SAAS,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC;AAAA,IACnD,GAAI,KAAK,SAAS,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC;AAAA,EACrD;AACF;AAEF,IAAM,iCAAsE;AAAA,EAC1E,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,SAAS,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC;AAAA,IACnD,GAAI,KAAK,aAAa,CAAC,KAAK,UAAU,IAAI,CAAC;AAAA,IAC3C,GAAI,KAAK,aAAa,CAAC;AAAA,IACvB,GAAI,KAAK,OAAO,CAAC,EAAE,WAAW,KAAK,KAAK,CAAC,IAAI,CAAC;AAAA,EAChD;AACF;AAEA,IAAM,4BAA4D;AAAA,EAChE,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,cAAc,CAAC,EAAE,oBAAoB,KAAK,YAAY,CAAC,IAAI,CAAC;AAAA,IACrE,GAAI,KAAK,MAAM,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC,IAAI,CAAC;AAAA,EACjD;AACF;AAEA,IAAM,2BAA0D;AAAA,EAC9D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,cAAc,CAAC,EAAE,oBAAoB,KAAK,YAAY,CAAC,IAAI,CAAC;AAAA,IACrE,GAAI,KAAK,MAAM,CAAC,EAAE,eAAe,KAAK,IAAI,CAAC,IAAI,CAAC;AAAA,EAClD;AACF;AAEA,IAAM,wBAAqD;AAAA,EACzD,MAAM;AAAA,EACN,UAAU,CAAC,SAAS;AAAA,IAClB,GAAI,KAAK,kBAAkB,CAAC;AAAA,IAC5B,GAAI,KAAK,aAAa,CAAC,EAAE,YAAY,KAAK,WAAW,CAAC,IAAI,CAAC;AAAA,IAC3D,GAAI,KAAK,cAAc,CAAC;AAAA,IACxB,GAAI,KAAK,cAAc,CAAC;AAAA,IACxB,GAAI,KAAK,cAAc,CAAC,KAAK,WAAW,IAAI,CAAC;AAAA,IAC7C,GAAI,KAAK,eAAe,CAAC;AAAA,IACzB,GAAI,KAAK,eAAe,CAAC,KAAK,YAAY,IAAI,CAAC;AAAA,IAC/C,GAAI,KAAK,gBAAgB,CAAC;AAAA,IAC1B,GAAI,KAAK,eAAe,CAAC;AAAA,IACzB,GAAI,KAAK,cAAc,CAAC;AAAA,IACxB,GAAI,KAAK,cAAc,CAAC,KAAK,WAAW,IAAI,CAAC;AAAA,IAC7C,GAAI,KAAK,aAAa,CAAC,KAAK,UAAU,IAAI,CAAC;AAAA,IAC3C,GAAI,KAAK,iBAAiB,CAAC;AAAA,IAC3B,GAAI,KAAK,aAAa,CAAC,EAAE,YAAY,KAAK,WAAW,CAAC,IAAI,CAAC;AAAA,IAC3D,GAAI,KAAK,OAAO,CAAC,EAAE,YAAY,KAAK,KAAK,CAAC,IAAI,CAAC;AAAA,IAC/C,GAAI,KAAK,OAAO,CAAC,EAAE,YAAY,KAAK,KAAK,CAAC,IAAI,CAAC;AAAA,EACjD;AAAA,EACA,UAAU,CAAC,SAAS;AAClB,QAAI,KAAK,eAAe;AACtB,YAAM,IAAI,MAAM,eAAe;AAAA,IACjC;AAAA,EACF;AACF;AAEA,IAAM,yBAAuD;AAAA,EAC3D,MAAM;AAAA,EACN,UAAU,CAAC,SAAS,CAAC,GAAI,KAAK,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC,CAAE;AAC5D;AAGA,IAAM,aAAa,IAAI;AAAA,EACrB;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC;AACnC;AAiLA,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA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","names":["factory","sql","client","createMiddleware","GraphQLScalarType","GraphQLScalarType","relations","table","relation","status","innerType","rows","totalCount","cursorObject","cursorCondition","index","createMiddleware","eq","gt","gte","lt","lte","ne","inArray","notInArray","like","notLike","not","asc","desc","and","or","count","bigint"]}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @description Combines members of an intersection into a readable type.
3
+ *
4
+ * @link https://twitter.com/mattpocockuk/status/1622730173446557697?s=20&t=NdpAcmEFXY01xkqU3KO0Mg
5
+ * @example
6
+ * Prettify<{ a: string } | { b: string } | { c: number, d: bigint }>
7
+ * => { a: string, b: string, c: number, d: bigint }
8
+ */
9
+ type Prettify<T> = {
10
+ [K in keyof T]: T[K];
11
+ } & {};
12
+ type PonderTypeError<error extends string> = error;
13
+
14
+ export type { Prettify as P, PonderTypeError as a };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ponder",
3
- "version": "0.9.5-debug.1",
3
+ "version": "0.9.5",
4
4
  "description": "An open-source framework for crypto application backends",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -12,22 +12,20 @@
12
12
  "files": [
13
13
  "dist",
14
14
  "src/**/*.ts",
15
- "!src/_test/**/*",
16
- "!**/*.test.ts",
17
- "!**/*.test-d.ts",
18
- "!**/*.tsbuildinfo",
19
- "CHANGELOG.md"
15
+ "!src/**/*.test.ts",
16
+ "!src/**/*.test-d.ts",
17
+ "!src/_test/**/*"
20
18
  ],
21
19
  "bin": {
22
- "ponder": "./dist/esm/bin/ponder.js"
20
+ "ponder": "./dist/bin/ponder.js"
23
21
  },
24
- "module": "./dist/esm/index.js",
25
- "types": "./dist/types/index.d.ts",
26
- "typings": "./dist/types/index.d.ts",
22
+ "module": "./dist/index.js",
23
+ "types": "./dist/index.d.ts",
24
+ "typings": "./dist/index.d.ts",
27
25
  "exports": {
28
26
  ".": {
29
- "types": "./dist/types/index.d.ts",
30
- "import": "./dist/esm/index.js"
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/index.js"
31
29
  },
32
30
  "./virtual": {
33
31
  "types": "./src/types.d.ts"
@@ -87,18 +85,20 @@
87
85
  "@types/react": "^18.2.38",
88
86
  "@viem/anvil": "^0.0.6",
89
87
  "@wagmi/cli": "^1.5.2",
90
- "chokidar": "^4.0.3",
91
88
  "execa": "^8.0.1",
92
89
  "rimraf": "^5.0.5",
93
- "tsx": "^4.19.2",
94
- "vitest": "^1.0.2",
95
- "@ponder/client": "0.9.5"
90
+ "tsup": "^8.0.1",
91
+ "vitest": "^1.0.2"
92
+ },
93
+ "imports": {
94
+ "@ponder/common": "../common/index.ts",
95
+ "@ponder/client": "../client/index.ts"
96
96
  },
97
97
  "engines": {
98
98
  "node": ">=18.14"
99
99
  },
100
100
  "scripts": {
101
- "build": "tsx build.ts",
101
+ "build": "tsup",
102
102
  "test": "vitest",
103
103
  "test:typecheck": "vitest --typecheck.only",
104
104
  "typecheck": "tsc --noEmit"
@@ -9,8 +9,8 @@ import { createShutdown } from "@/internal/shutdown.js";
9
9
  import { buildPayload, createTelemetry } from "@/internal/telemetry.js";
10
10
  import type { IndexingBuild } from "@/internal/types.js";
11
11
  import { createUi } from "@/ui/index.js";
12
- import { createQueue } from "@/utils/queue.js";
13
12
  import { type Result, mergeResults } from "@/utils/result.js";
13
+ import { createQueue } from "@ponder/common";
14
14
  import type { CliOptions } from "../ponder.js";
15
15
  import { createExit } from "../utils/exit.js";
16
16
  import { run } from "../utils/run.js";
package/src/bin/ponder.ts CHANGED
@@ -14,7 +14,7 @@ import { start } from "./commands/start.js";
14
14
  dotenv.config({ path: ".env.local" });
15
15
 
16
16
  const __dirname = dirname(fileURLToPath(import.meta.url));
17
- const packageJsonPath = resolve(__dirname, "../../../package.json");
17
+ const packageJsonPath = resolve(__dirname, "../../package.json");
18
18
  const packageJson = JSON.parse(
19
19
  readFileSync(packageJsonPath, { encoding: "utf8" }),
20
20
  );
@@ -25,8 +25,8 @@ import {
25
25
  } from "@/sync/filter.js";
26
26
  import type { SyncBlock } from "@/types/sync.js";
27
27
  import { chains } from "@/utils/chains.js";
28
- import { dedupe } from "@/utils/dedupe.js";
29
28
  import { toLowerCase } from "@/utils/lowercase.js";
29
+ import { dedupe } from "@ponder/common";
30
30
  import { BlockNotFoundError, type Hex, type LogTopic, hexToNumber } from "viem";
31
31
  import { buildLogFactory } from "./factory.js";
32
32
 
@@ -1,7 +1,7 @@
1
1
  import type { LogFactory } from "@/internal/types.js";
2
- import { dedupe } from "@/utils/dedupe.js";
3
2
  import { toLowerCase } from "@/utils/lowercase.js";
4
3
  import { getBytesConsumedByParam } from "@/utils/offset.js";
4
+ import { dedupe } from "@ponder/common";
5
5
  import type { AbiEvent } from "abitype";
6
6
  import { type Address, toEventSelector } from "viem";
7
7
 
@@ -1,6 +1,6 @@
1
1
  import type { Schema } from "@/internal/types.js";
2
2
  import type { ReadonlyDrizzle } from "@/types/db.js";
3
- import { promiseWithResolvers } from "@/utils/promiseWithResolvers.js";
3
+ import { promiseWithResolvers } from "@ponder/common";
4
4
  import type { QueryWithTypings } from "drizzle-orm";
5
5
  import { type PgSession, pgTable } from "drizzle-orm/pg-core";
6
6
  import { createMiddleware } from "hono/factory";
@@ -14,7 +14,7 @@ import {
14
14
  } from "@/internal/errors.js";
15
15
  import type { SchemaBuild } from "@/internal/types.js";
16
16
  import { prettyPrint } from "@/utils/print.js";
17
- import { createQueue } from "@/utils/queue.js";
17
+ import { createQueue } from "@ponder/common";
18
18
  import {
19
19
  type Column,
20
20
  type QueryWithTypings,
@@ -9,7 +9,6 @@ import {
9
9
  } from "@/internal/errors.js";
10
10
  import type { SchemaBuild } from "@/internal/types.js";
11
11
  import { prettyPrint } from "@/utils/print.js";
12
- import { createQueue } from "@/utils/queue.js";
13
12
  import {
14
13
  type QueryWithTypings,
15
14
  type SQL,
@@ -21,6 +20,7 @@ import {
21
20
  } from "drizzle-orm";
22
21
  import { type PgTable, getTableConfig } from "drizzle-orm/pg-core";
23
22
  import { drizzle } from "drizzle-orm/pg-proxy";
23
+ import { createQueue } from "../../../common/src/queue.js";
24
24
  import { normalizeColumn } from "./historical.js";
25
25
  import { type IndexingStore, parseSqlError } from "./index.js";
26
26
 
@@ -5,8 +5,8 @@ import os from "node:os";
5
5
  import path from "node:path";
6
6
  import { promisify } from "node:util";
7
7
  import type { Options } from "@/internal/options.js";
8
- import { createQueue } from "@/utils/queue.js";
9
8
  import { startClock } from "@/utils/timer.js";
9
+ import { createQueue } from "@ponder/common";
10
10
  import Conf from "conf";
11
11
  import { type PM, detect, getNpmVersion } from "detect-package-manager";
12
12
  import { ShutdownError } from "./errors.js";
@@ -12,7 +12,7 @@ import type {
12
12
  TransactionFilter,
13
13
  TransferFilter,
14
14
  } from "@/internal/types.js";
15
- import { dedupe } from "@/utils/dedupe.js";
15
+ import { dedupe } from "@ponder/common";
16
16
  import type { Address, Hex } from "viem";
17
17
  import { isAddressFactory, shouldGetTransactionReceipt } from "./filter.js";
18
18
 
@@ -32,7 +32,6 @@ import type {
32
32
  SyncTransactionReceipt,
33
33
  } from "@/types/sync.js";
34
34
  import { mutex } from "@/utils/mutex.js";
35
- import type { Queue } from "@/utils/queue.js";
36
35
  import { range } from "@/utils/range.js";
37
36
  import type { RequestQueue } from "@/utils/requestQueue.js";
38
37
  import {
@@ -45,6 +44,7 @@ import {
45
44
  } from "@/utils/rpc.js";
46
45
  import { startClock } from "@/utils/timer.js";
47
46
  import { wait } from "@/utils/wait.js";
47
+ import type { Queue } from "@ponder/common";
48
48
  import { type Address, type Hash, hexToNumber, zeroHash } from "viem";
49
49
  import { isFilterInBloom, zeroLogsBloom } from "./bloom.js";
50
50
 
@@ -1,4 +1,4 @@
1
- import { promiseWithResolvers } from "@/utils/promiseWithResolvers.js";
1
+ import { promiseWithResolvers } from "@ponder/common";
2
2
 
3
3
  /**
4
4
  * Merges multiple async generators into a single async generator.
@@ -1,4 +1,4 @@
1
- import { type Queue, createQueue } from "@/utils/queue.js";
1
+ import { type Queue, createQueue } from "@ponder/common";
2
2
 
3
3
  export type Mutex<T, P> = ((params: T) => Promise<P>) & Queue<P, T>;
4
4
 
@@ -1,7 +1,7 @@
1
1
  import type { Common } from "@/internal/common.js";
2
2
  import { ShutdownError } from "@/internal/errors.js";
3
3
  import type { Network } from "@/internal/types.js";
4
- import { type Queue, createQueue } from "@/utils/queue.js";
4
+ import { type Queue, createQueue } from "@ponder/common";
5
5
  import {
6
6
  type GetLogsRetryHelperParameters,
7
7
  getLogsRetryHelper,