{"_id":"fruitdown","_rev":"5-adc6793e6f52487ebe1f76a2c4e40305","name":"fruitdown","description":"A browser-based LevelDOWN adapter that works over all IndexedDB implementations, including Apple's","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"fruitdown","description":"A browser-based LevelDOWN adapter that works over all IndexedDB implementations, including Apple's","contributors":[{"name":"Nolan Lawson","url":"https://github.com/nolanlawson"}],"keywords":["leveldb","indexeddb","safari","apple","leveldown","levelup"],"version":"1.0.0","main":"index.js","dependencies":{"abstract-leveldown":"0.12.3","argsarray":"0.0.1","d64":"^1.0.0","inherits":"^2.0.1","tiny-queue":"0.2.0"},"devDependencies":{"beefy":"~1.1.0","browserify":"^4.1.2","levelup":"^0.18.2","tape":"^2.12.3","jshint":"^2.5.0"},"repository":{"type":"git","url":"git+https://github.com/nolanlawson/fruitdown.git"},"browser":{"bindings":false},"scripts":{"test":"npm run jshint && beefy tests/test.js","jshint":"jshint -c .jshintrc *.js tests/*.js"},"license":"MIT","gypfile":false,"gitHead":"18a99a44c43125a00f217b4811651854ba04d7c8","bugs":{"url":"https://github.com/nolanlawson/fruitdown/issues"},"homepage":"https://github.com/nolanlawson/fruitdown#readme","_id":"fruitdown@1.0.0","_shasum":"966d316a1e5464dc0f068fc96c0436754cf1c2aa","_from":".","_npmVersion":"2.14.2","_nodeVersion":"4.0.0","_npmUser":{"name":"nolanlawson","email":"nolan@nolanlawson.com"},"maintainers":[{"name":"nolanlawson","email":"nolan@nolanlawson.com"}],"dist":{"shasum":"966d316a1e5464dc0f068fc96c0436754cf1c2aa","tarball":"https://registry.npmjs.org/fruitdown/-/fruitdown-1.0.0.tgz","integrity":"sha512-Q+KijWQZDiqF7TJgY+j67soOu/+3bQDqag9ta1AazuLI3oUtfPR/EYG5NRow5oWqN1Hx3y9nq0g/n9MhJ1z2Cw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCB+5JnFy2OHxg8o+olc1jBbDt6J1vqXvHxmN4BZSAQrAIgSdWAzo7o+j8HKvHUE+njFRlFd5KELDlx2TjAAQl5ZVI="}]}},"1.0.1":{"name":"fruitdown","description":"A browser-based LevelDOWN adapter that works over all IndexedDB implementations, including Apple's","contributors":[{"name":"Nolan Lawson","url":"https://github.com/nolanlawson"}],"keywords":["leveldb","indexeddb","safari","apple","leveldown","levelup"],"version":"1.0.1","main":"index.js","dependencies":{"abstract-leveldown":"0.12.3","argsarray":"0.0.1","d64":"^1.0.0","inherits":"^2.0.1","tiny-queue":"0.2.0"},"devDependencies":{"beefy":"~1.1.0","browserify":"^11.1.0","fake-indexeddb":"^1.0.3","jshint":"^2.5.0","levelup":"^0.18.2","smokestack":"^3.3.1","tap-closer":"^1.0.0","tap-spec":"^4.1.0","tape":"^2.12.3","zuul":"^3.5.0"},"repository":{"type":"git","url":"git+https://github.com/nolanlawson/fruitdown.git"},"browser":{"bindings":false},"scripts":{"dev":"npm run jshint && beefy tests/test.js","jshint":"jshint -c .jshintrc *.js tests/*.js","test":"npm run jshint && npm run test-browser","test-fakeindexeddb":"node tests/test.js","test-browser":"browserify tests/test.js | tap-closer | smokestack -b $BROWSER | tap-spec","test-saucelabs":"zuul --browser-name $BROWSER_NAME --browser-version $BROWSER_VERSION -- tests/test.js"},"license":"MIT","gypfile":false,"gitHead":"f66cec84c0962b83a6153ff1f0deefe8a47cdab7","bugs":{"url":"https://github.com/nolanlawson/fruitdown/issues"},"homepage":"https://github.com/nolanlawson/fruitdown#readme","_id":"fruitdown@1.0.1","_shasum":"822e8dd902fbea6a3544d9db061ac67adc1e7615","_from":".","_npmVersion":"2.14.2","_nodeVersion":"4.0.0","_npmUser":{"name":"nolanlawson","email":"nolan@nolanlawson.com"},"maintainers":[{"name":"nolanlawson","email":"nolan@nolanlawson.com"}],"dist":{"shasum":"822e8dd902fbea6a3544d9db061ac67adc1e7615","tarball":"https://registry.npmjs.org/fruitdown/-/fruitdown-1.0.1.tgz","integrity":"sha512-4nWD70GwqFfez0dZYWKAMesMxQsH90GH1gLssh11jZSHHfSPNq1h32IVGl8hLfFtQhfpOpfTr5lUArTWKNG8zg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCsS9y3+fp2Yu9If1zFmcdw+KuT04YcPXZE11dnPfCyDQIgVQvgVO0ouIY5N1Zd0E4vfzey+WUToY8aKqTbGpBnEBc="}]}},"1.0.2":{"name":"fruitdown","description":"A browser-based LevelDOWN adapter that works over all IndexedDB implementations, including Apple's","contributors":[{"name":"Nolan Lawson","url":"https://github.com/nolanlawson"}],"keywords":["leveldb","indexeddb","safari","apple","leveldown","levelup"],"version":"1.0.2","main":"lib/index.js","dependencies":{"abstract-leveldown":"0.12.3","argsarray":"0.0.1","d64":"^1.0.0","inherits":"^2.0.1","tiny-queue":"0.2.0"},"devDependencies":{"beefy":"~1.1.0","browserify":"^13.0.0","fake-indexeddb":"^1.0.3","jshint":"^2.5.0","levelup":"^0.18.2","phantomjs-prebuilt":"^2.1.5","smokestack":"^3.3.1","tap-closer":"^1.0.0","tap-spec":"^4.1.0","tape":"^2.12.3","zuul":"^3.10.0"},"repository":{"type":"git","url":"git+https://github.com/nolanlawson/fruitdown.git"},"browser":{"bindings":false},"scripts":{"dev":"npm run jshint && beefy tests/test.js","jshint":"jshint -c .jshintrc lib tests","test":"npm run jshint && npm run test-browser","test-fakeindexeddb":"node tests/test.js","test-browser":"browserify tests/test.js | tap-closer | smokestack -b $BROWSER | tap-spec","test-saucelabs":"zuul --no-coverage --browser-name $BROWSER_NAME --browser-version $BROWSER_VERSION -- tests/test.js","test-phantom":"zuul --no-coverage --phantom -- tests/test.js"},"license":"MIT","gypfile":false,"files":["lib"],"gitHead":"635339f0905915b3680aca658e29cfd0545eb307","bugs":{"url":"https://github.com/nolanlawson/fruitdown/issues"},"homepage":"https://github.com/nolanlawson/fruitdown#readme","_id":"fruitdown@1.0.2","_shasum":"51338fbf561399c994820d1995a113cb6cbba486","_from":".","_npmVersion":"3.5.3","_nodeVersion":"5.3.0","_npmUser":{"name":"nolanlawson","email":"nolan@nolanlawson.com"},"dist":{"shasum":"51338fbf561399c994820d1995a113cb6cbba486","tarball":"https://registry.npmjs.org/fruitdown/-/fruitdown-1.0.2.tgz","integrity":"sha512-G74T6qoTkDHS9oIxIQrR6xtZrwopD/2pYaJ2p+//3lvuA/uAFSPrF4jhDOqVhtRyyt9E7KuPVM0Dlu8wGULtUQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD51JZPPpy8paw5JP/ooMxqClgvY/3XgSrcw2To6uUNdgIhAMc5QdUOLIElAzCquItq8ELuk7u3tl74Eugg7TrWoAcm"}]},"maintainers":[{"name":"nolanlawson","email":"nolan@nolanlawson.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/fruitdown-1.0.2.tgz_1457492215548_0.8645555353723466"}}},"readme":"# FruitDOWN [![Build Status](https://travis-ci.org/nolanlawson/fruitdown.svg?branch=master)](https://travis-ci.org/nolanlawson/fruitdown)\n\n\nA browser-based LevelDOWN adapter that works over all implementations of IndexedDB, including Apple's buggy version.\n\nThis is designed for environments where you can't use WebSQL as a polyfill for Safari browsers, such as:\n\n* WKWebView, which [doesn't have WebSQL](https://bugs.webkit.org/show_bug.cgi?id=137760)\n* Safari/iOS, but you don't want [an annoying popup](http://pouchdb.com/errors.html#not_enough_space) after you reach 5MB\n* iOS, but you need to store more than 50MB, which [works in IndexedDB](https://github.com/nolanlawson/database-filler) but [not in WebSQL](http://www.html5rocks.com/en/tutorials/offline/quota-research/)\n\nThis project is intended for use with the [Level ecosystem](https://github.com/level/), including as a [PouchDB](http://pouchdb.com) adapter (coming soon).\n\n## Install\n\n```\nnpm install fruitdown\n```\n\n## Browser support\n\nTested in:\n\n* **Android**: 4.4, 5.0, 5.1\n* **Firefox**: 38-42\n* **Chrome**: 42-beta\n* **IE**: 10-11\n* **iPhone**: 8.0-9.1\n* **Safari**: 7.1-9\n\n## Background\n\nIndexedDB support is pretty awful these days. Every browser except for Chrome and Firefox has tons of bugs, but Safari's are arguably [the](https://gist.github.com/nolanlawson/08eb857c6b17a30c1b26) [worst](http://www.raymondcamden.com/2014/09/25/IndexedDB-on-iOS-8-Broken-Bad).  While there are well-known workarounds for [Microsoft's bugs](https://gist.github.com/nolanlawson/a841ee23436410f37168), most IndexedDB wrappers just gave up and didn't support Apple IndexedDB. [PouchDB](http://pouchdb.com), [LocalForage](http://mozilla.github.io/localForage/), [YDN-DB](http://dev.yathit.com/ydn-db/downloads.html), [Lovefield](https://github.com/google/lovefield), [Dexie](http://dexie.org/), and [Level.js](https://github.com/maxogden/level.js) all either fall back to WebSQL or recommend that you use the [IndexedDBShim](https://github.com/axemclion/IndexedDBShim).\n\nThis library is different. It does all the weird backflips you have to do to support Apple IndexedDB.\n\n## Design\n\nThis project is a fork of [localstorage-down](https://github.com/No9/localstorage-down). It uses a tiny subset of the IndexedDB API &ndash; just those parts that are supported in Firefox, Chrome, Safari, and IE. The #1 goal is compatibility with as many browsers as possible. The #2 goal is performance.\n\nOnly one object store is ever opened, because Apple's implementation [does not allow you to open more than one at once](https://bugs.webkit.org/show_bug.cgi?id=136937). So presumably you would use something like [level-sublevel](https://github.com/dominictarr/level-sublevel/) to prefix keys. Also every operation is its own transaction, so you should not count on standard IndexedDB transaction guarantees, even when you use `batch()`. However, internally the lib does its own batching, and supports [snapshots](https://github.com/Level/leveldown#snapshots).\n\nAll keys are kept in memory, which is bad for memory usage but actually a win for performance, since IDBCursors are slow. However, the database creates two indexes, because 1) the primary index does not support `openKeyCursor()` per the IndexedDB 1.0 spec, and we want to use it to avoid reading in large values during key iteration, but 2) secondary indexes [do not correctly throw ConstraintErrors in Safari](https://bugs.webkit.org/show_bug.cgi?id=149107). So unfortunately there's a superfluous extra index. ¯\\\\\\_(ツ)\\_/¯\n\nAnother limitation is that both keys and values are converted to strings before being stored. So instead of efficiently using Blobs or even JSON objects, binary strings are stored instead. This is okay, though, because Chrome < 43 (and therefore pre-Lollipop Android) [does not store Blobs correctly](https://code.google.com/p/chromium/issues/detail?id=447836), and Safari [doesn't support Blob storage either](https://bugs.webkit.org/show_bug.cgi?id=143193).\n\nTo avoid [concurrency bugs in IE/Edge](https://gist.github.com/nolanlawson/a841ee23436410f37168), this project borrows PouchDB's system of maintaining a global cache of databases and only ever using one database per name.\n\n## Browser support\n\nFruitDOWN supports [any browser that has IndexedDB](http://caniuse.com/#feat=indexeddb), even those with partial support. Notably:\n\n* Safari 7.1+\n* iOS 8+\n* IE 10+\n* Chrome 23+\n* Firefox 10+\n* Android 4.4+\n\nThe buggy [Samsung/HTC IndexedDB variants](https://github.com/pouchdb/pouchdb/issues/1207) based on an older version of the IndexedDB spec, which you will occasionally find in Android 4.3, are not supported.\n\n\n## Future\n\nApple have [pledged to fix IndexedDB](https://twitter.com/grorgwork/status/618152677281697792). When they do, you should stop using this library and use [Level.js](https://github.com/maxogden/level.js) or another IndexedDB wrapper instead.\n\n\n## Tests\n\n    npm run dev\n\nBrowse to [http://localhost:9966](http://localhost:9966).\nView console logs in the browser to see test output.\n\n## Automated tests\n\nBrowser:\n\n\n    BROWSER=firefox npm test\n    BROWSER=chrome npm test\n\n[FakeIndexedDB](https://github.com/dumbmatter/fakeIndexedDB) in Node:\n\n\n    npm run test-fakeindexeddb\n\nPhantomJS tests:\n\n    npm run test-phantom\n\n##  Thanks\n\nThanks to [Anton Whalley](https://github.com/no9), [Adam Shih](https://github.com/adamshih) and everybody else who contributed to localstorage-down. Also thanks to everybody who worked on PouchDB, where most of these IndexedDB bugs were discovered.\n","maintainers":[{"name":"nolanlawson","email":"nolan@nolanlawson.com"}],"time":{"modified":"2022-06-18T03:50:13.431Z","created":"2015-09-13T20:51:10.415Z","1.0.0":"2015-09-13T20:51:10.415Z","1.0.1":"2015-09-16T03:55:41.050Z","1.0.2":"2016-03-09T02:56:59.754Z"},"homepage":"https://github.com/nolanlawson/fruitdown#readme","keywords":["leveldb","indexeddb","safari","apple","leveldown","levelup"],"repository":{"type":"git","url":"git+https://github.com/nolanlawson/fruitdown.git"},"contributors":[{"name":"Nolan Lawson","url":"https://github.com/nolanlawson"}],"bugs":{"url":"https://github.com/nolanlawson/fruitdown/issues"},"license":"MIT","readmeFilename":"README.md"}