mirror of
https://github.com/amark/gun.git
synced 2025-06-07 14:46:44 +00:00
61 lines
1.5 KiB
JavaScript
61 lines
1.5 KiB
JavaScript
function Store(opt){
|
|
opt = opt || {};
|
|
opt.file = String(opt.file || 'radata');
|
|
|
|
var Gun = require('../gun'), fs = require('fs'), u;
|
|
var store = function Store(){};
|
|
store.put = function(file, data, cb){
|
|
var random = Math.random().toString(36).slice(-3)
|
|
fs.writeFile(opt.file+'-'+random+'.tmp', data, function(err, ok){
|
|
if(err){ return cb(err) }
|
|
move(opt.file+'-'+random+'.tmp', opt.file+'/'+file, cb);
|
|
});
|
|
};
|
|
store.get = function(file, cb){
|
|
fs.readFile(opt.file+'/'+file, function(err, data){
|
|
if(err){
|
|
if('ENOENT' === (err.code||'').toUpperCase()){
|
|
return cb(null);
|
|
}
|
|
Gun.log("ERROR:", err)
|
|
}
|
|
if(data){ data = data.toString() }
|
|
cb(err, data);
|
|
});
|
|
};
|
|
store.list = function(cb, match){
|
|
fs.readdir(opt.file, function(err, dir){
|
|
Gun.obj.map(dir, cb) || cb(); // Stream interface requires a final call to know when to be done.
|
|
});
|
|
};
|
|
if(!fs.existsSync(opt.file)){ fs.mkdirSync(opt.file) }
|
|
//store.list(function(){ return true });
|
|
|
|
function move(oldPath, newPath, cb) {
|
|
fs.rename(oldPath, newPath, function (err) {
|
|
if (err) {
|
|
if (err.code === 'EXDEV') {
|
|
var readStream = fs.createReadStream(oldPath);
|
|
var writeStream = fs.createWriteStream(newPath);
|
|
|
|
readStream.on('error', cb);
|
|
writeStream.on('error', cb);
|
|
|
|
readStream.on('close', function () {
|
|
fs.unlink(oldPath, cb);
|
|
});
|
|
|
|
readStream.pipe(writeStream);
|
|
} else {
|
|
cb(err);
|
|
}
|
|
} else {
|
|
cb();
|
|
}
|
|
});
|
|
};
|
|
|
|
return store;
|
|
}
|
|
|
|
module.exports = Store; |