{"_id":"storage-engine","_rev":"117199","name":"storage-engine","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","dist-tags":{"latest":"3.0.7"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"time":{"modified":"2021-06-03T10:50:30.000Z","created":"2018-11-05T19:00:20.620Z","3.0.7":"2019-08-19T13:47:04.095Z","3.0.6":"2019-08-13T13:18:59.428Z","3.0.5":"2019-08-13T12:31:23.972Z","3.0.4":"2019-05-22T18:35:57.351Z","3.0.3":"2019-05-13T12:31:14.668Z","3.0.2":"2019-05-08T18:06:40.464Z","3.0.1":"2019-05-05T19:46:51.174Z","3.0.0":"2019-05-05T19:11:22.154Z","2.0.1":"2018-12-24T12:13:34.791Z","2.0.0":"2018-12-06T12:49:54.524Z","1.0.1":"2018-11-13T18:32:39.121Z","1.0.0":"2018-11-05T19:00:20.620Z"},"users":{},"author":{"name":"Arnout Kazemier"},"repository":{"type":"git","url":"git+https://github.com/3rd-Eden/storage-engine.git"},"versions":{"3.0.7":{"name":"storage-engine","version":"3.0.7","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test:runner":"mocha --require setup-env --require test/mock.js test/*.test.js","test:watch":"npm run test:runner -- --watch","test":"npm run test:runner","build":"babel ./index.js -d ./lib && babel ./compatibility/*.js -d ./lib/compatibility","postinstall":"node ./compatibility/detect.js","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rd-Eden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rd-Eden/storage-engine/issues"},"homepage":"https://github.com/3rd-Eden/storage-engine#readme","dependencies":{"enabled":"^2.0.0","eventemitter3":"^4.0.0"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.5","@babel/plugin-proposal-object-rest-spread":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/register":"^7.0.0","@react-native-community/async-storage":"^1.3.1","assume":"^2.1.0","asyncstorageapi":"^1.0.0","mocha":"^5.2.0","react-native":"^0.59.4","require-poisoning":"^1.0.0","setup-env":"^1.2.1"},"gitHead":"b082e0e9e1848ea0c5d08eb8d8b5b85886c7eed0","_id":"storage-engine@3.0.7","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"shasum":"36c4532acde1b090dbc55b97332e9016ec1360cf","size":12651,"noattachment":false,"key":"/storage-engine/-/storage-engine-3.0.7.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-3.0.7.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"_npmUser":{"name":"3rdeden","email":"npmjs@3rd-Eden.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_3.0.7_1566222423990_0.0033008050328813265"},"_hasShrinkwrap":false,"publish_time":1566222424095,"_cnpm_publish_time":1566222424095},"3.0.6":{"name":"storage-engine","version":"3.0.6","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test:runner":"mocha --require setup-env --require test/mock.js test/*.test.js","test:watch":"npm run test:runner -- --watch","test":"npm run test:runner","build":"babel ./index.js -d ./lib && babel ./compatibility/*.js -d ./lib/compatibility","postinstall":"node ./compatibility/detect.js","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rd-Eden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rd-Eden/storage-engine/issues"},"homepage":"https://github.com/3rd-Eden/storage-engine#readme","dependencies":{"enabled":"^2.0.0","eventemitter3":"^3.1.0"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.5","@babel/plugin-proposal-object-rest-spread":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/register":"^7.0.0","@react-native-community/async-storage":"^1.3.1","assume":"^2.1.0","asyncstorageapi":"^1.0.0","mocha":"^5.2.0","react-native":"^0.59.4","require-poisoning":"^1.0.0","setup-env":"^1.2.1"},"gitHead":"6ee172c7bf1b583405082bfe740857e8d0d819c9","_id":"storage-engine@3.0.6","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"shasum":"135f22c95d480e94dfad47152817d5c7cd9b9931","size":12638,"noattachment":false,"key":"/storage-engine/-/storage-engine-3.0.6.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-3.0.6.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"_npmUser":{"name":"3rdeden","email":"npmjs@3rd-Eden.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_3.0.6_1565702339322_0.5608149793493444"},"_hasShrinkwrap":false,"publish_time":1565702339428,"_cnpm_publish_time":1565702339428},"3.0.5":{"name":"storage-engine","version":"3.0.5","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test:runner":"mocha --require setup-env --require test/mock.js test/*.test.js","test:watch":"npm run test:runner -- --watch","test":"npm run test:runner","build":"babel ./index.js -d ./lib && babel ./compatibility/*.js -d ./lib/compatibility","postinstall":"node ./compatibility/detect.js","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rd-Eden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rd-Eden/storage-engine/issues"},"homepage":"https://github.com/3rd-Eden/storage-engine#readme","dependencies":{"enabled":"^2.0.0","eventemitter3":"^4.0.0"},"devDependencies":{"@babel/cli":"^7.5.5","@babel/core":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.5.5","@babel/preset-env":"^7.5.5","@babel/register":"^7.5.5","@react-native-community/async-storage":"^1.6.1","assume":"^2.2.0","asyncstorageapi":"^1.0.2","mocha":"^6.2.0","react-native":"^0.60.4","require-poisoning":"^2.0.0","setup-env":"^1.2.2"},"gitHead":"77ce48e542edd6f2c1bda2cba81d3894389fcce9","_id":"storage-engine@3.0.5","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","dist":{"shasum":"e132aa205f67bd4ee1ed4c1bd3ecb26b7b0accb8","size":12618,"noattachment":false,"key":"/storage-engine/-/storage-engine-3.0.5.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-3.0.5.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"_npmUser":{"name":"3rdeden","email":"npmjs@3rd-Eden.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_3.0.5_1565699483858_0.7621188908784051"},"_hasShrinkwrap":false,"publish_time":1565699483972,"_cnpm_publish_time":1565699483972},"3.0.4":{"name":"storage-engine","version":"3.0.4","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test:runner":"mocha --require setup-env --require test/mock.js test/*.test.js","test:watch":"npm run test:runner -- --watch","test":"npm run test:runner","build":"babel ./index.js -d ./lib && babel ./compatibility/*.js -d ./lib/compatibility","postinstall":"node ./compatibility/detect.js","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rd-Eden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rd-Eden/storage-engine/issues"},"homepage":"https://github.com/3rd-Eden/storage-engine#readme","dependencies":{"enabled":"^2.0.0","eventemitter3":"^3.1.0"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.5","@babel/plugin-proposal-object-rest-spread":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/register":"^7.0.0","@react-native-community/async-storage":"^1.3.1","assume":"^2.1.0","asyncstorageapi":"^1.0.0","mocha":"^5.2.0","react-native":"^0.59.4","require-poisoning":"^1.0.0","setup-env":"^1.2.1"},"gitHead":"333efdd168a2401dd53146e8f4bb4c4b37b48547","_id":"storage-engine@3.0.4","_npmVersion":"6.4.0","_nodeVersion":"8.11.4","_npmUser":{"name":"3rdeden","email":"npm@3rd-Eden.com"},"dist":{"shasum":"7dfb3ead7cf4296360f62b98e06e169d1e44f160","size":12598,"noattachment":false,"key":"/storage-engine/-/storage-engine-3.0.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-3.0.4.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_3.0.4_1558550157191_0.09405186252948394"},"_hasShrinkwrap":false,"publish_time":1558550157351,"_cnpm_publish_time":1558550157351},"3.0.3":{"name":"storage-engine","version":"3.0.3","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test:runner":"mocha --require setup-env --require test/mock.js test/*.test.js","test:watch":"npm run test:runner -- --watch","test":"npm run test:runner","build":"babel ./index.js -d ./lib && babel ./compatibility/*.js -d ./lib/compatibility","postinstall":"node ./compatibility/detect.js","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rd-Eden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rd-Eden/storage-engine/issues"},"homepage":"https://github.com/3rd-Eden/storage-engine#readme","dependencies":{"enabled":"^2.0.0","eventemitter3":"^3.1.0"},"peerDependencies":{"react-native":"*"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.5","@babel/plugin-proposal-object-rest-spread":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/register":"^7.0.0","@react-native-community/async-storage":"^1.3.1","assume":"^2.1.0","asyncstorageapi":"^1.0.0","mocha":"^5.2.0","react-native":"^0.59.4","require-poisoning":"^1.0.0","setup-env":"^1.2.1"},"gitHead":"760a476276bd3b8451205a5caf585032e96c94a7","_id":"storage-engine@3.0.3","_npmVersion":"6.4.0","_nodeVersion":"8.11.4","_npmUser":{"name":"3rdeden","email":"npm@3rd-Eden.com"},"dist":{"shasum":"32ff1a69c8449ee1b24c0f85933bef07f27a9ba6","size":12557,"noattachment":false,"key":"/storage-engine/-/storage-engine-3.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-3.0.3.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_3.0.3_1557750674507_0.9104180247966509"},"_hasShrinkwrap":false,"publish_time":1557750674668,"_cnpm_publish_time":1557750674668},"3.0.2":{"name":"storage-engine","version":"3.0.2","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test:runner":"mocha --require setup-env --require test/mock.js test/*.test.js","test:watch":"npm run test:runner -- --watch","test":"npm run test:runner","build":"babel ./index.js -d ./lib && babel ./compatibility/*.js -d ./lib/compatibility","postinstall":"node ./compatibility/detect.js","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rd-Eden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rd-Eden/storage-engine/issues"},"homepage":"https://github.com/3rd-Eden/storage-engine#readme","dependencies":{"diagnostics":"^2.0.0","enabled":"^2.0.0","eventemitter3":"^3.1.0"},"peerDependencies":{"react-native":"*"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.5","@babel/plugin-proposal-object-rest-spread":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/register":"^7.0.0","@react-native-community/async-storage":"^1.3.1","assume":"^2.1.0","asyncstorageapi":"^1.0.0","mocha":"^5.2.0","react-native":"^0.59.4","require-poisoning":"^1.0.0","setup-env":"^1.2.1"},"gitHead":"62a302e6213d553952f0085ae5e7ac0a6d738da6","_id":"storage-engine@3.0.2","_npmVersion":"6.4.0","_nodeVersion":"8.11.4","_npmUser":{"name":"3rdeden","email":"npm@3rd-Eden.com"},"dist":{"shasum":"a33f4285ce07bc82152ad2ba67bc40c1384f14ef","size":12908,"noattachment":false,"key":"/storage-engine/-/storage-engine-3.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-3.0.2.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_3.0.2_1557338800353_0.24284209545733182"},"_hasShrinkwrap":false,"publish_time":1557338800464,"_cnpm_publish_time":1557338800464},"3.0.1":{"name":"storage-engine","version":"3.0.1","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test:runner":"mocha --require setup-env --require test/mock.js test/*.test.js","test:watch":"npm run test:runner -- --watch","test":"npm run test:runner","build":"babel ./index.js -d ./lib && babel ./compatibility/*.js -d ./lib/compatibility","postinstall":"node ./compatibility/detect.js","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rd-Eden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rd-Eden/storage-engine/issues"},"homepage":"https://github.com/3rd-Eden/storage-engine#readme","dependencies":{"diagnostics":"^2.0.0","enabled":"^2.0.0","eventemitter3":"^3.1.0"},"peerDependencies":{"react-native":"*"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.5","@babel/plugin-proposal-object-rest-spread":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/register":"^7.0.0","@react-native-community/async-storage":"^1.3.1","assume":"^2.1.0","asyncstorageapi":"^1.0.0","mocha":"^5.2.0","react-native":"^0.59.4","require-poisoning":"^1.0.0","setup-env":"^1.2.1"},"gitHead":"0299bd5f1b7e9dd99929434bbd1d4fa7931d9f88","_id":"storage-engine@3.0.1","_npmVersion":"6.4.0","_nodeVersion":"8.11.4","_npmUser":{"name":"3rdeden","email":"npm@3rd-Eden.com"},"dist":{"shasum":"dfcd1e1d1aa234db268f2112e88e98c012e29ebc","size":12624,"noattachment":false,"key":"/storage-engine/-/storage-engine-3.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-3.0.1.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_3.0.1_1557085611067_0.014381223234394724"},"_hasShrinkwrap":false,"publish_time":1557085611174,"_cnpm_publish_time":1557085611174},"3.0.0":{"name":"storage-engine","version":"3.0.0","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test:runner":"mocha --require setup-env --require test/mock.js test/*.test.js","test:watch":"npm run test:runner -- --watch","test":"npm run test:runner","build":"babel ./index.js -d ./lib && babel ./compatibility/*.js -d ./lib/compatibility","postinstall":"node ./compatibility/detect.js","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rd-Eden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rd-Eden/storage-engine/issues"},"homepage":"https://github.com/3rd-Eden/storage-engine#readme","dependencies":{"diagnostics":"^2.0.0","enabled":"^2.0.0","eventemitter3":"^3.1.0"},"peerDependencies":{"react-native":"*"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.5","@babel/plugin-proposal-object-rest-spread":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/register":"^7.0.0","@react-native-community/async-storage":"^1.3.1","assume":"^2.1.0","asyncstorageapi":"^1.0.0","mocha":"^5.2.0","react-native":"^0.59.4","require-poisoning":"^1.0.0","setup-env":"^1.2.1"},"gitHead":"30f914a9d97858c8aef38a03916ae5433d42ef1a","_id":"storage-engine@3.0.0","_npmVersion":"6.4.0","_nodeVersion":"8.11.4","_npmUser":{"name":"3rdeden","email":"npm@3rd-Eden.com"},"dist":{"shasum":"01138ac1c9424f3f42f1a992ed84c7f074d7f726","size":17720,"noattachment":false,"key":"/storage-engine/-/storage-engine-3.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-3.0.0.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_3.0.0_1557083482029_0.28892828617966315"},"_hasShrinkwrap":false,"publish_time":1557083482154,"_cnpm_publish_time":1557083482154},"2.0.1":{"name":"storage-engine","version":"2.0.1","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test":"mocha --require setup-env --require test/mock.js test/*.test.js","build":"babel ./index.js -d ./lib","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rd-Eden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rd-Eden/storage-engine/issues"},"homepage":"https://github.com/3rd-Eden/storage-engine#readme","dependencies":{"eventemitter3":"^3.1.0"},"peerDependencies":{"react-native":"*"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.5","@babel/plugin-proposal-object-rest-spread":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/register":"^7.0.0","assume":"^2.1.0","mocha":"^5.2.0","react-native":"^0.57.4","setup-env":"^1.2.1"},"gitHead":"db8c26497e726c6f47376d3d4aa82c0fc0dcedcc","_id":"storage-engine@2.0.1","_npmVersion":"6.4.0","_nodeVersion":"8.11.4","_npmUser":{"name":"3rdeden","email":"npm@3rd-Eden.com"},"dist":{"shasum":"fae87aac3078133f31628b1d187f4212e3bf08af","size":4248,"noattachment":false,"key":"/storage-engine/-/storage-engine-2.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-2.0.1.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_2.0.1_1545653614683_0.39241248808370144"},"_hasShrinkwrap":false,"publish_time":1545653614791,"_cnpm_publish_time":1545653614791},"2.0.0":{"name":"storage-engine","version":"2.0.0","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test":"mocha --require setup-env --require test/mock.js test/*.test.js","build":"babel ./index.js -d ./lib","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rdEden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rdEden/storage-engine/issues"},"homepage":"https://github.com/3rdEden/storage-engine#readme","dependencies":{"eventemitter3":"^3.1.0"},"peerDependencies":{"react-native":"*"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.5","@babel/plugin-proposal-object-rest-spread":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/register":"^7.0.0","assume":"^2.1.0","mocha":"^5.2.0","react-native":"^0.57.4","setup-env":"^1.2.1"},"gitHead":"038e406c6dd5bca023f59576d22787916a129fc5","_id":"storage-engine@2.0.0","_npmVersion":"6.4.0","_nodeVersion":"8.11.4","_npmUser":{"name":"3rdeden","email":"npm@3rd-Eden.com"},"dist":{"shasum":"872008d78f5ff7a14cce220372553a01253750e4","size":4205,"noattachment":false,"key":"/storage-engine/-/storage-engine-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-2.0.0.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_2.0.0_1544100594433_0.3560080034701192"},"_hasShrinkwrap":false,"publish_time":1544100594524,"_cnpm_publish_time":1544100594524},"1.0.1":{"name":"storage-engine","version":"1.0.1","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","react-native":"index.js","main":"lib/index.js","scripts":{"test":"mocha --require setup-env --require test/mock.js test/*.test.js","build":"babel ./index.js -d ./lib","prepublishOnly":"npm run build"},"repository":{"type":"git","url":"git+https://github.com/3rdEden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rdEden/storage-engine/issues"},"homepage":"https://github.com/3rdEden/storage-engine#readme","dependencies":{"eventemitter3":"^3.1.0"},"peerDependencies":{"react-native":"*"},"devDependencies":{"@babel/cli":"^7.1.5","@babel/core":"^7.1.5","@babel/plugin-proposal-object-rest-spread":"^7.0.0","@babel/preset-env":"^7.1.5","@babel/register":"^7.0.0","assume":"^2.1.0","mocha":"^5.2.0","react-native":"^0.57.4","setup-env":"^1.2.1"},"gitHead":"5924ecd66f406d9cb2142a85f7c0148bb161eded","_id":"storage-engine@1.0.1","_npmVersion":"6.4.0","_nodeVersion":"8.11.4","_npmUser":{"name":"3rdeden","email":"npm@3rd-Eden.com"},"dist":{"shasum":"60167e146982ef67fb6f88c2a5a877690ad88fb3","size":3756,"noattachment":false,"key":"/storage-engine/-/storage-engine-1.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-1.0.1.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_1.0.1_1542133959006_0.372012722648976"},"_hasShrinkwrap":false,"publish_time":1542133959121,"_cnpm_publish_time":1542133959121},"1.0.0":{"name":"storage-engine","version":"1.0.0","description":"EventEmitter abstraction on top the React-Native AsyncStorage API","main":"index.js","scripts":{"test":"mocha --require setup-env --require test/mock.js test/*.test.js"},"repository":{"type":"git","url":"git+https://github.com/3rdEden/storage-engine.git"},"keywords":["async","storage","emitter","asyncstorage","react","react-native","native","engine"],"author":{"name":"Arnout Kazemier"},"license":"MIT","bugs":{"url":"https://github.com/3rdEden/storage-engine/issues"},"homepage":"https://github.com/3rdEden/storage-engine#readme","dependencies":{"eventemitter3":"^3.1.0"},"peerDependencies":{"react-native":"*"},"devDependencies":{"@babel/core":"^7.1.2","@babel/preset-env":"^7.1.0","@babel/register":"^7.0.0","assume":"^2.1.0","mocha":"^5.2.0","react-native":"^0.57.4","setup-env":"^1.2.1"},"gitHead":"285b195ad683a78fb68c9f37b5aeb59dfad46912","_id":"storage-engine@1.0.0","_npmVersion":"6.4.0","_nodeVersion":"8.11.4","_npmUser":{"name":"3rdeden","email":"npm@3rd-Eden.com"},"dist":{"shasum":"ba13c052011a3ab7173be55a65071a06031cbfa6","size":3266,"noattachment":false,"key":"/storage-engine/-/storage-engine-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/storage-engine/download/storage-engine-1.0.0.tgz"},"maintainers":[{"name":"3rdeden","email":"npm@3rd-Eden.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/storage-engine_1.0.0_1541444420412_0.1425209950326627"},"_hasShrinkwrap":false,"publish_time":1541444420620,"_cnpm_publish_time":1541444420620}},"readme":"# storage-engine\n\nThe `storage-engine` module is an high level abstraction for React-Native's\nAsyncStorage. It allows you to easily customize the AsyncStorage using\nplugins. These plugins can be applied to all keys, or just specific key patterns\ngiving you immense flexibility in the storage layer that you're creating.\n\n## Installation\n\nThe package is released in the public npm registry and can be installed\nby running:\n\n```sh\nnpm install --save storage-engine\n```\n\nThe `AsyncStorage` API has been moved to the React-Native Community as part\nof their lean-core initiative and should now be installed as separate package:\n\n```sh\nnpm install --save @react-native-community/async-storage\nreact-native link @react-native-community/async-storage\n```\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Usage](#usage)\n  - [before](#before)\n  - [after](#after)\n  - [plugin](#plugin)\n    - [Plugin API](#plugin-api)\n  - [destroy](#destroy)\n  - [api](#api)\n  - [getItem](#getitem)\n  - [setItem](#setitem)\n  - [removeItem](#removeitem)\n  - [mergeItem](#mergeitem)\n  - [clear](#clear)\n  - [getAllKeys](#getallkeys)\n  - [flushGetRequests](#flushgetrequests)\n  - [multiGet](#multiget)\n  - [multiSet](#multiset)\n  - [multiMerge](#multimerge)\n  - [multiRemove](#multiremove)\n- [License](#license)\n\n## Usage\n\n```js\nimport storage, { StorageEngine } from 'storage-engine';\n```\n\nWe export a pre-initialized `StorageEngine` class by default so you can use\nthe API directly when you import the module. If you wish, you can create your\nown instance by initializing a new `StorageEngine` class.\n\nThe storage instance has the following methods:\n\n- [before](#before)\n- [after](#after)\n- [plugin](#plugin)\n- [destroy](#destroy)\n- [api](#api)\n\nEnhanced `AsyncStorage` methods:\n\n- [getItem](#getitem)\n- [setItem](#setitem)\n- [removeItem](#removeitem)\n- [mergeItem](#mergeitem)\n- [clear](#clear)\n- [getAllKeys](#getallkeys)\n- [flushGetRequests](#flushgetrequests)\n- [multiGet](#multiget)\n- [multiSet](#multiset)\n- [multiMerge](#multimerge)\n- [multiRemove](#multiremove)\n\n### before\n\nThe `before` method allows you to **pre-process any AsyncStorage API call**.\nYou can intercept the request, change values, or even change keys. Want to merge\ndata with an remote data source? We gotchu, want to cancel a request, hell yeah.\n\n```js\nimport storage from 'storage-engine';\n\nstorage.before('key*, another, more*', {\n  setItem: function ({ key, value, method }) {\n    console.log(method);  // setItem\n    console.log(key);     // key-here\n    console.log(value);   // bar\n\n    return {\n      value: 'Completely different value'\n    }\n  }\n});\n\nstorage.after('*', {\n  setItem: function ({ key, value, method }) {\n    console.log(method);  // setItem\n    console.log(key);     // key-here\n    console.log(value);   // Completely different value\n  },\n  getItem: function ({ key, value, method }) {\n    console.log(method);  // getItem\n    console.log(key);     // key-here\n    console.log(value);   // undefined\n  }\n})\n\nawait storage.setItem('key-here', 'bar');\nconst value = await storage.getItem('key-here');\n\nconsole.log(value);   // Completely different value\n```\n\nIn the example above, we've added a before hook that is triggered when the\n`setItem` api is called. We can see which key is used, and which value would\nbe assigned. We've then returned a completely different value from the hook\nwhich would be stored instead of the original provided value.\n\nThe `before` method accepts the following arguments:\n\n- **`key`** A pattern of keys that would need to trigger the assigned `before`\n  method. It can be `key1, key1, another-key` or use the `*` wildcard for all\n  keys, or even a combination `key*, another-key, *bar`, which would match\n  `key1`, `key0afaf`, `another-key`, `foobar`, `bbar` etc.\n- **`methods`** An object where the key's are the names of the methods you\n  would like to pre-process, and the value the `(async)function` that would\n  handle the pre-processing. If you supply a `(async)function` instead of an\n  object, it would be called for all available methods.\n- **`options`** Additional options:\n  - `order`: Allows you control the order of execution of your function, placing\n    before or after other added methods in the execution chain. The order is\n    set by default to `100` if no option is provided. The higher value, the\n    important it is to execute this function early. So a `9000` will be executed\n    before a order `100` and an order of `0` would be executed last.\n\n### After\n\nExactly the same interface as `before`, but instead of **pre processing** this\nmethod allows you to **post process** the response of the AsyncStorage API\ncall.\n\nSee [before](#before) for API and example.\n\n### plugin\n\nThe plugin API allows you to load any custom plugin that can enhance your\nstorage instance. A plugin is basically an `(async) function` that is executed\nwith a bunch of plugin helper functions.\n\n```js\nimport storage from 'storage-engine';\nimport { expire } from 'storage-modifiers';\n\nstorage.use('token*', expire, {\n  duration: '30 minutes'\n});\n\nstorage.use('pattern*', async function example(plugin) {\n  const { before, after, destroy, options } = plugin;\n\n  //\n  // Main difference here is that plugins don't need to prefix before and\n  // after functions with the pattern, this is done automatically.\n  //\n  before({\n    getItem: () => {}\n  });\n\n  destroy(function () {\n    //\n    // Called when `storage.destroy()` is invoked.\n    //\n  });\n\n  console.log(options); // { options: 'here'}\n}, {\n  options: 'here'\n});\n```\n\nThe plugin API accepts the following arguments:\n\n- `pattern` The key pattern that it should be triggered on.\n- `plugin` The actual plugin which can be an `async` or normal JavaScript\n  function that will be executed with our [Plugin API](#plugin-api).\n- `options` Additional options for the plugin.\n\n>\n> Please note, we do offer default plugins which are available in a separate\n> module, [storage-modifiers](./modifiers) which provides useful features such\n> as:\n>\n> - json: Automatic encoding, and decoding of values\n> - emit: Emits an event when a given key, or method is accessed (configurable)\n> - expire: Expires key/values based on a given TTL\n> - encrypt: Adds an additional layer of protection by encrypting the data you\n>   store.\n>\n\n#### Plugin API\n\nWhen the plugin is executed by the [plugin](#plugin) it will be executed with\nan `object` that contains the following properties and helper functions.\n\n- `before` Reference to the [before](#before) method, but prefixed by default\n  with the `pattern` that was supplied to the plugin.\n- `after` Reference to the [after](#after) method, but prefixed by default\n  with the `pattern` that was supplied to the plugin.\n- `enabled` Function that checks if the passed `key` argument is enabled by\n  the pattern that was supplied to the plugin, returns a boolean, `enabled(key)`.\n- `destroy` Function that allows you to register a (async) clean-up callback\n  which is executed when the [destroy](#destroy) method is called.\n- `pattern` The pattern that was supplied to the [plugin](#plugin) as first\n  argument.\n- `engine` Reference to the initialized storage instance.\n- `options` The options that was supplied to the [plugin](#plugin) as third\n  argument.\n\n### destroy\n\nDestroy the initialized `storage` instance by removing all plugins, before,\nand after hooks. This will call any `destroy` hook that are defined by plugins\nbut it **does not trigger the clear method**, so the data that you stored is\nuntouched.\n\n```js\nimport storage from 'storage-engine';\n\nstorage.before('*', {\n  setItem: () => ({\n    value: 'all your values are this now, lol'\n  })\n});\n\nawait storage.setItem('foo', 'bar');\nawait storage.getItem('foo') // all your values are this now, lol\n\nawait storage.destroy();\n\nawait storage.setItem('foo', 'bar');\nawait storage.getItem('foo') // bar\n```\n\n### api\n\nProvides direct access to the AsyncStorage API that we're wrapping. This API\nwill not execute any of the plugins or before/after modifications that are\nregistered. This is the API we use internally to communicate with `AsyncStorage`.\n\n```js\nimport storage from 'storage-engine';\n\nawait storage.api('setItem', 'foo', 'bar');\n```\n\nThe method accepts the following arguments:\n\n- `method` The name of the method that needs to be executed.\n- `...args` The args that you would have normally passed into the original API.\n\n---\n\nThe rest of the API methods are the API methods that exist on the AsyncStorage\nAPI that is provided by React-Native / React-Native Community. Some of the API\nhave been enhanced to allow a more sensible argument or return format. For\nexample, we only allow the async/await interface instead of an additional 3rd\ncallback argument. We're just gonna go briefly over this API and make the\nassumption that you already have prior knowledge of the existing React-Native\nAsyncStorage API:\n\n---\n\n### getItem\n\nThe `getItem` allows you to retrieve a previously stored value. When the value\ndoes not exist, a `null` will be returned instead.\n\n```js\nconst value = await storage.getItem('key');\nconsole.log(value); // key\n```\n\n- `key` The key of the value you want to retrieve.\n\n### setItem\n\nStores a new item. Yup, that's it.\n\n```js\nawait storage.setItem('key', 'value');\n```\n\n- `key` The key where the value will be stored at.\n- `value` The contents that needs to be stored, should be string, unless\n  a plugin allows you to use a different format.\n\n### removeItem\n\nRemoves the previously stored value.\n\n```js\nawait storage.removeItem('key');\n```\n\n- `key` The key of the value you want to remove.\n\n### mergeItem\n\nMerge the contents of the key, with the supplied value.\n\n```js\nawait storage.mergeItem('key', '{\"json\": \"here\"}');\n```\n\n- `key` The key of the value you want to update.\n- `value` A stringified JSON object that will be merged with the existing value\n\n### clear\n\nRemoves **all** the data that you've stored. Everything. Gone. Forever. Like\nit never existed. This method is officially approved by Thanos.\n\n```js\nawait storage.clear();\n```\n\n### getAllKeys\n\nRetrieve all keys that are stored in the AsyncStorage.\n\n```js\nconst keys = await storage.getAllKeys();\n```\n\n### flushGetRequests\n\nDoes anyone actually this method? Why am I even documenting this.\n\n```js\nawait storage.flushGetRequests();\n```\n\n### multiGet\n\nRetrieves multiple values at once.\n\n```js\nconst [one, two] = await storage.multiGet(['one', 'two']);\n\n// one: { key: one, value: ... }\n// two: { key: two, value: ... }\n```\n\n> The data that is returned by the **multi** API is slightly different, as we've\n> wrapped each item in an object which has `key`, and `value` property.\n\n### multiSet\n\nStore multiple values at once.\n\n```js\nawait storage.multiSet([\n  ['one', 'value'],\n  ['two', 'another value']\n]);\n\n//\n// Also supported:\n//\nawait storage.multiSet([\n  { key: 'one', value: 'value' },\n  { key: 'two', value, 'another value' }\n]);\n```\n\n> The data that is returned by the **multi** API is slightly different, as we've\n> wrapped each item in an object which has `key`, and `value` property.\n\n### multiMerge\n\nMerge multiple values at once.\n\n```js\nawait storage.multiMerge([\n  ['key', '{\"json\": \"blob\"}'],\n  ['another', '{\"cow\": \"moo\"}']\n]);\n\n//\n// Also supported:\n//\nawait storage.multiMerge([\n  { key: 'key', value: '{\"json\": \"blob\"}'},\n  { key: 'another', value: '{\"cow\":\"moo\"}'}\n]);\n```\n\n> The data that is returned by the **multi** API is slightly different, as we've\n> wrapped each item in an object which has `key`, and `value` property.\n\n### multiRemove\n\nThanos multiple keys at once.\n\n```js\nawait storage.multiRemove(['one', 'two']);\n```\n\n> The data that is returned by the **multi** API is slightly different, as we've\n> wrapped each item in an object which has `key`, and `value` property.\n\n## License\n\n[MIT](LICENSE)\n","_attachments":{},"homepage":"https://github.com/3rd-Eden/storage-engine#readme","bugs":{"url":"https://github.com/3rd-Eden/storage-engine/issues"},"license":"MIT"}