graphql-compose-connection
This is a plugin for graphql-compose family, which adds to the ObjectTypeComposer connection
resolver.
Live demo: https://graphql-compose.herokuapp.com/
This package completely follows to Relay Cursor Connections Specification (https://relay.dev/graphql/connections.htm).
Besides standard connection arguments first
, last
, before
and after
, also added significant arguments:
filter
arg - for filtering recordssort
arg - for sorting records. Build in mechanism allows sort by any unique indexes (not only by id). Also supported compound sorting (by several fields).
CHANGELOG
Installation
npm install graphql graphql-compose graphql-compose-connection --save
Modules graphql
and graphql-compose
are in peerDependencies
, so should be installed explicitly in your app. They should not installed as submodules, cause internally checks the classes instances.
Example
Implementation details of findManyResolver
and countResolver
can be found in this file.
import { prepareConnectionResolver } from 'graphql-compose-connection';
import { UserTC, findManyResolver, countResolver } from './user';
prepareConnectionResolver(userTC, {
findManyResolver,
countResolver,
sort: {
_ID_ASC: {
value: { _id: 1 },
cursorFields: ['_id'],
beforeCursorQuery: (rawQuery, cursorData, resolveParams) => {
if (!rawQuery._id) rawQuery._id = {};
rawQuery._id.$lt = cursorData._id;
},
afterCursorQuery: (rawQuery, cursorData, resolveParams) => {
if (!rawQuery._id) rawQuery._id = {};
rawQuery._id.$gt = cursorData._id;
},
},
_ID_DESC: {
value: { _id: -1 },
cursorFields: ['_id'],
beforeCursorQuery: (rawQuery, cursorData, resolveParams) => {
if (!rawQuery._id) rawQuery._id = {};
rawQuery._id.$gt = cursorData._id;
},
afterCursorQuery: (rawQuery, cursorData, resolveParams) => {
if (!rawQuery._id) rawQuery._id = {};
rawQuery._id.$lt = cursorData._id;
},
},
AGE_ID_ASC: {
value: { age: 1, _id: -1 },
cursorFields: ['age', '_id'],
beforeCursorQuery: (rawQuery, cursorData, resolveParams) => {
if (!rawQuery.age) rawQuery.age = {};
if (!rawQuery._id) rawQuery._id = {};
rawQuery.age.$lt = cursorData.age;
rawQuery._id.$gt = cursorData._id;
},
afterCursorQuery: (rawQuery, cursorData, resolveParams) => {
if (!rawQuery.age) rawQuery.age = {};
if (!rawQuery._id) rawQuery._id = {};
rawQuery.age.$gt = cursorData.age;
rawQuery._id.$lt = cursorData._id;
},
}
},
});
Used in plugins
graphql-compose-mongoose - converts mongoose models to graphql types
License
MIT