| 'use strict'; |
| |
| exports.Promise = require('../deps/promise'); |
| exports.inherits = require('inherits'); |
| exports.extend = require('pouchdb-extend'); |
| var argsarray = require('argsarray'); |
| |
| exports.promisedCallback = function (promise, callback) { |
| if (callback) { |
| promise.then(function (res) { |
| process.nextTick(function () { |
| callback(null, res); |
| }); |
| }, function (reason) { |
| process.nextTick(function () { |
| callback(reason); |
| }); |
| }); |
| } |
| return promise; |
| }; |
| |
| exports.callbackify = function (fun) { |
| return argsarray(function (args) { |
| var cb = args.pop(); |
| var promise = fun.apply(this, args); |
| if (typeof cb === 'function') { |
| exports.promisedCallback(promise, cb); |
| } |
| return promise; |
| }); |
| }; |
| |
| // Promise finally util similar to Q.finally |
| exports.fin = function (promise, finalPromiseFactory) { |
| return promise.then(function (res) { |
| return finalPromiseFactory().then(function () { |
| return res; |
| }); |
| }, function (reason) { |
| return finalPromiseFactory().then(function () { |
| throw reason; |
| }); |
| }); |
| }; |
| |
| exports.sequentialize = function (queue, promiseFactory) { |
| return function () { |
| var args = arguments; |
| var that = this; |
| return queue.add(function () { |
| return promiseFactory.apply(that, args); |
| }); |
| }; |
| }; |
| |
| exports.flatten = function (arrs) { |
| var res = []; |
| for (var i = 0, len = arrs.length; i < len; i++) { |
| res = res.concat(arrs[i]); |
| } |
| return res; |
| }; |
| |
| // uniq an array of strings, order not guaranteed |
| // similar to underscore/lodash _.uniq |
| exports.uniq = function (arr) { |
| var map = {}; |
| |
| for (var i = 0, len = arr.length; i < len; i++) { |
| map['$' + arr[i]] = true; |
| } |
| |
| var keys = Object.keys(map); |
| var output = new Array(keys.length); |
| |
| for (i = 0, len = keys.length; i < len; i++) { |
| output[i] = keys[i].substring(1); |
| } |
| return output; |
| }; |
| |
| exports.MD5 = require('./md5'); |