🔗 GraphQL Connection Resolver
Helps to easily implement the relay connection specification (inspired by Nexus.js Connection Plugin)
What is the Connection
?
Install
$ yarn add graphql-connection-resolver
Example
Schema
scalar DateTime
type Query {
chatRoom(id: String!): ChatRoom
}
type ChatRoom {
id: ID!
messages(
first: Int
last: Int
before: Int
after: Int
): ChatMessageConnection!
}
type ChatMessage {
id: ID!
createdAt: DateTime!
}
type ChatMessageConnection {
edges: [ChatMessageEdge!]!
pageInfo: PageInfo!
}
type ChatMessageEdge {
node: ChatMessage!
cursor: String!
}
type PageInfo {
hasPreviousPage: Boolean!
hasNextPage: Boolean!
startCursor: String
endCursor: String
}
Resolver
import { connection } from 'graphql-connection-resolver'
export const ChatRoom = {
messages: connection({
async nodes(parent, args, ctx) {
return [
]
},
cursorFromNode(node) {
return node.createdAt.toISOString()
},
}),
}
Note
-
You must request one more than given by first and last. Inside the library, if nodes return the same number as the given first
or last
, the next page is considered to not exist, and if nodes return more than the given number, the next page is considered to exist.
connection({
async nodes(args) {
const items = await fetchItems({
,
limit: args.first + 1,
})
}
})
References
If you have a feature request or a bug, please create a new issue. And also, pull requests are always welcome 🙏