Comparing version 0.2.1 to 0.3.0
{ | ||
"name": "keyv", | ||
"version": "0.2.1", | ||
"version": "0.3.0", | ||
"description": "Simple key/value store with support for multiple backends", | ||
@@ -30,3 +30,5 @@ "main": "src/index.js", | ||
"homepage": "https://github.com/lukechilds/keyv", | ||
"dependencies": {}, | ||
"dependencies": { | ||
"json-buffer": "^3.0.0" | ||
}, | ||
"devDependencies": { | ||
@@ -33,0 +35,0 @@ "ava": "^0.19.1", |
'use strict'; | ||
class Keyv { | ||
constructor(opts) { | ||
this.opts = opts || {}; | ||
this.opts.store = this.opts.store || new Map(); | ||
const EventEmitter = require('events').EventEmitter; | ||
const JSONB = require('json-buffer'); | ||
const loadStore = opts => { | ||
const adapters = { | ||
redis: 'keyv-redis', | ||
mongodb: 'keyv-mongo', | ||
mongo: 'keyv-mongo' | ||
}; | ||
if (opts.adapter || opts.uri) { | ||
const adapter = opts.adapter || /^[^:]*/.exec(opts.uri)[0]; | ||
try { | ||
return new (require(adapters[adapter]))(opts); | ||
} catch (err) { | ||
throw new Error(`Can't find "${adapter}" storage adapter. Is it officially supported by Keyv?`); | ||
} | ||
} | ||
return new Map(); | ||
}; | ||
class Keyv extends EventEmitter { | ||
constructor(uri, opts) { | ||
super(); | ||
this.opts = Object.assign( | ||
{}, | ||
(typeof uri === 'string') ? { uri } : uri, | ||
opts | ||
); | ||
if (!this.opts.store) { | ||
const adapterOpts = Object.assign({ keyv: this }, this.opts); | ||
this.opts.store = loadStore(adapterOpts); | ||
} | ||
} | ||
get(key) { | ||
const store = this.opts.store; | ||
return Promise.resolve(store.get(key)).then(data => { | ||
data = (typeof data === 'string') ? JSONB.parse(data) : data; | ||
if (data === undefined) { | ||
@@ -26,11 +56,12 @@ return undefined; | ||
const store = this.opts.store; | ||
let set; | ||
if (store.ttlSupport) { | ||
set = store.set(key, value, ttl); | ||
} else { | ||
const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null; | ||
const data = { value, expires }; | ||
set = store.set(key, data); | ||
} | ||
return Promise.resolve(set).then(() => value); | ||
return Promise.resolve() | ||
.then(() => { | ||
if (!store.ttlSupport) { | ||
const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : null; | ||
value = { value, expires }; | ||
} | ||
return store.set(key, JSONB.stringify(value), ttl); | ||
}) | ||
.then(() => true); | ||
} | ||
@@ -37,0 +68,0 @@ |
@@ -24,3 +24,3 @@ import test from 'ava'; | ||
test('Keyv hands tll functionality over to ttl supporting stores', async t => { | ||
t.plan(4); | ||
t.plan(3); | ||
const store = new Map(); | ||
@@ -36,3 +36,2 @@ store.ttlSupport = true; | ||
t.is(await keyv.get('foo'), 'bar'); | ||
t.is(store.get('foo'), 'bar'); | ||
await delay(100); | ||
@@ -60,3 +59,3 @@ t.is(await keyv.get('foo'), 'bar'); | ||
t.is(await keyv.get('ping'), 'pong'); | ||
await delay(50); | ||
await delay(60); | ||
t.is(await keyv.get('foo'), 'bar'); | ||
@@ -63,0 +62,0 @@ t.is(await keyv.get('fizz'), undefined); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
7823
129
1
1
+ Addedjson-buffer@^3.0.0
+ Addedjson-buffer@3.0.1(transitive)