{"id":47837,"library":"graphql-compose-connection","title":"graphql-compose-connection","description":"Plugin for graphql-compose that adds a Relay Cursor Connections Specification resolver to ObjectTypeComposer. Current version 8.2.1 supports graphql-compose ^7.15.0 || ^8.0.0 || ^9.0.0. Provides standard connection arguments (first, last, before, after) plus filter and sort arguments with compound sorting and cursor-based pagination. Ships TypeScript definitions. Release cadence is low (last release 2021). Differentiators: automatic cursor generation from unique index fields, flexible before/after query builders for any ORM/DB driver.","status":"maintenance","version":"8.2.1","language":"javascript","source_language":"en","source_url":"https://github.com/graphql-compose/graphql-compose-connection","tags":["javascript","graphql","compose","graphql-compose","relay","typescript"],"install":[{"cmd":"npm install graphql-compose-connection","lang":"bash","label":"npm"},{"cmd":"yarn add graphql-compose-connection","lang":"bash","label":"yarn"},{"cmd":"pnpm add graphql-compose-connection","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"peer dependency: required to use ObjectTypeComposer and resolver patterns","package":"graphql-compose","optional":false},{"reason":"peer dependency: required for schema types and execution","package":"graphql","optional":false}],"imports":[{"note":"ESM module; named export. CommonJS users must use default import or destructured require.","wrong":"const prepareConnectionResolver = require('graphql-compose-connection').prepareConnectionResolver","symbol":"prepareConnectionResolver","correct":"import { prepareConnectionResolver } from 'graphql-compose-connection'"},{"note":"There is no default export; this package only exports named exports. Common mistake: trying to import default.","wrong":"import { default as gqlcConn } from 'graphql-compose-connection'","symbol":"default","correct":"import gqlcConnection from 'graphql-compose-connection'"},{"note":"CommonJS: must destructure or access .prepareConnectionResolver. Direct require returns object with named exports.","wrong":"const pcr = require('graphql-compose-connection')","symbol":"prepareConnectionResolver","correct":"const { prepareConnectionResolver: pcr } = require('graphql-compose-connection')"}],"quickstart":{"code":"import { prepareConnectionResolver } from 'graphql-compose-connection';\nimport { UserTC } from './models/User';\nimport { findManyResolver, countResolver } from './resolvers';\n\nUserTC.addResolver(\n  prepareConnectionResolver(UserTC, {\n    findManyResolver,\n    countResolver,\n    sort: {\n      _ID_ASC: {\n        value: { _id: 1 },\n        cursorFields: ['_id'],\n        beforeCursorQuery: (rawQuery, cursorData, resolveParams) => {\n          if (!rawQuery._id) rawQuery._id = {};\n          rawQuery._id.$lt = cursorData._id;\n        },\n        afterCursorQuery: (rawQuery, cursorData, resolveParams) => {\n          if (!rawQuery._id) rawQuery._id = {};\n          rawQuery._id.$gt = cursorData._id;\n        },\n      },\n    },\n  })\n);\n\n// Use in schema:\n// const schema = new GraphQLSchema({ query: new GraphQLObjectType({ name: 'Query', fields: { users: UserTC.getResolver('connection').getFieldConfig() } }) });","lang":"typescript","description":"Shows how to add a Relay-compliant connection resolver to UserTC with custom sort and cursor queries."},"warnings":[{"fix":"Ensure your resolvers return the correct types: findManyResolver returns Promise<Object[]> and countResolver returns Promise<number>.","message":"prepareConnectionResolver expects findManyResolver and countResolver to return promises that resolve to arrays and numbers respectively.","severity":"gotcha","affected_versions":">=8.0.0"},{"fix":"Modify rawQuery properties directly (e.g., rawQuery._id = ...) instead of assigning a new object.","message":"Cursor queries (beforeCursorQuery, afterCursorQuery) mutate rawQuery in place; do not reassign rawQuery.","severity":"gotcha","affected_versions":">=8.0.0"},{"fix":"Provide at least one field from a unique index to ensure cursor uniqueness.","message":"The 'sort' configuration key 'cursorFields' must be an array of field names that exist in your database with a unique index.","severity":"deprecated","affected_versions":">=7.0.0"},{"fix":"Ensure only one version of graphql-compose is installed, matching the peer dependency range (^7.15.0 || ^8.0.0 || ^9.0.0).","message":"If graphql-compose version is mismatched, you may see 'Class instance mismatch' errors.","severity":"gotcha","affected_versions":">=8.0.0"}],"env_vars":null,"search_vec":"'2021':60 '7.15.0':27 '8.0.0':28 '8.2.1':22 '9.0.0':29 'add':11 'argument':33,42 'automat':62 'base':49 'before/after':70 'builder':72 'cadenc':55 'compos':3,9,26,79,82 'compound':44 'connect':4,15,32 'current':20 'cursor':14,48,63 'cursor-bas':47 'definit':53 'differenti':61 'driver':76 'field':68 'filter':39 'first':34 'flexibl':69 'generat':64 'graphql':2,8,25,78,81 'graphql-compos':7,24,80 'graphql-compose-connect':1 'index':67 'javascript':77 'last':35,58 'low':57 'objecttypecompos':19 'orm/db':75 'pagin':50 'plugin':5 'plus':38 'provid':30 'queri':71 'relay':13,83 'releas':54,59 'resolv':17 'ship':51 'sort':41,45 'specif':16 'standard':31 'support':23 'typescript':52,84 'uniqu':66 'version':21","created_at":"2026-06-07T16:53:34.131610+00:00","updated_at":"2026-06-07T16:53:34.131610+00:00","problems":[{"fix":"Use destructured import: import { prepareConnectionResolver } from 'graphql-compose-connection'","cause":"Improper import of named export (default import mistake) or wrong require path.","error":"TypeError: prepareConnectionResolver is not a function"},{"fix":"Install peer dependency: npm install graphql-compose","cause":"graphql-compose is not installed or is not in node_modules.","error":"Cannot find module 'graphql-compose'"},{"fix":"Ensure findManyResolver returns Promise<Object[]> (e.g., using a model's find method).","cause":"findManyResolver returns undefined instead of a promise resolving to an array.","error":"Expected findManyResolver to return an array but got undefined"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/graphql-compose/graphql-compose-connection","github":"https://github.com/graphql-compose/graphql-compose-connection","docs":null,"changelog":null,"pypi":null,"npm":"graphql-compose-connection","openapi_spec":null,"status_page":null,"smithery":null,"categories":["testing"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}