UNPKG

@simulacrum/github-api-simulator

Version:

Provides common functionality to frontend app and plugins.

68 lines 2.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.applyRelayPagination = applyRelayPagination; const identity = (a) => a; function applyRelayPagination(nodes, args, mapper = identity) { let range = applyCursorsToEdges(nodes, args.before, args.after); let edges = edgesToReturn(range, args.first, args.last).map(edge => (Object.assign(Object.assign({}, edge), { node: mapper(edge.node) }))); let [first] = edges; let last = edges.slice().pop(); return { totalCount: nodes.length, edges, nodes: edges.map(e => e.node), pageInfo: { get hasNextPage() { let { first, before } = args; if (first != null) { return range.length > first; } else if (before != null) { return Number(before) < range.length - 1; } return false; }, get hasPreviousPage() { let { last, after } = args; if (last != null) { return range.length > last; } else if (after != null) { return Number(after) > 0; } return false; }, startCursor: first === null || first === void 0 ? void 0 : first.cursor, endCursor: last === null || last === void 0 ? void 0 : last.cursor, }, }; } function applyCursorsToEdges(nodes, before, after) { let afterIdx = !!after ? Number(after) : -1; let beforeIdx = !!before ? Number(before) : nodes.length; let edges = nodes.slice(afterIdx + 1, beforeIdx).map((node, i) => ({ node, cursor: (afterIdx + 1 + i).toString(), })); return edges; } function edgesToReturn(edges, first, last) { let newEdges = []; if (first == null && last == null) { first = 100; } if (first != null) { if (first < 0) { throw new Error(`value of first must be greater than 0, was ${first}`); } newEdges = edges.slice(0, first); } if (last != null) { if (last < 0) { throw new Error(`value of 'after' must be greater than 0, was ${last}`); } newEdges = edges.slice(-last); } return newEdges; } //# sourceMappingURL=relay.js.map