New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

key-file-storage

Package Overview
Dependencies
Maintainers
1
Versions
29
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

key-file-storage - npm Package Compare versions

Comparing version 1.2.1 to 1.3.1

src/create-cache-limitedbykeynumber.js

299

index.js

@@ -1,130 +0,43 @@

var fs = require("fs-extra");
var path = require("path");
var Q = require("q");
var createCache = require("./src/create-cache");
var createStoragePromise = require("./src/create-storage-promise");
var createStorageSync = require("./src/create-storage-sync");
function keyFileStorage(kvsPath) {
function keyFileStorage(kfsPath, cacheConfig) {
var storage = {},
cache = {};
(cacheConfig === undefined || typeof kfsPath !== 'string') && (cacheConfig = true); // Unlimited cache by default.
if (kvsPath) {
var cache = createCache(cacheConfig),
storagePromise = createStoragePromise(kfsPath, cache),
storageSync = createStorageSync(kfsPath, cache);
storage.save = function(key, value) {
if (value === undefined) {
return storage.delete(key);
}
var file = path.join(kvsPath, key),
deferred = Q.defer();
fs.outputJson(file, value, function(err) {
if (err) {
deferred.reject(err);
}
else {
cache[key] = value;
deferred.resolve();
}
});
return deferred.promise;
};
return {
storage.load = function(key) {
if (cache[key] !== undefined) {
return Q.when(cache[key]);
}
else {
var file = path.join(kvsPath, key),
deferred = Q.defer();
fs.stat(file, function(err, stat) {
if (err || !stat || !stat.isFile()) {
cache[key] = null;
deferred.resolve(null);
}
else {
fs.readJson(file, function(err, value) {
if (err) {
deferred.reject(err);
}
else {
cache[key] = value;
deferred.resolve(value);
}
});
}
});
return deferred.promise;
}
};
// Asynchronous API :
set: set,
get: get,
remove: remove,
clear: clear,
storage.delete = function(key) {
var file = path.join(kvsPath, key),
deferred = Q.defer();
fs.remove(file, function(err) {
if (err) {
deferred.reject(err);
}
else {
delete cache[key];
deferred.resolve();
}
});
return deferred.promise;
};
// Synchronous API :
setSync: storageSync.set,
getSync: storageSync.get,
removeSync: storageSync.remove,
clearSync: storageSync.clear,
storage.reset = function() {
var deferred = Q.defer();
fs.remove(kvsPath, function(err) {
if (err) {
deferred.reject(err);
}
else {
cache = {};
deferred.resolve();
}
});
return deferred.promise;
};
};
}
else /* if (!kvsPath) */ {
storage.save = function(key, value) {
if (value === undefined) {
return storage.delete(key);
}
return Q.when(cache[key] = value);
};
storage.load = function(key) {
return Q.when((cache[key] === undefined) ? null : cache[key]);
};
storage.delete = function(key) {
return Q.fcall(function() {
delete cache[key];
});
};
storage.reset = function() {
cache = {};
return Q.when();
};
}
// return storage; // for test purposes.
function set(key, value, callbackErr /*(err)*/ ) {
return _callbackizePromise(storage.save(key, value), callbackErr);
return _callbackizePromise(storagePromise.set(key, value), callbackErr);
}
function get(key, callbackErrValue /*(err, value)*/ ) {
return _callbackizePromise(storage.load(key), callbackErrValue);
return _callbackizePromise(storagePromise.get(key), callbackErrValue);
}
function remove(key, callbackErr /*(err)*/ ) {
return _callbackizePromise(storage.remove(key), callbackErr);
return _callbackizePromise(storagePromise.remove(key), callbackErr);
}
function clear(callbackErr /*(err)*/ ) {
return _callbackizePromise(storage.reset(), callbackErr);
return _callbackizePromise(storagePromise.clear(), callbackErr);
}

@@ -135,3 +48,3 @@

return promise.then(function(data) {
callback(undefined, data);
return callback(undefined, data);
}, callback);

@@ -144,166 +57,4 @@ }

function setSync(key, value) {
if (value === undefined) {
return removeSync(key);
}
if (kvsPath) {
var file = path.join(kvsPath, key);
fs.outputJsonSync(file, value);
}
return cache[key] = value;
}
function getSync(key) {
if (cache[key] !== undefined) {
return cache[key];
}
if (kvsPath) {
var file = path.join(kvsPath, key);
try {
var stat = fs.statSync(file);
if (!stat || !stat.isFile()) {
return cache[key] = null;
}
return cache[key] = fs.readJsonSync(file);
}
catch (err) {
return cache[key] = null;
}
}
return null;
}
function removeSync(key) {
if (kvsPath) {
var file = path.join(kvsPath, key);
fs.removeSync(file);
}
delete cache[key];
return;
}
function clearSync() {
if (kvsPath) {
fs.removeSync(kvsPath);
}
cache = {};
return;
}
return {
set: set,
get: get,
remove: remove,
clear: clear,
setSync: setSync,
getSync: getSync,
removeSync: removeSync,
clearSync: clearSync,
};
}
module.exports = keyFileStorage;
// var kfs = keyFileStorage( /*'./my/db'*/ );
// kfs.save('alpha', {
// x: 23,
// y: 'df'
// }).then(() => {
// console.log('S alpha')
// kfs.load('alpha').then(value => {
// console.log('L alpha =', value)
// kfs.delete('alpha').then(() => {
// console.log('D alpha')
// kfs.load('beta').then(value => {
// console.log('L beta =', value)
// })
// })
// })
// })
// kfs.save('gamma/datakeys/01', ['asd', 678, 'fgh'])
// .then(() => kfs.load('gamma/datakeys/01'))
// .then(value => {
// console.log('S, L gamma/datakeys/01 =', value)
// })
// .then(() => kfs.delete('gamma/datakeys/01'))
// .then(function() {
// console.log('D gamma/datakeys/01')
// })
// setInterval(()=>{
// Q.when()
// .then(()=>kfs.load('gamma/datakeys/01'))
// .then(value=>{
// console.log('S, L gamma/datakeys/01 =',value)
// })
// },1000)
// var keyFileStorage = require("key-file-storage");
// // To store files on disk
// var kfs = keyFileStorage('/path/to/storage/directory');
// // To store files on memory (useful for test)
// var kfs = keyFileStorage();
// var value = ... // Any JSON-able object
// // Callback form :
// kfs.set('key', value, function(err) {
// if (err) { /*...*/ }
// });
// // Promise form :
// kfs.set('key', value).then(function() {
// // Done!
// }, function(err) {
// // Failed.
// });
// // Callback form :
// kfs.get('key', function(err, value) {
// if (err) { /*...*/ }
// else { /* Do something with value ... */ }
// });
// // Promise form :
// kfs.g('key').then(function(value) {
// // Done!
// }, function(err) {
// // Failed.
// });
// // Callback form :
// kfs.remove('key', function(err) {
// if (err) { /*...*/ }
// });
// // Promise form :
// kfs.remove('key').then(function() {
// // Done!
// }, function(err) {
// // Failed.
// });
// // Callback form :
// kfs.clear(function(err) {
// if (err) { /*...*/ }
// });
// // Promise form :
// kfs.clear().then(function() {
// // Done!
// }, function(err) {
// // Failed.
// });
{
"name": "key-file-storage",
"version": "1.2.1",
"version": "1.3.1",
"description": "Simple cached key-value Node.js storage directly on file system, maps each key to JSON contents of a file.",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
"test": "node test.js"
},

@@ -25,5 +25,7 @@ "repository": {

"dependencies": {
"fs-extra": "^0.30.0",
"q": "^1.4.1"
"fs-extra": "^0.30.0"
},
"devDependencies": {
"lodash": "^4.16.4"
}
}

@@ -12,3 +12,3 @@ # key-file-storage

```sh
$ npm install --save key-file-storage
$ npm install key-file-storage
```

@@ -23,2 +23,5 @@

// To store files on disk
var kfs = keyFileStorage('/path/to/storage/directory', cacheConfig);
// To store files on disk (using unlimited cache)
var kfs = keyFileStorage('/path/to/storage/directory');

@@ -30,2 +33,10 @@

+ Cache configuration :
`cacheConfig` can be on of the following values :
1. `true` (_by default_) : Unlimited cache, anything will be cached on memory, good for small data volumes.
2. `false` : No cache, read the files from disk every time, good when other applications can modify the files' contents at anytime.
3. `n` (_An integer number_) : Limited cache, only the `n` latest referred key-values will be cached, good for large data volumes where only a fraction of data is being used frequently .
## Usage

@@ -32,0 +43,0 @@

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