mirror of
https://github.com/musix-org/musix-oss
synced 2025-06-17 10:46:01 +00:00
Modules
This commit is contained in:
299
node_modules/when/lib/decorators/array.js
generated
vendored
Normal file
299
node_modules/when/lib/decorators/array.js
generated
vendored
Normal file
@ -0,0 +1,299 @@
|
||||
/** @license MIT License (c) copyright 2010-2014 original author or authors */
|
||||
/** @author Brian Cavalier */
|
||||
/** @author John Hann */
|
||||
|
||||
(function(define) { 'use strict';
|
||||
define(function(require) {
|
||||
|
||||
var state = require('../state');
|
||||
var applier = require('../apply');
|
||||
|
||||
return function array(Promise) {
|
||||
|
||||
var applyFold = applier(Promise);
|
||||
var toPromise = Promise.resolve;
|
||||
var all = Promise.all;
|
||||
|
||||
var ar = Array.prototype.reduce;
|
||||
var arr = Array.prototype.reduceRight;
|
||||
var slice = Array.prototype.slice;
|
||||
|
||||
// Additional array combinators
|
||||
|
||||
Promise.any = any;
|
||||
Promise.some = some;
|
||||
Promise.settle = settle;
|
||||
|
||||
Promise.map = map;
|
||||
Promise.filter = filter;
|
||||
Promise.reduce = reduce;
|
||||
Promise.reduceRight = reduceRight;
|
||||
|
||||
/**
|
||||
* When this promise fulfills with an array, do
|
||||
* onFulfilled.apply(void 0, array)
|
||||
* @param {function} onFulfilled function to apply
|
||||
* @returns {Promise} promise for the result of applying onFulfilled
|
||||
*/
|
||||
Promise.prototype.spread = function(onFulfilled) {
|
||||
return this.then(all).then(function(array) {
|
||||
return onFulfilled.apply(this, array);
|
||||
});
|
||||
};
|
||||
|
||||
return Promise;
|
||||
|
||||
/**
|
||||
* One-winner competitive race.
|
||||
* Return a promise that will fulfill when one of the promises
|
||||
* in the input array fulfills, or will reject when all promises
|
||||
* have rejected.
|
||||
* @param {array} promises
|
||||
* @returns {Promise} promise for the first fulfilled value
|
||||
*/
|
||||
function any(promises) {
|
||||
var p = Promise._defer();
|
||||
var resolver = p._handler;
|
||||
var l = promises.length>>>0;
|
||||
|
||||
var pending = l;
|
||||
var errors = [];
|
||||
|
||||
for (var h, x, i = 0; i < l; ++i) {
|
||||
x = promises[i];
|
||||
if(x === void 0 && !(i in promises)) {
|
||||
--pending;
|
||||
continue;
|
||||
}
|
||||
|
||||
h = Promise._handler(x);
|
||||
if(h.state() > 0) {
|
||||
resolver.become(h);
|
||||
Promise._visitRemaining(promises, i, h);
|
||||
break;
|
||||
} else {
|
||||
h.visit(resolver, handleFulfill, handleReject);
|
||||
}
|
||||
}
|
||||
|
||||
if(pending === 0) {
|
||||
resolver.reject(new RangeError('any(): array must not be empty'));
|
||||
}
|
||||
|
||||
return p;
|
||||
|
||||
function handleFulfill(x) {
|
||||
/*jshint validthis:true*/
|
||||
errors = null;
|
||||
this.resolve(x); // this === resolver
|
||||
}
|
||||
|
||||
function handleReject(e) {
|
||||
/*jshint validthis:true*/
|
||||
if(this.resolved) { // this === resolver
|
||||
return;
|
||||
}
|
||||
|
||||
errors.push(e);
|
||||
if(--pending === 0) {
|
||||
this.reject(errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* N-winner competitive race
|
||||
* Return a promise that will fulfill when n input promises have
|
||||
* fulfilled, or will reject when it becomes impossible for n
|
||||
* input promises to fulfill (ie when promises.length - n + 1
|
||||
* have rejected)
|
||||
* @param {array} promises
|
||||
* @param {number} n
|
||||
* @returns {Promise} promise for the earliest n fulfillment values
|
||||
*
|
||||
* @deprecated
|
||||
*/
|
||||
function some(promises, n) {
|
||||
/*jshint maxcomplexity:7*/
|
||||
var p = Promise._defer();
|
||||
var resolver = p._handler;
|
||||
|
||||
var results = [];
|
||||
var errors = [];
|
||||
|
||||
var l = promises.length>>>0;
|
||||
var nFulfill = 0;
|
||||
var nReject;
|
||||
var x, i; // reused in both for() loops
|
||||
|
||||
// First pass: count actual array items
|
||||
for(i=0; i<l; ++i) {
|
||||
x = promises[i];
|
||||
if(x === void 0 && !(i in promises)) {
|
||||
continue;
|
||||
}
|
||||
++nFulfill;
|
||||
}
|
||||
|
||||
// Compute actual goals
|
||||
n = Math.max(n, 0);
|
||||
nReject = (nFulfill - n + 1);
|
||||
nFulfill = Math.min(n, nFulfill);
|
||||
|
||||
if(n > nFulfill) {
|
||||
resolver.reject(new RangeError('some(): array must contain at least '
|
||||
+ n + ' item(s), but had ' + nFulfill));
|
||||
} else if(nFulfill === 0) {
|
||||
resolver.resolve(results);
|
||||
}
|
||||
|
||||
// Second pass: observe each array item, make progress toward goals
|
||||
for(i=0; i<l; ++i) {
|
||||
x = promises[i];
|
||||
if(x === void 0 && !(i in promises)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
Promise._handler(x).visit(resolver, fulfill, reject, resolver.notify);
|
||||
}
|
||||
|
||||
return p;
|
||||
|
||||
function fulfill(x) {
|
||||
/*jshint validthis:true*/
|
||||
if(this.resolved) { // this === resolver
|
||||
return;
|
||||
}
|
||||
|
||||
results.push(x);
|
||||
if(--nFulfill === 0) {
|
||||
errors = null;
|
||||
this.resolve(results);
|
||||
}
|
||||
}
|
||||
|
||||
function reject(e) {
|
||||
/*jshint validthis:true*/
|
||||
if(this.resolved) { // this === resolver
|
||||
return;
|
||||
}
|
||||
|
||||
errors.push(e);
|
||||
if(--nReject === 0) {
|
||||
results = null;
|
||||
this.reject(errors);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply f to the value of each promise in a list of promises
|
||||
* and return a new list containing the results.
|
||||
* @param {array} promises
|
||||
* @param {function(x:*, index:Number):*} f mapping function
|
||||
* @returns {Promise}
|
||||
*/
|
||||
function map(promises, f) {
|
||||
return Promise._traverse(f, promises);
|
||||
}
|
||||
|
||||
/**
|
||||
* Filter the provided array of promises using the provided predicate. Input may
|
||||
* contain promises and values
|
||||
* @param {Array} promises array of promises and values
|
||||
* @param {function(x:*, index:Number):boolean} predicate filtering predicate.
|
||||
* Must return truthy (or promise for truthy) for items to retain.
|
||||
* @returns {Promise} promise that will fulfill with an array containing all items
|
||||
* for which predicate returned truthy.
|
||||
*/
|
||||
function filter(promises, predicate) {
|
||||
var a = slice.call(promises);
|
||||
return Promise._traverse(predicate, a).then(function(keep) {
|
||||
return filterSync(a, keep);
|
||||
});
|
||||
}
|
||||
|
||||
function filterSync(promises, keep) {
|
||||
// Safe because we know all promises have fulfilled if we've made it this far
|
||||
var l = keep.length;
|
||||
var filtered = new Array(l);
|
||||
for(var i=0, j=0; i<l; ++i) {
|
||||
if(keep[i]) {
|
||||
filtered[j++] = Promise._handler(promises[i]).value;
|
||||
}
|
||||
}
|
||||
filtered.length = j;
|
||||
return filtered;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a promise that will always fulfill with an array containing
|
||||
* the outcome states of all input promises. The returned promise
|
||||
* will never reject.
|
||||
* @param {Array} promises
|
||||
* @returns {Promise} promise for array of settled state descriptors
|
||||
*/
|
||||
function settle(promises) {
|
||||
return all(promises.map(settleOne));
|
||||
}
|
||||
|
||||
function settleOne(p) {
|
||||
// Optimize the case where we get an already-resolved when.js promise
|
||||
// by extracting its state:
|
||||
var handler;
|
||||
if (p instanceof Promise) {
|
||||
// This is our own Promise type and we can reach its handler internals:
|
||||
handler = p._handler.join();
|
||||
}
|
||||
if((handler && handler.state() === 0) || !handler) {
|
||||
// Either still pending, or not a Promise at all:
|
||||
return toPromise(p).then(state.fulfilled, state.rejected);
|
||||
}
|
||||
|
||||
// The promise is our own, but it is already resolved. Take a shortcut.
|
||||
// Since we're not actually handling the resolution, we need to disable
|
||||
// rejection reporting.
|
||||
handler._unreport();
|
||||
return state.inspect(handler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Traditional reduce function, similar to `Array.prototype.reduce()`, but
|
||||
* input may contain promises and/or values, and reduceFunc
|
||||
* may return either a value or a promise, *and* initialValue may
|
||||
* be a promise for the starting value.
|
||||
* @param {Array|Promise} promises array or promise for an array of anything,
|
||||
* may contain a mix of promises and values.
|
||||
* @param {function(accumulated:*, x:*, index:Number):*} f reduce function
|
||||
* @returns {Promise} that will resolve to the final reduced value
|
||||
*/
|
||||
function reduce(promises, f /*, initialValue */) {
|
||||
return arguments.length > 2 ? ar.call(promises, liftCombine(f), arguments[2])
|
||||
: ar.call(promises, liftCombine(f));
|
||||
}
|
||||
|
||||
/**
|
||||
* Traditional reduce function, similar to `Array.prototype.reduceRight()`, but
|
||||
* input may contain promises and/or values, and reduceFunc
|
||||
* may return either a value or a promise, *and* initialValue may
|
||||
* be a promise for the starting value.
|
||||
* @param {Array|Promise} promises array or promise for an array of anything,
|
||||
* may contain a mix of promises and values.
|
||||
* @param {function(accumulated:*, x:*, index:Number):*} f reduce function
|
||||
* @returns {Promise} that will resolve to the final reduced value
|
||||
*/
|
||||
function reduceRight(promises, f /*, initialValue */) {
|
||||
return arguments.length > 2 ? arr.call(promises, liftCombine(f), arguments[2])
|
||||
: arr.call(promises, liftCombine(f));
|
||||
}
|
||||
|
||||
function liftCombine(f) {
|
||||
return function(z, x, i) {
|
||||
return applyFold(f, void 0, [z,x,i]);
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
});
|
||||
}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
|
160
node_modules/when/lib/decorators/flow.js
generated
vendored
Normal file
160
node_modules/when/lib/decorators/flow.js
generated
vendored
Normal file
@ -0,0 +1,160 @@
|
||||
/** @license MIT License (c) copyright 2010-2014 original author or authors */
|
||||
/** @author Brian Cavalier */
|
||||
/** @author John Hann */
|
||||
|
||||
(function(define) { 'use strict';
|
||||
define(function() {
|
||||
|
||||
return function flow(Promise) {
|
||||
|
||||
var resolve = Promise.resolve;
|
||||
var reject = Promise.reject;
|
||||
var origCatch = Promise.prototype['catch'];
|
||||
|
||||
/**
|
||||
* Handle the ultimate fulfillment value or rejection reason, and assume
|
||||
* responsibility for all errors. If an error propagates out of result
|
||||
* or handleFatalError, it will be rethrown to the host, resulting in a
|
||||
* loud stack track on most platforms and a crash on some.
|
||||
* @param {function?} onResult
|
||||
* @param {function?} onError
|
||||
* @returns {undefined}
|
||||
*/
|
||||
Promise.prototype.done = function(onResult, onError) {
|
||||
this._handler.visit(this._handler.receiver, onResult, onError);
|
||||
};
|
||||
|
||||
/**
|
||||
* Add Error-type and predicate matching to catch. Examples:
|
||||
* promise.catch(TypeError, handleTypeError)
|
||||
* .catch(predicate, handleMatchedErrors)
|
||||
* .catch(handleRemainingErrors)
|
||||
* @param onRejected
|
||||
* @returns {*}
|
||||
*/
|
||||
Promise.prototype['catch'] = Promise.prototype.otherwise = function(onRejected) {
|
||||
if (arguments.length < 2) {
|
||||
return origCatch.call(this, onRejected);
|
||||
}
|
||||
|
||||
if(typeof onRejected !== 'function') {
|
||||
return this.ensure(rejectInvalidPredicate);
|
||||
}
|
||||
|
||||
return origCatch.call(this, createCatchFilter(arguments[1], onRejected));
|
||||
};
|
||||
|
||||
/**
|
||||
* Wraps the provided catch handler, so that it will only be called
|
||||
* if the predicate evaluates truthy
|
||||
* @param {?function} handler
|
||||
* @param {function} predicate
|
||||
* @returns {function} conditional catch handler
|
||||
*/
|
||||
function createCatchFilter(handler, predicate) {
|
||||
return function(e) {
|
||||
return evaluatePredicate(e, predicate)
|
||||
? handler.call(this, e)
|
||||
: reject(e);
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensures that onFulfilledOrRejected will be called regardless of whether
|
||||
* this promise is fulfilled or rejected. onFulfilledOrRejected WILL NOT
|
||||
* receive the promises' value or reason. Any returned value will be disregarded.
|
||||
* onFulfilledOrRejected may throw or return a rejected promise to signal
|
||||
* an additional error.
|
||||
* @param {function} handler handler to be called regardless of
|
||||
* fulfillment or rejection
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Promise.prototype['finally'] = Promise.prototype.ensure = function(handler) {
|
||||
if(typeof handler !== 'function') {
|
||||
return this;
|
||||
}
|
||||
|
||||
return this.then(function(x) {
|
||||
return runSideEffect(handler, this, identity, x);
|
||||
}, function(e) {
|
||||
return runSideEffect(handler, this, reject, e);
|
||||
});
|
||||
};
|
||||
|
||||
function runSideEffect (handler, thisArg, propagate, value) {
|
||||
var result = handler.call(thisArg);
|
||||
return maybeThenable(result)
|
||||
? propagateValue(result, propagate, value)
|
||||
: propagate(value);
|
||||
}
|
||||
|
||||
function propagateValue (result, propagate, x) {
|
||||
return resolve(result).then(function () {
|
||||
return propagate(x);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Recover from a failure by returning a defaultValue. If defaultValue
|
||||
* is a promise, it's fulfillment value will be used. If defaultValue is
|
||||
* a promise that rejects, the returned promise will reject with the
|
||||
* same reason.
|
||||
* @param {*} defaultValue
|
||||
* @returns {Promise} new promise
|
||||
*/
|
||||
Promise.prototype['else'] = Promise.prototype.orElse = function(defaultValue) {
|
||||
return this.then(void 0, function() {
|
||||
return defaultValue;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Shortcut for .then(function() { return value; })
|
||||
* @param {*} value
|
||||
* @return {Promise} a promise that:
|
||||
* - is fulfilled if value is not a promise, or
|
||||
* - if value is a promise, will fulfill with its value, or reject
|
||||
* with its reason.
|
||||
*/
|
||||
Promise.prototype['yield'] = function(value) {
|
||||
return this.then(function() {
|
||||
return value;
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Runs a side effect when this promise fulfills, without changing the
|
||||
* fulfillment value.
|
||||
* @param {function} onFulfilledSideEffect
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Promise.prototype.tap = function(onFulfilledSideEffect) {
|
||||
return this.then(onFulfilledSideEffect)['yield'](this);
|
||||
};
|
||||
|
||||
return Promise;
|
||||
};
|
||||
|
||||
function rejectInvalidPredicate() {
|
||||
throw new TypeError('catch predicate must be a function');
|
||||
}
|
||||
|
||||
function evaluatePredicate(e, predicate) {
|
||||
return isError(predicate) ? e instanceof predicate : predicate(e);
|
||||
}
|
||||
|
||||
function isError(predicate) {
|
||||
return predicate === Error
|
||||
|| (predicate != null && predicate.prototype instanceof Error);
|
||||
}
|
||||
|
||||
function maybeThenable(x) {
|
||||
return (typeof x === 'object' || typeof x === 'function') && x !== null;
|
||||
}
|
||||
|
||||
function identity(x) {
|
||||
return x;
|
||||
}
|
||||
|
||||
});
|
||||
}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
|
27
node_modules/when/lib/decorators/fold.js
generated
vendored
Normal file
27
node_modules/when/lib/decorators/fold.js
generated
vendored
Normal file
@ -0,0 +1,27 @@
|
||||
/** @license MIT License (c) copyright 2010-2014 original author or authors */
|
||||
/** @author Brian Cavalier */
|
||||
/** @author John Hann */
|
||||
/** @author Jeff Escalante */
|
||||
|
||||
(function(define) { 'use strict';
|
||||
define(function() {
|
||||
|
||||
return function fold(Promise) {
|
||||
|
||||
Promise.prototype.fold = function(f, z) {
|
||||
var promise = this._beget();
|
||||
|
||||
this._handler.fold(function(z, x, to) {
|
||||
Promise._handler(z).fold(function(x, z, to) {
|
||||
to.resolve(f.call(this, z, x));
|
||||
}, x, this, to);
|
||||
}, z, promise._handler.receiver, promise._handler);
|
||||
|
||||
return promise;
|
||||
};
|
||||
|
||||
return Promise;
|
||||
};
|
||||
|
||||
});
|
||||
}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
|
20
node_modules/when/lib/decorators/inspect.js
generated
vendored
Normal file
20
node_modules/when/lib/decorators/inspect.js
generated
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
/** @license MIT License (c) copyright 2010-2014 original author or authors */
|
||||
/** @author Brian Cavalier */
|
||||
/** @author John Hann */
|
||||
|
||||
(function(define) { 'use strict';
|
||||
define(function(require) {
|
||||
|
||||
var inspect = require('../state').inspect;
|
||||
|
||||
return function inspection(Promise) {
|
||||
|
||||
Promise.prototype.inspect = function() {
|
||||
return inspect(Promise._handler(this));
|
||||
};
|
||||
|
||||
return Promise;
|
||||
};
|
||||
|
||||
});
|
||||
}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
|
65
node_modules/when/lib/decorators/iterate.js
generated
vendored
Normal file
65
node_modules/when/lib/decorators/iterate.js
generated
vendored
Normal file
@ -0,0 +1,65 @@
|
||||
/** @license MIT License (c) copyright 2010-2014 original author or authors */
|
||||
/** @author Brian Cavalier */
|
||||
/** @author John Hann */
|
||||
|
||||
(function(define) { 'use strict';
|
||||
define(function() {
|
||||
|
||||
return function generate(Promise) {
|
||||
|
||||
var resolve = Promise.resolve;
|
||||
|
||||
Promise.iterate = iterate;
|
||||
Promise.unfold = unfold;
|
||||
|
||||
return Promise;
|
||||
|
||||
/**
|
||||
* @deprecated Use github.com/cujojs/most streams and most.iterate
|
||||
* Generate a (potentially infinite) stream of promised values:
|
||||
* x, f(x), f(f(x)), etc. until condition(x) returns true
|
||||
* @param {function} f function to generate a new x from the previous x
|
||||
* @param {function} condition function that, given the current x, returns
|
||||
* truthy when the iterate should stop
|
||||
* @param {function} handler function to handle the value produced by f
|
||||
* @param {*|Promise} x starting value, may be a promise
|
||||
* @return {Promise} the result of the last call to f before
|
||||
* condition returns true
|
||||
*/
|
||||
function iterate(f, condition, handler, x) {
|
||||
return unfold(function(x) {
|
||||
return [x, f(x)];
|
||||
}, condition, handler, x);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use github.com/cujojs/most streams and most.unfold
|
||||
* Generate a (potentially infinite) stream of promised values
|
||||
* by applying handler(generator(seed)) iteratively until
|
||||
* condition(seed) returns true.
|
||||
* @param {function} unspool function that generates a [value, newSeed]
|
||||
* given a seed.
|
||||
* @param {function} condition function that, given the current seed, returns
|
||||
* truthy when the unfold should stop
|
||||
* @param {function} handler function to handle the value produced by unspool
|
||||
* @param x {*|Promise} starting value, may be a promise
|
||||
* @return {Promise} the result of the last value produced by unspool before
|
||||
* condition returns true
|
||||
*/
|
||||
function unfold(unspool, condition, handler, x) {
|
||||
return resolve(x).then(function(seed) {
|
||||
return resolve(condition(seed)).then(function(done) {
|
||||
return done ? seed : resolve(unspool(seed)).spread(next);
|
||||
});
|
||||
});
|
||||
|
||||
function next(item, newSeed) {
|
||||
return resolve(handler(item)).then(function() {
|
||||
return unfold(unspool, condition, handler, newSeed);
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
});
|
||||
}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
|
24
node_modules/when/lib/decorators/progress.js
generated
vendored
Normal file
24
node_modules/when/lib/decorators/progress.js
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
/** @license MIT License (c) copyright 2010-2014 original author or authors */
|
||||
/** @author Brian Cavalier */
|
||||
/** @author John Hann */
|
||||
|
||||
(function(define) { 'use strict';
|
||||
define(function() {
|
||||
|
||||
return function progress(Promise) {
|
||||
|
||||
/**
|
||||
* @deprecated
|
||||
* Register a progress handler for this promise
|
||||
* @param {function} onProgress
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Promise.prototype.progress = function(onProgress) {
|
||||
return this.then(void 0, void 0, onProgress);
|
||||
};
|
||||
|
||||
return Promise;
|
||||
};
|
||||
|
||||
});
|
||||
}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
|
78
node_modules/when/lib/decorators/timed.js
generated
vendored
Normal file
78
node_modules/when/lib/decorators/timed.js
generated
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
/** @license MIT License (c) copyright 2010-2014 original author or authors */
|
||||
/** @author Brian Cavalier */
|
||||
/** @author John Hann */
|
||||
|
||||
(function(define) { 'use strict';
|
||||
define(function(require) {
|
||||
|
||||
var env = require('../env');
|
||||
var TimeoutError = require('../TimeoutError');
|
||||
|
||||
function setTimeout(f, ms, x, y) {
|
||||
return env.setTimer(function() {
|
||||
f(x, y, ms);
|
||||
}, ms);
|
||||
}
|
||||
|
||||
return function timed(Promise) {
|
||||
/**
|
||||
* Return a new promise whose fulfillment value is revealed only
|
||||
* after ms milliseconds
|
||||
* @param {number} ms milliseconds
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Promise.prototype.delay = function(ms) {
|
||||
var p = this._beget();
|
||||
this._handler.fold(handleDelay, ms, void 0, p._handler);
|
||||
return p;
|
||||
};
|
||||
|
||||
function handleDelay(ms, x, h) {
|
||||
setTimeout(resolveDelay, ms, x, h);
|
||||
}
|
||||
|
||||
function resolveDelay(x, h) {
|
||||
h.resolve(x);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a new promise that rejects after ms milliseconds unless
|
||||
* this promise fulfills earlier, in which case the returned promise
|
||||
* fulfills with the same value.
|
||||
* @param {number} ms milliseconds
|
||||
* @param {Error|*=} reason optional rejection reason to use, defaults
|
||||
* to a TimeoutError if not provided
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Promise.prototype.timeout = function(ms, reason) {
|
||||
var p = this._beget();
|
||||
var h = p._handler;
|
||||
|
||||
var t = setTimeout(onTimeout, ms, reason, p._handler);
|
||||
|
||||
this._handler.visit(h,
|
||||
function onFulfill(x) {
|
||||
env.clearTimer(t);
|
||||
this.resolve(x); // this = h
|
||||
},
|
||||
function onReject(x) {
|
||||
env.clearTimer(t);
|
||||
this.reject(x); // this = h
|
||||
},
|
||||
h.notify);
|
||||
|
||||
return p;
|
||||
};
|
||||
|
||||
function onTimeout(reason, h, ms) {
|
||||
var e = typeof reason === 'undefined'
|
||||
? new TimeoutError('timed out after ' + ms + 'ms')
|
||||
: reason;
|
||||
h.reject(e);
|
||||
}
|
||||
|
||||
return Promise;
|
||||
};
|
||||
|
||||
});
|
||||
}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
|
86
node_modules/when/lib/decorators/unhandledRejection.js
generated
vendored
Normal file
86
node_modules/when/lib/decorators/unhandledRejection.js
generated
vendored
Normal file
@ -0,0 +1,86 @@
|
||||
/** @license MIT License (c) copyright 2010-2014 original author or authors */
|
||||
/** @author Brian Cavalier */
|
||||
/** @author John Hann */
|
||||
|
||||
(function(define) { 'use strict';
|
||||
define(function(require) {
|
||||
|
||||
var setTimer = require('../env').setTimer;
|
||||
var format = require('../format');
|
||||
|
||||
return function unhandledRejection(Promise) {
|
||||
|
||||
var logError = noop;
|
||||
var logInfo = noop;
|
||||
var localConsole;
|
||||
|
||||
if(typeof console !== 'undefined') {
|
||||
// Alias console to prevent things like uglify's drop_console option from
|
||||
// removing console.log/error. Unhandled rejections fall into the same
|
||||
// category as uncaught exceptions, and build tools shouldn't silence them.
|
||||
localConsole = console;
|
||||
logError = typeof localConsole.error !== 'undefined'
|
||||
? function (e) { localConsole.error(e); }
|
||||
: function (e) { localConsole.log(e); };
|
||||
|
||||
logInfo = typeof localConsole.info !== 'undefined'
|
||||
? function (e) { localConsole.info(e); }
|
||||
: function (e) { localConsole.log(e); };
|
||||
}
|
||||
|
||||
Promise.onPotentiallyUnhandledRejection = function(rejection) {
|
||||
enqueue(report, rejection);
|
||||
};
|
||||
|
||||
Promise.onPotentiallyUnhandledRejectionHandled = function(rejection) {
|
||||
enqueue(unreport, rejection);
|
||||
};
|
||||
|
||||
Promise.onFatalRejection = function(rejection) {
|
||||
enqueue(throwit, rejection.value);
|
||||
};
|
||||
|
||||
var tasks = [];
|
||||
var reported = [];
|
||||
var running = null;
|
||||
|
||||
function report(r) {
|
||||
if(!r.handled) {
|
||||
reported.push(r);
|
||||
logError('Potentially unhandled rejection [' + r.id + '] ' + format.formatError(r.value));
|
||||
}
|
||||
}
|
||||
|
||||
function unreport(r) {
|
||||
var i = reported.indexOf(r);
|
||||
if(i >= 0) {
|
||||
reported.splice(i, 1);
|
||||
logInfo('Handled previous rejection [' + r.id + '] ' + format.formatObject(r.value));
|
||||
}
|
||||
}
|
||||
|
||||
function enqueue(f, x) {
|
||||
tasks.push(f, x);
|
||||
if(running === null) {
|
||||
running = setTimer(flush, 0);
|
||||
}
|
||||
}
|
||||
|
||||
function flush() {
|
||||
running = null;
|
||||
while(tasks.length > 0) {
|
||||
tasks.shift()(tasks.shift());
|
||||
}
|
||||
}
|
||||
|
||||
return Promise;
|
||||
};
|
||||
|
||||
function throwit(e) {
|
||||
throw e;
|
||||
}
|
||||
|
||||
function noop() {}
|
||||
|
||||
});
|
||||
}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(require); }));
|
38
node_modules/when/lib/decorators/with.js
generated
vendored
Normal file
38
node_modules/when/lib/decorators/with.js
generated
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
/** @license MIT License (c) copyright 2010-2014 original author or authors */
|
||||
/** @author Brian Cavalier */
|
||||
/** @author John Hann */
|
||||
|
||||
(function(define) { 'use strict';
|
||||
define(function() {
|
||||
|
||||
return function addWith(Promise) {
|
||||
/**
|
||||
* Returns a promise whose handlers will be called with `this` set to
|
||||
* the supplied receiver. Subsequent promises derived from the
|
||||
* returned promise will also have their handlers called with receiver
|
||||
* as `this`. Calling `with` with undefined or no arguments will return
|
||||
* a promise whose handlers will again be called in the usual Promises/A+
|
||||
* way (no `this`) thus safely undoing any previous `with` in the
|
||||
* promise chain.
|
||||
*
|
||||
* WARNING: Promises returned from `with`/`withThis` are NOT Promises/A+
|
||||
* compliant, specifically violating 2.2.5 (http://promisesaplus.com/#point-41)
|
||||
*
|
||||
* @param {object} receiver `this` value for all handlers attached to
|
||||
* the returned promise.
|
||||
* @returns {Promise}
|
||||
*/
|
||||
Promise.prototype['with'] = Promise.prototype.withThis = function(receiver) {
|
||||
var p = this._beget();
|
||||
var child = p._handler;
|
||||
child.receiver = receiver;
|
||||
this._handler.chain(child, receiver);
|
||||
return p;
|
||||
};
|
||||
|
||||
return Promise;
|
||||
};
|
||||
|
||||
});
|
||||
}(typeof define === 'function' && define.amd ? define : function(factory) { module.exports = factory(); }));
|
||||
|
Reference in New Issue
Block a user