@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.
- package/README.md +1 -5
- package/dist/cjs/index.cjs +703 -0
- package/dist/cjs/index.cjs.map +1 -0
- package/dist/esm/index.mjs +700 -0
- package/dist/esm/index.mjs.map +1 -0
- package/dist/types/cjs/__testUtils__/generateCursorCache.d.cts +10 -0
- package/dist/types/cjs/__testUtils__/generateCursorCache.d.cts.map +1 -0
- package/dist/types/cjs/__testUtils__/generatePageResponse.d.cts +9 -0
- package/dist/types/cjs/__testUtils__/generatePageResponse.d.cts.map +1 -0
- package/dist/types/cjs/__testUtils__/generatePages.d.cts +2 -0
- package/dist/types/cjs/__testUtils__/generatePages.d.cts.map +1 -0
- package/dist/types/cjs/helpers/cacheCursors.d.cts +12 -0
- package/dist/types/cjs/helpers/cacheCursors.d.cts.map +1 -0
- package/dist/types/cjs/helpers/extractEdges.d.cts +3 -0
- package/dist/types/cjs/helpers/extractEdges.d.cts.map +1 -0
- package/dist/types/cjs/helpers/extractNodes.d.cts +3 -0
- package/dist/types/cjs/helpers/extractNodes.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getCount.d.cts +3 -0
- package/dist/types/cjs/helpers/getCount.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getCurrentPageStartAndEndIndexes.d.cts +14 -0
- package/dist/types/cjs/helpers/getCurrentPageStartAndEndIndexes.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getCursor.d.cts +3 -0
- package/dist/types/cjs/helpers/getCursor.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getDirection.d.cts +3 -0
- package/dist/types/cjs/helpers/getDirection.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getInRangeCachedEdges.d.cts +8 -0
- package/dist/types/cjs/helpers/getInRangeCachedEdges.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getIndexesOnCurrentPage.d.cts +10 -0
- package/dist/types/cjs/helpers/getIndexesOnCurrentPage.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getIndexesOnLastPage.d.cts +3 -0
- package/dist/types/cjs/helpers/getIndexesOnLastPage.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getPageNumbersToRequest.d.cts +12 -0
- package/dist/types/cjs/helpers/getPageNumbersToRequest.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getPagesMissingFromCache.d.cts +3 -0
- package/dist/types/cjs/helpers/getPagesMissingFromCache.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getResultsOnLastPage.d.cts +6 -0
- package/dist/types/cjs/helpers/getResultsOnLastPage.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getStartAndEndCursors.d.cts +4 -0
- package/dist/types/cjs/helpers/getStartAndEndCursors.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getStartAndEndIndexes.d.cts +15 -0
- package/dist/types/cjs/helpers/getStartAndEndIndexes.d.cts.map +1 -0
- package/dist/types/cjs/helpers/getStartAndEndPageNumbers.d.cts +13 -0
- package/dist/types/cjs/helpers/getStartAndEndPageNumbers.d.cts.map +1 -0
- package/dist/types/cjs/helpers/hasPreviousNextPage.d.cts +14 -0
- package/dist/types/cjs/helpers/hasPreviousNextPage.d.cts.map +1 -0
- package/dist/types/cjs/helpers/isCursorFirst.d.cts +7 -0
- package/dist/types/cjs/helpers/isCursorFirst.d.cts.map +1 -0
- package/dist/types/cjs/helpers/isCursorLast.d.cts +10 -0
- package/dist/types/cjs/helpers/isCursorLast.d.cts.map +1 -0
- package/dist/types/cjs/helpers/isCursorSupplied.d.cts +4 -0
- package/dist/types/cjs/helpers/isCursorSupplied.d.cts.map +1 -0
- package/dist/types/cjs/helpers/isFirstPage.d.cts +2 -0
- package/dist/types/cjs/helpers/isFirstPage.d.cts.map +1 -0
- package/dist/types/cjs/helpers/isLastPage.d.cts +6 -0
- package/dist/types/cjs/helpers/isLastPage.d.cts.map +1 -0
- package/dist/types/cjs/helpers/makeEdges.d.cts +6 -0
- package/dist/types/cjs/helpers/makeEdges.d.cts.map +1 -0
- package/dist/types/cjs/helpers/makeEntry.d.cts +10 -0
- package/dist/types/cjs/helpers/makeEntry.d.cts.map +1 -0
- package/dist/types/cjs/helpers/mergeCachedEdges.d.cts +3 -0
- package/dist/types/cjs/helpers/mergeCachedEdges.d.cts.map +1 -0
- package/dist/types/cjs/helpers/removeConnectionInputOptions.d.cts +2 -0
- package/dist/types/cjs/helpers/removeConnectionInputOptions.d.cts.map +1 -0
- package/dist/types/cjs/helpers/requestAndCachePages.d.cts +21 -0
- package/dist/types/cjs/helpers/requestAndCachePages.d.cts.map +1 -0
- package/dist/types/cjs/helpers/requestOutstandingPages.d.cts +18 -0
- package/dist/types/cjs/helpers/requestOutstandingPages.d.cts.map +1 -0
- package/dist/types/cjs/helpers/resolveConnection.d.cts +24 -0
- package/dist/types/cjs/helpers/resolveConnection.d.cts.map +1 -0
- package/dist/types/cjs/helpers/retrieveCachedConnection.d.cts +25 -0
- package/dist/types/cjs/helpers/retrieveCachedConnection.d.cts.map +1 -0
- package/dist/types/cjs/helpers/retrieveCachedEdgesByPage.d.cts +11 -0
- package/dist/types/cjs/helpers/retrieveCachedEdgesByPage.d.cts.map +1 -0
- package/dist/types/cjs/helpers/retrieveEntry.d.cts +8 -0
- package/dist/types/cjs/helpers/retrieveEntry.d.cts.map +1 -0
- package/dist/types/cjs/helpers/validateCursor.d.cts +10 -0
- package/dist/types/cjs/helpers/validateCursor.d.cts.map +1 -0
- package/dist/types/cjs/index.d.cts +4 -0
- package/dist/types/cjs/index.d.cts.map +1 -0
- package/dist/types/cjs/main/index.d.cts +5 -0
- package/dist/types/cjs/main/index.d.cts.map +1 -0
- package/{lib/types/defs/index.d.ts → dist/types/cjs/types.d.cts} +22 -27
- package/dist/types/cjs/types.d.cts.map +1 -0
- package/dist/types/esm/__testUtils__/generateCursorCache.d.ts +10 -0
- package/dist/types/esm/__testUtils__/generateCursorCache.d.ts.map +1 -0
- package/dist/types/esm/__testUtils__/generatePageResponse.d.ts +9 -0
- package/dist/types/esm/__testUtils__/generatePageResponse.d.ts.map +1 -0
- package/dist/types/esm/__testUtils__/generatePages.d.ts +2 -0
- package/dist/types/esm/__testUtils__/generatePages.d.ts.map +1 -0
- package/dist/types/esm/helpers/cacheCursors.d.ts +12 -0
- package/dist/types/esm/helpers/cacheCursors.d.ts.map +1 -0
- package/dist/types/esm/helpers/extractEdges.d.ts +3 -0
- package/dist/types/esm/helpers/extractEdges.d.ts.map +1 -0
- package/dist/types/esm/helpers/extractNodes.d.ts +3 -0
- package/dist/types/esm/helpers/extractNodes.d.ts.map +1 -0
- package/dist/types/esm/helpers/getCount.d.ts +3 -0
- package/dist/types/esm/helpers/getCount.d.ts.map +1 -0
- package/{lib/types → dist/types/esm}/helpers/getCurrentPageStartAndEndIndexes.d.ts +3 -3
- package/dist/types/esm/helpers/getCurrentPageStartAndEndIndexes.d.ts.map +1 -0
- package/dist/types/esm/helpers/getCursor.d.ts +3 -0
- package/dist/types/esm/helpers/getCursor.d.ts.map +1 -0
- package/dist/types/esm/helpers/getDirection.d.ts +3 -0
- package/dist/types/esm/helpers/getDirection.d.ts.map +1 -0
- package/dist/types/esm/helpers/getInRangeCachedEdges.d.ts +8 -0
- package/dist/types/esm/helpers/getInRangeCachedEdges.d.ts.map +1 -0
- package/dist/types/esm/helpers/getIndexesOnCurrentPage.d.ts +10 -0
- package/dist/types/esm/helpers/getIndexesOnCurrentPage.d.ts.map +1 -0
- package/dist/types/esm/helpers/getIndexesOnLastPage.d.ts +3 -0
- package/dist/types/esm/helpers/getIndexesOnLastPage.d.ts.map +1 -0
- package/dist/types/esm/helpers/getPageNumbersToRequest.d.ts +12 -0
- package/dist/types/esm/helpers/getPageNumbersToRequest.d.ts.map +1 -0
- package/dist/types/esm/helpers/getPagesMissingFromCache.d.ts +3 -0
- package/dist/types/esm/helpers/getPagesMissingFromCache.d.ts.map +1 -0
- package/dist/types/esm/helpers/getResultsOnLastPage.d.ts +6 -0
- package/dist/types/esm/helpers/getResultsOnLastPage.d.ts.map +1 -0
- package/dist/types/esm/helpers/getStartAndEndCursors.d.ts +4 -0
- package/dist/types/esm/helpers/getStartAndEndCursors.d.ts.map +1 -0
- package/dist/types/esm/helpers/getStartAndEndIndexes.d.ts +15 -0
- package/dist/types/esm/helpers/getStartAndEndIndexes.d.ts.map +1 -0
- package/dist/types/esm/helpers/getStartAndEndPageNumbers.d.ts +13 -0
- package/dist/types/esm/helpers/getStartAndEndPageNumbers.d.ts.map +1 -0
- package/{lib/types → dist/types/esm}/helpers/hasPreviousNextPage.d.ts +3 -3
- package/dist/types/esm/helpers/hasPreviousNextPage.d.ts.map +1 -0
- package/dist/types/esm/helpers/isCursorFirst.d.ts +7 -0
- package/dist/types/esm/helpers/isCursorFirst.d.ts.map +1 -0
- package/dist/types/esm/helpers/isCursorLast.d.ts +10 -0
- package/dist/types/esm/helpers/isCursorLast.d.ts.map +1 -0
- package/dist/types/esm/helpers/isCursorSupplied.d.ts +4 -0
- package/dist/types/esm/helpers/isCursorSupplied.d.ts.map +1 -0
- package/dist/types/esm/helpers/isFirstPage.d.ts +2 -0
- package/dist/types/esm/helpers/isFirstPage.d.ts.map +1 -0
- package/dist/types/esm/helpers/isLastPage.d.ts +6 -0
- package/dist/types/esm/helpers/isLastPage.d.ts.map +1 -0
- package/dist/types/esm/helpers/makeEdges.d.ts +6 -0
- package/dist/types/esm/helpers/makeEdges.d.ts.map +1 -0
- package/dist/types/esm/helpers/makeEntry.d.ts +10 -0
- package/dist/types/esm/helpers/makeEntry.d.ts.map +1 -0
- package/dist/types/esm/helpers/mergeCachedEdges.d.ts +3 -0
- package/dist/types/esm/helpers/mergeCachedEdges.d.ts.map +1 -0
- package/dist/types/esm/helpers/removeConnectionInputOptions.d.ts +2 -0
- package/dist/types/esm/helpers/removeConnectionInputOptions.d.ts.map +1 -0
- package/dist/types/esm/helpers/requestAndCachePages.d.ts +21 -0
- package/dist/types/esm/helpers/requestAndCachePages.d.ts.map +1 -0
- package/dist/types/esm/helpers/requestOutstandingPages.d.ts +18 -0
- package/dist/types/esm/helpers/requestOutstandingPages.d.ts.map +1 -0
- package/dist/types/esm/helpers/resolveConnection.d.ts +24 -0
- package/dist/types/esm/helpers/resolveConnection.d.ts.map +1 -0
- package/{lib/types → dist/types/esm}/helpers/retrieveCachedConnection.d.ts +5 -6
- package/dist/types/esm/helpers/retrieveCachedConnection.d.ts.map +1 -0
- package/dist/types/esm/helpers/retrieveCachedEdgesByPage.d.ts +11 -0
- package/dist/types/esm/helpers/retrieveCachedEdgesByPage.d.ts.map +1 -0
- package/dist/types/esm/helpers/retrieveEntry.d.ts +8 -0
- package/dist/types/esm/helpers/retrieveEntry.d.ts.map +1 -0
- package/dist/types/esm/helpers/validateCursor.d.ts +10 -0
- package/dist/types/esm/helpers/validateCursor.d.ts.map +1 -0
- package/dist/types/esm/index.d.ts +4 -0
- package/dist/types/esm/index.d.ts.map +1 -0
- package/dist/types/esm/main/index.d.ts +5 -0
- package/dist/types/esm/main/index.d.ts.map +1 -0
- package/dist/types/esm/types.d.ts +77 -0
- package/dist/types/esm/types.d.ts.map +1 -0
- package/dist/types/tsconfig.build.tsbuildinfo +1 -0
- package/package.json +54 -38
- package/src/__testUtils__/generateCursorCache.ts +20 -14
- package/src/__testUtils__/generatePageResponse.ts +17 -12
- package/src/__testUtils__/generatePages.ts +5 -5
- package/src/helpers/cacheCursors.ts +10 -7
- package/src/helpers/extractEdges.ts +3 -3
- package/src/helpers/extractNodes.ts +2 -2
- package/src/helpers/getCount.test.ts +10 -6
- package/src/helpers/getCount.ts +2 -2
- package/src/helpers/getCurrentPageStartAndEndIndexes.ts +1 -1
- package/src/helpers/getCursor.test.ts +10 -6
- package/src/helpers/getCursor.ts +2 -2
- package/src/helpers/getDirection.test.ts +10 -6
- package/src/helpers/getDirection.ts +3 -1
- package/src/helpers/getInRangeCachedEdges.ts +10 -7
- package/src/helpers/getIndexesOnCurrentPage.test.ts +14 -10
- package/src/helpers/getIndexesOnCurrentPage.ts +11 -6
- package/src/helpers/getIndexesOnLastPage.test.ts +10 -6
- package/src/helpers/getIndexesOnLastPage.ts +3 -2
- package/src/helpers/getPageNumbersToRequest.test.ts +15 -11
- package/src/helpers/getPageNumbersToRequest.ts +17 -6
- package/src/helpers/getPagesMissingFromCache.ts +5 -5
- package/src/helpers/getResultsOnLastPage.test.ts +10 -6
- package/src/helpers/getResultsOnLastPage.ts +1 -1
- package/src/helpers/getStartAndEndCursors.ts +1 -1
- package/src/helpers/getStartAndEndIndexes.test.ts +77 -57
- package/src/helpers/getStartAndEndIndexes.ts +28 -22
- package/src/helpers/getStartAndEndPageNumbers.test.ts +46 -28
- package/src/helpers/getStartAndEndPageNumbers.ts +12 -12
- package/src/helpers/hasPreviousNextPage.test.ts +17 -8
- package/src/helpers/hasPreviousNextPage.ts +6 -4
- package/src/helpers/isCursorFirst.test.ts +13 -7
- package/src/helpers/isCursorFirst.ts +3 -2
- package/src/helpers/isCursorLast.test.ts +27 -23
- package/src/helpers/isCursorLast.ts +4 -4
- package/src/helpers/isCursorSupplied.test.ts +18 -10
- package/src/helpers/isCursorSupplied.ts +3 -2
- package/src/helpers/isFirstPage.test.ts +10 -6
- package/src/helpers/isFirstPage.ts +1 -1
- package/src/helpers/isLastPage.test.ts +10 -6
- package/src/helpers/isLastPage.ts +1 -1
- package/src/helpers/makeEdges.ts +3 -3
- package/src/helpers/makeEntry.ts +8 -5
- package/src/helpers/mergeCachedEdges.ts +5 -5
- package/src/helpers/removeConnectionInputOptions.test.ts +10 -8
- package/src/helpers/removeConnectionInputOptions.ts +4 -3
- package/src/helpers/requestAndCachePages.ts +14 -11
- package/src/helpers/requestOutstandingPages.ts +18 -19
- package/src/helpers/resolveConnection.ts +20 -34
- package/src/helpers/retrieveCachedConnection.test.ts +703 -338
- package/src/helpers/retrieveCachedConnection.ts +28 -20
- package/src/helpers/retrieveCachedEdgesByPage.ts +10 -10
- package/src/helpers/retrieveEntry.ts +32 -0
- package/src/helpers/validateCursor.test.ts +88 -61
- package/src/helpers/validateCursor.ts +30 -26
- package/src/index.ts +3 -3
- package/src/main/__snapshots__/index.test.ts.snap +258 -258
- package/src/main/index.test.ts +405 -287
- package/src/main/index.ts +37 -35
- package/src/{defs/index.ts → types.ts} +12 -18
- package/tsconfig.build.json +10 -0
- package/tsconfig.json +11 -0
- package/lib/browser/index.js +0 -2
- package/lib/browser/index.js.map +0 -1
- package/lib/browser/production.analysis.txt +0 -314
- package/lib/main/__testUtils__/generateCursorCache.js +0 -88
- package/lib/main/__testUtils__/generateCursorCache.js.map +0 -1
- package/lib/main/__testUtils__/generatePageResponse.js +0 -33
- package/lib/main/__testUtils__/generatePageResponse.js.map +0 -1
- package/lib/main/__testUtils__/generatePages.js +0 -23
- package/lib/main/__testUtils__/generatePages.js.map +0 -1
- package/lib/main/defs/index.js +0 -2
- package/lib/main/defs/index.js.map +0 -1
- package/lib/main/helpers/cacheCursors.js +0 -40
- package/lib/main/helpers/cacheCursors.js.map +0 -1
- package/lib/main/helpers/extractEdges.js +0 -11
- package/lib/main/helpers/extractEdges.js.map +0 -1
- package/lib/main/helpers/extractNodes.js +0 -11
- package/lib/main/helpers/extractNodes.js.map +0 -1
- package/lib/main/helpers/getCount.js +0 -14
- package/lib/main/helpers/getCount.js.map +0 -1
- package/lib/main/helpers/getCurrentPageStartAndEndIndexes.js +0 -23
- package/lib/main/helpers/getCurrentPageStartAndEndIndexes.js.map +0 -1
- package/lib/main/helpers/getCursor.js +0 -14
- package/lib/main/helpers/getCursor.js.map +0 -1
- package/lib/main/helpers/getDirection.js +0 -11
- package/lib/main/helpers/getDirection.js.map +0 -1
- package/lib/main/helpers/getInRangeCachedEdges.js +0 -36
- package/lib/main/helpers/getInRangeCachedEdges.js.map +0 -1
- package/lib/main/helpers/getIndexesOnCurrentPage.js +0 -30
- package/lib/main/helpers/getIndexesOnCurrentPage.js.map +0 -1
- package/lib/main/helpers/getIndexesOnLastPage.js +0 -21
- package/lib/main/helpers/getIndexesOnLastPage.js.map +0 -1
- package/lib/main/helpers/getPageNumbersToRequest.js +0 -43
- package/lib/main/helpers/getPageNumbersToRequest.js.map +0 -1
- package/lib/main/helpers/getPagesMissingFromCache.js +0 -19
- package/lib/main/helpers/getPagesMissingFromCache.js.map +0 -1
- package/lib/main/helpers/getResultsOnLastPage.js +0 -17
- package/lib/main/helpers/getResultsOnLastPage.js.map +0 -1
- package/lib/main/helpers/getStartAndEndCursors.js +0 -22
- package/lib/main/helpers/getStartAndEndCursors.js.map +0 -1
- package/lib/main/helpers/getStartAndEndIndexes.js +0 -105
- package/lib/main/helpers/getStartAndEndIndexes.js.map +0 -1
- package/lib/main/helpers/getStartAndEndPageNumbers.js +0 -51
- package/lib/main/helpers/getStartAndEndPageNumbers.js.map +0 -1
- package/lib/main/helpers/hasPreviousNextPage.js +0 -33
- package/lib/main/helpers/hasPreviousNextPage.js.map +0 -1
- package/lib/main/helpers/isCursorFirst.js +0 -17
- package/lib/main/helpers/isCursorFirst.js.map +0 -1
- package/lib/main/helpers/isCursorLast.js +0 -27
- package/lib/main/helpers/isCursorLast.js.map +0 -1
- package/lib/main/helpers/isCursorSupplied.js +0 -14
- package/lib/main/helpers/isCursorSupplied.js.map +0 -1
- package/lib/main/helpers/isFirstPage.js +0 -11
- package/lib/main/helpers/isFirstPage.js.map +0 -1
- package/lib/main/helpers/isLastPage.js +0 -14
- package/lib/main/helpers/isLastPage.js.map +0 -1
- package/lib/main/helpers/makeEdges.js +0 -14
- package/lib/main/helpers/makeEdges.js.map +0 -1
- package/lib/main/helpers/makeEntry.js +0 -38
- package/lib/main/helpers/makeEntry.js.map +0 -1
- package/lib/main/helpers/mergeCachedEdges.js +0 -21
- package/lib/main/helpers/mergeCachedEdges.js.map +0 -1
- package/lib/main/helpers/removeConnectionInputOptions.js +0 -17
- package/lib/main/helpers/removeConnectionInputOptions.js.map +0 -1
- package/lib/main/helpers/requestAndCachePages.js +0 -66
- package/lib/main/helpers/requestAndCachePages.js.map +0 -1
- package/lib/main/helpers/requestOutstandingPages.js +0 -67
- package/lib/main/helpers/requestOutstandingPages.js.map +0 -1
- package/lib/main/helpers/resolveConnection.js +0 -95
- package/lib/main/helpers/resolveConnection.js.map +0 -1
- package/lib/main/helpers/retrieveCachedConnection.js +0 -90
- package/lib/main/helpers/retrieveCachedConnection.js.map +0 -1
- package/lib/main/helpers/retrieveCachedEdgesByPage.js +0 -45
- package/lib/main/helpers/retrieveCachedEdgesByPage.js.map +0 -1
- package/lib/main/helpers/validateCursor.js +0 -88
- package/lib/main/helpers/validateCursor.js.map +0 -1
- package/lib/main/index.js +0 -52
- package/lib/main/index.js.map +0 -1
- package/lib/main/main/index.js +0 -100
- package/lib/main/main/index.js.map +0 -1
- package/lib/module/__testUtils__/generateCursorCache.js +0 -71
- package/lib/module/__testUtils__/generateCursorCache.js.map +0 -1
- package/lib/module/__testUtils__/generatePageResponse.js +0 -23
- package/lib/module/__testUtils__/generatePageResponse.js.map +0 -1
- package/lib/module/__testUtils__/generatePages.js +0 -11
- package/lib/module/__testUtils__/generatePages.js.map +0 -1
- package/lib/module/defs/index.js +0 -2
- package/lib/module/defs/index.js.map +0 -1
- package/lib/module/helpers/cacheCursors.js +0 -30
- package/lib/module/helpers/cacheCursors.js.map +0 -1
- package/lib/module/helpers/extractEdges.js +0 -2
- package/lib/module/helpers/extractEdges.js.map +0 -1
- package/lib/module/helpers/extractNodes.js +0 -2
- package/lib/module/helpers/extractNodes.js.map +0 -1
- package/lib/module/helpers/getCount.js +0 -5
- package/lib/module/helpers/getCount.js.map +0 -1
- package/lib/module/helpers/getCurrentPageStartAndEndIndexes.js +0 -11
- package/lib/module/helpers/getCurrentPageStartAndEndIndexes.js.map +0 -1
- package/lib/module/helpers/getCursor.js +0 -5
- package/lib/module/helpers/getCursor.js.map +0 -1
- package/lib/module/helpers/getDirection.js +0 -2
- package/lib/module/helpers/getDirection.js.map +0 -1
- package/lib/module/helpers/getInRangeCachedEdges.js +0 -26
- package/lib/module/helpers/getInRangeCachedEdges.js.map +0 -1
- package/lib/module/helpers/getIndexesOnCurrentPage.js +0 -17
- package/lib/module/helpers/getIndexesOnCurrentPage.js.map +0 -1
- package/lib/module/helpers/getIndexesOnLastPage.js +0 -9
- package/lib/module/helpers/getIndexesOnLastPage.js.map +0 -1
- package/lib/module/helpers/getPageNumbersToRequest.js +0 -30
- package/lib/module/helpers/getPageNumbersToRequest.js.map +0 -1
- package/lib/module/helpers/getPagesMissingFromCache.js +0 -10
- package/lib/module/helpers/getPagesMissingFromCache.js.map +0 -1
- package/lib/module/helpers/getResultsOnLastPage.js +0 -8
- package/lib/module/helpers/getResultsOnLastPage.js.map +0 -1
- package/lib/module/helpers/getStartAndEndCursors.js +0 -10
- package/lib/module/helpers/getStartAndEndCursors.js.map +0 -1
- package/lib/module/helpers/getStartAndEndIndexes.js +0 -86
- package/lib/module/helpers/getStartAndEndIndexes.js.map +0 -1
- package/lib/module/helpers/getStartAndEndPageNumbers.js +0 -35
- package/lib/module/helpers/getStartAndEndPageNumbers.js.map +0 -1
- package/lib/module/helpers/hasPreviousNextPage.js +0 -18
- package/lib/module/helpers/hasPreviousNextPage.js.map +0 -1
- package/lib/module/helpers/isCursorFirst.js +0 -8
- package/lib/module/helpers/isCursorFirst.js.map +0 -1
- package/lib/module/helpers/isCursorLast.js +0 -15
- package/lib/module/helpers/isCursorLast.js.map +0 -1
- package/lib/module/helpers/isCursorSupplied.js +0 -5
- package/lib/module/helpers/isCursorSupplied.js.map +0 -1
- package/lib/module/helpers/isFirstPage.js +0 -2
- package/lib/module/helpers/isFirstPage.js.map +0 -1
- package/lib/module/helpers/isLastPage.js +0 -5
- package/lib/module/helpers/isLastPage.js.map +0 -1
- package/lib/module/helpers/makeEdges.js +0 -5
- package/lib/module/helpers/makeEdges.js.map +0 -1
- package/lib/module/helpers/makeEntry.js +0 -25
- package/lib/module/helpers/makeEntry.js.map +0 -1
- package/lib/module/helpers/mergeCachedEdges.js +0 -12
- package/lib/module/helpers/mergeCachedEdges.js.map +0 -1
- package/lib/module/helpers/removeConnectionInputOptions.js +0 -4
- package/lib/module/helpers/removeConnectionInputOptions.js.map +0 -1
- package/lib/module/helpers/requestAndCachePages.js +0 -54
- package/lib/module/helpers/requestAndCachePages.js.map +0 -1
- package/lib/module/helpers/requestOutstandingPages.js +0 -57
- package/lib/module/helpers/requestOutstandingPages.js.map +0 -1
- package/lib/module/helpers/resolveConnection.js +0 -78
- package/lib/module/helpers/resolveConnection.js.map +0 -1
- package/lib/module/helpers/retrieveCachedConnection.js +0 -70
- package/lib/module/helpers/retrieveCachedConnection.js.map +0 -1
- package/lib/module/helpers/retrieveCachedEdgesByPage.js +0 -35
- package/lib/module/helpers/retrieveCachedEdgesByPage.js.map +0 -1
- package/lib/module/helpers/validateCursor.js +0 -71
- package/lib/module/helpers/validateCursor.js.map +0 -1
- package/lib/module/index.js +0 -4
- package/lib/module/index.js.map +0 -1
- package/lib/module/main/index.js +0 -83
- package/lib/module/main/index.js.map +0 -1
- package/lib/types/__testUtils__/generateCursorCache.d.ts +0 -11
- package/lib/types/__testUtils__/generateCursorCache.d.ts.map +0 -1
- package/lib/types/__testUtils__/generatePageResponse.d.ts +0 -18
- package/lib/types/__testUtils__/generatePageResponse.d.ts.map +0 -1
- package/lib/types/__testUtils__/generatePages.d.ts +0 -3
- package/lib/types/__testUtils__/generatePages.d.ts.map +0 -1
- package/lib/types/defs/index.d.ts.map +0 -1
- package/lib/types/helpers/cacheCursors.d.ts +0 -13
- package/lib/types/helpers/cacheCursors.d.ts.map +0 -1
- package/lib/types/helpers/extractEdges.d.ts +0 -4
- package/lib/types/helpers/extractEdges.d.ts.map +0 -1
- package/lib/types/helpers/extractNodes.d.ts +0 -4
- package/lib/types/helpers/extractNodes.d.ts.map +0 -1
- package/lib/types/helpers/getCount.d.ts +0 -4
- package/lib/types/helpers/getCount.d.ts.map +0 -1
- package/lib/types/helpers/getCount.test.d.ts +0 -2
- package/lib/types/helpers/getCount.test.d.ts.map +0 -1
- package/lib/types/helpers/getCurrentPageStartAndEndIndexes.d.ts.map +0 -1
- package/lib/types/helpers/getCursor.d.ts +0 -4
- package/lib/types/helpers/getCursor.d.ts.map +0 -1
- package/lib/types/helpers/getCursor.test.d.ts +0 -2
- package/lib/types/helpers/getCursor.test.d.ts.map +0 -1
- package/lib/types/helpers/getDirection.d.ts +0 -3
- package/lib/types/helpers/getDirection.d.ts.map +0 -1
- package/lib/types/helpers/getDirection.test.d.ts +0 -2
- package/lib/types/helpers/getDirection.test.d.ts.map +0 -1
- package/lib/types/helpers/getInRangeCachedEdges.d.ts +0 -9
- package/lib/types/helpers/getInRangeCachedEdges.d.ts.map +0 -1
- package/lib/types/helpers/getIndexesOnCurrentPage.d.ts +0 -7
- package/lib/types/helpers/getIndexesOnCurrentPage.d.ts.map +0 -1
- package/lib/types/helpers/getIndexesOnCurrentPage.test.d.ts +0 -2
- package/lib/types/helpers/getIndexesOnCurrentPage.test.d.ts.map +0 -1
- package/lib/types/helpers/getIndexesOnLastPage.d.ts +0 -4
- package/lib/types/helpers/getIndexesOnLastPage.d.ts.map +0 -1
- package/lib/types/helpers/getIndexesOnLastPage.test.d.ts +0 -2
- package/lib/types/helpers/getIndexesOnLastPage.test.d.ts.map +0 -1
- package/lib/types/helpers/getPageNumbersToRequest.d.ts +0 -8
- package/lib/types/helpers/getPageNumbersToRequest.d.ts.map +0 -1
- package/lib/types/helpers/getPageNumbersToRequest.test.d.ts +0 -2
- package/lib/types/helpers/getPageNumbersToRequest.test.d.ts.map +0 -1
- package/lib/types/helpers/getPagesMissingFromCache.d.ts +0 -4
- package/lib/types/helpers/getPagesMissingFromCache.d.ts.map +0 -1
- package/lib/types/helpers/getResultsOnLastPage.d.ts +0 -7
- package/lib/types/helpers/getResultsOnLastPage.d.ts.map +0 -1
- package/lib/types/helpers/getResultsOnLastPage.test.d.ts +0 -2
- package/lib/types/helpers/getResultsOnLastPage.test.d.ts.map +0 -1
- package/lib/types/helpers/getStartAndEndCursors.d.ts +0 -4
- package/lib/types/helpers/getStartAndEndCursors.d.ts.map +0 -1
- package/lib/types/helpers/getStartAndEndIndexes.d.ts +0 -10
- package/lib/types/helpers/getStartAndEndIndexes.d.ts.map +0 -1
- package/lib/types/helpers/getStartAndEndIndexes.test.d.ts +0 -2
- package/lib/types/helpers/getStartAndEndIndexes.test.d.ts.map +0 -1
- package/lib/types/helpers/getStartAndEndPageNumbers.d.ts +0 -9
- package/lib/types/helpers/getStartAndEndPageNumbers.d.ts.map +0 -1
- package/lib/types/helpers/getStartAndEndPageNumbers.test.d.ts +0 -2
- package/lib/types/helpers/getStartAndEndPageNumbers.test.d.ts.map +0 -1
- package/lib/types/helpers/hasPreviousNextPage.d.ts.map +0 -1
- package/lib/types/helpers/hasPreviousNextPage.test.d.ts +0 -2
- package/lib/types/helpers/hasPreviousNextPage.test.d.ts.map +0 -1
- package/lib/types/helpers/isCursorFirst.d.ts +0 -8
- package/lib/types/helpers/isCursorFirst.d.ts.map +0 -1
- package/lib/types/helpers/isCursorFirst.test.d.ts +0 -2
- package/lib/types/helpers/isCursorFirst.test.d.ts.map +0 -1
- package/lib/types/helpers/isCursorLast.d.ts +0 -11
- package/lib/types/helpers/isCursorLast.d.ts.map +0 -1
- package/lib/types/helpers/isCursorLast.test.d.ts +0 -2
- package/lib/types/helpers/isCursorLast.test.d.ts.map +0 -1
- package/lib/types/helpers/isCursorSupplied.d.ts +0 -4
- package/lib/types/helpers/isCursorSupplied.d.ts.map +0 -1
- package/lib/types/helpers/isCursorSupplied.test.d.ts +0 -2
- package/lib/types/helpers/isCursorSupplied.test.d.ts.map +0 -1
- package/lib/types/helpers/isFirstPage.d.ts +0 -3
- package/lib/types/helpers/isFirstPage.d.ts.map +0 -1
- package/lib/types/helpers/isFirstPage.test.d.ts +0 -2
- package/lib/types/helpers/isFirstPage.test.d.ts.map +0 -1
- package/lib/types/helpers/isLastPage.d.ts +0 -7
- package/lib/types/helpers/isLastPage.d.ts.map +0 -1
- package/lib/types/helpers/isLastPage.test.d.ts +0 -2
- package/lib/types/helpers/isLastPage.test.d.ts.map +0 -1
- package/lib/types/helpers/makeEdges.d.ts +0 -7
- package/lib/types/helpers/makeEdges.d.ts.map +0 -1
- package/lib/types/helpers/makeEntry.d.ts +0 -11
- package/lib/types/helpers/makeEntry.d.ts.map +0 -1
- package/lib/types/helpers/mergeCachedEdges.d.ts +0 -4
- package/lib/types/helpers/mergeCachedEdges.d.ts.map +0 -1
- package/lib/types/helpers/removeConnectionInputOptions.d.ts +0 -3
- package/lib/types/helpers/removeConnectionInputOptions.d.ts.map +0 -1
- package/lib/types/helpers/removeConnectionInputOptions.test.d.ts +0 -2
- package/lib/types/helpers/removeConnectionInputOptions.test.d.ts.map +0 -1
- package/lib/types/helpers/requestAndCachePages.d.ts +0 -21
- package/lib/types/helpers/requestAndCachePages.d.ts.map +0 -1
- package/lib/types/helpers/requestOutstandingPages.d.ts +0 -18
- package/lib/types/helpers/requestOutstandingPages.d.ts.map +0 -1
- package/lib/types/helpers/resolveConnection.d.ts +0 -24
- package/lib/types/helpers/resolveConnection.d.ts.map +0 -1
- package/lib/types/helpers/retrieveCachedConnection.d.ts.map +0 -1
- package/lib/types/helpers/retrieveCachedConnection.test.d.ts +0 -2
- package/lib/types/helpers/retrieveCachedConnection.test.d.ts.map +0 -1
- package/lib/types/helpers/retrieveCachedEdgesByPage.d.ts +0 -12
- package/lib/types/helpers/retrieveCachedEdgesByPage.d.ts.map +0 -1
- package/lib/types/helpers/validateCursor.d.ts +0 -11
- package/lib/types/helpers/validateCursor.d.ts.map +0 -1
- package/lib/types/helpers/validateCursor.test.d.ts +0 -2
- package/lib/types/helpers/validateCursor.test.d.ts.map +0 -1
- package/lib/types/index.d.ts +0 -4
- package/lib/types/index.d.ts.map +0 -1
- package/lib/types/main/index.d.ts +0 -5
- package/lib/types/main/index.d.ts.map +0 -1
- package/lib/types/main/index.test.d.ts +0 -2
- package/lib/types/main/index.test.d.ts.map +0 -1
- package/package-lock.json +0 -18
@@ -1,40 +1,48 @@
|
|
1
|
-
import
|
2
|
-
import { CachedEdges, ConnectionInputOptions, CursorGroupMetadata } from
|
3
|
-
import
|
4
|
-
import
|
5
|
-
import
|
6
|
-
import
|
7
|
-
import {
|
8
|
-
import {
|
9
|
-
import
|
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:
|
12
|
+
cursorCache: Core;
|
14
13
|
groupCursor: string;
|
15
14
|
resultsPerPage: number;
|
16
15
|
};
|
17
16
|
|
18
|
-
export
|
19
|
-
|
20
|
-
|
21
|
-
|
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
|
-
|
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:
|
36
|
-
|
37
|
-
|
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
|
2
|
-
import { Edge } from
|
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
|
10
|
-
const { entries, metadata } =
|
9
|
+
export const retrieveCachedEdgesByPage = async (cursorCache: Core, { groupCursor, pageNumber }: Context) => {
|
10
|
+
const { entries, metadata } = await cursorCache.export<CursorCacheEntry>({
|
11
11
|
filterByValue: [
|
12
|
-
{
|
13
|
-
{
|
12
|
+
{ comparator: pageNumber, keyChain: 'page' },
|
13
|
+
{ comparator: groupCursor, keyChain: 'group' },
|
14
14
|
],
|
15
|
-
})
|
15
|
+
});
|
16
16
|
|
17
17
|
return {
|
18
|
-
edges: entries.reduce((cached, [key, { index, node }]) => {
|
19
|
-
if (metadata[index]
|
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
|
-
}, []
|
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
|
2
|
-
import map from
|
3
|
-
import {
|
4
|
-
import
|
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(
|
6
|
+
describe('validateCursor', () => {
|
7
7
|
const ctx: Context = {
|
8
|
-
cursorCache: new
|
9
|
-
name:
|
8
|
+
cursorCache: new Core({
|
9
|
+
name: 'GRAPHQL_BOX_CONNECTION_RESOLVER',
|
10
10
|
store: map(),
|
11
|
-
type:
|
11
|
+
type: 'CONNECTION_RESOLVER',
|
12
12
|
}),
|
13
|
-
groupCursor:
|
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
|
-
|
21
|
+
describe('when `after` is provided but `first` is NOT', () => {
|
22
22
|
const info = {};
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
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
|
-
|
33
|
+
describe('when `after` and `last` are provided', () => {
|
30
34
|
const info = {};
|
31
35
|
|
32
|
-
|
33
|
-
|
34
|
-
|
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
|
-
|
45
|
+
describe('when `before` is provided but `last` is NOT', () => {
|
38
46
|
const info = {};
|
39
47
|
|
40
|
-
|
41
|
-
|
42
|
-
|
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
|
-
|
57
|
+
describe('when `before` and `first` are provided', () => {
|
46
58
|
const info = {};
|
47
59
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
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
|
-
|
55
|
-
const args = { after:
|
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
|
-
|
59
|
-
|
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
|
-
|
64
|
-
|
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
|
-
|
69
|
-
|
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
|
-
|
74
|
-
|
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
|
-
|
80
|
-
|
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
|
-
|
85
|
-
|
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
|
-
|
91
|
-
|
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
|
-
|
96
|
-
|
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
|
-
|
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
|
-
|
104
|
-
|
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
|
-
|
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
|
2
|
-
import { GraphQLError, GraphQLResolveInfo } from
|
3
|
-
import { ConnectionInputOptions, CursorCacheEntry, CursorGroupMetadata } from
|
4
|
-
import getCursor from
|
5
|
-
import getDirection from
|
6
|
-
import isCursorFirst from
|
7
|
-
import isCursorLast from
|
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:
|
10
|
+
cursorCache: Core;
|
11
11
|
groupCursor: string;
|
12
12
|
resultsPerPage: number;
|
13
13
|
};
|
14
14
|
|
15
|
-
export
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 =
|
48
|
+
const metadata = await cursorCache.get<CursorGroupMetadata>(`${groupCursor}-metadata`);
|
49
49
|
|
50
50
|
if (!metadata) {
|
51
|
-
return new GraphQLError(
|
51
|
+
return new GraphQLError('Curser cannot be supplied without previously being provided.', { nodes: fieldNodes });
|
52
52
|
}
|
53
53
|
|
54
|
-
const cursor = getCursor({ after, before })
|
55
|
-
const entry =
|
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.`,
|
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.`,
|
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
|
75
|
+
return;
|
72
76
|
};
|
package/src/index.ts
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
export * from
|
2
|
-
export
|
3
|
-
export
|
1
|
+
export * from './types.ts';
|
2
|
+
export * from './helpers/removeConnectionInputOptions.ts';
|
3
|
+
export * from './main/index.ts';
|