@@ -18,7 +18,7 @@ pnpm add ts-relay-cursor-paging
1818```
1919
2020
21- ## Demo
21+ ## Demo
2222
2323Open graphql playground in your browser port 4000/graphql
2424
@@ -69,30 +69,22 @@ return {
6969
7070``` ts
7171import { createServer } from ' node:http'
72- import { offsetForArgs } from ' ts-relay-cursor-paging'
73- import { connectionFromArraySlice } from ' graphql-relay'
72+ import { resolveOffsetConnection } from ' ts-relay-cursor-paging'
7473import { GraphQLError } from ' graphql'
7574import { createSchema , createYoga } from ' graphql-yoga'
7675
77- const data = [
78- {
79- id: 1 ,
80- name: ' Library 1' ,
81- },
82- {
83- id: 2 ,
84- name: ' Library 2' ,
85- },
86- {
87- id: 3 ,
88- name: ' Library 3' ,
89- },
90- {
91- id: 4 ,
92- name: ' Library 4' ,
93- },
94- ]
76+ function datasLine() {
77+ const datas = []
78+
79+ for (let i = 0 ; i < 100 ; i ++ ) {
80+ datas .push ({
81+ id: i ,
82+ name: ` Library ${i } ` ,
83+ })
84+ }
9585
86+ return datas
87+ }
9688export const schema = createSchema ({
9789 typeDefs: /* GraphQL */ `
9890 scalar Cursor
@@ -119,40 +111,37 @@ export const schema = createSchema({
119111 edges: [LibraryEdge!]!
120112 pageInfo: PageInfo!
121113 }
122-
114+
123115 type Query {
124116 libraries(
125117 first: Int
126118 after: Cursor
127119 last: Int
128120 before: Cursor
129- ): LibraryConnection
121+ ): LibraryConnection
130122 }
131123 ` ,
132124 resolvers: {
133125 Query: {
134- libraries : async (_parent , _args , context , _info ) => {
135- const { limit, offset, expectedSize } = offsetForArgs ({
136- args: {
137- first: _args .first ,
138- last: _args .last ,
139- after: _args .after ,
140- before: _args .before ,
141- },
126+ libraries : async (_parent , _args , _context , _info ) => {
127+ const generator = datasLine ()
128+
129+ async function resolveData({ offset , limit }: { offset: number ; limit: number }) {
130+ const slicedData = generator .slice (offset , offset + limit )
131+ return slicedData
132+ }
133+
134+ const datas = await resolveOffsetConnection ({ args: _args }, ({ limit , offset }) => {
135+ return resolveData ({ limit , offset })
142136 })
143137
144- if (! data )
138+ if (! generator )
145139 throw new GraphQLError (' No libraries found' )
146140
147- const page = connectionFromArraySlice (data , _args , {
148- arrayLength: data .length ,
149- sliceStart: offset ,
150- })
151141 return {
152- edges: page .edges ,
142+ edges: datas .edges ,
153143 pageInfo: {
154- ... page .pageInfo ,
155- totalPageCount: expectedSize ,
144+ ... datas .pageInfo ,
156145 },
157146 }
158147 },
@@ -167,8 +156,8 @@ const yoga = createYoga({ schema })
167156const server = createServer (yoga )
168157
169158// Start the server and you're done!
170- server .listen (4000 , () => {
171- console .info (' Server is running on http://localhost:4000 /graphql' )
159+ server .listen (3100 , () => {
160+ console .info (' Server is running on http://localhost:3100 /graphql' )
172161})
173162```
174163</details >
0 commit comments