Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/killercodemonkey/graphql-pub-sub-with-initial-value
GraphQL PubSub with intial value handling
https://github.com/killercodemonkey/graphql-pub-sub-with-initial-value
apollo apollo-server graphql pubsub subscription
Last synced: 20 days ago
JSON representation
GraphQL PubSub with intial value handling
- Host: GitHub
- URL: https://github.com/killercodemonkey/graphql-pub-sub-with-initial-value
- Owner: KillerCodeMonkey
- License: mit
- Created: 2019-06-20T13:42:51.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2024-03-13T05:00:53.000Z (8 months ago)
- Last Synced: 2024-03-14T16:24:01.919Z (8 months ago)
- Topics: apollo, apollo-server, graphql, pubsub, subscription
- Language: TypeScript
- Size: 1.93 MB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE.MD
Awesome Lists containing this project
README
# graphql-pub-sub-with-initial-value
[![Build Status](https://github.com/KillerCodeMonkey/graphql-pub-sub-with-initial-value/workflows/CI/badge.svg)](https://github.com/KillerCodeMonkey/graphql-pub-sub-with-initial-value/actions/) [![codecov](https://codecov.io/gh/KillerCodeMonkey/datetime-periods/branch/master/graph/badge.svg)](https://codecov.io/gh/KillerCodeMonkey/graphql-pub-sub-with-initial-value)
GraphQLPupSubWithIntialValue is a simple npm package that extends GraphQLPubSub with an `asyncIteratorWithInitialState` method. It lets you define an async function how to get the initial value.
Additionally it provides the possibilty to execute some cleanup work, when a client disconnects or the AsynIterator is closed. For that you can use the exported `withCancel` or the `pubSub.withCancel` function.
For more information checkout the [GraphQL-Subscriptions](https://github.com/apollographql/graphql-subscriptions)
## Donate/Support
If you like my work, feel free to support it. Donations to the project are always welcomed :)
PayPal: [PayPal.Me/bengtler](http://paypal.me/bengtler)
### Installation
`npm install graphql-pub-sub-with-initial-value` or `yarn add graphql-pub-sub-with-initial-value`
> This package has peerDependencies to `"graphql": "^14.3.1 || ^15.3.0"` and `"graphql-subscriptions": "^1.1.0"`, which you have to install yourself.
### Usage
#### Easy & Simple
```TS
const asyncInititalValueFn = () => {
// grab initial values somewhere else. Read from file, memory, 🤷
return Promise.resolve(['test'])
}import { PubSubWithIntialValue } from 'graphql-pub-sub-with-initial-value'
const pubSubWithInitialValue = new PubSubWithIntialValue()
const asyncIterator = pubSubWithInitialValue.asyncIteratorWithInitialValue('TOPIC', asyncInititalValueFn)
pubSubWithInitialValue.withCancel(asyncIterator, () => console.log('on close/disconnect'))
// triggers cancel/disconnect
asyncIterator.return()
```#### In a resolver of subsciption (ApolloServer)
It is recommended to put the pubSub on the context object during the ApolloServer creation or use PubSubs in combination with datasources or create it in a seperated file to reuse the instance.
```TS
import { GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLString } from 'graphql'
import { PubSubWithIntialValue } from 'graphql-pub-sub-with-initial-value'export const subscription = new GraphQLObjectType({
fields: {
callings: {
resolve(payload) {
return payload
},
subscribe(_obj, _args, context: { pubSub: PubSubWithIntialValue }): AsyncIterable {
return context.pubSub.asyncIteratorWithInitialValue(() => Promise.resolve(['test']))
},
type: GraphQLNonNull(GraphQLList(GraphQLNonNull(GraphQLString)))
}
},
name: 'Subscription'
})
```