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
const client = link: cache:
Roadmap
PouchDB API
-
get
const query = gql`query getPerson {person @pdbGet(id: "1") {_id_revname}}` -
bulkGet
const query = gql`query bulkGet {people @pdbBulkGet(docs: [{ id: "1" }, { id: "2" }]) {results {docs {ok {_id_revname}}}}}` -
put
const mutation = gql`fragment PersonInput on pouchdb {_id: String_rev: stringname: 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 -
post
const mutation = gql`fragment PersonInput on pouchdb {_id: String_rev: stringname: String}mutation postDoc($input: PersonInput!) {createPerson(input: $input) @pdbPost {_id_revname}}`@pdbPost
also takes an options argument for post options -
bulkDocs
const mutation = gql`fragment PersonInput on pouchdb {_id: String_rev: stringname: String}mutation postDoc($input: [PersonInput]!) {savePeople(input: $input) @pdbBulkDocs {_id_revname}}`@pdbBulkDocs
also takes an options argument for bulkDocs options -
allDocs
const query = gql`query allDocs {people @pdbAllDocs(keys: ["1", "2"], include_docs: true) {rows {idrevdocvalue}total_rowsoffset}}` -
query
const query = gql`query queryPeople {people @pdbQuery(view: "index", include_docs: true) {rows {doc {name}}total_rows}}` -
find supported via
@pdbPlugin
Features
-
subscriptions
- using db change listeners?
-
multiple databases
- via
@db
directive or additionaldb
parameter to all queries/mutations?
- via
-
plugins (queries only for now)
using pouchdb-quick-search
PouchDBconst query = gql`query searchPlugin {search @pdbPlugin @search(query: "bob", fields: ["name"]) {rows {idscore}total_rows}}`