-
Notifications
You must be signed in to change notification settings - Fork 16
/
Copy pathloader.ts
52 lines (46 loc) · 1.09 KB
/
loader.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import { g, InferResolvers, buildSchema, Infer } from './../src/index'
import { createYoga } from 'graphql-yoga'
import { createServer } from 'http'
const Dog = g.type('Dog', {
name: g.string(),
owner: g.string().omitResolver()
})
const queryType = g.type('Query', {
dogs: g.ref(() => Dog).list()
})
const owners = {
Apollo: 'Mish',
Buddy: 'Sebastian'
}
type resolverTypes = InferResolvers<{ Query: typeof queryType, Dog: typeof Dog }, {}>
const resolvers: resolverTypes = {
Query: {
dogs: (parent, args, context, info) => {
return [
{
name: 'Apollo',
},
{
name: 'Buddy',
}
]
}
},
Dog: {
owner: {
load (queries) {
return new Promise(resolve => {
setTimeout(() => {
resolve(queries.map(q => owners[q.parent.name]))
}, 1000)
})
}
}
}
}
const schema = buildSchema({ g, resolvers })
const yoga = createYoga({ schema })
const server = createServer(yoga)
server.listen(4000, () => {
console.info('Server is running on http://localhost:4000/graphql')
})