UNPKG

zotero-web-library

Version:

Web library from zotero.org

1,833 lines (1,629 loc) 4.35 MB
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){ 'use strict'; var assign = require('es5-ext/object/assign') , normalizeOpts = require('es5-ext/object/normalize-options') , isCallable = require('es5-ext/object/is-callable') , contains = require('es5-ext/string/#/contains') , d; d = module.exports = function (dscr, value/*, options*/) { var c, e, w, options, desc; if ((arguments.length < 2) || (typeof dscr !== 'string')) { options = value; value = dscr; dscr = null; } else { options = arguments[2]; } if (dscr == null) { c = w = true; e = false; } else { c = contains.call(dscr, 'c'); e = contains.call(dscr, 'e'); w = contains.call(dscr, 'w'); } desc = { value: value, configurable: c, enumerable: e, writable: w }; return !options ? desc : assign(normalizeOpts(options), desc); }; d.gs = function (dscr, get, set/*, options*/) { var c, e, options, desc; if (typeof dscr !== 'string') { options = set; set = get; get = dscr; dscr = null; } else { options = arguments[3]; } if (get == null) { get = undefined; } else if (!isCallable(get)) { options = get; get = set = undefined; } else if (set == null) { set = undefined; } else if (!isCallable(set)) { options = set; set = undefined; } if (dscr == null) { c = true; e = false; } else { c = contains.call(dscr, 'c'); e = contains.call(dscr, 'e'); } desc = { get: get, set: set, configurable: c, enumerable: e }; return !options ? desc : assign(normalizeOpts(options), desc); }; },{"es5-ext/object/assign":58,"es5-ext/object/is-callable":63,"es5-ext/object/normalize-options":69,"es5-ext/string/#/contains":73}],2:[function(require,module,exports){ 'use strict'; var callable = require('es5-ext/object/valid-callable') , d = require('d') , isCallable = require('es5-ext/object/is-callable') , ee = require('event-emitter') , isPromise = require('./is-promise') , create = Object.create, defineProperty = Object.defineProperty , deferred, resolve, reject; module.exports = exports = function (name, unres, onres, res) { name = String(name); (callable(res) && ((onres == null) || callable(onres)) && callable(unres)); defineProperty(exports._unresolved, name, d(unres)); exports._onresolve[name] = onres; defineProperty(exports._resolved, name, d(res)); exports._names.push(name); }; exports._names = ['done', 'then', 'valueOf']; exports._unresolved = ee(create(Function.prototype, { then: d(function (win, fail) { var def; if (!this.pending) this.pending = []; def = deferred(); this.pending.push('then', [win, fail, def.resolve, def.reject]); return def.promise; }), done: d(function (win, fail) { ((win == null) || callable(win)); ((fail == null) || callable(fail)); if (!this.pending) this.pending = []; this.pending.push('done', arguments); }), resolved: d(false), returnsPromise: d(true), valueOf: d(function () { return this; }) })); exports._onresolve = { then: function (win, fail, resolve, reject) { var value, cb = this.failed ? fail : win; if (cb == null) { if (this.failed) reject(this.value); else resolve(this.value); return; } if (isCallable(cb)) { if (isPromise(cb)) { if (cb.resolved) { if (cb.failed) reject(cb.value); else resolve(cb.value); return; } cb.done(resolve, reject); return; } try { value = cb(this.value); } catch (e) { reject(e); return; } resolve(value); return; } resolve(cb); }, done: function (win, fail) { if (this.failed) { if (fail) { fail(this.value); return; } throw this.value; } if (win) win(this.value); } }; exports._resolved = ee(create(Function.prototype, { then: d(function (win, fail) { var value, cb = this.failed ? fail : win; if (cb == null) return this; if (isCallable(cb)) { if (isPromise(cb)) return cb; try { value = cb(this.value); } catch (e) { return reject(e); } return resolve(value); } return resolve(cb); }), done: d(function (win, fail) { ((win == null) || callable(win)); ((fail == null) || callable(fail)); if (this.failed) { if (fail) { fail(this.value); return; } throw this.value; } if (win) win(this.value); }), resolved: d(true), returnsPromise: d(true), valueOf: d(function () { return this.value; }) })); deferred = require('./deferred'); resolve = deferred.resolve; reject = deferred.reject; deferred.extend = exports; },{"./deferred":4,"./is-promise":31,"d":1,"es5-ext/object/is-callable":63,"es5-ext/object/valid-callable":70,"event-emitter":87}],3:[function(require,module,exports){ // Assimilate eventual foreign promise 'use strict'; var isObject = require('es5-ext/object/is-object') , isPromise = require('./is-promise') , deferred = require('./deferred') , nextTick = require('next-tick') , getPrototypeOf = Object.getPrototypeOf; module.exports = function self(value) { var then, done, def, resolve, reject; if (!value) return value; try { then = value.then; } catch (e) { return value; } if (typeof then !== 'function') return value; if (isPromise(value)) return value; if (!isObject(value)) return value; if (!getPrototypeOf(value)) return value; try { done = value.done; } catch (ignore) {} def = deferred(); resolve = function (value) { def.resolve(self(value)); }; reject = function (value) { def.reject(value); }; if (typeof done === 'function') { try { done.call(value, resolve, reject); } catch (e) { return def.reject(e); } return def.promise; } try { then.call(value, function (value) { nextTick(function () { resolve(value); }); }, function (value) { nextTick(function () { reject(value); }); }); } catch (e) { return def.reject(e); } return def.promise; }; },{"./deferred":4,"./is-promise":31,"es5-ext/object/is-object":64,"next-tick":146}],4:[function(require,module,exports){ // Returns function that returns deferred or promise object. // // 1. If invoked without arguments then deferred object is returned // Deferred object consist of promise (unresolved) function and resolve // function through which we resolve promise // 2. If invoked with one argument then promise is returned which resolved value // is given argument. Argument may be any value (even undefined), // if it's promise then same promise is returned // 3. If invoked with more than one arguments then promise that resolves with // array of all resolved arguments is returned. 'use strict'; var isError = require('es5-ext/error/is-error') , noop = require('es5-ext/function/noop') , isPromise = require('./is-promise') , every = Array.prototype.every, push = Array.prototype.push , Deferred, createDeferred, count = 0, timeout, extendShim, ext , protoSupported = Boolean(isPromise.__proto__) , resolve, assimilate; extendShim = function (promise) { ext._names.forEach(function (name) { promise[name] = function () { return promise.__proto__[name].apply(promise, arguments); }; }); promise.returnsPromise = true; promise.resolved = promise.__proto__.resolved; }; resolve = function (value, failed) { var promise = function (win, fail) { return promise.then(win, fail); }; promise.value = value; promise.failed = failed; promise.__proto__ = ext._resolved; if (!protoSupported) { extendShim(promise); } if (createDeferred._profile) createDeferred._profile(true); return promise; }; Deferred = function () { var promise = function (win, fail) { return promise.then(win, fail); }; if (!count) timeout = setTimeout(noop, 1e9); ++count; if (createDeferred._monitor) promise.monitor = createDeferred._monitor(); promise.__proto__ = ext._unresolved; if (!protoSupported) extendShim(promise); (createDeferred._profile && createDeferred._profile()); this.promise = promise; this.resolve = this.resolve.bind(this); this.reject = this.reject.bind(this); }; Deferred.prototype = { resolved: false, _settle: function (value) { var i, name, data, deps, dPromise, nuDeps; this.promise.value = value; this.promise.__proto__ = ext._resolved; if (!protoSupported) this.promise.resolved = true; deps = this.promise.dependencies; delete this.promise.dependencies; while (deps) { for (i = 0; (dPromise = deps[i]); ++i) { dPromise.value = value; dPromise.failed = this.failed; dPromise.__proto__ = ext._resolved; if (!protoSupported) dPromise.resolved = true; delete dPromise.pending; if (dPromise.dependencies) { if (!nuDeps) nuDeps = dPromise.dependencies; else push.apply(nuDeps, dPromise.dependencies); delete dPromise.dependencies; } } deps = nuDeps; nuDeps = null; } if ((data = this.promise.pending)) { for (i = 0; (name = data[i]); ++i) { ext._onresolve[name].apply(this.promise, data[++i]); } delete this.promise.pending; } return this.promise; }, resolve: function (value) { if (this.resolved) return this.promise; this.resolved = true; if (!--count) clearTimeout(timeout); if (this.promise.monitor) clearTimeout(this.promise.monitor); value = assimilate(value); if (isPromise(value)) { if (!value.resolved) { if (!value.dependencies) { value.dependencies = []; } value.dependencies.push(this.promise); if (this.promise.pending) { if (value.pending) { push.apply(value.pending, this.promise.pending); this.promise.pending = value.pending; if (this.promise.dependencies) { this.promise.dependencies.forEach(function self(dPromise) { dPromise.pending = value.pending; if (dPromise.dependencies) { dPromise.dependencies.forEach(self); } }); } } else { value.pending = this.promise.pending; } } else if (value.pending) { this.promise.pending = value.pending; } else { this.promise.pending = value.pending = []; } return this.promise; } this.promise.failed = value.failed; value = value.value; } return this._settle(value); }, reject: function (error) { if (this.resolved) return this.promise; this.resolved = true; if (!--count) clearTimeout(timeout); if (this.promise.monitor) clearTimeout(this.promise.monitor); this.promise.failed = true; return this._settle(error); } }; module.exports = createDeferred = function (value) { var l = arguments.length, d, waiting, initialized, result; if (!l) return new Deferred(); if (l > 1) { d = new Deferred(); waiting = 0; result = new Array(l); every.call(arguments, function (value, index) { value = assimilate(value); if (!isPromise(value)) { result[index] = value; return true; } if (value.resolved) { if (value.failed) { d.reject(value.value); return false; } result[index] = value.value; return true; } ++waiting; value.done(function (value) { result[index] = value; if (!--waiting && initialized) d.resolve(result); }, d.reject); return true; }); initialized = true; if (!waiting) d.resolve(result); return d.promise; } value = assimilate(value); if (isPromise(value)) return value; return resolve(value, isError(value)); }; createDeferred.Deferred = Deferred; createDeferred.reject = function (value) { return resolve(value, true); }; createDeferred.resolve = function (value) { value = assimilate(value); if (isPromise(value)) return value; return resolve(value, false); }; ext = require('./_ext'); assimilate = require('./assimilate'); },{"./_ext":2,"./assimilate":3,"./is-promise":31,"es5-ext/error/is-error":43,"es5-ext/function/noop":49}],5:[function(require,module,exports){ // Dynamic queue handler // Allows to create a promise queue, where new promises can be added to queue until last promise in // a queue resolves. Queue promise resolves with `undefined` value, when last promises resolves. 'use strict'; var aFrom = require('es5-ext/array/from') , ensureIterable = require('es5-ext/iterable/validate-object') , assign = require('es5-ext/object/assign') , deferred = require('./deferred') , isPromise = require('./is-promise') , assimilate = require('./assimilate') , DynamicQueue; module.exports = DynamicQueue = function (list) { if (!(this instanceof DynamicQueue)) return new DynamicQueue(list); list = aFrom(ensureIterable(list)); assign(this, deferred()); list.every(this.add, this); if (!this.waiting) { this.resolve(); return; } this.initialized = true; }; DynamicQueue.prototype = { waiting: 0, initialized: false, add: function (value) { if (this.promise.resolved) throw new Error("Queue was already resolved"); ++this.waiting; value = assimilate(value); if (isPromise(value)) { if (!value.resolved) { value.done(this._processValue.bind(this), this.reject); return true; } if (value.failed) { this.reject(value.value); return false; } } return this._processValue(); }, _processValue: function () { if (this.promise.resolved) return; if (!--this.waiting && this.initialized) this.resolve(); return true; } }; },{"./assimilate":3,"./deferred":4,"./is-promise":31,"es5-ext/array/from":36,"es5-ext/iterable/validate-object":51,"es5-ext/object/assign":58}],6:[function(require,module,exports){ 'use strict'; var arrayOf = require('es5-ext/array/of') , deferred = require('../deferred') , isPromise = require('../is-promise') , assimilate = require('../assimilate') , push = Array.prototype.push, slice = Array.prototype.slice; module.exports = function (args, length) { var i, l, arg; if ((length != null) && (args.length !== length)) { args = slice.call(args, 0, length); if (args.length < length) { push.apply(args, new Array(length - args.length)); } } for (i = 0, l = args.length; i < l; ++i) { arg = assimilate(args[i]); if (isPromise(arg)) { if (!arg.resolved) { if (l > 1) return deferred.apply(null, args); return arg(arrayOf); } if (arg.failed) return arg; args[i] = arg.value; } } return args; }; },{"../assimilate":3,"../deferred":4,"../is-promise":31,"es5-ext/array/of":39}],7:[function(require,module,exports){ // Promise aware Array's every 'use strict'; module.exports = require('../../lib/some-every')(false); },{"../../lib/some-every":32}],8:[function(require,module,exports){ // Promise aware Array's find // Additionally differs from some that it returns *first in order* item that matches constraint 'use strict'; var assign = require('es5-ext/object/assign') , value = require('es5-ext/object/valid-value') , callable = require('es5-ext/object/valid-callable') , deferred = require('../../deferred') , isPromise = require('../../is-promise') , assimilate = require('../../assimilate') , call = Function.prototype.call , resolve = deferred.resolve , Find; Find = function (list, cb, context) { this.list = list; this.cb = cb; this.context = context; this.length = list.length >>> 0; while (this.current < this.length) { if (this.current in list) { assign(this, deferred()); this.processCb = this.processCb.bind(this); this.process(); return this.promise; } ++this.current; } return resolve(undefined); }; Find.prototype = { current: 0, process: function () { var value = assimilate(this.list[this.current]); if (isPromise(value)) { if (!value.resolved) { value.done(this.processCb, this.reject); return; } if (value.failed) { this.reject(value.value); return; } value = value.value; } this.processCb(value); }, processCb: function (listValue) { var value; if (this.cb) { try { value = call.call(this.cb, this.context, listValue, this.current, this.list); } catch (e) { this.reject(e); return; } value = assimilate(value); if (isPromise(value)) { if (!value.resolved) { value.done(this.processValue.bind(this, listValue), this.reject); return; } if (value.failed) { this.reject(value.value); return; } value = value.value; } } else { value = listValue; } this.processValue(listValue, value); }, processValue: function (listValue, value) { if (value) { this.resolve(listValue); return; } while (++this.current < this.length) { if (this.current in this.list) { this.process(); return; } } this.resolve(undefined); } }; module.exports = function (cb/*, thisArg*/) { value(this); ((cb == null) || callable(cb)); return new Find(this, cb, arguments[1]); }; },{"../../assimilate":3,"../../deferred":4,"../../is-promise":31,"es5-ext/object/assign":58,"es5-ext/object/valid-callable":70,"es5-ext/object/valid-value":72}],9:[function(require,module,exports){ // Promise aware Array's map 'use strict'; var assign = require('es5-ext/object/assign') , value = require('es5-ext/object/valid-value') , callable = require('es5-ext/object/valid-callable') , deferred = require('../../deferred') , isPromise = require('../../is-promise') , assimilate = require('../../assimilate') , every = Array.prototype.every , call = Function.prototype.call , DMap; DMap = function (list, cb, context) { this.list = list; this.cb = cb; this.context = context; this.result = new Array(list.length >>> 0); assign(this, deferred()); every.call(list, this.process, this); if (!this.waiting) return this.resolve(this.result); this.initialized = true; return this.promise; }; DMap.prototype = { waiting: 0, initialized: false, process: function (value, index) { ++this.waiting; value = assimilate(value); if (isPromise(value)) { if (!value.resolved) { value.done(this.processCb.bind(this, index), this.reject); return true; } if (value.failed) { this.reject(value.value); return false; } value = value.value; } return this.processCb(index, value); }, processCb: function (index, value) { if (this.promise.resolved) return false; if (this.cb) { try { value = call.call(this.cb, this.context, value, index, this.list); } catch (e) { this.reject(e); return false; } value = assimilate(value); if (isPromise(value)) { if (!value.resolved) { value.done(this.processValue.bind(this, index), this.reject); return true; } if (value.failed) { this.reject(value.value); return false; } value = value.value; } } this.processValue(index, value); return true; }, processValue: function (index, value) { if (this.promise.resolved) return; this.result[index] = value; if (!--this.waiting && this.initialized) this.resolve(this.result); } }; module.exports = function (cb/*, thisArg*/) { value(this); ((cb == null) || callable(cb)); return new DMap(this, cb, arguments[1]); }; },{"../../assimilate":3,"../../deferred":4,"../../is-promise":31,"es5-ext/object/assign":58,"es5-ext/object/valid-callable":70,"es5-ext/object/valid-value":72}],10:[function(require,module,exports){ // Promise aware Array's reduce 'use strict'; var assign = require('es5-ext/object/assign') , value = require('es5-ext/object/valid-value') , callable = require('es5-ext/object/valid-callable') , deferred = require('../../deferred') , isPromise = require('../../is-promise') , assimilate = require('../../assimilate') , call = Function.prototype.call , hasOwnProperty = Object.prototype.hasOwnProperty , resolve = deferred.resolve , Reduce; Reduce = function (list, cb, initial, initialized) { this.list = list; this.cb = cb; this.initialized = initialized; this.length = list.length >>> 0; initial = assimilate(initial); if (isPromise(initial)) { if (!initial.resolved) { assign(this, deferred()); initial.done(function (initial) { this.value = initial; this.init(); }.bind(this), this.reject); return this.promise; } this.value = initial.value; if (initial.failed) return initial; } else { this.value = initial; } return this.init(); }; Reduce.prototype = { current: 0, state: false, init: function () { while (this.current < this.length) { if (hasOwnProperty.call(this.list, this.current)) break; ++this.current; } if (this.current === this.length) { if (!this.initialized) { throw new Error("Reduce of empty array with no initial value"); } return this.resolve ? this.resolve(this.value) : resolve(this.value); } if (!this.promise) assign(this, deferred()); this.processCb = this.processCb.bind(this); this.processValue = this.processValue.bind(this); this.continue(); return this.promise; }, continue: function () { var result; while (!this.state) { result = this.process(); if (this.state !== 'cb') break; result = this.processCb(result); if (this.state !== 'value') break; this.processValue(result); } }, process: function () { var value = assimilate(this.list[this.current]); if (isPromise(value)) { if (!value.resolved) { value.done(function (result) { result = this.processCb(result); if (this.state !== 'value') return; this.processValue(result); if (!this.state) this.continue(); }.bind(this), this.reject); return; } if (value.failed) { this.reject(value.value); return; } value = value.value; } this.state = 'cb'; return value; }, processCb: function (value) { if (!this.initialized) { this.initialized = true; this.state = 'value'; return value; } if (this.cb) { try { value = call.call(this.cb, undefined, this.value, value, this.current, this.list); } catch (e) { this.reject(e); return; } value = assimilate(value); if (isPromise(value)) { if (!value.resolved) { value.done(function (result) { this.state = 'value'; this.processValue(result); if (!this.state) this.continue(); }.bind(this), this.reject); return; } if (value.failed) { this.reject(value.value); return; } value = value.value; } } this.state = 'value'; return value; }, processValue: function (value) { this.value = value; while (++this.current < this.length) { if (hasOwnProperty.call(this.list, this.current)) { this.state = false; return; } } this.resolve(this.value); } }; module.exports = function (cb/*, initial*/) { value(this); ((cb == null) || callable(cb)); return new Reduce(this, cb, arguments[1], arguments.length > 1); }; },{"../../assimilate":3,"../../deferred":4,"../../is-promise":31,"es5-ext/object/assign":58,"es5-ext/object/valid-callable":70,"es5-ext/object/valid-value":72}],11:[function(require,module,exports){ // Promise aware Array's some 'use strict'; module.exports = require('../../lib/some-every')(true); },{"../../lib/some-every":32}],12:[function(require,module,exports){ // Call asynchronous function 'use strict'; var toArray = require('es5-ext/array/to-array') , callable = require('es5-ext/object/valid-callable') , deferred = require('../../deferred') , isPromise = require('../../is-promise') , processArguments = require('../_process-arguments') , slice = Array.prototype.slice, apply = Function.prototype.apply , applyFn, callAsync; applyFn = function (fn, args, def) { args = toArray(args); apply.call(fn, this, args.concat(function (error, result) { if (error == null) { def.resolve((arguments.length > 2) ? slice.call(arguments, 1) : result); } else { def.reject(error); } })); }; callAsync = function (fn, length, context, args) { var def; args = processArguments(args, length); if (isPromise(args)) { if (args.failed) return args; def = deferred(); args.done(function (args) { if (fn.returnsPromise) return apply.call(fn, context, args); try { applyFn.call(context, fn, args, def); } catch (e) { def.reject(e); } }, def.reject); return def.promise; } if (fn.returnsPromise) return apply.call(fn, context, args); def = deferred(); try { applyFn.call(context, fn, args, def); } catch (e) { def.reject(e); throw e; } return def.promise; }; module.exports = exports = function (context/*, …args*/) { return callAsync(callable(this), null, context, slice.call(arguments, 1)); }; Object.defineProperty(exports, '_base', { configurable: true, enumerable: false, writable: true, value: callAsync }); },{"../../deferred":4,"../../is-promise":31,"../_process-arguments":6,"es5-ext/array/to-array":42,"es5-ext/object/valid-callable":70}],13:[function(require,module,exports){ // Delay function execution, return promise for delayed function result 'use strict'; var callable = require('es5-ext/object/valid-callable') , nextTick = require('next-tick') , ensureTimeout = require('timers-ext/valid-timeout') , deferred = require('../../deferred') , apply = Function.prototype.apply , delayed; delayed = function (fn, args, resolve, reject) { var value; try { value = apply.call(fn, this, args); } catch (e) { reject(e); return; } resolve(value); }; module.exports = function (timeout) { var fn, result, delay; fn = callable(this); if (timeout == null) { delay = nextTick; } else { timeout = ensureTimeout(timeout); delay = setTimeout; } result = function () { var def = deferred(); delay(delayed.bind(this, fn, arguments, def.resolve, def.reject), timeout); return def.promise; }; result.returnsPromise = true; return result; }; },{"../../deferred":4,"es5-ext/object/valid-callable":70,"next-tick":146,"timers-ext/valid-timeout":291}],14:[function(require,module,exports){ // Limit number of concurrent function executions (to cLimit number). // Limited calls are queued. Optionaly maximum queue length can also be // controlled with qLimit value, any calls that would reach over that limit // would be discarded (its promise would resolve with "Too many calls" error) 'use strict'; var toPosInt = require('es5-ext/number/to-pos-integer') , callable = require('es5-ext/object/valid-callable') , eeUnify = require('event-emitter/unify') , deferred = require('../../deferred') , isPromise = require('../../is-promise') , assimilate = require('../../assimilate') , resolve = deferred.resolve, reject = deferred.reject , apply = Function.prototype.apply, max = Math.max , gateReject; require('../promise/finally'); gateReject = function () { var e = new Error("Too many calls"); e.type = 'deferred-gate-rejected'; return reject(e); }; module.exports = function (cLimit, qLimit) { var fn, count, decrement, unload, queue, run, result; fn = callable(this); cLimit = max(toPosInt(cLimit), 1); qLimit = ((qLimit == null) || isNaN(qLimit)) ? Infinity : toPosInt(qLimit); count = 0; queue = []; run = function (thisArg, args, def) { var r; try { r = apply.call(fn, thisArg, args); } catch (e) { if (!def) return reject(e); def.reject(e); unload(); return; } r = assimilate(r); if (isPromise(r)) { if (def) eeUnify(def.promise, r); if (!r.resolved) { ++count; if (def) def.resolve(r); return r.finally(decrement); } r = r.value; } if (!def) return resolve(r); def.resolve(r); unload(); }; decrement = function () { --count; unload(); }; unload = function () { var data; if ((data = queue.shift())) run.apply(null, data); }; result = function () { var def; if (count >= cLimit) { if (queue.length < qLimit) { def = deferred(); queue.push([this, arguments, def]); return def.promise; } return gateReject(); } return run(this, arguments); }; result.returnsPromise = true; return result; }; },{"../../assimilate":3,"../../deferred":4,"../../is-promise":31,"../promise/finally":21,"es5-ext/number/to-pos-integer":56,"es5-ext/object/valid-callable":70,"event-emitter/unify":88}],15:[function(require,module,exports){ // Promisify synchronous function 'use strict'; var callable = require('es5-ext/object/valid-callable') , deferred = require('../../deferred') , isPromise = require('../../is-promise') , processArguments = require('../_process-arguments') , apply = Function.prototype.apply , applyFn; applyFn = function (fn, args, resolve, reject) { var value; try { value = apply.call(fn, this, args); } catch (e) { reject(e); return; } resolve(value); }; module.exports = function (length) { var fn, result; fn = callable(this); if (fn.returnsPromise) return fn; if (length != null) length = length >>> 0; result = function () { var args, def; args = processArguments(arguments, length); if (isPromise(args)) { if (args.failed) return args; def = deferred(); args.done(function (args) { applyFn.call(this, fn, args, def.resolve, def.reject); }.bind(this), def.reject); } else { def = deferred(); applyFn.call(this, fn, args, def.resolve, def.reject); } return def.promise; }; result.returnsPromise = true; return result; }; },{"../../deferred":4,"../../is-promise":31,"../_process-arguments":6,"es5-ext/object/valid-callable":70}],16:[function(require,module,exports){ // Promisify asynchronous function 'use strict'; var callable = require('es5-ext/object/valid-callable') , callAsync = require('./call-async')._base; module.exports = function (length) { var fn, result; fn = callable(this); if (fn.returnsPromise) return fn; if (length != null) length = length >>> 0; result = function () { return callAsync(fn, length, this, arguments); }; result.returnsPromise = true; return result; }; },{"./call-async":12,"es5-ext/object/valid-callable":70}],17:[function(require,module,exports){ // Used by promise extensions that are based on array extensions. 'use strict'; var callable = require('es5-ext/object/valid-callable') , deferred = require('../../deferred') , reject = deferred.reject; module.exports = function (name, ext) { deferred.extend(name, function (cb) { var def; ((cb == null) || callable(cb)); if (!this.pending) this.pending = []; def = deferred(); this.pending.push(name, [arguments, def.resolve, def.reject]); return def.promise; }, function (args, resolve, reject) { var result; if (this.failed) { reject(this.value); return; } try { result = ext.apply(this.value, args); } catch (e) { reject(e); return; } resolve(result); }, function (cb) { ((cb == null) || callable(cb)); if (this.failed) return this; try { return ext.apply(this.value, arguments); } catch (e) { return reject(e); } }); }; },{"../../deferred":4,"es5-ext/object/valid-callable":70}],18:[function(require,module,exports){ // 'aside' - Promise extension // // promise.aside(win, fail) // // Works in analogous way as promise function itself (or `then`) // but instead of adding promise to promise chain it returns context promise and // lets callback carry on with other processing logic 'use strict'; var callable = require('es5-ext/object/valid-callable') , deferred = require('../../deferred'); deferred.extend('aside', function (win, fail) { ((win == null) || callable(win)); ((fail == null) || callable(fail)); if (win || fail) { if (!this.pending) { this.pending = []; } this.pending.push('aside', arguments); } return this; }, function (win, fail) { var cb = this.failed ? fail : win; if (cb) { cb(this.value); } }, function (win, fail) { var cb; ((win == null) || callable(win)); ((fail == null) || callable(fail)); cb = this.failed ? fail : win; if (cb) { cb(this.value); } return this; }); },{"../../deferred":4,"es5-ext/object/valid-callable":70}],19:[function(require,module,exports){ // 'catch' - Promise extension // // promise.catch(cb) // // Same as `then` but accepts only onFail callback 'use strict'; var isCallable = require('es5-ext/object/is-callable') , validValue = require('es5-ext/object/valid-value') , deferred = require('../../deferred') , isPromise = require('../../is-promise') , resolve = deferred.resolve, reject = deferred.reject; deferred.extend('catch', function (cb) { var def; validValue(cb); if (!this.pending) this.pending = []; def = deferred(); this.pending.push('catch', [cb, def.resolve, def.reject]); return def.promise; }, function (cb, resolve, reject) { var value; if (!this.failed) { resolve(this.value); return; } if (isCallable(cb)) { if (isPromise(cb)) { if (cb.resolved) { if (cb.failed) reject(cb.value); else resolve(cb.value); } else { cb.done(resolve, reject); } return; } try { value = cb(this.value); } catch (e) { reject(e); return; } resolve(value); return; } resolve(cb); }, function (cb) { var value; validValue(cb); if (!this.failed) return this; if (isCallable(cb)) { if (isPromise(cb)) return cb; try { value = cb(this.value); } catch (e) { return reject(e); } return resolve(value); } return resolve(cb); }); },{"../../deferred":4,"../../is-promise":31,"es5-ext/object/is-callable":63,"es5-ext/object/valid-value":72}],20:[function(require,module,exports){ // 'cb' - Promise extension // // promise.cb(cb) // // Handles asynchronous function style callback (which is run in next event loop // the earliest). Returns self promise. Callback is optional. // // Useful when we want to configure typical asynchronous function which logic is // internally configured with promises. // // Extension can be used as follows: // // var foo = function (arg1, arg2, cb) { // var d = deferred(); // // ... implementation // return d.promise.cb(cb); // }; // // `cb` extension returns promise and handles eventual callback (optional) 'use strict'; var callable = require('es5-ext/object/valid-callable') , nextTick = require('next-tick') , deferred = require('../../deferred'); deferred.extend('cb', function (cb) { if (cb == null) return this; callable(cb); nextTick(function () { if (this.resolved) { if (this.failed) cb(this.value); else cb(null, this.value); } else { if (!this.pending) this.pending = []; this.pending.push('cb', [cb]); } }.bind(this)); return this; }, function (cb) { if (this.failed) cb(this.value); else cb(null, this.value); }, function (cb) { if (cb == null) return this; callable(cb); nextTick(function () { if (this.failed) cb(this.value); else cb(null, this.value); }.bind(this)); return this; }); },{"../../deferred":4,"es5-ext/object/valid-callable":70,"next-tick":146}],21:[function(require,module,exports){ // 'finally' - Promise extension // // promise.finally(cb) // // Called on promise resolution returns same promise, doesn't pass any values to // provided callback 'use strict'; var callable = require('es5-ext/object/valid-callable') , deferred = require('../../deferred'); deferred.extend('finally', function (cb) { callable(cb); if (!this.pending) this.pending = []; this.pending.push('finally', arguments); return this; }, function (cb) { cb(); }, function (cb) { callable(cb)(); return this; }); },{"../../deferred":4,"es5-ext/object/valid-callable":70}],22:[function(require,module,exports){ // 'get' - Promise extension // // promise.get(name) // // Resolves with property of resolved object 'use strict'; var value = require('es5-ext/object/valid-value') , deferred = require('../../deferred') , reduce = Array.prototype.reduce , resolve = deferred.resolve, reject = deferred.reject; deferred.extend('get', function (/*…name*/) { var def; if (!this.pending) this.pending = []; def = deferred(); this.pending.push('get', [arguments, def.resolve, def.reject]); return def.promise; }, function (args, resolve, reject) { var result; if (this.failed) reject(this.value); try { result = reduce.call(args, function (obj, key) { return value(obj)[String(key)]; }, this.value); } catch (e) { reject(e); return; } resolve(result); }, function (/*…name*/) { var result; if (this.failed) return this; try { result = reduce.call(arguments, function (obj, key) { return value(obj)[String(key)]; }, this.value); } catch (e) { return reject(e); } return resolve(result); }); },{"../../deferred":4,"es5-ext/object/valid-value":72}],23:[function(require,module,exports){ // 'invokeAsync' - Promise extension // // promise.invokeAsync(name[, arg0[, arg1[, ...]]]) // // On resolved object calls asynchronous method that takes callback // (Node.js style). // Do not pass callback, it's handled by internal implementation. // 'name' can be method name or method itself. 'use strict'; var toArray = require('es5-ext/array/to-array') , isCallable = require('es5-ext/object/is-callable') , deferred = require('../../deferred') , isPromise = require('../../is-promise') , processArguments = require('../_process-arguments') , slice = Array.prototype.slice, apply = Function.prototype.apply , reject = deferred.reject , applyFn; applyFn = function (fn, args, resolve, reject) { var result; if (fn.returnsPromise) { try { result = apply.call(fn, this, args); } catch (e) { reject(e); return; } return resolve(result); } args = toArray(args).concat(function (error, result) { if (error == null) { resolve((arguments.length > 2) ? slice.call(arguments, 1) : result); } else { reject(error); } }); try { apply.call(fn, this, args); } catch (e2) { reject(e2); } }; deferred.extend('invokeAsync', function (method/*, …args*/) { var def; if (!this.pending) this.pending = []; def = deferred(); this.pending.push('invokeAsync', [arguments, def.resolve, def.reject]); return def.promise; }, function (args, resolve, reject) { var fn; if (this.failed) { reject(this.value); return; } if (this.value == null) { reject(new TypeError("Cannot use null or undefined")); return; } fn = args[0]; if (!isCallable(fn)) { fn = String(fn); if (!isCallable(this.value[fn])) { reject(new TypeError(fn + " is not a function")); return; } fn = this.value[fn]; } args = processArguments(slice.call(args, 1)); if (isPromise(args)) { if (args.failed) { reject(args.value); return; } args.done(function (args) { applyFn.call(this, fn, args, resolve, reject); }.bind(this.value), reject); } else { applyFn.call(this.value, fn, args, resolve, reject); } }, function (method/*, …args*/) { var args, def; if (this.failed) return this; if (this.value == null) { return reject(new TypeError("Cannot use null or undefined")); } if (!isCallable(method)) { method = String(method); if (!isCallable(this.value[method])) { return reject(new TypeError(method + " is not a function")); } method = this.value[method]; } args = processArguments(slice.call(arguments, 1)); if (isPromise(args)) { if (args.failed) return args; def = deferred(); args.done(function (args) { applyFn.call(this, method, args, def.resolve, def.reject); }.bind(this.value), def.reject); } else if (!method.returnsPromise) { def = deferred(); applyFn.call(this.value, method, args, def.resolve, def.reject); } else { return applyFn.call(this.value, method, args, deferred, reject); } return def.promise; }); },{"../../deferred":4,"../../is-promise":31,"../_process-arguments":6,"es5-ext/array/to-array":42,"es5-ext/object/is-callable":63}],24:[function(require,module,exports){ // 'invoke' - Promise extension // // promise.invoke(name[, arg0[, arg1[, ...]]]) // // On resolved object calls method that returns immediately. // 'name' can be method name or method itself. 'use strict'; var isCallable = require('es5-ext/object/is-callable') , deferred = require('../../deferred') , isPromise = require('../../is-promise') , processArguments = require('../_process-arguments') , slice = Array.prototype.slice, apply = Function.prototype.apply , reject = deferred.reject , applyFn; applyFn = function (fn, args, resolve, reject) { var value; try { value = apply.call(fn, this, args); } catch (e) { return reject(e); } return resolve(value); }; deferred.extend('invoke', function (method/*, …args*/) { var def; if (!this.pending) this.pending = []; def = deferred(); this.pending.push('invoke', [arguments, def.resolve, def.reject]); return def.promise; }, function (args, resolve, reject) { var fn; if (this.failed) { reject(this.value); return; } if (this.value == null) { reject(new TypeError("Cannot use null or undefined")); return; } fn = args[0]; if (!isCallable(fn)) { fn = String(fn); if (!isCallable(this.value[fn])) { reject(new TypeError(fn + " is not a function")); return; } fn = this.value[fn]; } args = processArguments(slice.call(args, 1)); if (isPromise(args)) { if (args.failed) { reject(args.value); return; } args.done(function (args) { applyFn.call(this, fn, args, resolve, reject); }.bind(this.value), reject); } else { applyFn.call(this.value, fn, args, resolve, reject); } }, function (method/*, …args*/) { var args, def; if (this.failed) return this; if (this.value == null) { return reject(new TypeError("Cannot use null or undefined")); } if (!isCallable(method)) { method = String(method); if (!isCallable(this.value[method])) { return reject(new TypeError(method + " is not a function")); } method = this.value[method]; } args = processArguments(slice.call(arguments, 1)); if (isPromise(args)) { if (args.failed) return args; def = deferred(); args.done(function (args) { applyFn.call(this, method, args, def.resolve, def.reject); }.bind(this.value), def.reject); return def.promise; } return applyFn.call(this.value, method, args, deferred, reject); }); },{"../../deferred":4,"../../is-promise":31,"../_process-arguments":6,"es5-ext/object/is-callable":63}],25:[function(require,module,exports){ // 'map' - Promise extension // // promise.map(fn[, thisArg[, concurrentLimit]]) // // Promise aware map for array-like results 'use strict'; require('./_array')('map', require('../array/map')); },{"../array/map":9,"./_array":17}],26:[function(require,module,exports){ // 'reduce' - Promise extension // // promise.reduce(fn[, initial]) // // Promise aware reduce for array-like results 'use strict'; require('./_array')('reduce', require('../array/reduce')); },{"../array/reduce":10,"./_array":17}],27:[function(require,module,exports){ // 'some' - Promise extension // // promise.some(fn[, thisArg]) // // Promise aware some for array-like results 'use strict'; require('./_array')('some', require('../array/some')); },{"../array/some":11,"./_array":17}],28:[function(require,module,exports){ // 'spread' - Promise extensions // // promise.spread(onsuccess, onerror) // // Matches eventual list result onto function arguments, // otherwise works same as 'then' (promise function itself) 'use strict'; var spread = require('es5-ext/function/#/spread') , callable = require('es5-ext/object/valid-callable') , isCallable = require('es5-ext/object/is-callable') , isPromise = require('../../is-promise') , deferred = require('../../deferred') , resolve = deferred.resolve, reject = deferred.reject; deferred.extend('spread', function (win, fail) { var def; ((win == null) || callable(win)); if (!win && (fail == null)) return this; if (!this.pending) this.pending = []; def = deferred(); this.pending.push('spread', [win, fail, def.resolve, def.reject]); return def.promise; }, function (win, fail, resolve, reject) { var cb, value; cb = this.failed ? fail : win; if (cb == null) { if (this.failed) reject(this.value); else resolve(this.value); } if (isCallable(cb)) { if (isPromise(cb)) { if (cb.resolved) { if (cb.failed) reject(cb.value); else resolve(cb.value); } else { cb.done(resolve, reject); } return; } if (!this.failed) cb = spread.call(cb); try { value = cb(this.value); } catch (e) { reject(e); return; } resolve(value); } else { resolve(cb); } }, function (win, fail) { var cb, value; cb = this.failed ? fail : win; if (cb == null) return this; if (isCallable(cb)) { if (isPromise(cb)) return cb; if (!this.failed) cb = spread.call(cb); try { value = cb(this.value); } catch (e) { return reject(e); } return resolve(value); } return resolve(cb); }); },{"../../deferred":4,"../../is-promise":31,"es5-ext/function/#/spread":45,"es5-ext/object/is-callable":63,"es5-ext/object/valid-callable":70}],29:[function(require,module,exports){ // This construct deferred with all needed goodies that are being exported // when we import 'deferred' by main name. // All available promise extensions are also initialized. 'use strict'; var call = Function.prototype.call , assign = require('es5-ext/object/assign'); module.exports = assign(require('./deferred'), { invokeAsync: require('./invoke-async'), isPromise: require('./is-promise'), dynamicQueue: require('./dynamic-queue'), validPromise: require('./valid-promise'), callAsync: call.bind(require('./ext/function/call-async')), delay: call.bind(require('./ext/function/delay')), gate: call.bind(require('./ext/function/gate')), monitor: require('./monitor'), promisify: call.bind(require('./ext/function/promisify')), promisifySync: call.bind(require('./ext/function/promisify-sync')), every: call.bind(require('./ext/array/every')), find: call.bind(require('./ext/array/find')), map: call.bind(require('./ext/array/map')), reduce: call.bind(require('./ext/array/reduce')), some: call.bind(require('./ext/array/some')) }, require('./profiler')); require('./ext/promise/aside'); require('./ext/promise/catch'); require('./ext/promise/cb'); require('./ext/promise/finally'); require('./ext/promise/get'); require('./ext/promise/invoke'); require('./ext/promise/invoke-async'); require('./ext/promise/map'); require('./ext/promise/spread'); require('./ext/promise/some'); require('./ext/promise/reduce'); },{"./deferred":4,"./dynamic-queue":5,"./ext/array/every":7,"./ext/array/find":8,"./ext/array/map":9,"./ext/array/reduce":10,"./ext/array/some":11,"./ext/function/call-async":12,"./ext/function/delay":13,"./ext/function/gate":14,"./ext/function/promisify":16,"./ext/function/promisify-sync":15,"./ext/promise/aside":18,"./ext/promise/catch":19,"./ext/promise/cb":20,"./ext/promise/finally":21,"./ext/promise/get":22,"./ext/promise/invoke":24,"./ext/promise/invoke-async":23,"./ext/promise/map":25,"./ext/promise/reduce":26,"./ext/promise/some":27,"./ext/promise/spread":28,"./invoke-async":30,"./is-promise":31,"./monitor":33,"./profiler":34,"./valid-promise":35,"es5-ext/object/assign":58}],30:[function(require,module,exports){ // Invoke asynchronous function 'use strict'; var isCallable = require('es5-ext/object/is-callable') , callable = require('es5-ext/object/valid-callable') , value = require('es5-ext/object/valid-value') , callAsync = require('./ext/function/call-async')._base , slice = Array.prototype.slice; module.exports = function (obj, fn/*, …args*/) { value(obj); if (!isCallable(fn)) fn = callable(obj[fn]); return callAsync(fn, null, obj, slice.call(arguments, 2)); }; },{"./ext/function/call-async":12,"es5-ext/object/is-callable":63,"es5-ext/object/valid-callable":70,"es5-ext/object/valid-value":72}],31:[function(require,module,exports){ // Whether given object is a promise 'use strict'; module.exports = function (o) { return (typeof o === 'function') && (typeof o.then === 'function') && (o.end !== o.done); }; },{}],32:[function(require,module,exports){ // Promise aware Array's some 'use strict'; var assign = require('es5-ext/object/assign') , value = require('es5-ext/object/valid-value') , callable = require('es5-ext/object/valid-callable') , deferred = require('../deferred') , isPromise = require('../is-promise') , assimilate = require('../assimilate') , call = Function.prototype.call , resolve = deferred.resolve; module.exports = function (resolvent) { var Iterator = function (list, cb, context) { this.list = list; this.cb = cb; this.context = context; this.length = list.length >>> 0; while (this.current < this.length) { if (this.current in list) { assign(this, deferred()); this.processCb = this.processCb.bind(this); this.processValue = this.processValue.bind(this); this.continue(); return this.promise; } ++this.current; } return resolve(!resolvent); }; Iterator.prototype = { current: 0, state: false, continue: function () { var result; while (!this.state) { result = this.process(); if (this.state !== 'cb') break; result = this.processCb(result); if (this.state !== 'value') break; this.processValue(result); } }, process: function () { var value = assimilate(this.list[this.current]); if (isPromise(value)) { if (!value.resolved) { value.done(function (result) { result = this.processCb(result); if (this.state !== 'value') return; this.processValue(result); if (!this.state) this.continue(); }.bind(this), this.reject); return; } if (value.failed) { this.reject(value.value); return; } value = value.value; } this.state = 'cb'; return value; }, processCb: function (value) { if (this.cb) { try { value = call.call(this.cb, this.context, value, this.