| import toPromise from './toPromise'; |
| import getArguments from 'argsarray'; |
| import debug from 'debug'; |
| var log = debug('pouchdb:api'); |
| |
| function adapterFun(name, callback) { |
| function logApiCall(self, name, args) { |
| /* istanbul ignore if */ |
| if (log.enabled) { |
| var logArgs = [self.name, name]; |
| for (var i = 0; i < args.length - 1; i++) { |
| logArgs.push(args[i]); |
| } |
| log.apply(null, logArgs); |
| |
| // override the callback itself to log the response |
| var origCallback = args[args.length - 1]; |
| args[args.length - 1] = function (err, res) { |
| var responseArgs = [self.name, name]; |
| responseArgs = responseArgs.concat( |
| err ? ['error', err] : ['success', res] |
| ); |
| log.apply(null, responseArgs); |
| origCallback(err, res); |
| }; |
| } |
| } |
| |
| return toPromise(getArguments(function (args) { |
| if (this._closed) { |
| return Promise.reject(new Error('database is closed')); |
| } |
| if (this._destroyed) { |
| return Promise.reject(new Error('database is destroyed')); |
| } |
| var self = this; |
| logApiCall(self, name, args); |
| if (!this.taskqueue.isReady) { |
| return new Promise(function (fulfill, reject) { |
| self.taskqueue.addTask(function (failed) { |
| if (failed) { |
| reject(failed); |
| } else { |
| fulfill(self[name].apply(self, args)); |
| } |
| }); |
| }); |
| } |
| return callback.apply(this, args); |
| })); |
| } |
| |
| export default adapterFun; |