@graphql-box/connection-resolver 4.1.3 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (490) hide show
  1. package/README.md +1 -5
  2. package/dist/cjs/index.cjs +703 -0
  3. package/dist/cjs/index.cjs.map +1 -0
  4. package/dist/esm/index.mjs +700 -0
  5. package/dist/esm/index.mjs.map +1 -0
  6. package/dist/types/cjs/__testUtils__/generateCursorCache.d.cts +10 -0
  7. package/dist/types/cjs/__testUtils__/generateCursorCache.d.cts.map +1 -0
  8. package/dist/types/cjs/__testUtils__/generatePageResponse.d.cts +9 -0
  9. package/dist/types/cjs/__testUtils__/generatePageResponse.d.cts.map +1 -0
  10. package/dist/types/cjs/__testUtils__/generatePages.d.cts +2 -0
  11. package/dist/types/cjs/__testUtils__/generatePages.d.cts.map +1 -0
  12. package/dist/types/cjs/helpers/cacheCursors.d.cts +12 -0
  13. package/dist/types/cjs/helpers/cacheCursors.d.cts.map +1 -0
  14. package/dist/types/cjs/helpers/extractEdges.d.cts +3 -0
  15. package/dist/types/cjs/helpers/extractEdges.d.cts.map +1 -0
  16. package/dist/types/cjs/helpers/extractNodes.d.cts +3 -0
  17. package/dist/types/cjs/helpers/extractNodes.d.cts.map +1 -0
  18. package/dist/types/cjs/helpers/getCount.d.cts +3 -0
  19. package/dist/types/cjs/helpers/getCount.d.cts.map +1 -0
  20. package/dist/types/cjs/helpers/getCurrentPageStartAndEndIndexes.d.cts +14 -0
  21. package/dist/types/cjs/helpers/getCurrentPageStartAndEndIndexes.d.cts.map +1 -0
  22. package/dist/types/cjs/helpers/getCursor.d.cts +3 -0
  23. package/dist/types/cjs/helpers/getCursor.d.cts.map +1 -0
  24. package/dist/types/cjs/helpers/getDirection.d.cts +3 -0
  25. package/dist/types/cjs/helpers/getDirection.d.cts.map +1 -0
  26. package/dist/types/cjs/helpers/getInRangeCachedEdges.d.cts +8 -0
  27. package/dist/types/cjs/helpers/getInRangeCachedEdges.d.cts.map +1 -0
  28. package/dist/types/cjs/helpers/getIndexesOnCurrentPage.d.cts +10 -0
  29. package/dist/types/cjs/helpers/getIndexesOnCurrentPage.d.cts.map +1 -0
  30. package/dist/types/cjs/helpers/getIndexesOnLastPage.d.cts +3 -0
  31. package/dist/types/cjs/helpers/getIndexesOnLastPage.d.cts.map +1 -0
  32. package/dist/types/cjs/helpers/getPageNumbersToRequest.d.cts +12 -0
  33. package/dist/types/cjs/helpers/getPageNumbersToRequest.d.cts.map +1 -0
  34. package/dist/types/cjs/helpers/getPagesMissingFromCache.d.cts +3 -0
  35. package/dist/types/cjs/helpers/getPagesMissingFromCache.d.cts.map +1 -0
  36. package/dist/types/cjs/helpers/getResultsOnLastPage.d.cts +6 -0
  37. package/dist/types/cjs/helpers/getResultsOnLastPage.d.cts.map +1 -0
  38. package/dist/types/cjs/helpers/getStartAndEndCursors.d.cts +4 -0
  39. package/dist/types/cjs/helpers/getStartAndEndCursors.d.cts.map +1 -0
  40. package/dist/types/cjs/helpers/getStartAndEndIndexes.d.cts +15 -0
  41. package/dist/types/cjs/helpers/getStartAndEndIndexes.d.cts.map +1 -0
  42. package/dist/types/cjs/helpers/getStartAndEndPageNumbers.d.cts +13 -0
  43. package/dist/types/cjs/helpers/getStartAndEndPageNumbers.d.cts.map +1 -0
  44. package/dist/types/cjs/helpers/hasPreviousNextPage.d.cts +14 -0
  45. package/dist/types/cjs/helpers/hasPreviousNextPage.d.cts.map +1 -0
  46. package/dist/types/cjs/helpers/isCursorFirst.d.cts +7 -0
  47. package/dist/types/cjs/helpers/isCursorFirst.d.cts.map +1 -0
  48. package/dist/types/cjs/helpers/isCursorLast.d.cts +10 -0
  49. package/dist/types/cjs/helpers/isCursorLast.d.cts.map +1 -0
  50. package/dist/types/cjs/helpers/isCursorSupplied.d.cts +4 -0
  51. package/dist/types/cjs/helpers/isCursorSupplied.d.cts.map +1 -0
  52. package/dist/types/cjs/helpers/isFirstPage.d.cts +2 -0
  53. package/dist/types/cjs/helpers/isFirstPage.d.cts.map +1 -0
  54. package/dist/types/cjs/helpers/isLastPage.d.cts +6 -0
  55. package/dist/types/cjs/helpers/isLastPage.d.cts.map +1 -0
  56. package/dist/types/cjs/helpers/makeEdges.d.cts +6 -0
  57. package/dist/types/cjs/helpers/makeEdges.d.cts.map +1 -0
  58. package/dist/types/cjs/helpers/makeEntry.d.cts +10 -0
  59. package/dist/types/cjs/helpers/makeEntry.d.cts.map +1 -0
  60. package/dist/types/cjs/helpers/mergeCachedEdges.d.cts +3 -0
  61. package/dist/types/cjs/helpers/mergeCachedEdges.d.cts.map +1 -0
  62. package/dist/types/cjs/helpers/removeConnectionInputOptions.d.cts +2 -0
  63. package/dist/types/cjs/helpers/removeConnectionInputOptions.d.cts.map +1 -0
  64. package/dist/types/cjs/helpers/requestAndCachePages.d.cts +21 -0
  65. package/dist/types/cjs/helpers/requestAndCachePages.d.cts.map +1 -0
  66. package/dist/types/cjs/helpers/requestOutstandingPages.d.cts +18 -0
  67. package/dist/types/cjs/helpers/requestOutstandingPages.d.cts.map +1 -0
  68. package/dist/types/cjs/helpers/resolveConnection.d.cts +24 -0
  69. package/dist/types/cjs/helpers/resolveConnection.d.cts.map +1 -0
  70. package/dist/types/cjs/helpers/retrieveCachedConnection.d.cts +25 -0
  71. package/dist/types/cjs/helpers/retrieveCachedConnection.d.cts.map +1 -0
  72. package/dist/types/cjs/helpers/retrieveCachedEdgesByPage.d.cts +11 -0
  73. package/dist/types/cjs/helpers/retrieveCachedEdgesByPage.d.cts.map +1 -0
  74. package/dist/types/cjs/helpers/retrieveEntry.d.cts +8 -0
  75. package/dist/types/cjs/helpers/retrieveEntry.d.cts.map +1 -0
  76. package/dist/types/cjs/helpers/validateCursor.d.cts +10 -0
  77. package/dist/types/cjs/helpers/validateCursor.d.cts.map +1 -0
  78. package/dist/types/cjs/index.d.cts +4 -0
  79. package/dist/types/cjs/index.d.cts.map +1 -0
  80. package/dist/types/cjs/main/index.d.cts +5 -0
  81. package/dist/types/cjs/main/index.d.cts.map +1 -0
  82. package/{lib/types/defs/index.d.ts → dist/types/cjs/types.d.cts} +22 -27
  83. package/dist/types/cjs/types.d.cts.map +1 -0
  84. package/dist/types/esm/__testUtils__/generateCursorCache.d.ts +10 -0
  85. package/dist/types/esm/__testUtils__/generateCursorCache.d.ts.map +1 -0
  86. package/dist/types/esm/__testUtils__/generatePageResponse.d.ts +9 -0
  87. package/dist/types/esm/__testUtils__/generatePageResponse.d.ts.map +1 -0
  88. package/dist/types/esm/__testUtils__/generatePages.d.ts +2 -0
  89. package/dist/types/esm/__testUtils__/generatePages.d.ts.map +1 -0
  90. package/dist/types/esm/helpers/cacheCursors.d.ts +12 -0
  91. package/dist/types/esm/helpers/cacheCursors.d.ts.map +1 -0
  92. package/dist/types/esm/helpers/extractEdges.d.ts +3 -0
  93. package/dist/types/esm/helpers/extractEdges.d.ts.map +1 -0
  94. package/dist/types/esm/helpers/extractNodes.d.ts +3 -0
  95. package/dist/types/esm/helpers/extractNodes.d.ts.map +1 -0
  96. package/dist/types/esm/helpers/getCount.d.ts +3 -0
  97. package/dist/types/esm/helpers/getCount.d.ts.map +1 -0
  98. package/{lib/types → dist/types/esm}/helpers/getCurrentPageStartAndEndIndexes.d.ts +3 -3
  99. package/dist/types/esm/helpers/getCurrentPageStartAndEndIndexes.d.ts.map +1 -0
  100. package/dist/types/esm/helpers/getCursor.d.ts +3 -0
  101. package/dist/types/esm/helpers/getCursor.d.ts.map +1 -0
  102. package/dist/types/esm/helpers/getDirection.d.ts +3 -0
  103. package/dist/types/esm/helpers/getDirection.d.ts.map +1 -0
  104. package/dist/types/esm/helpers/getInRangeCachedEdges.d.ts +8 -0
  105. package/dist/types/esm/helpers/getInRangeCachedEdges.d.ts.map +1 -0
  106. package/dist/types/esm/helpers/getIndexesOnCurrentPage.d.ts +10 -0
  107. package/dist/types/esm/helpers/getIndexesOnCurrentPage.d.ts.map +1 -0
  108. package/dist/types/esm/helpers/getIndexesOnLastPage.d.ts +3 -0
  109. package/dist/types/esm/helpers/getIndexesOnLastPage.d.ts.map +1 -0
  110. package/dist/types/esm/helpers/getPageNumbersToRequest.d.ts +12 -0
  111. package/dist/types/esm/helpers/getPageNumbersToRequest.d.ts.map +1 -0
  112. package/dist/types/esm/helpers/getPagesMissingFromCache.d.ts +3 -0
  113. package/dist/types/esm/helpers/getPagesMissingFromCache.d.ts.map +1 -0
  114. package/dist/types/esm/helpers/getResultsOnLastPage.d.ts +6 -0
  115. package/dist/types/esm/helpers/getResultsOnLastPage.d.ts.map +1 -0
  116. package/dist/types/esm/helpers/getStartAndEndCursors.d.ts +4 -0
  117. package/dist/types/esm/helpers/getStartAndEndCursors.d.ts.map +1 -0
  118. package/dist/types/esm/helpers/getStartAndEndIndexes.d.ts +15 -0
  119. package/dist/types/esm/helpers/getStartAndEndIndexes.d.ts.map +1 -0
  120. package/dist/types/esm/helpers/getStartAndEndPageNumbers.d.ts +13 -0
  121. package/dist/types/esm/helpers/getStartAndEndPageNumbers.d.ts.map +1 -0
  122. package/{lib/types → dist/types/esm}/helpers/hasPreviousNextPage.d.ts +3 -3
  123. package/dist/types/esm/helpers/hasPreviousNextPage.d.ts.map +1 -0
  124. package/dist/types/esm/helpers/isCursorFirst.d.ts +7 -0
  125. package/dist/types/esm/helpers/isCursorFirst.d.ts.map +1 -0
  126. package/dist/types/esm/helpers/isCursorLast.d.ts +10 -0
  127. package/dist/types/esm/helpers/isCursorLast.d.ts.map +1 -0
  128. package/dist/types/esm/helpers/isCursorSupplied.d.ts +4 -0
  129. package/dist/types/esm/helpers/isCursorSupplied.d.ts.map +1 -0
  130. package/dist/types/esm/helpers/isFirstPage.d.ts +2 -0
  131. package/dist/types/esm/helpers/isFirstPage.d.ts.map +1 -0
  132. package/dist/types/esm/helpers/isLastPage.d.ts +6 -0
  133. package/dist/types/esm/helpers/isLastPage.d.ts.map +1 -0
  134. package/dist/types/esm/helpers/makeEdges.d.ts +6 -0
  135. package/dist/types/esm/helpers/makeEdges.d.ts.map +1 -0
  136. package/dist/types/esm/helpers/makeEntry.d.ts +10 -0
  137. package/dist/types/esm/helpers/makeEntry.d.ts.map +1 -0
  138. package/dist/types/esm/helpers/mergeCachedEdges.d.ts +3 -0
  139. package/dist/types/esm/helpers/mergeCachedEdges.d.ts.map +1 -0
  140. package/dist/types/esm/helpers/removeConnectionInputOptions.d.ts +2 -0
  141. package/dist/types/esm/helpers/removeConnectionInputOptions.d.ts.map +1 -0
  142. package/dist/types/esm/helpers/requestAndCachePages.d.ts +21 -0
  143. package/dist/types/esm/helpers/requestAndCachePages.d.ts.map +1 -0
  144. package/dist/types/esm/helpers/requestOutstandingPages.d.ts +18 -0
  145. package/dist/types/esm/helpers/requestOutstandingPages.d.ts.map +1 -0
  146. package/dist/types/esm/helpers/resolveConnection.d.ts +24 -0
  147. package/dist/types/esm/helpers/resolveConnection.d.ts.map +1 -0
  148. package/{lib/types → dist/types/esm}/helpers/retrieveCachedConnection.d.ts +5 -6
  149. package/dist/types/esm/helpers/retrieveCachedConnection.d.ts.map +1 -0
  150. package/dist/types/esm/helpers/retrieveCachedEdgesByPage.d.ts +11 -0
  151. package/dist/types/esm/helpers/retrieveCachedEdgesByPage.d.ts.map +1 -0
  152. package/dist/types/esm/helpers/retrieveEntry.d.ts +8 -0
  153. package/dist/types/esm/helpers/retrieveEntry.d.ts.map +1 -0
  154. package/dist/types/esm/helpers/validateCursor.d.ts +10 -0
  155. package/dist/types/esm/helpers/validateCursor.d.ts.map +1 -0
  156. package/dist/types/esm/index.d.ts +4 -0
  157. package/dist/types/esm/index.d.ts.map +1 -0
  158. package/dist/types/esm/main/index.d.ts +5 -0
  159. package/dist/types/esm/main/index.d.ts.map +1 -0
  160. package/dist/types/esm/types.d.ts +77 -0
  161. package/dist/types/esm/types.d.ts.map +1 -0
  162. package/dist/types/tsconfig.build.tsbuildinfo +1 -0
  163. package/package.json +54 -38
  164. package/src/__testUtils__/generateCursorCache.ts +20 -14
  165. package/src/__testUtils__/generatePageResponse.ts +17 -12
  166. package/src/__testUtils__/generatePages.ts +5 -5
  167. package/src/helpers/cacheCursors.ts +10 -7
  168. package/src/helpers/extractEdges.ts +3 -3
  169. package/src/helpers/extractNodes.ts +2 -2
  170. package/src/helpers/getCount.test.ts +10 -6
  171. package/src/helpers/getCount.ts +2 -2
  172. package/src/helpers/getCurrentPageStartAndEndIndexes.ts +1 -1
  173. package/src/helpers/getCursor.test.ts +10 -6
  174. package/src/helpers/getCursor.ts +2 -2
  175. package/src/helpers/getDirection.test.ts +10 -6
  176. package/src/helpers/getDirection.ts +3 -1
  177. package/src/helpers/getInRangeCachedEdges.ts +10 -7
  178. package/src/helpers/getIndexesOnCurrentPage.test.ts +14 -10
  179. package/src/helpers/getIndexesOnCurrentPage.ts +11 -6
  180. package/src/helpers/getIndexesOnLastPage.test.ts +10 -6
  181. package/src/helpers/getIndexesOnLastPage.ts +3 -2
  182. package/src/helpers/getPageNumbersToRequest.test.ts +15 -11
  183. package/src/helpers/getPageNumbersToRequest.ts +17 -6
  184. package/src/helpers/getPagesMissingFromCache.ts +5 -5
  185. package/src/helpers/getResultsOnLastPage.test.ts +10 -6
  186. package/src/helpers/getResultsOnLastPage.ts +1 -1
  187. package/src/helpers/getStartAndEndCursors.ts +1 -1
  188. package/src/helpers/getStartAndEndIndexes.test.ts +77 -57
  189. package/src/helpers/getStartAndEndIndexes.ts +28 -22
  190. package/src/helpers/getStartAndEndPageNumbers.test.ts +46 -28
  191. package/src/helpers/getStartAndEndPageNumbers.ts +12 -12
  192. package/src/helpers/hasPreviousNextPage.test.ts +17 -8
  193. package/src/helpers/hasPreviousNextPage.ts +6 -4
  194. package/src/helpers/isCursorFirst.test.ts +13 -7
  195. package/src/helpers/isCursorFirst.ts +3 -2
  196. package/src/helpers/isCursorLast.test.ts +27 -23
  197. package/src/helpers/isCursorLast.ts +4 -4
  198. package/src/helpers/isCursorSupplied.test.ts +18 -10
  199. package/src/helpers/isCursorSupplied.ts +3 -2
  200. package/src/helpers/isFirstPage.test.ts +10 -6
  201. package/src/helpers/isFirstPage.ts +1 -1
  202. package/src/helpers/isLastPage.test.ts +10 -6
  203. package/src/helpers/isLastPage.ts +1 -1
  204. package/src/helpers/makeEdges.ts +3 -3
  205. package/src/helpers/makeEntry.ts +8 -5
  206. package/src/helpers/mergeCachedEdges.ts +5 -5
  207. package/src/helpers/removeConnectionInputOptions.test.ts +10 -8
  208. package/src/helpers/removeConnectionInputOptions.ts +4 -3
  209. package/src/helpers/requestAndCachePages.ts +14 -11
  210. package/src/helpers/requestOutstandingPages.ts +18 -19
  211. package/src/helpers/resolveConnection.ts +20 -34
  212. package/src/helpers/retrieveCachedConnection.test.ts +703 -338
  213. package/src/helpers/retrieveCachedConnection.ts +28 -20
  214. package/src/helpers/retrieveCachedEdgesByPage.ts +10 -10
  215. package/src/helpers/retrieveEntry.ts +32 -0
  216. package/src/helpers/validateCursor.test.ts +88 -61
  217. package/src/helpers/validateCursor.ts +30 -26
  218. package/src/index.ts +3 -3
  219. package/src/main/__snapshots__/index.test.ts.snap +258 -258
  220. package/src/main/index.test.ts +405 -287
  221. package/src/main/index.ts +37 -35
  222. package/src/{defs/index.ts → types.ts} +12 -18
  223. package/tsconfig.build.json +10 -0
  224. package/tsconfig.json +11 -0
  225. package/lib/browser/index.js +0 -2
  226. package/lib/browser/index.js.map +0 -1
  227. package/lib/browser/production.analysis.txt +0 -314
  228. package/lib/main/__testUtils__/generateCursorCache.js +0 -88
  229. package/lib/main/__testUtils__/generateCursorCache.js.map +0 -1
  230. package/lib/main/__testUtils__/generatePageResponse.js +0 -33
  231. package/lib/main/__testUtils__/generatePageResponse.js.map +0 -1
  232. package/lib/main/__testUtils__/generatePages.js +0 -23
  233. package/lib/main/__testUtils__/generatePages.js.map +0 -1
  234. package/lib/main/defs/index.js +0 -2
  235. package/lib/main/defs/index.js.map +0 -1
  236. package/lib/main/helpers/cacheCursors.js +0 -40
  237. package/lib/main/helpers/cacheCursors.js.map +0 -1
  238. package/lib/main/helpers/extractEdges.js +0 -11
  239. package/lib/main/helpers/extractEdges.js.map +0 -1
  240. package/lib/main/helpers/extractNodes.js +0 -11
  241. package/lib/main/helpers/extractNodes.js.map +0 -1
  242. package/lib/main/helpers/getCount.js +0 -14
  243. package/lib/main/helpers/getCount.js.map +0 -1
  244. package/lib/main/helpers/getCurrentPageStartAndEndIndexes.js +0 -23
  245. package/lib/main/helpers/getCurrentPageStartAndEndIndexes.js.map +0 -1
  246. package/lib/main/helpers/getCursor.js +0 -14
  247. package/lib/main/helpers/getCursor.js.map +0 -1
  248. package/lib/main/helpers/getDirection.js +0 -11
  249. package/lib/main/helpers/getDirection.js.map +0 -1
  250. package/lib/main/helpers/getInRangeCachedEdges.js +0 -36
  251. package/lib/main/helpers/getInRangeCachedEdges.js.map +0 -1
  252. package/lib/main/helpers/getIndexesOnCurrentPage.js +0 -30
  253. package/lib/main/helpers/getIndexesOnCurrentPage.js.map +0 -1
  254. package/lib/main/helpers/getIndexesOnLastPage.js +0 -21
  255. package/lib/main/helpers/getIndexesOnLastPage.js.map +0 -1
  256. package/lib/main/helpers/getPageNumbersToRequest.js +0 -43
  257. package/lib/main/helpers/getPageNumbersToRequest.js.map +0 -1
  258. package/lib/main/helpers/getPagesMissingFromCache.js +0 -19
  259. package/lib/main/helpers/getPagesMissingFromCache.js.map +0 -1
  260. package/lib/main/helpers/getResultsOnLastPage.js +0 -17
  261. package/lib/main/helpers/getResultsOnLastPage.js.map +0 -1
  262. package/lib/main/helpers/getStartAndEndCursors.js +0 -22
  263. package/lib/main/helpers/getStartAndEndCursors.js.map +0 -1
  264. package/lib/main/helpers/getStartAndEndIndexes.js +0 -105
  265. package/lib/main/helpers/getStartAndEndIndexes.js.map +0 -1
  266. package/lib/main/helpers/getStartAndEndPageNumbers.js +0 -51
  267. package/lib/main/helpers/getStartAndEndPageNumbers.js.map +0 -1
  268. package/lib/main/helpers/hasPreviousNextPage.js +0 -33
  269. package/lib/main/helpers/hasPreviousNextPage.js.map +0 -1
  270. package/lib/main/helpers/isCursorFirst.js +0 -17
  271. package/lib/main/helpers/isCursorFirst.js.map +0 -1
  272. package/lib/main/helpers/isCursorLast.js +0 -27
  273. package/lib/main/helpers/isCursorLast.js.map +0 -1
  274. package/lib/main/helpers/isCursorSupplied.js +0 -14
  275. package/lib/main/helpers/isCursorSupplied.js.map +0 -1
  276. package/lib/main/helpers/isFirstPage.js +0 -11
  277. package/lib/main/helpers/isFirstPage.js.map +0 -1
  278. package/lib/main/helpers/isLastPage.js +0 -14
  279. package/lib/main/helpers/isLastPage.js.map +0 -1
  280. package/lib/main/helpers/makeEdges.js +0 -14
  281. package/lib/main/helpers/makeEdges.js.map +0 -1
  282. package/lib/main/helpers/makeEntry.js +0 -38
  283. package/lib/main/helpers/makeEntry.js.map +0 -1
  284. package/lib/main/helpers/mergeCachedEdges.js +0 -21
  285. package/lib/main/helpers/mergeCachedEdges.js.map +0 -1
  286. package/lib/main/helpers/removeConnectionInputOptions.js +0 -17
  287. package/lib/main/helpers/removeConnectionInputOptions.js.map +0 -1
  288. package/lib/main/helpers/requestAndCachePages.js +0 -66
  289. package/lib/main/helpers/requestAndCachePages.js.map +0 -1
  290. package/lib/main/helpers/requestOutstandingPages.js +0 -67
  291. package/lib/main/helpers/requestOutstandingPages.js.map +0 -1
  292. package/lib/main/helpers/resolveConnection.js +0 -95
  293. package/lib/main/helpers/resolveConnection.js.map +0 -1
  294. package/lib/main/helpers/retrieveCachedConnection.js +0 -90
  295. package/lib/main/helpers/retrieveCachedConnection.js.map +0 -1
  296. package/lib/main/helpers/retrieveCachedEdgesByPage.js +0 -45
  297. package/lib/main/helpers/retrieveCachedEdgesByPage.js.map +0 -1
  298. package/lib/main/helpers/validateCursor.js +0 -88
  299. package/lib/main/helpers/validateCursor.js.map +0 -1
  300. package/lib/main/index.js +0 -52
  301. package/lib/main/index.js.map +0 -1
  302. package/lib/main/main/index.js +0 -100
  303. package/lib/main/main/index.js.map +0 -1
  304. package/lib/module/__testUtils__/generateCursorCache.js +0 -71
  305. package/lib/module/__testUtils__/generateCursorCache.js.map +0 -1
  306. package/lib/module/__testUtils__/generatePageResponse.js +0 -23
  307. package/lib/module/__testUtils__/generatePageResponse.js.map +0 -1
  308. package/lib/module/__testUtils__/generatePages.js +0 -11
  309. package/lib/module/__testUtils__/generatePages.js.map +0 -1
  310. package/lib/module/defs/index.js +0 -2
  311. package/lib/module/defs/index.js.map +0 -1
  312. package/lib/module/helpers/cacheCursors.js +0 -30
  313. package/lib/module/helpers/cacheCursors.js.map +0 -1
  314. package/lib/module/helpers/extractEdges.js +0 -2
  315. package/lib/module/helpers/extractEdges.js.map +0 -1
  316. package/lib/module/helpers/extractNodes.js +0 -2
  317. package/lib/module/helpers/extractNodes.js.map +0 -1
  318. package/lib/module/helpers/getCount.js +0 -5
  319. package/lib/module/helpers/getCount.js.map +0 -1
  320. package/lib/module/helpers/getCurrentPageStartAndEndIndexes.js +0 -11
  321. package/lib/module/helpers/getCurrentPageStartAndEndIndexes.js.map +0 -1
  322. package/lib/module/helpers/getCursor.js +0 -5
  323. package/lib/module/helpers/getCursor.js.map +0 -1
  324. package/lib/module/helpers/getDirection.js +0 -2
  325. package/lib/module/helpers/getDirection.js.map +0 -1
  326. package/lib/module/helpers/getInRangeCachedEdges.js +0 -26
  327. package/lib/module/helpers/getInRangeCachedEdges.js.map +0 -1
  328. package/lib/module/helpers/getIndexesOnCurrentPage.js +0 -17
  329. package/lib/module/helpers/getIndexesOnCurrentPage.js.map +0 -1
  330. package/lib/module/helpers/getIndexesOnLastPage.js +0 -9
  331. package/lib/module/helpers/getIndexesOnLastPage.js.map +0 -1
  332. package/lib/module/helpers/getPageNumbersToRequest.js +0 -30
  333. package/lib/module/helpers/getPageNumbersToRequest.js.map +0 -1
  334. package/lib/module/helpers/getPagesMissingFromCache.js +0 -10
  335. package/lib/module/helpers/getPagesMissingFromCache.js.map +0 -1
  336. package/lib/module/helpers/getResultsOnLastPage.js +0 -8
  337. package/lib/module/helpers/getResultsOnLastPage.js.map +0 -1
  338. package/lib/module/helpers/getStartAndEndCursors.js +0 -10
  339. package/lib/module/helpers/getStartAndEndCursors.js.map +0 -1
  340. package/lib/module/helpers/getStartAndEndIndexes.js +0 -86
  341. package/lib/module/helpers/getStartAndEndIndexes.js.map +0 -1
  342. package/lib/module/helpers/getStartAndEndPageNumbers.js +0 -35
  343. package/lib/module/helpers/getStartAndEndPageNumbers.js.map +0 -1
  344. package/lib/module/helpers/hasPreviousNextPage.js +0 -18
  345. package/lib/module/helpers/hasPreviousNextPage.js.map +0 -1
  346. package/lib/module/helpers/isCursorFirst.js +0 -8
  347. package/lib/module/helpers/isCursorFirst.js.map +0 -1
  348. package/lib/module/helpers/isCursorLast.js +0 -15
  349. package/lib/module/helpers/isCursorLast.js.map +0 -1
  350. package/lib/module/helpers/isCursorSupplied.js +0 -5
  351. package/lib/module/helpers/isCursorSupplied.js.map +0 -1
  352. package/lib/module/helpers/isFirstPage.js +0 -2
  353. package/lib/module/helpers/isFirstPage.js.map +0 -1
  354. package/lib/module/helpers/isLastPage.js +0 -5
  355. package/lib/module/helpers/isLastPage.js.map +0 -1
  356. package/lib/module/helpers/makeEdges.js +0 -5
  357. package/lib/module/helpers/makeEdges.js.map +0 -1
  358. package/lib/module/helpers/makeEntry.js +0 -25
  359. package/lib/module/helpers/makeEntry.js.map +0 -1
  360. package/lib/module/helpers/mergeCachedEdges.js +0 -12
  361. package/lib/module/helpers/mergeCachedEdges.js.map +0 -1
  362. package/lib/module/helpers/removeConnectionInputOptions.js +0 -4
  363. package/lib/module/helpers/removeConnectionInputOptions.js.map +0 -1
  364. package/lib/module/helpers/requestAndCachePages.js +0 -54
  365. package/lib/module/helpers/requestAndCachePages.js.map +0 -1
  366. package/lib/module/helpers/requestOutstandingPages.js +0 -57
  367. package/lib/module/helpers/requestOutstandingPages.js.map +0 -1
  368. package/lib/module/helpers/resolveConnection.js +0 -78
  369. package/lib/module/helpers/resolveConnection.js.map +0 -1
  370. package/lib/module/helpers/retrieveCachedConnection.js +0 -70
  371. package/lib/module/helpers/retrieveCachedConnection.js.map +0 -1
  372. package/lib/module/helpers/retrieveCachedEdgesByPage.js +0 -35
  373. package/lib/module/helpers/retrieveCachedEdgesByPage.js.map +0 -1
  374. package/lib/module/helpers/validateCursor.js +0 -71
  375. package/lib/module/helpers/validateCursor.js.map +0 -1
  376. package/lib/module/index.js +0 -4
  377. package/lib/module/index.js.map +0 -1
  378. package/lib/module/main/index.js +0 -83
  379. package/lib/module/main/index.js.map +0 -1
  380. package/lib/types/__testUtils__/generateCursorCache.d.ts +0 -11
  381. package/lib/types/__testUtils__/generateCursorCache.d.ts.map +0 -1
  382. package/lib/types/__testUtils__/generatePageResponse.d.ts +0 -18
  383. package/lib/types/__testUtils__/generatePageResponse.d.ts.map +0 -1
  384. package/lib/types/__testUtils__/generatePages.d.ts +0 -3
  385. package/lib/types/__testUtils__/generatePages.d.ts.map +0 -1
  386. package/lib/types/defs/index.d.ts.map +0 -1
  387. package/lib/types/helpers/cacheCursors.d.ts +0 -13
  388. package/lib/types/helpers/cacheCursors.d.ts.map +0 -1
  389. package/lib/types/helpers/extractEdges.d.ts +0 -4
  390. package/lib/types/helpers/extractEdges.d.ts.map +0 -1
  391. package/lib/types/helpers/extractNodes.d.ts +0 -4
  392. package/lib/types/helpers/extractNodes.d.ts.map +0 -1
  393. package/lib/types/helpers/getCount.d.ts +0 -4
  394. package/lib/types/helpers/getCount.d.ts.map +0 -1
  395. package/lib/types/helpers/getCount.test.d.ts +0 -2
  396. package/lib/types/helpers/getCount.test.d.ts.map +0 -1
  397. package/lib/types/helpers/getCurrentPageStartAndEndIndexes.d.ts.map +0 -1
  398. package/lib/types/helpers/getCursor.d.ts +0 -4
  399. package/lib/types/helpers/getCursor.d.ts.map +0 -1
  400. package/lib/types/helpers/getCursor.test.d.ts +0 -2
  401. package/lib/types/helpers/getCursor.test.d.ts.map +0 -1
  402. package/lib/types/helpers/getDirection.d.ts +0 -3
  403. package/lib/types/helpers/getDirection.d.ts.map +0 -1
  404. package/lib/types/helpers/getDirection.test.d.ts +0 -2
  405. package/lib/types/helpers/getDirection.test.d.ts.map +0 -1
  406. package/lib/types/helpers/getInRangeCachedEdges.d.ts +0 -9
  407. package/lib/types/helpers/getInRangeCachedEdges.d.ts.map +0 -1
  408. package/lib/types/helpers/getIndexesOnCurrentPage.d.ts +0 -7
  409. package/lib/types/helpers/getIndexesOnCurrentPage.d.ts.map +0 -1
  410. package/lib/types/helpers/getIndexesOnCurrentPage.test.d.ts +0 -2
  411. package/lib/types/helpers/getIndexesOnCurrentPage.test.d.ts.map +0 -1
  412. package/lib/types/helpers/getIndexesOnLastPage.d.ts +0 -4
  413. package/lib/types/helpers/getIndexesOnLastPage.d.ts.map +0 -1
  414. package/lib/types/helpers/getIndexesOnLastPage.test.d.ts +0 -2
  415. package/lib/types/helpers/getIndexesOnLastPage.test.d.ts.map +0 -1
  416. package/lib/types/helpers/getPageNumbersToRequest.d.ts +0 -8
  417. package/lib/types/helpers/getPageNumbersToRequest.d.ts.map +0 -1
  418. package/lib/types/helpers/getPageNumbersToRequest.test.d.ts +0 -2
  419. package/lib/types/helpers/getPageNumbersToRequest.test.d.ts.map +0 -1
  420. package/lib/types/helpers/getPagesMissingFromCache.d.ts +0 -4
  421. package/lib/types/helpers/getPagesMissingFromCache.d.ts.map +0 -1
  422. package/lib/types/helpers/getResultsOnLastPage.d.ts +0 -7
  423. package/lib/types/helpers/getResultsOnLastPage.d.ts.map +0 -1
  424. package/lib/types/helpers/getResultsOnLastPage.test.d.ts +0 -2
  425. package/lib/types/helpers/getResultsOnLastPage.test.d.ts.map +0 -1
  426. package/lib/types/helpers/getStartAndEndCursors.d.ts +0 -4
  427. package/lib/types/helpers/getStartAndEndCursors.d.ts.map +0 -1
  428. package/lib/types/helpers/getStartAndEndIndexes.d.ts +0 -10
  429. package/lib/types/helpers/getStartAndEndIndexes.d.ts.map +0 -1
  430. package/lib/types/helpers/getStartAndEndIndexes.test.d.ts +0 -2
  431. package/lib/types/helpers/getStartAndEndIndexes.test.d.ts.map +0 -1
  432. package/lib/types/helpers/getStartAndEndPageNumbers.d.ts +0 -9
  433. package/lib/types/helpers/getStartAndEndPageNumbers.d.ts.map +0 -1
  434. package/lib/types/helpers/getStartAndEndPageNumbers.test.d.ts +0 -2
  435. package/lib/types/helpers/getStartAndEndPageNumbers.test.d.ts.map +0 -1
  436. package/lib/types/helpers/hasPreviousNextPage.d.ts.map +0 -1
  437. package/lib/types/helpers/hasPreviousNextPage.test.d.ts +0 -2
  438. package/lib/types/helpers/hasPreviousNextPage.test.d.ts.map +0 -1
  439. package/lib/types/helpers/isCursorFirst.d.ts +0 -8
  440. package/lib/types/helpers/isCursorFirst.d.ts.map +0 -1
  441. package/lib/types/helpers/isCursorFirst.test.d.ts +0 -2
  442. package/lib/types/helpers/isCursorFirst.test.d.ts.map +0 -1
  443. package/lib/types/helpers/isCursorLast.d.ts +0 -11
  444. package/lib/types/helpers/isCursorLast.d.ts.map +0 -1
  445. package/lib/types/helpers/isCursorLast.test.d.ts +0 -2
  446. package/lib/types/helpers/isCursorLast.test.d.ts.map +0 -1
  447. package/lib/types/helpers/isCursorSupplied.d.ts +0 -4
  448. package/lib/types/helpers/isCursorSupplied.d.ts.map +0 -1
  449. package/lib/types/helpers/isCursorSupplied.test.d.ts +0 -2
  450. package/lib/types/helpers/isCursorSupplied.test.d.ts.map +0 -1
  451. package/lib/types/helpers/isFirstPage.d.ts +0 -3
  452. package/lib/types/helpers/isFirstPage.d.ts.map +0 -1
  453. package/lib/types/helpers/isFirstPage.test.d.ts +0 -2
  454. package/lib/types/helpers/isFirstPage.test.d.ts.map +0 -1
  455. package/lib/types/helpers/isLastPage.d.ts +0 -7
  456. package/lib/types/helpers/isLastPage.d.ts.map +0 -1
  457. package/lib/types/helpers/isLastPage.test.d.ts +0 -2
  458. package/lib/types/helpers/isLastPage.test.d.ts.map +0 -1
  459. package/lib/types/helpers/makeEdges.d.ts +0 -7
  460. package/lib/types/helpers/makeEdges.d.ts.map +0 -1
  461. package/lib/types/helpers/makeEntry.d.ts +0 -11
  462. package/lib/types/helpers/makeEntry.d.ts.map +0 -1
  463. package/lib/types/helpers/mergeCachedEdges.d.ts +0 -4
  464. package/lib/types/helpers/mergeCachedEdges.d.ts.map +0 -1
  465. package/lib/types/helpers/removeConnectionInputOptions.d.ts +0 -3
  466. package/lib/types/helpers/removeConnectionInputOptions.d.ts.map +0 -1
  467. package/lib/types/helpers/removeConnectionInputOptions.test.d.ts +0 -2
  468. package/lib/types/helpers/removeConnectionInputOptions.test.d.ts.map +0 -1
  469. package/lib/types/helpers/requestAndCachePages.d.ts +0 -21
  470. package/lib/types/helpers/requestAndCachePages.d.ts.map +0 -1
  471. package/lib/types/helpers/requestOutstandingPages.d.ts +0 -18
  472. package/lib/types/helpers/requestOutstandingPages.d.ts.map +0 -1
  473. package/lib/types/helpers/resolveConnection.d.ts +0 -24
  474. package/lib/types/helpers/resolveConnection.d.ts.map +0 -1
  475. package/lib/types/helpers/retrieveCachedConnection.d.ts.map +0 -1
  476. package/lib/types/helpers/retrieveCachedConnection.test.d.ts +0 -2
  477. package/lib/types/helpers/retrieveCachedConnection.test.d.ts.map +0 -1
  478. package/lib/types/helpers/retrieveCachedEdgesByPage.d.ts +0 -12
  479. package/lib/types/helpers/retrieveCachedEdgesByPage.d.ts.map +0 -1
  480. package/lib/types/helpers/validateCursor.d.ts +0 -11
  481. package/lib/types/helpers/validateCursor.d.ts.map +0 -1
  482. package/lib/types/helpers/validateCursor.test.d.ts +0 -2
  483. package/lib/types/helpers/validateCursor.test.d.ts.map +0 -1
  484. package/lib/types/index.d.ts +0 -4
  485. package/lib/types/index.d.ts.map +0 -1
  486. package/lib/types/main/index.d.ts +0 -5
  487. package/lib/types/main/index.d.ts.map +0 -1
  488. package/lib/types/main/index.test.d.ts +0 -2
  489. package/lib/types/main/index.test.d.ts.map +0 -1
  490. package/package-lock.json +0 -18
