graphql-genie-subscriptions
v1.0.14
Published
GraphQL Genie Subscriptions
Downloads
24
Readme
GraphQL Genie Subscriptions
Pass in a pubsub object from graphql-subscriptions and the necessary types and resolvers will be added to your schema
Installation
Assuming you already have GraphQL Genie installed.
npm install graphql-genie-subscriptions graphql-subscriptions
or
yarn add graphql-genie-subscriptions graphql-subscriptions
Enable plugin
import { FortuneOptions, GraphQLGenie } from 'graphql-genie';
import subscriptionPlugin from 'graphql-genie-subscriptions';
import { PubSub } from 'graphql-subscriptions';
const genie = new GraphQLGenie(...args);
// or you could pass in to the constructor as part of the plugins variable
genie.use(subscriptionPlugin(new PubSub()));
//get the GraphQLSchema and use it with any other tools you need, such as subscriptions-transport-ws
//always call getSchema after .use
const schema = genie.getSchema();
Subscription API
Given you passed the following schema to Graphql Genie
type Post {
id: ID! @unique
title: String!
text: String
author: User @relation(name: "posts")
}
type User {
id: ID! @unique
displayname: String @unique
email: String! @unique
name : String
posts: [Post] @relation(name: "posts")
}
2 Subscriptions will be created, user
and post
.
Each will have a where input and a payload output
user(
where: UserSubscriptionWhereInput
): UserSubscriptionPayload
The where input type looks like
type UserSubscriptionWhereInput {
AND: [UserSubscriptionWhereInput!]
OR: [UserSubscriptionWhereInput!]
mutation_in: [MutationType!]
updatedFields_contains: [String!]
updatedFields_contains_every: [String!]
node: UserWhereInput
}
mutation_in
: Select which mutations you want to subscribe to (MutationType
is CREATED, UPDATED or DELETED)updatedFields_contains
: Matches if any of the fields specified have been updated.updatedFields_contains_every
: Matches if all fields specified have been updated.node
: To select specific nodes that you want to be notified about. The WhereInput is the same one used in other Queries and Mutations for this node
The payload output looks like
type UserSubscriptionPayload {
mutation: MutationType!
node: User
updatedFields: [String!]
previousValues: UserPreviousValues
}
mutation
: Which mutation happenednode:
Information on the mutated node.updatedFields
: In case of an update, a list of the fields that changed.previousValues
: In case of an update, previous values of the node. Scalars return the actual value but other output types return just the id(s)
type UserPreviousValues {
id: ID!
displayname: String
email: String!
name: String
posts_ids: [String!]
}
Examples
All the graphql-yoga code examples use the subscriptions plugin.
The tests are a good place to see example subscription queries.
Thanks/Credit
Logo Icon made by Freepik from www.flaticon.com is licensed by CC 3.0 BY