Giter Club home page Giter Club logo

apollo-link-pouch's Introduction

npm package npm downloads

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

Notes app

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

  • get

    const query = gql`
      query getPerson {
        person @pdbGet(id: "1") {
          _id
          _rev
          name
        }
      }
    `
  • bulkGet

    const query = gql`
      query bulkGet {
        people @pdbBulkGet(docs: [{ id: "1" }, { id: "2" }]) {
          results {
            docs {
              ok {
                _id
                _rev
                name
              }
            }
          }
        }
      }
    `
  • 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

  • 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

  • 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

  • allDocs

    const query = gql`
      query allDocs {
        people @pdbAllDocs(keys: ["1", "2"], include_docs: true) {
          rows {
            id
            rev
            doc
            value
          }
          total_rows
          offset
        }
      }
    `
  • 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 additional db parameter to all queries/mutations?
  • 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
        }
      }
    `

apollo-link-pouch's People

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.