@graphql-box/connection-resolver 4.1.4 → 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.mjs +0 -71
- package/lib/module/__testUtils__/generateCursorCache.mjs.map +0 -1
- package/lib/module/__testUtils__/generatePageResponse.mjs +0 -23
- package/lib/module/__testUtils__/generatePageResponse.mjs.map +0 -1
- package/lib/module/__testUtils__/generatePages.mjs +0 -11
- package/lib/module/__testUtils__/generatePages.mjs.map +0 -1
- package/lib/module/defs/index.mjs +0 -2
- package/lib/module/defs/index.mjs.map +0 -1
- package/lib/module/helpers/cacheCursors.mjs +0 -30
- package/lib/module/helpers/cacheCursors.mjs.map +0 -1
- package/lib/module/helpers/extractEdges.mjs +0 -2
- package/lib/module/helpers/extractEdges.mjs.map +0 -1
- package/lib/module/helpers/extractNodes.mjs +0 -2
- package/lib/module/helpers/extractNodes.mjs.map +0 -1
- package/lib/module/helpers/getCount.mjs +0 -5
- package/lib/module/helpers/getCount.mjs.map +0 -1
- package/lib/module/helpers/getCurrentPageStartAndEndIndexes.mjs +0 -11
- package/lib/module/helpers/getCurrentPageStartAndEndIndexes.mjs.map +0 -1
- package/lib/module/helpers/getCursor.mjs +0 -5
- package/lib/module/helpers/getCursor.mjs.map +0 -1
- package/lib/module/helpers/getDirection.mjs +0 -2
- package/lib/module/helpers/getDirection.mjs.map +0 -1
- package/lib/module/helpers/getInRangeCachedEdges.mjs +0 -26
- package/lib/module/helpers/getInRangeCachedEdges.mjs.map +0 -1
- package/lib/module/helpers/getIndexesOnCurrentPage.mjs +0 -17
- package/lib/module/helpers/getIndexesOnCurrentPage.mjs.map +0 -1
- package/lib/module/helpers/getIndexesOnLastPage.mjs +0 -9
- package/lib/module/helpers/getIndexesOnLastPage.mjs.map +0 -1
- package/lib/module/helpers/getPageNumbersToRequest.mjs +0 -30
- package/lib/module/helpers/getPageNumbersToRequest.mjs.map +0 -1
- package/lib/module/helpers/getPagesMissingFromCache.mjs +0 -10
- package/lib/module/helpers/getPagesMissingFromCache.mjs.map +0 -1
- package/lib/module/helpers/getResultsOnLastPage.mjs +0 -8
- package/lib/module/helpers/getResultsOnLastPage.mjs.map +0 -1
- package/lib/module/helpers/getStartAndEndCursors.mjs +0 -10
- package/lib/module/helpers/getStartAndEndCursors.mjs.map +0 -1
- package/lib/module/helpers/getStartAndEndIndexes.mjs +0 -86
- package/lib/module/helpers/getStartAndEndIndexes.mjs.map +0 -1
- package/lib/module/helpers/getStartAndEndPageNumbers.mjs +0 -35
- package/lib/module/helpers/getStartAndEndPageNumbers.mjs.map +0 -1
- package/lib/module/helpers/hasPreviousNextPage.mjs +0 -18
- package/lib/module/helpers/hasPreviousNextPage.mjs.map +0 -1
- package/lib/module/helpers/isCursorFirst.mjs +0 -8
- package/lib/module/helpers/isCursorFirst.mjs.map +0 -1
- package/lib/module/helpers/isCursorLast.mjs +0 -15
- package/lib/module/helpers/isCursorLast.mjs.map +0 -1
- package/lib/module/helpers/isCursorSupplied.mjs +0 -5
- package/lib/module/helpers/isCursorSupplied.mjs.map +0 -1
- package/lib/module/helpers/isFirstPage.mjs +0 -2
- package/lib/module/helpers/isFirstPage.mjs.map +0 -1
- package/lib/module/helpers/isLastPage.mjs +0 -5
- package/lib/module/helpers/isLastPage.mjs.map +0 -1
- package/lib/module/helpers/makeEdges.mjs +0 -5
- package/lib/module/helpers/makeEdges.mjs.map +0 -1
- package/lib/module/helpers/makeEntry.mjs +0 -25
- package/lib/module/helpers/makeEntry.mjs.map +0 -1
- package/lib/module/helpers/mergeCachedEdges.mjs +0 -12
- package/lib/module/helpers/mergeCachedEdges.mjs.map +0 -1
- package/lib/module/helpers/removeConnectionInputOptions.mjs +0 -4
- package/lib/module/helpers/removeConnectionInputOptions.mjs.map +0 -1
- package/lib/module/helpers/requestAndCachePages.mjs +0 -54
- package/lib/module/helpers/requestAndCachePages.mjs.map +0 -1
- package/lib/module/helpers/requestOutstandingPages.mjs +0 -57
- package/lib/module/helpers/requestOutstandingPages.mjs.map +0 -1
- package/lib/module/helpers/resolveConnection.mjs +0 -78
- package/lib/module/helpers/resolveConnection.mjs.map +0 -1
- package/lib/module/helpers/retrieveCachedConnection.mjs +0 -70
- package/lib/module/helpers/retrieveCachedConnection.mjs.map +0 -1
- package/lib/module/helpers/retrieveCachedEdgesByPage.mjs +0 -35
- package/lib/module/helpers/retrieveCachedEdgesByPage.mjs.map +0 -1
- package/lib/module/helpers/validateCursor.mjs +0 -71
- package/lib/module/helpers/validateCursor.mjs.map +0 -1
- package/lib/module/index.mjs +0 -4
- package/lib/module/index.mjs.map +0 -1
- package/lib/module/main/index.mjs +0 -83
- package/lib/module/main/index.mjs.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,5 +1,6 @@
|
|
1
|
-
import {
|
2
|
-
import
|
1
|
+
import { isNumber } from 'lodash-es';
|
2
|
+
import { type CachedEdges, type CursorGroupMetadata, type Indexes } from '../types.ts';
|
3
|
+
import { getIndexesOnLastPage } from './getIndexesOnLastPage.ts';
|
3
4
|
|
4
5
|
export type HasPreviousPageParams = {
|
5
6
|
cachedEdgesByPage: CachedEdges[];
|
@@ -14,7 +15,7 @@ export type HasNextPageParams = {
|
|
14
15
|
};
|
15
16
|
|
16
17
|
export const hasPreviousPage = ({ cachedEdgesByPage, startIndex }: HasPreviousPageParams) =>
|
17
|
-
cachedEdgesByPage[0]
|
18
|
+
(isNumber(cachedEdgesByPage[0]?.pageNumber) && cachedEdgesByPage[0]?.pageNumber !== 1) || startIndex.relative > 0;
|
18
19
|
|
19
20
|
export const hasNextPage = ({
|
20
21
|
cachedEdgesByPage,
|
@@ -22,5 +23,6 @@ export const hasNextPage = ({
|
|
22
23
|
metadata: { totalPages, totalResults },
|
23
24
|
resultsPerPage,
|
24
25
|
}: HasNextPageParams) =>
|
25
|
-
cachedEdgesByPage[cachedEdgesByPage.length - 1]
|
26
|
+
(isNumber(cachedEdgesByPage[cachedEdgesByPage.length - 1]?.pageNumber) &&
|
27
|
+
cachedEdgesByPage[cachedEdgesByPage.length - 1]?.pageNumber !== totalPages) ||
|
26
28
|
endIndex.relative < getIndexesOnLastPage({ resultsPerPage, totalResults });
|
@@ -1,14 +1,20 @@
|
|
1
|
-
import { CursorCacheEntry } from
|
2
|
-
import isCursorFirst from
|
1
|
+
import { type CursorCacheEntry } from '../types.ts';
|
2
|
+
import { isCursorFirst } from './isCursorFirst.ts';
|
3
3
|
|
4
|
-
describe(
|
5
|
-
|
4
|
+
describe('isCursorFirst', () => {
|
5
|
+
describe('when cursor is first', () => {
|
6
6
|
const entry = { index: 0, page: 1 };
|
7
|
-
|
7
|
+
|
8
|
+
it('should return the correct value', () => {
|
9
|
+
expect(isCursorFirst({ direction: 'backward', entry: entry as CursorCacheEntry })).toBe(true);
|
10
|
+
});
|
8
11
|
});
|
9
12
|
|
10
|
-
|
13
|
+
describe('when cursor is NOT first', () => {
|
11
14
|
const entry = { index: 1, page: 1 };
|
12
|
-
|
15
|
+
|
16
|
+
it('should return the correct value', () => {
|
17
|
+
expect(isCursorFirst({ direction: 'backward', entry: entry as CursorCacheEntry })).toBe(false);
|
18
|
+
});
|
13
19
|
});
|
14
20
|
});
|
@@ -1,8 +1,9 @@
|
|
1
|
-
import { CursorCacheEntry, Direction } from
|
1
|
+
import { type CursorCacheEntry, type Direction } from '../types.ts';
|
2
2
|
|
3
3
|
export type Params = {
|
4
4
|
direction: Direction;
|
5
5
|
entry: CursorCacheEntry;
|
6
6
|
};
|
7
7
|
|
8
|
-
export
|
8
|
+
export const isCursorFirst = ({ direction, entry: { index, page } }: Params) =>
|
9
|
+
direction === 'backward' && page === 1 && index === 0;
|
@@ -1,32 +1,36 @@
|
|
1
|
-
import { CursorCacheEntry } from
|
2
|
-
import isCursorLast from
|
1
|
+
import { type CursorCacheEntry } from '../types.ts';
|
2
|
+
import { isCursorLast } from './isCursorLast.ts';
|
3
3
|
|
4
|
-
describe(
|
5
|
-
|
4
|
+
describe('isCursorLast', () => {
|
5
|
+
describe('when cursor is last', () => {
|
6
6
|
const entry = { index: 2, page: 6 };
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
8
|
+
it('should return the correct value', () => {
|
9
|
+
expect(
|
10
|
+
isCursorLast({
|
11
|
+
direction: 'forward',
|
12
|
+
entry: entry as CursorCacheEntry,
|
13
|
+
resultsPerPage: 10,
|
14
|
+
totalPages: 6,
|
15
|
+
totalResults: 53,
|
16
|
+
})
|
17
|
+
).toBe(true);
|
18
|
+
});
|
17
19
|
});
|
18
20
|
|
19
|
-
|
21
|
+
describe('when cursor is NOT last', () => {
|
20
22
|
const entry = { index: 0, page: 6 };
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
24
|
+
it('should return the correct value', () => {
|
25
|
+
expect(
|
26
|
+
isCursorLast({
|
27
|
+
direction: 'forward',
|
28
|
+
entry: entry as CursorCacheEntry,
|
29
|
+
resultsPerPage: 10,
|
30
|
+
totalPages: 6,
|
31
|
+
totalResults: 53,
|
32
|
+
})
|
33
|
+
).toBe(false);
|
34
|
+
});
|
31
35
|
});
|
32
36
|
});
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import { CursorCacheEntry, Direction } from
|
2
|
-
import getIndexesOnLastPage from
|
1
|
+
import { type CursorCacheEntry, type Direction } from '../types.ts';
|
2
|
+
import { getIndexesOnLastPage } from './getIndexesOnLastPage.ts';
|
3
3
|
|
4
4
|
export type Params = {
|
5
5
|
direction: Direction;
|
@@ -9,5 +9,5 @@ export type Params = {
|
|
9
9
|
totalResults: number;
|
10
10
|
};
|
11
11
|
|
12
|
-
export
|
13
|
-
direction ===
|
12
|
+
export const isCursorLast = ({ direction, entry: { index, page }, resultsPerPage, totalPages, totalResults }: Params) =>
|
13
|
+
direction === 'forward' && page === totalPages && index === getIndexesOnLastPage({ resultsPerPage, totalResults });
|
@@ -1,19 +1,27 @@
|
|
1
|
-
import isCursorSupplied from
|
1
|
+
import { isCursorSupplied } from './isCursorSupplied.ts';
|
2
2
|
|
3
|
-
describe(
|
4
|
-
|
5
|
-
|
3
|
+
describe('isCursorSupplied', () => {
|
4
|
+
describe("when neither 'before' nor 'after' are passed in", () => {
|
5
|
+
it('should return the correct value', () => {
|
6
|
+
expect(isCursorSupplied({})).toBe(false);
|
7
|
+
});
|
6
8
|
});
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
+
describe("when 'before' is passed in", () => {
|
11
|
+
it('should return the correct value', () => {
|
12
|
+
expect(isCursorSupplied({ before: '12345' })).toBe(true);
|
13
|
+
});
|
10
14
|
});
|
11
15
|
|
12
|
-
|
13
|
-
|
16
|
+
describe("when 'after' is passed in", () => {
|
17
|
+
it('should return the correct value', () => {
|
18
|
+
expect(isCursorSupplied({ after: '12345' })).toBe(true);
|
19
|
+
});
|
14
20
|
});
|
15
21
|
|
16
|
-
|
17
|
-
|
22
|
+
describe("when 'before' and 'after' are passed in", () => {
|
23
|
+
it('should return the correct value', () => {
|
24
|
+
expect(isCursorSupplied({ after: '12345', before: '12345' })).toBe(true);
|
25
|
+
});
|
18
26
|
});
|
19
27
|
});
|
@@ -1,3 +1,4 @@
|
|
1
|
-
import {
|
1
|
+
import type { PlainObject } from '@graphql-box/core';
|
2
|
+
import { type ConnectionInputOptions } from '../types.ts';
|
2
3
|
|
3
|
-
export
|
4
|
+
export const isCursorSupplied = ({ after, before }: PlainObject & ConnectionInputOptions) => !!(after ?? before);
|
@@ -1,11 +1,15 @@
|
|
1
|
-
import isFirstPage from
|
1
|
+
import { isFirstPage } from './isFirstPage.ts';
|
2
2
|
|
3
|
-
describe(
|
4
|
-
|
5
|
-
|
3
|
+
describe('isFirstPage', () => {
|
4
|
+
describe('when page is first page', () => {
|
5
|
+
it('should return the correct value', () => {
|
6
|
+
expect(isFirstPage(1)).toBe(true);
|
7
|
+
});
|
6
8
|
});
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
+
describe('when page is NOT first page', () => {
|
11
|
+
it('should return the correct value', () => {
|
12
|
+
expect(isFirstPage(5)).toBe(false);
|
13
|
+
});
|
10
14
|
});
|
11
15
|
});
|
@@ -1 +1 @@
|
|
1
|
-
export
|
1
|
+
export const isFirstPage = (page: number) => page === 1;
|
@@ -1,11 +1,15 @@
|
|
1
|
-
import isLastPage from
|
1
|
+
import { isLastPage } from './isLastPage.ts';
|
2
2
|
|
3
|
-
describe(
|
4
|
-
|
5
|
-
|
3
|
+
describe('isLastPage', () => {
|
4
|
+
describe('when page is last page', () => {
|
5
|
+
it('should return the correct value', () => {
|
6
|
+
expect(isLastPage({ page: 5, totalPages: 5 })).toBe(true);
|
7
|
+
});
|
6
8
|
});
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
+
describe('when page is NOT last page', () => {
|
11
|
+
it('should return the correct value', () => {
|
12
|
+
expect(isLastPage({ page: 4, totalPages: 5 })).toBe(false);
|
13
|
+
});
|
10
14
|
});
|
11
15
|
});
|
package/src/helpers/makeEdges.ts
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import { Node } from
|
1
|
+
import { type Node } from '../types.ts';
|
2
2
|
|
3
|
-
export
|
4
|
-
nodes.map(node => ({
|
3
|
+
export const makeEdges = (nodes: Node[], makeCursor: (node: Node) => string) =>
|
4
|
+
nodes.map(node => ({ cursor: makeCursor(node), node }));
|
package/src/helpers/makeEntry.ts
CHANGED
@@ -1,14 +1,17 @@
|
|
1
|
-
import { ConnectionInputOptions, CursorGroupMetadata } from
|
2
|
-
import getDirection from
|
3
|
-
import getIndexesOnLastPage from
|
1
|
+
import { type ConnectionInputOptions, type CursorGroupMetadata } from '../types.ts';
|
2
|
+
import { getDirection } from './getDirection.ts';
|
3
|
+
import { getIndexesOnLastPage } from './getIndexesOnLastPage.ts';
|
4
4
|
|
5
5
|
export type Context = {
|
6
6
|
metadata: CursorGroupMetadata;
|
7
7
|
resultsPerPage: number;
|
8
8
|
};
|
9
9
|
|
10
|
-
export
|
11
|
-
|
10
|
+
export const makeEntry = (
|
11
|
+
args: ConnectionInputOptions,
|
12
|
+
{ metadata: { totalPages, totalResults }, resultsPerPage }: Context
|
13
|
+
) => {
|
14
|
+
if (getDirection(args.last) === 'backward') {
|
12
15
|
return { index: getIndexesOnLastPage({ resultsPerPage, totalResults }) + 1, page: totalPages };
|
13
16
|
}
|
14
17
|
|
@@ -1,8 +1,8 @@
|
|
1
|
-
import { CachedEdges } from
|
1
|
+
import { type CachedEdges } from '../types.ts';
|
2
2
|
|
3
|
-
export
|
4
|
-
cachedEdges.reduce((mergedCachedEdges, cachedEdge) => {
|
5
|
-
if (
|
3
|
+
export const mergeCachedEdges = (cachedEdges: CachedEdges[], missingCachedEdges: CachedEdges[]) =>
|
4
|
+
cachedEdges.reduce<CachedEdges[]>((mergedCachedEdges, cachedEdge) => {
|
5
|
+
if (cachedEdge.edges.length === 0) {
|
6
6
|
const missingCachedEdge = missingCachedEdges.find(missing => missing.pageNumber === cachedEdge.pageNumber);
|
7
7
|
|
8
8
|
if (missingCachedEdge) {
|
@@ -11,4 +11,4 @@ export default (cachedEdges: CachedEdges[], missingCachedEdges: CachedEdges[]) =
|
|
11
11
|
}
|
12
12
|
|
13
13
|
return [...mergedCachedEdges, cachedEdge];
|
14
|
-
}, []
|
14
|
+
}, []);
|
@@ -1,17 +1,19 @@
|
|
1
|
-
import removeConnectionInputOptions from
|
1
|
+
import { removeConnectionInputOptions } from './removeConnectionInputOptions.ts';
|
2
2
|
|
3
|
-
describe(
|
4
|
-
|
3
|
+
describe('removeConnectionInputOptions', () => {
|
4
|
+
describe('when connection input options are passed in', () => {
|
5
5
|
const args = {
|
6
|
-
after:
|
7
|
-
alpha:
|
8
|
-
before:
|
6
|
+
after: 'abcdefg',
|
7
|
+
alpha: 'bravo',
|
8
|
+
before: 'higklmn',
|
9
9
|
first: 10,
|
10
10
|
last: 5,
|
11
11
|
};
|
12
12
|
|
13
|
-
|
14
|
-
|
13
|
+
it('should return the correct value', () => {
|
14
|
+
expect(removeConnectionInputOptions(args)).toEqual({
|
15
|
+
alpha: 'bravo',
|
16
|
+
});
|
15
17
|
});
|
16
18
|
});
|
17
19
|
});
|
@@ -1,5 +1,6 @@
|
|
1
|
-
import { pickBy } from
|
1
|
+
import { pickBy } from 'lodash-es';
|
2
2
|
|
3
|
-
const connectionInputOptions = [
|
3
|
+
const connectionInputOptions = new Set(['after', 'before', 'first', 'last']);
|
4
4
|
|
5
|
-
export
|
5
|
+
export const removeConnectionInputOptions = <O extends object>(args: O) =>
|
6
|
+
pickBy(args, (_value, key) => !connectionInputOptions.has(key));
|
@@ -1,25 +1,30 @@
|
|
1
|
-
import
|
2
|
-
import {
|
3
|
-
import
|
4
|
-
import
|
1
|
+
import { type Core } from '@cachemap/core';
|
2
|
+
import type { PlainObject } from '@graphql-box/core';
|
3
|
+
import { type Getters, type Node, type ResourceResolver } from '../types.ts';
|
4
|
+
import { cacheCursors } from './cacheCursors.ts';
|
5
|
+
import { makeEdges } from './makeEdges.ts';
|
5
6
|
|
6
7
|
export type Context<Resource extends PlainObject, ResourceNode extends Node> = {
|
7
|
-
cursorCache:
|
8
|
+
cursorCache: Core;
|
8
9
|
getters: Getters<Resource, ResourceNode>;
|
9
10
|
groupCursor: string;
|
10
11
|
makeIDCursor: (id: string | number) => string;
|
11
12
|
resourceResolver: ResourceResolver<Resource>;
|
12
13
|
};
|
13
14
|
|
14
|
-
const requestAndCachePages = async <Resource extends PlainObject, ResourceNode extends Node>(
|
15
|
+
export const requestAndCachePages = async <Resource extends PlainObject, ResourceNode extends Node>(
|
15
16
|
pages: number[],
|
16
|
-
{ cursorCache, getters, groupCursor, makeIDCursor, resourceResolver }: Context<Resource, ResourceNode
|
17
|
+
{ cursorCache, getters, groupCursor, makeIDCursor, resourceResolver }: Context<Resource, ResourceNode>
|
17
18
|
) => {
|
18
19
|
const errors: Error[] = [];
|
19
20
|
|
20
21
|
const cachedEdges = await Promise.all(
|
21
22
|
pages.map(async page => {
|
22
|
-
const {
|
23
|
+
const {
|
24
|
+
data: pageResultData,
|
25
|
+
errors: pageResultErrors,
|
26
|
+
headers: pageResultHeaders,
|
27
|
+
} = await resourceResolver({
|
23
28
|
page,
|
24
29
|
});
|
25
30
|
|
@@ -43,10 +48,8 @@ const requestAndCachePages = async <Resource extends PlainObject, ResourceNode e
|
|
43
48
|
}
|
44
49
|
|
45
50
|
return { edges: [], pageNumber: page };
|
46
|
-
})
|
51
|
+
})
|
47
52
|
);
|
48
53
|
|
49
54
|
return { cachedEdges, errors };
|
50
55
|
};
|
51
|
-
|
52
|
-
export default requestAndCachePages;
|
@@ -1,6 +1,8 @@
|
|
1
|
+
import type { PlainArray } from '@graphql-box/core';
|
2
|
+
|
1
3
|
export type RequestMissingPagesParams = {
|
2
4
|
count: number;
|
3
|
-
direction:
|
5
|
+
direction: 'forward' | 'backward';
|
4
6
|
page: number;
|
5
7
|
results: number;
|
6
8
|
resultsPerPage: number;
|
@@ -8,49 +10,46 @@ export type RequestMissingPagesParams = {
|
|
8
10
|
totalResults: number;
|
9
11
|
};
|
10
12
|
|
11
|
-
export type RequestMissingPagesCallback = (params: { nextPage: number }) => Promise<
|
13
|
+
export type RequestMissingPagesCallback = (params: { nextPage: number }) => Promise<unknown>;
|
12
14
|
|
13
|
-
export
|
15
|
+
export const requestOutstandingPages = async (
|
14
16
|
{ count, direction, page, results, resultsPerPage, totalPages, totalResults }: RequestMissingPagesParams,
|
15
|
-
requestCallback: RequestMissingPagesCallback
|
17
|
+
requestCallback: RequestMissingPagesCallback
|
16
18
|
) => {
|
17
19
|
const resultsOnLastPage = totalResults % totalPages;
|
18
20
|
const outstanding = count - results;
|
19
21
|
let toRequest: number;
|
20
22
|
|
21
|
-
if (direction ===
|
23
|
+
if (direction === 'forward') {
|
22
24
|
toRequest = Math.ceil(outstanding / resultsPerPage);
|
23
25
|
} else {
|
24
26
|
if (page === totalPages) {
|
25
|
-
|
26
|
-
toRequest = 1;
|
27
|
-
} else {
|
28
|
-
toRequest = Math.ceil(count - resultsOnLastPage / resultsPerPage) + 1;
|
29
|
-
}
|
27
|
+
toRequest = count <= resultsOnLastPage ? 1 : Math.ceil(count - resultsOnLastPage / resultsPerPage) + 1;
|
30
28
|
} else {
|
31
29
|
toRequest = Math.ceil(outstanding / resultsPerPage);
|
32
30
|
}
|
33
31
|
}
|
34
32
|
|
35
|
-
const promises = [];
|
33
|
+
const promises: Promise<unknown>[] = [];
|
36
34
|
|
37
|
-
for (let
|
38
|
-
promises.push(requestCallback({ nextPage: direction ===
|
35
|
+
for (let index = 0; index < toRequest; index += 1) {
|
36
|
+
promises.push(requestCallback({ nextPage: direction === 'forward' ? page + index : page - index }));
|
39
37
|
}
|
40
38
|
|
41
39
|
const missingPages: number[] = [];
|
40
|
+
const settledResults = await Promise.allSettled(promises);
|
42
41
|
|
43
|
-
const pageResults =
|
44
|
-
if (status ===
|
45
|
-
pages.push(
|
42
|
+
const pageResults = settledResults.reduce<PlainArray>((pages, result, index) => {
|
43
|
+
if (result.status === 'fulfilled') {
|
44
|
+
pages.push(result.value);
|
46
45
|
}
|
47
46
|
|
48
|
-
if (status ===
|
49
|
-
missingPages.push(direction ===
|
47
|
+
if (result.status === 'rejected') {
|
48
|
+
missingPages.push(direction === 'forward' ? page + index : page - index);
|
50
49
|
}
|
51
50
|
|
52
51
|
return pages;
|
53
|
-
}, []
|
52
|
+
}, []);
|
54
53
|
|
55
54
|
return {
|
56
55
|
missingPages,
|
@@ -1,15 +1,16 @@
|
|
1
|
-
import
|
2
|
-
import {
|
3
|
-
import
|
4
|
-
import
|
5
|
-
import
|
6
|
-
import {
|
7
|
-
import
|
8
|
-
import
|
9
|
-
import
|
1
|
+
import { type Core } from '@cachemap/core';
|
2
|
+
import type { PlainObject } from '@graphql-box/core';
|
3
|
+
import { type ConnectionInputOptions, type Getters, type Node, type ResourceResolver } from '../types.ts';
|
4
|
+
import { extractEdges } from './extractEdges.ts';
|
5
|
+
import { extractNodes } from './extractNodes.ts';
|
6
|
+
import { getInRangeCachedEdges } from './getInRangeCachedEdges.ts';
|
7
|
+
import { getEndCursor, getStartCursor } from './getStartAndEndCursors.ts';
|
8
|
+
import { mergeCachedEdges } from './mergeCachedEdges.ts';
|
9
|
+
import { requestAndCachePages } from './requestAndCachePages.ts';
|
10
|
+
import { retrieveCachedConnection } from './retrieveCachedConnection.ts';
|
10
11
|
|
11
12
|
export type Context<Resource extends PlainObject, ResourceNode extends Node> = {
|
12
|
-
cursorCache:
|
13
|
+
cursorCache: Core;
|
13
14
|
getters: Getters<Resource, ResourceNode>;
|
14
15
|
groupCursor: string;
|
15
16
|
makeIDCursor: (id: string | number) => string;
|
@@ -17,31 +18,18 @@ export type Context<Resource extends PlainObject, ResourceNode extends Node> = {
|
|
17
18
|
resultsPerPage: number;
|
18
19
|
};
|
19
20
|
|
20
|
-
const resolveConnection = async <Resource extends PlainObject, ResourceNode extends Node>(
|
21
|
+
export const resolveConnection = async <Resource extends PlainObject, ResourceNode extends Node>(
|
21
22
|
args: PlainObject & ConnectionInputOptions,
|
22
|
-
{
|
23
|
-
cursorCache,
|
24
|
-
getters,
|
25
|
-
groupCursor,
|
26
|
-
makeIDCursor,
|
27
|
-
resourceResolver,
|
28
|
-
resultsPerPage,
|
29
|
-
}: Context<Resource, ResourceNode>,
|
23
|
+
{ cursorCache, getters, groupCursor, makeIDCursor, resourceResolver, resultsPerPage }: Context<Resource, ResourceNode>
|
30
24
|
) => {
|
31
|
-
const {
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
totalResults,
|
38
|
-
} = await retrieveCachedConnection(args, {
|
39
|
-
cursorCache,
|
40
|
-
groupCursor,
|
41
|
-
resultsPerPage,
|
42
|
-
});
|
25
|
+
const { cachedEdges, hasNextPage, hasPreviousPage, indexes, missingPages, totalResults } =
|
26
|
+
await retrieveCachedConnection(args, {
|
27
|
+
cursorCache,
|
28
|
+
groupCursor,
|
29
|
+
resultsPerPage,
|
30
|
+
});
|
43
31
|
|
44
|
-
if (
|
32
|
+
if (missingPages.length === 0) {
|
45
33
|
const edges = extractEdges(cachedEdges);
|
46
34
|
|
47
35
|
return {
|
@@ -87,5 +75,3 @@ const resolveConnection = async <Resource extends PlainObject, ResourceNode exte
|
|
87
75
|
totalCount: totalResults,
|
88
76
|
};
|
89
77
|
};
|
90
|
-
|
91
|
-
export default resolveConnection;
|