{"_id":"idb","_rev":"108-62384dbc3bfa0b510b6976f26252890c","name":"idb","time":{"modified":"2023-12-01T15:48:48.928Z","created":"2015-04-02T13:28:22.227Z","0.0.1":"2015-04-02T13:28:22.227Z","1.0.0":"2015-08-25T13:17:20.833Z","1.0.1":"2015-09-03T08:45:40.457Z","1.1.0":"2015-09-03T13:57:46.740Z","1.1.1":"2016-05-19T00:11:37.989Z","1.1.2":"2016-08-12T09:26:38.154Z","1.1.3":"2016-08-12T09:43:17.350Z","1.1.4":"2016-08-12T12:59:58.552Z","1.1.5":"2016-10-31T09:54:11.045Z","1.2.0":"2016-11-03T08:58:43.676Z","1.2.1":"2016-11-03T15:10:59.853Z","1.3.0":"2016-11-29T16:29:49.866Z","1.3.1":"2016-11-30T07:52:49.403Z","1.3.2":"2016-12-02T09:44:50.913Z","1.4.0":"2016-12-12T10:50:57.538Z","2.0.0":"2016-12-13T11:53:15.673Z","2.0.1":"2017-03-30T00:30:09.382Z","2.0.2":"2017-05-11T21:59:58.015Z","2.0.3":"2017-05-14T14:25:29.386Z","2.0.4":"2017-09-22T09:06:52.553Z","2.1.0":"2018-03-05T19:00:14.624Z","2.1.1":"2018-03-16T12:04:22.148Z","2.1.2":"2018-05-21T13:53:01.470Z","2.1.3":"2018-06-21T08:47:35.437Z","3.0.0":"2019-01-11T09:19:26.412Z","3.0.1":"2019-01-14T10:48:08.725Z","3.0.2":"2019-01-14T10:49:52.215Z","4.0.0-beta.0":"2019-03-12T10:36:44.149Z","4.0.0-beta.1":"2019-03-13T08:52:34.241Z","4.0.0-beta.2":"2019-03-13T12:35:51.854Z","4.0.0":"2019-03-15T09:54:26.793Z","4.0.1":"2019-04-01T07:40:11.664Z","4.0.2":"2019-04-04T09:12:51.781Z","4.0.3":"2019-04-04T15:35:21.927Z","4.0.4":"2019-07-12T08:29:02.143Z","4.0.5":"2019-10-07T08:14:24.190Z","5.0.0":"2020-01-09T17:37:31.914Z","5.0.1":"2020-01-29T11:08:26.325Z","5.0.2":"2020-03-30T14:05:46.391Z","5.0.3":"2020-05-12T15:36:45.279Z","5.0.4":"2020-05-26T10:28:40.886Z","5.0.5":"2020-09-09T13:02:20.888Z","5.0.6":"2020-09-14T12:43:08.152Z","5.0.7":"2020-10-08T15:00:13.369Z","5.0.8":"2020-12-01T10:19:12.147Z","6.0.0":"2021-01-06T16:06:44.865Z","6.1.0":"2021-05-18T09:19:09.286Z","6.1.0-with-src":"2021-05-24T09:19:18.381Z","6.1.1":"2021-05-24T09:30:26.644Z","6.1.1-with-src":"2021-05-24T09:37:52.216Z","6.1.2":"2021-05-27T09:37:13.396Z","6.1.3":"2021-08-31T10:57:04.386Z","6.1.4":"2021-09-20T08:56:34.013Z","6.1.5":"2021-10-18T09:21:16.247Z","7.0.0-beta":"2021-11-02T13:34:09.335Z","7.0.0":"2021-11-22T14:48:05.442Z","7.0.1":"2022-03-14T14:30:03.904Z","7.0.1-with-src":"2022-05-25T12:09:50.360Z","7.0.2":"2022-06-17T13:37:20.687Z","7.1.0":"2022-09-21T10:51:34.859Z","7.1.1":"2022-11-04T10:28:55.720Z","8.0.0":"2023-12-01T15:48:48.760Z"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist-tags":{"latest":"8.0.0","beta":"7.0.0-beta","with-src":"7.0.1-with-src"},"description":"A small wrapper that makes IndexedDB usable","readme":"# IndexedDB with usability.\n\nThis is a tiny (~1.19kB brotli'd) library that mostly mirrors the IndexedDB API, but with small improvements that make a big difference to usability.\n\n1. [Installation](#installation)\n1. [Changes](#changes)\n1. [Browser support](#browser-support)\n1. [API](#api)\n 1. [`openDB`](#opendb)\n 1. [`deleteDB`](#deletedb)\n 1. [`unwrap`](#unwrap)\n 1. [`wrap`](#wrap)\n 1. [General enhancements](#general-enhancements)\n 1. [`IDBDatabase` enhancements](#idbdatabase-enhancements)\n 1. [`IDBTransaction` enhancements](#idbtransaction-enhancements)\n 1. [`IDBCursor` enhancements](#idbcursor-enhancements)\n 1. [Async iterators](#async-iterators)\n1. [Examples](#examples)\n1. [TypeScript](#typescript)\n\n# Installation\n\n## Using npm\n\n```sh\nnpm install idb\n```\n\nThen, assuming you're using a module-compatible system (like webpack, Rollup etc):\n\n```js\nimport { openDB, deleteDB, wrap, unwrap } from 'idb';\n\nasync function doDatabaseStuff() {\n const db = await openDB(…);\n}\n```\n\n## Directly in a browser\n\n### Using the modules method directly via jsdelivr:\n\n```html\n\n```\n\n### Using external script reference\n\n```html\n\n\n```\n\nA global, `idb`, will be created, containing all exports of the module version.\n\n# Changes\n\n[See details of (potentially) breaking changes](CHANGELOG.md).\n\n# Browser support\n\nThis library targets modern browsers, as in Chrome, Firefox, Safari, and other browsers that use those engines, such as Edge. IE is not supported.\n\n# API\n\n## `openDB`\n\nThis method opens a database, and returns a promise for an enhanced [`IDBDatabase`](https://w3c.github.io/IndexedDB/#database-interface).\n\n```js\nconst db = await openDB(name, version, {\n upgrade(db, oldVersion, newVersion, transaction, event) {\n // …\n },\n blocked(currentVersion, blockedVersion, event) {\n // …\n },\n blocking(currentVersion, blockedVersion, event) {\n // …\n },\n terminated() {\n // …\n },\n});\n```\n\n- `name`: Name of the database.\n- `version` (optional): Schema version, or `undefined` to open the current version.\n- `upgrade` (optional): Called if this version of the database has never been opened before. Use it to specify the schema for the database. This is similar to the [`upgradeneeded` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest/upgradeneeded_event) in plain IndexedDB.\n - `db`: An enhanced `IDBDatabase`.\n - `oldVersion`: Last version of the database opened by the user.\n - `newVersion`: Whatever new version you provided.\n - `transaction`: An enhanced transaction for this upgrade. This is useful if you need to get data from other stores as part of a migration.\n - `event`: The event object for the associated `upgradeneeded` event.\n- `blocked` (optional): Called if there are older versions of the database open on the origin, so this version cannot open. This is similar to the [`blocked` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest/blocked_event) in plain IndexedDB.\n - `currentVersion`: Version of the database that's blocking this one.\n - `blockedVersion`: The version of the database being blocked (whatever version you provided to `openDB`).\n - `event`: The event object for the associated `blocked` event.\n- `blocking` (optional): Called if this connection is blocking a future version of the database from opening. This is similar to the [`versionchange` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/versionchange_event) in plain IndexedDB.\n - `currentVersion`: Version of the open database (whatever version you provided to `openDB`).\n - `blockedVersion`: The version of the database that's being blocked.\n - `event`: The event object for the associated `versionchange` event.\n- `terminated` (optional): Called if the browser abnormally terminates the connection, but not on regular closures like calling `db.close()`. This is similar to the [`close` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/close_event) in plain IndexedDB.\n\n## `deleteDB`\n\nDeletes a database.\n\n```js\nawait deleteDB(name, {\n blocked() {\n // …\n },\n});\n```\n\n- `name`: Name of the database.\n- `blocked` (optional): Called if the database already exists and there are open connections that don’t close in response to a versionchange event, the request will be blocked until they all close.\n - `currentVersion`: Version of the database that's blocking the delete operation.\n - `event`: The event object for the associated 'versionchange' event.\n\n## `unwrap`\n\nTakes an enhanced IndexedDB object and returns the plain unmodified one.\n\n```js\nconst unwrapped = unwrap(wrapped);\n```\n\nThis is useful if, for some reason, you want to drop back into plain IndexedDB. Promises will also be converted back into `IDBRequest` objects.\n\n## `wrap`\n\nTakes an IDB object and returns a version enhanced by this library.\n\n```js\nconst wrapped = wrap(unwrapped);\n```\n\nThis is useful if some third party code gives you an `IDBDatabase` object and you want it to have the features of this library.\n\n## General enhancements\n\nOnce you've opened the database the API is the same as IndexedDB, except for a few changes to make things easier.\n\nFirstly, any method that usually returns an `IDBRequest` object will now return a promise for the result.\n\n```js\nconst store = db.transaction(storeName).objectStore(storeName);\nconst value = await store.get(key);\n```\n\n### Promises & throwing\n\nThe library turns all `IDBRequest` objects into promises, but it doesn't know in advance which methods may return promises.\n\nAs a result, methods such as `store.put` may throw instead of returning a promise.\n\nIf you're using async functions, there's no observable difference.\n\n### Transaction lifetime\n\nTL;DR: **Do not `await` other things between the start and end of your transaction**, otherwise the transaction will close before you're done.\n\nAn IDB transaction auto-closes if it doesn't have anything left do once microtasks have been processed. As a result, this works fine:\n\n```js\nconst tx = db.transaction('keyval', 'readwrite');\nconst store = tx.objectStore('keyval');\nconst val = (await store.get('counter')) || 0;\nawait store.put(val + 1, 'counter');\nawait tx.done;\n```\n\nBut this doesn't:\n\n```js\nconst tx = db.transaction('keyval', 'readwrite');\nconst store = tx.objectStore('keyval');\nconst val = (await store.get('counter')) || 0;\n// This is where things go wrong:\nconst newVal = await fetch('/increment?val=' + val);\n// And this throws an error:\nawait store.put(newVal, 'counter');\nawait tx.done;\n```\n\nIn this case, the transaction closes while the browser is fetching, so `store.put` fails.\n\n## `IDBDatabase` enhancements\n\n### Shortcuts to get/set from an object store\n\nIt's common to create a transaction for a single action, so helper methods are included for this:\n\n```js\n// Get a value from a store:\nconst value = await db.get(storeName, key);\n// Set a value in a store:\nawait db.put(storeName, value, key);\n```\n\nThe shortcuts are: `get`, `getKey`, `getAll`, `getAllKeys`, `count`, `put`, `add`, `delete`, and `clear`. Each method takes a `storeName` argument, the name of the object store, and the rest of the arguments are the same as the equivalent `IDBObjectStore` method.\n\n### Shortcuts to get from an index\n\nThe shortcuts are: `getFromIndex`, `getKeyFromIndex`, `getAllFromIndex`, `getAllKeysFromIndex`, and `countFromIndex`.\n\n```js\n// Get a value from an index:\nconst value = await db.getFromIndex(storeName, indexName, key);\n```\n\nEach method takes `storeName` and `indexName` arguments, followed by the rest of the arguments from the equivalent `IDBIndex` method.\n\n## `IDBTransaction` enhancements\n\n### `tx.store`\n\nIf a transaction involves a single store, the `store` property will reference that store.\n\n```js\nconst tx = db.transaction('whatever');\nconst store = tx.store;\n```\n\nIf a transaction involves multiple stores, `tx.store` is undefined, you need to use `tx.objectStore(storeName)` to get the stores.\n\n### `tx.done`\n\nTransactions have a `.done` promise which resolves when the transaction completes successfully, and otherwise rejects with the [transaction error](https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction/error).\n\n```js\nconst tx = db.transaction(storeName, 'readwrite');\nawait Promise.all([\n tx.store.put('bar', 'foo'),\n tx.store.put('world', 'hello'),\n tx.done,\n]);\n```\n\nIf you're writing to the database, `tx.done` is the signal that everything was successfully committed to the database. However, it's still beneficial to await the individual operations, as you'll see the error that caused the transaction to fail.\n\n## `IDBCursor` enhancements\n\nCursor advance methods (`advance`, `continue`, `continuePrimaryKey`) return a promise for the cursor, or null if there are no further values to provide.\n\n```js\nlet cursor = await db.transaction(storeName).store.openCursor();\n\nwhile (cursor) {\n console.log(cursor.key, cursor.value);\n cursor = await cursor.continue();\n}\n```\n\n## Async iterators\n\nYou can iterate over stores, indexes, and cursors:\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n // …\n}\n```\n\nEach yielded object is an `IDBCursor`. You can optionally use the advance methods to skip items (within an async iterator they return void):\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n console.log(cursor.value);\n // Skip the next item\n cursor.advance(2);\n}\n```\n\nIf you don't manually advance the cursor, `cursor.continue()` is called for you.\n\nStores and indexes also have an `iterate` method which has the same signature as `openCursor`, but returns an async iterator:\n\n```js\nconst index = db.transaction('books').store.index('author');\n\nfor await (const cursor of index.iterate('Douglas Adams')) {\n console.log(cursor.value);\n}\n```\n\n# Examples\n\n## Keyval store\n\nThis is very similar to `localStorage`, but async. If this is _all_ you need, you may be interested in [idb-keyval](https://www.npmjs.com/package/idb-keyval). You can always upgrade to this library later.\n\n```js\nimport { openDB } from 'idb';\n\nconst dbPromise = openDB('keyval-store', 1, {\n upgrade(db) {\n db.createObjectStore('keyval');\n },\n});\n\nexport async function get(key) {\n return (await dbPromise).get('keyval', key);\n}\nexport async function set(key, val) {\n return (await dbPromise).put('keyval', val, key);\n}\nexport async function del(key) {\n return (await dbPromise).delete('keyval', key);\n}\nexport async function clear() {\n return (await dbPromise).clear('keyval');\n}\nexport async function keys() {\n return (await dbPromise).getAllKeys('keyval');\n}\n```\n\n## Article store\n\n```js\nimport { openDB } from 'idb/with-async-ittr.js';\n\nasync function demo() {\n const db = await openDB('Articles', 1, {\n upgrade(db) {\n // Create a store of objects\n const store = db.createObjectStore('articles', {\n // The 'id' property of the object will be the key.\n keyPath: 'id',\n // If it isn't explicitly set, create a value by auto incrementing.\n autoIncrement: true,\n });\n // Create an index on the 'date' property of the objects.\n store.createIndex('date', 'date');\n },\n });\n\n // Add an article:\n await db.add('articles', {\n title: 'Article 1',\n date: new Date('2019-01-01'),\n body: '…',\n });\n\n // Add multiple articles in one transaction:\n {\n const tx = db.transaction('articles', 'readwrite');\n await Promise.all([\n tx.store.add({\n title: 'Article 2',\n date: new Date('2019-01-01'),\n body: '…',\n }),\n tx.store.add({\n title: 'Article 3',\n date: new Date('2019-01-02'),\n body: '…',\n }),\n tx.done,\n ]);\n }\n\n // Get all the articles in date order:\n console.log(await db.getAllFromIndex('articles', 'date'));\n\n // Add 'And, happy new year!' to all articles on 2019-01-01:\n {\n const tx = db.transaction('articles', 'readwrite');\n const index = tx.store.index('date');\n\n for await (const cursor of index.iterate(new Date('2019-01-01'))) {\n const article = { ...cursor.value };\n article.body += ' And, happy new year!';\n cursor.update(article);\n }\n\n await tx.done;\n }\n}\n```\n\n# TypeScript\n\nThis library is fully typed, and you can improve things by providing types for your database:\n\n```ts\nimport { openDB, DBSchema } from 'idb';\n\ninterface MyDB extends DBSchema {\n 'favourite-number': {\n key: string;\n value: number;\n };\n products: {\n value: {\n name: string;\n price: number;\n productCode: string;\n };\n key: string;\n indexes: { 'by-price': number };\n };\n}\n\nasync function demo() {\n const db = await openDB('my-db', 1, {\n upgrade(db) {\n db.createObjectStore('favourite-number');\n\n const productStore = db.createObjectStore('products', {\n keyPath: 'productCode',\n });\n productStore.createIndex('by-price', 'price');\n },\n });\n\n // This works\n await db.put('favourite-number', 7, 'Jen');\n // This fails at compile time, as the 'favourite-number' store expects a number.\n await db.put('favourite-number', 'Twelve', 'Jake');\n}\n```\n\nTo define types for your database, extend `DBSchema` with an interface where the keys are the names of your object stores.\n\nFor each value, provide an object where `value` is the type of values within the store, and `key` is the type of keys within the store.\n\nOptionally, `indexes` can contain a map of index names, to the type of key within that index.\n\nProvide this interface when calling `openDB`, and from then on your database will be strongly typed. This also allows your IDE to autocomplete the names of stores and indexes.\n\n## Opting out of types\n\nIf you call `openDB` without providing types, your database will use basic types. However, sometimes you'll need to interact with stores that aren't in your schema, perhaps during upgrades. In that case you can cast.\n\nLet's say we were renaming the 'favourite-number' store to 'fave-nums':\n\n```ts\nimport { openDB, DBSchema, IDBPDatabase } from 'idb';\n\ninterface MyDBV1 extends DBSchema {\n 'favourite-number': { key: string; value: number };\n}\n\ninterface MyDBV2 extends DBSchema {\n 'fave-num': { key: string; value: number };\n}\n\nconst db = await openDB('my-db', 2, {\n async upgrade(db, oldVersion) {\n // Cast a reference of the database to the old schema.\n const v1Db = db as unknown as IDBPDatabase;\n\n if (oldVersion < 1) {\n v1Db.createObjectStore('favourite-number');\n }\n if (oldVersion < 2) {\n const store = v1Db.createObjectStore('favourite-number');\n store.name = 'fave-num';\n }\n },\n});\n```\n\nYou can also cast to a typeless database by omitting the type, eg `db as IDBPDatabase`.\n\nNote: Types like `IDBPDatabase` are used by TypeScript only. The implementation uses proxies under the hood.\n\n# Developing\n\n```sh\nnpm run dev\n```\n\nThis will also perform type testing.\n\nTo test, navigate to `build/test/` in a browser. You'll need to set up a [basic web server](https://www.npmjs.com/package/serve) for this.\n","versions":{"1.0.0":{"name":"idb","version":"1.0.0","description":"IndexedDB but with promises","main":"lib/idb.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"7c5cb851d02bef2cf7c5c2747cc6c602819d239b","_id":"idb@1.0.0","_shasum":"68b9ad2c1c3a42abde8dff81f242a7f83cb93f21","_from":".","_npmVersion":"2.11.3","_nodeVersion":"2.3.1","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"68b9ad2c1c3a42abde8dff81f242a7f83cb93f21","tarball":"https://registry.npmjs.org/idb/-/idb-1.0.0.tgz","integrity":"sha512-804MLG7VZrPPF5dDfPzAJIDJQ7pqymYn8jizKRz9mqFzQb2xLw4Xx+S4XbihK6Wj9gVILkTDYsKCmBZgvs5j6w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCnNZatPXVMnSyntJi9MPnR7CS6+WFd1Nvgw/1EaS8LOQIhAIftadmUGUq2Hvuq9CZZnJAA+WEYusy0Ij7TcrHjnscz"}]},"directories":{}},"1.0.1":{"name":"idb","version":"1.0.1","description":"IndexedDB but with promises","main":"lib/idb.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"2e1fc9f68146ad332c31df97338eedcca5698a20","_id":"idb@1.0.1","_shasum":"b0ed36c99f2e680bdf34a798d3af603d3687145f","_from":".","_npmVersion":"2.11.3","_nodeVersion":"2.3.1","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"b0ed36c99f2e680bdf34a798d3af603d3687145f","tarball":"https://registry.npmjs.org/idb/-/idb-1.0.1.tgz","integrity":"sha512-fkKYP4nZOh+V5J5aEjLl0NNLzQrH+uUjNiHOn6Af/ToWf0Tikn74sXroopSAdkTb8Ns7/iMso9tQ74L5lvoVjg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHLGOA4wStZaky5/20/TTg+r3yNX6XZAAtNlxDewyNiAIgT8L0lARVOhSRdqi0WKTeI8kDLYF2kFu3Hs9wd96iU3c="}]},"directories":{}},"1.1.0":{"name":"idb","version":"1.1.0","description":"IndexedDB but with promises","main":"lib/idb.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"dd48c031e7f93d6695e89bb504cbe586dfacc073","_id":"idb@1.1.0","_shasum":"8a579ec733258d4fbe7863c1d55fd62abab097b7","_from":".","_npmVersion":"2.11.3","_nodeVersion":"2.3.1","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"8a579ec733258d4fbe7863c1d55fd62abab097b7","tarball":"https://registry.npmjs.org/idb/-/idb-1.1.0.tgz","integrity":"sha512-YCHKym4aO7AdiTqMDh3BwT6xecwmvPGkUQqZSVDrK+ZG4TTtZoLAjqdLZS+6of/p1fvnmgOA9xMs1ogYqgO+wg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCyj7pjkWlgsq291limEDM+n41eZzgADsygFb+lpnWtlAIhAK5h/IX/u/P/5Vpk2b8mKtrV1EBptVm/gNQJ235RXNV3"}]},"directories":{}},"1.1.1":{"name":"idb","version":"1.1.1","description":"IndexedDB but with promises","main":"lib/idb.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"f2634e203b36899b4369e32fb9847250466beb05","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.1.1","_shasum":"e62246fa7b5bdede7ceb11130048cedb421b02c7","_from":".","_npmVersion":"3.9.0","_nodeVersion":"5.4.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"e62246fa7b5bdede7ceb11130048cedb421b02c7","tarball":"https://registry.npmjs.org/idb/-/idb-1.1.1.tgz","integrity":"sha512-6bRFP6+g7AhOWDQCMZwsTaN96uiRRkSLX0oHP7Iqcuw4brCbitHkXhrJtsEP+m4EX6ak3c5YaXH+bCyVbaijVA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICGFw3okbVpH/eH4BXJLAIa3+ASCrepWQxsFmlF71X2yAiBFRyhPt60XanP6KEKpZ0VsjrVGgvSQdp2isJFJcjm+uA=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/idb-1.1.1.tgz_1463616695834_0.560480751330033"},"directories":{}},"1.1.2":{"name":"idb","version":"1.1.2","description":"IndexedDB but with promises","main":"lib/idb.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"c8ff1126949431562b2e18663a6f8325375af3e4","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.1.2","_shasum":"66dd9c6c1a35a3dea31adeaedc25e32ae710feaf","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"66dd9c6c1a35a3dea31adeaedc25e32ae710feaf","tarball":"https://registry.npmjs.org/idb/-/idb-1.1.2.tgz","integrity":"sha512-yZqRr61NDxYB2FOFQlW6nTkQtIGORFu/0ynpfcEYRfxcuJ2hJr54EPrt9BMm4/AOjo0ghFk6xiMpu6MdeM1X/A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHAvzt7UYPbXOZvMCCSopVvKJeqdqUGVL4Omqq4KMhIrAiEAuN6TonRLLVxVpK/ID82dmZZQJln7K1XTb0yrx4b1F0A="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/idb-1.1.2.tgz_1470993996690_0.5369880117941648"},"directories":{}},"1.1.3":{"name":"idb","version":"1.1.3","description":"IndexedDB but with promises","main":"lib/idb.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"a3731517030e79ba661864b76952954a62758beb","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.1.3","_shasum":"4b1fd9f2fc663018f29fcadb919910334dc8ef2d","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"4b1fd9f2fc663018f29fcadb919910334dc8ef2d","tarball":"https://registry.npmjs.org/idb/-/idb-1.1.3.tgz","integrity":"sha512-Cf2OgxtiAGPt24X7LudMJz9wTwrXrdilkrCL3NGCAYd3RclosnJ426u8HqEY6iU1f+F2a9BADYHXG4hvnu5t8A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTS2u0hKKw3j4lhT9F3XFDxAg9WuLraaH+k3r9CfMQmgIhAO33TyABchzYXvzYiqrBd3i2JacnGuqJaeQWzQ0suu/2"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/idb-1.1.3.tgz_1470994995468_0.98904764582403"},"directories":{}},"1.1.4":{"name":"idb","version":"1.1.4","description":"IndexedDB but with promises","main":"lib/idb.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"314309cf7ed3db66468a0d12e31663904dcc59f9","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.1.4","_shasum":"dee3be42b04e35ec5aa69fe99a27e906d7740b71","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"dee3be42b04e35ec5aa69fe99a27e906d7740b71","tarball":"https://registry.npmjs.org/idb/-/idb-1.1.4.tgz","integrity":"sha512-wIGu+u/7wBQtjr5vR/6rOuIef+VoInlDXP7tVdsID775ejMfFuqycaRlHQp2H566Aci9APh/E+8+Ku+NoLxzfQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFxn6+1x1XX71zA19V+Ry3WnqavdZP2UT7Vy6TxyHxWEAiBlyuzdwAIx2ieOAPBDuJdn7m2PB6v+Ivkic3GwwDzXdQ=="}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/idb-1.1.4.tgz_1471006796971_0.051861787447705865"},"directories":{}},"1.1.5":{"name":"idb","version":"1.1.5","description":"IndexedDB but with promises","main":"lib/idb.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"08f13bd5b16b93e9710050fc2d40a9cdf806a97f","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.1.5","_shasum":"6ae49fd660e7fdf2a981009af3c02f4344a1db11","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"6ae49fd660e7fdf2a981009af3c02f4344a1db11","tarball":"https://registry.npmjs.org/idb/-/idb-1.1.5.tgz","integrity":"sha512-REgBlSCZOEBDpbdB28Nhlt/z4AS4yz6ZS5iOAqs0oHcsz437DJ5Df7+LXFdqasNHLkVBjzr4VdxADOZK4txchg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD30f11Mqp0tLj8h2sWNAf/fYAH6AWkGfd1kBFnE9/AJwIhAMqiMbNjCgQCcuQXR+S3D43gkhcKOOMvzU6dg4MvWRaE"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/idb-1.1.5.tgz_1477907648949_0.7296772392001003"},"directories":{}},"1.2.0":{"name":"idb","version":"1.2.0","description":"IndexedDB but with promises","main":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"b458ad693572512c8b0dcc37c99b7d85b2f239d1","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.2.0","_shasum":"87fe9507bd7e37ee0d83d934d4867c5c7f74594c","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"87fe9507bd7e37ee0d83d934d4867c5c7f74594c","tarball":"https://registry.npmjs.org/idb/-/idb-1.2.0.tgz","integrity":"sha512-aC+5g386vH6l4rH/FNcmcYq1/tPzkbk06v65H+7goa6zP5SH0q+j8xiQ9yoxdc9/VA2FbWVuTp1MPZzfEvHn4w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGvpCJG1xZ0Yzs7RXshYT5lnXU2RLqZvGb+WETUzYQK8AiB9OBHHOfNw09klzZtUPt40o2QP48ggJc//MOWc/75N9Q=="}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/idb-1.2.0.tgz_1478163521648_0.8665147975552827"},"directories":{}},"1.2.1":{"name":"idb","version":"1.2.1","description":"IndexedDB but with promises","main":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"7cd98eb6a25ae3b13c14c86144efeefff5f67013","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.2.1","_shasum":"9f409441a967e2552dc918595f08f10fd97cb22c","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"9f409441a967e2552dc918595f08f10fd97cb22c","tarball":"https://registry.npmjs.org/idb/-/idb-1.2.1.tgz","integrity":"sha512-7GolW2xCpw/hOquygm9b+V9/xuUg+OqxGp9IJAHwV2dz8zNtiTSY1vEEqAsnI8OwjoAc/GpVZQFO+Mm/iBVUAg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE7qyXqHGwNaAjIH/E43ax7Ajl+fEO9tjkwuenmUL5LDAiBKbfXTqyfDV8nF7vE74Hq1JHxmwuRGFWFyoHciO/ih6g=="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/idb-1.2.1.tgz_1478185859277_0.13048728788271546"},"directories":{}},"1.3.0":{"name":"idb","version":"1.3.0","description":"IndexedDB but with promises","main":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"2560596097af247566afcd3f471dbd65df0bd3df","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.3.0","_shasum":"b260ac0556d5e1a8d2b04899f207500eee98afc7","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"b260ac0556d5e1a8d2b04899f207500eee98afc7","tarball":"https://registry.npmjs.org/idb/-/idb-1.3.0.tgz","integrity":"sha512-+zAZGnbgt8Ykwemg5BGczCJnctvYooKVBlbxoHEAD027clizdDrlwMviW/GmO2pnlWakTBGYE/VjOI3gvy3bmw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC13wIe+XuhZxxySthzvkvAtiZKsRfGK8JO+2jYgm5ZlwIhAPqziOmYxne3aY8/55PMReH13BE/GOTWBjAprYPoOVLB"}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/idb-1.3.0.tgz_1480436989229_0.14904641709290445"},"directories":{}},"1.3.1":{"name":"idb","version":"1.3.1","description":"IndexedDB but with promises","main":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"ef2f41084c164ac54eff0b29ab548317fd50ce6b","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.3.1","_shasum":"a367bc07ce0420052a7109bb7bd38ae39d9b2c5f","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"a367bc07ce0420052a7109bb7bd38ae39d9b2c5f","tarball":"https://registry.npmjs.org/idb/-/idb-1.3.1.tgz","integrity":"sha512-EgN1Cgu7kF5NRL5ryuhA6MRtoayVcUcwuODh6Lotqglup3+QONhs/1YjGIc8gIFL/SiJsWgP5ndYAk1GP6bFnQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCntNCXW3pPcXypQykKrScgZno/ce8/u+BVFQx+mARUygIgYPJcUQDrNtw7O9vteHWvAEg/DaJqttsCSFO+uWv6fg4="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/idb-1.3.1.tgz_1480492368697_0.9526830806862563"},"directories":{}},"1.3.2":{"name":"idb","version":"1.3.2","description":"IndexedDB but with promises","main":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"c71eb76877e404f18d2668c4ce8689849f143775","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.3.2","_shasum":"8670e9289f09c785b00bac3597bb812fb10f1eab","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"8670e9289f09c785b00bac3597bb812fb10f1eab","tarball":"https://registry.npmjs.org/idb/-/idb-1.3.2.tgz","integrity":"sha512-pO/JczL6KINDnmwnVY0IWxuqxZf0mJaNHV6ip1aUAlzpO/gbYFPvpE3ey63ExiTa0vruvAWBlHyOnKGxSzyBYg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCF11TF1EFDtScBkx2UFgu7VLMWjdrLjsGwkgWGqA4eLgIhAIOCfpl0ZDIFU2FkjZ+jiaJJhCPSdlDx2eTuT+50Egqh"}]},"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/idb-1.3.2.tgz_1480671888954_0.16851961822248995"},"directories":{}},"1.4.0":{"name":"idb","version":"1.4.0","description":"IndexedDB but with promises","main":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"58e1536a8a716c963ed6024fdab07c2cbd8a4e90","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@1.4.0","_shasum":"1c8123aeefb5aa13eabe153d0c30ef244217e4a8","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"1c8123aeefb5aa13eabe153d0c30ef244217e4a8","tarball":"https://registry.npmjs.org/idb/-/idb-1.4.0.tgz","integrity":"sha512-bnrfvcqVKlV8vGw0oT8QJM+c5nNGZbUfr8b9cTyRcIMKrs/GF8MmB8sjA54+G90G7PSMp1a/2akx2teLnToyJw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEoO47gSz8h23MK5VeP8hnuL6tB+8r45aOHJm/ELiL5GAiBwxLCdzIb18Zy8oo4VqoD27T/+iQ4neXvrdTRrvAAT5Q=="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/idb-1.4.0.tgz_1481539856867_0.06468289555050433"},"directories":{}},"2.0.0":{"name":"idb","version":"2.0.0","description":"IndexedDB but with promises","main":"lib/node.js","browser":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"743c7af7e42f8e01315dc683f0bb12d5c803acf0","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@2.0.0","_shasum":"f5d08517330ed45fc4bf83d4bbe881f30b7c76c4","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.7.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"f5d08517330ed45fc4bf83d4bbe881f30b7c76c4","tarball":"https://registry.npmjs.org/idb/-/idb-2.0.0.tgz","integrity":"sha512-2EuRY69F2g8WOq19eOE2V5wmm/fD+3TaBp5z065kNK7jsae2HR8EylxGzZufXCeRCHSIO+FbysWikhCccfreuA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICGlSJkvYPLov5r3xBz1m5/6V3ytTCDOv+vrYHir9a3/AiA0DEC4+JMtWzX4F2Uh6ohnqSJm2ppTYUbSYWta58uIzw=="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/idb-2.0.0.tgz_1481629994916_0.4745334854815155"},"directories":{}},"2.0.1":{"name":"idb","version":"2.0.1","description":"IndexedDB but with promises","main":"lib/node.js","browser":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"547f091a09304ec19e3e6cafb9a671f0210ce8f2","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@2.0.1","_shasum":"93359f84b932cff87d847530844f58444f49afa2","_from":".","_npmVersion":"4.1.2","_nodeVersion":"7.6.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"dist":{"shasum":"93359f84b932cff87d847530844f58444f49afa2","tarball":"https://registry.npmjs.org/idb/-/idb-2.0.1.tgz","integrity":"sha512-yYe1pZXKMHdxz2xo2vDhyxz7sTHxb6Eh2ytFUKnDsjghvT09TjP/zvHY8F6NX0TJKH1mdG0oyTAKfJhowjC8aw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIENN90dwdsy1vKOO5aRXvUscerzUWPBiO64F0+Py7hh5AiEA03ISc0qhckPt1wcv/tuDUCpfVceapttSc6VgGKsNu2s="}]},"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/idb-2.0.1.tgz_1490833807548_0.3391260562930256"},"directories":{}},"2.0.2":{"name":"idb","version":"2.0.2","description":"IndexedDB but with promises","main":"lib/node.js","browser":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"acc1c3406ae022a7cb8a14684255d7830a2298bd","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@2.0.2","_shasum":"531da3b5fdaa3b8435b52d1a85da81d45dab394b","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"dist":{"shasum":"531da3b5fdaa3b8435b52d1a85da81d45dab394b","tarball":"https://registry.npmjs.org/idb/-/idb-2.0.2.tgz","integrity":"sha512-YlzoITae5XR8Qr552YPPAhH1n/3RFkgFx2GhYtdcjBRFCl5JZYJi3OP/7eZyIbcrAKe80lpX5o6zyT5Ondrt2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCX06zwclBZSkzq92CTox5le8BqJij8eA+dwgmE+x+HcwIhAPJvSVOrQaiZT4IDXZWuPkfMGaxO5swzOel07zQg7PsY"}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/idb-2.0.2.tgz_1494539995402_0.9565494304988533"},"directories":{}},"2.0.3":{"name":"idb","version":"2.0.3","description":"IndexedDB but with promises","main":"lib/node.js","browser":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"128bc7fb56dcbbd3743803b8d0aa8dc79797c7ed","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@2.0.3","_shasum":"705ce38f57525c7b3e9949d6b2aad7d8ddc08dce","_from":".","_npmVersion":"4.2.0","_nodeVersion":"7.9.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"dist":{"shasum":"705ce38f57525c7b3e9949d6b2aad7d8ddc08dce","tarball":"https://registry.npmjs.org/idb/-/idb-2.0.3.tgz","integrity":"sha512-Pdm+VwAbZcKrFcFTgvet5FH1ZfLtpiSVhtmw2lsmAMoyf0PIz5Ifr/vXtbjrUAnCZxk4RwxoY4W8aht/sMC8yw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB9KAQeiJ8OgdflOpjgnCeQQKgNlcYSVxdgb117I6CsPAiAKa6ibneiNzL7Xz+Fs4n2VKWbglT4DUQOnvU30dkpt6A=="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/idb-2.0.3.tgz_1494771929131_0.7379987798631191"},"directories":{}},"2.0.4":{"name":"idb","version":"2.0.4","description":"IndexedDB but with promises","main":"lib/node.js","browser":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"c8bab898f01bacab96097f87c1e42a0c19e01425","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@2.0.4","_npmVersion":"5.4.2","_nodeVersion":"8.0.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"dist":{"integrity":"sha512-Nw4ykKrrVje6YODRiRm/k2ucFEQeoY+zrkszfOuzVmxx8yyBMtZh2KLaRCKk9r5GzhuF0QlNCVjBewP2n5OZ7Q==","shasum":"cf6d4a9ab077a207ca6e62564d1552401f5cd458","tarball":"https://registry.npmjs.org/idb/-/idb-2.0.4.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF0RH8VOD4Pe6F03tC4NOwXJAayBapob/4R7+oONFEwpAiEA5xdLIQFZJ6YKuZVFvEnfw5DpjqNadHuD0aysNnBdmRQ="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb-2.0.4.tgz_1506071211411_0.7940295427106321"},"directories":{}},"2.1.0":{"name":"idb","version":"2.1.0","description":"IndexedDB but with promises","main":"lib/node.js","browser":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"7fe34df0a2759b316c419710f6e81e9242b7005d","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@2.1.0","_npmVersion":"5.4.2","_nodeVersion":"8.7.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"dist":{"integrity":"sha512-+w9y04fCYycD4YZhwRz7V0+paRfwsTDaZkvXH0QFt2DBNpLMSeLgQ0yArEjRMrHMF1Yk00ac0AzLiSvnDn0MRg==","shasum":"da6fd4af34b325bd077294303a97a62a1593d1d8","tarball":"https://registry.npmjs.org/idb/-/idb-2.1.0.tgz","fileCount":8,"unpackedSize":190386,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICMS2JpaaUkAZyTpYWF+ZF1rkdi+hryDU1FN9C/7lB6vAiEAgivHdPW0s9kMDX7gjB/AG7dnlg4upt0hKzY1xs6Suww="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_2.1.0_1520276414520_0.24703706782362467"},"_hasShrinkwrap":false},"2.1.1":{"name":"idb","version":"2.1.1","description":"IndexedDB but with promises","main":"lib/node.js","browser":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"306ec35f449b497dd0cc985f27ced70e0cda28a6","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@2.1.1","_npmVersion":"5.7.1","_nodeVersion":"8.7.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"dist":{"integrity":"sha512-IZNz4vBm2jL2BJ7pFJ2ej5ffaov738lbfcHpuPN5RU/jOZEXxiQJdDc9ZvdlYcrynlw5kl/N2UqkbERU/y9ViA==","shasum":"f21374e058fddf9f3771b7e7d32f981c55fcf1d3","tarball":"https://registry.npmjs.org/idb/-/idb-2.1.1.tgz","fileCount":10,"unpackedSize":193691,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA3v9CPpdC4vB0y3n2dHKi5oKfTNhEpbyM6keT6dO45VAiA8zYb+6MMMcI20aW+DIQS6Y6oKFymh1UYK4h4GW0GOxQ=="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_2.1.1_1521201862036_0.6301446845211289"},"_hasShrinkwrap":false},"2.1.2":{"name":"idb","version":"2.1.2","description":"IndexedDB but with promises","main":"lib/node.js","browser":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"510f24e5e47b360211ae388c90eec026eae75d4f","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@2.1.2","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"dist":{"integrity":"sha512-E7BE7jihN9IoEoKa7+d0EDsFhgUaEswKBCwlqXHvtDmL4ftPfPbtx/WLik9wWxqAJSCCNGyI5b+8x9QsaK5caw==","shasum":"69e47d93c3f6d4370b685118b788f2e468cc75c0","tarball":"https://registry.npmjs.org/idb/-/idb-2.1.2.tgz","fileCount":10,"unpackedSize":193819,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbAs8+CRA9TVsSAnZWagAAv8MQAIn30JeeDV2d9EYcAW8D\nNbWOb8ne8bXg/1nn06Q6sZBbC57BCoec6MEY+yh7Xih3EGvrSLzTwWF35wmj\nESMTgeCdNVHj7DmEVI+EnOwTjeSunLdmM5cR1LcKfV/mFULfqsM9k8r+34em\nSOW45vAnUevinnELrsv0N240mITDT2eVw/S/zsUwNtnozIPbeIow8QFoM8Qb\nja4oLYVMOEdDPzKxsjHBpmEl8kwTvvDDF5XIwW8vcIXOZzhA87wBQwpW3h9A\nhC2QU25Gyp2gaEwsp/xq7p2I0BUX5jr9QZaaevjofyNhwsnZf+eGgqXqWLUv\nTZD7d1D/OekLKZReffBmTpG9ww2Z41rLjvt+9F7kOHkFt/wMWct+6Y7tTnPU\nfwVEUfdMmU1XEreFznsWipaBypzub4mAkU1mSHuS+2z9xmqYrcdK+1ZpkXuo\nhotxwTHXgOtn2j0sG+km0sLGNevLMuDhESrCAlzkJ9TZlGp4e9IZFu7LIuE1\ncBa/P9/Lf7H5PDloUBW59YfqZyP65Ljm2zwYqZy9jKdX5gYUVHNcP/JMVGBR\namuOCDUJKAYtePSPIwuCb0zSYR2J+RTgWVFGQbO+bP1AHusL9XeEVW7+LAdJ\njRF3MKwphfm8IQ4B/sw+L5gRN9OSSNjlc+NXVRaxMxFFSo6fCcGFvALICirI\nzHro\r\n=GN+I\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICDqEilgOYSIZrfPvtPWHG18iPNEADodT097i4DEeqTGAiB7yFDRoY1cj1VYsuj1JGcLQjBRXSZE+aJxeWnTyUbcgg=="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_2.1.2_1526910781393_0.39617421389844676"},"_hasShrinkwrap":false},"2.1.3":{"name":"idb","version":"2.1.3","description":"IndexedDB but with promises","main":"lib/node.js","browser":"lib/idb.js","typings":"lib/idb.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1","serve":"gulp serve"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"babelify":"^6.1.3","browser-sync":"^2.8.2","browserify":"^11.0.1","del":"^1.2.0","es6-promise":"^3.0.2","gulp":"^3.9.0","gulp-load-plugins":"^0.10.0","gulp-size":"^1.2.3","gulp-sourcemaps":"^1.5.2","gulp-util":"^3.0.6","merge-stream":"^0.1.8","mocha":"^2.2.5","run-sequence":"^1.1.2","uglifyify":"^3.0.1","vinyl-buffer":"^1.0.0","vinyl-source-stream":"^1.1.0","watchify":"^3.3.1"},"gitHead":"b8c8b16cdc6f94c6235fd98ed695a971edffb7c9","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@2.1.3","_npmVersion":"5.6.0","_nodeVersion":"10.2.1","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"dist":{"integrity":"sha512-1He6QAuavrD38HCiJasi4lEEK87Y22ldFuM+ZHkp433n4Fd5jXjWKutClYFp8w4mgx3zgrjnWxL8dpjMzcQ+WQ==","shasum":"7b295fa1a46ab7851e42dd85543a271435f87fee","tarball":"https://registry.npmjs.org/idb/-/idb-2.1.3.tgz","fileCount":10,"unpackedSize":194157,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbK2YwCRA9TVsSAnZWagAADQsP/Aph1MFhEu5Hm0CUp3uI\nfepDCagezWNGMs4aWMfIztuGR6x/A+AsEy0+YzzCSHPeKQFw02heSi/wceKY\nwytmb33FvLIJ3EIdMiSCqCy+RATkVMx0t3tuQ/X1souTiNTwVgvLY1Qf72mM\nA38nwzzhJjBegTBq+HYHaaY6lt3CpUrCv+GGK26OzyhfRZcxoD2q+3axqb45\nuzHe1KR1HLARCe+snSNDymeGOiYye1nz+dKXmBx9Pd4INDe4KKdyVUy5NAHy\nQzGrKf0L9UM/bm7FCc5vui9e+b6LiGxL5wWjukHVlAnoUXv1su7AQfU5emhP\ntPsGleIlk33NuY4xeYua4zANSQBfwyVmOnpqy7CIb3Ugyz9+TK69I930+oOu\nLufanF7W5DhVAiO9mQNUg2Yy/hxuEBBzuUvtAMELHGKVDeahTWYghLAausV8\nmJfgPxTc7uFSbDpyFHAIwdtvF29yJkbJkMJezFshgR6P8CIR2BS19/2TTPGF\nWiMGaITssVNiVnjncYycVS6ud9DLfTL2tRncEOVEq2aER6dM2unViqQk0Dq1\nNYAXrrd7e33v2QfFpY+XPBFhKBct7l9M1EfdqMkiPdjqATBH1reDdArApdc+\nSSwDxZQvFwAZhIlZG6RR5Qyk7N776YOk3zpMho3m+6AWWtv1EJK3wG701eZT\n/xbL\r\n=Sb5t\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFLV5w7K0ZaWeBhiE1sU712sy6mwLcNATb7asO2oKi4vAiEAj5altuZ+yBrQBlGhE1cxOnKyFtnNwv2x+Uz/9AZfvQQ="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_2.1.3_1529570855362_0.597023527753215"},"_hasShrinkwrap":false},"3.0.0":{"name":"idb","version":"3.0.0","description":"IndexedDB but with promises","main":"lib/node.js","module":"lib/idb.mjs","browser":"build/idb.js","typings":"lib/idb.d.ts","scripts":{"build":"rollup lib/idb.mjs --file build/idb.js --format umd --name idb"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"rollup":"^1.0.2"},"gitHead":"1974d4b712edf0afc158cbbfdec3cbcd536d0b32","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@3.0.0","_npmVersion":"6.4.1","_nodeVersion":"10.13.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"dist":{"integrity":"sha512-6p6KFlzfu8tMOhPXc6Kpp+MXUNOfJ3a72R3iKfp579qC81hbOEd/Iw+cTDH5zS4nqqP33vAQe1Vs9KO8mqedQQ==","shasum":"f7d835fcf097b1a7464bafc5e41e2772de3badcc","tarball":"https://registry.npmjs.org/idb/-/idb-3.0.0.tgz","fileCount":9,"unpackedSize":198588,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcOF+eCRA9TVsSAnZWagAAUIIP/jSf5YXwtQh/Y2vQ+1T1\nEurliK+U3qmY6862M9pQdi//7UG6G7KBK9yngslciflDGv0+okVRzlzrod8d\nNbWEKrpjhTD5+Qxv9azqSx2CAvKVFon6f9uVQ5P+++vrbCV8WIU8a7M9G1n2\n9R1zvtQsGZIfwpV/1/kOJjhG1UI6kM4OHguxspnNO9OM4YSzDjgK768/ExHV\nt1+DGQNKMzJCPEZqzQK4jrmgnym9y5B3xabbjMhB+rlUD+jxDz6Zvicp77lE\n536ewdMsZUGyajqstmxEVfTPf6oU8jkUQdbUCEVYqbUGZVtUIOlzMFNkppVD\nFdxK1jo6slT1Z2z8CQLPWpzdko7Ene6XZlYMuLcpFr/gOime8T743zM5SsW9\nlgs5j6b7PF5LBFGz4tbp+AK6J5CuC6nTDLNufAeh6cCXW2GIOLWFZusMvhBX\niWc+p57sJ33o53Gv3IiFk74mJTIB/AuB7ekzlxHl6od4ixYmiuUwKNHY7sUN\n1xhsAD11yR2npvF6SLKFir2XCdee7FHowrbZPJIMKpl4ToB4dnntiudOZgon\nmMjxNEkzj0aKzNCxl0xVMsfduu+BnV03/LuiFsnpA77j02xqUSyXqZJhPvbZ\nQpPHLPZ/D8qMjsXSyLDfZ+HKx/Hg4IDdbTn/aWp7Nbpt2DqApaD7rpEjArt2\ntdX1\r\n=N1ek\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDwy8h/pxNP8dknc/FrQ2dLXBkwjgLlWBdDSpjs8SowGQIgIm4X0RfEIANmjgReB4SxE6mnCOuXEioBgcZAdtpwYb0="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_3.0.0_1547198366248_0.08769173800713359"},"_hasShrinkwrap":false},"3.0.1":{"name":"idb","version":"3.0.1","description":"IndexedDB but with promises","main":"lib/node.js","module":"lib/idb.mjs","browser":"build/idb.js","typings":"lib/idb.d.ts","scripts":{"build":"rollup lib/idb.mjs --file build/idb.js --format umd --name idb"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"rollup":"^1.0.2"},"gitHead":"34ac4bee2723d5d598ed1def0a33115c4292f1f0","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@3.0.1","_npmVersion":"6.5.0","_nodeVersion":"10.13.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"dist":{"integrity":"sha512-YTD7MbdgE4wZg/g4v/x5Qd4fwAMjogJOJ4AhTNimfKvx9emBt4LeJu9jevJOPz5LFOISdEXBQJJSOyGLZy2EbA==","shasum":"a396f975d2a501929964decd87a08aa655043925","tarball":"https://registry.npmjs.org/idb/-/idb-3.0.1.tgz","fileCount":68,"unpackedSize":306109,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcPGjpCRA9TVsSAnZWagAAdh4P/1ciECiRAdAQ2P+K449i\nSrKNDni3bGCtY/ruHudjkgmGaMWxwF+xJNcETj036txx/Ot3G3AGewQDA0yN\nLcmAqQ8VQr176VN8ma6orVBX+QkY/mNuTD28ABmLk2e8aRVwVH0T9Y8bZcmy\nO6NCfatHcH8VjiFFp7eaQM8P6XShkMPhCAwHcvjPthbEbyw4DBbhhcRJ88As\nEbw5gPAs3FHEKdmqhG7+YlCJkjb702Swb/VzYdCmOT4yyiaMXry1W9RSh+Wg\nmA3nG9gML/oI+kdLO4vMVaeFdfUb/Ptz+7eOkgRHKX3GhhN77CK4/lUHG2ov\nsYm5DLN+L/mHtotdi3T3XRV9uoAGqMcj3s/xJ2qDiudtWSWayXg65DgTnbUY\nwbtrpY++aYhrpH27bDCNHEtPmkp5iVSvFDZG9OUJbJ2xtMsSZVwanQ2Fs+zd\nMtuKOMOr9ee9cQRloJGxJNEoCXBbJC3hr8H1STicP5cACZ1pRNbsRXNHq7P9\nqbA8QtQogl05KyZSzwqyHiSlAP/GWvkhKA/2m6xm6a5uoidLqvteVcIWU/V4\n4RFNyo3yyPn5dkKyYELaH6RdqrFsiE+ba5q7VEZweMsY2UbgPvEP9KCcWNUq\n0WhXPatA8eH8EAmw3ZbSXizMgi/yR1shuMH2lonCaAcejARy9X/YO4nF0YyD\nU0N6\r\n=O8uL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDxnE6KiuWOTgYpjRZttbk6vd1GLawDF8mGQifmz0roZwIhANaAUJlbGR8CkTuEZg9u42ioijonBCWxaOuuVhK58wMw"}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_3.0.1_1547462888532_0.8178946251225758"},"_hasShrinkwrap":false},"3.0.2":{"name":"idb","version":"3.0.2","description":"IndexedDB but with promises","main":"lib/node.js","module":"lib/idb.mjs","browser":"build/idb.js","typings":"lib/idb.d.ts","scripts":{"build":"rollup lib/idb.mjs --file build/idb.js --format umd --name idb"},"repository":{"type":"git","url":"git://github.com/jakearchibald/indexeddb-promised.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"rollup":"^1.0.2"},"gitHead":"e1c7c44dbba38415745afc782b8e247da8c833f2","bugs":{"url":"https://github.com/jakearchibald/indexeddb-promised/issues"},"homepage":"https://github.com/jakearchibald/indexeddb-promised#readme","_id":"idb@3.0.2","_npmVersion":"6.5.0","_nodeVersion":"10.13.0","_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"dist":{"integrity":"sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==","shasum":"c8e9122d5ddd40f13b60ae665e4862f8b13fa384","tarball":"https://registry.npmjs.org/idb/-/idb-3.0.2.tgz","fileCount":9,"unpackedSize":198860,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcPGlQCRA9TVsSAnZWagAAd3kP/impqW3/lURVdnM/4ayO\nVCz8EQ4VyRMDDr6gAa0fgFF+z1t9kGCSb0T4aoU7llQHLx4sYcoupXaiocxn\n5xPOPl3UCu2yr8g08h7DX1XEcKfjW+KdrsMugpaHTyb1ZGokuMdEwcjz+akd\n4CoCVS4tnAyxWka/UCFxoSxCN62QtzmPLTRr2qDO9IOKv2rDG64Cc1xN6Oq5\nWqFfV9EacautiRWe2D6NsjkJwFFVAr0+Rm3yQlgFTl2a15Ykj7oNz7RE4a4l\n3lohW3l16kfEImcSgkhWqU/DpJs9Xqqu82IWz9yWlZKW3iNSqZq/0JFJEjAf\nDFc+Pn7GSw3IoY3RNxUvq/JSkPnmOUDkfYi5ksM5pgIKUgZGuZ7ONM/aT8V4\niMyYKQw3VW1wl0/0RozZldD++Owrg+I7PdK1k9xh3FIZArIWWvBpWOUCD4+U\n17TISBFxfSPV6NiqAnZI50Xp0ez3+VCmGRrQj5JHHEaF+054T2ZrdcoTfwYM\n4g8mtFMDpqf+9KAj/7ftcKzA5rExrT2FU8pqsoRxQiWrZu88tQEvOfO9N6bA\n7pZiG4LXkbZVakfnjJL8RP1DJi7nEi0hw5JkdaOQrjdEYGKRR+fD5Q5o6DML\n60wZXdhkfWyOuyF6s01sgT9adGLbkmUUcUdm5ijoZidZlDzKLhLts3fJQnbU\nORhI\r\n=lOpm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHemyi1Wi4ozmk3EDxr9FVWAm4IwQq7OIp8nF5fMH97fAiEAmhIjRnt11PzPROOCisFzN8EDRy4nktshSItL6vsAIpc="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_3.0.2_1547462992053_0.3679300695543837"},"_hasShrinkwrap":false},"4.0.0-beta.0":{"name":"idb","version":"4.0.0-beta.0","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.mjs","typings":"build/esm/index.d.ts","scripts":{"clean":"rm -r build test-build","build":"npm run clean && rollup -c && gzip-size build/iife/index-min.js && gzip-size build/iife/with-async-ittr-min.js","dev":"npm run clean && rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.6","chai":"^4.2.0","conditional-type-checks":"^1.0.0","gzip-size-cli":"^3.0.0","mocha":"^6.0.2","rollup":"^1.6.0","rollup-plugin-commonjs":"^9.2.1","rollup-plugin-copy":"^0.2.3","rollup-plugin-node-resolve":"^4.0.1","rollup-plugin-terser":"^4.0.4","rollup-plugin-typescript2":"^0.19.3","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.1","tslint-react":"^3.6.0","typescript":"^3.3.3333"},"readme":"# IndexedDB with usability.\n\nThis is a tiny (~1.17k) library that mostly mirrors the IndexedDB API, but with small improvements that make a big difference to usability.\n\n1. [Installation](#installation)\n1. [Changes](#changes)\n1. [API](#api)\n 1. [`openDB`](#opendb)\n 1. [`deleteDB`](#deletedb)\n 1. [`unwrap`](#unwrap)\n 1. [`wrap`](#wrap)\n 1. [General enhancements](#general-enhancements)\n 1. [`IDBDatabase` enhancements](#idbdatabase-enhancements)\n 1. [`IDBTransaction` enhancements](#idbtransaction-enhancements)\n 1. [`IDBCursor` enhancements](#idbcursor-enhancements)\n 1. [Async iterators](#async-iterators)\n1. [Examples](#examples)\n1. [TypeScript](#typescript)\n\n# Installation\n\n```sh\nnpm install idb\n```\n\nThen, assuming you're using a module-compatible system (like Webpack, Rollup etc):\n\n```js\nimport { openDB, deleteDB, wrap, unwrap } from 'idb';\n\nasync function doDatabaseStuff() {\n const db = await openDB(…);\n}\n```\n\n# Changes\n\nThis is a rewrite from 3.x. [See changes](changes.md).\n\n# API\n\n## `openDB`\n\nThis method opens a database, and returns a promise for an enhanced [`IDBDatabase`](https://w3c.github.io/IndexedDB/#database-interface).\n\n```js\nconst db = await openDB(name, version, {\n upgrade(db, oldVersion, newVersion, transaction) {\n // …\n },\n blocked() {\n // …\n },\n blocking() {\n // …\n }\n});\n```\n\n* `name`: Name of the database.\n* `version`: Schema version.\n* `upgrade` (optional): Called if this version of the database has never been opened before. Use it to specify the schema for the database. This is similar to the `upgradeneeded` event in plain IndexedDB.\n * `db`: An enhanced `IDBDatabase`.\n * `oldVersion`: Last version of the database opened by the user.\n * `newVersion`: Whatever new version you provided.\n * `transaction`: The transaction for this upgrade. This is useful if you need to get data from other stores as part of a migration.\n* `blocked` (optional): Called if there are older versions of the database open on the origin, so this version cannot open.\n* `blocking` (optional): Called if this connection is blocking a future version of the database from opening.\n\n## `deleteDB`\n\nDelete a database.\n\n```js\nawait deleteDB(name);\n```\n\n* `name`: Name of the database.\n\n## `unwrap`\n\n```js\nconst unwrapped = unwrap(wrapped);\n```\n\nIf for some reason you want to drop back into plain IndexedDB, give one of the enhanced objects to `unwrap` and you'll get the unmodified version back.\n\nPromises will also be converted back into `IDBRequest` objects.\n\n## `wrap`\n\n```js\nconst wrapped = wrap(unwrapped);\n```\n\nUse this to convert a plain IDB object to one enhanced by this library. This is useful if some third party code gives you an `IDBDatabase` object and you want it to have the features of this library.\n\nThis doesn't work with `IDBCursor`, [due to missing primitives](https://github.com/w3c/IndexedDB/issues/255). Also, if you wrap an `IDBTransaction`, `tx.store` and `tx.objectStoreNames` will not work in Edge. To avoid these issues, wrap the `IDBDatabase` object, and use the wrapped object to create a new transaction.\n\n## General enhancements\n\nOnce you've opened the database the API is the same as IndexedDB, except for a few changes to make things easier.\n\nAny method that usually returns an `IDBRequest` object will now return a promise for the result.\n\n```js\nconst store = db.transaction(storeName).objectStore(storeName);\nconst value = await store.get(key);\n```\n\n## `IDBDatabase` enhancements\n\n### Shortcuts to get/set from an object store\n\nIt's common to create a transaction for a single action, so helper methods are included for this:\n\n```js\n// Get a value from a store:\nconst value = await db.get(storeName, key);\n// Set a value in a store:\nawait db.put(storeName, value, key);\n```\n\nThe shortcuts are: `get`, `getKey`, `getAll`, `getAllKeys`, `count`, `put`, `add`, `delete`, and `clear`. Each method takes a `storeName` argument, the name of the object store, and the rest of the arguments are the same as the equivalent `IDBObjectStore` method.\n\nThese methods depend on the same methods on `IDBObjectStore`, therefore `getKey`, `getAll`, and `getAllKeys` are missing in Edge as it lacks support.\n\n### Shortcuts to get from an index\n\nThe shortcuts are: `getFromIndex`, `getKeyFromIndex`, `getAllFromIndex`, `getAllKeysFromIndex`, and `countFromIndex`.\n\n```js\n// Get a value from an index:\nconst value = await db.getFromIndex(storeName, indexName, key);\n```\n\nEach method takes `storeName` and `indexName` arguments, followed by the rest of the arguments from the equivalent `IDBIndex` method. Again, these methods depend on the equivalent methods on `IDBIndex`, so Edge does not support `getKeyFromIndex`, `getAllFromIndex`, or `getAllKeysFromIndex`.\n\n## `IDBTransaction` enhancements\n\n### `tx.store`\n\nIf a transaction involves a single store, the `store` property will reference that store.\n\n```js\nconst tx = db.transaction('whatever');\nconst store = tx.store;\n```\n\nIf a transaction involves multiple stores, `tx.store` is undefined.\n\n### `tx.done`\n\nTransactions have a `.done` promise which resolves when the transaction completes successfully, and otherwise rejects.\n\n```js\nconst tx = db.transaction(storeName, 'readwrite');\ntx.store.put('foo', 'bar');\nawait tx.done;\n```\n\n## `IDBCursor` enhancements\n\nCursor advance methods (`advance`, `continue`, `continuePrimaryKey`) return a promise for the cursor, or null if there are no further values to provide.\n\n```js\nconst store = db.transaction(storeName).objectStore(storeName);\nlet cursor = await store.openCursor();\n\nwhile (cursor) {\n console.log(cursor.key, cursor.value);\n cursor = await cursor.continue();\n}\n```\n\n## Async iterators\n\nAsync iterator support isn't included by default (Edge doesn't support them). To include them, import `idb/with-async-ittr.mjs` (~1.39k) instead of `idb`:\n\n```js\nimport { openDB } from 'idb/with-async-ittr.mjs';\n```\n\nNow you can iterate over stores, indexes, and cursors:\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n // …\n}\n```\n\nEach yielded object is an `IDBCursor`. You can optionally use the advance methods to skip items (within an async iterator they return void):\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n console.log(cursor.value);\n // Skip the next item\n cursor.advance(2);\n}\n```\n\nIf you don't manually advance the cursor, `cursor.continue()` is called for you.\n\nStores and indexes also have an `iterate` method which has the same signiture as `openCursor`, but returns an async iterator:\n\n```js\nconst tx = db.transaction('books');\nconst index = tx.store.index('author');\n\nfor await (const cursor of index.iterate('Douglas Adams')) {\n console.log(cursor.value);\n}\n```\n\n# Examples\n\n## Keyval Store\n\nThis is very similar to `localStorage`, but async. If this is *all* you need, you may be interested in [idb-keyval](https://www.npmjs.com/package/idb-keyval), you can always upgrade to this library later.\n\n```js\nconst dbPromise = openDB('keyval-store', 1, {\n upgrade(db) {\n db.createObjectStore('keyval');\n }\n});\n\nconst idbKeyval = {\n async get(key) {\n return (await dbPromise).get('keyval', key);\n },\n async set(key, val) {\n return (await dbPromise).put('keyval', val, key);\n },\n async delete(key) {\n return (await dbPromise).delete('keyval', key);\n },\n async clear() {\n return (await dbPromise).clear('keyval');\n },\n async keys() {\n return (await dbPromise).getAllKeys('keyval');\n },\n};\n```\n\n# TypeScript\n\nThis library is fully typed, and you can improve things by providing types for your database:\n\n```ts\nimport { openDB, DBSchema } from 'idb';\n\ninterface MyDB extends DBSchema {\n 'favourite-numbers': {\n key: string,\n value: number[],\n },\n 'products': {\n value: {\n name: string,\n price: number,\n productCode: string,\n },\n key: string,\n indexes: { 'by-price': number },\n }\n}\n\nasync function demo() {\n const db = await openDB('my-db', 1, {\n upgrade(db) {\n db.createObjectStore('favourite-numbers');\n\n const productStore = db.createObjectStore('products', { keyPath: 'productCode' });\n productStore.createIndex('by-price', 'price');\n }\n });\n\n // This works\n await db.put('favourite-numbers', [7, 95, 1023], 'Jen');\n // This fails, as the 'favourite-numbers' store expects an array of numbers.\n await db.put('favourite-numbers', ['Twelve'], 'Jake');\n}\n```\n\nTo define types for your database, extend `DBSchema` with an interface where the keys are the names of your object stores.\n\nFor each value, provide an object where `value` is the type of values within the store, and `key` is the type of keys within the store.\n\nOptionally, `indexes` can contain a map of index names, to the type of key within that index.\n\nProvide this interface when calling `openDB`, and from then on your database will be strongly typed. This also allows your IDE to autocomplete the names of stores and indexes.\n\n## Opting out of types\n\nIf you call `openDB` without providing types, your database will use basic types. However, sometimes you'll need to interact with stores that aren't in your schema, perhaps during upgrades. In that case you can cast.\n\nLet's say we were renaming the 'favourite-numbers' store to 'fave-nums':\n\n```ts\nimport { openDB, DBSchema, IDBPDatabase, IDBPTransaction } from 'idb';\n\ninterface MyDBV1 extends DBSchema {\n 'favourite-numbers': { key: string, value: number[] },\n}\n\ninterface MyDBV2 extends DBSchema {\n 'fave-nums': { key: string, value: number[] },\n}\n\nconst db = await openDB('my-db', 2, {\n async upgrade(db, oldVersion) {\n // Cast a reference of the database to the old schema.\n const v1Db = db as unknown as IDBPDatabase;\n\n if (oldVersion < 1) {\n v1Db.createObjectStore('favourite-numbers');\n }\n if (oldVersion < 2) {\n const store = v1Db.createObjectStore('favourite-numbers');\n store.name = 'fave-nums';\n }\n }\n});\n```\n\nYou can also cast to a typeless database by omiting the type, eg `db as IDBPDatabase`.\n","readmeFilename":"README.md","gitHead":"82287bc232d16f109bbb4dcc6151d17b796d2669","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@4.0.0-beta.0","_nodeVersion":"10.15.1","_npmVersion":"6.8.0","dist":{"integrity":"sha512-AqYR9+kSLnscRAGBRE18ynjE/vfyTtEgMHSW/xcSQl/DYfF2QT0ow/Wlpg058u99I0elazOtnc/c26cxlCEfvw==","shasum":"d8f2767e8b85e02fbf154239342a3ccb776ab2ec","tarball":"https://registry.npmjs.org/idb/-/idb-4.0.0-beta.0.tgz","fileCount":37,"unpackedSize":189950,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJch4u8CRA9TVsSAnZWagAAmoYP/RXmTKNd7c4w5C0mHOlT\nNGSxqjwhRvPo7oZKhKrp/jBXhhuujCvaqn4Moh2JJuVolDWOJrP14uQnlHzg\nE773bKb0I/H0rUUrzAh1BIBK3RbQDhkFvFUpHRulkJL1BH+nQ6XAhTfxqPKD\n8kcisr/20fwNx0UQsgo2bmOLHudN90Ut3vwleEXs9ubr4f3dij8MGeEfOZUI\nph3rTGWaECz/V1VMlxSMI1HAGPQyQIaNmmwE40MqHAei2wJehDto89oHFF7T\n1Xfrngmo6S6pD4W/HynggJJBfMIodHQzOZ+09LBq4HwaDhlGmmPn92F+CMNZ\nDikFNXCozcRvd832XXfIMzBK0V5ZF9DramK3iJA9pgE14Epy92qF7HByDNj+\n+MO18vF6T0918zgkovV/itmOb0j1RNjg61jRQeJ4G2igd4BIOGwu4IlR5OQr\nGzy5N8Dp/YCozI1B+obhr7rnfWPQznz/YblOUM0bnwwdVaweb61sqIkIeaov\nTKDiR7jqDDJpNTPEGfLG6DgXrDl1yZj4x8ju0lL4UWjbdzkc24R5mONQquCs\nwWKp97cCkliPYA54AChw+bixFBz8PXrsd0UNHIiyI0noNSXM3ETm5eq5QZKg\n4yiwtttYOfVdzzN6MiRDdfoeoEM+Y71aRtIVbqBM/SHYb7gVQi5sRdpXY7Og\njl2y\r\n=ON/1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDb15ZF13m8aQ1mrcutrvVxUsMxePXyLhUb/q7PINtoYgIgOr0SHKC7u4MtLuI9z3NaqzDUQ+HWmcGL6JEZqhSos5Q="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_4.0.0-beta.0_1552387004032_0.4616651016793616"},"_hasShrinkwrap":false},"4.0.0-beta.1":{"name":"idb","version":"4.0.0-beta.1","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.mjs","typings":"build/esm/index.d.ts","scripts":{"clean":"rm -r build test-build","build":"npm run clean && rollup -c && gzip-size build/iife/index-min.js && gzip-size build/iife/with-async-ittr-min.js","dev":"npm run clean && rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.6","chai":"^4.2.0","conditional-type-checks":"^1.0.0","gzip-size-cli":"^3.0.0","mocha":"^6.0.2","rollup":"^1.6.0","rollup-plugin-commonjs":"^9.2.1","rollup-plugin-copy":"^0.2.3","rollup-plugin-node-resolve":"^4.0.1","rollup-plugin-terser":"^4.0.4","rollup-plugin-typescript2":"^0.19.3","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.1","tslint-react":"^3.6.0","typescript":"^3.3.3333"},"readme":"# IndexedDB with usability.\n\nThis is a tiny (~1.17k) library that mostly mirrors the IndexedDB API, but with small improvements that make a big difference to usability.\n\n1. [Installation](#installation)\n1. [Changes](#changes)\n1. [API](#api)\n 1. [`openDB`](#opendb)\n 1. [`deleteDB`](#deletedb)\n 1. [`unwrap`](#unwrap)\n 1. [`wrap`](#wrap)\n 1. [General enhancements](#general-enhancements)\n 1. [`IDBDatabase` enhancements](#idbdatabase-enhancements)\n 1. [`IDBTransaction` enhancements](#idbtransaction-enhancements)\n 1. [`IDBCursor` enhancements](#idbcursor-enhancements)\n 1. [Async iterators](#async-iterators)\n1. [Examples](#examples)\n1. [TypeScript](#typescript)\n\n# Installation\n\n```sh\nnpm install idb\n```\n\nThen, assuming you're using a module-compatible system (like Webpack, Rollup etc):\n\n```js\nimport { openDB, deleteDB, wrap, unwrap } from 'idb';\n\nasync function doDatabaseStuff() {\n const db = await openDB(…);\n}\n```\n\n# Changes\n\nThis is a rewrite from 3.x. [See changes](changes.md).\n\n# API\n\n## `openDB`\n\nThis method opens a database, and returns a promise for an enhanced [`IDBDatabase`](https://w3c.github.io/IndexedDB/#database-interface).\n\n```js\nconst db = await openDB(name, version, {\n upgrade(db, oldVersion, newVersion, transaction) {\n // …\n },\n blocked() {\n // …\n },\n blocking() {\n // …\n }\n});\n```\n\n* `name`: Name of the database.\n* `version`: Schema version.\n* `upgrade` (optional): Called if this version of the database has never been opened before. Use it to specify the schema for the database. This is similar to the `upgradeneeded` event in plain IndexedDB.\n * `db`: An enhanced `IDBDatabase`.\n * `oldVersion`: Last version of the database opened by the user.\n * `newVersion`: Whatever new version you provided.\n * `transaction`: The transaction for this upgrade. This is useful if you need to get data from other stores as part of a migration.\n* `blocked` (optional): Called if there are older versions of the database open on the origin, so this version cannot open.\n* `blocking` (optional): Called if this connection is blocking a future version of the database from opening.\n\n## `deleteDB`\n\nDelete a database.\n\n```js\nawait deleteDB(name);\n```\n\n* `name`: Name of the database.\n\n## `unwrap`\n\n```js\nconst unwrapped = unwrap(wrapped);\n```\n\nIf for some reason you want to drop back into plain IndexedDB, give one of the enhanced objects to `unwrap` and you'll get the unmodified version back.\n\nPromises will also be converted back into `IDBRequest` objects.\n\n## `wrap`\n\n```js\nconst wrapped = wrap(unwrapped);\n```\n\nUse this to convert a plain IDB object to one enhanced by this library. This is useful if some third party code gives you an `IDBDatabase` object and you want it to have the features of this library.\n\nThis doesn't work with `IDBCursor`, [due to missing primitives](https://github.com/w3c/IndexedDB/issues/255). Also, if you wrap an `IDBTransaction`, `tx.store` and `tx.objectStoreNames` will not work in Edge. To avoid these issues, wrap the `IDBDatabase` object, and use the wrapped object to create a new transaction.\n\n## General enhancements\n\nOnce you've opened the database the API is the same as IndexedDB, except for a few changes to make things easier.\n\nAny method that usually returns an `IDBRequest` object will now return a promise for the result.\n\n```js\nconst store = db.transaction(storeName).objectStore(storeName);\nconst value = await store.get(key);\n```\n\n## `IDBDatabase` enhancements\n\n### Shortcuts to get/set from an object store\n\nIt's common to create a transaction for a single action, so helper methods are included for this:\n\n```js\n// Get a value from a store:\nconst value = await db.get(storeName, key);\n// Set a value in a store:\nawait db.put(storeName, value, key);\n```\n\nThe shortcuts are: `get`, `getKey`, `getAll`, `getAllKeys`, `count`, `put`, `add`, `delete`, and `clear`. Each method takes a `storeName` argument, the name of the object store, and the rest of the arguments are the same as the equivalent `IDBObjectStore` method.\n\nThese methods depend on the same methods on `IDBObjectStore`, therefore `getKey`, `getAll`, and `getAllKeys` are missing in Edge as it lacks support.\n\n### Shortcuts to get from an index\n\nThe shortcuts are: `getFromIndex`, `getKeyFromIndex`, `getAllFromIndex`, `getAllKeysFromIndex`, and `countFromIndex`.\n\n```js\n// Get a value from an index:\nconst value = await db.getFromIndex(storeName, indexName, key);\n```\n\nEach method takes `storeName` and `indexName` arguments, followed by the rest of the arguments from the equivalent `IDBIndex` method. Again, these methods depend on the equivalent methods on `IDBIndex`, so Edge does not support `getKeyFromIndex`, `getAllFromIndex`, or `getAllKeysFromIndex`.\n\n## `IDBTransaction` enhancements\n\n### `tx.store`\n\nIf a transaction involves a single store, the `store` property will reference that store.\n\n```js\nconst tx = db.transaction('whatever');\nconst store = tx.store;\n```\n\nIf a transaction involves multiple stores, `tx.store` is undefined.\n\n### `tx.done`\n\nTransactions have a `.done` promise which resolves when the transaction completes successfully, and otherwise rejects.\n\n```js\nconst tx = db.transaction(storeName, 'readwrite');\ntx.store.put('foo', 'bar');\nawait tx.done;\n```\n\n## `IDBCursor` enhancements\n\nCursor advance methods (`advance`, `continue`, `continuePrimaryKey`) return a promise for the cursor, or null if there are no further values to provide.\n\n```js\nconst store = db.transaction(storeName).objectStore(storeName);\nlet cursor = await store.openCursor();\n\nwhile (cursor) {\n console.log(cursor.key, cursor.value);\n cursor = await cursor.continue();\n}\n```\n\n## Async iterators\n\nAsync iterator support isn't included by default (Edge doesn't support them). To include them, import `idb/with-async-ittr.js` (~1.4k) instead of `idb`:\n\n```js\nimport { openDB } from 'idb/with-async-ittr.js';\n```\n\nNow you can iterate over stores, indexes, and cursors:\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n // …\n}\n```\n\nEach yielded object is an `IDBCursor`. You can optionally use the advance methods to skip items (within an async iterator they return void):\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n console.log(cursor.value);\n // Skip the next item\n cursor.advance(2);\n}\n```\n\nIf you don't manually advance the cursor, `cursor.continue()` is called for you.\n\nStores and indexes also have an `iterate` method which has the same signiture as `openCursor`, but returns an async iterator:\n\n```js\nconst tx = db.transaction('books');\nconst index = tx.store.index('author');\n\nfor await (const cursor of index.iterate('Douglas Adams')) {\n console.log(cursor.value);\n}\n```\n\n# Examples\n\n## Keyval Store\n\nThis is very similar to `localStorage`, but async. If this is *all* you need, you may be interested in [idb-keyval](https://www.npmjs.com/package/idb-keyval), you can always upgrade to this library later.\n\n```js\nconst dbPromise = openDB('keyval-store', 1, {\n upgrade(db) {\n db.createObjectStore('keyval');\n }\n});\n\nconst idbKeyval = {\n async get(key) {\n return (await dbPromise).get('keyval', key);\n },\n async set(key, val) {\n return (await dbPromise).put('keyval', val, key);\n },\n async delete(key) {\n return (await dbPromise).delete('keyval', key);\n },\n async clear() {\n return (await dbPromise).clear('keyval');\n },\n async keys() {\n return (await dbPromise).getAllKeys('keyval');\n },\n};\n```\n\n# TypeScript\n\nThis library is fully typed, and you can improve things by providing types for your database:\n\n```ts\nimport { openDB, DBSchema } from 'idb';\n\ninterface MyDB extends DBSchema {\n 'favourite-number': {\n key: string,\n value: number,\n },\n 'products': {\n value: {\n name: string,\n price: number,\n productCode: string,\n },\n key: string,\n indexes: { 'by-price': number },\n }\n}\n\nasync function demo() {\n const db = await openDB('my-db', 1, {\n upgrade(db) {\n db.createObjectStore('favourite-number');\n\n const productStore = db.createObjectStore('products', { keyPath: 'productCode' });\n productStore.createIndex('by-price', 'price');\n }\n });\n\n // This works\n await db.put('favourite-number', 7, 'Jen');\n // This fails at compile time, as the 'favourite-number' store expects a number.\n await db.put('favourite-number', 'Twelve', 'Jake');\n}\n```\n\nTo define types for your database, extend `DBSchema` with an interface where the keys are the names of your object stores.\n\nFor each value, provide an object where `value` is the type of values within the store, and `key` is the type of keys within the store.\n\nOptionally, `indexes` can contain a map of index names, to the type of key within that index.\n\nProvide this interface when calling `openDB`, and from then on your database will be strongly typed. This also allows your IDE to autocomplete the names of stores and indexes.\n\n## Opting out of types\n\nIf you call `openDB` without providing types, your database will use basic types. However, sometimes you'll need to interact with stores that aren't in your schema, perhaps during upgrades. In that case you can cast.\n\nLet's say we were renaming the 'favourite-number' store to 'fave-nums':\n\n```ts\nimport { openDB, DBSchema, IDBPDatabase, IDBPTransaction } from 'idb';\n\ninterface MyDBV1 extends DBSchema {\n 'favourite-number': { key: string, value: number },\n}\n\ninterface MyDBV2 extends DBSchema {\n 'fave-num': { key: string, value: number },\n}\n\nconst db = await openDB('my-db', 2, {\n async upgrade(db, oldVersion) {\n // Cast a reference of the database to the old schema.\n const v1Db = db as unknown as IDBPDatabase;\n\n if (oldVersion < 1) {\n v1Db.createObjectStore('favourite-number');\n }\n if (oldVersion < 2) {\n const store = v1Db.createObjectStore('favourite-number');\n store.name = 'fave-num';\n }\n }\n});\n```\n\nYou can also cast to a typeless database by omiting the type, eg `db as IDBPDatabase`.\n","readmeFilename":"README.md","gitHead":"c8ebc5e165034b1bc47e0cafb7737c856ef08a76","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@4.0.0-beta.1","_nodeVersion":"10.15.1","_npmVersion":"6.8.0","dist":{"integrity":"sha512-J+GnxL1LxEnSOD+y+HE8lPH+NbE899QMPWMMyX/7jNv8e3BXkbOMyM/+V3zgSlDf5EoCaU+FIZL4DcwkLwEcbQ==","shasum":"5a257ef764deefec975c2d92ced3173e7ca19f6f","tarball":"https://registry.npmjs.org/idb/-/idb-4.0.0-beta.1.tgz","fileCount":37,"unpackedSize":190959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciMTSCRA9TVsSAnZWagAAuNUP/1E6rPDhzhsMF5y3S0mV\n0KUUzZwPYDx0s+PjgxzQ2cVSi9k28POaTBsLns+tLudn/x7UooJIT2BxhA2d\n4EaE5VzPOPrVo0kroalXIGkI4IGdD9Nn845t+8kJ8hOjbQwD3oOAsiOkK4xP\ncjseqbJwHRLPbPMWs5O0tJuRgTIC9Fr24Lb6vHBCV0OCiEXsTajuLOqUfDsQ\nQyTQFUnUft9SNnFi7xnRb0ZD0TiOZqvwUkaD8DM/N1NZOXrfa/dk9EBZ8Vdw\n5BLpCsxgw52KsJdoaxYxy20zJUrwWljiko2y96rQVy0cb7n9CPst9DQ05EEI\nl97GegdqwsU0XvIcaDz/w8ZfVbXZlPGFq5QNwhFe6JnZqvGrj1T8mmtu8p2a\naSS2vfAlRokPR6mBVJPOxzgrO+t0E+SwoOsKOvRRZPtt7STNUnAiRK0fWjjB\ngKfKIKAaxizt22oO6oeGOVSa3StJJJbnbJI/8tiGIJywggptBuccOEpAkXa0\nDPGYWEPO/UVQ7+PRg43+lcq640oFqiQvMt3htWgmVr0fyE6KX5Zkln9QPoPf\nrUtxYVeaVkaEIofgafd9KhtLZ1+2/Q6C/wLUejN5OAc8kfowIjs6x2gyuoGm\nX+xuBnrAp84L+oBqhF3QjTf7acNCbZlZT2RrqyHs7lQWnbIlW93Oj0hANdmn\nifJJ\r\n=Fzyt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAN30/4WBptjPriFDMWpj8WXYevRuo2ka8UoGcegU2LIAiARMciissPBTYg7npTCLSZyWGQNkzmQyr831YuiPiDY3A=="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_4.0.0-beta.1_1552467154088_0.09475496747532763"},"_hasShrinkwrap":false},"4.0.0-beta.2":{"name":"idb","version":"4.0.0-beta.2","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.mjs","typings":"build/esm/index.d.ts","scripts":{"clean":"rm -r build test-build","build":"npm run clean && rollup -c && gzip-size build/iife/index-min.js && gzip-size build/iife/with-async-ittr-min.js","dev":"npm run clean && rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.6","chai":"^4.2.0","conditional-type-checks":"^1.0.0","gzip-size-cli":"^3.0.0","mocha":"^6.0.2","rollup":"^1.6.0","rollup-plugin-commonjs":"^9.2.1","rollup-plugin-copy":"^0.2.3","rollup-plugin-node-resolve":"^4.0.1","rollup-plugin-terser":"^4.0.4","rollup-plugin-typescript2":"^0.19.3","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.1","tslint-react":"^3.6.0","typescript":"^3.3.3333"},"readme":"# IndexedDB with usability.\n\nThis is a tiny (~1.13k) library that mostly mirrors the IndexedDB API, but with small improvements that make a big difference to usability.\n\n1. [Installation](#installation)\n1. [Changes](#changes)\n1. [API](#api)\n 1. [`openDB`](#opendb)\n 1. [`deleteDB`](#deletedb)\n 1. [`unwrap`](#unwrap)\n 1. [`wrap`](#wrap)\n 1. [General enhancements](#general-enhancements)\n 1. [`IDBDatabase` enhancements](#idbdatabase-enhancements)\n 1. [`IDBTransaction` enhancements](#idbtransaction-enhancements)\n 1. [`IDBCursor` enhancements](#idbcursor-enhancements)\n 1. [Async iterators](#async-iterators)\n1. [Examples](#examples)\n1. [TypeScript](#typescript)\n\n# Installation\n\n```sh\nnpm install idb\n```\n\nThen, assuming you're using a module-compatible system (like Webpack, Rollup etc):\n\n```js\nimport { openDB, deleteDB, wrap, unwrap } from 'idb';\n\nasync function doDatabaseStuff() {\n const db = await openDB(…);\n}\n```\n\n# Changes\n\nThis is a rewrite from 3.x. [See changes](changes.md).\n\n# API\n\n## `openDB`\n\nThis method opens a database, and returns a promise for an enhanced [`IDBDatabase`](https://w3c.github.io/IndexedDB/#database-interface).\n\n```js\nconst db = await openDB(name, version, {\n upgrade(db, oldVersion, newVersion, transaction) {\n // …\n },\n blocked() {\n // …\n },\n blocking() {\n // …\n }\n});\n```\n\n* `name`: Name of the database.\n* `version`: Schema version.\n* `upgrade` (optional): Called if this version of the database has never been opened before. Use it to specify the schema for the database. This is similar to the `upgradeneeded` event in plain IndexedDB.\n * `db`: An enhanced `IDBDatabase`.\n * `oldVersion`: Last version of the database opened by the user.\n * `newVersion`: Whatever new version you provided.\n * `transaction`: The transaction for this upgrade. This is useful if you need to get data from other stores as part of a migration.\n* `blocked` (optional): Called if there are older versions of the database open on the origin, so this version cannot open.\n* `blocking` (optional): Called if this connection is blocking a future version of the database from opening.\n\n## `deleteDB`\n\nDelete a database.\n\n```js\nawait deleteDB(name);\n```\n\n* `name`: Name of the database.\n\n## `unwrap`\n\n```js\nconst unwrapped = unwrap(wrapped);\n```\n\nIf for some reason you want to drop back into plain IndexedDB, give one of the enhanced objects to `unwrap` and you'll get the unmodified version back.\n\nPromises will also be converted back into `IDBRequest` objects.\n\n## `wrap`\n\n```js\nconst wrapped = wrap(unwrapped);\n```\n\nUse this to convert a plain IDB object to one enhanced by this library. This is useful if some third party code gives you an `IDBDatabase` object and you want it to have the features of this library.\n\nThis doesn't work with `IDBCursor`, [due to missing primitives](https://github.com/w3c/IndexedDB/issues/255). Also, if you wrap an `IDBTransaction`, `tx.store` and `tx.objectStoreNames` will not work in Edge. To avoid these issues, wrap the `IDBDatabase` object, and use the wrapped object to create a new transaction.\n\n## General enhancements\n\nOnce you've opened the database the API is the same as IndexedDB, except for a few changes to make things easier.\n\nAny method that usually returns an `IDBRequest` object will now return a promise for the result.\n\n```js\nconst store = db.transaction(storeName).objectStore(storeName);\nconst value = await store.get(key);\n```\n\n## `IDBDatabase` enhancements\n\n### Shortcuts to get/set from an object store\n\nIt's common to create a transaction for a single action, so helper methods are included for this:\n\n```js\n// Get a value from a store:\nconst value = await db.get(storeName, key);\n// Set a value in a store:\nawait db.put(storeName, value, key);\n```\n\nThe shortcuts are: `get`, `getKey`, `getAll`, `getAllKeys`, `count`, `put`, `add`, `delete`, and `clear`. Each method takes a `storeName` argument, the name of the object store, and the rest of the arguments are the same as the equivalent `IDBObjectStore` method.\n\nThese methods depend on the same methods on `IDBObjectStore`, therefore `getKey`, `getAll`, and `getAllKeys` are missing in Edge as it lacks support.\n\n### Shortcuts to get from an index\n\nThe shortcuts are: `getFromIndex`, `getKeyFromIndex`, `getAllFromIndex`, `getAllKeysFromIndex`, and `countFromIndex`.\n\n```js\n// Get a value from an index:\nconst value = await db.getFromIndex(storeName, indexName, key);\n```\n\nEach method takes `storeName` and `indexName` arguments, followed by the rest of the arguments from the equivalent `IDBIndex` method. Again, these methods depend on the equivalent methods on `IDBIndex`, so Edge does not support `getKeyFromIndex`, `getAllFromIndex`, or `getAllKeysFromIndex`.\n\n## `IDBTransaction` enhancements\n\n### `tx.store`\n\nIf a transaction involves a single store, the `store` property will reference that store.\n\n```js\nconst tx = db.transaction('whatever');\nconst store = tx.store;\n```\n\nIf a transaction involves multiple stores, `tx.store` is undefined.\n\n### `tx.done`\n\nTransactions have a `.done` promise which resolves when the transaction completes successfully, and otherwise rejects.\n\n```js\nconst tx = db.transaction(storeName, 'readwrite');\ntx.store.put('foo', 'bar');\nawait tx.done;\n```\n\n## `IDBCursor` enhancements\n\nCursor advance methods (`advance`, `continue`, `continuePrimaryKey`) return a promise for the cursor, or null if there are no further values to provide.\n\n```js\nconst store = db.transaction(storeName).objectStore(storeName);\nlet cursor = await store.openCursor();\n\nwhile (cursor) {\n console.log(cursor.key, cursor.value);\n cursor = await cursor.continue();\n}\n```\n\n## Async iterators\n\nAsync iterator support isn't included by default (Edge doesn't support them). To include them, import `idb/with-async-ittr.js` (~1.37k) instead of `idb`:\n\n```js\nimport { openDB } from 'idb/with-async-ittr.js';\n```\n\nNow you can iterate over stores, indexes, and cursors:\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n // …\n}\n```\n\nEach yielded object is an `IDBCursor`. You can optionally use the advance methods to skip items (within an async iterator they return void):\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n console.log(cursor.value);\n // Skip the next item\n cursor.advance(2);\n}\n```\n\nIf you don't manually advance the cursor, `cursor.continue()` is called for you.\n\nStores and indexes also have an `iterate` method which has the same signiture as `openCursor`, but returns an async iterator:\n\n```js\nconst tx = db.transaction('books');\nconst index = tx.store.index('author');\n\nfor await (const cursor of index.iterate('Douglas Adams')) {\n console.log(cursor.value);\n}\n```\n\n# Examples\n\n## Keyval Store\n\nThis is very similar to `localStorage`, but async. If this is *all* you need, you may be interested in [idb-keyval](https://www.npmjs.com/package/idb-keyval), you can always upgrade to this library later.\n\n```js\nconst dbPromise = openDB('keyval-store', 1, {\n upgrade(db) {\n db.createObjectStore('keyval');\n }\n});\n\nconst idbKeyval = {\n async get(key) {\n return (await dbPromise).get('keyval', key);\n },\n async set(key, val) {\n return (await dbPromise).put('keyval', val, key);\n },\n async delete(key) {\n return (await dbPromise).delete('keyval', key);\n },\n async clear() {\n return (await dbPromise).clear('keyval');\n },\n async keys() {\n return (await dbPromise).getAllKeys('keyval');\n },\n};\n```\n\n# TypeScript\n\nThis library is fully typed, and you can improve things by providing types for your database:\n\n```ts\nimport { openDB, DBSchema } from 'idb';\n\ninterface MyDB extends DBSchema {\n 'favourite-number': {\n key: string,\n value: number,\n },\n 'products': {\n value: {\n name: string,\n price: number,\n productCode: string,\n },\n key: string,\n indexes: { 'by-price': number },\n }\n}\n\nasync function demo() {\n const db = await openDB('my-db', 1, {\n upgrade(db) {\n db.createObjectStore('favourite-number');\n\n const productStore = db.createObjectStore('products', { keyPath: 'productCode' });\n productStore.createIndex('by-price', 'price');\n }\n });\n\n // This works\n await db.put('favourite-number', 7, 'Jen');\n // This fails at compile time, as the 'favourite-number' store expects a number.\n await db.put('favourite-number', 'Twelve', 'Jake');\n}\n```\n\nTo define types for your database, extend `DBSchema` with an interface where the keys are the names of your object stores.\n\nFor each value, provide an object where `value` is the type of values within the store, and `key` is the type of keys within the store.\n\nOptionally, `indexes` can contain a map of index names, to the type of key within that index.\n\nProvide this interface when calling `openDB`, and from then on your database will be strongly typed. This also allows your IDE to autocomplete the names of stores and indexes.\n\n## Opting out of types\n\nIf you call `openDB` without providing types, your database will use basic types. However, sometimes you'll need to interact with stores that aren't in your schema, perhaps during upgrades. In that case you can cast.\n\nLet's say we were renaming the 'favourite-number' store to 'fave-nums':\n\n```ts\nimport { openDB, DBSchema, IDBPDatabase, IDBPTransaction } from 'idb';\n\ninterface MyDBV1 extends DBSchema {\n 'favourite-number': { key: string, value: number },\n}\n\ninterface MyDBV2 extends DBSchema {\n 'fave-num': { key: string, value: number },\n}\n\nconst db = await openDB('my-db', 2, {\n async upgrade(db, oldVersion) {\n // Cast a reference of the database to the old schema.\n const v1Db = db as unknown as IDBPDatabase;\n\n if (oldVersion < 1) {\n v1Db.createObjectStore('favourite-number');\n }\n if (oldVersion < 2) {\n const store = v1Db.createObjectStore('favourite-number');\n store.name = 'fave-num';\n }\n }\n});\n```\n\nYou can also cast to a typeless database by omiting the type, eg `db as IDBPDatabase`.\n","readmeFilename":"README.md","gitHead":"82285acca8bc59b97a4d12dff29a3c54c3a8dab5","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@4.0.0-beta.2","_nodeVersion":"10.15.1","_npmVersion":"6.8.0","dist":{"integrity":"sha512-OQ2iKH511Yroz2PnwW2xF6uUHp6lp2cJKkN2KTckxMJYbwRNeIyVJ/PocvydmVsjg2p9poZf+MIqxuebs2Sb2g==","shasum":"5c341f120e0a56e5e94217db8c5a03dfd6a52075","tarball":"https://registry.npmjs.org/idb/-/idb-4.0.0-beta.2.tgz","fileCount":37,"unpackedSize":189163,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciPkoCRA9TVsSAnZWagAASA0QAKJ6TRHCCpQ5N4nWHjXO\n/L7n9t4PypTyEV2oYNJN0md0Is6JdwJUyqIobC07gyDoLdoDWYeJJnbFkz2S\n8wcyW7dYQC+U18Q8Tn5xvoRaliHcSBy7Cg0sUwMESU0W7IgkB4rU+ZxyLWrA\nwUD+e8vBIe0ISAC2ayexSSA4USZtdbuBlsNWj9sUbBE4kX8Z2Sg6wX/BXM0E\n4A1zJ2jGmXwzPIktEY/tTcfQeZg+Z85WfRDAun4z5rkJ1JigUgH+Lh4VG3H5\nkqoVrRspyoyU2SBAK0PHAa2z+ndeefYiQrD52c/2VG4wjnz6nUHGLgsaIQRW\n9EbH+KHzNagoBjSQmNmJZ7joKYl3JesK8oAyOgBozcogoUVZoOIMtKHVLEna\nV7NL8lBfqBi+rrw2wfEsYP8gW60YAlJR8zSUPu6OhbNP7tY23P44mFpFk83n\neCtMjXBC8BqtJtSXS0DIi21SAPppLoTvqi6JLmyTHxW5dO1y7AsHed7mOcP3\nuwDZHrFJUZLT/bqjYUBLjkfhfzUJjMscQKvEBR7JGYm4enj5QzNJ4djDgNO2\n6vjswpvq4ZG7x8WPBnMRtD4KpEsTZu8h8JZRHP5ad0vXqPyXgv81TOgq+YNO\n8baXzTqs2ftypFd9duA5bHQOyRSsfDZhgkoJ0120WzqcenMYIcOEldC9T7/G\nomz6\r\n=0lCK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxB0pqosSfq7D5ghIGx51ICE6RmDcg6alAUu6A6kwiNgIgL6/pEp9ByAj6X+lOdsGugItqxBt3CQP1k2xxo48rPi8="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_4.0.0-beta.2_1552480551674_0.662547953803595"},"_hasShrinkwrap":false},"4.0.0":{"name":"idb","version":"4.0.0","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"clean":"rm -r build test-build","build":"npm run clean && rollup -c && gzip-size build/iife/index-min.js && gzip-size build/iife/with-async-ittr-min.js","dev":"npm run clean && rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.6","chai":"^4.2.0","conditional-type-checks":"^1.0.0","gzip-size-cli":"^3.0.0","mocha":"^6.0.2","rollup":"^1.6.0","rollup-plugin-commonjs":"^9.2.1","rollup-plugin-copy":"^0.2.3","rollup-plugin-node-resolve":"^4.0.1","rollup-plugin-terser":"^4.0.4","rollup-plugin-typescript2":"^0.19.3","tslint":"^5.13.1","tslint-config-airbnb":"^5.11.1","tslint-react":"^3.6.0","typescript":"^3.3.3333"},"gitHead":"846529209f1d0caff9ba1254b242ef8849919710","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@4.0.0","_nodeVersion":"10.15.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-TWHSYcfqKet9ew50PFqdi2KB8gfdXO3NESh9be7eJqk9uC0rmGb6A/eiIN/UpGYkbjZ98psDujE5/oaeqkraCQ==","shasum":"0c79ab1655fb7d14eb8f4626d761f0847ab2f014","tarball":"https://registry.npmjs.org/idb/-/idb-4.0.0.tgz","fileCount":38,"unpackedSize":199914,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJci3ZTCRA9TVsSAnZWagAARtAP/21YY9if1q1IeFYiI2O2\nEbq7V7de9+VdP85mLPFtfSKUnej8Z2ZImCfWCrdMJrYtlXdmgFCN0fQxzaiY\nwenPyQaNZMoVI8slH0K+mggx2GLWiK/Kk7waIZc5b1JzYg11EQxb0WYgSAcc\nRH7vFQm8OkR2NBRWtnRypbBBlm7YNLqHxO3ByLvcLDwFCU6QiJemXXVD1jRs\n3oVKzm5xxQ1qKRnefJXoN+1qgLPiDTV0ehMdX+SWI4hfy1aGVF/GJcaLTilQ\nrjCKQJ9lnUGw9iHgAVEHnj+FWpEok+6wbhP96iaxMFhpyb9T704b7aKPyaJC\n/rI0Dlc+1i5opleny0dwZRWLx+0SfkwsskAbvFM4CZcl8b6rFKI4gkszeY+Y\nTovE0ifBFOsew6kvP1DfedqcuhYoopQHB+Sm2UDauRwYo5i4O3cySvJrahWh\nEuOiyAak8AskymUk3K+y5HhbJKeAI9L2NlhdeeTFLhm1XIfxiDov5/890C+D\ncDPRMQ3aGebs005uMCZzNNnlceX64m7Egq6M5XLwTIFPW4XU/cPtwcm10eQA\nR8C6svtXevVTm+qLGs+s+PIYj6c0apOEUgUOBGkLBHZHCraV3i6BTkkfNqYp\nhI2Z+aOdwe5MSW+Y0zRs6UxZUVvPFw/cnTeQkjvqPZImgigZJFH18aQeG9A2\nz8dR\r\n=0K+D\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAfi8vS01DprBLuigzz8R+nLyXC655G5fB9pvzVkBuD/AiAqBut6Qt2qoYrH8MIUefjo156iTaR9ef0DwTI+VTOszg=="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_4.0.0_1552643666651_0.9485594008945517"},"_hasShrinkwrap":false},"4.0.1":{"name":"idb","version":"4.0.1","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"clean":"rm -rf build test-build","build":"npm run clean && rollup -c && gzip-size build/iife/index-min.js && gzip-size build/iife/with-async-ittr-min.js","dev":"npm run clean && rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.6","chai":"^4.2.0","conditional-type-checks":"^1.0.0","gzip-size-cli":"^3.0.0","mocha":"^6.0.2","rollup":"^1.6.1","rollup-plugin-commonjs":"^9.2.1","rollup-plugin-copy":"^0.2.3","rollup-plugin-node-resolve":"^4.0.1","rollup-plugin-terser":"^4.0.4","rollup-plugin-typescript2":"^0.20.1","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-react":"^3.6.0","typescript":"^3.3.4000"},"gitHead":"ab80bfc100e2064624a2f8abb1ed2347708421ad","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@4.0.1","_nodeVersion":"10.15.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-2xaMMlHy2m8lCefM5AUylV59XkXclReFqmWUmETHW4/eIuLDAbbVR1yULeJIZAu5FPy4NnTCaPzkNdbNwKt9pg==","shasum":"1811099b0b8dd02785f1b92e0d34611e922f391e","tarball":"https://registry.npmjs.org/idb/-/idb-4.0.1.tgz","fileCount":38,"unpackedSize":199776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcocBcCRA9TVsSAnZWagAAUzgP/3nb+AaHPWC6hfl/hb47\nIxv4XAB9H03l7ntDmQeE6VfaVUgYPhDT74p/oGAmDacYdSvFUgHqfdKFDLh+\nopppDYWF4CTjkjeTlnIjpN6dBhp3WmNNfW1xmVBD+OTNNAttGTs2aPhqEVZi\nKLPC9OzZrsmWxbzMSW4m0LbAB6UKVJCymPPFI7sNfvyO4MH0xmKQ/ICIV+Yt\nY7FPUFudPpTGjDUKQZUXHjS51RNHy1zLZ6teggltxvZXQCBlsWhpMKDboXV7\n5M6C72satapX/BQu7qeQ5RfJQRh4HIyMMgyZIKUMflDusijIDhFMreS/zivU\nf3UjNH7AvbP0s47KwoDn77o+GElmDtR2HcyJ6LGDx5S9kw6rzfptpR/cldN6\nUyno2f+1jOIPRvoxz8t2FKEXPCqmkibxmp2+VhsA0O+DZrb1JIAP4VtSsJIF\neSFvfIRmb7iSoGwZJx8juUva46G2LwgNz4TiyDS09x0VtFPGPFcoqkC7WiZQ\n7COWrf/E/gXjKxHWdxrmyHBeX2F58x2e9T/ONHLQM7eJvWsyVUkAsEkczJ9z\n8+fbautHoQ2KbRQbkUaqqppZ9dofL3uLshRWqQkArh0Vw1D3QI9Lv8Y9MGyg\nZ2nGszdljvt3a/0CV2y8mMohKWT3k20RBiYOmM+kNR+2E+YsWglGp1xbKDS3\n8KiD\r\n=+u28\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzMg1tEqJihzW0sIc1DoMJiiD2KxTCRBwzBGdjTjXBwAIhAI/ipJo9G/Ja58FwlvvmrsSoOvXn3+p3+Y5NMu+6Jl2U"}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_4.0.1_1554104411497_0.48249575354658103"},"_hasShrinkwrap":false},"4.0.2":{"name":"idb","version":"4.0.2","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"clean":"rm -rf build test-build","build":"npm run clean && rollup -c && gzip-size build/iife/index-min.js && gzip-size build/iife/with-async-ittr-min.js","dev":"npm run clean && rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.6","chai":"^4.2.0","conditional-type-checks":"^1.0.0","gzip-size-cli":"^3.0.0","mocha":"^6.0.2","rollup":"^1.6.1","rollup-plugin-commonjs":"^9.2.1","rollup-plugin-copy":"^0.2.3","rollup-plugin-node-resolve":"^4.0.1","rollup-plugin-terser":"^4.0.4","rollup-plugin-typescript2":"^0.20.1","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-react":"^3.6.0","typescript":"^3.3.4000"},"gitHead":"397678f28068dcddc1b46f83768a0e336f62d657","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@4.0.2","_nodeVersion":"10.15.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-0qicYZA5D98UnJT+WLapEe1uXUiUrcA78l4Fgpv61B9HlxSeGLw2UWNIqMMYGsz4TqDEDWMNjY9Rw/yefQhX4Q==","shasum":"0a30439ebd823b9b40037b1c80145d6e869f0b16","tarball":"https://registry.npmjs.org/idb/-/idb-4.0.2.tgz","fileCount":38,"unpackedSize":199773,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpcqUCRA9TVsSAnZWagAA9MoP/3du45+E+41vAB8rFlhG\nvAMz8LC3UAO9+1AU3Y5VkGE0tay3VClxgukPWXNeRg3QeMRxOaOpRhKqKjmV\n5nUjVg2esSl4DJjwkpxEBbBECQzjZY7XBjqJ/bkDJRSPqrMriZFwEukB+vty\nKTdPM7tmePO8NdYPXBzJ8h7DjJvpf3KT9IjmZKP0dD/vDE+Q3jbWI6BKV75u\nX/RFEn8bHjZ5Rdnj1GuCtVdpGKy4T6wSITtswo/kTvxCXU/6mAQRDVkCzEZv\noj1ztZul96laUoKK7MNsWSuZ+sJfSJNp9Qnjvs5ul0opR1zAFmynijiKfn12\nmmgio0VCoILdvU1+VmQpq5UtzQVNEK33+lGiz02EOEkbeHdJ/OMB51VfaByD\n486DxwqdyCZp7yBtOHgVNl+fRx0Z0bdK7fVG7sG4YLfq5hSXVGy25gaiKgB9\ns4PW9/Nm94aTx1/PkvqMHXV+97E+SOb7jA5cFK3K17/m2JdVgG7mTpN3SojB\ntFMd27QMeYu/slo0UwhBNsXyBLEHlyOjbP4BNOOupHvXlO0peNENLVRz9CvA\n7a0hCLBQ2DyyBT7dANU/7jeuVCR1VZXuS6iNoQ6jhyeBZV9k19um721CC7Xf\nvi8VHqsbPgzPHW3CVgsCbe/M99pRMMs2eHsMhuDIK1k4KdNlpONekUuqxbLd\nCE4n\r\n=LLgN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCvYWxmf72Lc1hCslaXUy26xpwcBTVrpw7/BiNKeix/kgIhAMMnjmPc0LC7VOq8t/kNcF/AMM4W+KUDbypeAn3tb7t6"}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_4.0.2_1554369171656_0.7077575017942563"},"_hasShrinkwrap":false},"4.0.3":{"name":"idb","version":"4.0.3","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"clean":"rm -rf build test-build","build":"npm run clean && rollup -c && gzip-size build/iife/index-min.js && gzip-size build/iife/with-async-ittr-min.js","dev":"npm run clean && rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.6","chai":"^4.2.0","conditional-type-checks":"^1.0.0","gzip-size-cli":"^3.0.0","mocha":"^6.0.2","rollup":"^1.6.1","rollup-plugin-commonjs":"^9.2.1","rollup-plugin-copy":"^0.2.3","rollup-plugin-node-resolve":"^4.0.1","rollup-plugin-terser":"^4.0.4","rollup-plugin-typescript2":"^0.20.1","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-react":"^3.6.0","typescript":"^3.3.4000"},"gitHead":"809a75ccc31c46ac62174ff9c2c10efffa5a53df","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@4.0.3","_nodeVersion":"10.15.1","_npmVersion":"6.9.0","dist":{"integrity":"sha512-moRlNNe0Gsvp4jAwz5cJ7scjyNTVA/cESKGCobULaljfaKZ970y8NDNCseHdMY+YxNXH58Z1V+7tTyf0GZyKqw==","shasum":"b454a51ba0c45038a9a7be6898ca996aa74f9a37","tarball":"https://registry.npmjs.org/idb/-/idb-4.0.3.tgz","fileCount":38,"unpackedSize":200122,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcpiQ6CRA9TVsSAnZWagAAF0MP/3coFQsmcwccUkwXK2z+\nlkt8WIXw45id294UBY7CjrjduX0RihoP5Ww5FstKvwNxII/n5CNlvUj4ktQk\nA2yc2O0Ua4KafP4nFfhpOoLNIXMCoJXod4sn/cFZZAzmpcoqu/CuzB/zTTVq\nc3KtR6lH92uaW071X2JMswXgNW7GZVk8iApUgx3cxSbCvSROjbY+x2/lJcOc\nt4q+gwpIDuFgLGFPnSYrI2FNl1fTVmWWLMAIFYJGttnIE+0I+W29nXd05y+2\nNd3BSPRHHlbPtUJb/MgtPojaCiSXxG2K4Tvjof4POCUHslXLkEnVMJ/w/5gH\nd6YVGgcwGlMiUrybAhgGG2EnKZHEignoKzpahV7RpnbU6b0VxOp0NFtjKF0E\nYbkuLUTYzpX1vehBpUu0Ek7AgZ/J3nDMI0r/Gh0xIIQTr4vxemZnMlSzTP6Z\nu+9a/Z+FIWwwGbHhZGxuPMXnWreGR37mcosAG27aW8Oil0Rz/8oQl5vDGXqR\neO3u1zBpuwZEuOjOnfx1mwu3x4OAezgi2HLgkVBpjASN5WNpr+TAzIlRYu/+\nvnpEEHacp0rWJU+YROPEKrcXYsYsAFp42L9kTtE2fv/zjY8IxEHuNwYJQot4\nM/qvA9ickZ4Yq7xSKg3w+SOiS4xQGo1NkSwz1ukUQ4/GspkK8yRhUfkgH07c\nQP8m\r\n=lfdi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFvvBjkxe8olghTydTp1dBVL2qewZJUulT2urFEdtlw9AiEA18H+KkeOn3+33NDt5s5TwjcpeA1Ct/rld2QiKYU5ZNE="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_4.0.3_1554392121799_0.4498362062174406"},"_hasShrinkwrap":false},"4.0.4":{"name":"idb","version":"4.0.4","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"clean":"rm -rf build test-build","build":"npm run clean && rollup -c && gzip-size build/iife/index-min.js && gzip-size build/iife/with-async-ittr-min.js","dev":"npm run clean && rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.6","chai":"^4.2.0","conditional-type-checks":"^1.0.0","gzip-size-cli":"^3.0.0","mocha":"^6.0.2","rollup":"^1.6.1","rollup-plugin-commonjs":"^9.2.1","rollup-plugin-copy":"^0.2.3","rollup-plugin-node-resolve":"^4.0.1","rollup-plugin-terser":"^4.0.4","rollup-plugin-typescript2":"^0.20.1","tslint":"^5.14.0","tslint-config-airbnb":"^5.11.1","tslint-react":"^3.6.0","typescript":"^3.3.4000"},"gitHead":"10b83de22cc200fa69833fd246eadcc4c7ec3d23","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@4.0.4","_nodeVersion":"12.4.0","_npmVersion":"6.9.0","dist":{"integrity":"sha512-ZYsaBSNub2yAnjvmRKudQlMIPqZQIefAOwNIPeXC+RLIeXYFc0UNQqONKNuQeBNf8oBOV5L75yJ9zFISjHVj4g==","shasum":"f0c06f58bd78fe557e4de944fd6ba6a3240faa8e","tarball":"https://registry.npmjs.org/idb/-/idb-4.0.4.tgz","fileCount":38,"unpackedSize":203494,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdKETPCRA9TVsSAnZWagAAeosP/13+SZXfxWNLYO4pV8BG\nJoy4suKiNZ30AmQkNfJwvGsVK68ZrX+xS7jY9Yk4Y+oBeKGX72/3EC1FWPqY\nFFaw3HGHIwPmOSl6bJeqKBQee5i0ZAdZye9bPkNMzzCrJIKspse4Wg6WfHPk\nq1sjRZiQE+88PNiSoDt4/4/z5qnN/31F0WDYQUxCTx8vpnrRMv2+uci7SaXA\nx847bd4XEL4NMhTTc+5XyTkHlRW/Mcv0a2ui0faeQxvHJWq3oaas5UP1erym\n7+s41mrqoBtHELmyc1tDwZaJW9/RnbxLpi8QoWdH352XUalg06DqgQ6PFxT7\nuIBuSLgo6D8Eh89kKaAXyslmMjjXdkbRBDDyD1dHh0L63unbny/dgeuZVA4i\n2TNwCr7S92pblaDkHougV3GHIQS/gyeyFwccxuenYcGId0YgRIK1BKgQhfsn\nLwv28ae6GI4Lu8u+2u2kapgfmbmul34oRrbhxxuZQwiTTvdHi+5CRjaSKitI\n7VoVX5xYvTddjdgbgLw7fGLG/oQhN+VnfFeKzkhFg4xaI5nzZBfo9AL3zrv8\nSpxKqvjaq81K6GkH6fgZ5dTKejZX8zmxrb2u3sK2gJZt+8Z2+86sV9eKTWPu\ncLsQA4+wY334/09pdCMM4O0k+J3beCQ/XTZrAtsryk9WxwbEOLHFL9FcDwoU\nvYD1\r\n=TGcN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPZFGn645UECHvUigt0awW5CJ0FXz5U5xMj6TficSaZwIhAKW44qEj+IZhNPogLfoicbA7a5aNv9dptrAhGGwJWW0U"}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_4.0.4_1562920141928_0.9144070504369788"},"_hasShrinkwrap":false},"4.0.5":{"name":"idb","version":"4.0.5","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"clean":"rm -rf build test-build","build":"npm run clean && rollup -c && gzip-size build/iife/index-min.js && gzip-size build/iife/with-async-ittr-min.js","dev":"npm run clean && rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@types/chai":"^4.1.7","@types/mocha":"^5.2.6","chai":"^4.2.0","conditional-type-checks":"^1.0.0","gzip-size-cli":"^3.0.0","mocha":"^6.0.2","prettier":"^1.18.2","rollup":"^1.6.1","rollup-plugin-commonjs":"^9.2.1","rollup-plugin-copy":"^0.2.3","rollup-plugin-node-resolve":"^4.0.1","rollup-plugin-terser":"^4.0.4","rollup-plugin-typescript2":"^0.20.1","typescript":"^3.3.4000"},"gitHead":"a36e090cf7e861accdd9aa610eeda0e149ecbe5d","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@4.0.5","_nodeVersion":"12.4.0","_npmVersion":"6.11.3","dist":{"integrity":"sha512-P+Fk9HT2h1DhXoE1YNK183SY+CRh2GHNh28de94sGwhe0bUA75JJeVJWt3SenE5p0BXK7maflIq29dl6UZHrFw==","shasum":"23b930fbb0abce391e939c35b7b31a669e74041f","tarball":"https://registry.npmjs.org/idb/-/idb-4.0.5.tgz","fileCount":39,"unpackedSize":198455,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdmvPgCRA9TVsSAnZWagAAXkoQAIIo9QO3/1yZQLPDDsUl\n4Afdi5IDkKG54/yb+TrN+BB16X084gYctyHpZNBfX8vg6M/iFx+gzkLe8c2h\nIfZc2VaclYRxNROctGzuC9Y2blr2HU0hAXkgo5mAzSMP12Nt9tTHWTnqNlIN\nS8Uz2AjpOKJ2QuB0vMEvhX6Ow/r8wBKSc94wQ1YHKQzTt8z68mELy9/9IluW\ngo6LuDZkkeua2e9ZW5+im8fbwfMzBtV+eGhxJ/1zYJUOjUG7cTcE5uM5YWF3\n8+Qw05CUhFSyQKHt+12MSloMcArZF4n5Qu8anCHDyzR4KAFfytucfY9qnmYz\nZlgT1IKOrAkInxCqIK8jIenzx1iT6X9YYQCdAP0xyBJcAUqvMzjwvG4rH2Gg\nNF3FPI1/oOzlOixZEbzb7jLfuE9romRgI7RA1WQjOCN1NkAOVMzGhrP3lRrw\n5+JpQYsg/mU4p2pFRhlucctb8xn3ijTc7LqlyT/UBMewjyXHWwvewin/AiPR\nTHET14Gg8vLwz7tPozUNZlEHpyyLeiwJq9qNNg8WNserg++WXebSLbqyp0KS\nism4wnzP2N3wtbSlYlF+VkhLTGkkxalMU40oM9cUw6/3lyt/KscOTjhJMBL2\ndDTeyHl5oOigw1EzUVJcGrs0no0ARGKkRsmE2D4Lw07Ol6A2je3li3/p/eKU\nrfpb\r\n=DWNb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA3qgZ80KiyPaonjp2+MMI4ygA2A/EpuhvbceSxllc9MAiEA0sTGKesuU2yoOgV0OOLfsKOzJZFzrl4D4cK5BH8wMTQ="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_4.0.5_1570436064081_0.8637864068263092"},"_hasShrinkwrap":false},"5.0.0":{"name":"idb","version":"5.0.0","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@types/chai":"^4.2.7","@types/mocha":"^5.2.7","chai":"^4.2.0","conditional-type-checks":"^1.0.5","del":"^5.1.0","filesize":"^6.0.1","glob":"^7.1.6","mocha":"^7.0.0","prettier":"^1.19.1","rollup":"^1.29.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.4"},"dependencies":{"@rollup/plugin-commonjs":"^11.0.1"},"gitHead":"97ceef5d525c2d728027416c2ab39e6f8522194e","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@5.0.0","_nodeVersion":"12.4.0","_npmVersion":"6.13.0","dist":{"integrity":"sha512-TmUY6ogQgb9xbsIZzJx/rV6r9gAP0qIEmrGQz1ZpBOkgoG7a7E+H35P1wAn6DXI9rG3guBbt80sGHEv/LBUzGw==","shasum":"b93d1e499d932959358a49fb6dd1c23c1157ef55","tarball":"https://registry.npmjs.org/idb/-/idb-5.0.0.tgz","fileCount":73,"unpackedSize":298516,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeF2TcCRA9TVsSAnZWagAAJigP/3ReryiGqyypO+ooJ5E0\nd8PohdzjUFB+YZvN/MrxTaAM8Mcz00pCk9JkRgrmBsgBVFwsahYoZL46P1np\ncXxrq60nX7SC+SxQ5mchjkGylvPT78sAjDTR087gTFOtqsxeVsBabkxraRRt\nUFhvQalV6Owvy2J7mr2K9h+djJFVt9nQnRiFkOSxqWjIMGpw+egz02JdVk74\nHR6fiaFPammtuvGnIqENAecFRvjrF+nyiVDvK/I4cxmwzDwNUQi5eKym0GNm\nVtHc4S+O9sokZHKDH9CJdr6KfImgAr5mVKdOzP3m2Ep4tY+boQdKU6mMaQRO\nB0g7mwC4qvZ9KDSl8g7rYewoVBMIBjBrLWZxvD+v4zt0Kl/YN1LQDOHD3mF7\nsIlXwHZJqb5/2mwWn9mO0uIkamaHDgaDs1GMKBYVMDiPv2n8FCTD9P411iVc\nT1c5miKxCHGMb30n3kr3aVl4TZcVPwtDS7e8Lwau+6iFLnTLf87QtwDKFNxt\ndwlqg7BIr+FIHTVGLwFiaxgokjGLhFHVYm9dgx+KAqj2WGfhlL5G7hhtFTyt\nIagx1ofqhfgZJbs/tt8X2oqAiDeaSQVIEjf2PeVkBNRhbHLC/IgLo42bty2y\n9O7fr2qUk04KBAe+rOWQOwH/mM6/ZNKG4GbncGCWYpU2tmXZXn9POvc4hBA3\nIwZL\r\n=ThsV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHvayCgoFMVUEd0pkD3DKUZXM5vPynJHGasMqa7/NJ/YAiEAkZMSh2tPBqW1TnyF/NLb+KPQZN87+c3DPEx/ytrVGfo="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_5.0.0_1578591451754_0.4435159811003939"},"_hasShrinkwrap":false},"5.0.1":{"name":"idb","version":"5.0.1","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^11.0.1","@types/chai":"^4.2.7","@types/mocha":"^5.2.7","chai":"^4.2.0","conditional-type-checks":"^1.0.5","del":"^5.1.0","filesize":"^6.0.1","glob":"^7.1.6","mocha":"^7.0.0","prettier":"^1.19.1","rollup":"^1.29.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.1.3","typescript":"^3.7.4"},"gitHead":"a71996b4b319e25ca411042d21be359b60acf851","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@5.0.1","_nodeVersion":"12.4.0","_npmVersion":"6.13.0","dist":{"integrity":"sha512-jdFnxTvz3JZ5AQP4nAb0x7bnisFNO5KqafsarDn/aehIn84UcVY3z96mq6WiqNe8z7OpZWZ0xG1ORbkwuBp5Mw==","shasum":"aad7d045490a3be133885cd0ce15b334a83ce3ac","tarball":"https://registry.npmjs.org/idb/-/idb-5.0.1.tgz","fileCount":52,"unpackedSize":174940,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeMWeqCRA9TVsSAnZWagAAle4P/0MxZnsgtWYxZzkix+5a\nur2+SkznWg//AENp+GIAyxy3Vv7vrzWyEE+8piOZAG4ntr/nyF3Dpewln7Lb\nwZYvUwlXdDS8S9WgwleOgxBrxxCbRBp8fq/sbsaftMlrrw4bVVqsFrT+OYaf\n1ybWRhND+1OjqSXDvcalQ+ah7z8u2EtwdHHvyrlLv6zXHAFp+cXOsPncwv/E\n9JhMOeYI3oiItpdKSdoY6g1TDfb9LfkbPf08csprANAutpQDMi3PmRFjR3hM\nWVzVLtOIJZ5bwuardhv23RsORWNR6GN8l/WBe8TQjT7vky9mi5c1a+rfil0P\nyKK0x0XCdtW5jph0aD0cREYkx1lIBnWaVs+eK3cbbcmO9HDv75yWkBY2H6p2\nB5IL0Wvu38v5F1QKtlfWwLgMUDx9XKOb8EN2ftEOxVUJ1hzF1iIrttpKYUFk\nFh83XFzp5fH12JSqWbdva8lIn8wg+gCf7kCKcxHUqxqMhcp5kdDSC8dNKI0w\n5c6Yyfa9CezPfOBcwt70V42RsCfrmnGSnF1tp2F7t3GysXQo0R6XQEGmt1O0\npAzsCeQ+HrBJPfODZPIIdtGypgeU/wN0Jbno0W/6IgZrB05j7iCaUUTuOqoW\nlWljrgjkG3SZS1nPnWuRa7Y35pWOdVh+hIaknYlBXK2zalRx/m+F/IZtVgtv\n6t3A\r\n=OxvU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEbkKmRAJgJObV1T7+Dt4T7CC55BCXSFAqNsjabKw9VQAiEAvyvOAWr/Ur2IvSBlxRzfdUAdhCIyrOgjrG6rrbVoZHQ="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_5.0.1_1580296106183_0.00626011261465087"},"_hasShrinkwrap":false},"5.0.2":{"name":"idb","version":"5.0.2","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^11.0.2","@types/chai":"^4.2.11","@types/mocha":"^7.0.2","chai":"^4.2.0","conditional-type-checks":"^1.0.5","del":"^5.1.0","filesize":"^6.1.0","glob":"^7.1.6","mocha":"^7.1.1","prettier":"^2.0.2","rollup":"^2.2.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"gitHead":"01082ad696eef05e9c913f55a17cda7b3016b12c","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@5.0.2","_nodeVersion":"12.16.1","_npmVersion":"6.14.3","dist":{"integrity":"sha512-53yU1RbSPkSkQxufmNgcBkxxnbsTMGaYCv2NwQDmBP75muYj4Z75DsvCqhCCivYcC1XaXDi9tZSUOfDQFxuABA==","shasum":"294e5dd0f1930519dd07393a793cd4edfac93834","tarball":"https://registry.npmjs.org/idb/-/idb-5.0.2.tgz","fileCount":52,"unpackedSize":175121,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegfy6CRA9TVsSAnZWagAAZhUQAJV/9M31y1WtpfNOfhoz\nTrccjgwlc3XgT2Y2a+A4hcap0VFh9dsKa/PVsfP5jsqScMCUO6OSrdvXPhbR\nbRvnViyX2FMdB5cQldu357Fcacon5Mnsi9xfwH84uPhS28TteW8M9ib9x/3a\nGcRwrPfJ7GhYnoM0vDiIB/1qRKfhf4qa1K4QL63Rdr1wbIb4XYJ/jQRD9sEA\nyUWzsbIP2DoS3uNp7YFxy444NNlLx+sJAym28CcEbeQMxSueHrA+tAGcMH5H\nvNwnlu9+mP1FLWnAWSQE7tYGWDDN6Rh3VJ5pWgDP0BFMU5x1x4xvfGvLnNPT\nnZep2hcVwvocIa+brneZYnNDsVN7Y5/N8WjpfMx4DG7BHmHNxgO08YjHW3dU\n7LAsBUWb6iVYziKPz4OHghbYTZNqNKyamK6389WIGXGGSW/D0M5UM2Yda5fU\nrHUReD+5QRx7dv6/Qg/plpH7+MqypIriaIVpA/8oFaTBq33Y60cK1TBXgWff\nChbi8J0ejX2mCeJaqa3NJspMZqsoMAmITm0CgXs4oJShtoUB27M6ZPz13+1v\n+tXF/gj53xjN/DPjZ++RFA9aUF+slhShxy+p8c/8iItlNpseTlaEH6YKFwp7\niAszPZGlP0zPgufSxLxb16SyfmdrDaTV8jW0kH5pvQJ/SdrfLdt8ZLc1X+eq\nYxq1\r\n=Mzd0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCHkXgSRpDUpCY6qMEnxCjKIEcqFoi8+LhWHZYIRHYzUQIgYqiwbZaXzQMCcxz+NbgYYAgbs5XCRx4jK5uKDQWK+JM="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_5.0.2_1585577146265_0.2597151971887657"},"_hasShrinkwrap":false},"5.0.3":{"name":"idb","version":"5.0.3","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^11.1.0","@types/chai":"^4.2.11","@types/mocha":"^7.0.2","chai":"^4.2.0","conditional-type-checks":"^1.0.5","del":"^5.1.0","filesize":"^6.1.0","glob":"^7.1.6","mocha":"^7.1.2","prettier":"^2.0.5","rollup":"^2.9.1","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^5.3.0","typescript":"^3.8.3"},"gitHead":"74ac5d90d9626bf703ecb71dfeff2907606a7ebd","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@5.0.3","_nodeVersion":"12.16.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-ozfTR2owoslXWtfyQU2/tEUK1SXkCUb7gLq0wpvGWM8EZRwHr1rajEQGVsWT1bgfBiAenj/OXTn7h+PskWAwbA==","shasum":"d69d8845ecfb9e7791edd77696e40e1fd9c3c82b","tarball":"https://registry.npmjs.org/idb/-/idb-5.0.3.tgz","fileCount":52,"unpackedSize":175599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeusKNCRA9TVsSAnZWagAA9ggP/34F4/pGaIn1Dm3nJjFo\nh4b8o1zPq/ihvD6O+awKo9BnDalDeyaWInsSSbwkS+LmBfWF19LDBigMazmg\nYGJXyUKPg1ga5plbIXEnArQprAzfQJoOnHvDyHmb0/rOwafkCK9o3Pv8ehhw\n6lpDelVLpBRk9cE4XRxez+p+MrXj/UQK5IuDRy4tl7RuoM9XaKoiJyuHXtRy\nz/1h+1U6xx7tt/viZKTICJmA0L5CeZyCLp+eu+nkZCoIAD5xcFFd5jyocFPb\nVr2H1iPG/6wy1pWuFWpHOP5zdRKf0HT5FC4E4paoFKOxK8QN3ymYphg7wU7u\neAbpt+1pAC+XNSvmVWTXmC6D68LjpQYyjIdSXaHs5u9LLYkFcDJNsrIJARrX\n2M3KoCLJCsXbBWEQTN7RDs44aGC3jGXg0VZTJtq02QgwYBx30rtmDhI/qE2d\nHbEvySK2C6sLRAknwjWh4QuAkha5y1RcRPP4rpFbf0n/sHcaZCA1KpKpO9nc\nQbqAHU90+Mi3c0YTDWx6SPK46dzObMg8NN7qcCEnV5UTjetopEEgI4pIvTw8\nQwB16ZsCq39e5e+jbrrp3zxx2gxyAY3KlnFRZYXs+Q8rvSfJM9xZv0n7vJUj\nDAjoPQqipxbb1luArtwgrQw+BmGNWARMk9Xnd4zpNSRgSc8m+ktlnnu9qcfz\naKET\r\n=zenI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUYcuENSyzgj9NH/uaNZwUWQrTSNPKCdsS2O2BwM/XKQIgGoHiBH5AQGNd1ep199ptdQKMqAP9QviYh6TQogcEfVM="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_5.0.3_1589297805155_0.7282209797739723"},"_hasShrinkwrap":false},"5.0.4":{"name":"idb","version":"5.0.4","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^12.0.0","@types/chai":"^4.2.11","@types/mocha":"^7.0.2","chai":"^4.2.0","conditional-type-checks":"^1.0.5","del":"^5.1.0","filesize":"^6.1.0","glob":"^7.1.6","mocha":"^7.2.0","prettier":"^2.0.5","rollup":"^2.10.9","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.3"},"gitHead":"1004d77010d1a492110f14763a25a8115256edbf","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@5.0.4","_nodeVersion":"12.16.1","_npmVersion":"6.14.4","dist":{"integrity":"sha512-g+CRa0NLB5R+VTd8UQK/J8eEPlZk82iwekJQOYA0bFJsc7TGDKyBywNmLBUdHPUyyazV1wN8DdHhSKzEX9Z9kQ==","shasum":"9b6d42d5eff3c7f063b6f4d3e7c7e9aaeae2fd7a","tarball":"https://registry.npmjs.org/idb/-/idb-5.0.4.tgz","fileCount":89,"unpackedSize":1314721,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJezO9ZCRA9TVsSAnZWagAA1C0P/AjlkV6pUKgpNQ6Subeh\npPn/GB9sCtrzHzmkfyWSS838KVK0gVRBlsRh26MVPsPsf3+vI3MCh2TCvDD4\nK/1nVu3ZdSPtfQZQmKLRJRiK23zmMZsfJAxOrX0ZFkaehm39lekwa83p9gKd\nKW9RN6rGVXCl5vQK0/RhWRDY2ixSJvoHOpnYJVB4CBnOblkkvBpZw2sQRvJo\n06a9b/ii/qhjhyb0dOqInzKWnbISnWb25yKF6JI/K29jt2KoR7ecW2DNt1fw\nAcQ3LkYJJvDrMYlsVCVVSnmtF4++DxF28HaOE/aPXAo/ciVeuZO4ojVZ4IVD\n10g5z2yqvcKUvVfizY9CM/YNPqKN3y2kLtYNlTxj3mguci7Tu7Is2boYRyzo\nCQoaPOL+h/26iY+0e9mXRa057cyf5w2vhrhHJaE43/B/X7oHnV6d40KelbMR\n6LxeuVEJPks/Nw6r4APeIzVYWWvBSYFWBAf+ztTUGVJMWNjQuATIpXr7CxSm\nTHg2vJP133Vvj5G6Wew7X5LHq2YPs7AJhoJKfue+Nt93OVMkH8IOvQajrH0g\nmvBAu1yhOsJEuGrl0/Mrb47h7scxYA08kr2CqXXBQlhOs5k/C3RnFLm+xzKs\nxtEjCqvjYZ4B5ZCewM9t5OXeLQl7mFaV8Z7wqdqkheR/8/waHUh8J2q7RGx0\nMehK\r\n=OeNl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjrXS+ZWvMJXUWpg+z4Xz0siPze00yYA9rDE0UT9xoeAIhAMV7KofrZ9efOgbt0BOmmZeDoaizOw6j20urj/RM8HvR"}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_5.0.4_1590488920707_0.2679232564364826"},"_hasShrinkwrap":false},"5.0.5":{"name":"idb","version":"5.0.5","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^12.0.0","@types/chai":"^4.2.11","@types/mocha":"^7.0.2","chai":"^4.2.0","conditional-type-checks":"^1.0.5","del":"^5.1.0","filesize":"^6.1.0","glob":"^7.1.6","mocha":"^7.2.0","prettier":"^2.0.5","rollup":"^2.10.9","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.3"},"gitHead":"01e3e72707943483cc879b040ad3ef0282f5956c","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@5.0.5","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-HbU+RcJ0tCg3QQgqmyFRy6k0ApTb2FUfrEiBg5zl5VpFg0GYG6c/0vk4GNNqgq1C88t/YA8PKCJY0wbm8mAcnA==","shasum":"4c49bf868cde7e765c2069afcbdebf159313c907","tarball":"https://registry.npmjs.org/idb/-/idb-5.0.5.tgz","fileCount":89,"unpackedSize":1317755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWNJdCRA9TVsSAnZWagAAtSoQAIYVGfZmI7eVgam7MJVB\ndYyyTsE639UvQVq2naD9/9wS0eruxbQa/hLDhjSDWeS5MUpoU9CmUN2twxLH\nSmkwqRBtdvUSB+y5adCBlJSPLbPsn2tUNMmFoJD8zTKgnwQmbb67XmkvMAGE\nAHVeC9YznfILk6qW8Xx9RYndkTMwN/KnYaltuuM6/q0rb+TAIdCHBXeDK0ma\nO8VBYOweloOy31/ma9My4Jt8th0tEMDVEv9wrrg/S3jX4O0Rxi8iLkXEcq9i\neku84jVnNsJc4Vzhb4tbMtRezyZQl2amwDiN5FK5/GuA5bbE+JgWwFgKsDOS\nfWmvqTAFV1oAstelUiJIeECgkauYeIjQmeA02gCHv7raraLoj4JlXbR+mr3k\nzp7jlgX3JOcc57znmZgNU3r2WHiuQ8K2LX1PPjRDL7QEdG84dvDlLqu92Qbq\nFluxv9QpPv8GqHkanHmoDubwhq4dDgJzccjpPMR5Zd+WWyaGBmy3tSP8WpGO\n7iTznCq14w0WaWC7te+a019NgOJAVhDV6WObAQtPq7zM7iddzK83MiQ/GpYz\nc9kFEm1NZ3NWwEYRGIFskG3vxVchYtR3qnj2h+s++6wsR34rHgytwtAdUe+B\nbjITEf6L5tJyDFHNQC/IOTtFAgzG8l+w0B9q0KXKlEtDx7lJzW8vSU87o/Zk\npEoC\r\n=VMWe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAahotal6nwBGytA+H71p7Sdq6oTDv3/89ijVBm5dxIXAiAK+uDfpKhg/Yk2XZeBbGR7lkNOPlnW9zuci9DJuje+5g=="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_5.0.5_1599656540722_0.06307802542179686"},"_hasShrinkwrap":false},"5.0.6":{"name":"idb","version":"5.0.6","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^12.0.0","@types/chai":"^4.2.11","@types/mocha":"^7.0.2","chai":"^4.2.0","conditional-type-checks":"^1.0.5","del":"^5.1.0","filesize":"^6.1.0","glob":"^7.1.6","mocha":"^7.2.0","prettier":"^2.0.5","rollup":"^2.10.9","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.3"},"gitHead":"60f78d20ba1cce2d9e12f89f17cb42586f76c15d","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@5.0.6","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-/PFvOWPzRcEPmlDt5jEvzVZVs0wyd/EvGvkDIcbBpGuMMLQKrTPG0TxvE2UJtgZtCQCmOtM2QD7yQJBVEjKGOw==","shasum":"8c94624f5a8a026abe3bef3c7166a5febd1cadc1","tarball":"https://registry.npmjs.org/idb/-/idb-5.0.6.tgz","fileCount":52,"unpackedSize":176011,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfX2VcCRA9TVsSAnZWagAAZLMP/ieKCq/m9en8mevI6284\nIo8XqjVi6xtiOiOvYNHZkZHIEAZSZFBJfDOb4S2TwzF2MyWUoShPCbBvquBu\nSGbdO3S2yts1oAacFjm9/cG89BoXZXZPGmzzv3RywUjA3SMFj8vyrWT0smQX\n0XGZ5GgIQxbJPBT1Mn+T7XF/DVaHQqU8BwPuUcmjecf7OyqBps1BL891XCkW\nWLlLqaeB/QXihwh2MydPMUvjH/iDpTbVz3+LFmiH5H6f+UC7GsvTCCZxHZ47\nGCtPbQbtg74K/utEA6KhyTPuuaLlkDZXXUAK1bqVFOmY9QFBro9k0zT2webR\nT2aQ1v0pQIsBDQT9RLZQwgU7KyWBYzejLMucS+uLs92QDOx1KL7bGKi9ukxc\n2brsOksVvGy/4BUlTPNRsTnZ/GAsYqLcKhvWQBK35FbQBBbOGCY2eVOxjpe8\nStrYbMDPsCkBYKljtI9JBeu87AX6eL1rqgYFN/tAgUXINt7zjWRGSPz8emC4\n6Nmeyrd7zUSwEoNaulaVGKfInIUKFvd+GTDEJ16MHoW0FUUcjY7apQsU0/oV\nD8JW87n1s6C4Kzi0tqkQ1ML8/JMArl4+GAJXN8Hz8jNHHLQ3ZEHgjq4UzFN1\npuRCHq3g9dtzTvsADnFITvitreSXRX1PBG+W3IZn7FBs+lEozvZjOaoBdFEk\nOpvk\r\n=FJzl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAiEWBYNx24Xf1ApAAGusW5ZN5R4pDt7TYH1bcgNHdDwIhAI1MgSiDSvKRSgushWqG3O3Phg4um+OrBi1uhdJEGWyM"}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_5.0.6_1600087388003_0.4073260542215267"},"_hasShrinkwrap":false},"5.0.7":{"name":"idb","version":"5.0.7","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^12.0.0","@types/chai":"^4.2.11","@types/mocha":"^7.0.2","chai":"^4.2.0","conditional-type-checks":"^1.0.5","del":"^5.1.0","filesize":"^6.1.0","glob":"^7.1.6","mocha":"^7.2.0","prettier":"^2.0.5","rollup":"^2.10.9","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.3"},"gitHead":"10757a75438bc4c42a967f792c758777caf718bf","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@5.0.7","_nodeVersion":"12.18.3","_npmVersion":"6.14.6","dist":{"integrity":"sha512-tXkkEtzOEolCKNLpxEvE5ctPqUhgTEi+wPWVWIWavl/Z0/NjSJx0o/79z4/etJWpEpVjhbQNZ7fvmp/UFv/Yog==","shasum":"9e57ef612c0d57db9bdd1e44b30a9b16a07b14f9","tarball":"https://registry.npmjs.org/idb/-/idb-5.0.7.tgz","fileCount":52,"unpackedSize":177473,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffyl9CRA9TVsSAnZWagAAUo4P/jbsd5eQTFHXc1Pazn2X\ng+3jKUNZ+3wQz8YzaEDsf9OhwzAUF51JGKN6seDDTxf+j2aGJ+mT4klbp4Dm\nJ7aB2IGWFPe0zS4WWbCSceBQQt98ZTWPuTzRr5K+DxRejZ6d9OV0Viu1TZJ3\ncHjTtj3C0NduNVsy7eqkLvkbnRTBzec1mFQT+u7CzNrp3aFGVZ7Ma3gOqQqx\nF9hLbd9WBLeKlCiDwnut/oS5uzg0s8lToqJwg5U/AIF9EXvDOCJnk8+pdcUj\ndzU5Mbf0lH4Nr3l6j3k9ygFBtHnD5VMDHBGR9HFizaDq7rtgXRHV0WGKZlGR\nHKnLyWlH8Jt8OCTcyNK2jeUlSEpcj+nuBYUg5ddSrCGo2WgP2X+0AYTP4G3Q\nH7FBvEoEkcL8mc3E3UduNl6DJVgD6VVGFMyDpFtAz4BukThP7GJmStV5+fHf\nhnoIpnvDnhcZeG0k3kh+LPxYYi7Udem7ADnM3P4L6unMBxiOzphlHmzivE+B\n6Yr7TVVAjRz47gZUclfcFZi/WHPLpPq2LAMyhYTDTD0yYap5nQdLS9/fQWUT\n56uZoOelyChq4vVV/WuvlT+RArlVvLBuiJ/JKJ8B8NsQuzPUCzV64BjnlbCz\n4k1a09cIfnyHiA5MEPyS6hUHfEmJ53zydAz9ohmiqoKmBOjlP7pqhG4pDguR\n/HRb\r\n=vF5H\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCdz7pqOqgFsIH+Kh+lh1X4KLzrle+WH7OvcGJCRf2cPgIgDr9BSVe/gSAVyh9vSJbnDCoOG/u/oV8RLC/deznpP7k="}]},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_5.0.7_1602169213237_0.8094401873804515"},"_hasShrinkwrap":false},"5.0.8":{"name":"idb","version":"5.0.8","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^12.0.0","@types/chai":"^4.2.11","@types/mocha":"^7.0.2","chai":"^4.2.0","conditional-type-checks":"^1.0.5","del":"^5.1.0","filesize":"^6.1.0","glob":"^7.1.6","mocha":"^7.2.0","prettier":"^2.0.5","rollup":"^2.10.9","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^6.1.0","typescript":"^3.9.3"},"gitHead":"daffc0024455b0296490d6b459646480031f27fd","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@5.0.8","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"integrity":"sha512-K9xInRkVbT3ZsYimD2KVj6B4E93IBvOjEQTryu99WuuN7G+7x3SzA79+yubbX0QRN9V64Gi+L+ulG5QYTVydOg==","shasum":"5f2b72a69267960d222a5f104053625f203fdbb2","tarball":"https://registry.npmjs.org/idb/-/idb-5.0.8.tgz","fileCount":52,"unpackedSize":177654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfxhigCRA9TVsSAnZWagAAPI8P/21vPFx82n70rzric7Cv\naOslQprjk+9aSUxTjS9itL3JQRuAaKLwT84Vpzr3dry0SaOJZzjd8NtrFGEv\nSf3DowI1oCyhVE0YWHaw/+Y+X3risYh2FmRN7fSuXk197aGNQqtTxFB0ce2n\nczVfQj1KnRqlGvJHbN270KQGnZ/MESmoFOyn60owLWFhCwU85cXc0jEP+mce\ntXWczTMgHLAGTLzLRNNXC3kLCzz09wYNYo3OE8LTzigSb4zDrakjJRyreWPh\nv6Vq314E0UPpEa8sJedYSXWUHOz1T1kGPTx6wIMzUPhvWeQoxcHLjf6SbfUa\nDTXXRdKedKcyoeZf5BmHKfejcnhbcK3PO2AacqOC6yWcg/n3H5p2iUwtZ6Qy\nMT/I+Q4cO/ma5RYLQL/XA4nGDPswVYHbwaPlioUv9jvKSyyEd39rWBtf/TNZ\nhe8AbUdPTerttGDI6au12ByeiJA2ZeRcBlBvHRvtzuU7n4xb2Z8p5p63QqDq\ne5Zo2dYRiDIPFkEYl7anfNK8OJJtrWA5xuYyvR1eEvmke1v1EFS7deSaozjb\nI0S5+5KzhIANcltkCx9b1IhjN93pts1bLQ4wIJ7UHaKD0nSl4yi4tDLnUCGL\nSItiBDDZe+z/ikeAA6+rVhe2SEL3keo3AWNE3ZAAk9Dglzglf1n4j69m/Vuy\nUsFg\r\n=RD30\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCYFyhoEOE6a+AW89Vtj88Y3KDUA3k+zXi2bC8DIKlqQQIhAOOlft+rsbXjSONYAsi1r89NBAzuIJV1uKNyQueEWg75"}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_5.0.8_1606817952021_0.27613971034890916"},"_hasShrinkwrap":false},"6.0.0":{"name":"idb","version":"6.0.0","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^17.0.0","@types/chai":"^4.2.14","@types/mocha":"^8.2.0","chai":"^4.2.0","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^6.1.0","glob":"^7.1.6","mocha":"^8.2.1","prettier":"^2.2.1","rollup":"^2.36.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.1.3"},"gitHead":"84fa1829553057353e0079c3fd526cb8d282f494","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@6.0.0","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","dist":{"integrity":"sha512-+M367poGtpzAylX4pwcrZIa7cFQLfNkAOlMMLN2kw/2jGfJP6h+TB/unQNSVYwNtP8XqkLYrfuiVnxLQNP1tjA==","shasum":"00d6092b948138cf9bebc9dcddc4df8bf60bf0ac","tarball":"https://registry.npmjs.org/idb/-/idb-6.0.0.tgz","fileCount":52,"unpackedSize":184180,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf9eAVCRA9TVsSAnZWagAAsKYP/Ayr12s5bIHfkw8JngSm\nxoF7sRitviieUfSNApRs8qwuANhkdhdmYDqnzBapJvhSb0ctJfk4TxP5WKuO\nuUrtw+gBL677TQ+EW7z4ic16NS3kWsYEKCE6uEaPej2Mo0Z65sEfhM3NstNe\n0/Pc71sHE6oQJicsq6ypBRyVlj3nyemEO/P73utkDKk+0bmQDeC+1UikoP51\nhytSv9yal7Ld32vBdgp3EjrHhSQSYttiMVgIFDoF522wKAen+hIvH6BeXart\nEnRVFbWaVEVnSD9TQfKB7HH9UeWN5HjWnqVJM2EBQ0CYjYa+nZd9Mi8s8Wz2\n1kq3wGmVExD18VyFB3G9KT32kJcJ0mCg2O8n50mszVRXC3LJ6HCP/PGPRKqQ\nwnXCMg5bubWz+r/xI9TFu94nuDm4RNHRBAQQICnleOGH71eW/2zhPqfZxvPc\njIEDPwB8n4fa6Tam1WhkevrjuYYXSmYLl6U4XL8ahAsadlBtwwVRCkPO8QJD\nX+OWuCZJlXCSeye3p+VH0yvSGxZN8h7L6RlMt4DT1MA8+5PkDDHyYvbUCZum\n92G26chpdEKBVJwquhp/kD6hvrdFoT6wOO1Q6VqCqG6SKGNtu5g7FLo6VJEE\nrveut0sFW/5OBlwQ/aP4twrD41aRJfq18w6501ILRiNEWIFpHMMvDPJnZlpU\nqKoN\r\n=QEkQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFqyz9qVkN/db+SevZ2hviKmnLxwBJwExgSUr7xEtRWuAiEA4/pUl0GIN7chP+3/s3/gPcavVHYYqCezPgmDyE/0Rl0="}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_6.0.0_1609949204740_0.3190555099776846"},"_hasShrinkwrap":false},"6.1.0":{"name":"idb","version":"6.1.0","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^19.0.0","@types/chai":"^4.2.18","@types/mocha":"^8.2.2","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^6.3.0","glob":"^7.1.7","mocha":"^8.4.0","prettier":"^2.3.0","rollup":"^2.48.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"gitHead":"b79e17d79712e30680855857952c8c998b9a3d40","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@6.1.0","_nodeVersion":"15.8.0","_npmVersion":"7.5.1","dist":{"integrity":"sha512-Pd/Jv+iFtWGSWAJyRXhNarwto+D/MTuGgLH2KKet0PJLVtqayIOY+cKT1boQO85RWbMh2FMNwym0hg81Tu86lQ==","shasum":"a7f41c61e8054ccd8f2b0f584f2eb345be08e6bd","tarball":"https://registry.npmjs.org/idb/-/idb-6.1.0.tgz","fileCount":52,"unpackedSize":184252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgo4aNCRA9TVsSAnZWagAAedMP/2VtvcrYwTXzVoN6QkhY\nhgxxEcLn2ihQd5r4VfdvsXzpB/9auEmqOnJA8HWuC6hC1GrHrkju/4hIhtKW\nQxah7WMxtgrIMFRIVPd0zCcROP/jSf+yLvhmuDUTQpXDZZ7z4dLhLzlam2Jp\nS8YMHwJe2PAcfleWi7vxOr1B0VJI+tqf4BNDECJtY0WO8Yz0r5w6WjJ4rQFH\nxTFqLwozphbHVWsaxtvkcdG2CVPN/Gcv9PP+gWVZuf8j5ugjpwzcfISX0/sK\nAeFwAmIko41//OW3d24F2YnS2nDFkKyGZJNOP0678JBfVxXz3O7Y8BCcEZmn\nu5491jwZfTgg6VtC9HvD6F7ifLZT+AU70PRgA8Fa+8L32IaVficaRsshOwo6\nT18EmycVUqriUd91NVyaPG6ucbZbXg77gJ9Tm5BSil0J6s8m75WudreYPTqX\nU5IsNIqQrbG8JgwAmdAK7qNG1dL94BylMoF3DJFC6EJdNRNX5megDWnyYNPW\n43iaCREBOavakfnLJersz/XrdErFqoNs2elR/0CIMKch1P299Wp9kyQj010N\nhnLRzVmgr5KlDvcqgOIhfMXwNre5+GH3QX02d1mW22lNrViqiQjIY5/FPOQX\n8MOv28ccBnysNIKwk0el2kWVmFOWJic7f0Ub4lfCs2TN5KWAZgCTPg06jzIM\nmMdq\r\n=6V+V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAtEf4hIoxsSoR/x+U5OFX1kSlf9qccoOrqwEHE+Ox0PAiB/VFlScjOJFD2xriFoPHqozQKr0ii7/8cj2rGkVfhR3A=="}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_6.1.0_1621329549174_0.4444986638536641"},"_hasShrinkwrap":false},"6.1.0-with-src":{"name":"idb","version":"6.1.0-with-src","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^19.0.0","@types/chai":"^4.2.18","@types/mocha":"^8.2.2","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^6.3.0","glob":"^7.1.7","mocha":"^8.4.0","prettier":"^2.3.0","rollup":"^2.48.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"gitHead":"9b7fc7b8a1d033af2ba7c29c7ff47efdcd95f2ce","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@6.1.0-with-src","_nodeVersion":"15.8.0","_npmVersion":"7.5.1","dist":{"integrity":"sha512-hc8oxYpr5pxenn7T453bANlBjy/QeKdJKD8o4DvD9wBugRnv5ZoXLMLaTnTDHwxvMyRG8EbPVvCiDmhTbkKqvQ==","shasum":"78652cc526b672aac3e4edd8b045944aa2768b02","tarball":"https://registry.npmjs.org/idb/-/idb-6.1.0-with-src.tgz","fileCount":59,"unpackedSize":230742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq2+WCRA9TVsSAnZWagAAoHsQAIro2XHhj6OenQl4sfSa\ny04d5eRS62vtdrBCAr0j9M4GsZNi1Zzn1+7LDzsoGWVeS2nxXJlggu0woMiU\nxCqxC9+Pnfd4Hxd8Sj51/wvaSDexR1NB17wiIui+SeK3vfa2XikSCSbDZFcO\nzkvW8ugCiY1zZcxQ4QR3BCpoWK0IvpAXbK8hDZ5G2rJW4g2D5YeX8AmUR6Cn\nSRsQb3LgTC/N7NtsB9KriJyEMhm1oLZmmVZfuAcokh1+7UfuhFd0lIRhaSoA\nKbmDcODLS/ezJmeLnQCult4bTXd5ht6RGHRwYLyXe1KZvOEFOjjK3mlGDPU6\nCx2NmVV55aSATY94RWAqWijpvyrE+5kXmvPAv/VrgsKnRfIphSqINqszP5ro\nPYo09DauEepPmCcl2hp1knTDBNiYYvL5CpIObIRx3m98yZeXxn+DmFlZwnQm\nfDIcut4+ibKKLOECf7MkFsjmGpUjo58dj8xB9eeVb93Y51xz7bKY1gVMF0uV\n8IAbKRm6CH678yraxEYLosp6mTqk6Z/3gO26NCBzz16zPN+Hhiy3S+vLjAn/\ncfDL4a3H7y5f1gIQ5AebZxQWM4Id0HmWWILizw7VdnTHA+4Ax4sozZu3GOjs\nxPwtqqZbZBSLqMcm3AZigKtKaGFuZhI/0ZI2GRlFydjM9ikvyhYdDo9LcMTG\nraxW\r\n=JP9m\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCRlsJGLSrRHLuVPL5mN1dV5Vh5XC0hTpY45CYSf/M05gIhAMjpj1VVvLTV+2IA6kC4iQsU9f89ZxFcjWj1tthfeUjO"}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_6.1.0-with-src_1621847958266_0.48292360356685937"},"_hasShrinkwrap":false},"6.1.1":{"name":"idb","version":"6.1.1","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^19.0.0","@types/chai":"^4.2.18","@types/mocha":"^8.2.2","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^6.3.0","glob":"^7.1.7","mocha":"^8.4.0","prettier":"^2.3.0","rollup":"^2.48.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"gitHead":"c20191298f4d98d3f80b3ed9fadecab0cf9fc678","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@6.1.1","_nodeVersion":"15.8.0","_npmVersion":"7.5.1","dist":{"integrity":"sha512-5AnQiuTwELdLlriQ+UTVEzT3J7cC/4NSF0S0H5WC35FcOME4dbPHnfsbzkdfJWaFadiXvATHIV06bK/yilmjqQ==","shasum":"1766e8ce6ff04eae5d78508a9733f51c57d016ef","tarball":"https://registry.npmjs.org/idb/-/idb-6.1.1.tgz","fileCount":52,"unpackedSize":184252,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq3IyCRA9TVsSAnZWagAARqwP/057dP1F+pzvGjV0rFZa\nrwRBrzofDKFCWu0ptHnO6P2h50W5J9xOs0xSwqqcla/3e4Yz7XzL7NT+lFIs\ngp1VWUHxQTdKSW3e9p8LsXpayNyTAxNG+a/17KsESaXb0bXwSmqS/0rcl4QP\nNeIAhw2iss7yYK8z81Odk0pCdA1fX0WXTjsg5w51uIAQ6d7RzMWSreUWhos9\nl99DdL576KJ3l1qcHgJfM8Ia+6PSZ79NJNlKc0nhBJRb5gnRb040uoGF8Bww\n+x/rYyyILN0tI5ofvuteTopzS3ODsRe3fLF6Kr7n8kXAQcDrC6I7w9H6emXh\n87f1sPkZO4zZxpSFXFOdBELrWFkkYywTZeaOHD7TeijjiHjyKjCOs78mWEak\nt2EFp0Ui53Vp9QDfITW8scjqLdqQe03vshRP8KZzrLNMpM3xBtVBnMBagB6P\nAkYxG6vABPFm/GbwxmzeTnWoMulcAp75LAaUiQk0bKwMWrMLNfirRaT0oUc7\nRPT3nUBRjpZ0ZbpYJLipTjNWIYrTLdw8fG9sGCS48onixrxQ+vIwm8nVHLMW\nYB8pWTTTmpfskW8RHFmWCcD+9gx2vViJNz+SBERrkEufR/aAxvPkWvodVmPX\nUwOL3K7plN3osVFe8KKGqN0LIzCXi149xPayj/f1bQR+/rgRPKBkWhXBtqih\nMYiK\r\n=hMvD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDIxWd5qdgRy/4MEcr7MY8sngjEeAMpOiCBgwSXeBWpRwIhAP2w0a2oCmpehJAEQ5UGDPVYZfQ5F4kWnQp5EFQKS8ss"}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_6.1.1_1621848626471_0.461588796394107"},"_hasShrinkwrap":false},"6.1.1-with-src":{"name":"idb","version":"6.1.1-with-src","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^19.0.0","@types/chai":"^4.2.18","@types/mocha":"^8.2.2","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^6.3.0","glob":"^7.1.7","mocha":"^8.4.0","prettier":"^2.3.0","rollup":"^2.48.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"readme":"# IndexedDB with usability.\n\nThis is a tiny (~1.09k brotli'd) library that mostly mirrors the IndexedDB API, but with small improvements that make a big difference to usability.\n\n1. [Installation](#installation)\n1. [Changes](#changes)\n1. [Browser support](#browser-support)\n1. [API](#api)\n 1. [`openDB`](#opendb)\n 1. [`deleteDB`](#deletedb)\n 1. [`unwrap`](#unwrap)\n 1. [`wrap`](#wrap)\n 1. [General enhancements](#general-enhancements)\n 1. [`IDBDatabase` enhancements](#idbdatabase-enhancements)\n 1. [`IDBTransaction` enhancements](#idbtransaction-enhancements)\n 1. [`IDBCursor` enhancements](#idbcursor-enhancements)\n 1. [Async iterators](#async-iterators)\n1. [Examples](#examples)\n1. [TypeScript](#typescript)\n\n# Installation\n\n## Using npm\n\n```sh\nnpm install idb\n```\n\nThen, assuming you're using a module-compatible system (like webpack, Rollup etc):\n\n```js\nimport { openDB, deleteDB, wrap, unwrap } from 'idb';\n\nasync function doDatabaseStuff() {\n const db = await openDB(…);\n}\n```\n\n## Directly in a browser\n\n### Using the modules method directly via unpkg:\n\n```html\n\n```\n\n### Using external script reference\n\n```html\n\n\n```\n\nA global, `idb`, will be created, containing all exports of the module version.\n\n# Changes\n\n[See details of (potentially) breaking changes](changes.md).\n\n# Browser support\n\nThis library targets modern browsers, as in Chrome, Firefox, Safari, and other browsers that use those engines, such as Edge. IE is not supported.\n\nIf you want to target much older versions of those browsers, you can transpile the library using something like [Babel](https://babeljs.io/). You can't transpile the library for IE, as it relies on a proper implementation of [JavaScript proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy).\n\n# API\n\n## `openDB`\n\nThis method opens a database, and returns a promise for an enhanced [`IDBDatabase`](https://w3c.github.io/IndexedDB/#database-interface).\n\n```js\nconst db = await openDB(name, version, {\n upgrade(db, oldVersion, newVersion, transaction) {\n // …\n },\n blocked() {\n // …\n },\n blocking() {\n // …\n },\n terminated() {\n // …\n },\n});\n```\n\n- `name`: Name of the database.\n- `version` (optional): Schema version, or `undefined` to open the current version.\n- `upgrade` (optional): Called if this version of the database has never been opened before. Use it to specify the schema for the database. This is similar to the [`upgradeneeded` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest/upgradeneeded_event) in plain IndexedDB.\n - `db`: An enhanced `IDBDatabase`.\n - `oldVersion`: Last version of the database opened by the user.\n - `newVersion`: Whatever new version you provided.\n - `transaction`: An enhanced transaction for this upgrade. This is useful if you need to get data from other stores as part of a migration.\n- `blocked` (optional): Called if there are older versions of the database open on the origin, so this version cannot open. This is similar to the [`blocked` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest/blocked_event) in plain IndexedDB.\n- `blocking` (optional): Called if this connection is blocking a future version of the database from opening. This is similar to the [`versionchange` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/versionchange_event) in plain IndexedDB.\n- `terminated` (optional): Called if the browser abnormally terminates the connection, but not on regular closures like calling `db.close()`. This is similar to the [`close` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/close_event) in plain IndexedDB.\n\n## `deleteDB`\n\nDeletes a database.\n\n```js\nawait deleteDB(name, {\n blocked() {\n // …\n },\n});\n```\n\n- `name`: Name of the database.\n- `blocked` (optional): Called if the database already exists and there are open connections that don’t close in response to a versionchange event, the request will be blocked until they all close.\n\n## `unwrap`\n\nTakes an enhanced IndexedDB object and returns the plain unmodified one.\n\n```js\nconst unwrapped = unwrap(wrapped);\n```\n\nThis is useful if, for some reason, you want to drop back into plain IndexedDB. Promises will also be converted back into `IDBRequest` objects.\n\n## `wrap`\n\nTakes an IDB object and returns a version enhanced by this library.\n\n```js\nconst wrapped = wrap(unwrapped);\n```\n\nThis is useful if some third party code gives you an `IDBDatabase` object and you want it to have the features of this library.\n\nThis doesn't work with `IDBCursor`, [due to missing primitives](https://github.com/w3c/IndexedDB/issues/255). Also, if you wrap an `IDBTransaction`, `tx.store` and `tx.objectStoreNames` won't work in Edge. To avoid these issues, wrap the `IDBDatabase` object, and use the wrapped object to create a new transaction.\n\n## General enhancements\n\nOnce you've opened the database the API is the same as IndexedDB, except for a few changes to make things easier.\n\nFirstly, any method that usually returns an `IDBRequest` object will now return a promise for the result.\n\n```js\nconst store = db.transaction(storeName).objectStore(storeName);\nconst value = await store.get(key);\n```\n\n### Promises & throwing\n\nThe library turns all `IDBRequest` objects into promises, but it doesn't know in advance which methods may return promises.\n\nAs a result, methods such as `store.put` may throw instead of returning a promise.\n\nIf you're using async functions, there's no observable difference.\n\n### Transaction lifetime\n\nTL;DR: **Do not `await` other things between the start and end of your transaction**, otherwise the transaction will close before you're done.\n\nAn IDB transaction auto-closes if it doesn't have anything left do once microtasks have been processed. As a result, this works fine:\n\n```js\nconst tx = db.transaction('keyval', 'readwrite');\nconst store = tx.objectStore('keyval');\nconst val = (await store.get('counter')) || 0;\nawait store.put(val + 1, 'counter');\nawait tx.done;\n```\n\nBut this doesn't:\n\n```js\nconst tx = db.transaction('keyval', 'readwrite');\nconst store = tx.objectStore('keyval');\nconst val = (await store.get('counter')) || 0;\n// This is where things go wrong:\nconst newVal = await fetch('/increment?val=' + val);\n// And this throws an error:\nawait store.put(newVal, 'counter');\nawait tx.done;\n```\n\nIn this case, the transaction closes while the browser is fetching, so `store.put` fails.\n\n## `IDBDatabase` enhancements\n\n### Shortcuts to get/set from an object store\n\nIt's common to create a transaction for a single action, so helper methods are included for this:\n\n```js\n// Get a value from a store:\nconst value = await db.get(storeName, key);\n// Set a value in a store:\nawait db.put(storeName, value, key);\n```\n\nThe shortcuts are: `get`, `getKey`, `getAll`, `getAllKeys`, `count`, `put`, `add`, `delete`, and `clear`. Each method takes a `storeName` argument, the name of the object store, and the rest of the arguments are the same as the equivalent `IDBObjectStore` method.\n\nThese methods depend on the same methods on `IDBObjectStore`, therefore `getKey`, `getAll`, and `getAllKeys` are missing in Edge.\n\n### Shortcuts to get from an index\n\nThe shortcuts are: `getFromIndex`, `getKeyFromIndex`, `getAllFromIndex`, `getAllKeysFromIndex`, and `countFromIndex`.\n\n```js\n// Get a value from an index:\nconst value = await db.getFromIndex(storeName, indexName, key);\n```\n\nEach method takes `storeName` and `indexName` arguments, followed by the rest of the arguments from the equivalent `IDBIndex` method. Again, these methods depend on the equivalent methods on `IDBIndex`, so Edge does not support `getKeyFromIndex`, `getAllFromIndex`, or `getAllKeysFromIndex`.\n\n## `IDBTransaction` enhancements\n\n### `tx.store`\n\nIf a transaction involves a single store, the `store` property will reference that store.\n\n```js\nconst tx = db.transaction('whatever');\nconst store = tx.store;\n```\n\nIf a transaction involves multiple stores, `tx.store` is undefined, you need to use `tx.objectStore(storeName)` to get the stores.\n\n### `tx.done`\n\nTransactions have a `.done` promise which resolves when the transaction completes successfully, and otherwise rejects with the [transaction error](https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction/error).\n\n```js\nconst tx = db.transaction(storeName, 'readwrite');\nawait Promise.all([\n tx.store.put('bar', 'foo'),\n tx.store.put('world', 'hello'),\n tx.done,\n]);\n```\n\nIf you're writing to the database, `tx.done` is the signal that everything was successfully committed to the database. However, it's still beneficial to await the individual operations, as you'll see the error that caused the transaction to fail.\n\n## `IDBCursor` enhancements\n\nCursor advance methods (`advance`, `continue`, `continuePrimaryKey`) return a promise for the cursor, or null if there are no further values to provide.\n\n```js\nlet cursor = await db.transaction(storeName).store.openCursor();\n\nwhile (cursor) {\n console.log(cursor.key, cursor.value);\n cursor = await cursor.continue();\n}\n```\n\n## Async iterators\n\nAsync iterator support isn't included by default (Edge doesn't support them). To include them, import `idb/with-async-ittr.js` instead of `idb` (this increases the library size to ~1.3k brotli'd):\n\n```js\nimport { openDB } from 'idb/with-async-ittr.js';\n```\n\nOr `https://unpkg.com/idb/build/iife/with-async-ittr-min.js` if you're using the non-module version.\n\nNow you can iterate over stores, indexes, and cursors:\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n // …\n}\n```\n\nEach yielded object is an `IDBCursor`. You can optionally use the advance methods to skip items (within an async iterator they return void):\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n console.log(cursor.value);\n // Skip the next item\n cursor.advance(2);\n}\n```\n\nIf you don't manually advance the cursor, `cursor.continue()` is called for you.\n\nStores and indexes also have an `iterate` method which has the same signature as `openCursor`, but returns an async iterator:\n\n```js\nconst index = db.transaction('books').store.index('author');\n\nfor await (const cursor of index.iterate('Douglas Adams')) {\n console.log(cursor.value);\n}\n```\n\n# Examples\n\n## Keyval store\n\nThis is very similar to `localStorage`, but async. If this is _all_ you need, you may be interested in [idb-keyval](https://www.npmjs.com/package/idb-keyval). You can always upgrade to this library later.\n\n```js\nimport { openDB } from 'idb';\n\nconst dbPromise = openDB('keyval-store', 1, {\n upgrade(db) {\n db.createObjectStore('keyval');\n },\n});\n\nexport async function get(key) {\n return (await dbPromise).get('keyval', key);\n},\nexport async function set(key, val) {\n return (await dbPromise).put('keyval', val, key);\n},\nexport async function del(key) {\n return (await dbPromise).delete('keyval', key);\n},\nexport async function clear() {\n return (await dbPromise).clear('keyval');\n},\nexport async function keys() {\n return (await dbPromise).getAllKeys('keyval');\n},\n```\n\n## Article store\n\n```js\nimport { openDB } from 'idb/with-async-ittr.js';\n\nasync function demo() {\n const db = await openDB('Articles', 1, {\n upgrade(db) {\n // Create a store of objects\n const store = db.createObjectStore('articles', {\n // The 'id' property of the object will be the key.\n keyPath: 'id',\n // If it isn't explicitly set, create a value by auto incrementing.\n autoIncrement: true,\n });\n // Create an index on the 'date' property of the objects.\n store.createIndex('date', 'date');\n },\n });\n\n // Add an article:\n await db.add('articles', {\n title: 'Article 1',\n date: new Date('2019-01-01'),\n body: '…',\n });\n\n // Add multiple articles in one transaction:\n {\n const tx = db.transaction('articles', 'readwrite');\n await Promise.all([\n tx.store.add({\n title: 'Article 2',\n date: new Date('2019-01-01'),\n body: '…',\n }),\n tx.store.add({\n title: 'Article 3',\n date: new Date('2019-01-02'),\n body: '…',\n }),\n tx.done,\n ]);\n }\n\n // Get all the articles in date order:\n console.log(await db.getAllFromIndex('articles', 'date'));\n\n // Add 'And, happy new year!' to all articles on 2019-01-01:\n {\n const tx = db.transaction('articles', 'readwrite');\n const index = tx.store.index('date');\n\n for await (const cursor of index.iterate(new Date('2019-01-01'))) {\n const article = { ...cursor.value };\n article.body += ' And, happy new year!';\n cursor.update(article);\n }\n\n await tx.done;\n }\n}\n```\n\n# TypeScript\n\nThis library is fully typed, and you can improve things by providing types for your database:\n\n```ts\nimport { openDB, DBSchema } from 'idb';\n\ninterface MyDB extends DBSchema {\n 'favourite-number': {\n key: string;\n value: number;\n };\n products: {\n value: {\n name: string;\n price: number;\n productCode: string;\n };\n key: string;\n indexes: { 'by-price': number };\n };\n}\n\nasync function demo() {\n const db = await openDB('my-db', 1, {\n upgrade(db) {\n db.createObjectStore('favourite-number');\n\n const productStore = db.createObjectStore('products', {\n keyPath: 'productCode',\n });\n productStore.createIndex('by-price', 'price');\n },\n });\n\n // This works\n await db.put('favourite-number', 7, 'Jen');\n // This fails at compile time, as the 'favourite-number' store expects a number.\n await db.put('favourite-number', 'Twelve', 'Jake');\n}\n```\n\nTo define types for your database, extend `DBSchema` with an interface where the keys are the names of your object stores.\n\nFor each value, provide an object where `value` is the type of values within the store, and `key` is the type of keys within the store.\n\nOptionally, `indexes` can contain a map of index names, to the type of key within that index.\n\nProvide this interface when calling `openDB`, and from then on your database will be strongly typed. This also allows your IDE to autocomplete the names of stores and indexes.\n\n## Opting out of types\n\nIf you call `openDB` without providing types, your database will use basic types. However, sometimes you'll need to interact with stores that aren't in your schema, perhaps during upgrades. In that case you can cast.\n\nLet's say we were renaming the 'favourite-number' store to 'fave-nums':\n\n```ts\nimport { openDB, DBSchema, IDBPDatabase } from 'idb';\n\ninterface MyDBV1 extends DBSchema {\n 'favourite-number': { key: string; value: number };\n}\n\ninterface MyDBV2 extends DBSchema {\n 'fave-num': { key: string; value: number };\n}\n\nconst db = await openDB('my-db', 2, {\n async upgrade(db, oldVersion) {\n // Cast a reference of the database to the old schema.\n const v1Db = db as unknown as IDBPDatabase;\n\n if (oldVersion < 1) {\n v1Db.createObjectStore('favourite-number');\n }\n if (oldVersion < 2) {\n const store = v1Db.createObjectStore('favourite-number');\n store.name = 'fave-num';\n }\n },\n});\n```\n\nYou can also cast to a typeless database by omitting the type, eg `db as IDBPDatabase`.\n\nNote: Types like `IDBPDatabase` are used by TypeScript only. The implementation uses proxies under the hood.\n\n# Building and testing\n\n```sh\nnpm run build\n```\n\nThis will also perform type testing.\n\nTo test, navigate to `build/test/` in a browser. You'll need to set up a [basic web server](https://www.npmjs.com/package/http-server) for this.\n","readmeFilename":"README.md","gitHead":"d9645601ff70ee8abd2b41a47ccc02aebef5ac5c","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@6.1.1-with-src","_nodeVersion":"15.8.0","_npmVersion":"7.5.1","dist":{"integrity":"sha512-kKV6VsBqqdHTc+nYq2SkJm87uKST+3dyGMt/9vOcnFCzGFv35ahEMR0Lp3xqI6y4gJVy8j1aGJCTcfh476irUA==","shasum":"798f27c734e1ace70f401c6e8c7fbe3da18030e3","tarball":"https://registry.npmjs.org/idb/-/idb-6.1.1-with-src.tgz","fileCount":59,"unpackedSize":230742,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgq3PwCRA9TVsSAnZWagAAqO0P/i9CUvYIAIuQFiZwibx7\nhICi9qcEmctU48J4tPedvqptwFtsLE0ctF1aO5bOr/stKiat5Q0sopyT5F2t\n+KFy4Akex2ZQiZ0BJ0zoj9lkoTldnkyGK48C6vktVwt4/kefleGC1wfNbr5b\nXQDPyl2ZG3uTSAREyNKaE90iLioTGRnXEhOf+SAXtwys6dyoXjcxx0OBwKWh\nsgRIqtDe8KrfViqX/hhf4HSmdz3xPBPJbZyxMiJw2fcaRGkh9b+MFZHEQ19g\nAhblNheUIrU1dzxjoy3JDaTn0AtfOAZ2XSpR30d51mwv/cLyhLnhxxw/im73\nRX5PCb7haItqEtPULTR+3nXNnVUEcmZ4WxHq1iWJiZHF9yJJg3iBNuecH/eR\nZSQQlSWXk8J0DwDmvTJPsnRVVsncV3S5I4bDfb1DCmEFA8I1X0wZylsdbQUh\nK5ZjHpaGVmOgEeVCce60dbr0FH6zcpmyQvjqkImiouHYU2F893eV5+goPpEb\n908e+afa66IiY+Eqx7n+beoUvIz/SjU9VapkKrIOqmwEfFSzN+ZUrS3AiSqH\nPmyeV/8qWkpiobQ2V+XWLvOH4OT3SBkd6w1IMMRivCULWsjVZ0ZGVW6pG8iE\n5gOprSIXbXBfUIxOs/C/vvXF63q6T6kC3JUyM0rGFts5pEDGivKaTX5kmhsU\ntTgv\r\n=vbMi\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBMGEnt/iJ2iGmSxDzeXbEAST5tZLWhfnu1zY6Z0iH8EAiEAmACV3u1C2OmTiwTvfQ/dDKvDaBO2zGcvcLahNsVmUzk="}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_6.1.1-with-src_1621849072040_0.755376960591309"},"_hasShrinkwrap":false},"6.1.2":{"name":"idb","version":"6.1.2","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^19.0.0","@types/chai":"^4.2.18","@types/mocha":"^8.2.2","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^6.3.0","glob":"^7.1.7","mocha":"^8.4.0","prettier":"^2.3.0","rollup":"^2.48.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"gitHead":"303fa24af0faba002b2bed7060193f946b02e6dc","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@6.1.2","_nodeVersion":"15.8.0","_npmVersion":"7.5.1","dist":{"integrity":"sha512-1DNDVu3yDhAZkFDlJf0t7r+GLZ248F5pTAtA7V0oVG3yjmV125qZOx3g0XpAEkGZVYQiFDAsSOnGet2bhugc3w==","shasum":"82ef5c951b8e1f47875d36ccafa4bedafc62f2f1","tarball":"https://registry.npmjs.org/idb/-/idb-6.1.2.tgz","fileCount":52,"unpackedSize":184327,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgr2hJCRA9TVsSAnZWagAAl5MP/AvCOpKdlT4qi8vrGZWN\nPFmba1nTn8zcHYba2469dqqX0zBhVcVP7q6YvMMgRj71OYVIOLlAwU5uC71N\nNb35MkocE2gtdILBRZMI4w65iYfxE+EuDEYg/JTbF41eTKSLCe6xu4BE7tqK\no1+/lJHEXZdHMKhfNZ2WCJumYuzXbOcgc5yYZhlUIUi8MPrhb1vbye3G16Wg\n6H8WtWfTMPJy64vbTRYcDAmL87ftk9Z3xPVnbhN6JteL7uTtsGM+zEoPAZxM\n1FVinkpY8vwyDhZ/kkuljQ8W0GaZFCmrZUttGalMGOCrNiwff87xt+zvHJjD\nANJLvIPVhKiCVZixZ+DHvPytlod86EbJ7/Wf7qLgHZ577YSpqiqbxQ77sKZf\n8gd+KikQeDL1eU1Hlj8+hpllbdknE9Hbflb8yL7E6zlY8v02SfrPHgBepEgx\nwFl9Vc02kTEGH68dHeWsI9rfsf+qJLg+432WmaJbemFX5zw/0K1ZlZns1ihP\nz2vVvioMvYyPt3JoE/Ae/B5un5vCF7CoQdSGgW5fineXl1ynv85vmI6Qqe+o\nb/Y8WYm6soMoM2fIZpujJG2tlv8y72Xjc8GpO1Lrl/G1Ejz+PTjvlNxK+UHG\nArKvHTrhs3qoIFhRoswwA5ndwsuj6+3u+mssjCAvsLxdCkuzp8VQz/kJj42R\neuIx\r\n=bCCz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDVWEKXM7XlPzuqyn96JttjVQjC3YbrY4A4HoHsw1hH2wIhAJg11ePiQU0rxkl8fJHyqF+Y7uWhzAVpY132azIAE78x"}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_6.1.2_1622108233261_0.8189951095143226"},"_hasShrinkwrap":false},"6.1.3":{"name":"idb","version":"6.1.3","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^19.0.0","@types/chai":"^4.2.18","@types/mocha":"^8.2.2","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^6.3.0","glob":"^7.1.7","mocha":"^8.4.0","prettier":"^2.3.0","rollup":"^2.48.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"gitHead":"abce3c7c2fe4b3cfe4e1eb77f41ffaf0c79fd073","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@6.1.3","_nodeVersion":"16.5.0","_npmVersion":"7.19.1","dist":{"integrity":"sha512-oIRDpVcs5KXpI1hRnTJUwkY63RB/7iqu9nSNuzXN8TLHjs7oO20IoPFbBTsqxIL5IjzIUDi+FXlVcK4zm26J8A==","shasum":"e6cd3b9c38f5c696a82a4b435754f3873c5a7891","tarball":"https://registry.npmjs.org/idb/-/idb-6.1.3.tgz","fileCount":51,"unpackedSize":182275,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLgsACRA9TVsSAnZWagAA+RsP/3ozR3+GyJdHrx/SYhyY\n7PoNZCv3hAVN3JEgq8eofgSGfLk3fIlxl/FtLtX2KKTf6tLTw/U4tnypqv+j\nHWax4S9F/XkM6afFX1mQF6T6KbTPUsFRhPgfjNhDX6Pf8cV4fEJx7z3EFUpQ\naWwLSdHxQY9CBw737tsI45ZvC054Pq9obgskE4avEJhdG+O3jEVzlaHaXTse\nJDIO8Gv2ywQpfBNYXsoLcDqDWvha1svN5iXaZgndGzH6BNeHiwOX7qbcagvC\nmQTWYf7cDM9VXFsZXLyYA+WfzAbAh3ebpMgi2Nqef0WKh+IUNaQM3NceYcEp\ncK+TmlXP4+OBSq3aEc6EgZfIlRNLiTRG/X5nXoxK97IFPmrwWGEsFS0ZEdO1\n2Hn8NxDWt4g+4u9qCfs5HvgmiHPSTTOG4PTePTDJkpwspqrEi5+j/rLi39cN\nvHquH/n9F2d2Q+BjYhFqUA9XYIIDl8rRla2zx7oQpxiKF1TEync1M3XUNWc6\nEX4NMP/9ogdTALzzctMZ+55dkwT7yvx2GcefXHxx+0p82OgGZ/eji89wTKa5\nJIgOaXUs3VGxouDZ9pllLOtnwGPOz1aryxx3ENL7hpzortVqFWOb4d6CjPa6\nrRt5m0wAPyJUOwlvgZ3B00CqpKzZ4I3d3vvKR1X0beQ3zthDJjw6G37JmMwf\n0xc2\r\n=c8ty\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDFi3fLw5pj1mlt3QWhUuTPNx63hfni9OV9SCtcpJ5ysAiBMl941lItW17ll2VqIADRG/dML54jzuxs5CO9vi3w4Cw=="}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_6.1.3_1630407424219_0.38673775209336614"},"_hasShrinkwrap":false},"6.1.4":{"name":"idb","version":"6.1.4","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^19.0.0","@types/chai":"^4.2.18","@types/mocha":"^8.2.2","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^6.3.0","glob":"^7.1.7","mocha":"^8.4.0","prettier":"^2.3.0","rollup":"^2.48.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"gitHead":"8ee0403f61f3d3a4b3a3c503c7fdfda970efaf0b","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@6.1.4","_nodeVersion":"16.5.0","_npmVersion":"7.19.1","dist":{"integrity":"sha512-DshI5yxIB3NYc47cPpfipYX8MSIgQPqVR+WoaGI9EDq6cnLGgGYR1fp6z8/Bq9vMS8Jq1bS3eWUgXpFO5+ypSA==","shasum":"ec77519fe2591be616eaf3bbdedc3662bb558a99","tarball":"https://registry.npmjs.org/idb/-/idb-6.1.4.tgz","fileCount":51,"unpackedSize":182395,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICBz5MuUEjpK7xGJ9ZFEawPlYbyvi+mLvZWTnolboa6lAiEA7njbcp90MZeunKmxFFNHr8TLhuOvvMA54sF6AyN/Lqc="}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_6.1.4_1632128193667_0.38692833996883236"},"_hasShrinkwrap":false},"6.1.5":{"name":"idb","version":"6.1.5","description":"A small wrapper that makes IndexedDB usable","main":"build/cjs/index.js","module":"build/esm/index.js","typings":"build/esm/index.d.ts","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^19.0.0","@types/chai":"^4.2.18","@types/mocha":"^8.2.2","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^6.3.0","glob":"^7.1.7","mocha":"^8.4.0","prettier":"^2.3.0","rollup":"^2.48.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"gitHead":"8b9b95157bd6210d85c0b34c8031f4003c1b049a","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@6.1.5","_nodeVersion":"16.5.0","_npmVersion":"7.19.1","dist":{"integrity":"sha512-IJtugpKkiVXQn5Y+LteyBCNk1N8xpGV3wWZk9EVtZWH8DYkjBn0bX1XnGP9RkyZF0sAcywa6unHqSWKe7q4LGw==","shasum":"dbc53e7adf1ac7c59f9b2bf56e00b4ea4fce8c7b","tarball":"https://registry.npmjs.org/idb/-/idb-6.1.5.tgz","fileCount":51,"unpackedSize":182455,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHDAH8bVthYy/7NSf9yOcU8K4xEZ61Gf1EC4yz3gAskGAiASPYIp2GWtVCcko7+ZFnoE+bxGwiihUEbtKJiPpK+5uA=="}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_6.1.5_1634548876080_0.7617755604111431"},"_hasShrinkwrap":false},"7.0.0-beta":{"name":"idb","version":"7.0.0-beta","description":"A small wrapper that makes IndexedDB usable","main":"build/index.cjs","module":"build/index.js","types":"build/index.d.ts","exports":{".":{"module":"./build/index.js","import":"./build/index.js","default":"./build/index.cjs"},"./with-async-ittr":{"module":"./with-async-ittr.js","import":"./with-async-ittr.js","default":"./with-async-ittr.cjs"},"./build/*":"./build/*","./package.json":"./package.json"},"type":"module","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch","prepack":"npm run build"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^21.0.1","@types/chai":"^4.2.22","@types/mocha":"^9.0.0","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^8.0.6","glob":"^7.2.0","mocha":"^9.1.3","prettier":"^2.4.1","rollup":"^2.59.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"readme":"# IndexedDB with usability.\n\nThis is a tiny (~1.05k brotli'd) library that mostly mirrors the IndexedDB API, but with small improvements that make a big difference to usability.\n\n1. [Installation](#installation)\n1. [Changes](#changes)\n1. [Browser support](#browser-support)\n1. [API](#api)\n 1. [`openDB`](#opendb)\n 1. [`deleteDB`](#deletedb)\n 1. [`unwrap`](#unwrap)\n 1. [`wrap`](#wrap)\n 1. [General enhancements](#general-enhancements)\n 1. [`IDBDatabase` enhancements](#idbdatabase-enhancements)\n 1. [`IDBTransaction` enhancements](#idbtransaction-enhancements)\n 1. [`IDBCursor` enhancements](#idbcursor-enhancements)\n 1. [Async iterators](#async-iterators)\n1. [Examples](#examples)\n1. [TypeScript](#typescript)\n\n# Installation\n\n## Using npm\n\n```sh\nnpm install idb\n```\n\nThen, assuming you're using a module-compatible system (like webpack, Rollup etc):\n\n```js\nimport { openDB, deleteDB, wrap, unwrap } from 'idb';\n\nasync function doDatabaseStuff() {\n const db = await openDB(…);\n}\n```\n\n## Directly in a browser\n\n### Using the modules method directly via jsdelivr:\n\n```html\n\n```\n\n### Using external script reference\n\n```html\n\n\n```\n\nA global, `idb`, will be created, containing all exports of the module version.\n\n# Changes\n\n[See details of (potentially) breaking changes](CHANGELOG.md).\n\n# Browser support\n\nThis library targets modern browsers, as in Chrome, Firefox, Safari, and other browsers that use those engines, such as Edge. IE is not supported.\n\nIf you want to target much older versions of those browsers, you can transpile the library using something like [Babel](https://babeljs.io/). You can't transpile the library for IE, as it relies on a proper implementation of [JavaScript proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy).\n\n# API\n\n## `openDB`\n\nThis method opens a database, and returns a promise for an enhanced [`IDBDatabase`](https://w3c.github.io/IndexedDB/#database-interface).\n\n```js\nconst db = await openDB(name, version, {\n upgrade(db, oldVersion, newVersion, transaction) {\n // …\n },\n blocked() {\n // …\n },\n blocking() {\n // …\n },\n terminated() {\n // …\n },\n});\n```\n\n- `name`: Name of the database.\n- `version` (optional): Schema version, or `undefined` to open the current version.\n- `upgrade` (optional): Called if this version of the database has never been opened before. Use it to specify the schema for the database. This is similar to the [`upgradeneeded` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest/upgradeneeded_event) in plain IndexedDB.\n - `db`: An enhanced `IDBDatabase`.\n - `oldVersion`: Last version of the database opened by the user.\n - `newVersion`: Whatever new version you provided.\n - `transaction`: An enhanced transaction for this upgrade. This is useful if you need to get data from other stores as part of a migration.\n- `blocked` (optional): Called if there are older versions of the database open on the origin, so this version cannot open. This is similar to the [`blocked` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest/blocked_event) in plain IndexedDB.\n- `blocking` (optional): Called if this connection is blocking a future version of the database from opening. This is similar to the [`versionchange` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/versionchange_event) in plain IndexedDB.\n- `terminated` (optional): Called if the browser abnormally terminates the connection, but not on regular closures like calling `db.close()`. This is similar to the [`close` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/close_event) in plain IndexedDB.\n\n## `deleteDB`\n\nDeletes a database.\n\n```js\nawait deleteDB(name, {\n blocked() {\n // …\n },\n});\n```\n\n- `name`: Name of the database.\n- `blocked` (optional): Called if the database already exists and there are open connections that don’t close in response to a versionchange event, the request will be blocked until they all close.\n\n## `unwrap`\n\nTakes an enhanced IndexedDB object and returns the plain unmodified one.\n\n```js\nconst unwrapped = unwrap(wrapped);\n```\n\nThis is useful if, for some reason, you want to drop back into plain IndexedDB. Promises will also be converted back into `IDBRequest` objects.\n\n## `wrap`\n\nTakes an IDB object and returns a version enhanced by this library.\n\n```js\nconst wrapped = wrap(unwrapped);\n```\n\nThis is useful if some third party code gives you an `IDBDatabase` object and you want it to have the features of this library.\n\nThis doesn't work with `IDBCursor`, [due to missing primitives](https://github.com/w3c/IndexedDB/issues/255). Also, if you wrap an `IDBTransaction`, `tx.store` and `tx.objectStoreNames` won't work in Edge. To avoid these issues, wrap the `IDBDatabase` object, and use the wrapped object to create a new transaction.\n\n## General enhancements\n\nOnce you've opened the database the API is the same as IndexedDB, except for a few changes to make things easier.\n\nFirstly, any method that usually returns an `IDBRequest` object will now return a promise for the result.\n\n```js\nconst store = db.transaction(storeName).objectStore(storeName);\nconst value = await store.get(key);\n```\n\n### Promises & throwing\n\nThe library turns all `IDBRequest` objects into promises, but it doesn't know in advance which methods may return promises.\n\nAs a result, methods such as `store.put` may throw instead of returning a promise.\n\nIf you're using async functions, there's no observable difference.\n\n### Transaction lifetime\n\nTL;DR: **Do not `await` other things between the start and end of your transaction**, otherwise the transaction will close before you're done.\n\nAn IDB transaction auto-closes if it doesn't have anything left do once microtasks have been processed. As a result, this works fine:\n\n```js\nconst tx = db.transaction('keyval', 'readwrite');\nconst store = tx.objectStore('keyval');\nconst val = (await store.get('counter')) || 0;\nawait store.put(val + 1, 'counter');\nawait tx.done;\n```\n\nBut this doesn't:\n\n```js\nconst tx = db.transaction('keyval', 'readwrite');\nconst store = tx.objectStore('keyval');\nconst val = (await store.get('counter')) || 0;\n// This is where things go wrong:\nconst newVal = await fetch('/increment?val=' + val);\n// And this throws an error:\nawait store.put(newVal, 'counter');\nawait tx.done;\n```\n\nIn this case, the transaction closes while the browser is fetching, so `store.put` fails.\n\n## `IDBDatabase` enhancements\n\n### Shortcuts to get/set from an object store\n\nIt's common to create a transaction for a single action, so helper methods are included for this:\n\n```js\n// Get a value from a store:\nconst value = await db.get(storeName, key);\n// Set a value in a store:\nawait db.put(storeName, value, key);\n```\n\nThe shortcuts are: `get`, `getKey`, `getAll`, `getAllKeys`, `count`, `put`, `add`, `delete`, and `clear`. Each method takes a `storeName` argument, the name of the object store, and the rest of the arguments are the same as the equivalent `IDBObjectStore` method.\n\n### Shortcuts to get from an index\n\nThe shortcuts are: `getFromIndex`, `getKeyFromIndex`, `getAllFromIndex`, `getAllKeysFromIndex`, and `countFromIndex`.\n\n```js\n// Get a value from an index:\nconst value = await db.getFromIndex(storeName, indexName, key);\n```\n\nEach method takes `storeName` and `indexName` arguments, followed by the rest of the arguments from the equivalent `IDBIndex` method.\n\n## `IDBTransaction` enhancements\n\n### `tx.store`\n\nIf a transaction involves a single store, the `store` property will reference that store.\n\n```js\nconst tx = db.transaction('whatever');\nconst store = tx.store;\n```\n\nIf a transaction involves multiple stores, `tx.store` is undefined, you need to use `tx.objectStore(storeName)` to get the stores.\n\n### `tx.done`\n\nTransactions have a `.done` promise which resolves when the transaction completes successfully, and otherwise rejects with the [transaction error](https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction/error).\n\n```js\nconst tx = db.transaction(storeName, 'readwrite');\nawait Promise.all([\n tx.store.put('bar', 'foo'),\n tx.store.put('world', 'hello'),\n tx.done,\n]);\n```\n\nIf you're writing to the database, `tx.done` is the signal that everything was successfully committed to the database. However, it's still beneficial to await the individual operations, as you'll see the error that caused the transaction to fail.\n\n## `IDBCursor` enhancements\n\nCursor advance methods (`advance`, `continue`, `continuePrimaryKey`) return a promise for the cursor, or null if there are no further values to provide.\n\n```js\nlet cursor = await db.transaction(storeName).store.openCursor();\n\nwhile (cursor) {\n console.log(cursor.key, cursor.value);\n cursor = await cursor.continue();\n}\n```\n\n## Async iterators\n\nAsync iterator support isn't included by default (Edge doesn't support them). To include them, import `idb/with-async-ittr` instead of `idb` (this increases the library size to ~1.28k brotli'd):\n\n```js\nimport { openDB } from 'idb/with-async-ittr';\n```\n\nOr `https://cdn.jsdelivr.net/npm/idb@7/build/umd-with-async-ittr.js` if you're using the non-module version.\n\nNow you can iterate over stores, indexes, and cursors:\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n // …\n}\n```\n\nEach yielded object is an `IDBCursor`. You can optionally use the advance methods to skip items (within an async iterator they return void):\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n console.log(cursor.value);\n // Skip the next item\n cursor.advance(2);\n}\n```\n\nIf you don't manually advance the cursor, `cursor.continue()` is called for you.\n\nStores and indexes also have an `iterate` method which has the same signature as `openCursor`, but returns an async iterator:\n\n```js\nconst index = db.transaction('books').store.index('author');\n\nfor await (const cursor of index.iterate('Douglas Adams')) {\n console.log(cursor.value);\n}\n```\n\n# Examples\n\n## Keyval store\n\nThis is very similar to `localStorage`, but async. If this is _all_ you need, you may be interested in [idb-keyval](https://www.npmjs.com/package/idb-keyval). You can always upgrade to this library later.\n\n```js\nimport { openDB } from 'idb';\n\nconst dbPromise = openDB('keyval-store', 1, {\n upgrade(db) {\n db.createObjectStore('keyval');\n },\n});\n\nexport async function get(key) {\n return (await dbPromise).get('keyval', key);\n},\nexport async function set(key, val) {\n return (await dbPromise).put('keyval', val, key);\n},\nexport async function del(key) {\n return (await dbPromise).delete('keyval', key);\n},\nexport async function clear() {\n return (await dbPromise).clear('keyval');\n},\nexport async function keys() {\n return (await dbPromise).getAllKeys('keyval');\n},\n```\n\n## Article store\n\n```js\nimport { openDB } from 'idb/with-async-ittr.js';\n\nasync function demo() {\n const db = await openDB('Articles', 1, {\n upgrade(db) {\n // Create a store of objects\n const store = db.createObjectStore('articles', {\n // The 'id' property of the object will be the key.\n keyPath: 'id',\n // If it isn't explicitly set, create a value by auto incrementing.\n autoIncrement: true,\n });\n // Create an index on the 'date' property of the objects.\n store.createIndex('date', 'date');\n },\n });\n\n // Add an article:\n await db.add('articles', {\n title: 'Article 1',\n date: new Date('2019-01-01'),\n body: '…',\n });\n\n // Add multiple articles in one transaction:\n {\n const tx = db.transaction('articles', 'readwrite');\n await Promise.all([\n tx.store.add({\n title: 'Article 2',\n date: new Date('2019-01-01'),\n body: '…',\n }),\n tx.store.add({\n title: 'Article 3',\n date: new Date('2019-01-02'),\n body: '…',\n }),\n tx.done,\n ]);\n }\n\n // Get all the articles in date order:\n console.log(await db.getAllFromIndex('articles', 'date'));\n\n // Add 'And, happy new year!' to all articles on 2019-01-01:\n {\n const tx = db.transaction('articles', 'readwrite');\n const index = tx.store.index('date');\n\n for await (const cursor of index.iterate(new Date('2019-01-01'))) {\n const article = { ...cursor.value };\n article.body += ' And, happy new year!';\n cursor.update(article);\n }\n\n await tx.done;\n }\n}\n```\n\n# TypeScript\n\nThis library is fully typed, and you can improve things by providing types for your database:\n\n```ts\nimport { openDB, DBSchema } from 'idb';\n\ninterface MyDB extends DBSchema {\n 'favourite-number': {\n key: string;\n value: number;\n };\n products: {\n value: {\n name: string;\n price: number;\n productCode: string;\n };\n key: string;\n indexes: { 'by-price': number };\n };\n}\n\nasync function demo() {\n const db = await openDB('my-db', 1, {\n upgrade(db) {\n db.createObjectStore('favourite-number');\n\n const productStore = db.createObjectStore('products', {\n keyPath: 'productCode',\n });\n productStore.createIndex('by-price', 'price');\n },\n });\n\n // This works\n await db.put('favourite-number', 7, 'Jen');\n // This fails at compile time, as the 'favourite-number' store expects a number.\n await db.put('favourite-number', 'Twelve', 'Jake');\n}\n```\n\nTo define types for your database, extend `DBSchema` with an interface where the keys are the names of your object stores.\n\nFor each value, provide an object where `value` is the type of values within the store, and `key` is the type of keys within the store.\n\nOptionally, `indexes` can contain a map of index names, to the type of key within that index.\n\nProvide this interface when calling `openDB`, and from then on your database will be strongly typed. This also allows your IDE to autocomplete the names of stores and indexes.\n\n## Opting out of types\n\nIf you call `openDB` without providing types, your database will use basic types. However, sometimes you'll need to interact with stores that aren't in your schema, perhaps during upgrades. In that case you can cast.\n\nLet's say we were renaming the 'favourite-number' store to 'fave-nums':\n\n```ts\nimport { openDB, DBSchema, IDBPDatabase } from 'idb';\n\ninterface MyDBV1 extends DBSchema {\n 'favourite-number': { key: string; value: number };\n}\n\ninterface MyDBV2 extends DBSchema {\n 'fave-num': { key: string; value: number };\n}\n\nconst db = await openDB('my-db', 2, {\n async upgrade(db, oldVersion) {\n // Cast a reference of the database to the old schema.\n const v1Db = db as unknown as IDBPDatabase;\n\n if (oldVersion < 1) {\n v1Db.createObjectStore('favourite-number');\n }\n if (oldVersion < 2) {\n const store = v1Db.createObjectStore('favourite-number');\n store.name = 'fave-num';\n }\n },\n});\n```\n\nYou can also cast to a typeless database by omitting the type, eg `db as IDBPDatabase`.\n\nNote: Types like `IDBPDatabase` are used by TypeScript only. The implementation uses proxies under the hood.\n\n# Developing\n\n```sh\nnpm run dev\n```\n\nThis will also perform type testing.\n\nTo test, navigate to `build/test/` in a browser. You'll need to set up a [basic web server](https://www.npmjs.com/package/serve) for this.\n","readmeFilename":"README.md","gitHead":"284275680239aa31e30fd07bf035f8625fb900c3","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@7.0.0-beta","_nodeVersion":"16.5.0","_npmVersion":"7.19.1","dist":{"integrity":"sha512-fWG6AkDHNmnKiEFd+WnO12VMcA2HDIeHtwwzJLbNVTdEz/VDm7UZRLPgq5z95ucEo/1tTC4haRWBkKE76kKI0Q==","shasum":"43499828f1dd5f2e256a279e59d5d38e2907e1a4","tarball":"https://registry.npmjs.org/idb/-/idb-7.0.0-beta.tgz","fileCount":21,"unpackedSize":87528,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD00WdL2ehZfDtcu5uB1oJcNIeOPqJZ1NbZj9xFKUti3QIhANK+n4QXpyum0Akzu/ucO2gg7H2LB8TlKmWaYecRzGvw"}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_7.0.0-beta_1635860049197_0.8679234181847935"},"_hasShrinkwrap":false},"7.0.0":{"name":"idb","version":"7.0.0","description":"A small wrapper that makes IndexedDB usable","main":"./build/index.cjs","module":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"module":"./build/index.js","import":"./build/index.js","default":"./build/index.cjs"},"./with-async-ittr":{"module":"./with-async-ittr.js","import":"./with-async-ittr.js","default":"./with-async-ittr.cjs"},"./build/*":"./build/*","./package.json":"./package.json"},"type":"module","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch","prepack":"npm run build"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^21.0.1","@types/chai":"^4.2.22","@types/mocha":"^9.0.0","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^8.0.6","glob":"^7.2.0","mocha":"^9.1.3","prettier":"^2.4.1","rollup":"^2.59.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"gitHead":"352ea243a38e2f74b4995552ff118ff4b00d5dc7","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@7.0.0","_nodeVersion":"16.5.0","_npmVersion":"7.19.1","dist":{"integrity":"sha512-jSx0WOY9Nj+QzP6wX5e7g64jqh8ExtDs/IAuOrOEZCD/h6+0HqyrKsDMfdJc0hqhSvh0LsrwqrkDn+EtjjzSRA==","shasum":"f349b418c128f625961147a7d6b0e4b526fd34ed","tarball":"https://registry.npmjs.org/idb/-/idb-7.0.0.tgz","fileCount":21,"unpackedSize":87529,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhm62lCRA9TVsSAnZWagAABokP/A/n9RWbH1hmWJEIJWVK\nAJOuyUGQOqWXFTs6JOm4RRbQEQjxfincf8OSgwQWweg66YYCgygFNR6nPk9j\nqod2/jv9U8i8hwdxcev+GVYWWgsRBWyFnqMj8mbDoepAdtruMQDn7sa1zQYi\nrsTsmM4UaUCwDDXIx4wuEyMY8tFrmzW39NDTzZbbT6eYblYFNxjA3y59uErf\ndH59DTYcDeEcOrHbVlWXGRiw83y+k19X+rxtsBpkSO/kmN09Ai81tXu3oNFZ\neqqNB52gglGxgeusY/2wqLcm3NJRNgHzQyUkg1R5uuM5X1C4wxdKqb6sarZa\n+IhaXi2v+yYRNzJw7Mf07iqMS9vvJykf1IMUJteEllY8WoQbdbC21P6lGR8O\n743s7PkIakTn2bpIFLdRLAcaQjyNqQqm3zgAKu7FJSWKK98+RKASVArXrvOh\nQ5XF7/oj0guBpsn7t9EIdtVJCFpY5zsHZWIXoJd/eT6uBxg2ruPcVHGhotvK\nCcQwTVMtL008QrnC8VuTle4M9wNzEkAJnqPlhQ3a+X3LCLHIOUX90uN5EgUU\n0cjy9gbSHQ/jf4k8+nSXm3GLlm/EEh4Qz7ftDim9bptUA30wt0Z5oEr73y2m\ndRyx4hWSDsbE4eNN18s5kifRWoP3bV+SNqQV1wWGVwz0lGKqVq9UApdVX5y+\nkh5d\r\n=AxyI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDNEWqcbc+nzpL2fVmk1NZvWUD+d6nWP0zzqq2b3ohIYQIgPGSt/YMLC7doQwfc12lTAi8iegpxOAjwq/BN/VISXL8="}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_7.0.0_1637592485297_0.6021490175879374"},"_hasShrinkwrap":false},"7.0.1":{"name":"idb","version":"7.0.1","description":"A small wrapper that makes IndexedDB usable","main":"./build/index.cjs","module":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"module":"./build/index.js","import":"./build/index.js","default":"./build/index.cjs"},"./with-async-ittr":{"module":"./with-async-ittr.js","import":"./with-async-ittr.js","default":"./with-async-ittr.cjs"},"./build/*":"./build/*","./package.json":"./package.json"},"type":"module","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch","prepack":"npm run build"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^21.0.1","@types/chai":"^4.2.22","@types/mocha":"^9.0.0","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^8.0.6","glob":"^7.2.0","mocha":"^9.1.3","prettier":"^2.4.1","rollup":"^2.59.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"gitHead":"231942c8a6b425e799e22885afb88751df4432ca","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@7.0.1","_nodeVersion":"17.6.0","_npmVersion":"8.5.1","dist":{"integrity":"sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg==","shasum":"d2875b3a2f205d854ee307f6d196f246fea590a7","tarball":"https://registry.npmjs.org/idb/-/idb-7.0.1.tgz","fileCount":21,"unpackedSize":87523,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiL1FrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpoyRAApHgHemN4j18zFsPDcbLtp2LqMz4yS6bK940YfzMpw3e06+kO\r\n6Ja/ewTP+SZd1JT/4cp7l8n2VmATA0RkFQpzx/d2VCQScxxTZWTZl0soDwVw\r\n16c94fc7nEiZG+KyVN5uyPUkC7rVPtYINIU4vjn6bu/yYzPkPq39LQSL+Mgu\r\nYMfuW7I0kbB5xnr291VjmBmHhmYYTh2RuWHJghk+cUN1fPmsZXEOb23oHgS8\r\nJ/SHbGkyFKhYZ3tAA4UsjI4U8IPfmCV4YzqZVoNdvuuM4hDweE+6Obfj5DLC\r\n8mawOHtLwZml0xvlc/VSJs6HNLnTXW7gTgquDu6L9Z9lXt9cxXsVuH6T6lI/\r\nc1dIyAHaCbYemIaKqIp9VBeaHP4NXKtPxU3hkb7KfASrPYn6a/muj79V7TPj\r\njhFthDvcFEP/nCwfHDf71iZdnZsY9x0Yvgah480taPse3+zqPOIjEbg/xzru\r\nXxBwQUX19eHxA0h4mqF+dLtQ5j/c1RoNOlirspsBeNaeC4EOqphb5nyLED7k\r\n35wI2oTt1K5veDATJrKzwuQjzzDRWcodC4qU87/gklC79H8szizI8M4yVCvq\r\nvHTXE0k63c7FjPTxCi3v4flVDeDM58Th89F6B1Pvi97hO9EcgAeaxlol2SJc\r\nZa/JClET4BoBYnNE2HywlRoh/i4bmnVWu+0=\r\n=HYQs\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDxZEp4TbIa1jYyCmk6lbjlIwnooFm68IVbct5DdRAfCgIgNP3QFBkJn2GCtIOOdvPSg1qSJek2QYJYlGUrwRdgEMg="}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_7.0.1_1647268203745_0.5744900331349123"},"_hasShrinkwrap":false},"7.0.1-with-src":{"name":"idb","version":"7.0.1-with-src","description":"A small wrapper that makes IndexedDB usable","main":"./build/index.cjs","module":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"module":"./build/index.js","import":"./build/index.js","default":"./build/index.cjs"},"./with-async-ittr":{"module":"./with-async-ittr.js","import":"./with-async-ittr.js","default":"./with-async-ittr.cjs"},"./build/*":"./build/*","./package.json":"./package.json"},"type":"module","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch","prepack":"npm run build"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^21.0.1","@types/chai":"^4.2.22","@types/mocha":"^9.0.0","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^8.0.6","glob":"^7.2.0","mocha":"^9.1.3","prettier":"^2.4.1","rollup":"^2.59.0","rollup-plugin-node-resolve":"^5.2.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.3.1-rc"},"readme":"# IndexedDB with usability.\n\nThis is a tiny (~1.05k brotli'd) library that mostly mirrors the IndexedDB API, but with small improvements that make a big difference to usability.\n\n1. [Installation](#installation)\n1. [Changes](#changes)\n1. [Browser support](#browser-support)\n1. [API](#api)\n 1. [`openDB`](#opendb)\n 1. [`deleteDB`](#deletedb)\n 1. [`unwrap`](#unwrap)\n 1. [`wrap`](#wrap)\n 1. [General enhancements](#general-enhancements)\n 1. [`IDBDatabase` enhancements](#idbdatabase-enhancements)\n 1. [`IDBTransaction` enhancements](#idbtransaction-enhancements)\n 1. [`IDBCursor` enhancements](#idbcursor-enhancements)\n 1. [Async iterators](#async-iterators)\n1. [Examples](#examples)\n1. [TypeScript](#typescript)\n\n# Installation\n\n## Using npm\n\n```sh\nnpm install idb\n```\n\nThen, assuming you're using a module-compatible system (like webpack, Rollup etc):\n\n```js\nimport { openDB, deleteDB, wrap, unwrap } from 'idb';\n\nasync function doDatabaseStuff() {\n const db = await openDB(…);\n}\n```\n\n## Directly in a browser\n\n### Using the modules method directly via jsdelivr:\n\n```html\n\n```\n\n### Using external script reference\n\n```html\n\n\n```\n\nA global, `idb`, will be created, containing all exports of the module version.\n\n# Changes\n\n[See details of (potentially) breaking changes](CHANGELOG.md).\n\n# Browser support\n\nThis library targets modern browsers, as in Chrome, Firefox, Safari, and other browsers that use those engines, such as Edge. IE is not supported.\n\nIf you want to target much older versions of those browsers, you can transpile the library using something like [Babel](https://babeljs.io/). You can't transpile the library for IE, as it relies on a proper implementation of [JavaScript proxies](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy).\n\n# API\n\n## `openDB`\n\nThis method opens a database, and returns a promise for an enhanced [`IDBDatabase`](https://w3c.github.io/IndexedDB/#database-interface).\n\n```js\nconst db = await openDB(name, version, {\n upgrade(db, oldVersion, newVersion, transaction) {\n // …\n },\n blocked() {\n // …\n },\n blocking() {\n // …\n },\n terminated() {\n // …\n },\n});\n```\n\n- `name`: Name of the database.\n- `version` (optional): Schema version, or `undefined` to open the current version.\n- `upgrade` (optional): Called if this version of the database has never been opened before. Use it to specify the schema for the database. This is similar to the [`upgradeneeded` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest/upgradeneeded_event) in plain IndexedDB.\n - `db`: An enhanced `IDBDatabase`.\n - `oldVersion`: Last version of the database opened by the user.\n - `newVersion`: Whatever new version you provided.\n - `transaction`: An enhanced transaction for this upgrade. This is useful if you need to get data from other stores as part of a migration.\n- `blocked` (optional): Called if there are older versions of the database open on the origin, so this version cannot open. This is similar to the [`blocked` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest/blocked_event) in plain IndexedDB.\n- `blocking` (optional): Called if this connection is blocking a future version of the database from opening. This is similar to the [`versionchange` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/versionchange_event) in plain IndexedDB.\n- `terminated` (optional): Called if the browser abnormally terminates the connection, but not on regular closures like calling `db.close()`. This is similar to the [`close` event](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase/close_event) in plain IndexedDB.\n\n## `deleteDB`\n\nDeletes a database.\n\n```js\nawait deleteDB(name, {\n blocked() {\n // …\n },\n});\n```\n\n- `name`: Name of the database.\n- `blocked` (optional): Called if the database already exists and there are open connections that don’t close in response to a versionchange event, the request will be blocked until they all close.\n\n## `unwrap`\n\nTakes an enhanced IndexedDB object and returns the plain unmodified one.\n\n```js\nconst unwrapped = unwrap(wrapped);\n```\n\nThis is useful if, for some reason, you want to drop back into plain IndexedDB. Promises will also be converted back into `IDBRequest` objects.\n\n## `wrap`\n\nTakes an IDB object and returns a version enhanced by this library.\n\n```js\nconst wrapped = wrap(unwrapped);\n```\n\nThis is useful if some third party code gives you an `IDBDatabase` object and you want it to have the features of this library.\n\nThis doesn't work with `IDBCursor`, [due to missing primitives](https://github.com/w3c/IndexedDB/issues/255). Also, if you wrap an `IDBTransaction`, `tx.store` and `tx.objectStoreNames` won't work in Edge. To avoid these issues, wrap the `IDBDatabase` object, and use the wrapped object to create a new transaction.\n\n## General enhancements\n\nOnce you've opened the database the API is the same as IndexedDB, except for a few changes to make things easier.\n\nFirstly, any method that usually returns an `IDBRequest` object will now return a promise for the result.\n\n```js\nconst store = db.transaction(storeName).objectStore(storeName);\nconst value = await store.get(key);\n```\n\n### Promises & throwing\n\nThe library turns all `IDBRequest` objects into promises, but it doesn't know in advance which methods may return promises.\n\nAs a result, methods such as `store.put` may throw instead of returning a promise.\n\nIf you're using async functions, there's no observable difference.\n\n### Transaction lifetime\n\nTL;DR: **Do not `await` other things between the start and end of your transaction**, otherwise the transaction will close before you're done.\n\nAn IDB transaction auto-closes if it doesn't have anything left do once microtasks have been processed. As a result, this works fine:\n\n```js\nconst tx = db.transaction('keyval', 'readwrite');\nconst store = tx.objectStore('keyval');\nconst val = (await store.get('counter')) || 0;\nawait store.put(val + 1, 'counter');\nawait tx.done;\n```\n\nBut this doesn't:\n\n```js\nconst tx = db.transaction('keyval', 'readwrite');\nconst store = tx.objectStore('keyval');\nconst val = (await store.get('counter')) || 0;\n// This is where things go wrong:\nconst newVal = await fetch('/increment?val=' + val);\n// And this throws an error:\nawait store.put(newVal, 'counter');\nawait tx.done;\n```\n\nIn this case, the transaction closes while the browser is fetching, so `store.put` fails.\n\n## `IDBDatabase` enhancements\n\n### Shortcuts to get/set from an object store\n\nIt's common to create a transaction for a single action, so helper methods are included for this:\n\n```js\n// Get a value from a store:\nconst value = await db.get(storeName, key);\n// Set a value in a store:\nawait db.put(storeName, value, key);\n```\n\nThe shortcuts are: `get`, `getKey`, `getAll`, `getAllKeys`, `count`, `put`, `add`, `delete`, and `clear`. Each method takes a `storeName` argument, the name of the object store, and the rest of the arguments are the same as the equivalent `IDBObjectStore` method.\n\n### Shortcuts to get from an index\n\nThe shortcuts are: `getFromIndex`, `getKeyFromIndex`, `getAllFromIndex`, `getAllKeysFromIndex`, and `countFromIndex`.\n\n```js\n// Get a value from an index:\nconst value = await db.getFromIndex(storeName, indexName, key);\n```\n\nEach method takes `storeName` and `indexName` arguments, followed by the rest of the arguments from the equivalent `IDBIndex` method.\n\n## `IDBTransaction` enhancements\n\n### `tx.store`\n\nIf a transaction involves a single store, the `store` property will reference that store.\n\n```js\nconst tx = db.transaction('whatever');\nconst store = tx.store;\n```\n\nIf a transaction involves multiple stores, `tx.store` is undefined, you need to use `tx.objectStore(storeName)` to get the stores.\n\n### `tx.done`\n\nTransactions have a `.done` promise which resolves when the transaction completes successfully, and otherwise rejects with the [transaction error](https://developer.mozilla.org/en-US/docs/Web/API/IDBTransaction/error).\n\n```js\nconst tx = db.transaction(storeName, 'readwrite');\nawait Promise.all([\n tx.store.put('bar', 'foo'),\n tx.store.put('world', 'hello'),\n tx.done,\n]);\n```\n\nIf you're writing to the database, `tx.done` is the signal that everything was successfully committed to the database. However, it's still beneficial to await the individual operations, as you'll see the error that caused the transaction to fail.\n\n## `IDBCursor` enhancements\n\nCursor advance methods (`advance`, `continue`, `continuePrimaryKey`) return a promise for the cursor, or null if there are no further values to provide.\n\n```js\nlet cursor = await db.transaction(storeName).store.openCursor();\n\nwhile (cursor) {\n console.log(cursor.key, cursor.value);\n cursor = await cursor.continue();\n}\n```\n\n## Async iterators\n\nAsync iterator support isn't included by default (Edge doesn't support them). To include them, import `idb/with-async-ittr` instead of `idb` (this increases the library size to ~1.28k brotli'd):\n\n```js\nimport { openDB } from 'idb/with-async-ittr';\n```\n\nOr `https://cdn.jsdelivr.net/npm/idb@7/build/umd-with-async-ittr.js` if you're using the non-module version.\n\nNow you can iterate over stores, indexes, and cursors:\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n // …\n}\n```\n\nEach yielded object is an `IDBCursor`. You can optionally use the advance methods to skip items (within an async iterator they return void):\n\n```js\nconst tx = db.transaction(storeName);\n\nfor await (const cursor of tx.store) {\n console.log(cursor.value);\n // Skip the next item\n cursor.advance(2);\n}\n```\n\nIf you don't manually advance the cursor, `cursor.continue()` is called for you.\n\nStores and indexes also have an `iterate` method which has the same signature as `openCursor`, but returns an async iterator:\n\n```js\nconst index = db.transaction('books').store.index('author');\n\nfor await (const cursor of index.iterate('Douglas Adams')) {\n console.log(cursor.value);\n}\n```\n\n# Examples\n\n## Keyval store\n\nThis is very similar to `localStorage`, but async. If this is _all_ you need, you may be interested in [idb-keyval](https://www.npmjs.com/package/idb-keyval). You can always upgrade to this library later.\n\n```js\nimport { openDB } from 'idb';\n\nconst dbPromise = openDB('keyval-store', 1, {\n upgrade(db) {\n db.createObjectStore('keyval');\n },\n});\n\nexport async function get(key) {\n return (await dbPromise).get('keyval', key);\n};\nexport async function set(key, val) {\n return (await dbPromise).put('keyval', val, key);\n};\nexport async function del(key) {\n return (await dbPromise).delete('keyval', key);\n};\nexport async function clear() {\n return (await dbPromise).clear('keyval');\n};\nexport async function keys() {\n return (await dbPromise).getAllKeys('keyval');\n};\n```\n\n## Article store\n\n```js\nimport { openDB } from 'idb/with-async-ittr.js';\n\nasync function demo() {\n const db = await openDB('Articles', 1, {\n upgrade(db) {\n // Create a store of objects\n const store = db.createObjectStore('articles', {\n // The 'id' property of the object will be the key.\n keyPath: 'id',\n // If it isn't explicitly set, create a value by auto incrementing.\n autoIncrement: true,\n });\n // Create an index on the 'date' property of the objects.\n store.createIndex('date', 'date');\n },\n });\n\n // Add an article:\n await db.add('articles', {\n title: 'Article 1',\n date: new Date('2019-01-01'),\n body: '…',\n });\n\n // Add multiple articles in one transaction:\n {\n const tx = db.transaction('articles', 'readwrite');\n await Promise.all([\n tx.store.add({\n title: 'Article 2',\n date: new Date('2019-01-01'),\n body: '…',\n }),\n tx.store.add({\n title: 'Article 3',\n date: new Date('2019-01-02'),\n body: '…',\n }),\n tx.done,\n ]);\n }\n\n // Get all the articles in date order:\n console.log(await db.getAllFromIndex('articles', 'date'));\n\n // Add 'And, happy new year!' to all articles on 2019-01-01:\n {\n const tx = db.transaction('articles', 'readwrite');\n const index = tx.store.index('date');\n\n for await (const cursor of index.iterate(new Date('2019-01-01'))) {\n const article = { ...cursor.value };\n article.body += ' And, happy new year!';\n cursor.update(article);\n }\n\n await tx.done;\n }\n}\n```\n\n# TypeScript\n\nThis library is fully typed, and you can improve things by providing types for your database:\n\n```ts\nimport { openDB, DBSchema } from 'idb';\n\ninterface MyDB extends DBSchema {\n 'favourite-number': {\n key: string;\n value: number;\n };\n products: {\n value: {\n name: string;\n price: number;\n productCode: string;\n };\n key: string;\n indexes: { 'by-price': number };\n };\n}\n\nasync function demo() {\n const db = await openDB('my-db', 1, {\n upgrade(db) {\n db.createObjectStore('favourite-number');\n\n const productStore = db.createObjectStore('products', {\n keyPath: 'productCode',\n });\n productStore.createIndex('by-price', 'price');\n },\n });\n\n // This works\n await db.put('favourite-number', 7, 'Jen');\n // This fails at compile time, as the 'favourite-number' store expects a number.\n await db.put('favourite-number', 'Twelve', 'Jake');\n}\n```\n\nTo define types for your database, extend `DBSchema` with an interface where the keys are the names of your object stores.\n\nFor each value, provide an object where `value` is the type of values within the store, and `key` is the type of keys within the store.\n\nOptionally, `indexes` can contain a map of index names, to the type of key within that index.\n\nProvide this interface when calling `openDB`, and from then on your database will be strongly typed. This also allows your IDE to autocomplete the names of stores and indexes.\n\n## Opting out of types\n\nIf you call `openDB` without providing types, your database will use basic types. However, sometimes you'll need to interact with stores that aren't in your schema, perhaps during upgrades. In that case you can cast.\n\nLet's say we were renaming the 'favourite-number' store to 'fave-nums':\n\n```ts\nimport { openDB, DBSchema, IDBPDatabase } from 'idb';\n\ninterface MyDBV1 extends DBSchema {\n 'favourite-number': { key: string; value: number };\n}\n\ninterface MyDBV2 extends DBSchema {\n 'fave-num': { key: string; value: number };\n}\n\nconst db = await openDB('my-db', 2, {\n async upgrade(db, oldVersion) {\n // Cast a reference of the database to the old schema.\n const v1Db = db as unknown as IDBPDatabase;\n\n if (oldVersion < 1) {\n v1Db.createObjectStore('favourite-number');\n }\n if (oldVersion < 2) {\n const store = v1Db.createObjectStore('favourite-number');\n store.name = 'fave-num';\n }\n },\n});\n```\n\nYou can also cast to a typeless database by omitting the type, eg `db as IDBPDatabase`.\n\nNote: Types like `IDBPDatabase` are used by TypeScript only. The implementation uses proxies under the hood.\n\n# Developing\n\n```sh\nnpm run dev\n```\n\nThis will also perform type testing.\n\nTo test, navigate to `build/test/` in a browser. You'll need to set up a [basic web server](https://www.npmjs.com/package/serve) for this.\n","readmeFilename":"README.md","gitHead":"84f9d0529e71ad0bfd5c70cab1d131ba712f44af","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@7.0.1-with-src","_nodeVersion":"16.15.0","_npmVersion":"8.9.0","dist":{"integrity":"sha512-ujZ7X4rK19bgx7sU37sy6vI2WmaKaF/fvTYSSpTJrwGH0l+Rs2qiT9Np/w4wZ/yJjTT7MWh9rLvJ5ECzy9go2w==","shasum":"32505add94003194e7fc359fe59c5d03a805b7b2","tarball":"https://registry.npmjs.org/idb/-/idb-7.0.1-with-src.tgz","fileCount":28,"unpackedSize":134389,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDwN0EFJn7XWbkmP8jtZDYBYz8WSPkAv8+qYWN+q2y1IAIhANf8cs1RbiNeK8faXFCXPpa07CMdkWD+u44eP67AObBG"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJijhyOACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpgSQ/+Jb4MBHQaDQMAuEZcmKeURjqrf/s3suI06xp3MSWLA1oG1yNA\r\npt+u5lyKEBByBkWoUI8LP4+Ppd3OOf4hQSwX4UcGKVm2DLl4t0nX3K45DT16\r\nloWl/n3cJyT3CHRvVKjD+udHe4NxVqJW8514j5FwrAheteKFKmQkVXe5Nljf\r\nyf8O9oLCZr/xkB/tLfvGa2lCMlgFDkkZCR5fmDDVW/xnWP/SmPRdm+Af50oh\r\nbXZyKxXsxEIG/3qp4WquYfeYDCv8H43Xuo+xHzlGYC/JqRrSrD63lxdaCNG3\r\n88GJqeUaUHpzTJwwelcLpaNHkxb5rNBT7CnqykqS+RdwzT4Czu2/g1lxnStR\r\n/zwWNagaiSlRWqVd4LtPJ+NEIIuYOaUrVLVyCDWQgLLAHwCPY5rCApSN70gj\r\ni1DB75Cixmo9y+pFNOvLwhtaj/Vv6wsYuB66HAFoufUNaqLvZAVziM/syCqD\r\nthN6Sj0mzCgiKJfsyvJZw8o2wgI5IJusAI+AfW5nrOy9JOk/Y/4hY8QIjcW2\r\nEg/di53x4dtm/oPaHil/zIe3zg7HVfWBKAzRhLcka34e8rKF8GTjQlu+tauZ\r\nW5dwVaex9ubtzFJyU+irttg/bb1qw2wk4b/Q5/+Mi0DJvD0cNHUAipRXw495\r\nzZjCm9/ezA7QsX0SCSOa2HXEPfl9FfGouTA=\r\n=BzJq\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_7.0.1-with-src_1653480590183_0.22430847004078425"},"_hasShrinkwrap":false},"7.0.2":{"name":"idb","version":"7.0.2","description":"A small wrapper that makes IndexedDB usable","main":"./build/index.cjs","module":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","module":"./build/index.js","import":"./build/index.js","default":"./build/index.cjs"},"./with-async-ittr":{"types":"./with-async-ittr.d.ts","module":"./with-async-ittr.js","import":"./with-async-ittr.js","default":"./with-async-ittr.cjs"},"./build/*":"./build/*","./package.json":"./package.json"},"type":"module","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch","prepack":"npm run build"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^22.0.0","@rollup/plugin-node-resolve":"^13.3.0","@types/chai":"^4.2.22","@types/estree":"^0.0.51","@types/mocha":"^9.0.0","chai":"^4.3.4","conditional-type-checks":"^1.0.5","del":"^6.0.0","filesize":"^9.0.8","glob":"^8.0.3","mocha":"^10.0.0","prettier":"^2.4.1","rollup":"^2.75.6","rollup-plugin-terser":"^7.0.2","tsd":"^0.21.0","typescript":"^4.7.3"},"gitHead":"97102ff5e5d65af3e348b3fdbcbac5323b47aef1","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@7.0.2","_nodeVersion":"16.15.0","_npmVersion":"8.9.0","dist":{"integrity":"sha512-jjKrT1EnyZewQ/gCBb/eyiYrhGzws2FeY92Yx8qT9S9GeQAmo4JFVIiWRIfKW/6Ob9A+UDAOW9j9jn58fy2HIg==","shasum":"7a067e20dd16539938e456814b7d714ba8db3892","tarball":"https://registry.npmjs.org/idb/-/idb-7.0.2.tgz","fileCount":21,"unpackedSize":87663,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBvsra/qpup4nhWwoxzrl3dJZBHpwnIsMPq4GOrwULtnAiEAoQivgrVih12xFcLc60i5zXmYUJjOF+gtQ2wGC8XUPWc="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJirIOQACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmozbg/9F48krIHjCUTJ5vDPP1+LxNx3bvznmlOz3yM4zKjF8VVPcnqC\r\nN/dqoQH+tlYzX4O6qZcVBZkTePoIELsz2tXwajIPk7amAvSOw0sNZyTdatZ8\r\nRuWrGZBTWxzj5a6NZx1QMTDPzk9oD3lcL1uCwtDDOlH47JrpeoIAAMNPecj/\r\nx2HbBdwGpSFu7ygEYh/JFmw6D2b3j4vL19pEF7NPnT3NoFKZiWFC2hkYsyCM\r\nP1Ef064WG5U16e/NG9rNgi87ek+9LkQXNOrJeEPl/+K1mIMA9gqJiKOoUD31\r\nSGhRBDynV+vgKf0bGWj35t+6jh4R+xGudXzoaMjCukb3lxGDxXjRoUlCyXIJ\r\nNU9wdWv2wchASmxcuqKuy5r3mHD7BKTA2CgDOHeewpcadqcgDvOy7/UFutcc\r\nqeHO3N2g9gETui+f0HOI7VdEl3QN8FqaaetewQfRTsciFpKHnYBcBjEfinjC\r\nFuI6x0GDwNn9JXGCavUntEO558AJPwWpLFO3FsjuZ6U9KGB6s0igDEWeFTxG\r\n0RVy8KG1+wD/rSh/U13DUqIKAxSULlsagA6fTJtAkDzELjKv6ZFmqWhLLt1p\r\n5sJGYbWr2nI2GA/wZ+qzZiBWmi+TuGF1DNf8yuzWFMY8W37ba98Hz4ZxWEp/\r\nZPGgfsKj7jMMb9iJ29ycwfL1jkNU2oZ4bug=\r\n=04wy\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_7.0.2_1655473040479_0.5859609950783213"},"_hasShrinkwrap":false},"7.1.0":{"name":"idb","version":"7.1.0","description":"A small wrapper that makes IndexedDB usable","main":"./build/index.cjs","module":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","module":"./build/index.js","import":"./build/index.js","default":"./build/index.cjs"},"./with-async-ittr":{"types":"./with-async-ittr.d.ts","module":"./with-async-ittr.js","import":"./with-async-ittr.js","default":"./with-async-ittr.cjs"},"./build/*":"./build/*","./package.json":"./package.json"},"type":"module","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch","prepack":"npm run build"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^22.0.2","@rollup/plugin-node-resolve":"^14.1.0","@types/chai":"^4.3.3","@types/estree":"^1.0.0","@types/mocha":"^9.1.1","chai":"^4.3.6","conditional-type-checks":"^1.0.6","del":"^7.0.0","filesize":"^9.0.11","glob":"^8.0.3","mocha":"^10.0.0","prettier":"^2.7.1","rollup":"^2.79.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.8.3"},"gitHead":"2dc8028a8fd46646b4b3fbb308549860d3e7027e","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@7.1.0","_nodeVersion":"16.15.0","_npmVersion":"8.9.0","dist":{"integrity":"sha512-Wsk07aAxDsntgYJY4h0knZJuTxM73eQ4reRAO+Z1liOh8eMCJ/MoDS8fCui1vGT9mnjtl1sOu3I2i/W1swPYZg==","shasum":"2cc886be57738419e57f9aab58f647e5e2160270","tarball":"https://registry.npmjs.org/idb/-/idb-7.1.0.tgz","fileCount":21,"unpackedSize":90330,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD5429dRzqgJU7U7AwAuWe5SU/6SHybY4cIzw10M3e7DgIgLs61Omh5l7eKoxhIqGh+78oJrhSmFtC0RuLeIK2VUSU="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjKuy2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq3Tg/+LgPx6RUAdjphMqe5d+HbX2o0eob1irwgJt7haQx/LN6dVJEN\r\nFyLjPaJMEuur7ZTL3i5pbXM7KVKA/WCRhwDdW9DVhv0JWzuWNz1InYenQnIV\r\nkYy1A1j1bOZ+v9zw36OYB/Sr56ZfhdAmGoQk1E3ZGFF2jIZoz3LX30lVVBsD\r\nQ8ZBsQ/3yhn13UwOy3cWvH0W++QaC81Qh4vACPL71x1fceWxqjIcR1syuC5q\r\n4XTeQZKrWKEoQI5xklBWCM1SujeVhM1NZZvY4huPd2kY4obiUMmZXW0zShFd\r\nDk0n3TjAxQ+xdA47EwtlF1+d/hsuJuPxUhzc6zrm73kKE3q5ylsKjCSeNiV6\r\nDHfv+Pnb0oPzlDu0fnson9RhvS/uHJMx6ADhASuMQA4KelkCxJO1hvbPEMz1\r\nncYLxQRPXnsQZ8EyuE2Da1F+ceXRprZ13qSSSbgAvBmqoeupBXSvvLl8kEIh\r\npBgZRBB+2CsiIMjgJw+avRVPD/A/2kEVYDooNisPAHcvruFp6avP1BnjZZY6\r\nPYlsaZoawT8HCh3WLZqy0Nt8C6v1FHpl6rC2tvcfetze5F7S0fsppO4OHrlR\r\nSACIcEO4UvYsiWeNKGMxhi47+1+qWOK9MDc1L/E6iPws0GnfJh36bjzJoLXI\r\nf0phpQ4qeZmGXI1K9jvni8CjpBDMjkKl1+I=\r\n=WjM/\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_7.1.0_1663757494731_0.7811313227709629"},"_hasShrinkwrap":false},"7.1.1":{"name":"idb","version":"7.1.1","description":"A small wrapper that makes IndexedDB usable","main":"./build/index.cjs","module":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","module":"./build/index.js","import":"./build/index.js","default":"./build/index.cjs"},"./with-async-ittr":{"types":"./with-async-ittr.d.ts","module":"./with-async-ittr.js","import":"./with-async-ittr.js","default":"./with-async-ittr.cjs"},"./build/*":"./build/*","./package.json":"./package.json"},"type":"module","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch","prepack":"npm run build"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^22.0.2","@rollup/plugin-node-resolve":"^14.1.0","@types/chai":"^4.3.3","@types/estree":"^1.0.0","@types/mocha":"^9.1.1","chai":"^4.3.6","conditional-type-checks":"^1.0.6","del":"^7.0.0","filesize":"^9.0.11","glob":"^8.0.3","mocha":"^10.0.0","prettier":"^2.7.1","rollup":"^2.79.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.8.3"},"gitHead":"30f75f901366147ed43520ecc58d1fdc3d25cbe2","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_id":"idb@7.1.1","_nodeVersion":"16.15.0","_npmVersion":"8.9.0","dist":{"integrity":"sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==","shasum":"d910ded866d32c7ced9befc5bfdf36f572ced72b","tarball":"https://registry.npmjs.org/idb/-/idb-7.1.1.tgz","fileCount":21,"unpackedSize":90339,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCT1zPXQbpVHtGzboTFk1yIzcAxWgu+eURA0xJONp6ObQIgNdAuGDoXd64A5VWzECiiqetRUnTs4kA7hcF4lIASmIE="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjZOlnACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpjsg/9ElOb2udMbqDDEPEKJ3WvjMvcOzTMoVEX5rHkl2Qd7kdTi/7z\r\nP/U16kUGbsgtEVWB18dox7g5e3O0xsg4qkCuUqTPBLYhqywYHfHuYlVCmg1k\r\nArxedHHyPZLKWjW4yuw5UvrCZqzzodTQDLSxdtqmhDyI3Sj8bZXNbh/0TJL5\r\n/rfCJUSIZ7tnGArwF3iBPWKYEiAjMnibyFeaSQg6XCNObajf1jLLdw8UN0+C\r\npcg35lBCtW3EgULMRl/N8WR/xEh6b4KeysKJwXxQRFkMd/IuuTCe1hoFApwW\r\n9WSa7kmH+7VwnE1+bN4+p/fhDJbg0bHY/RCTHv6RdErprREsK9uq+md2Gzf6\r\nLXQCNXs+10JGJPw+4iqQa3ATmc56tsWcOLioZIx0Vt3DKhd7gC8fTjzHsv1N\r\nztohXfJn6BmzrzboTN30nxmBmLpLdiaz1p3up58HMZQ391U3r/CU/oAcydYN\r\nqLvWoceg4PHb+lZmg2xOcaXPM5pDOksmSph17OACNds3lFsGD69lHGlPDxR6\r\nuPq1zfEWtYZ64qaTBYXCWlIZZCk3pqyoaffup90keiMVG376fJJDtHCTlPiw\r\n81GlOQPepF3OXtFfPH9tU8y1RLHhfAQg8IBFLFw2OIKhFJRN76/F1+z2y2t/\r\nZvzIcHxW6KEEUuj0+LYvv3/JLbmzVhcV4Mw=\r\n=90lv\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_7.1.1_1667557735448_0.7618947449850875"},"_hasShrinkwrap":false},"8.0.0":{"name":"idb","version":"8.0.0","description":"A small wrapper that makes IndexedDB usable","main":"./build/index.cjs","module":"./build/index.js","types":"./build/index.d.ts","exports":{".":{"types":"./build/index.d.ts","module":"./build/index.js","import":"./build/index.js","default":"./build/index.cjs"},"./build/*":"./build/*","./package.json":"./package.json"},"type":"module","scripts":{"build":"PRODUCTION=1 rollup -c && node --experimental-modules lib/size-report.mjs","dev":"rollup -c --watch","prepack":"npm run build"},"repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"author":{"name":"Jake Archibald"},"license":"ISC","devDependencies":{"@rollup/plugin-commonjs":"^22.0.2","@rollup/plugin-node-resolve":"^14.1.0","@types/chai":"^4.3.3","@types/estree":"^1.0.0","@types/mocha":"^9.1.1","chai":"^4.3.6","conditional-type-checks":"^1.0.6","del":"^7.0.0","filesize":"^9.0.11","glob":"^8.0.3","mocha":"^10.0.0","prettier":"^2.7.1","rollup":"^2.79.0","rollup-plugin-terser":"^7.0.2","typescript":"^4.8.3"},"_id":"idb@8.0.0","gitHead":"eb2fc14bb3588d09aaa5e86a83bf3519b06e10b3","bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"homepage":"https://github.com/jakearchibald/idb#readme","_nodeVersion":"18.17.0","_npmVersion":"9.8.1","dist":{"integrity":"sha512-l//qvlAKGmQO31Qn7xdzagVPPaHTxXx199MhrAFuVBTPqydcPYBWjkrbv4Y0ktB+GmWOiwHl237UUOrLmQxLvw==","shasum":"33d7ed894ed36e23bcb542fb701ad579bfaad41f","tarball":"https://registry.npmjs.org/idb/-/idb-8.0.0.tgz","fileCount":13,"unpackedSize":82488,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFBo57cRyZ4ve3jA/YJnbwdSqS2wFBzq8cvFRttTbr4BAiBdkCykawjFTmL2hoMU1F98M7eqBvcU6J+dWZhIBNY5IQ=="}]},"_npmUser":{"name":"jaffathecake","email":"jaffathecake@gmail.com"},"directories":{},"maintainers":[{"name":"jaffathecake","email":"jaffathecake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/idb_8.0.0_1701445728544_0.6917316141280281"},"_hasShrinkwrap":false}},"author":{"name":"Jake Archibald"},"license":"ISC","readmeFilename":"README.md","homepage":"https://github.com/jakearchibald/idb#readme","repository":{"type":"git","url":"git://github.com/jakearchibald/idb.git"},"bugs":{"url":"https://github.com/jakearchibald/idb/issues"},"users":{"dheerajvs":true,"toddrimes":true,"edm00se":true,"robsummitt":true,"hville":true,"kenju":true,"faeliaso":true,"imsovru":true,"ripleyludicrous":true,"docluv":true,"nickeltobias":true,"zeriss":true,"rajikaimal":true,"xaxim":true,"kogakure":true,"ferrari":true,"philipjc":true,"aprilchen":true,"roelroel":true,"shaddyhm":true,"nysingh":true,"honzajde":true,"pvhnet":true,"abt10":true,"npmrud5g":true,"tomekf":true,"palsson":true,"vandaad":true,"achmiral":true,"marcellk":true,"guilherfp":true,"jahredhope":true,"drewigg":true,"omkar.sheral.1989":true,"aleksspeaker":true,"deerflow":true}}