UNPKG

2.88 kBJavaScriptView Raw
1'use strict';
2
3var path = require('path');
4
5var when = require('when');
6var nodefn = require('when/node');
7var levelup = require('levelup');
8var memdown = require('memdown');
9var immutable = require('immutable');
10
11var db = levelup('temp-files', {
12 db: memdown,
13 valueEncoding: 'json'
14});
15
16var root = process.browser ? '/' : './';
17
18function tempGet(key, opts, cb){
19 if(typeof opts === 'function'){
20 cb = opts;
21 opts = null;
22 }
23
24 var promise = when.promise(function(resolve, reject){
25 db.get(key, opts, function(err, result){
26 if(err){
27 return reject(err);
28 }
29
30 resolve(result);
31 });
32 });
33
34 return nodefn.bindCallback(promise, cb);
35}
36
37function tempPut(key, value, opts, cb){
38 if(typeof opts === 'function'){
39 cb = opts;
40 opts = null;
41 }
42
43 var promise = when.promise(function(resolve, reject){
44 db.put(key, value, opts, function(err, result){
45 if(err){
46 return reject(err);
47 }
48
49 resolve(result);
50 });
51 });
52
53 return nodefn.bindCallback(promise, cb);
54}
55
56function tempDel(key, opts, cb){
57 if(typeof opts === 'function'){
58 cb = opts;
59 opts = null;
60 }
61
62 var promise = when.promise(function(resolve, reject){
63 db.del(key, opts, function(err, result){
64 if(err){
65 return reject(err);
66 }
67
68 resolve(result);
69 });
70 });
71
72 return nodefn.bindCallback(promise, cb);
73}
74
75function tempNotFound(err){
76 return err.notFound;
77}
78
79function containsFile(directory, filename){
80 if(typeof filename.deref === 'function'){
81 filename = filename.deref();
82 }
83
84 filename = path.basename(filename);
85
86 var contains = directory
87 .map(function(file){
88 return file.get('name');
89 })
90 .contains(filename);
91
92 return contains;
93}
94
95function normalizePath(dirpath, filepath){
96 return path.resolve(dirpath, filepath);
97}
98
99function createFile(filename){
100 return immutable.fromJS({ name: path.basename(filename) });
101}
102
103function createFileWithTemp(filename){
104 var file = createFile(filename);
105
106 return tempGet(filename)
107 .then(function(){
108 return file.set('temp', true);
109 })
110 .catch(tempNotFound, function(){
111 return file.set('temp', false);
112 });
113}
114
115function createFiles(filenames, opts, cb){
116 if(typeof opts === 'function'){
117 cb = opts;
118 opts = {};
119 }
120
121 opts.cwd = opts.cwd || root;
122 opts.checkTemp = opts.checkTemp || false;
123
124 filenames = filenames.map(function(filename){
125 return normalizePath(opts.cwd, filename);
126 });
127
128 var promise;
129 if(opts.checkTemp){
130 promise = when.map(filenames, createFileWithTemp);
131 } else {
132 promise = when.map(filenames, createFile);
133 }
134
135 return nodefn.bindCallback(promise, cb);
136}
137
138module.exports = {
139 root: root,
140 normalizePath: normalizePath,
141 containsFile: containsFile,
142 createFiles: createFiles,
143 temp: {
144 get: tempGet,
145 put: tempPut,
146 del: tempDel,
147 notFound: tempNotFound
148 }
149};