apollo-link-pouch
v0.0.3
Published
Use GraphQL with PouchDB and Apollo
Downloads
4
Maintainers
Readme
apollo-link-pouch
Provides an Apollo Link to use GraphQL with a local PouchDB.
Inspired by apollo-link-firebase.
This is not ready for production! Use at your own risk. Feel free to make pull requests for any suggestions - I am still rather inexperienced with Apollo and could use the help.
Demos
Installation
npm install apollo-link-pouchdb
Getting Started
import PouchDB from 'pouchdb'
import { createPouchLink } from 'apollo-link-pouch'
const client = new ApolloClient({
link: createPouchLink({
database: new PouchDB('my-database')
}),
cache: new InMemoryCache()
})
Roadmap
PouchDB API
[x] get
const query = gql` query getPerson { person @pdbGet(id: "1") { _id _rev name } } `
[x] bulkGet
const query = gql` query bulkGet { people @pdbBulkGet(docs: [{ id: "1" }, { id: "2" }]) { results { docs { ok { _id _rev name } } } } } `
[x] put
const mutation = gql` fragment PersonInput on pouchdb { _id: String _rev: string name: String } mutation putDoc($input: PersonInput!) { updatePerson(input: $input) @pdbPut { ok _rev # for consistency with input, "rev" from db.put response is returned as "_rev" name } } `
@pdbPut
also takes an options argument for put options[x] post
const mutation = gql` fragment PersonInput on pouchdb { _id: String _rev: string name: String } mutation postDoc($input: PersonInput!) { createPerson(input: $input) @pdbPost { _id _rev name } } `
@pdbPost
also takes an options argument for post options[x] bulkDocs
const mutation = gql` fragment PersonInput on pouchdb { _id: String _rev: string name: String } mutation postDoc($input: [PersonInput]!) { savePeople(input: $input) @pdbBulkDocs { _id _rev name } } `
@pdbBulkDocs
also takes an options argument for bulkDocs options[x] allDocs
const query = gql` query allDocs { people @pdbAllDocs(keys: ["1", "2"], include_docs: true) { rows { id rev doc value } total_rows offset } } `
[x] query
const query = gql` query queryPeople { people @pdbQuery(view: "index", include_docs: true) { rows { doc { name } } total_rows } } `
[x] find supported via
@pdbPlugin
Features
[ ] subscriptions
- using db change listeners?
[ ] multiple databases
- via
@db
directive or additionaldb
parameter to all queries/mutations?
- via
[x] plugins (queries only for now)
using pouchdb-quick-search
PouchDB.plugin(require('pouchdb-quick-search')) const query = gql` query searchPlugin { search @pdbPlugin @search(query: "bob", fields: ["name"]) { rows { id score } total_rows } } `