Comparing version 0.3.1 to 0.4.0
{ | ||
"name": "keyv", | ||
"version": "0.3.1", | ||
"version": "0.4.0", | ||
"description": "Simple key/value store with support for multiple backends", | ||
@@ -39,5 +39,6 @@ "main": "src/index.js", | ||
"eslint-config-xo-lukechilds": "^1.0.0", | ||
"keyv-api-tests": "*", | ||
"get-root-module": "^0.1.3", | ||
"keyv-mongo": "*", | ||
"keyv-redis": "*", | ||
"keyv-test-suite": "*", | ||
"nyc": "^10.3.2", | ||
@@ -44,0 +45,0 @@ "xo": "^0.19.0" |
@@ -14,7 +14,3 @@ 'use strict'; | ||
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 (require(adapters[adapter]))(opts); | ||
} | ||
@@ -28,3 +24,3 @@ return new Map(); | ||
this.opts = Object.assign( | ||
{}, | ||
{ namespace: 'keyv' }, | ||
(typeof uri === 'string') ? { uri } : uri, | ||
@@ -35,8 +31,19 @@ opts | ||
if (!this.opts.store) { | ||
const adapterOpts = Object.assign({ keyv: this }, this.opts); | ||
const adapterOpts = Object.assign({}, this.opts); | ||
this.opts.store = loadStore(adapterOpts); | ||
} | ||
if (typeof this.opts.store.on === 'function') { | ||
this.opts.store.on('error', err => this.emit('error', err)); | ||
} | ||
this.opts.store.namespace = this.opts.namespace; | ||
} | ||
_getKeyPrefix(key) { | ||
return `${this.opts.namespace}:${key}`; | ||
} | ||
get(key) { | ||
key = this._getKeyPrefix(key); | ||
const store = this.opts.store; | ||
@@ -57,2 +64,3 @@ return Promise.resolve(store.get(key)).then(data => { | ||
set(key, value, ttl) { | ||
key = this._getKeyPrefix(key); | ||
ttl = ttl || this.opts.ttl; | ||
@@ -73,2 +81,3 @@ const store = this.opts.store; | ||
delete(key) { | ||
key = this._getKeyPrefix(key); | ||
const store = this.opts.store; | ||
@@ -75,0 +84,0 @@ return Promise.resolve(store.delete(key)); |
import test from 'ava'; | ||
import delay from 'delay'; | ||
import keyvApiTests from 'keyv-api-tests'; | ||
import Keyv from '../'; | ||
import keyvTestSuite from 'keyv-test-suite'; | ||
import Keyv from 'get-root-module'; | ||
@@ -15,5 +15,6 @@ test('Keyv is a class', t => { | ||
const keyv = new Keyv({ store }); | ||
t.is(store.size, 0); | ||
await keyv.set('foo', 'bar'); | ||
t.is(await keyv.get('foo'), 'bar'); | ||
t.true(store.has('foo')); | ||
t.is(store.size, 1); | ||
}); | ||
@@ -66,3 +67,3 @@ | ||
const store = new Map(); | ||
keyvApiTests(test, Keyv, store); | ||
const store = () => new Map(); | ||
keyvTestSuite(test, Keyv, store); |
import test from 'ava'; | ||
import keyvApiTests from 'keyv-api-tests'; | ||
import Keyv from '../../'; | ||
import keyvTestSuite, { keyvOfficialTests } from 'keyv-test-suite'; | ||
import Keyv from 'get-root-module'; | ||
test('connection string automatically requires module', async t => { | ||
const keyv = new Keyv('mongodb://127.0.0.1:27017'); | ||
await keyv.set('foo', 'bar'); | ||
t.is(await keyv.get('foo'), 'bar'); | ||
}); | ||
keyvOfficialTests(test, Keyv, 'mongodb://127.0.0.1:27017', 'mongodb://127.0.0.1:1234'); | ||
test.cb('connection errors are emitted', t => { | ||
const keyv = new Keyv('mongodb://127.0.0.1:1234'); | ||
keyv.on('error', () => { | ||
t.pass(); | ||
t.end(); | ||
}); | ||
}); | ||
const store = new (require('keyv-mongo'))('mongodb://127.0.0.1:27017'); // eslint-disable-line import/newline-after-import | ||
keyvApiTests(test, Keyv, store); | ||
const store = () => new (require('keyv-mongo'))('mongodb://127.0.0.1:27017'); // eslint-disable-line import/newline-after-import | ||
keyvTestSuite(test, Keyv, store); |
import test from 'ava'; | ||
import keyvApiTests from 'keyv-api-tests'; | ||
import Keyv from '../../'; | ||
import keyvTestSuite, { keyvOfficialTests } from 'keyv-test-suite'; | ||
import Keyv from 'get-root-module'; | ||
test('connection string automatically requires module', async t => { | ||
const keyv = new Keyv('redis://localhost'); | ||
await keyv.set('foo', 'bar'); | ||
t.is(await keyv.get('foo'), 'bar'); | ||
}); | ||
keyvOfficialTests(test, Keyv, 'redis://localhost', 'redis://foo'); | ||
test.cb('connection errors are emitted', t => { | ||
const keyv = new Keyv('redis://foo'); | ||
keyv.on('error', () => { | ||
t.pass(); | ||
t.end(); | ||
}); | ||
}); | ||
const store = new (require('keyv-redis'))('redis://localhost'); // eslint-disable-line import/newline-after-import | ||
keyvApiTests(test, Keyv, store); | ||
const store = () => new (require('keyv-redis'))('redis://localhost'); // eslint-disable-line import/newline-after-import | ||
keyvTestSuite(test, Keyv, store); |
8979
10
148