Socket
Socket
Sign inDemoInstall

keyv

Package Overview
Dependencies
Maintainers
1
Versions
57
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

keyv - npm Package Compare versions

Comparing version 0.2.1 to 0.3.0

6

package.json
{
"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);

SocketSocket SOC 2 Logo

Product

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

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc