Socket
Book a DemoInstallSign in
Socket

apollo-link-pouch

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

apollo-link-pouch

Use GraphQL with PouchDB and Apollo

0.0.3
latest
Source
npmnpm
Version published
Weekly downloads
2
-33.33%
Maintainers
1
Weekly downloads
 
Created
Source

npm package npm downloads

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
        }
      }
    `
    

Keywords

apollo

FAQs

Package last updated on 24 Jun 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.