vue-cli-plugin-apollo
Version:
vue-cli 3 plugin to add Apollo and GraphQL
78 lines (67 loc) • 1.94 kB
JavaScript
import GraphQLJSON from 'graphql-type-json'
<% if (addExamples) { _%>
import shortid from 'shortid'
<%_ } %>
export default {
JSON: GraphQLJSON,
<% if (addExamples) { _%>
Counter: {
countStr: counter => `Current count: ${counter.count}`,
},
<%_ } %>
Query: {
hello: (root, { name }) => `Hello ${name || 'World'}!`,
<% if (addExamples) { _%>
messages: (root, args, { db }) => db.get('messages').value(),
uploads: (root, args, { db }) => db.get('uploads').value(),
<%_ } %>
},
Mutation: {
myMutation: (root, args, context) => {
const message = 'My mutation completed!'
context.pubsub.publish('hey', { mySub: message })
return message
},
<% if (addExamples) { _%>
addMessage: (root, { input }, { pubsub, db }) => {
const message = {
id: shortid.generate(),
text: input.text,
}
db
.get('messages')
.push(message)
.last()
.write()
pubsub.publish('messages', { messageAdded: message })
return message
},
singleUpload: (root, { file }, { processUpload }) => processUpload(file),
multipleUpload: (root, { files }, { processUpload }) => Promise.all(files.map(processUpload)),
<%_ } %>
},
Subscription: {
mySub: {
subscribe: (parent, args, { pubsub }) => pubsub.asyncIterator('hey'),
},
<% if (addExamples) { _%>
counter: {
subscribe: (parent, args, { pubsub }) => {
const channel = Math.random().toString(36).substring(2, 15) // random channel name
let count = 0
setInterval(() => pubsub.publish(
channel,
{
// eslint-disable-next-line no-plusplus
counter: { count: count++ },
}
), 2000)
return pubsub.asyncIterator(channel)
},
},
messageAdded: {
subscribe: (parent, args, { pubsub }) => pubsub.asyncIterator('messages'),
},
<%_ } %>
},
}