Socket
Socket
Sign inDemoInstall

keydb

Package Overview
Dependencies
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

keydb - npm Package Compare versions

Comparing version 0.1.2 to 0.1.3

102

lib/drivers/sync-tree-memory.js

@@ -16,2 +16,20 @@ var _ = require('underscore');

var copyNode = function (fromNode, parentNode, key) {
var newNode = {};
if (fromNode.type) {
newNode.type = fromNode.type;
}
newNode.mediaType = fromNode.mediaType;
parentNode.nodes[key] = newNode;
if (fromNode.type === 'collection') {
newNode.nodes = {};
Object.keys(fromNode.nodes).forEach(function (fromKey) {
copyNode(fromNode.nodes[fromKey], newNode, fromKey);
});
} else {
// will not mutate buffer, so no need to copy
newNode.value = fromNode.value;
}
};
var nodeValue = {

@@ -41,3 +59,31 @@ collection: function (node, prefix) {

var meta = function (msg) {
var getLocation = function (key) {
var parentNode = null;
var node = null;
var nodeKey;
if (key === '') {
node = root;
} else {
var keys = key.split('/');
if (keys.length === 1) {
parentNode = root;
node = getNode(parentNode, key);
nodeKey = key;
} else {
var parentKey = keys.slice(0, keys.length - 1).join('/');
parentNode = getNode(root, parentKey);
nodeKey = keys[keys.length - 1];
if (parentNode) {
node = getNode(parentNode, nodeKey);
}
}
}
return {
parent: parentNode,
node: node,
key: nodeKey
};
};
var getMeta = function (msg) {
var node = getNode(root, msg.key);

@@ -61,3 +107,3 @@ if (!node) {

get: function (msg) {
var result = meta(msg);
var result = getMeta(msg);
var node = result.node;

@@ -72,22 +118,6 @@ var prefix = msg.key === '' ? '' : msg.key + '/';

set: function (msg) {
var parentNode = null;
var node = null;
var nodeKey;
if (msg.key === '') {
node = root;
} else {
var keys = msg.key.split('/');
if (keys.length === 1) {
parentNode = root;
node = getNode(parentNode, msg.key);
nodeKey = msg.key;
} else {
var parentKey = keys.slice(0, keys.length - 1).join('/');
parentNode = getNode(root, parentKey);
nodeKey = keys[keys.length - 1];
if (parentNode) {
node = getNode(parentNode, nodeKey);
}
}
}
var loc = getLocation(msg.key);
var parentNode = loc.parent;
var node = loc.node;
var nodeKey = loc.key;
if (!parentNode && node) {

@@ -99,2 +129,6 @@ if (msg.type === 'collection') {

} else if (parentNode && parentNode.nodes) {
if (msg.op === 'delete') {
delete parentNode.nodes[nodeKey];
return;
}
var newNode = {};

@@ -105,3 +139,3 @@ if (msg.type) {

if (msg.type !== 'collection') {
newNode.value = msg.value;
newNode.value = new Buffer(msg.value);
newNode.mediaType = msg.mediaType || 'application/octet-stream';

@@ -117,4 +151,24 @@ } else {

meta: function (msg) {
var result = meta(msg);
var result = getMeta(msg);
return result.msg;
},
delete: function (msg) {
return ops.set(msg);
},
copy: function (msg) {
var fromMeta = getMeta(msg);
var fromNode = fromMeta.node;
var loc = getLocation(msg.toKey);
if (loc.parent) {
if (loc.node) {
ops.set({op: 'delete', key: msg.toKey});
}
copyNode(fromNode, loc.parent, loc.key);
return;
}
throw new error.NotFound({key: msg.key});
},
move: function (msg) {
ops.copy(msg);
ops.set({op: 'delete', key: msg.key});
}

@@ -121,0 +175,0 @@ };

{
"name": "keydb",
"version": "0.1.2",
"version": "0.1.3",
"description": "Key/value data/query API to use on the server and in the browser.",

@@ -5,0 +5,0 @@ "main": "index-server.js",

@@ -42,2 +42,38 @@ var chai = require('chai');

});
it('should copy a value on a collection', function () {
return db({op: 'copy', key: 'users/joe', toKey: 'users/joseph'});
});
it('should get copied value', function () {
return db({op: 'get', key: 'users/joseph'})
.then(function (msg) {
expect(msg.value).to.eql({fn: 'Joe'});
});
});
it('should move a value on a collection', function () {
return db({op: 'move', key: 'users/joseph', toKey: 'users/jack'});
});
it('should get moved value', function () {
return db({op: 'get', key: 'users/jack'})
.then(function (msg) {
expect(msg.value).to.eql({fn: 'Joe'});
});
});
it('should not find moved value at original location', function () {
return expect(db({op: 'get', key: 'users/joseph'})).to.be.rejectedWith(keydb.error.NotFound);
});
it('should copy a collection', function () {
return db({op: 'copy', key: 'users', toKey: 'losers'});
});
it('should find value at new collection', function () {
return db({op: 'get', key: 'losers/jack'})
.then(function (msg) {
expect(msg.value).to.eql({fn: 'Joe'});
});
});
it('should delete a value from a collection', function () {
return db({op: 'delete', key: 'users/joe'});
});
it('should not find a deleted value on a collection', function () {
return expect(db({op: 'get', key: 'users/joe'})).to.be.rejectedWith(keydb.error.NotFound);
});
it('should set a media value on a collection', function () {

@@ -44,0 +80,0 @@ return db({op: 'set', key: 'files', type: 'collection', value: {}}).then(function () {

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