@@ -1,40 +1,48 @@
1
- import Cachemap from "@cachemap/core";
2
- import { CachedEdges, ConnectionInputOptions, CursorGroupMetadata } from "../defs";
3
- import getCursor from "./getCursor";
4
- import getInRangeCachedEdges from "./getInRangeCachedEdges";
5
- import getPageNumbersToRequest from "./getPageNumbersToRequest";
6
- import getPagesMissingFromCache from "./getPagesMissingFromCache";
7
- import { getEndIndex, getStartIndex } from "./getStartAndEndIndexes";
8
- import { hasNextPage, hasPreviousPage } from "./hasPreviousNextPage";
9
- import makeEntry from "./makeEntry";
10
- import retrieveCachedEdgesByPage from "./retrieveCachedEdgesByPage";
1
+ import { type Core } from '@cachemap/core';
2
+ import { type CachedEdges, type ConnectionInputOptions, type CursorGroupMetadata } from '../types.ts';
3
+ import { getInRangeCachedEdges } from './getInRangeCachedEdges.ts';
4
+ import { getPageNumbersToRequest } from './getPageNumbersToRequest.ts';
5
+ import { getPagesMissingFromCache } from './getPagesMissingFromCache.ts';
6
+ import { getEndIndex, getStartIndex } from './getStartAndEndIndexes.ts';
7
+ import { hasNextPage, hasPreviousPage } from './hasPreviousNextPage.ts';
8
+ import { retrieveCachedEdgesByPage } from './retrieveCachedEdgesByPage.ts';
9
+ import { retrieveEntry } from './retrieveEntry.ts';
11
10
 
12
11
  export type Context = {
13
- cursorCache: Cachemap;
12
+ cursorCache: Core;
14
13
  groupCursor: string;
15
14
  resultsPerPage: number;
16
15
  };
17
16
 
18
- export default async (args: ConnectionInputOptions, { cursorCache, groupCursor, resultsPerPage }: Context) => {
19
- const metadata = (await cursorCache.get(`${groupCursor}-metadata`)) as CursorGroupMetadata;
20
- const cursor = getCursor(args);
21
- const entry = cursor ? await cursorCache.get(cursor) : makeEntry(args, { metadata, resultsPerPage });
17
+ export const retrieveCachedConnection = async (
18
+ args: ConnectionInputOptions,
19
+ { cursorCache, groupCursor, resultsPerPage }: Context
20
+ ) => {
21
+ /**
22
+ * At this point the cache will always have metadata because `retrieveCachedConnection`
23
+ * is called from `resolveConnection` and is only called if there is a cursor, either
24
+ * after a direct check or after calling `validateCursor` or `requestAndCachePages`,
25
+ * which check and set the metadata respectively.
26
+ */
27
+ const metadata = (await cursorCache.get<CursorGroupMetadata>(`${groupCursor}-metadata`))!;
28
+ const entry = await retrieveEntry(args, metadata, { cursorCache, resultsPerPage });
22
29
  const startIndex = getStartIndex(args, { entry, resultsPerPage });
23
30
  const endIndex = getEndIndex(args, { entry, metadata, resultsPerPage });
24
31
  const promises: Promise<CachedEdges>[] = [];
25
32
  const pageNumbersToRequest = getPageNumbersToRequest(args, { endIndex, entry, metadata, resultsPerPage, startIndex });
26
33
 
27
- pageNumbersToRequest.forEach(pageNumber => {
34
+ for (const pageNumber of pageNumbersToRequest) {
28
35
  promises.push(retrieveCachedEdgesByPage(cursorCache, { groupCursor, pageNumber }));
29
- });
36
+ }
30
37
 
31
38
  const cachedEdgesByPage = await Promise.all(promises);
32
39
  const missingPages = getPagesMissingFromCache(cachedEdgesByPage);
33
40
 
34
41
  return {
35
- cachedEdges: !missingPages.length
36
- ? getInRangeCachedEdges(cachedEdgesByPage, { endIndex, resultsPerPage, startIndex })
37
- : cachedEdgesByPage,
42
+ cachedEdges:
43
+ missingPages.length === 0
44
+ ? getInRangeCachedEdges(cachedEdgesByPage, { endIndex, resultsPerPage, startIndex })
45
+ : cachedEdgesByPage,
38
46
  hasNextPage: hasNextPage({
39
47
  cachedEdgesByPage,
40
48
  endIndex,
@@ -1,27 +1,27 @@
1
- import Cachemap, { ExportResult } from "@cachemap/core";
2
- import { Edge } from "../defs";
1
+ import { type Core } from '@cachemap/core';
2
+ import { type CursorCacheEntry, type Edge } from '../types.ts';
3
3
 
4
4
  export type Context = {
5
5
  groupCursor: string;
6
6
  pageNumber: number;
7
7
  };
8
8
 
9
- export default async (cursorCache: Cachemap, { groupCursor, pageNumber }: Context) => {
10
- const { entries, metadata } = (await cursorCache.export({
9
+ export const retrieveCachedEdgesByPage = async (cursorCache: Core, { groupCursor, pageNumber }: Context) => {
10
+ const { entries, metadata } = await cursorCache.export<CursorCacheEntry>({
11
11
  filterByValue: [
12
- { keyChain: "page", comparator: pageNumber },
13
- { keyChain: "group", comparator: groupCursor },
12
+ { comparator: pageNumber, keyChain: 'page' },
13
+ { comparator: groupCursor, keyChain: 'group' },
14
14
  ],
15
- })) as ExportResult;
15
+ });
16
16
 
17
17
  return {
18
- edges: entries.reduce((cached, [key, { index, node }]) => {
19
- if (metadata[index].cacheability.checkTTL()) {
18
+ edges: entries.reduce<Edge[]>((cached, [key, { index, node }]) => {
19
+ if (metadata[index]?.cacheability.checkTTL()) {
20
20
  cached[index] = { cursor: key, node };
21
21
  }
22
22
 
23
23
  return cached;
24
- }, [] as Edge[]),
24
+ }, []),
25
25
  pageNumber,
26
26
  };
27
27
  };
@@ -0,0 +1,32 @@
1
+ import type { Core } from '@cachemap/core';
2
+ import type {
3
+ ConnectionInputOptions,
4
+ CursorCacheEntry,
5
+ CursorGroupMetadata,
6
+ PartialCursorCacheEntry,
7
+ } from '../types.ts';
8
+ import { getCursor } from './getCursor.ts';
9
+ import { makeEntry } from './makeEntry.ts';
10
+
11
+ export type Context = {
12
+ cursorCache: Core;
13
+ resultsPerPage: number;
14
+ };
15
+
16
+ export const retrieveEntry = async (
17
+ args: ConnectionInputOptions,
18
+ metadata: CursorGroupMetadata,
19
+ { cursorCache, resultsPerPage }: Context
20
+ ): Promise<PartialCursorCacheEntry> => {
21
+ const cursor = getCursor(args);
22
+
23
+ if (cursor) {
24
+ const cursorCacheEntry = await cursorCache.get<CursorCacheEntry>(cursor);
25
+
26
+ if (cursorCacheEntry) {
27
+ return cursorCacheEntry;
28
+ }
29
+ }
30
+
31
+ return makeEntry(args, { metadata, resultsPerPage });
32
+ };
@@ -1,16 +1,16 @@
1
- import Cachemap from "@cachemap/core";
2
- import map from "@cachemap/map";
3
- import { GraphQLError, GraphQLResolveInfo } from "graphql";
4
- import validateCursor, { Context } from "./validateCursor";
1
+ import { Core } from '@cachemap/core';
2
+ import { init as map } from '@cachemap/map';
3
+ import { type GraphQLResolveInfo } from 'graphql';
4
+ import { type Context, validateCursor } from './validateCursor.ts';
5
5
 
6
- describe("validateCursor", () => {
6
+ describe('validateCursor', () => {
7
7
  const ctx: Context = {
8
- cursorCache: new Cachemap({
9
- name: "GRAPHQL_BOX_CONNECTION_RESOLVER",
8
+ cursorCache: new Core({
9
+ name: 'GRAPHQL_BOX_CONNECTION_RESOLVER',
10
10
  store: map(),
11
- type: "CONNECTION_RESOLVER",
11
+ type: 'CONNECTION_RESOLVER',
12
12
  }),
13
- groupCursor: "abcdefg",
13
+ groupCursor: 'abcdefg',
14
14
  resultsPerPage: 10,
15
15
  };
16
16
 
@@ -18,93 +18,120 @@ describe("validateCursor", () => {
18
18
  await ctx.cursorCache.clear();
19
19
  });
20
20
 
21
- test("when `after` is provided but `first` is NOT", async () => {
21
+ describe('when `after` is provided but `first` is NOT', () => {
22
22
  const info = {};
23
23
 
24
- expect(
25
- ((await validateCursor({ after: "abcdefg" }, info as GraphQLResolveInfo, ctx)) as GraphQLError).message,
26
- ).toBe("Invalid connection argument combination. `after` must be used in combination with `first`.");
24
+ it('should return the correct error', async () => {
25
+ const result = await validateCursor({ after: 'abcdefg' }, info as GraphQLResolveInfo, ctx);
26
+
27
+ expect(result?.message).toBe(
28
+ 'Invalid connection argument combination. `after` must be used in combination with `first`.'
29
+ );
30
+ });
27
31
  });
28
32
 
29
- test("when `after` and `last` are provided", async () => {
33
+ describe('when `after` and `last` are provided', () => {
30
34
  const info = {};
31
35
 
32
- expect(
33
- ((await validateCursor({ after: "abcdefg", last: 5 }, info as GraphQLResolveInfo, ctx)) as GraphQLError).message,
34
- ).toBe("Invalid connection argument combination. `after` cannot be used in combination with `last`.");
36
+ it('should return the correct error', async () => {
37
+ const result = await validateCursor({ after: 'abcdefg', last: 5 }, info as GraphQLResolveInfo, ctx);
38
+
39
+ expect(result?.message).toBe(
40
+ 'Invalid connection argument combination. `after` cannot be used in combination with `last`.'
41
+ );
42
+ });
35
43
  });
36
44
 
37
- test("when `before` is provided but `last` is NOT", async () => {
45
+ describe('when `before` is provided but `last` is NOT', () => {
38
46
  const info = {};
39
47
 
40
- expect(
41
- ((await validateCursor({ before: "abcdefg" }, info as GraphQLResolveInfo, ctx)) as GraphQLError).message,
42
- ).toBe("Invalid connection argument combination. `before` must be used in combination with `last`.");
48
+ it('should return the correct error', async () => {
49
+ const result = await validateCursor({ before: 'abcdefg' }, info as GraphQLResolveInfo, ctx);
50
+
51
+ expect(result?.message).toBe(
52
+ 'Invalid connection argument combination. `before` must be used in combination with `last`.'
53
+ );
54
+ });
43
55
  });
44
56
 
45
- test("when `before` and `first` are provided", async () => {
57
+ describe('when `before` and `first` are provided', () => {
46
58
  const info = {};
47
59
 
48
- expect(
49
- ((await validateCursor({ before: "abcdefg", first: 5 }, info as GraphQLResolveInfo, ctx)) as GraphQLError)
50
- .message,
51
- ).toBe("Invalid connection argument combination. `before` cannot be used in combination with `first`.");
60
+ it('should return the correct error', async () => {
61
+ const result = await validateCursor({ before: 'abcdefg', first: 5 }, info as GraphQLResolveInfo, ctx);
62
+
63
+ expect(result?.message).toBe(
64
+ 'Invalid connection argument combination. `before` cannot be used in combination with `first`.'
65
+ );
66
+ });
52
67
  });
53
68
 
54
- test("when a cursor was not previously provided", async () => {
55
- const args = { after: "abcdefg", first: 5, query: "Hello world!" };
69
+ describe('when a cursor was not previously provided', () => {
70
+ const args = { after: 'abcdefg', first: 5, query: 'Hello world!' };
56
71
  const info = {};
57
72
 
58
- expect(((await validateCursor(args, info as GraphQLResolveInfo, ctx)) as GraphQLError).message).toBe(
59
- "Curser cannot be supplied without previously being provided.",
60
- );
73
+ it('should return the correct error', async () => {
74
+ const result = await validateCursor(args, info as GraphQLResolveInfo, ctx);
75
+ expect(result?.message).toBe('Curser cannot be supplied without previously being provided.');
76
+ });
61
77
  });
62
78
 
63
- test("when a cursor could not be found", async () => {
64
- await ctx.cursorCache.set(`${ctx.groupCursor}-metadata`, { totalPages: 10, totalResults: 100 });
65
- const args = { after: "abcdefg", first: 5, query: "Hello world!" };
79
+ describe('when a cursor could not be found', () => {
80
+ const args = { after: 'abcdefg', first: 5, query: 'Hello world!' };
66
81
  const info = {};
67
82
 
68
- expect(((await validateCursor(args, info as GraphQLResolveInfo, ctx)) as GraphQLError).message).toBe(
69
- "The cursor abcdefg could not be found.",
70
- );
83
+ it('should return the correct error', async () => {
84
+ await ctx.cursorCache.set(`${ctx.groupCursor}-metadata`, { totalPages: 10, totalResults: 100 });
85
+ const result = await validateCursor(args, info as GraphQLResolveInfo, ctx);
86
+ expect(result?.message).toBe('The cursor abcdefg could not be found.');
87
+ });
71
88
  });
72
89
 
73
- test("when a cursor is the last", async () => {
74
- await ctx.cursorCache.set(`${ctx.groupCursor}-metadata`, { totalPages: 6, totalResults: 53 });
75
- await ctx.cursorCache.set("abcdefg", { index: 2, page: 6 });
76
- const args = { after: "abcdefg", first: 5, query: "Hello world!" };
90
+ describe('when a cursor is the last', () => {
91
+ const args = { after: 'abcdefg', first: 5, query: 'Hello world!' };
77
92
  const info = {};
78
93
 
79
- expect(((await validateCursor(args, info as GraphQLResolveInfo, ctx)) as GraphQLError).message).toBe(
80
- "The cursor abcdefg is the last, you cannot go forward any further.",
81
- );
94
+ it('should return the correct error', async () => {
95
+ await ctx.cursorCache.set(`${ctx.groupCursor}-metadata`, { totalPages: 6, totalResults: 53 });
96
+ await ctx.cursorCache.set('abcdefg', { index: 2, page: 6 });
97
+ const result = await validateCursor(args, info as GraphQLResolveInfo, ctx);
98
+ expect(result?.message).toBe('The cursor abcdefg is the last, you cannot go forward any further.');
99
+ });
82
100
  });
83
101
 
84
- test("when a cursor is the first", async () => {
85
- await ctx.cursorCache.set(`${ctx.groupCursor}-metadata`, { totalPages: 6, totalResults: 53 });
86
- await ctx.cursorCache.set("abcdefg", { index: 0, page: 1 });
87
- const args = { before: "abcdefg", last: 5, query: "Hello world!" };
102
+ describe('when a cursor is the first', () => {
103
+ const args = { before: 'abcdefg', last: 5, query: 'Hello world!' };
88
104
  const info = {};
89
105
 
90
- expect(((await validateCursor(args, info as GraphQLResolveInfo, ctx)) as GraphQLError).message).toBe(
91
- "The cursor abcdefg is the first, you cannot go backward any further.",
92
- );
106
+ it('should return the correct error', async () => {
107
+ await ctx.cursorCache.set(`${ctx.groupCursor}-metadata`, { totalPages: 6, totalResults: 53 });
108
+ await ctx.cursorCache.set('abcdefg', { index: 0, page: 1 });
109
+ const result = await validateCursor(args, info as GraphQLResolveInfo, ctx);
110
+ expect(result?.message).toBe('The cursor abcdefg is the first, you cannot go backward any further.');
111
+ });
93
112
  });
94
113
 
95
- test("when `after` and `first` are provided and the cursor is not invalid", async () => {
96
- await ctx.cursorCache.set(`${ctx.groupCursor}-metadata`, { totalPages: 6, totalResults: 53 });
97
- await ctx.cursorCache.set("abcdefg", { index: 0, page: 2 });
98
- const args = { after: "abcdefg", first: 5, query: "Hello world!" };
114
+ describe('when `after` and `first` are provided and the cursor is not invalid', () => {
115
+ const args = { after: 'abcdefg', first: 5, query: 'Hello world!' };
99
116
  const info = {};
100
- expect(await validateCursor(args, info as GraphQLResolveInfo, ctx)).toBeUndefined();
117
+
118
+ it('should return undefined', async () => {
119
+ await ctx.cursorCache.set(`${ctx.groupCursor}-metadata`, { totalPages: 6, totalResults: 53 });
120
+ await ctx.cursorCache.set('abcdefg', { index: 0, page: 2 });
121
+ const result = await validateCursor(args, info as GraphQLResolveInfo, ctx);
122
+ expect(result).toBeUndefined();
123
+ });
101
124
  });
102
125
 
103
- test("when `before` and `last` are provided and the cursor is not invalid", async () => {
104
- await ctx.cursorCache.set(`${ctx.groupCursor}-metadata`, { totalPages: 6, totalResults: 53 });
105
- await ctx.cursorCache.set("abcdefg", { index: 0, page: 2 });
106
- const args = { before: "abcdefg", last: 5, query: "Hello world!" };
126
+ describe('when `before` and `last` are provided and the cursor is not invalid', () => {
127
+ const args = { before: 'abcdefg', last: 5, query: 'Hello world!' };
107
128
  const info = {};
108
- expect(await validateCursor(args, info as GraphQLResolveInfo, ctx)).toBeUndefined();
129
+
130
+ it('should return undefined', async () => {
131
+ await ctx.cursorCache.set(`${ctx.groupCursor}-metadata`, { totalPages: 6, totalResults: 53 });
132
+ await ctx.cursorCache.set('abcdefg', { index: 0, page: 2 });
133
+ const result = await validateCursor(args, info as GraphQLResolveInfo, ctx);
134
+ expect(result).toBeUndefined();
135
+ });
109
136
  });
110
137
  });
@@ -1,72 +1,76 @@
1
- import Cachemap from "@cachemap/core";
2
- import { GraphQLError, GraphQLResolveInfo } from "graphql";
3
- import { ConnectionInputOptions, CursorCacheEntry, CursorGroupMetadata } from "../defs";
4
- import getCursor from "./getCursor";
5
- import getDirection from "./getDirection";
6
- import isCursorFirst from "./isCursorFirst";
7
- import isCursorLast from "./isCursorLast";
1
+ import { type Core } from '@cachemap/core';
2
+ import { GraphQLError, type GraphQLResolveInfo } from 'graphql';
3
+ import { type ConnectionInputOptions, type CursorCacheEntry, type CursorGroupMetadata } from '../types.ts';
4
+ import { getCursor } from './getCursor.ts';
5
+ import { getDirection } from './getDirection.ts';
6
+ import { isCursorFirst } from './isCursorFirst.ts';
7
+ import { isCursorLast } from './isCursorLast.ts';
8
8
 
9
9
  export type Context = {
10
- cursorCache: Cachemap;
10
+ cursorCache: Core;
11
11
  groupCursor: string;
12
12
  resultsPerPage: number;
13
13
  };
14
14
 
15
- export default async (
15
+ export const validateCursor = async (
16
16
  { after, before, first, last }: ConnectionInputOptions,
17
17
  { fieldNodes }: GraphQLResolveInfo,
18
- { cursorCache, groupCursor, resultsPerPage }: Context,
18
+ { cursorCache, groupCursor, resultsPerPage }: Context
19
19
  ) => {
20
20
  if (after && !first && !last) {
21
21
  return new GraphQLError(
22
- "Invalid connection argument combination. `after` must be used in combination with `first`.",
23
- fieldNodes,
22
+ 'Invalid connection argument combination. `after` must be used in combination with `first`.',
23
+ { nodes: fieldNodes }
24
24
  );
25
25
  }
26
26
 
27
27
  if (after && last) {
28
28
  return new GraphQLError(
29
- "Invalid connection argument combination. `after` cannot be used in combination with `last`.",
30
- fieldNodes,
29
+ 'Invalid connection argument combination. `after` cannot be used in combination with `last`.',
30
+ { nodes: fieldNodes }
31
31
  );
32
32
  }
33
33
 
34
34
  if (before && !last && !first) {
35
35
  return new GraphQLError(
36
- "Invalid connection argument combination. `before` must be used in combination with `last`.",
37
- fieldNodes,
36
+ 'Invalid connection argument combination. `before` must be used in combination with `last`.',
37
+ { nodes: fieldNodes }
38
38
  );
39
39
  }
40
40
 
41
41
  if (before && first) {
42
42
  return new GraphQLError(
43
- "Invalid connection argument combination. `before` cannot be used in combination with `first`.",
44
- fieldNodes,
43
+ 'Invalid connection argument combination. `before` cannot be used in combination with `first`.',
44
+ { nodes: fieldNodes }
45
45
  );
46
46
  }
47
47
 
48
- const metadata = (await cursorCache.get(`${groupCursor}-metadata`)) as CursorGroupMetadata | undefined;
48
+ const metadata = await cursorCache.get<CursorGroupMetadata>(`${groupCursor}-metadata`);
49
49
 
50
50
  if (!metadata) {
51
- return new GraphQLError("Curser cannot be supplied without previously being provided.", fieldNodes);
51
+ return new GraphQLError('Curser cannot be supplied without previously being provided.', { nodes: fieldNodes });
52
52
  }
53
53
 
54
- const cursor = getCursor({ after, before }) as string;
55
- const entry = (await cursorCache.get(cursor)) as CursorCacheEntry | undefined;
54
+ const cursor = getCursor({ after, before })!;
55
+ const entry = await cursorCache.get<CursorCacheEntry>(cursor);
56
56
 
57
57
  if (!entry) {
58
- return new GraphQLError(`The cursor ${cursor} could not be found.`, fieldNodes);
58
+ return new GraphQLError(`The cursor ${cursor} could not be found.`, { nodes: fieldNodes });
59
59
  }
60
60
 
61
61
  const direction = getDirection(last);
62
62
 
63
63
  if (isCursorLast({ direction, entry, resultsPerPage, ...metadata })) {
64
- return new GraphQLError(`The cursor ${cursor} is the last, you cannot go forward any further.`, fieldNodes);
64
+ return new GraphQLError(`The cursor ${cursor} is the last, you cannot go forward any further.`, {
65
+ nodes: fieldNodes,
66
+ });
65
67
  }
66
68
 
67
69
  if (isCursorFirst({ direction, entry })) {
68
- return new GraphQLError(`The cursor ${cursor} is the first, you cannot go backward any further.`, fieldNodes);
70
+ return new GraphQLError(`The cursor ${cursor} is the first, you cannot go backward any further.`, {
71
+ nodes: fieldNodes,
72
+ });
69
73
  }
70
74
 
71
- return undefined;
75
+ return;
72
76
  };
package/src/index.ts CHANGED
@@ -1,3 +1,3 @@
1
- export * from "./defs";
2
- export { default as removeConnectionInputOptions } from "./helpers/removeConnectionInputOptions";
3
- export { default, connectionResolver } from "./main";
1
+ export * from './types.ts';
2
+ export * from './helpers/removeConnectionInputOptions.ts';
3
+ export * from './main/index.ts';