Socket
Socket
Sign inDemoInstall

keyv

Package Overview
Dependencies
0
Maintainers
1
Versions
52
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 0.0.0 to 0.1.0

test/api.js

7

package.json
{
"name": "keyv",
"version": "0.0.0",
"version": "0.1.0",
"description": "Simple key/value store with support for multiple backends",

@@ -10,2 +10,5 @@ "main": "src/index.js",

},
"xo": {
"extends": "xo-lukechilds"
},
"repository": {

@@ -32,2 +35,4 @@ "type": "git",

"coveralls": "^2.13.1",
"delay": "^2.0.0",
"eslint-config-xo-lukechilds": "^1.0.0",
"nyc": "^10.3.2",

@@ -34,0 +39,0 @@ "xo": "^0.19.0"

'use strict';
class keyv {}
class Keyv {
constructor(opts) {
this.opts = opts || {};
this.opts.store = this.opts.store || new Map();
}
module.exports = keyv;
get(key) {
return Promise.resolve(this.opts.store.get(key)).then(data => {
if (!data) {
return undefined;
}
if (!this.opts.store.ttlSupport && Date.now() > data.expires) {
this.delete(key);
return undefined;
}
return this.opts.store.ttlSupport ? data : data.value;
});
}
set(key, value, ttl) {
ttl = ttl || this.opts.ttl;
let set;
if (this.opts.store.ttlSupport) {
set = this.opts.store.set(key, value, ttl);
} else {
const expires = (typeof ttl === 'number') ? (Date.now() + ttl) : undefined;
const data = { value, expires };
set = this.opts.store.set(key, data);
}
return Promise.resolve(set).then(() => value);
}
delete(key) {
return Promise.resolve(this.opts.store.delete(key));
}
}
module.exports = Keyv;
import test from 'ava';
import keyv from '../';
import delay from 'delay';
import Keyv from '../';
test('keyv is a function', t => {
t.is(typeof keyv, 'function');
test('Keyv is a class', t => {
t.is(typeof Keyv, 'function');
t.throws(() => Keyv()); // eslint-disable-line new-cap
t.notThrows(() => new Keyv());
});
test('Keyv accepts storage adapters', async t => {
const store = new Map();
const keyv = new Keyv({ store });
await keyv.set('foo', 'bar');
t.is(await keyv.get('foo'), 'bar');
t.true(store.has('foo'));
});
test('Keyv hands tll functionality over to ttl supporting stores', async t => {
t.plan(4);
const store = new Map();
store.ttlSupport = true;
const storeSet = store.set;
store.set = (key, val, ttl) => {
t.is(ttl, 100);
storeSet.call(store, key, val, ttl);
};
const keyv = new Keyv({ store });
await keyv.set('foo', 'bar', 100);
t.is(await keyv.get('foo'), 'bar');
t.is(store.get('foo'), 'bar');
await delay(100);
t.is(await keyv.get('foo'), 'bar');
});
test('Keyv respects default tll option', async t => {
const store = new Map();
const keyv = new Keyv({ store, ttl: 100 });
await keyv.set('foo', 'bar');
t.is(await keyv.get('foo'), 'bar');
await delay(100);
t.is(await keyv.get('foo'), undefined);
});
test('.set(key, val, ttl) overwrites default tll option', async t => {
const store = new Map();
const keyv = new Keyv({ store, ttl: 100 });
await keyv.set('foo', 'bar');
await keyv.set('fizz', 'buzz', 50);
await keyv.set('ping', 'pong', 150);
t.is(await keyv.get('foo'), 'bar');
t.is(await keyv.get('fizz'), 'buzz');
t.is(await keyv.get('ping'), 'pong');
await delay(50);
t.is(await keyv.get('foo'), 'bar');
t.is(await keyv.get('fizz'), undefined);
t.is(await keyv.get('ping'), 'pong');
await delay(50);
t.is(await keyv.get('foo'), undefined);
t.is(await keyv.get('ping'), 'pong');
await delay(50);
t.is(await keyv.get('ping'), undefined);
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc