You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.4 KiB
48 lines
1.4 KiB
5 years ago
|
var util = require('util')
|
||
|
, AbstractLevelDOWN = require('abstract-leveldown').AbstractLevelDOWN
|
||
|
|
||
|
function DeferredLevelDOWN (location) {
|
||
|
AbstractLevelDOWN.call(this, typeof location == 'string' ? location : '') // optional location, who cares?
|
||
|
this._db = undefined
|
||
|
this._operations = []
|
||
|
}
|
||
|
|
||
|
util.inherits(DeferredLevelDOWN, AbstractLevelDOWN)
|
||
|
|
||
|
// called by LevelUP when we have a real DB to take its place
|
||
|
DeferredLevelDOWN.prototype.setDb = function (db) {
|
||
|
this._db = db
|
||
|
this._operations.forEach(function (op) {
|
||
|
db[op.method].apply(db, op.args)
|
||
|
})
|
||
|
}
|
||
|
|
||
|
DeferredLevelDOWN.prototype._open = function (options, callback) {
|
||
|
return process.nextTick(callback)
|
||
|
}
|
||
|
|
||
|
// queue a new deferred operation
|
||
|
DeferredLevelDOWN.prototype._operation = function (method, args) {
|
||
|
if (this._db)
|
||
|
return this._db[method].apply(this._db, args)
|
||
|
this._operations.push({ method: method, args: args })
|
||
|
}
|
||
|
|
||
|
// deferrables
|
||
|
'put get del batch approximateSize'.split(' ').forEach(function (m) {
|
||
|
DeferredLevelDOWN.prototype['_' + m] = function () {
|
||
|
this._operation(m, arguments)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
DeferredLevelDOWN.prototype._isBuffer = function (obj) {
|
||
|
return Buffer.isBuffer(obj)
|
||
|
}
|
||
|
|
||
|
// don't need to implement this as LevelUP's ReadStream checks for 'ready' state
|
||
|
DeferredLevelDOWN.prototype._iterator = function () {
|
||
|
throw new TypeError('not implemented')
|
||
|
}
|
||
|
|
||
|
module.exports = DeferredLevelDOWN
|