UNPKG

graphql-mocks

Version:
63 lines (50 loc) 1.62 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var applyCursorToEdges = require('./apply-cursor-to-edges.js'); var createEdge = require('./create-edge.js'); function paginateNodes(nodes, args, cursorForNode) { var _edges$, _edges; const { first, last, before, after } = args; const allEdges = nodes.map(node => createEdge.createEdge(node, cursorForNode(node))); // eslint-disable-next-line prefer-const let { edges, frontCut, backCut } = applyCursorToEdges.applyCursorsToEdges(allEdges, cursorForNode, before, after); let hasNextPage = backCut; let hasPreviousPage = frontCut; if (first) { if (first < 0) throw new Error('`first` argument must be greater than or equal to 0'); if (edges.length > first) { edges = edges.slice(0, first); hasNextPage = true; } } if (last) { if (last < 0) throw new Error('`last` argument must be greater than or equal to 0'); if (edges.length > last) { edges = edges.slice(edges.length - last, edges.length); hasPreviousPage = true; } } const startNode = (_edges$ = edges[0]) === null || _edges$ === void 0 ? void 0 : _edges$.node; const endNode = (_edges = edges[edges.length - 1]) === null || _edges === void 0 ? void 0 : _edges.node; return { edges: edges, pageInfo: { hasNextPage, hasPreviousPage, startCursor: startNode ? cursorForNode(startNode) : null, endCursor: endNode ? cursorForNode(endNode) : null } }; } exports.paginateNodes = paginateNodes; //# sourceMappingURL=paginate-nodes.js.map