UNPKG

localforage-indexes

Version:

plugin for localforage to work with indexes in indexedDb

183 lines (134 loc) 4.06 kB
localforage-indexes ============================== Plugin for localforage to work with indexes in indexedDb [localForage](https://github.com/mozilla/localForage). ## Requirements * [localforage](https://github.com/mozilla/localForage) v1.4.0+ ## Installation `npm i localforage-indexes` ## API ### createIndex `createIndex(indexName, keyPath[, options[, callback]])` Creates an index on the specified storage Supports promises and callbacks Promise case: ```js localforage.createIndex('LF_INDEX', 'INDEXED_FIELD') .then((index) => { // index created }) .catch((err) => { //... }); ``` Callback case: ```js localforage.createIndex('LF_INDEX', 'INDEXED_FIELD', (err, index) => { // check error here }); ``` ### getIndex `getIndex(indexName[, callback])` Updates existing index on the specified storage Supports promises and callbacks Promise case: ```js localforage.getIndex('LF_INDEX') .then(() => { // index deleted }) .catch((err) => { //... }); ``` Callback case: ```js localforage.getIndex('LF_INDEX', (err, index) => { // check error here }) ``` ### updateIndex `updateIndex(indexName, keyPath[, options[, callback]])` Updates existing index on the specified storage Used to change keyPath or options of an index Supports promises and callbacks Promise case: ```js localforage.updateIndex('LF_INDEX', 'ANOTHER_INDEXED_FIELD') .then((index) => { // index updated }) .catch((err) => { //... }); ``` Callback case: ```js localforage.updateIndex('LF_INDEX', 'ANOTHER_INDEXED_FIELD', (err, index) => { // check error here }); ``` ### deleteIndex `deleteIndex(indexName[, callback])` Updates existing index on the specified storage Supports promises and callbacks Promise case: ```js localforage.deleteIndex('LF_INDEX') .then(() => { // index deleted }) .catch((err) => { //... }); ``` Callback case: ```js localforage.deleteIndex('LF_INDEX', (err, index) => { // check error here }) ``` ### Methods' arguments Arguments are the same as of vanilla indexedDb API [Details](https://developer.mozilla.org/en-US/docs/Web/API/IDBObjectStore/createIndex) `indexName` - index name, must be unique for the store `keyPath` - path of the field that index is based upon, separated by dot: `EXAMPLE.KEY.PATH` `options`: * `multiEntry` - will make an effect if keyPath resolves to an array. If true multiple index entry will be created for each array element, if false single instance is created. *Default: false* * `unique` - if set to true removes duplicates from index. *Default: false* `callback` - Callback function. If one is provided method call won't return a promise. Instead a callback will be called when the indexedDB transaction is finished. ### Usage #### Warning: Firefox and Safari do not support usage of Promises with indexedDB's transactions Any transaction passed through native promise will get destroyed. Firefox/Safari transactions can still be used with callbacks. Intended to use only with indexedDb. Custom driver to be compatible with indexes must inherit from localforage's indexdDb(asyncStorage) driver. ```js import {extendPrototypeResult as localforage} from 'localforage-indexes'; localforage.createIndex('LF_INDEX', 'INDEXED_FIELD') .then((index) => { // working with index... }) ``` Can be used with a single instance of localforage for each indexDb database. ```js import {extendPrototypeResult as localforage} from 'localforage-indexes'; var forage = localforage.createInstance({ driver : 'asyncStorage', name : 'multiInstance', storeName : 'multiInstanceStore' }); var another_forage = localforage.createInstance({ driver : 'asyncStorage', name : 'multiInstance', storeName : 'anotherMultiInstanceStore' }); forage.createIndex('newIndex', 'KEYPATH') .then(() => { // will most likely cause an error because of conflicting db // versions another_forage.createIndex('anotherIndex'); }); ``` ### Links * [GitHub](https://github.com/liqwid/localforage-indexes) * [NPM](https://www.npmjs.com/package/localforage-indexes)