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