UNPKG

graphql-compose-connection

Version:

Plugin for `graphql-compose` which provide a connection resolver for types.

81 lines (78 loc) 3.32 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.prepareConnectionType = exports.prepareEdgeType = exports.preparePageInfoType = void 0; const graphql_compose_1 = require("graphql-compose"); const globalPageInfoTypes = {}; function createGlobalPageInfoType(name) { if (!globalPageInfoTypes[name]) { globalPageInfoTypes[name] = graphql_compose_1.ObjectTypeComposer.createTemp(` """Information about pagination in a connection.""" type ${name} { """When paginating forwards, are there more items?""" hasNextPage: Boolean! """When paginating backwards, are there more items?""" hasPreviousPage: Boolean! """When paginating backwards, the cursor to continue.""" startCursor: String """When paginating forwards, the cursor to continue.""" endCursor: String } `); } return globalPageInfoTypes[name]; } function preparePageInfoType(schemaComposer, name = 'PageInfo') { if (schemaComposer.has(name)) { return schemaComposer.getOTC(name); } const tc = createGlobalPageInfoType(name); schemaComposer.set(name, tc); return tc; } exports.preparePageInfoType = preparePageInfoType; function prepareEdgeType(nodeTypeComposer, edgeTypeName, edgeFields) { const name = edgeTypeName || `${nodeTypeComposer.getTypeName()}Edge`; if (nodeTypeComposer.schemaComposer.has(name)) { return nodeTypeComposer.schemaComposer.getOTC(name); } const edgeType = nodeTypeComposer.schemaComposer.createObjectTC({ name, description: 'An edge in a connection.', fields: Object.assign(Object.assign({}, edgeFields), { node: { type: new graphql_compose_1.NonNullComposer(nodeTypeComposer), description: 'The item at the end of the edge', }, cursor: { type: 'String!', description: 'A cursor for use in pagination', } }), }); return edgeType; } exports.prepareEdgeType = prepareEdgeType; function prepareConnectionType(typeComposer, resolverName, edgeTypeName, edgeFields) { const name = `${typeComposer.getTypeName()}${graphql_compose_1.upperFirst(resolverName || 'connection')}`; if (typeComposer.schemaComposer.has(name)) { return typeComposer.schemaComposer.getOTC(name); } const connectionType = typeComposer.schemaComposer.createObjectTC({ name, description: 'A connection to a list of items.', fields: { count: { type: 'Int!', description: 'Total object count.', }, pageInfo: { type: new graphql_compose_1.NonNullComposer(preparePageInfoType(typeComposer.schemaComposer)), description: 'Information to aid in pagination.', }, edges: { type: new graphql_compose_1.NonNullComposer(new graphql_compose_1.ListComposer(new graphql_compose_1.NonNullComposer(prepareEdgeType(typeComposer, edgeTypeName, edgeFields)))), description: 'Information to aid in pagination.', }, }, }); return connectionType; } exports.prepareConnectionType = prepareConnectionType; //# sourceMappingURL=connectionType.js.map