An API wrapper around indexedDB
Go to file
2017-07-28 11:12:54 +02:00
.github rework README 2017-06-30 23:47:30 +02:00
src/Database/IndexedDB make Key a complete opaque type 2017-07-28 11:12:54 +02:00
test make Key a complete opaque type 2017-07-28 11:12:54 +02:00
.eslintignore review test cases and add some for IDBIndex 2017-06-30 18:39:57 +02:00
.eslintrc add IDBKeyRange API bindings 2017-06-29 15:41:30 +02:00
.gitignore prepare CI environment 2017-07-06 12:26:28 +02:00
.travis.yml prepare CI environment 2017-07-06 12:26:28 +02:00
bower.json make use of the purescript-read lib instead of FromString class 2017-07-27 23:37:25 +02:00
deploy.sh review deploy script 2017-07-07 13:23:47 +02:00
karma.browserstack.conf.js prepare CI environment 2017-07-06 12:26:28 +02:00
karma.conf.js move --single-run option in the karma.conf.js 2017-07-06 15:17:49 +02:00
LICENSE Initial commit 2017-06-16 15:12:20 +02:00
package.json move --single-run option in the karma.conf.js 2017-07-06 15:17:49 +02:00
README.md review deploy script 2017-07-07 13:23:47 +02:00

PureScript IndexedDB Build Status

This package offers complete bindings and type-safety upon the IndexedDB API.

Overview

The IDBCore and IDBFactory are the two entry points required to create and connect to an indexed database. From there, modules are divided such that each of them covers a specific IDB interface.

They are designed to be used as qualified imports such that each method gets prefixed with a menaingful namespace (e.g IDBIndex.get, IDBObjectStore.openCursor ...)

Here's a quick example of what it look likes.

main :: Eff (idb :: IDB, exception :: EXCEPTION, console :: CONSOLE) Unit
main = launchAff' do
  db <- IDBFactory.open "db" Nothing { onBlocked       : Nothing
                                     , onUpgradeNeeded : Just onUpgradeNeeded
                                     }

  tx    <- IDBDatabase.transaction db ["store"] ReadOnly
  store <- IDBTransaction.objectStore tx "store"
  (val :: Maybe String) <-  IDBObjectStore.get store (IDBKeyRange.only 1)
  log $ maybe "not found" id val


onUpgradeNeeded :: forall e. Database -> Transaction -> Eff (idb :: IDB, exception :: EXCEPTION | e) Unit
onUpgradeNeeded db _ = launchAff' do
  store <- IDBDatabase.createObjectStore db "store" IDBObjectStore.defaultParameters
  _     <- IDBObjectStore.add store "patate" (Just 1)
  _     <- IDBObjectStore.add store { property: 42 } (Just 2)
  _     <- IDBObjectStore.createIndex store "index" ["property"] IDBIndex.defaultParameters
  pure unit

Notes

Errors

Errors normally thrown by the IDB* interfaces are wrapped in the Aff Monad as Error where the message corresponds to the error's name (e.g. "InvalidStateError"). Pattern matching can therefore be done on any error message to handle specific errors thrown by the API.

Examples

The test folder contains a great amount of examples showing practical usage of the IDB* interfaces. Do not hesitate to have a peek should you wonder how to use one of the module. The wrapper tries to keep as much as possible an API consistent with the original IndexedDB API. Hence, it should be quite straightforward to translate any JavaScript example to a PureScript one.

Changelog

v1.0.0

  • Indexed Database API 2.0 totally covered apart from
    • index.getAll method (and the associated one for the IDBObjectStore)
    • binary keys

Documentation

Module documentation is published on Pursuit.

Testing

Tested in the cloud on multiple browsers and operating systems thanks to BrowserStack

IE / Edge Chrome Firefox Safari Opera Android iOS Safari
- >= 57 >= 51 - >= 46 - -

browserstack