UNPKG

nestjs-graphql-relay

Version:
66 lines 2.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ConnectionArgs = void 0; exports.getPagingParameters = getPagingParameters; exports.findAndPaginate = findAndPaginate; const tslib_1 = require("tslib"); const Relay = tslib_1.__importStar(require("graphql-relay")); const connectionArgs_1 = require("./connectionArgs"); Object.defineProperty(exports, "ConnectionArgs", { enumerable: true, get: function () { return connectionArgs_1.ConnectionArgs; } }); tslib_1.__exportStar(require("./orderBy.input"), exports); tslib_1.__exportStar(require("./pageInfo"), exports); function getMeta({ first = 0, last = 0, after, before, }) { const isForwardPaging = !!first || !!after; const isBackwardPaging = !!last || !!before; return isForwardPaging ? { pagingType: "forward", after, first } : isBackwardPaging ? { pagingType: "backward", before, last } : { pagingType: "none" }; } function getPagingParameters(args) { const meta = getMeta(args); switch (meta.pagingType) { case "forward": { let offset = 0; if (meta.after) { offset = Relay.cursorToOffset(meta.after) + 1; } if (Number.isNaN(offset)) { throw new Error("invalid before query"); } return { limit: meta.first, offset, }; } case "backward": { const { last, before } = meta; let limit = last; let offset = Relay.cursorToOffset(before || "") - last; if (Number.isNaN(offset)) { throw new Error("invalid before query"); } if (offset < 0) { limit = Math.max(last + offset, 0); offset = 0; } return { offset, limit }; } default: return {}; } } async function findAndPaginate(condition, connArgs, repository) { const { limit, offset } = getPagingParameters(connArgs); const [entities, count] = await repository.findAndCount({ ...condition, skip: offset, take: limit, }); return Relay.connectionFromArraySlice(entities, connArgs, { arrayLength: count, sliceStart: offset || 0, }); } //# sourceMappingURL=index.js.map