blob: 75c1a2cd7ab0bef903d957123c97aa8f6af5337b [file] [log] [blame]
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;