graphql-mocks
Version:
Tools for setting up graphql test resolvers
63 lines (50 loc) • 1.62 kB
JavaScript
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
;