Socket
Socket
Sign inDemoInstall

pouchdb-adapter-react-native-sqlite

Package Overview
Dependencies
17
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    pouchdb-adapter-react-native-sqlite

PouchDB adapter using ReactNative SQLite Plugin as its data store.


Version published
Weekly downloads
695
increased by22.36%
Maintainers
1
Install size
548 kB
Created
Weekly downloads
 

Readme

Source

pouchdb-adapter-react-native-sqlite

PouchDB adapter using ReactNative SQLite as its backing store.

Why?

SQLite storage performs much faster than AsyncStorage, especially with secondary index. Here is benchmark results:

1) allDocs speedminmaxmean
AsyncStorage72ms94ms77ms
SQLite27ms39ms28ms
2) query speedminmaxmean
AsyncStorage1,075ms1,117ms1,092ms
SQLite33ms39ms35ms
  • Device: iPhone 6s
  • Documents: 434
  • Update seq: 453
  • Iterations: 100
  • Used options: { include_docs: true }

On Simulator

  • Device: iPad Pro 9.7" (Simulator) - iOS 10.3.2
  • Documents: 5000
3) bulkDocs speedtotalmean
AsyncStorage25.821ms5.16ms
SQLite22.213ms4.44ms
4) allDocs speedtotalmean
AsyncStorage189,379ms37.87ms
SQLite30,527ms6.10ms
  • allDocs options: { include_docs: true, attachments: true }
  • Using this test script

How to use it

Read this blogpost for the complete description. Here is a working demo app.

Install deps

Install PouchDB core packages:

npm i pouchdb-adapter-http pouchdb-mapreduce

And install hacked packages for React Native:

npm i @craftzdog/pouchdb-core-react-native @craftzdog/pouchdb-replication-react-native 

Next, install SQLite3 engine modules:

npm i pouchdb-adapter-react-native-sqlite react-native-sqlite-2
react-native link react-native-sqlite-2

Then, install some packages to polyfill functions that PouchDB needs:

npm i base-64 events

Create polyfills

Make a js file to polyfill some functions that PouchDB needs:

import {decode, encode} from 'base-64'

if (!global.btoa) {
    global.btoa = encode;
}

if (!global.atob) {
    global.atob = decode;
}

// Avoid using node dependent modules
process.browser = true

Import it at the first line of your index.js.

Load PouchDB

Make pouchdb.js like so:

import PouchDB from '@craftzdog/pouchdb-core-react-native'
import HttpPouch from 'pouchdb-adapter-http'
import replication from '@craftzdog/pouchdb-replication-react-native'
import mapreduce from 'pouchdb-mapreduce'

import SQLite from 'react-native-sqlite-2'
import SQLiteAdapterFactory from 'pouchdb-adapter-react-native-sqlite'

const SQLiteAdapter = SQLiteAdapterFactory(SQLite)

export default PouchDB
  .plugin(HttpPouch)
  .plugin(replication)
  .plugin(mapreduce)
  .plugin(SQLiteAdapter)

If you need other plugins like pouchdb-find, just add them to it.

Use PouchDB

Then, use it as usual:

import PouchDB from './pouchdb'

function loadDB () {
  return new PouchDB('mydb.db', { adapter: 'react-native-sqlite' })
}

Changelog

  • 2.0.0
    • Upgrade pouchdb-adapter-websql-core to 7.0.0
  • 1.0.3
    • Remove pouchdb-utils dependency
  • 1.0.2
    • Upgrade pouchdb-util & pouchdb-adapter-websql-core to 6.2.0
    • Update benchmark result
  • 1.0.1
    • Remove unnecessary console output
  • 1.0.0
    • Initial release

FAQs

Last updated on 10 Feb 2021

Did you know?

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

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc