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
@@ -1,704 +0,0 @@
1
- import { never } from '../utils/never.js';
2
- import { deserialize, serialize } from '../utils/serialize.js';
3
- import DataLoader from "dataloader";
4
- import { Many, One, and, arrayContained, arrayContains, asc, count, createTableRelationsHelpers, desc, eq, extractTablesRelationalConfig, getTableColumns, gt, gte, inArray, is, like, lt, lte, ne, not, notInArray, notLike, or, } from "drizzle-orm";
5
- import { PgEnumColumn, PgInteger, PgSerial, isPgEnum, } from "drizzle-orm/pg-core";
6
- import { GraphQLBoolean, GraphQLEnumType, GraphQLFloat, GraphQLInputObjectType, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLScalarType, GraphQLSchema, GraphQLString, } from "graphql";
7
- import { GraphQLJSON } from "./json.js";
8
- const DEFAULT_LIMIT = 50;
9
- const MAX_LIMIT = 1000;
10
- export function buildGraphQLSchema({ schema, }) {
11
- const tablesConfig = extractTablesRelationalConfig(schema, createTableRelationsHelpers);
12
- const tables = Object.values(tablesConfig.tables);
13
- const enums = Object.entries(schema).filter((el) => isPgEnum(el[1]));
14
- const enumTypes = {};
15
- for (const [enumTsName, enumObject] of enums) {
16
- // Note that this is keyed by enumName (the SQL name) because that's what is
17
- // available on the PgEnumColumn type. See `columnToGraphQLCore` for context.
18
- enumTypes[enumObject.enumName] = new GraphQLEnumType({
19
- name: enumTsName,
20
- values: enumObject.enumValues.reduce((acc, cur) => ({ ...acc, [cur]: {} }), {}),
21
- });
22
- }
23
- const entityFilterTypes = {};
24
- for (const table of tables) {
25
- const filterType = new GraphQLInputObjectType({
26
- name: `${table.tsName}Filter`,
27
- fields: () => {
28
- const filterFields = {
29
- // Logical operators
30
- AND: { type: new GraphQLList(filterType) },
31
- OR: { type: new GraphQLList(filterType) },
32
- };
33
- for (const [columnName, column] of Object.entries(table.columns)) {
34
- const type = columnToGraphQLCore(column, enumTypes);
35
- // List fields => universal, plural
36
- if (type instanceof GraphQLList) {
37
- const baseType = innerType(type);
38
- conditionSuffixes.universal.forEach((suffix) => {
39
- filterFields[`${columnName}${suffix}`] = {
40
- type: new GraphQLList(baseType),
41
- };
42
- });
43
- conditionSuffixes.plural.forEach((suffix) => {
44
- filterFields[`${columnName}${suffix}`] = { type: baseType };
45
- });
46
- }
47
- // JSON => no filters.
48
- // Boolean => universal and singular only.
49
- // All other scalar => universal, singular, numeric OR string depending on type
50
- if (type instanceof GraphQLScalarType ||
51
- type instanceof GraphQLEnumType) {
52
- if (type.name === "JSON")
53
- continue;
54
- conditionSuffixes.universal.forEach((suffix) => {
55
- filterFields[`${columnName}${suffix}`] = {
56
- type,
57
- };
58
- });
59
- conditionSuffixes.singular.forEach((suffix) => {
60
- filterFields[`${columnName}${suffix}`] = {
61
- type: new GraphQLList(type),
62
- };
63
- });
64
- if (["String", "ID"].includes(type.name)) {
65
- conditionSuffixes.string.forEach((suffix) => {
66
- filterFields[`${columnName}${suffix}`] = {
67
- type: type,
68
- };
69
- });
70
- }
71
- if (["Int", "Float", "BigInt"].includes(type.name)) {
72
- conditionSuffixes.numeric.forEach((suffix) => {
73
- filterFields[`${columnName}${suffix}`] = {
74
- type: type,
75
- };
76
- });
77
- }
78
- }
79
- }
80
- return filterFields;
81
- },
82
- });
83
- entityFilterTypes[table.tsName] = filterType;
84
- }
85
- const entityTypes = {};
86
- const entityPageTypes = {};
87
- for (const table of tables) {
88
- entityTypes[table.tsName] = new GraphQLObjectType({
89
- name: table.tsName,
90
- fields: () => {
91
- const fieldConfigMap = {};
92
- // Scalar fields
93
- for (const [columnName, column] of Object.entries(table.columns)) {
94
- const type = columnToGraphQLCore(column, enumTypes);
95
- fieldConfigMap[columnName] = {
96
- type: column.notNull ? new GraphQLNonNull(type) : type,
97
- };
98
- }
99
- // Relations
100
- const relations = Object.entries(table.relations);
101
- for (const [relationName, relation] of relations) {
102
- const referencedTable = tables.find((table) => table.dbName === relation.referencedTableName);
103
- if (!referencedTable)
104
- throw new Error(`Internal error: Referenced table "${relation.referencedTableName}" not found`);
105
- const referencedEntityType = entityTypes[referencedTable.tsName];
106
- const referencedEntityPageType = entityPageTypes[referencedTable.tsName];
107
- const referencedEntityFilterType = entityFilterTypes[referencedTable.tsName];
108
- if (referencedEntityType === undefined ||
109
- referencedEntityPageType === undefined ||
110
- referencedEntityFilterType === undefined)
111
- throw new Error(`Internal error: Referenced entity types not found for table "${referencedTable.tsName}" `);
112
- if (is(relation, One)) {
113
- const fields = relation.config?.fields ?? [];
114
- const references = relation.config?.references ?? [];
115
- if (fields.length !== references.length) {
116
- throw new Error("Internal error: Fields and references arrays must be the same length");
117
- }
118
- fieldConfigMap[relationName] = {
119
- // Note: There is a `relation.isNullable` field here but it appears
120
- // to be internal / incorrect. Until we have support for foriegn
121
- // key constraints, all `one` relations must be nullable.
122
- type: referencedEntityType,
123
- resolve: (parent, _args, context) => {
124
- const loader = context.getDataLoader({
125
- table: referencedTable,
126
- });
127
- const rowFragment = {};
128
- for (let i = 0; i < references.length; i++) {
129
- const referenceColumn = references[i];
130
- const fieldColumn = fields[i];
131
- const fieldColumnTsName = getColumnTsName(fieldColumn);
132
- const referenceColumnTsName = getColumnTsName(referenceColumn);
133
- rowFragment[referenceColumnTsName] =
134
- parent[fieldColumnTsName];
135
- }
136
- const encodedId = encodeRowFragment(rowFragment);
137
- return loader.load(encodedId);
138
- },
139
- };
140
- }
141
- else if (is(relation, Many)) {
142
- // Search the relations of the referenced table for the corresponding `one` relation.
143
- // If "relationName" is not provided, use the first `one` relation that references this table.
144
- const oneRelation = Object.values(referencedTable.relations).find((relation) => relation.relationName === relationName ||
145
- (is(relation, One) &&
146
- relation.referencedTableName === table.dbName));
147
- if (!oneRelation)
148
- throw new Error(`Internal error: Relation "${relationName}" not found in table "${referencedTable.tsName}"`);
149
- const fields = oneRelation.config?.fields ?? [];
150
- const references = oneRelation.config?.references ?? [];
151
- fieldConfigMap[relationName] = {
152
- type: referencedEntityPageType,
153
- args: {
154
- where: { type: referencedEntityFilterType },
155
- orderBy: { type: GraphQLString },
156
- orderDirection: { type: GraphQLString },
157
- before: { type: GraphQLString },
158
- after: { type: GraphQLString },
159
- limit: { type: GraphQLInt },
160
- },
161
- resolve: (parent, args, context, info) => {
162
- const relationalConditions = [];
163
- for (let i = 0; i < references.length; i++) {
164
- const column = fields[i];
165
- const value = parent[references[i].name];
166
- relationalConditions.push(eq(column, value));
167
- }
168
- const includeTotalCount = selectionIncludesField(info, "totalCount");
169
- return executePluralQuery(referencedTable, context.drizzle, args, includeTotalCount, relationalConditions);
170
- },
171
- };
172
- }
173
- else {
174
- throw new Error(`Internal error: Relation "${relationName}" is unsupported, expected One or Many`);
175
- }
176
- }
177
- return fieldConfigMap;
178
- },
179
- });
180
- entityPageTypes[table.tsName] = new GraphQLObjectType({
181
- name: `${table.tsName}Page`,
182
- fields: () => ({
183
- items: {
184
- type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(entityTypes[table.tsName]))),
185
- },
186
- pageInfo: { type: new GraphQLNonNull(GraphQLPageInfo) },
187
- totalCount: { type: new GraphQLNonNull(GraphQLInt) },
188
- }),
189
- });
190
- }
191
- const queryFields = {};
192
- for (const table of tables) {
193
- const entityType = entityTypes[table.tsName];
194
- const entityPageType = entityPageTypes[table.tsName];
195
- const entityFilterType = entityFilterTypes[table.tsName];
196
- const singularFieldName = table.tsName.charAt(0).toLowerCase() + table.tsName.slice(1);
197
- const pluralFieldName = `${singularFieldName}s`;
198
- queryFields[singularFieldName] = {
199
- type: entityType,
200
- // Find the primary key columns and GraphQL core types and include them
201
- // as arguments to the singular query type.
202
- args: Object.fromEntries(table.primaryKey.map((column) => [
203
- getColumnTsName(column),
204
- {
205
- type: new GraphQLNonNull(columnToGraphQLCore(column, enumTypes)),
206
- },
207
- ])),
208
- resolve: async (_parent, args, context) => {
209
- const loader = context.getDataLoader({ table });
210
- // The `args` object here should be a valid `where` argument that
211
- // uses the `eq` shorthand for each primary key column.
212
- const encodedId = encodeRowFragment(args);
213
- return loader.load(encodedId);
214
- },
215
- };
216
- queryFields[pluralFieldName] = {
217
- type: new GraphQLNonNull(entityPageType),
218
- args: {
219
- where: { type: entityFilterType },
220
- orderBy: { type: GraphQLString },
221
- orderDirection: { type: GraphQLString },
222
- before: { type: GraphQLString },
223
- after: { type: GraphQLString },
224
- limit: { type: GraphQLInt },
225
- },
226
- resolve: async (_parent, args, context, info) => {
227
- const includeTotalCount = selectionIncludesField(info, "totalCount");
228
- return executePluralQuery(table, context.drizzle, args, includeTotalCount);
229
- },
230
- };
231
- }
232
- queryFields._meta = {
233
- type: GraphQLMeta,
234
- resolve: async (_source, _args, context) => {
235
- const status = await context.metadataStore.getStatus();
236
- return { status };
237
- },
238
- };
239
- return new GraphQLSchema({
240
- // Include these here so they are listed first in the printed schema.
241
- types: [GraphQLJSON, GraphQLBigInt, GraphQLPageInfo, GraphQLMeta],
242
- query: new GraphQLObjectType({
243
- name: "Query",
244
- fields: queryFields,
245
- }),
246
- });
247
- }
248
- const GraphQLPageInfo = new GraphQLObjectType({
249
- name: "PageInfo",
250
- fields: {
251
- hasNextPage: { type: new GraphQLNonNull(GraphQLBoolean) },
252
- hasPreviousPage: { type: new GraphQLNonNull(GraphQLBoolean) },
253
- startCursor: { type: GraphQLString },
254
- endCursor: { type: GraphQLString },
255
- },
256
- });
257
- const GraphQLBigInt = new GraphQLScalarType({
258
- name: "BigInt",
259
- serialize: (value) => String(value),
260
- parseValue: (value) => BigInt(value),
261
- parseLiteral: (value) => {
262
- if (value.kind === "StringValue") {
263
- return BigInt(value.value);
264
- }
265
- else {
266
- throw new Error(`Invalid value kind provided for field of type BigInt: ${value.kind}. Expected: StringValue`);
267
- }
268
- },
269
- });
270
- const GraphQLMeta = new GraphQLObjectType({
271
- name: "Meta",
272
- fields: { status: { type: GraphQLJSON } },
273
- });
274
- const columnToGraphQLCore = (column, enumTypes) => {
275
- if (column.columnType === "PgEvmBigint") {
276
- return GraphQLBigInt;
277
- }
278
- if (column instanceof PgEnumColumn) {
279
- if (column.enum === undefined) {
280
- throw new Error(`Internal error: Expected enum column "${getColumnTsName(column)}" to have an "enum" property`);
281
- }
282
- const enumType = enumTypes[column.enum.enumName];
283
- if (enumType === undefined) {
284
- throw new Error(`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`);
285
- }
286
- return enumType;
287
- }
288
- switch (column.dataType) {
289
- case "boolean":
290
- return GraphQLBoolean;
291
- case "json":
292
- return GraphQLJSON;
293
- case "date":
294
- return GraphQLString;
295
- case "string":
296
- return GraphQLString;
297
- case "bigint":
298
- return GraphQLString;
299
- case "number":
300
- return is(column, PgInteger) || is(column, PgSerial)
301
- ? GraphQLInt
302
- : GraphQLFloat;
303
- case "buffer":
304
- return new GraphQLList(new GraphQLNonNull(GraphQLInt));
305
- case "array": {
306
- if (column.columnType === "PgVector") {
307
- return new GraphQLList(new GraphQLNonNull(GraphQLFloat));
308
- }
309
- if (column.columnType === "PgGeometry") {
310
- return new GraphQLList(new GraphQLNonNull(GraphQLFloat));
311
- }
312
- const innerType = columnToGraphQLCore(column.baseColumn, enumTypes);
313
- return new GraphQLList(new GraphQLNonNull(innerType));
314
- }
315
- default:
316
- throw new Error(`Type ${column.dataType} is not implemented`);
317
- }
318
- };
319
- const innerType = (type) => {
320
- if (type instanceof GraphQLScalarType || type instanceof GraphQLEnumType)
321
- return type;
322
- if (type instanceof GraphQLList || type instanceof GraphQLNonNull)
323
- return innerType(type.ofType);
324
- throw new Error(`Type ${type.toString()} is not implemented`);
325
- };
326
- async function executePluralQuery(table, drizzle, args, includeTotalCount, extraConditions = []) {
327
- const rawTable = drizzle._.fullSchema[table.tsName];
328
- const baseQuery = drizzle.query[table.tsName];
329
- if (rawTable === undefined || baseQuery === undefined)
330
- throw new Error(`Internal error: Table "${table.tsName}" not found in RQB`);
331
- const limit = args.limit ?? DEFAULT_LIMIT;
332
- if (limit > MAX_LIMIT) {
333
- throw new Error(`Invalid limit. Got ${limit}, expected <=${MAX_LIMIT}.`);
334
- }
335
- const orderBySchema = buildOrderBySchema(table, args);
336
- const orderBy = orderBySchema.map(([columnName, direction]) => {
337
- const column = table.columns[columnName];
338
- if (column === undefined) {
339
- throw new Error(`Unknown column "${columnName}" used in orderBy argument`);
340
- }
341
- return direction === "asc" ? asc(column) : desc(column);
342
- });
343
- const orderByReversed = orderBySchema.map(([columnName, direction]) => {
344
- const column = table.columns[columnName];
345
- if (column === undefined) {
346
- throw new Error(`Unknown column "${columnName}" used in orderBy argument`);
347
- }
348
- return direction === "asc" ? desc(column) : asc(column);
349
- });
350
- const whereConditions = buildWhereConditions(args.where, table.columns);
351
- const after = args.after ?? null;
352
- const before = args.before ?? null;
353
- if (after !== null && before !== null) {
354
- throw new Error("Cannot specify both before and after cursors.");
355
- }
356
- let startCursor = null;
357
- let endCursor = null;
358
- let hasPreviousPage = false;
359
- let hasNextPage = false;
360
- const totalCountPromise = includeTotalCount
361
- ? drizzle
362
- .select({ count: count() })
363
- .from(rawTable)
364
- .where(and(...whereConditions, ...extraConditions))
365
- .then((rows) => rows[0]?.count ?? null)
366
- : Promise.resolve(null);
367
- // Neither cursors are specified, apply the order conditions and execute.
368
- if (after === null && before === null) {
369
- const [rows, totalCount] = await Promise.all([
370
- baseQuery.findMany({
371
- where: and(...whereConditions, ...extraConditions),
372
- orderBy,
373
- limit: limit + 1,
374
- }),
375
- totalCountPromise,
376
- ]);
377
- if (rows.length === limit + 1) {
378
- rows.pop();
379
- hasNextPage = true;
380
- }
381
- startCursor =
382
- rows.length > 0 ? encodeCursor(orderBySchema, rows[0]) : null;
383
- endCursor =
384
- rows.length > 0
385
- ? encodeCursor(orderBySchema, rows[rows.length - 1])
386
- : null;
387
- return {
388
- items: rows,
389
- totalCount,
390
- pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },
391
- };
392
- }
393
- if (after !== null) {
394
- // User specified an 'after' cursor.
395
- const cursorObject = decodeCursor(after);
396
- const cursorCondition = buildCursorCondition(table, orderBySchema, "after", cursorObject);
397
- const [rows, totalCount] = await Promise.all([
398
- baseQuery.findMany({
399
- where: and(...whereConditions, cursorCondition, ...extraConditions),
400
- orderBy,
401
- limit: limit + 2,
402
- }),
403
- totalCountPromise,
404
- ]);
405
- if (rows.length === 0) {
406
- return {
407
- items: rows,
408
- totalCount,
409
- pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },
410
- };
411
- }
412
- // If the cursor of the first returned record equals the `after` cursor,
413
- // `hasPreviousPage` is true. Remove that record.
414
- if (encodeCursor(orderBySchema, rows[0]) === after) {
415
- rows.shift();
416
- hasPreviousPage = true;
417
- }
418
- else {
419
- // Otherwise, remove the last record.
420
- rows.pop();
421
- }
422
- // Now if the length of the records is still equal to limit + 1,
423
- // there is a next page.
424
- if (rows.length === limit + 1) {
425
- rows.pop();
426
- hasNextPage = true;
427
- }
428
- // Now calculate the cursors.
429
- startCursor =
430
- rows.length > 0 ? encodeCursor(orderBySchema, rows[0]) : null;
431
- endCursor =
432
- rows.length > 0
433
- ? encodeCursor(orderBySchema, rows[rows.length - 1])
434
- : null;
435
- return {
436
- items: rows,
437
- totalCount,
438
- pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },
439
- };
440
- }
441
- // User specified a 'before' cursor.
442
- const cursorObject = decodeCursor(before);
443
- const cursorCondition = buildCursorCondition(table, orderBySchema, "before", cursorObject);
444
- // Reverse the order by conditions to get the previous page,
445
- // then reverse the results back to the original order.
446
- const [rows, totalCount] = await Promise.all([
447
- baseQuery
448
- .findMany({
449
- where: and(...whereConditions, cursorCondition, ...extraConditions),
450
- orderBy: orderByReversed,
451
- limit: limit + 2,
452
- })
453
- .then((rows) => rows.reverse()),
454
- totalCountPromise,
455
- ]);
456
- if (rows.length === 0) {
457
- return {
458
- items: rows,
459
- totalCount,
460
- pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },
461
- };
462
- }
463
- // If the cursor of the last returned record equals the `before` cursor,
464
- // `hasNextPage` is true. Remove that record.
465
- if (encodeCursor(orderBySchema, rows[rows.length - 1]) === before) {
466
- rows.pop();
467
- hasNextPage = true;
468
- }
469
- else {
470
- // Otherwise, remove the first record.
471
- rows.shift();
472
- }
473
- // Now if the length of the records is equal to limit + 1, we know
474
- // there is a previous page.
475
- if (rows.length === limit + 1) {
476
- rows.shift();
477
- hasPreviousPage = true;
478
- }
479
- // Now calculate the cursors.
480
- startCursor = rows.length > 0 ? encodeCursor(orderBySchema, rows[0]) : null;
481
- endCursor =
482
- rows.length > 0
483
- ? encodeCursor(orderBySchema, rows[rows.length - 1])
484
- : null;
485
- return {
486
- items: rows,
487
- totalCount,
488
- pageInfo: { hasNextPage, hasPreviousPage, startCursor, endCursor },
489
- };
490
- }
491
- const conditionSuffixes = {
492
- universal: ["", "_not"],
493
- singular: ["_in", "_not_in"],
494
- plural: ["_has", "_not_has"],
495
- numeric: ["_gt", "_lt", "_gte", "_lte"],
496
- string: [
497
- "_contains",
498
- "_not_contains",
499
- "_starts_with",
500
- "_ends_with",
501
- "_not_starts_with",
502
- "_not_ends_with",
503
- ],
504
- };
505
- const conditionSuffixesByLengthDesc = Object.values(conditionSuffixes)
506
- .flat()
507
- .sort((a, b) => b.length - a.length);
508
- function buildWhereConditions(where, columns) {
509
- const conditions = [];
510
- if (where === undefined)
511
- return conditions;
512
- for (const [whereKey, rawValue] of Object.entries(where)) {
513
- // Handle the `AND` and `OR` operators
514
- if (whereKey === "AND" || whereKey === "OR") {
515
- if (!Array.isArray(rawValue)) {
516
- throw new Error(`Invalid query: Expected an array for the ${whereKey} operator. Got: ${rawValue}`);
517
- }
518
- const nestedConditions = rawValue.flatMap((subWhere) => buildWhereConditions(subWhere, columns));
519
- if (nestedConditions.length > 0) {
520
- conditions.push(whereKey === "AND"
521
- ? and(...nestedConditions)
522
- : or(...nestedConditions));
523
- }
524
- continue;
525
- }
526
- // Search for a valid filter suffix, traversing the list from longest to shortest
527
- // to avoid ambiguity between cases like `_not_in` and `_in`.
528
- const conditionSuffix = conditionSuffixesByLengthDesc.find((s) => whereKey.endsWith(s));
529
- if (conditionSuffix === undefined) {
530
- throw new Error(`Invariant violation: Condition suffix not found for where key ${whereKey}`);
531
- }
532
- // Remove the condition suffix and use the remaining string as the column name.
533
- const columnName = whereKey.slice(0, whereKey.length - conditionSuffix.length);
534
- // Validate that the column name is present in the table.
535
- const column = columns[columnName];
536
- if (column === undefined) {
537
- throw new Error(`Invalid query: Where clause contains unknown column ${columnName}`);
538
- }
539
- switch (conditionSuffix) {
540
- case "":
541
- if (column.columnType === "PgArray") {
542
- conditions.push(and(arrayContains(column, rawValue), arrayContained(column, rawValue)));
543
- }
544
- else {
545
- conditions.push(eq(column, rawValue));
546
- }
547
- break;
548
- case "_not":
549
- if (column.columnType === "PgArray") {
550
- conditions.push(not(and(arrayContains(column, rawValue), arrayContained(column, rawValue))));
551
- }
552
- else {
553
- conditions.push(ne(column, rawValue));
554
- }
555
- break;
556
- case "_in":
557
- conditions.push(inArray(column, rawValue));
558
- break;
559
- case "_not_in":
560
- conditions.push(notInArray(column, rawValue));
561
- break;
562
- case "_has":
563
- conditions.push(arrayContains(column, [rawValue]));
564
- break;
565
- case "_not_has":
566
- conditions.push(not(arrayContains(column, [rawValue])));
567
- break;
568
- case "_gt":
569
- conditions.push(gt(column, rawValue));
570
- break;
571
- case "_lt":
572
- conditions.push(lt(column, rawValue));
573
- break;
574
- case "_gte":
575
- conditions.push(gte(column, rawValue));
576
- break;
577
- case "_lte":
578
- conditions.push(lte(column, rawValue));
579
- break;
580
- case "_contains":
581
- conditions.push(like(column, `%${rawValue}%`));
582
- break;
583
- case "_not_contains":
584
- conditions.push(notLike(column, `%${rawValue}%`));
585
- break;
586
- case "_starts_with":
587
- conditions.push(like(column, `${rawValue}%`));
588
- break;
589
- case "_ends_with":
590
- conditions.push(like(column, `%${rawValue}`));
591
- break;
592
- case "_not_starts_with":
593
- conditions.push(notLike(column, `${rawValue}%`));
594
- break;
595
- case "_not_ends_with":
596
- conditions.push(notLike(column, `%${rawValue}`));
597
- break;
598
- default:
599
- never(conditionSuffix);
600
- }
601
- }
602
- return conditions;
603
- }
604
- function buildOrderBySchema(table, args) {
605
- // If the user-provided order by does not include the ALL of the ID columns,
606
- // add any missing ID columns to the end of the order by clause (asc).
607
- // This ensures a consistent sort order to unblock cursor pagination.
608
- const userDirection = args.orderDirection ?? "asc";
609
- const userColumns = args.orderBy !== undefined ? [[args.orderBy, userDirection]] : [];
610
- const pkColumns = table.primaryKey.map((column) => [
611
- getColumnTsName(column),
612
- userDirection,
613
- ]);
614
- const missingPkColumns = pkColumns.filter((pkColumn) => !userColumns.some((userColumn) => userColumn[0] === pkColumn[0]));
615
- return [...userColumns, ...missingPkColumns];
616
- }
617
- function encodeCursor(orderBySchema, row) {
618
- const cursorObject = Object.fromEntries(orderBySchema.map(([columnName, _]) => [columnName, row[columnName]]));
619
- return encodeRowFragment(cursorObject);
620
- }
621
- function decodeCursor(cursor) {
622
- return decodeRowFragment(cursor);
623
- }
624
- function encodeRowFragment(rowFragment) {
625
- return Buffer.from(serialize(rowFragment)).toString("base64");
626
- }
627
- function decodeRowFragment(encodedRowFragment) {
628
- return deserialize(Buffer.from(encodedRowFragment, "base64").toString());
629
- }
630
- function buildCursorCondition(table, orderBySchema, direction, cursorObject) {
631
- const cursorColumns = orderBySchema.map(([columnName, orderDirection]) => {
632
- const column = table.columns[columnName];
633
- if (column === undefined)
634
- throw new Error(`Unknown column "${columnName}" used in orderBy argument`);
635
- const value = cursorObject[columnName];
636
- let comparator;
637
- let comparatorOrEquals;
638
- if (direction === "after") {
639
- [comparator, comparatorOrEquals] =
640
- orderDirection === "asc" ? [gt, gte] : [lt, lte];
641
- }
642
- else {
643
- [comparator, comparatorOrEquals] =
644
- orderDirection === "asc" ? [lt, lte] : [gt, gte];
645
- }
646
- return { column, value, comparator, comparatorOrEquals };
647
- });
648
- const buildCondition = (index) => {
649
- if (index === cursorColumns.length - 1) {
650
- const { column, value, comparatorOrEquals } = cursorColumns[index];
651
- return comparatorOrEquals(column, value);
652
- }
653
- const currentColumn = cursorColumns[index];
654
- const nextCondition = buildCondition(index + 1);
655
- return or(currentColumn.comparator(currentColumn.column, currentColumn.value), and(eq(currentColumn.column, currentColumn.value), nextCondition));
656
- };
657
- return buildCondition(0);
658
- }
659
- export function buildDataLoaderCache({ drizzle, }) {
660
- const dataLoaderMap = new Map();
661
- return ({ table }) => {
662
- const baseQuery = drizzle
663
- .query[table.tsName];
664
- if (baseQuery === undefined)
665
- throw new Error(`Internal error: Unknown table "${table.tsName}" in data loader cache`);
666
- let dataLoader = dataLoaderMap.get(table);
667
- if (dataLoader === undefined) {
668
- dataLoader = new DataLoader(async (encodedIds) => {
669
- const decodedRowFragments = encodedIds.map(decodeRowFragment);
670
- // The decoded row fragments should be valid `where` objects
671
- // which use the `eq` object shorthand for each primary key column.
672
- const idConditions = decodedRowFragments.map((decodedRowFragment) => and(...buildWhereConditions(decodedRowFragment, table.columns)));
673
- const rows = await baseQuery.findMany({
674
- where: or(...idConditions),
675
- limit: encodedIds.length,
676
- });
677
- return decodedRowFragments.map((decodedRowFragment) => {
678
- return rows.find((row) => Object.entries(decodedRowFragment).every(([col, val]) => row[col] === val));
679
- });
680
- }, { maxBatchSize: 1000 });
681
- dataLoaderMap.set(table, dataLoader);
682
- }
683
- return dataLoader;
684
- };
685
- }
686
- function getColumnTsName(column) {
687
- const tableColumns = getTableColumns(column.table);
688
- return Object.entries(tableColumns).find(([_, c]) => c.name === column.name)[0];
689
- }
690
- /**
691
- * Returns `true` if the query includes a specific field.
692
- * Does not consider nested selections; only works one "layer" deep.
693
- */
694
- function selectionIncludesField(info, fieldName) {
695
- for (const fieldNode of info.fieldNodes) {
696
- for (const selection of fieldNode.selectionSet?.selections ?? []) {
697
- if (selection.kind === "Field" && selection.name.value === fieldName) {
698
- return true;
699
- }
700
- }
701
- }
702
- return false;
703
- }
704
- //# sourceMappingURL=index.js.map