forked from dominictarr/level-sublevel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
89 lines (71 loc) · 2.03 KB
/
index.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
var EventEmitter = require('events').EventEmitter
var next = process.nextTick
var SubDb = require('./sub')
var fixRange = require('level-fix-range')
var Hooks = require('level-hooks')
module.exports = function (_db, options) {
function DB () {}
DB.prototype = _db
var db = new DB()
if (db.sublevel) return db
options = options || {}
//use \xff (255) as the seperator,
//so that sections of the database will sort after the regular keys
var sep = options.sep = options.sep || '\xff'
db._options = options
Hooks(db)
db.sublevels = {}
db.sublevel = function (prefix, options) {
if(db.sublevels[prefix])
return db.sublevels[prefix]
return new SubDb(db, prefix, options || this._options)
}
db.methods = {}
db.prefix = function (key) {
return '' + (key || '')
}
db.pre = function (range, hook) {
if(!hook)
hook = range, range = {
max : sep
}
return db.hooks.pre(range, hook)
}
db.post = function (range, hook) {
if(!hook)
hook = range, range = {
max : sep
}
return db.hooks.post(range, hook)
}
function safeRange(fun) {
return function (opts) {
opts = opts || {}
opts = fixRange(opts)
if(opts.reverse) opts.start = opts.start || sep
else opts.end = opts.end || sep
return fun.call(db, opts)
}
}
db.readStream =
db.createReadStream = safeRange(db.createReadStream)
db.keyStream =
db.createKeyStream = safeRange(db.createKeyStream)
db.valuesStream =
db.createValueStream = safeRange(db.createValueStream)
var batch = db.batch
db.batch = function (changes, opts, cb) {
if(!Array.isArray(changes))
throw new Error('batch must be passed an Array')
changes.forEach(function (e) {
if(e.prefix) {
if('function' === typeof e.prefix.prefix)
e.key = e.prefix.prefix(e.key)
else if('string' === typeof e.prefix)
e.key = e.prefix + e.key
}
})
batch.call(db, changes, opts, cb)
}
return db
}