var WriteError = require('level-errors').WriteError var promisify = require('./promisify') var getCallback = require('./common').getCallback var getOptions = require('./common').getOptions function Batch (levelup) { this._levelup = levelup this.batch = levelup.db.batch() this.ops = [] this.length = 0 } Batch.prototype.put = function (key, value) { try { this.batch.put(key, value) } catch (e) { throw new WriteError(e) } this.ops.push({ type: 'put', key: key, value: value }) this.length++ return this } Batch.prototype.del = function (key) { try { this.batch.del(key) } catch (err) { throw new WriteError(err) } this.ops.push({ type: 'del', key: key }) this.length++ return this } Batch.prototype.clear = function () { try { this.batch.clear() } catch (err) { throw new WriteError(err) } this.ops = [] this.length = 0 return this } Batch.prototype.write = function (options, callback) { var levelup = this._levelup var ops = this.ops var promise callback = getCallback(options, callback) if (!callback) { callback = promisify() promise = callback.promise } options = getOptions(options) try { this.batch.write(options, function (err) { if (err) { return callback(new WriteError(err)) } levelup.emit('batch', ops) callback() }) } catch (err) { throw new WriteError(err) } return promise } module.exports = Batch