-
Notifications
You must be signed in to change notification settings - Fork 6
/
storage.js
47 lines (39 loc) · 1.01 KB
/
storage.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
var levelup = require('level')
var generateID = require('./gen-id')
var lift = require('when/node/function').lift
var when = require('when')
var db = levelup(process.env.HOME + '/.pushnot.db')
var put = lift(db.put.bind(db))
var get = lift(db.get.bind(db))
exports.push = function(data) {
var id = generateID()
return put('d-' + id, data)
.then(function() { return put('m-latest', id) })
.then(function() { return id })
}
exports.latest = function() {
return get('m-latest')
}
exports.get = function(id) {
return get('d-' + id)
}
exports.after = function(id) {
var startKey = 'd-' + id
return when.promise(function(resolve, reject) {
var stream = db.createReadStream({
start: startKey,
end: 'e'
})
var out = []
stream.on('data', function(c) {
if (c.key <= startKey) return
out.push({ key: c.key.substr(2), value: c.value })
})
stream.on('end', function() {
resolve(out)
})
stream.on('error', function(err) {
reject(err)
})
})
}