blob: 13796a4ac71f71b79ee4828b257f532153246443 [file] [log] [blame]
import { nextTick, argsarray } from 'pouchdb-utils';
import {
QueryParseError,
NotFoundError,
BuiltInError
} from './errors';
function promisedCallback(promise, callback) {
if (callback) {
promise.then(function (res) {
nextTick(function () {
callback(null, res);
});
}, function (reason) {
nextTick(function () {
callback(reason);
});
});
}
return promise;
}
function callbackify(fun) {
return argsarray(function (args) {
var cb = args.pop();
var promise = fun.apply(this, args);
if (typeof cb === 'function') {
promisedCallback(promise, cb);
}
return promise;
});
}
// Promise finally util similar to Q.finally
function fin(promise, finalPromiseFactory) {
return promise.then(function (res) {
return finalPromiseFactory().then(function () {
return res;
});
}, function (reason) {
return finalPromiseFactory().then(function () {
throw reason;
});
});
}
function sequentialize(queue, promiseFactory) {
return function () {
var args = arguments;
var that = this;
return queue.add(function () {
return promiseFactory.apply(that, args);
});
};
}
// uniq an array of strings, order not guaranteed
// similar to underscore/lodash _.uniq
function uniq(arr) {
var theSet = new Set(arr);
var result = new Array(theSet.size);
var index = -1;
theSet.forEach(function (value) {
result[++index] = value;
});
return result;
}
function mapToKeysArray(map) {
var result = new Array(map.size);
var index = -1;
map.forEach(function (value, key) {
result[++index] = key;
});
return result;
}
export {
uniq,
sequentialize,
fin,
callbackify,
promisedCallback,
mapToKeysArray,
QueryParseError,
NotFoundError,
BuiltInError
};