-
Notifications
You must be signed in to change notification settings - Fork 1
/
local.js
60 lines (50 loc) · 2.11 KB
/
local.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
'use strict';
var uuid = require('node-uuid');
var fs = require('fs');
var streamUtils = require('./streamUtils');
var _ = require('lodash');
var assert = require('assert');
module.exports.init = function(config) {
var _config = _.merge({
bucketDir: './local_storage',
extension: ''
}, config);
return {
store: function(data, bucketDir, dir, filename, callback) {
var callback = callback || filename || dir || bucketDir;
var dir = ((typeof(dir) == 'function') || (dir === undefined)) ? _config.dir : dir;
var bucketDir = ((typeof(bucketDir) == 'function') || (bucketDir === undefined)) ? _config.bucketDir : bucketDir;
var extension = _config.extension + ((_config.compression)? '.gz' : '');
var filename = ((typeof(filename) == 'function') || (filename === undefined)) ? (uuid.v4() + extension) : filename;
var path = _.join((dir)? [bucketDir, dir, filename] : [bucketDir, filename], '/');
assert.ok(callback, 'callback missing.');
assert.ok(bucketDir, 'missing bucket dir');
assert.ok(filename, 'missing filename ');
var splitPath = _.split(path, '/');
_(_.map(
_.range(splitPath.length-1),
(i) => {return _.join(_.slice(splitPath,0,i+1), '/')}
)).forEach( (folder) => {
if (!fs.existsSync(folder)) {
fs.mkdirSync(folder);
}
});
var writeStream = fs.createWriteStream('./' + path);
streamUtils.writeToStorageStream(data, writeStream, _config.compression, () => {
callback(path);
});
},
retrieve: function(path, callback) {
var readStream = fs.createReadStream(path);
var compression = path.endsWith('.gz');
streamUtils.readFromStorageStream(readStream, compression, function(data) {
callback(data);
});
},
delete: function(path, callback) {
var cb = callback || _.noop;
fs.unlink(path);
cb();
}
}
}