UNPKG

183 kBJavaScriptView Raw
1/* @preserve
2 * The MIT License (MIT)
3 *
4 * Copyright (c) 2013-2018 Petka Antonov
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 *
24 */
25/**
26 * bluebird build version 3.7.2
27 * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, using, timers, filter, any, each
28*/
29!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Promise=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof _dereq_=="function"&&_dereq_;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 _dereq_=="function"&&_dereq_;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
30"use strict";
31module.exports = function(Promise) {
32var SomePromiseArray = Promise._SomePromiseArray;
33function any(promises) {
34 var ret = new SomePromiseArray(promises);
35 var promise = ret.promise();
36 ret.setHowMany(1);
37 ret.setUnwrap();
38 ret.init();
39 return promise;
40}
41
42Promise.any = function (promises) {
43 return any(promises);
44};
45
46Promise.prototype.any = function () {
47 return any(this);
48};
49
50};
51
52},{}],2:[function(_dereq_,module,exports){
53"use strict";
54var firstLineError;
55try {throw new Error(); } catch (e) {firstLineError = e;}
56var schedule = _dereq_("./schedule");
57var Queue = _dereq_("./queue");
58
59function Async() {
60 this._customScheduler = false;
61 this._isTickUsed = false;
62 this._lateQueue = new Queue(16);
63 this._normalQueue = new Queue(16);
64 this._haveDrainedQueues = false;
65 var self = this;
66 this.drainQueues = function () {
67 self._drainQueues();
68 };
69 this._schedule = schedule;
70}
71
72Async.prototype.setScheduler = function(fn) {
73 var prev = this._schedule;
74 this._schedule = fn;
75 this._customScheduler = true;
76 return prev;
77};
78
79Async.prototype.hasCustomScheduler = function() {
80 return this._customScheduler;
81};
82
83Async.prototype.haveItemsQueued = function () {
84 return this._isTickUsed || this._haveDrainedQueues;
85};
86
87
88Async.prototype.fatalError = function(e, isNode) {
89 if (isNode) {
90 process.stderr.write("Fatal " + (e instanceof Error ? e.stack : e) +
91 "\n");
92 process.exit(2);
93 } else {
94 this.throwLater(e);
95 }
96};
97
98Async.prototype.throwLater = function(fn, arg) {
99 if (arguments.length === 1) {
100 arg = fn;
101 fn = function () { throw arg; };
102 }
103 if (typeof setTimeout !== "undefined") {
104 setTimeout(function() {
105 fn(arg);
106 }, 0);
107 } else try {
108 this._schedule(function() {
109 fn(arg);
110 });
111 } catch (e) {
112 throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a");
113 }
114};
115
116function AsyncInvokeLater(fn, receiver, arg) {
117 this._lateQueue.push(fn, receiver, arg);
118 this._queueTick();
119}
120
121function AsyncInvoke(fn, receiver, arg) {
122 this._normalQueue.push(fn, receiver, arg);
123 this._queueTick();
124}
125
126function AsyncSettlePromises(promise) {
127 this._normalQueue._pushOne(promise);
128 this._queueTick();
129}
130
131Async.prototype.invokeLater = AsyncInvokeLater;
132Async.prototype.invoke = AsyncInvoke;
133Async.prototype.settlePromises = AsyncSettlePromises;
134
135
136function _drainQueue(queue) {
137 while (queue.length() > 0) {
138 _drainQueueStep(queue);
139 }
140}
141
142function _drainQueueStep(queue) {
143 var fn = queue.shift();
144 if (typeof fn !== "function") {
145 fn._settlePromises();
146 } else {
147 var receiver = queue.shift();
148 var arg = queue.shift();
149 fn.call(receiver, arg);
150 }
151}
152
153Async.prototype._drainQueues = function () {
154 _drainQueue(this._normalQueue);
155 this._reset();
156 this._haveDrainedQueues = true;
157 _drainQueue(this._lateQueue);
158};
159
160Async.prototype._queueTick = function () {
161 if (!this._isTickUsed) {
162 this._isTickUsed = true;
163 this._schedule(this.drainQueues);
164 }
165};
166
167Async.prototype._reset = function () {
168 this._isTickUsed = false;
169};
170
171module.exports = Async;
172module.exports.firstLineError = firstLineError;
173
174},{"./queue":26,"./schedule":29}],3:[function(_dereq_,module,exports){
175"use strict";
176module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) {
177var calledBind = false;
178var rejectThis = function(_, e) {
179 this._reject(e);
180};
181
182var targetRejected = function(e, context) {
183 context.promiseRejectionQueued = true;
184 context.bindingPromise._then(rejectThis, rejectThis, null, this, e);
185};
186
187var bindingResolved = function(thisArg, context) {
188 if (((this._bitField & 50397184) === 0)) {
189 this._resolveCallback(context.target);
190 }
191};
192
193var bindingRejected = function(e, context) {
194 if (!context.promiseRejectionQueued) this._reject(e);
195};
196
197Promise.prototype.bind = function (thisArg) {
198 if (!calledBind) {
199 calledBind = true;
200 Promise.prototype._propagateFrom = debug.propagateFromFunction();
201 Promise.prototype._boundValue = debug.boundValueFunction();
202 }
203 var maybePromise = tryConvertToPromise(thisArg);
204 var ret = new Promise(INTERNAL);
205 ret._propagateFrom(this, 1);
206 var target = this._target();
207 ret._setBoundTo(maybePromise);
208 if (maybePromise instanceof Promise) {
209 var context = {
210 promiseRejectionQueued: false,
211 promise: ret,
212 target: target,
213 bindingPromise: maybePromise
214 };
215 target._then(INTERNAL, targetRejected, undefined, ret, context);
216 maybePromise._then(
217 bindingResolved, bindingRejected, undefined, ret, context);
218 ret._setOnCancel(maybePromise);
219 } else {
220 ret._resolveCallback(target);
221 }
222 return ret;
223};
224
225Promise.prototype._setBoundTo = function (obj) {
226 if (obj !== undefined) {
227 this._bitField = this._bitField | 2097152;
228 this._boundTo = obj;
229 } else {
230 this._bitField = this._bitField & (~2097152);
231 }
232};
233
234Promise.prototype._isBound = function () {
235 return (this._bitField & 2097152) === 2097152;
236};
237
238Promise.bind = function (thisArg, value) {
239 return Promise.resolve(value).bind(thisArg);
240};
241};
242
243},{}],4:[function(_dereq_,module,exports){
244"use strict";
245var old;
246if (typeof Promise !== "undefined") old = Promise;
247function noConflict() {
248 try { if (Promise === bluebird) Promise = old; }
249 catch (e) {}
250 return bluebird;
251}
252var bluebird = _dereq_("./promise")();
253bluebird.noConflict = noConflict;
254module.exports = bluebird;
255
256},{"./promise":22}],5:[function(_dereq_,module,exports){
257"use strict";
258var cr = Object.create;
259if (cr) {
260 var callerCache = cr(null);
261 var getterCache = cr(null);
262 callerCache[" size"] = getterCache[" size"] = 0;
263}
264
265module.exports = function(Promise) {
266var util = _dereq_("./util");
267var canEvaluate = util.canEvaluate;
268var isIdentifier = util.isIdentifier;
269
270var getMethodCaller;
271var getGetter;
272if (!true) {
273var makeMethodCaller = function (methodName) {
274 return new Function("ensureMethod", " \n\
275 return function(obj) { \n\
276 'use strict' \n\
277 var len = this.length; \n\
278 ensureMethod(obj, 'methodName'); \n\
279 switch(len) { \n\
280 case 1: return obj.methodName(this[0]); \n\
281 case 2: return obj.methodName(this[0], this[1]); \n\
282 case 3: return obj.methodName(this[0], this[1], this[2]); \n\
283 case 0: return obj.methodName(); \n\
284 default: \n\
285 return obj.methodName.apply(obj, this); \n\
286 } \n\
287 }; \n\
288 ".replace(/methodName/g, methodName))(ensureMethod);
289};
290
291var makeGetter = function (propertyName) {
292 return new Function("obj", " \n\
293 'use strict'; \n\
294 return obj.propertyName; \n\
295 ".replace("propertyName", propertyName));
296};
297
298var getCompiled = function(name, compiler, cache) {
299 var ret = cache[name];
300 if (typeof ret !== "function") {
301 if (!isIdentifier(name)) {
302 return null;
303 }
304 ret = compiler(name);
305 cache[name] = ret;
306 cache[" size"]++;
307 if (cache[" size"] > 512) {
308 var keys = Object.keys(cache);
309 for (var i = 0; i < 256; ++i) delete cache[keys[i]];
310 cache[" size"] = keys.length - 256;
311 }
312 }
313 return ret;
314};
315
316getMethodCaller = function(name) {
317 return getCompiled(name, makeMethodCaller, callerCache);
318};
319
320getGetter = function(name) {
321 return getCompiled(name, makeGetter, getterCache);
322};
323}
324
325function ensureMethod(obj, methodName) {
326 var fn;
327 if (obj != null) fn = obj[methodName];
328 if (typeof fn !== "function") {
329 var message = "Object " + util.classString(obj) + " has no method '" +
330 util.toString(methodName) + "'";
331 throw new Promise.TypeError(message);
332 }
333 return fn;
334}
335
336function caller(obj) {
337 var methodName = this.pop();
338 var fn = ensureMethod(obj, methodName);
339 return fn.apply(obj, this);
340}
341Promise.prototype.call = function (methodName) {
342 var args = [].slice.call(arguments, 1);;
343 if (!true) {
344 if (canEvaluate) {
345 var maybeCaller = getMethodCaller(methodName);
346 if (maybeCaller !== null) {
347 return this._then(
348 maybeCaller, undefined, undefined, args, undefined);
349 }
350 }
351 }
352 args.push(methodName);
353 return this._then(caller, undefined, undefined, args, undefined);
354};
355
356function namedGetter(obj) {
357 return obj[this];
358}
359function indexedGetter(obj) {
360 var index = +this;
361 if (index < 0) index = Math.max(0, index + obj.length);
362 return obj[index];
363}
364Promise.prototype.get = function (propertyName) {
365 var isIndex = (typeof propertyName === "number");
366 var getter;
367 if (!isIndex) {
368 if (canEvaluate) {
369 var maybeGetter = getGetter(propertyName);
370 getter = maybeGetter !== null ? maybeGetter : namedGetter;
371 } else {
372 getter = namedGetter;
373 }
374 } else {
375 getter = indexedGetter;
376 }
377 return this._then(getter, undefined, undefined, propertyName, undefined);
378};
379};
380
381},{"./util":36}],6:[function(_dereq_,module,exports){
382"use strict";
383module.exports = function(Promise, PromiseArray, apiRejection, debug) {
384var util = _dereq_("./util");
385var tryCatch = util.tryCatch;
386var errorObj = util.errorObj;
387var async = Promise._async;
388
389Promise.prototype["break"] = Promise.prototype.cancel = function() {
390 if (!debug.cancellation()) return this._warn("cancellation is disabled");
391
392 var promise = this;
393 var child = promise;
394 while (promise._isCancellable()) {
395 if (!promise._cancelBy(child)) {
396 if (child._isFollowing()) {
397 child._followee().cancel();
398 } else {
399 child._cancelBranched();
400 }
401 break;
402 }
403
404 var parent = promise._cancellationParent;
405 if (parent == null || !parent._isCancellable()) {
406 if (promise._isFollowing()) {
407 promise._followee().cancel();
408 } else {
409 promise._cancelBranched();
410 }
411 break;
412 } else {
413 if (promise._isFollowing()) promise._followee().cancel();
414 promise._setWillBeCancelled();
415 child = promise;
416 promise = parent;
417 }
418 }
419};
420
421Promise.prototype._branchHasCancelled = function() {
422 this._branchesRemainingToCancel--;
423};
424
425Promise.prototype._enoughBranchesHaveCancelled = function() {
426 return this._branchesRemainingToCancel === undefined ||
427 this._branchesRemainingToCancel <= 0;
428};
429
430Promise.prototype._cancelBy = function(canceller) {
431 if (canceller === this) {
432 this._branchesRemainingToCancel = 0;
433 this._invokeOnCancel();
434 return true;
435 } else {
436 this._branchHasCancelled();
437 if (this._enoughBranchesHaveCancelled()) {
438 this._invokeOnCancel();
439 return true;
440 }
441 }
442 return false;
443};
444
445Promise.prototype._cancelBranched = function() {
446 if (this._enoughBranchesHaveCancelled()) {
447 this._cancel();
448 }
449};
450
451Promise.prototype._cancel = function() {
452 if (!this._isCancellable()) return;
453 this._setCancelled();
454 async.invoke(this._cancelPromises, this, undefined);
455};
456
457Promise.prototype._cancelPromises = function() {
458 if (this._length() > 0) this._settlePromises();
459};
460
461Promise.prototype._unsetOnCancel = function() {
462 this._onCancelField = undefined;
463};
464
465Promise.prototype._isCancellable = function() {
466 return this.isPending() && !this._isCancelled();
467};
468
469Promise.prototype.isCancellable = function() {
470 return this.isPending() && !this.isCancelled();
471};
472
473Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) {
474 if (util.isArray(onCancelCallback)) {
475 for (var i = 0; i < onCancelCallback.length; ++i) {
476 this._doInvokeOnCancel(onCancelCallback[i], internalOnly);
477 }
478 } else if (onCancelCallback !== undefined) {
479 if (typeof onCancelCallback === "function") {
480 if (!internalOnly) {
481 var e = tryCatch(onCancelCallback).call(this._boundValue());
482 if (e === errorObj) {
483 this._attachExtraTrace(e.e);
484 async.throwLater(e.e);
485 }
486 }
487 } else {
488 onCancelCallback._resultCancelled(this);
489 }
490 }
491};
492
493Promise.prototype._invokeOnCancel = function() {
494 var onCancelCallback = this._onCancel();
495 this._unsetOnCancel();
496 async.invoke(this._doInvokeOnCancel, this, onCancelCallback);
497};
498
499Promise.prototype._invokeInternalOnCancel = function() {
500 if (this._isCancellable()) {
501 this._doInvokeOnCancel(this._onCancel(), true);
502 this._unsetOnCancel();
503 }
504};
505
506Promise.prototype._resultCancelled = function() {
507 this.cancel();
508};
509
510};
511
512},{"./util":36}],7:[function(_dereq_,module,exports){
513"use strict";
514module.exports = function(NEXT_FILTER) {
515var util = _dereq_("./util");
516var getKeys = _dereq_("./es5").keys;
517var tryCatch = util.tryCatch;
518var errorObj = util.errorObj;
519
520function catchFilter(instances, cb, promise) {
521 return function(e) {
522 var boundTo = promise._boundValue();
523 predicateLoop: for (var i = 0; i < instances.length; ++i) {
524 var item = instances[i];
525
526 if (item === Error ||
527 (item != null && item.prototype instanceof Error)) {
528 if (e instanceof item) {
529 return tryCatch(cb).call(boundTo, e);
530 }
531 } else if (typeof item === "function") {
532 var matchesPredicate = tryCatch(item).call(boundTo, e);
533 if (matchesPredicate === errorObj) {
534 return matchesPredicate;
535 } else if (matchesPredicate) {
536 return tryCatch(cb).call(boundTo, e);
537 }
538 } else if (util.isObject(e)) {
539 var keys = getKeys(item);
540 for (var j = 0; j < keys.length; ++j) {
541 var key = keys[j];
542 if (item[key] != e[key]) {
543 continue predicateLoop;
544 }
545 }
546 return tryCatch(cb).call(boundTo, e);
547 }
548 }
549 return NEXT_FILTER;
550 };
551}
552
553return catchFilter;
554};
555
556},{"./es5":13,"./util":36}],8:[function(_dereq_,module,exports){
557"use strict";
558module.exports = function(Promise) {
559var longStackTraces = false;
560var contextStack = [];
561
562Promise.prototype._promiseCreated = function() {};
563Promise.prototype._pushContext = function() {};
564Promise.prototype._popContext = function() {return null;};
565Promise._peekContext = Promise.prototype._peekContext = function() {};
566
567function Context() {
568 this._trace = new Context.CapturedTrace(peekContext());
569}
570Context.prototype._pushContext = function () {
571 if (this._trace !== undefined) {
572 this._trace._promiseCreated = null;
573 contextStack.push(this._trace);
574 }
575};
576
577Context.prototype._popContext = function () {
578 if (this._trace !== undefined) {
579 var trace = contextStack.pop();
580 var ret = trace._promiseCreated;
581 trace._promiseCreated = null;
582 return ret;
583 }
584 return null;
585};
586
587function createContext() {
588 if (longStackTraces) return new Context();
589}
590
591function peekContext() {
592 var lastIndex = contextStack.length - 1;
593 if (lastIndex >= 0) {
594 return contextStack[lastIndex];
595 }
596 return undefined;
597}
598Context.CapturedTrace = null;
599Context.create = createContext;
600Context.deactivateLongStackTraces = function() {};
601Context.activateLongStackTraces = function() {
602 var Promise_pushContext = Promise.prototype._pushContext;
603 var Promise_popContext = Promise.prototype._popContext;
604 var Promise_PeekContext = Promise._peekContext;
605 var Promise_peekContext = Promise.prototype._peekContext;
606 var Promise_promiseCreated = Promise.prototype._promiseCreated;
607 Context.deactivateLongStackTraces = function() {
608 Promise.prototype._pushContext = Promise_pushContext;
609 Promise.prototype._popContext = Promise_popContext;
610 Promise._peekContext = Promise_PeekContext;
611 Promise.prototype._peekContext = Promise_peekContext;
612 Promise.prototype._promiseCreated = Promise_promiseCreated;
613 longStackTraces = false;
614 };
615 longStackTraces = true;
616 Promise.prototype._pushContext = Context.prototype._pushContext;
617 Promise.prototype._popContext = Context.prototype._popContext;
618 Promise._peekContext = Promise.prototype._peekContext = peekContext;
619 Promise.prototype._promiseCreated = function() {
620 var ctx = this._peekContext();
621 if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this;
622 };
623};
624return Context;
625};
626
627},{}],9:[function(_dereq_,module,exports){
628"use strict";
629module.exports = function(Promise, Context,
630 enableAsyncHooks, disableAsyncHooks) {
631var async = Promise._async;
632var Warning = _dereq_("./errors").Warning;
633var util = _dereq_("./util");
634var es5 = _dereq_("./es5");
635var canAttachTrace = util.canAttachTrace;
636var unhandledRejectionHandled;
637var possiblyUnhandledRejection;
638var bluebirdFramePattern =
639 /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/;
640var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/;
641var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/;
642var stackFramePattern = null;
643var formatStack = null;
644var indentStackFrames = false;
645var printWarning;
646var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 &&
647 (true ||
648 util.env("BLUEBIRD_DEBUG") ||
649 util.env("NODE_ENV") === "development"));
650
651var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 &&
652 (debugging || util.env("BLUEBIRD_WARNINGS")));
653
654var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 &&
655 (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES")));
656
657var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 &&
658 (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN"));
659
660var deferUnhandledRejectionCheck;
661(function() {
662 var promises = [];
663
664 function unhandledRejectionCheck() {
665 for (var i = 0; i < promises.length; ++i) {
666 promises[i]._notifyUnhandledRejection();
667 }
668 unhandledRejectionClear();
669 }
670
671 function unhandledRejectionClear() {
672 promises.length = 0;
673 }
674
675 deferUnhandledRejectionCheck = function(promise) {
676 promises.push(promise);
677 setTimeout(unhandledRejectionCheck, 1);
678 };
679
680 es5.defineProperty(Promise, "_unhandledRejectionCheck", {
681 value: unhandledRejectionCheck
682 });
683 es5.defineProperty(Promise, "_unhandledRejectionClear", {
684 value: unhandledRejectionClear
685 });
686})();
687
688Promise.prototype.suppressUnhandledRejections = function() {
689 var target = this._target();
690 target._bitField = ((target._bitField & (~1048576)) |
691 524288);
692};
693
694Promise.prototype._ensurePossibleRejectionHandled = function () {
695 if ((this._bitField & 524288) !== 0) return;
696 this._setRejectionIsUnhandled();
697 deferUnhandledRejectionCheck(this);
698};
699
700Promise.prototype._notifyUnhandledRejectionIsHandled = function () {
701 fireRejectionEvent("rejectionHandled",
702 unhandledRejectionHandled, undefined, this);
703};
704
705Promise.prototype._setReturnedNonUndefined = function() {
706 this._bitField = this._bitField | 268435456;
707};
708
709Promise.prototype._returnedNonUndefined = function() {
710 return (this._bitField & 268435456) !== 0;
711};
712
713Promise.prototype._notifyUnhandledRejection = function () {
714 if (this._isRejectionUnhandled()) {
715 var reason = this._settledValue();
716 this._setUnhandledRejectionIsNotified();
717 fireRejectionEvent("unhandledRejection",
718 possiblyUnhandledRejection, reason, this);
719 }
720};
721
722Promise.prototype._setUnhandledRejectionIsNotified = function () {
723 this._bitField = this._bitField | 262144;
724};
725
726Promise.prototype._unsetUnhandledRejectionIsNotified = function () {
727 this._bitField = this._bitField & (~262144);
728};
729
730Promise.prototype._isUnhandledRejectionNotified = function () {
731 return (this._bitField & 262144) > 0;
732};
733
734Promise.prototype._setRejectionIsUnhandled = function () {
735 this._bitField = this._bitField | 1048576;
736};
737
738Promise.prototype._unsetRejectionIsUnhandled = function () {
739 this._bitField = this._bitField & (~1048576);
740 if (this._isUnhandledRejectionNotified()) {
741 this._unsetUnhandledRejectionIsNotified();
742 this._notifyUnhandledRejectionIsHandled();
743 }
744};
745
746Promise.prototype._isRejectionUnhandled = function () {
747 return (this._bitField & 1048576) > 0;
748};
749
750Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) {
751 return warn(message, shouldUseOwnTrace, promise || this);
752};
753
754Promise.onPossiblyUnhandledRejection = function (fn) {
755 var context = Promise._getContext();
756 possiblyUnhandledRejection = util.contextBind(context, fn);
757};
758
759Promise.onUnhandledRejectionHandled = function (fn) {
760 var context = Promise._getContext();
761 unhandledRejectionHandled = util.contextBind(context, fn);
762};
763
764var disableLongStackTraces = function() {};
765Promise.longStackTraces = function () {
766 if (async.haveItemsQueued() && !config.longStackTraces) {
767 throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a");
768 }
769 if (!config.longStackTraces && longStackTracesIsSupported()) {
770 var Promise_captureStackTrace = Promise.prototype._captureStackTrace;
771 var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace;
772 var Promise_dereferenceTrace = Promise.prototype._dereferenceTrace;
773 config.longStackTraces = true;
774 disableLongStackTraces = function() {
775 if (async.haveItemsQueued() && !config.longStackTraces) {
776 throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a");
777 }
778 Promise.prototype._captureStackTrace = Promise_captureStackTrace;
779 Promise.prototype._attachExtraTrace = Promise_attachExtraTrace;
780 Promise.prototype._dereferenceTrace = Promise_dereferenceTrace;
781 Context.deactivateLongStackTraces();
782 config.longStackTraces = false;
783 };
784 Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace;
785 Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace;
786 Promise.prototype._dereferenceTrace = longStackTracesDereferenceTrace;
787 Context.activateLongStackTraces();
788 }
789};
790
791Promise.hasLongStackTraces = function () {
792 return config.longStackTraces && longStackTracesIsSupported();
793};
794
795
796var legacyHandlers = {
797 unhandledrejection: {
798 before: function() {
799 var ret = util.global.onunhandledrejection;
800 util.global.onunhandledrejection = null;
801 return ret;
802 },
803 after: function(fn) {
804 util.global.onunhandledrejection = fn;
805 }
806 },
807 rejectionhandled: {
808 before: function() {
809 var ret = util.global.onrejectionhandled;
810 util.global.onrejectionhandled = null;
811 return ret;
812 },
813 after: function(fn) {
814 util.global.onrejectionhandled = fn;
815 }
816 }
817};
818
819var fireDomEvent = (function() {
820 var dispatch = function(legacy, e) {
821 if (legacy) {
822 var fn;
823 try {
824 fn = legacy.before();
825 return !util.global.dispatchEvent(e);
826 } finally {
827 legacy.after(fn);
828 }
829 } else {
830 return !util.global.dispatchEvent(e);
831 }
832 };
833 try {
834 if (typeof CustomEvent === "function") {
835 var event = new CustomEvent("CustomEvent");
836 util.global.dispatchEvent(event);
837 return function(name, event) {
838 name = name.toLowerCase();
839 var eventData = {
840 detail: event,
841 cancelable: true
842 };
843 var domEvent = new CustomEvent(name, eventData);
844 es5.defineProperty(
845 domEvent, "promise", {value: event.promise});
846 es5.defineProperty(
847 domEvent, "reason", {value: event.reason});
848
849 return dispatch(legacyHandlers[name], domEvent);
850 };
851 } else if (typeof Event === "function") {
852 var event = new Event("CustomEvent");
853 util.global.dispatchEvent(event);
854 return function(name, event) {
855 name = name.toLowerCase();
856 var domEvent = new Event(name, {
857 cancelable: true
858 });
859 domEvent.detail = event;
860 es5.defineProperty(domEvent, "promise", {value: event.promise});
861 es5.defineProperty(domEvent, "reason", {value: event.reason});
862 return dispatch(legacyHandlers[name], domEvent);
863 };
864 } else {
865 var event = document.createEvent("CustomEvent");
866 event.initCustomEvent("testingtheevent", false, true, {});
867 util.global.dispatchEvent(event);
868 return function(name, event) {
869 name = name.toLowerCase();
870 var domEvent = document.createEvent("CustomEvent");
871 domEvent.initCustomEvent(name, false, true,
872 event);
873 return dispatch(legacyHandlers[name], domEvent);
874 };
875 }
876 } catch (e) {}
877 return function() {
878 return false;
879 };
880})();
881
882var fireGlobalEvent = (function() {
883 if (util.isNode) {
884 return function() {
885 return process.emit.apply(process, arguments);
886 };
887 } else {
888 if (!util.global) {
889 return function() {
890 return false;
891 };
892 }
893 return function(name) {
894 var methodName = "on" + name.toLowerCase();
895 var method = util.global[methodName];
896 if (!method) return false;
897 method.apply(util.global, [].slice.call(arguments, 1));
898 return true;
899 };
900 }
901})();
902
903function generatePromiseLifecycleEventObject(name, promise) {
904 return {promise: promise};
905}
906
907var eventToObjectGenerator = {
908 promiseCreated: generatePromiseLifecycleEventObject,
909 promiseFulfilled: generatePromiseLifecycleEventObject,
910 promiseRejected: generatePromiseLifecycleEventObject,
911 promiseResolved: generatePromiseLifecycleEventObject,
912 promiseCancelled: generatePromiseLifecycleEventObject,
913 promiseChained: function(name, promise, child) {
914 return {promise: promise, child: child};
915 },
916 warning: function(name, warning) {
917 return {warning: warning};
918 },
919 unhandledRejection: function (name, reason, promise) {
920 return {reason: reason, promise: promise};
921 },
922 rejectionHandled: generatePromiseLifecycleEventObject
923};
924
925var activeFireEvent = function (name) {
926 var globalEventFired = false;
927 try {
928 globalEventFired = fireGlobalEvent.apply(null, arguments);
929 } catch (e) {
930 async.throwLater(e);
931 globalEventFired = true;
932 }
933
934 var domEventFired = false;
935 try {
936 domEventFired = fireDomEvent(name,
937 eventToObjectGenerator[name].apply(null, arguments));
938 } catch (e) {
939 async.throwLater(e);
940 domEventFired = true;
941 }
942
943 return domEventFired || globalEventFired;
944};
945
946Promise.config = function(opts) {
947 opts = Object(opts);
948 if ("longStackTraces" in opts) {
949 if (opts.longStackTraces) {
950 Promise.longStackTraces();
951 } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) {
952 disableLongStackTraces();
953 }
954 }
955 if ("warnings" in opts) {
956 var warningsOption = opts.warnings;
957 config.warnings = !!warningsOption;
958 wForgottenReturn = config.warnings;
959
960 if (util.isObject(warningsOption)) {
961 if ("wForgottenReturn" in warningsOption) {
962 wForgottenReturn = !!warningsOption.wForgottenReturn;
963 }
964 }
965 }
966 if ("cancellation" in opts && opts.cancellation && !config.cancellation) {
967 if (async.haveItemsQueued()) {
968 throw new Error(
969 "cannot enable cancellation after promises are in use");
970 }
971 Promise.prototype._clearCancellationData =
972 cancellationClearCancellationData;
973 Promise.prototype._propagateFrom = cancellationPropagateFrom;
974 Promise.prototype._onCancel = cancellationOnCancel;
975 Promise.prototype._setOnCancel = cancellationSetOnCancel;
976 Promise.prototype._attachCancellationCallback =
977 cancellationAttachCancellationCallback;
978 Promise.prototype._execute = cancellationExecute;
979 propagateFromFunction = cancellationPropagateFrom;
980 config.cancellation = true;
981 }
982 if ("monitoring" in opts) {
983 if (opts.monitoring && !config.monitoring) {
984 config.monitoring = true;
985 Promise.prototype._fireEvent = activeFireEvent;
986 } else if (!opts.monitoring && config.monitoring) {
987 config.monitoring = false;
988 Promise.prototype._fireEvent = defaultFireEvent;
989 }
990 }
991 if ("asyncHooks" in opts && util.nodeSupportsAsyncResource) {
992 var prev = config.asyncHooks;
993 var cur = !!opts.asyncHooks;
994 if (prev !== cur) {
995 config.asyncHooks = cur;
996 if (cur) {
997 enableAsyncHooks();
998 } else {
999 disableAsyncHooks();
1000 }
1001 }
1002 }
1003 return Promise;
1004};
1005
1006function defaultFireEvent() { return false; }
1007
1008Promise.prototype._fireEvent = defaultFireEvent;
1009Promise.prototype._execute = function(executor, resolve, reject) {
1010 try {
1011 executor(resolve, reject);
1012 } catch (e) {
1013 return e;
1014 }
1015};
1016Promise.prototype._onCancel = function () {};
1017Promise.prototype._setOnCancel = function (handler) { ; };
1018Promise.prototype._attachCancellationCallback = function(onCancel) {
1019 ;
1020};
1021Promise.prototype._captureStackTrace = function () {};
1022Promise.prototype._attachExtraTrace = function () {};
1023Promise.prototype._dereferenceTrace = function () {};
1024Promise.prototype._clearCancellationData = function() {};
1025Promise.prototype._propagateFrom = function (parent, flags) {
1026 ;
1027 ;
1028};
1029
1030function cancellationExecute(executor, resolve, reject) {
1031 var promise = this;
1032 try {
1033 executor(resolve, reject, function(onCancel) {
1034 if (typeof onCancel !== "function") {
1035 throw new TypeError("onCancel must be a function, got: " +
1036 util.toString(onCancel));
1037 }
1038 promise._attachCancellationCallback(onCancel);
1039 });
1040 } catch (e) {
1041 return e;
1042 }
1043}
1044
1045function cancellationAttachCancellationCallback(onCancel) {
1046 if (!this._isCancellable()) return this;
1047
1048 var previousOnCancel = this._onCancel();
1049 if (previousOnCancel !== undefined) {
1050 if (util.isArray(previousOnCancel)) {
1051 previousOnCancel.push(onCancel);
1052 } else {
1053 this._setOnCancel([previousOnCancel, onCancel]);
1054 }
1055 } else {
1056 this._setOnCancel(onCancel);
1057 }
1058}
1059
1060function cancellationOnCancel() {
1061 return this._onCancelField;
1062}
1063
1064function cancellationSetOnCancel(onCancel) {
1065 this._onCancelField = onCancel;
1066}
1067
1068function cancellationClearCancellationData() {
1069 this._cancellationParent = undefined;
1070 this._onCancelField = undefined;
1071}
1072
1073function cancellationPropagateFrom(parent, flags) {
1074 if ((flags & 1) !== 0) {
1075 this._cancellationParent = parent;
1076 var branchesRemainingToCancel = parent._branchesRemainingToCancel;
1077 if (branchesRemainingToCancel === undefined) {
1078 branchesRemainingToCancel = 0;
1079 }
1080 parent._branchesRemainingToCancel = branchesRemainingToCancel + 1;
1081 }
1082 if ((flags & 2) !== 0 && parent._isBound()) {
1083 this._setBoundTo(parent._boundTo);
1084 }
1085}
1086
1087function bindingPropagateFrom(parent, flags) {
1088 if ((flags & 2) !== 0 && parent._isBound()) {
1089 this._setBoundTo(parent._boundTo);
1090 }
1091}
1092var propagateFromFunction = bindingPropagateFrom;
1093
1094function boundValueFunction() {
1095 var ret = this._boundTo;
1096 if (ret !== undefined) {
1097 if (ret instanceof Promise) {
1098 if (ret.isFulfilled()) {
1099 return ret.value();
1100 } else {
1101 return undefined;
1102 }
1103 }
1104 }
1105 return ret;
1106}
1107
1108function longStackTracesCaptureStackTrace() {
1109 this._trace = new CapturedTrace(this._peekContext());
1110}
1111
1112function longStackTracesAttachExtraTrace(error, ignoreSelf) {
1113 if (canAttachTrace(error)) {
1114 var trace = this._trace;
1115 if (trace !== undefined) {
1116 if (ignoreSelf) trace = trace._parent;
1117 }
1118 if (trace !== undefined) {
1119 trace.attachExtraTrace(error);
1120 } else if (!error.__stackCleaned__) {
1121 var parsed = parseStackAndMessage(error);
1122 util.notEnumerableProp(error, "stack",
1123 parsed.message + "\n" + parsed.stack.join("\n"));
1124 util.notEnumerableProp(error, "__stackCleaned__", true);
1125 }
1126 }
1127}
1128
1129function longStackTracesDereferenceTrace() {
1130 this._trace = undefined;
1131}
1132
1133function checkForgottenReturns(returnValue, promiseCreated, name, promise,
1134 parent) {
1135 if (returnValue === undefined && promiseCreated !== null &&
1136 wForgottenReturn) {
1137 if (parent !== undefined && parent._returnedNonUndefined()) return;
1138 if ((promise._bitField & 65535) === 0) return;
1139
1140 if (name) name = name + " ";
1141 var handlerLine = "";
1142 var creatorLine = "";
1143 if (promiseCreated._trace) {
1144 var traceLines = promiseCreated._trace.stack.split("\n");
1145 var stack = cleanStack(traceLines);
1146 for (var i = stack.length - 1; i >= 0; --i) {
1147 var line = stack[i];
1148 if (!nodeFramePattern.test(line)) {
1149 var lineMatches = line.match(parseLinePattern);
1150 if (lineMatches) {
1151 handlerLine = "at " + lineMatches[1] +
1152 ":" + lineMatches[2] + ":" + lineMatches[3] + " ";
1153 }
1154 break;
1155 }
1156 }
1157
1158 if (stack.length > 0) {
1159 var firstUserLine = stack[0];
1160 for (var i = 0; i < traceLines.length; ++i) {
1161
1162 if (traceLines[i] === firstUserLine) {
1163 if (i > 0) {
1164 creatorLine = "\n" + traceLines[i - 1];
1165 }
1166 break;
1167 }
1168 }
1169
1170 }
1171 }
1172 var msg = "a promise was created in a " + name +
1173 "handler " + handlerLine + "but was not returned from it, " +
1174 "see http://goo.gl/rRqMUw" +
1175 creatorLine;
1176 promise._warn(msg, true, promiseCreated);
1177 }
1178}
1179
1180function deprecated(name, replacement) {
1181 var message = name +
1182 " is deprecated and will be removed in a future version.";
1183 if (replacement) message += " Use " + replacement + " instead.";
1184 return warn(message);
1185}
1186
1187function warn(message, shouldUseOwnTrace, promise) {
1188 if (!config.warnings) return;
1189 var warning = new Warning(message);
1190 var ctx;
1191 if (shouldUseOwnTrace) {
1192 promise._attachExtraTrace(warning);
1193 } else if (config.longStackTraces && (ctx = Promise._peekContext())) {
1194 ctx.attachExtraTrace(warning);
1195 } else {
1196 var parsed = parseStackAndMessage(warning);
1197 warning.stack = parsed.message + "\n" + parsed.stack.join("\n");
1198 }
1199
1200 if (!activeFireEvent("warning", warning)) {
1201 formatAndLogError(warning, "", true);
1202 }
1203}
1204
1205function reconstructStack(message, stacks) {
1206 for (var i = 0; i < stacks.length - 1; ++i) {
1207 stacks[i].push("From previous event:");
1208 stacks[i] = stacks[i].join("\n");
1209 }
1210 if (i < stacks.length) {
1211 stacks[i] = stacks[i].join("\n");
1212 }
1213 return message + "\n" + stacks.join("\n");
1214}
1215
1216function removeDuplicateOrEmptyJumps(stacks) {
1217 for (var i = 0; i < stacks.length; ++i) {
1218 if (stacks[i].length === 0 ||
1219 ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {
1220 stacks.splice(i, 1);
1221 i--;
1222 }
1223 }
1224}
1225
1226function removeCommonRoots(stacks) {
1227 var current = stacks[0];
1228 for (var i = 1; i < stacks.length; ++i) {
1229 var prev = stacks[i];
1230 var currentLastIndex = current.length - 1;
1231 var currentLastLine = current[currentLastIndex];
1232 var commonRootMeetPoint = -1;
1233
1234 for (var j = prev.length - 1; j >= 0; --j) {
1235 if (prev[j] === currentLastLine) {
1236 commonRootMeetPoint = j;
1237 break;
1238 }
1239 }
1240
1241 for (var j = commonRootMeetPoint; j >= 0; --j) {
1242 var line = prev[j];
1243 if (current[currentLastIndex] === line) {
1244 current.pop();
1245 currentLastIndex--;
1246 } else {
1247 break;
1248 }
1249 }
1250 current = prev;
1251 }
1252}
1253
1254function cleanStack(stack) {
1255 var ret = [];
1256 for (var i = 0; i < stack.length; ++i) {
1257 var line = stack[i];
1258 var isTraceLine = " (No stack trace)" === line ||
1259 stackFramePattern.test(line);
1260 var isInternalFrame = isTraceLine && shouldIgnore(line);
1261 if (isTraceLine && !isInternalFrame) {
1262 if (indentStackFrames && line.charAt(0) !== " ") {
1263 line = " " + line;
1264 }
1265 ret.push(line);
1266 }
1267 }
1268 return ret;
1269}
1270
1271function stackFramesAsArray(error) {
1272 var stack = error.stack.replace(/\s+$/g, "").split("\n");
1273 for (var i = 0; i < stack.length; ++i) {
1274 var line = stack[i];
1275 if (" (No stack trace)" === line || stackFramePattern.test(line)) {
1276 break;
1277 }
1278 }
1279 if (i > 0 && error.name != "SyntaxError") {
1280 stack = stack.slice(i);
1281 }
1282 return stack;
1283}
1284
1285function parseStackAndMessage(error) {
1286 var stack = error.stack;
1287 var message = error.toString();
1288 stack = typeof stack === "string" && stack.length > 0
1289 ? stackFramesAsArray(error) : [" (No stack trace)"];
1290 return {
1291 message: message,
1292 stack: error.name == "SyntaxError" ? stack : cleanStack(stack)
1293 };
1294}
1295
1296function formatAndLogError(error, title, isSoft) {
1297 if (typeof console !== "undefined") {
1298 var message;
1299 if (util.isObject(error)) {
1300 var stack = error.stack;
1301 message = title + formatStack(stack, error);
1302 } else {
1303 message = title + String(error);
1304 }
1305 if (typeof printWarning === "function") {
1306 printWarning(message, isSoft);
1307 } else if (typeof console.log === "function" ||
1308 typeof console.log === "object") {
1309 console.log(message);
1310 }
1311 }
1312}
1313
1314function fireRejectionEvent(name, localHandler, reason, promise) {
1315 var localEventFired = false;
1316 try {
1317 if (typeof localHandler === "function") {
1318 localEventFired = true;
1319 if (name === "rejectionHandled") {
1320 localHandler(promise);
1321 } else {
1322 localHandler(reason, promise);
1323 }
1324 }
1325 } catch (e) {
1326 async.throwLater(e);
1327 }
1328
1329 if (name === "unhandledRejection") {
1330 if (!activeFireEvent(name, reason, promise) && !localEventFired) {
1331 formatAndLogError(reason, "Unhandled rejection ");
1332 }
1333 } else {
1334 activeFireEvent(name, promise);
1335 }
1336}
1337
1338function formatNonError(obj) {
1339 var str;
1340 if (typeof obj === "function") {
1341 str = "[function " +
1342 (obj.name || "anonymous") +
1343 "]";
1344 } else {
1345 str = obj && typeof obj.toString === "function"
1346 ? obj.toString() : util.toString(obj);
1347 var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/;
1348 if (ruselessToString.test(str)) {
1349 try {
1350 var newStr = JSON.stringify(obj);
1351 str = newStr;
1352 }
1353 catch(e) {
1354
1355 }
1356 }
1357 if (str.length === 0) {
1358 str = "(empty array)";
1359 }
1360 }
1361 return ("(<" + snip(str) + ">, no stack trace)");
1362}
1363
1364function snip(str) {
1365 var maxChars = 41;
1366 if (str.length < maxChars) {
1367 return str;
1368 }
1369 return str.substr(0, maxChars - 3) + "...";
1370}
1371
1372function longStackTracesIsSupported() {
1373 return typeof captureStackTrace === "function";
1374}
1375
1376var shouldIgnore = function() { return false; };
1377var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;
1378function parseLineInfo(line) {
1379 var matches = line.match(parseLineInfoRegex);
1380 if (matches) {
1381 return {
1382 fileName: matches[1],
1383 line: parseInt(matches[2], 10)
1384 };
1385 }
1386}
1387
1388function setBounds(firstLineError, lastLineError) {
1389 if (!longStackTracesIsSupported()) return;
1390 var firstStackLines = (firstLineError.stack || "").split("\n");
1391 var lastStackLines = (lastLineError.stack || "").split("\n");
1392 var firstIndex = -1;
1393 var lastIndex = -1;
1394 var firstFileName;
1395 var lastFileName;
1396 for (var i = 0; i < firstStackLines.length; ++i) {
1397 var result = parseLineInfo(firstStackLines[i]);
1398 if (result) {
1399 firstFileName = result.fileName;
1400 firstIndex = result.line;
1401 break;
1402 }
1403 }
1404 for (var i = 0; i < lastStackLines.length; ++i) {
1405 var result = parseLineInfo(lastStackLines[i]);
1406 if (result) {
1407 lastFileName = result.fileName;
1408 lastIndex = result.line;
1409 break;
1410 }
1411 }
1412 if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||
1413 firstFileName !== lastFileName || firstIndex >= lastIndex) {
1414 return;
1415 }
1416
1417 shouldIgnore = function(line) {
1418 if (bluebirdFramePattern.test(line)) return true;
1419 var info = parseLineInfo(line);
1420 if (info) {
1421 if (info.fileName === firstFileName &&
1422 (firstIndex <= info.line && info.line <= lastIndex)) {
1423 return true;
1424 }
1425 }
1426 return false;
1427 };
1428}
1429
1430function CapturedTrace(parent) {
1431 this._parent = parent;
1432 this._promisesCreated = 0;
1433 var length = this._length = 1 + (parent === undefined ? 0 : parent._length);
1434 captureStackTrace(this, CapturedTrace);
1435 if (length > 32) this.uncycle();
1436}
1437util.inherits(CapturedTrace, Error);
1438Context.CapturedTrace = CapturedTrace;
1439
1440CapturedTrace.prototype.uncycle = function() {
1441 var length = this._length;
1442 if (length < 2) return;
1443 var nodes = [];
1444 var stackToIndex = {};
1445
1446 for (var i = 0, node = this; node !== undefined; ++i) {
1447 nodes.push(node);
1448 node = node._parent;
1449 }
1450 length = this._length = i;
1451 for (var i = length - 1; i >= 0; --i) {
1452 var stack = nodes[i].stack;
1453 if (stackToIndex[stack] === undefined) {
1454 stackToIndex[stack] = i;
1455 }
1456 }
1457 for (var i = 0; i < length; ++i) {
1458 var currentStack = nodes[i].stack;
1459 var index = stackToIndex[currentStack];
1460 if (index !== undefined && index !== i) {
1461 if (index > 0) {
1462 nodes[index - 1]._parent = undefined;
1463 nodes[index - 1]._length = 1;
1464 }
1465 nodes[i]._parent = undefined;
1466 nodes[i]._length = 1;
1467 var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;
1468
1469 if (index < length - 1) {
1470 cycleEdgeNode._parent = nodes[index + 1];
1471 cycleEdgeNode._parent.uncycle();
1472 cycleEdgeNode._length =
1473 cycleEdgeNode._parent._length + 1;
1474 } else {
1475 cycleEdgeNode._parent = undefined;
1476 cycleEdgeNode._length = 1;
1477 }
1478 var currentChildLength = cycleEdgeNode._length + 1;
1479 for (var j = i - 2; j >= 0; --j) {
1480 nodes[j]._length = currentChildLength;
1481 currentChildLength++;
1482 }
1483 return;
1484 }
1485 }
1486};
1487
1488CapturedTrace.prototype.attachExtraTrace = function(error) {
1489 if (error.__stackCleaned__) return;
1490 this.uncycle();
1491 var parsed = parseStackAndMessage(error);
1492 var message = parsed.message;
1493 var stacks = [parsed.stack];
1494
1495 var trace = this;
1496 while (trace !== undefined) {
1497 stacks.push(cleanStack(trace.stack.split("\n")));
1498 trace = trace._parent;
1499 }
1500 removeCommonRoots(stacks);
1501 removeDuplicateOrEmptyJumps(stacks);
1502 util.notEnumerableProp(error, "stack", reconstructStack(message, stacks));
1503 util.notEnumerableProp(error, "__stackCleaned__", true);
1504};
1505
1506var captureStackTrace = (function stackDetection() {
1507 var v8stackFramePattern = /^\s*at\s*/;
1508 var v8stackFormatter = function(stack, error) {
1509 if (typeof stack === "string") return stack;
1510
1511 if (error.name !== undefined &&
1512 error.message !== undefined) {
1513 return error.toString();
1514 }
1515 return formatNonError(error);
1516 };
1517
1518 if (typeof Error.stackTraceLimit === "number" &&
1519 typeof Error.captureStackTrace === "function") {
1520 Error.stackTraceLimit += 6;
1521 stackFramePattern = v8stackFramePattern;
1522 formatStack = v8stackFormatter;
1523 var captureStackTrace = Error.captureStackTrace;
1524
1525 shouldIgnore = function(line) {
1526 return bluebirdFramePattern.test(line);
1527 };
1528 return function(receiver, ignoreUntil) {
1529 Error.stackTraceLimit += 6;
1530 captureStackTrace(receiver, ignoreUntil);
1531 Error.stackTraceLimit -= 6;
1532 };
1533 }
1534 var err = new Error();
1535
1536 if (typeof err.stack === "string" &&
1537 err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) {
1538 stackFramePattern = /@/;
1539 formatStack = v8stackFormatter;
1540 indentStackFrames = true;
1541 return function captureStackTrace(o) {
1542 o.stack = new Error().stack;
1543 };
1544 }
1545
1546 var hasStackAfterThrow;
1547 try { throw new Error(); }
1548 catch(e) {
1549 hasStackAfterThrow = ("stack" in e);
1550 }
1551 if (!("stack" in err) && hasStackAfterThrow &&
1552 typeof Error.stackTraceLimit === "number") {
1553 stackFramePattern = v8stackFramePattern;
1554 formatStack = v8stackFormatter;
1555 return function captureStackTrace(o) {
1556 Error.stackTraceLimit += 6;
1557 try { throw new Error(); }
1558 catch(e) { o.stack = e.stack; }
1559 Error.stackTraceLimit -= 6;
1560 };
1561 }
1562
1563 formatStack = function(stack, error) {
1564 if (typeof stack === "string") return stack;
1565
1566 if ((typeof error === "object" ||
1567 typeof error === "function") &&
1568 error.name !== undefined &&
1569 error.message !== undefined) {
1570 return error.toString();
1571 }
1572 return formatNonError(error);
1573 };
1574
1575 return null;
1576
1577})([]);
1578
1579if (typeof console !== "undefined" && typeof console.warn !== "undefined") {
1580 printWarning = function (message) {
1581 console.warn(message);
1582 };
1583 if (util.isNode && process.stderr.isTTY) {
1584 printWarning = function(message, isSoft) {
1585 var color = isSoft ? "\u001b[33m" : "\u001b[31m";
1586 console.warn(color + message + "\u001b[0m\n");
1587 };
1588 } else if (!util.isNode && typeof (new Error().stack) === "string") {
1589 printWarning = function(message, isSoft) {
1590 console.warn("%c" + message,
1591 isSoft ? "color: darkorange" : "color: red");
1592 };
1593 }
1594}
1595
1596var config = {
1597 warnings: warnings,
1598 longStackTraces: false,
1599 cancellation: false,
1600 monitoring: false,
1601 asyncHooks: false
1602};
1603
1604if (longStackTraces) Promise.longStackTraces();
1605
1606return {
1607 asyncHooks: function() {
1608 return config.asyncHooks;
1609 },
1610 longStackTraces: function() {
1611 return config.longStackTraces;
1612 },
1613 warnings: function() {
1614 return config.warnings;
1615 },
1616 cancellation: function() {
1617 return config.cancellation;
1618 },
1619 monitoring: function() {
1620 return config.monitoring;
1621 },
1622 propagateFromFunction: function() {
1623 return propagateFromFunction;
1624 },
1625 boundValueFunction: function() {
1626 return boundValueFunction;
1627 },
1628 checkForgottenReturns: checkForgottenReturns,
1629 setBounds: setBounds,
1630 warn: warn,
1631 deprecated: deprecated,
1632 CapturedTrace: CapturedTrace,
1633 fireDomEvent: fireDomEvent,
1634 fireGlobalEvent: fireGlobalEvent
1635};
1636};
1637
1638},{"./errors":12,"./es5":13,"./util":36}],10:[function(_dereq_,module,exports){
1639"use strict";
1640module.exports = function(Promise) {
1641function returner() {
1642 return this.value;
1643}
1644function thrower() {
1645 throw this.reason;
1646}
1647
1648Promise.prototype["return"] =
1649Promise.prototype.thenReturn = function (value) {
1650 if (value instanceof Promise) value.suppressUnhandledRejections();
1651 return this._then(
1652 returner, undefined, undefined, {value: value}, undefined);
1653};
1654
1655Promise.prototype["throw"] =
1656Promise.prototype.thenThrow = function (reason) {
1657 return this._then(
1658 thrower, undefined, undefined, {reason: reason}, undefined);
1659};
1660
1661Promise.prototype.catchThrow = function (reason) {
1662 if (arguments.length <= 1) {
1663 return this._then(
1664 undefined, thrower, undefined, {reason: reason}, undefined);
1665 } else {
1666 var _reason = arguments[1];
1667 var handler = function() {throw _reason;};
1668 return this.caught(reason, handler);
1669 }
1670};
1671
1672Promise.prototype.catchReturn = function (value) {
1673 if (arguments.length <= 1) {
1674 if (value instanceof Promise) value.suppressUnhandledRejections();
1675 return this._then(
1676 undefined, returner, undefined, {value: value}, undefined);
1677 } else {
1678 var _value = arguments[1];
1679 if (_value instanceof Promise) _value.suppressUnhandledRejections();
1680 var handler = function() {return _value;};
1681 return this.caught(value, handler);
1682 }
1683};
1684};
1685
1686},{}],11:[function(_dereq_,module,exports){
1687"use strict";
1688module.exports = function(Promise, INTERNAL) {
1689var PromiseReduce = Promise.reduce;
1690var PromiseAll = Promise.all;
1691
1692function promiseAllThis() {
1693 return PromiseAll(this);
1694}
1695
1696function PromiseMapSeries(promises, fn) {
1697 return PromiseReduce(promises, fn, INTERNAL, INTERNAL);
1698}
1699
1700Promise.prototype.each = function (fn) {
1701 return PromiseReduce(this, fn, INTERNAL, 0)
1702 ._then(promiseAllThis, undefined, undefined, this, undefined);
1703};
1704
1705Promise.prototype.mapSeries = function (fn) {
1706 return PromiseReduce(this, fn, INTERNAL, INTERNAL);
1707};
1708
1709Promise.each = function (promises, fn) {
1710 return PromiseReduce(promises, fn, INTERNAL, 0)
1711 ._then(promiseAllThis, undefined, undefined, promises, undefined);
1712};
1713
1714Promise.mapSeries = PromiseMapSeries;
1715};
1716
1717
1718},{}],12:[function(_dereq_,module,exports){
1719"use strict";
1720var es5 = _dereq_("./es5");
1721var Objectfreeze = es5.freeze;
1722var util = _dereq_("./util");
1723var inherits = util.inherits;
1724var notEnumerableProp = util.notEnumerableProp;
1725
1726function subError(nameProperty, defaultMessage) {
1727 function SubError(message) {
1728 if (!(this instanceof SubError)) return new SubError(message);
1729 notEnumerableProp(this, "message",
1730 typeof message === "string" ? message : defaultMessage);
1731 notEnumerableProp(this, "name", nameProperty);
1732 if (Error.captureStackTrace) {
1733 Error.captureStackTrace(this, this.constructor);
1734 } else {
1735 Error.call(this);
1736 }
1737 }
1738 inherits(SubError, Error);
1739 return SubError;
1740}
1741
1742var _TypeError, _RangeError;
1743var Warning = subError("Warning", "warning");
1744var CancellationError = subError("CancellationError", "cancellation error");
1745var TimeoutError = subError("TimeoutError", "timeout error");
1746var AggregateError = subError("AggregateError", "aggregate error");
1747try {
1748 _TypeError = TypeError;
1749 _RangeError = RangeError;
1750} catch(e) {
1751 _TypeError = subError("TypeError", "type error");
1752 _RangeError = subError("RangeError", "range error");
1753}
1754
1755var methods = ("join pop push shift unshift slice filter forEach some " +
1756 "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" ");
1757
1758for (var i = 0; i < methods.length; ++i) {
1759 if (typeof Array.prototype[methods[i]] === "function") {
1760 AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];
1761 }
1762}
1763
1764es5.defineProperty(AggregateError.prototype, "length", {
1765 value: 0,
1766 configurable: false,
1767 writable: true,
1768 enumerable: true
1769});
1770AggregateError.prototype["isOperational"] = true;
1771var level = 0;
1772AggregateError.prototype.toString = function() {
1773 var indent = Array(level * 4 + 1).join(" ");
1774 var ret = "\n" + indent + "AggregateError of:" + "\n";
1775 level++;
1776 indent = Array(level * 4 + 1).join(" ");
1777 for (var i = 0; i < this.length; ++i) {
1778 var str = this[i] === this ? "[Circular AggregateError]" : this[i] + "";
1779 var lines = str.split("\n");
1780 for (var j = 0; j < lines.length; ++j) {
1781 lines[j] = indent + lines[j];
1782 }
1783 str = lines.join("\n");
1784 ret += str + "\n";
1785 }
1786 level--;
1787 return ret;
1788};
1789
1790function OperationalError(message) {
1791 if (!(this instanceof OperationalError))
1792 return new OperationalError(message);
1793 notEnumerableProp(this, "name", "OperationalError");
1794 notEnumerableProp(this, "message", message);
1795 this.cause = message;
1796 this["isOperational"] = true;
1797
1798 if (message instanceof Error) {
1799 notEnumerableProp(this, "message", message.message);
1800 notEnumerableProp(this, "stack", message.stack);
1801 } else if (Error.captureStackTrace) {
1802 Error.captureStackTrace(this, this.constructor);
1803 }
1804
1805}
1806inherits(OperationalError, Error);
1807
1808var errorTypes = Error["__BluebirdErrorTypes__"];
1809if (!errorTypes) {
1810 errorTypes = Objectfreeze({
1811 CancellationError: CancellationError,
1812 TimeoutError: TimeoutError,
1813 OperationalError: OperationalError,
1814 RejectionError: OperationalError,
1815 AggregateError: AggregateError
1816 });
1817 es5.defineProperty(Error, "__BluebirdErrorTypes__", {
1818 value: errorTypes,
1819 writable: false,
1820 enumerable: false,
1821 configurable: false
1822 });
1823}
1824
1825module.exports = {
1826 Error: Error,
1827 TypeError: _TypeError,
1828 RangeError: _RangeError,
1829 CancellationError: errorTypes.CancellationError,
1830 OperationalError: errorTypes.OperationalError,
1831 TimeoutError: errorTypes.TimeoutError,
1832 AggregateError: errorTypes.AggregateError,
1833 Warning: Warning
1834};
1835
1836},{"./es5":13,"./util":36}],13:[function(_dereq_,module,exports){
1837var isES5 = (function(){
1838 "use strict";
1839 return this === undefined;
1840})();
1841
1842if (isES5) {
1843 module.exports = {
1844 freeze: Object.freeze,
1845 defineProperty: Object.defineProperty,
1846 getDescriptor: Object.getOwnPropertyDescriptor,
1847 keys: Object.keys,
1848 names: Object.getOwnPropertyNames,
1849 getPrototypeOf: Object.getPrototypeOf,
1850 isArray: Array.isArray,
1851 isES5: isES5,
1852 propertyIsWritable: function(obj, prop) {
1853 var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
1854 return !!(!descriptor || descriptor.writable || descriptor.set);
1855 }
1856 };
1857} else {
1858 var has = {}.hasOwnProperty;
1859 var str = {}.toString;
1860 var proto = {}.constructor.prototype;
1861
1862 var ObjectKeys = function (o) {
1863 var ret = [];
1864 for (var key in o) {
1865 if (has.call(o, key)) {
1866 ret.push(key);
1867 }
1868 }
1869 return ret;
1870 };
1871
1872 var ObjectGetDescriptor = function(o, key) {
1873 return {value: o[key]};
1874 };
1875
1876 var ObjectDefineProperty = function (o, key, desc) {
1877 o[key] = desc.value;
1878 return o;
1879 };
1880
1881 var ObjectFreeze = function (obj) {
1882 return obj;
1883 };
1884
1885 var ObjectGetPrototypeOf = function (obj) {
1886 try {
1887 return Object(obj).constructor.prototype;
1888 }
1889 catch (e) {
1890 return proto;
1891 }
1892 };
1893
1894 var ArrayIsArray = function (obj) {
1895 try {
1896 return str.call(obj) === "[object Array]";
1897 }
1898 catch(e) {
1899 return false;
1900 }
1901 };
1902
1903 module.exports = {
1904 isArray: ArrayIsArray,
1905 keys: ObjectKeys,
1906 names: ObjectKeys,
1907 defineProperty: ObjectDefineProperty,
1908 getDescriptor: ObjectGetDescriptor,
1909 freeze: ObjectFreeze,
1910 getPrototypeOf: ObjectGetPrototypeOf,
1911 isES5: isES5,
1912 propertyIsWritable: function() {
1913 return true;
1914 }
1915 };
1916}
1917
1918},{}],14:[function(_dereq_,module,exports){
1919"use strict";
1920module.exports = function(Promise, INTERNAL) {
1921var PromiseMap = Promise.map;
1922
1923Promise.prototype.filter = function (fn, options) {
1924 return PromiseMap(this, fn, options, INTERNAL);
1925};
1926
1927Promise.filter = function (promises, fn, options) {
1928 return PromiseMap(promises, fn, options, INTERNAL);
1929};
1930};
1931
1932},{}],15:[function(_dereq_,module,exports){
1933"use strict";
1934module.exports = function(Promise, tryConvertToPromise, NEXT_FILTER) {
1935var util = _dereq_("./util");
1936var CancellationError = Promise.CancellationError;
1937var errorObj = util.errorObj;
1938var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER);
1939
1940function PassThroughHandlerContext(promise, type, handler) {
1941 this.promise = promise;
1942 this.type = type;
1943 this.handler = handler;
1944 this.called = false;
1945 this.cancelPromise = null;
1946}
1947
1948PassThroughHandlerContext.prototype.isFinallyHandler = function() {
1949 return this.type === 0;
1950};
1951
1952function FinallyHandlerCancelReaction(finallyHandler) {
1953 this.finallyHandler = finallyHandler;
1954}
1955
1956FinallyHandlerCancelReaction.prototype._resultCancelled = function() {
1957 checkCancel(this.finallyHandler);
1958};
1959
1960function checkCancel(ctx, reason) {
1961 if (ctx.cancelPromise != null) {
1962 if (arguments.length > 1) {
1963 ctx.cancelPromise._reject(reason);
1964 } else {
1965 ctx.cancelPromise._cancel();
1966 }
1967 ctx.cancelPromise = null;
1968 return true;
1969 }
1970 return false;
1971}
1972
1973function succeed() {
1974 return finallyHandler.call(this, this.promise._target()._settledValue());
1975}
1976function fail(reason) {
1977 if (checkCancel(this, reason)) return;
1978 errorObj.e = reason;
1979 return errorObj;
1980}
1981function finallyHandler(reasonOrValue) {
1982 var promise = this.promise;
1983 var handler = this.handler;
1984
1985 if (!this.called) {
1986 this.called = true;
1987 var ret = this.isFinallyHandler()
1988 ? handler.call(promise._boundValue())
1989 : handler.call(promise._boundValue(), reasonOrValue);
1990 if (ret === NEXT_FILTER) {
1991 return ret;
1992 } else if (ret !== undefined) {
1993 promise._setReturnedNonUndefined();
1994 var maybePromise = tryConvertToPromise(ret, promise);
1995 if (maybePromise instanceof Promise) {
1996 if (this.cancelPromise != null) {
1997 if (maybePromise._isCancelled()) {
1998 var reason =
1999 new CancellationError("late cancellation observer");
2000 promise._attachExtraTrace(reason);
2001 errorObj.e = reason;
2002 return errorObj;
2003 } else if (maybePromise.isPending()) {
2004 maybePromise._attachCancellationCallback(
2005 new FinallyHandlerCancelReaction(this));
2006 }
2007 }
2008 return maybePromise._then(
2009 succeed, fail, undefined, this, undefined);
2010 }
2011 }
2012 }
2013
2014 if (promise.isRejected()) {
2015 checkCancel(this);
2016 errorObj.e = reasonOrValue;
2017 return errorObj;
2018 } else {
2019 checkCancel(this);
2020 return reasonOrValue;
2021 }
2022}
2023
2024Promise.prototype._passThrough = function(handler, type, success, fail) {
2025 if (typeof handler !== "function") return this.then();
2026 return this._then(success,
2027 fail,
2028 undefined,
2029 new PassThroughHandlerContext(this, type, handler),
2030 undefined);
2031};
2032
2033Promise.prototype.lastly =
2034Promise.prototype["finally"] = function (handler) {
2035 return this._passThrough(handler,
2036 0,
2037 finallyHandler,
2038 finallyHandler);
2039};
2040
2041
2042Promise.prototype.tap = function (handler) {
2043 return this._passThrough(handler, 1, finallyHandler);
2044};
2045
2046Promise.prototype.tapCatch = function (handlerOrPredicate) {
2047 var len = arguments.length;
2048 if(len === 1) {
2049 return this._passThrough(handlerOrPredicate,
2050 1,
2051 undefined,
2052 finallyHandler);
2053 } else {
2054 var catchInstances = new Array(len - 1),
2055 j = 0, i;
2056 for (i = 0; i < len - 1; ++i) {
2057 var item = arguments[i];
2058 if (util.isObject(item)) {
2059 catchInstances[j++] = item;
2060 } else {
2061 return Promise.reject(new TypeError(
2062 "tapCatch statement predicate: "
2063 + "expecting an object but got " + util.classString(item)
2064 ));
2065 }
2066 }
2067 catchInstances.length = j;
2068 var handler = arguments[i];
2069 return this._passThrough(catchFilter(catchInstances, handler, this),
2070 1,
2071 undefined,
2072 finallyHandler);
2073 }
2074
2075};
2076
2077return PassThroughHandlerContext;
2078};
2079
2080},{"./catch_filter":7,"./util":36}],16:[function(_dereq_,module,exports){
2081"use strict";
2082module.exports = function(Promise,
2083 apiRejection,
2084 INTERNAL,
2085 tryConvertToPromise,
2086 Proxyable,
2087 debug) {
2088var errors = _dereq_("./errors");
2089var TypeError = errors.TypeError;
2090var util = _dereq_("./util");
2091var errorObj = util.errorObj;
2092var tryCatch = util.tryCatch;
2093var yieldHandlers = [];
2094
2095function promiseFromYieldHandler(value, yieldHandlers, traceParent) {
2096 for (var i = 0; i < yieldHandlers.length; ++i) {
2097 traceParent._pushContext();
2098 var result = tryCatch(yieldHandlers[i])(value);
2099 traceParent._popContext();
2100 if (result === errorObj) {
2101 traceParent._pushContext();
2102 var ret = Promise.reject(errorObj.e);
2103 traceParent._popContext();
2104 return ret;
2105 }
2106 var maybePromise = tryConvertToPromise(result, traceParent);
2107 if (maybePromise instanceof Promise) return maybePromise;
2108 }
2109 return null;
2110}
2111
2112function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {
2113 if (debug.cancellation()) {
2114 var internal = new Promise(INTERNAL);
2115 var _finallyPromise = this._finallyPromise = new Promise(INTERNAL);
2116 this._promise = internal.lastly(function() {
2117 return _finallyPromise;
2118 });
2119 internal._captureStackTrace();
2120 internal._setOnCancel(this);
2121 } else {
2122 var promise = this._promise = new Promise(INTERNAL);
2123 promise._captureStackTrace();
2124 }
2125 this._stack = stack;
2126 this._generatorFunction = generatorFunction;
2127 this._receiver = receiver;
2128 this._generator = undefined;
2129 this._yieldHandlers = typeof yieldHandler === "function"
2130 ? [yieldHandler].concat(yieldHandlers)
2131 : yieldHandlers;
2132 this._yieldedPromise = null;
2133 this._cancellationPhase = false;
2134}
2135util.inherits(PromiseSpawn, Proxyable);
2136
2137PromiseSpawn.prototype._isResolved = function() {
2138 return this._promise === null;
2139};
2140
2141PromiseSpawn.prototype._cleanup = function() {
2142 this._promise = this._generator = null;
2143 if (debug.cancellation() && this._finallyPromise !== null) {
2144 this._finallyPromise._fulfill();
2145 this._finallyPromise = null;
2146 }
2147};
2148
2149PromiseSpawn.prototype._promiseCancelled = function() {
2150 if (this._isResolved()) return;
2151 var implementsReturn = typeof this._generator["return"] !== "undefined";
2152
2153 var result;
2154 if (!implementsReturn) {
2155 var reason = new Promise.CancellationError(
2156 "generator .return() sentinel");
2157 Promise.coroutine.returnSentinel = reason;
2158 this._promise._attachExtraTrace(reason);
2159 this._promise._pushContext();
2160 result = tryCatch(this._generator["throw"]).call(this._generator,
2161 reason);
2162 this._promise._popContext();
2163 } else {
2164 this._promise._pushContext();
2165 result = tryCatch(this._generator["return"]).call(this._generator,
2166 undefined);
2167 this._promise._popContext();
2168 }
2169 this._cancellationPhase = true;
2170 this._yieldedPromise = null;
2171 this._continue(result);
2172};
2173
2174PromiseSpawn.prototype._promiseFulfilled = function(value) {
2175 this._yieldedPromise = null;
2176 this._promise._pushContext();
2177 var result = tryCatch(this._generator.next).call(this._generator, value);
2178 this._promise._popContext();
2179 this._continue(result);
2180};
2181
2182PromiseSpawn.prototype._promiseRejected = function(reason) {
2183 this._yieldedPromise = null;
2184 this._promise._attachExtraTrace(reason);
2185 this._promise._pushContext();
2186 var result = tryCatch(this._generator["throw"])
2187 .call(this._generator, reason);
2188 this._promise._popContext();
2189 this._continue(result);
2190};
2191
2192PromiseSpawn.prototype._resultCancelled = function() {
2193 if (this._yieldedPromise instanceof Promise) {
2194 var promise = this._yieldedPromise;
2195 this._yieldedPromise = null;
2196 promise.cancel();
2197 }
2198};
2199
2200PromiseSpawn.prototype.promise = function () {
2201 return this._promise;
2202};
2203
2204PromiseSpawn.prototype._run = function () {
2205 this._generator = this._generatorFunction.call(this._receiver);
2206 this._receiver =
2207 this._generatorFunction = undefined;
2208 this._promiseFulfilled(undefined);
2209};
2210
2211PromiseSpawn.prototype._continue = function (result) {
2212 var promise = this._promise;
2213 if (result === errorObj) {
2214 this._cleanup();
2215 if (this._cancellationPhase) {
2216 return promise.cancel();
2217 } else {
2218 return promise._rejectCallback(result.e, false);
2219 }
2220 }
2221
2222 var value = result.value;
2223 if (result.done === true) {
2224 this._cleanup();
2225 if (this._cancellationPhase) {
2226 return promise.cancel();
2227 } else {
2228 return promise._resolveCallback(value);
2229 }
2230 } else {
2231 var maybePromise = tryConvertToPromise(value, this._promise);
2232 if (!(maybePromise instanceof Promise)) {
2233 maybePromise =
2234 promiseFromYieldHandler(maybePromise,
2235 this._yieldHandlers,
2236 this._promise);
2237 if (maybePromise === null) {
2238 this._promiseRejected(
2239 new TypeError(
2240 "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/MqrFmX\u000a\u000a".replace("%s", String(value)) +
2241 "From coroutine:\u000a" +
2242 this._stack.split("\n").slice(1, -7).join("\n")
2243 )
2244 );
2245 return;
2246 }
2247 }
2248 maybePromise = maybePromise._target();
2249 var bitField = maybePromise._bitField;
2250 ;
2251 if (((bitField & 50397184) === 0)) {
2252 this._yieldedPromise = maybePromise;
2253 maybePromise._proxy(this, null);
2254 } else if (((bitField & 33554432) !== 0)) {
2255 Promise._async.invoke(
2256 this._promiseFulfilled, this, maybePromise._value()
2257 );
2258 } else if (((bitField & 16777216) !== 0)) {
2259 Promise._async.invoke(
2260 this._promiseRejected, this, maybePromise._reason()
2261 );
2262 } else {
2263 this._promiseCancelled();
2264 }
2265 }
2266};
2267
2268Promise.coroutine = function (generatorFunction, options) {
2269 if (typeof generatorFunction !== "function") {
2270 throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a");
2271 }
2272 var yieldHandler = Object(options).yieldHandler;
2273 var PromiseSpawn$ = PromiseSpawn;
2274 var stack = new Error().stack;
2275 return function () {
2276 var generator = generatorFunction.apply(this, arguments);
2277 var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,
2278 stack);
2279 var ret = spawn.promise();
2280 spawn._generator = generator;
2281 spawn._promiseFulfilled(undefined);
2282 return ret;
2283 };
2284};
2285
2286Promise.coroutine.addYieldHandler = function(fn) {
2287 if (typeof fn !== "function") {
2288 throw new TypeError("expecting a function but got " + util.classString(fn));
2289 }
2290 yieldHandlers.push(fn);
2291};
2292
2293Promise.spawn = function (generatorFunction) {
2294 debug.deprecated("Promise.spawn()", "Promise.coroutine()");
2295 if (typeof generatorFunction !== "function") {
2296 return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a");
2297 }
2298 var spawn = new PromiseSpawn(generatorFunction, this);
2299 var ret = spawn.promise();
2300 spawn._run(Promise.spawn);
2301 return ret;
2302};
2303};
2304
2305},{"./errors":12,"./util":36}],17:[function(_dereq_,module,exports){
2306"use strict";
2307module.exports =
2308function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async) {
2309var util = _dereq_("./util");
2310var canEvaluate = util.canEvaluate;
2311var tryCatch = util.tryCatch;
2312var errorObj = util.errorObj;
2313var reject;
2314
2315if (!true) {
2316if (canEvaluate) {
2317 var thenCallback = function(i) {
2318 return new Function("value", "holder", " \n\
2319 'use strict'; \n\
2320 holder.pIndex = value; \n\
2321 holder.checkFulfillment(this); \n\
2322 ".replace(/Index/g, i));
2323 };
2324
2325 var promiseSetter = function(i) {
2326 return new Function("promise", "holder", " \n\
2327 'use strict'; \n\
2328 holder.pIndex = promise; \n\
2329 ".replace(/Index/g, i));
2330 };
2331
2332 var generateHolderClass = function(total) {
2333 var props = new Array(total);
2334 for (var i = 0; i < props.length; ++i) {
2335 props[i] = "this.p" + (i+1);
2336 }
2337 var assignment = props.join(" = ") + " = null;";
2338 var cancellationCode= "var promise;\n" + props.map(function(prop) {
2339 return " \n\
2340 promise = " + prop + "; \n\
2341 if (promise instanceof Promise) { \n\
2342 promise.cancel(); \n\
2343 } \n\
2344 ";
2345 }).join("\n");
2346 var passedArguments = props.join(", ");
2347 var name = "Holder$" + total;
2348
2349
2350 var code = "return function(tryCatch, errorObj, Promise, async) { \n\
2351 'use strict'; \n\
2352 function [TheName](fn) { \n\
2353 [TheProperties] \n\
2354 this.fn = fn; \n\
2355 this.asyncNeeded = true; \n\
2356 this.now = 0; \n\
2357 } \n\
2358 \n\
2359 [TheName].prototype._callFunction = function(promise) { \n\
2360 promise._pushContext(); \n\
2361 var ret = tryCatch(this.fn)([ThePassedArguments]); \n\
2362 promise._popContext(); \n\
2363 if (ret === errorObj) { \n\
2364 promise._rejectCallback(ret.e, false); \n\
2365 } else { \n\
2366 promise._resolveCallback(ret); \n\
2367 } \n\
2368 }; \n\
2369 \n\
2370 [TheName].prototype.checkFulfillment = function(promise) { \n\
2371 var now = ++this.now; \n\
2372 if (now === [TheTotal]) { \n\
2373 if (this.asyncNeeded) { \n\
2374 async.invoke(this._callFunction, this, promise); \n\
2375 } else { \n\
2376 this._callFunction(promise); \n\
2377 } \n\
2378 \n\
2379 } \n\
2380 }; \n\
2381 \n\
2382 [TheName].prototype._resultCancelled = function() { \n\
2383 [CancellationCode] \n\
2384 }; \n\
2385 \n\
2386 return [TheName]; \n\
2387 }(tryCatch, errorObj, Promise, async); \n\
2388 ";
2389
2390 code = code.replace(/\[TheName\]/g, name)
2391 .replace(/\[TheTotal\]/g, total)
2392 .replace(/\[ThePassedArguments\]/g, passedArguments)
2393 .replace(/\[TheProperties\]/g, assignment)
2394 .replace(/\[CancellationCode\]/g, cancellationCode);
2395
2396 return new Function("tryCatch", "errorObj", "Promise", "async", code)
2397 (tryCatch, errorObj, Promise, async);
2398 };
2399
2400 var holderClasses = [];
2401 var thenCallbacks = [];
2402 var promiseSetters = [];
2403
2404 for (var i = 0; i < 8; ++i) {
2405 holderClasses.push(generateHolderClass(i + 1));
2406 thenCallbacks.push(thenCallback(i + 1));
2407 promiseSetters.push(promiseSetter(i + 1));
2408 }
2409
2410 reject = function (reason) {
2411 this._reject(reason);
2412 };
2413}}
2414
2415Promise.join = function () {
2416 var last = arguments.length - 1;
2417 var fn;
2418 if (last > 0 && typeof arguments[last] === "function") {
2419 fn = arguments[last];
2420 if (!true) {
2421 if (last <= 8 && canEvaluate) {
2422 var ret = new Promise(INTERNAL);
2423 ret._captureStackTrace();
2424 var HolderClass = holderClasses[last - 1];
2425 var holder = new HolderClass(fn);
2426 var callbacks = thenCallbacks;
2427
2428 for (var i = 0; i < last; ++i) {
2429 var maybePromise = tryConvertToPromise(arguments[i], ret);
2430 if (maybePromise instanceof Promise) {
2431 maybePromise = maybePromise._target();
2432 var bitField = maybePromise._bitField;
2433 ;
2434 if (((bitField & 50397184) === 0)) {
2435 maybePromise._then(callbacks[i], reject,
2436 undefined, ret, holder);
2437 promiseSetters[i](maybePromise, holder);
2438 holder.asyncNeeded = false;
2439 } else if (((bitField & 33554432) !== 0)) {
2440 callbacks[i].call(ret,
2441 maybePromise._value(), holder);
2442 } else if (((bitField & 16777216) !== 0)) {
2443 ret._reject(maybePromise._reason());
2444 } else {
2445 ret._cancel();
2446 }
2447 } else {
2448 callbacks[i].call(ret, maybePromise, holder);
2449 }
2450 }
2451
2452 if (!ret._isFateSealed()) {
2453 if (holder.asyncNeeded) {
2454 var context = Promise._getContext();
2455 holder.fn = util.contextBind(context, holder.fn);
2456 }
2457 ret._setAsyncGuaranteed();
2458 ret._setOnCancel(holder);
2459 }
2460 return ret;
2461 }
2462 }
2463 }
2464 var args = [].slice.call(arguments);;
2465 if (fn) args.pop();
2466 var ret = new PromiseArray(args).promise();
2467 return fn !== undefined ? ret.spread(fn) : ret;
2468};
2469
2470};
2471
2472},{"./util":36}],18:[function(_dereq_,module,exports){
2473"use strict";
2474module.exports = function(Promise,
2475 PromiseArray,
2476 apiRejection,
2477 tryConvertToPromise,
2478 INTERNAL,
2479 debug) {
2480var util = _dereq_("./util");
2481var tryCatch = util.tryCatch;
2482var errorObj = util.errorObj;
2483var async = Promise._async;
2484
2485function MappingPromiseArray(promises, fn, limit, _filter) {
2486 this.constructor$(promises);
2487 this._promise._captureStackTrace();
2488 var context = Promise._getContext();
2489 this._callback = util.contextBind(context, fn);
2490 this._preservedValues = _filter === INTERNAL
2491 ? new Array(this.length())
2492 : null;
2493 this._limit = limit;
2494 this._inFlight = 0;
2495 this._queue = [];
2496 async.invoke(this._asyncInit, this, undefined);
2497 if (util.isArray(promises)) {
2498 for (var i = 0; i < promises.length; ++i) {
2499 var maybePromise = promises[i];
2500 if (maybePromise instanceof Promise) {
2501 maybePromise.suppressUnhandledRejections();
2502 }
2503 }
2504 }
2505}
2506util.inherits(MappingPromiseArray, PromiseArray);
2507
2508MappingPromiseArray.prototype._asyncInit = function() {
2509 this._init$(undefined, -2);
2510};
2511
2512MappingPromiseArray.prototype._init = function () {};
2513
2514MappingPromiseArray.prototype._promiseFulfilled = function (value, index) {
2515 var values = this._values;
2516 var length = this.length();
2517 var preservedValues = this._preservedValues;
2518 var limit = this._limit;
2519
2520 if (index < 0) {
2521 index = (index * -1) - 1;
2522 values[index] = value;
2523 if (limit >= 1) {
2524 this._inFlight--;
2525 this._drainQueue();
2526 if (this._isResolved()) return true;
2527 }
2528 } else {
2529 if (limit >= 1 && this._inFlight >= limit) {
2530 values[index] = value;
2531 this._queue.push(index);
2532 return false;
2533 }
2534 if (preservedValues !== null) preservedValues[index] = value;
2535
2536 var promise = this._promise;
2537 var callback = this._callback;
2538 var receiver = promise._boundValue();
2539 promise._pushContext();
2540 var ret = tryCatch(callback).call(receiver, value, index, length);
2541 var promiseCreated = promise._popContext();
2542 debug.checkForgottenReturns(
2543 ret,
2544 promiseCreated,
2545 preservedValues !== null ? "Promise.filter" : "Promise.map",
2546 promise
2547 );
2548 if (ret === errorObj) {
2549 this._reject(ret.e);
2550 return true;
2551 }
2552
2553 var maybePromise = tryConvertToPromise(ret, this._promise);
2554 if (maybePromise instanceof Promise) {
2555 maybePromise = maybePromise._target();
2556 var bitField = maybePromise._bitField;
2557 ;
2558 if (((bitField & 50397184) === 0)) {
2559 if (limit >= 1) this._inFlight++;
2560 values[index] = maybePromise;
2561 maybePromise._proxy(this, (index + 1) * -1);
2562 return false;
2563 } else if (((bitField & 33554432) !== 0)) {
2564 ret = maybePromise._value();
2565 } else if (((bitField & 16777216) !== 0)) {
2566 this._reject(maybePromise._reason());
2567 return true;
2568 } else {
2569 this._cancel();
2570 return true;
2571 }
2572 }
2573 values[index] = ret;
2574 }
2575 var totalResolved = ++this._totalResolved;
2576 if (totalResolved >= length) {
2577 if (preservedValues !== null) {
2578 this._filter(values, preservedValues);
2579 } else {
2580 this._resolve(values);
2581 }
2582 return true;
2583 }
2584 return false;
2585};
2586
2587MappingPromiseArray.prototype._drainQueue = function () {
2588 var queue = this._queue;
2589 var limit = this._limit;
2590 var values = this._values;
2591 while (queue.length > 0 && this._inFlight < limit) {
2592 if (this._isResolved()) return;
2593 var index = queue.pop();
2594 this._promiseFulfilled(values[index], index);
2595 }
2596};
2597
2598MappingPromiseArray.prototype._filter = function (booleans, values) {
2599 var len = values.length;
2600 var ret = new Array(len);
2601 var j = 0;
2602 for (var i = 0; i < len; ++i) {
2603 if (booleans[i]) ret[j++] = values[i];
2604 }
2605 ret.length = j;
2606 this._resolve(ret);
2607};
2608
2609MappingPromiseArray.prototype.preservedValues = function () {
2610 return this._preservedValues;
2611};
2612
2613function map(promises, fn, options, _filter) {
2614 if (typeof fn !== "function") {
2615 return apiRejection("expecting a function but got " + util.classString(fn));
2616 }
2617
2618 var limit = 0;
2619 if (options !== undefined) {
2620 if (typeof options === "object" && options !== null) {
2621 if (typeof options.concurrency !== "number") {
2622 return Promise.reject(
2623 new TypeError("'concurrency' must be a number but it is " +
2624 util.classString(options.concurrency)));
2625 }
2626 limit = options.concurrency;
2627 } else {
2628 return Promise.reject(new TypeError(
2629 "options argument must be an object but it is " +
2630 util.classString(options)));
2631 }
2632 }
2633 limit = typeof limit === "number" &&
2634 isFinite(limit) && limit >= 1 ? limit : 0;
2635 return new MappingPromiseArray(promises, fn, limit, _filter).promise();
2636}
2637
2638Promise.prototype.map = function (fn, options) {
2639 return map(this, fn, options, null);
2640};
2641
2642Promise.map = function (promises, fn, options, _filter) {
2643 return map(promises, fn, options, _filter);
2644};
2645
2646
2647};
2648
2649},{"./util":36}],19:[function(_dereq_,module,exports){
2650"use strict";
2651module.exports =
2652function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) {
2653var util = _dereq_("./util");
2654var tryCatch = util.tryCatch;
2655
2656Promise.method = function (fn) {
2657 if (typeof fn !== "function") {
2658 throw new Promise.TypeError("expecting a function but got " + util.classString(fn));
2659 }
2660 return function () {
2661 var ret = new Promise(INTERNAL);
2662 ret._captureStackTrace();
2663 ret._pushContext();
2664 var value = tryCatch(fn).apply(this, arguments);
2665 var promiseCreated = ret._popContext();
2666 debug.checkForgottenReturns(
2667 value, promiseCreated, "Promise.method", ret);
2668 ret._resolveFromSyncValue(value);
2669 return ret;
2670 };
2671};
2672
2673Promise.attempt = Promise["try"] = function (fn) {
2674 if (typeof fn !== "function") {
2675 return apiRejection("expecting a function but got " + util.classString(fn));
2676 }
2677 var ret = new Promise(INTERNAL);
2678 ret._captureStackTrace();
2679 ret._pushContext();
2680 var value;
2681 if (arguments.length > 1) {
2682 debug.deprecated("calling Promise.try with more than 1 argument");
2683 var arg = arguments[1];
2684 var ctx = arguments[2];
2685 value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg)
2686 : tryCatch(fn).call(ctx, arg);
2687 } else {
2688 value = tryCatch(fn)();
2689 }
2690 var promiseCreated = ret._popContext();
2691 debug.checkForgottenReturns(
2692 value, promiseCreated, "Promise.try", ret);
2693 ret._resolveFromSyncValue(value);
2694 return ret;
2695};
2696
2697Promise.prototype._resolveFromSyncValue = function (value) {
2698 if (value === util.errorObj) {
2699 this._rejectCallback(value.e, false);
2700 } else {
2701 this._resolveCallback(value, true);
2702 }
2703};
2704};
2705
2706},{"./util":36}],20:[function(_dereq_,module,exports){
2707"use strict";
2708var util = _dereq_("./util");
2709var maybeWrapAsError = util.maybeWrapAsError;
2710var errors = _dereq_("./errors");
2711var OperationalError = errors.OperationalError;
2712var es5 = _dereq_("./es5");
2713
2714function isUntypedError(obj) {
2715 return obj instanceof Error &&
2716 es5.getPrototypeOf(obj) === Error.prototype;
2717}
2718
2719var rErrorKey = /^(?:name|message|stack|cause)$/;
2720function wrapAsOperationalError(obj) {
2721 var ret;
2722 if (isUntypedError(obj)) {
2723 ret = new OperationalError(obj);
2724 ret.name = obj.name;
2725 ret.message = obj.message;
2726 ret.stack = obj.stack;
2727 var keys = es5.keys(obj);
2728 for (var i = 0; i < keys.length; ++i) {
2729 var key = keys[i];
2730 if (!rErrorKey.test(key)) {
2731 ret[key] = obj[key];
2732 }
2733 }
2734 return ret;
2735 }
2736 util.markAsOriginatingFromRejection(obj);
2737 return obj;
2738}
2739
2740function nodebackForPromise(promise, multiArgs) {
2741 return function(err, value) {
2742 if (promise === null) return;
2743 if (err) {
2744 var wrapped = wrapAsOperationalError(maybeWrapAsError(err));
2745 promise._attachExtraTrace(wrapped);
2746 promise._reject(wrapped);
2747 } else if (!multiArgs) {
2748 promise._fulfill(value);
2749 } else {
2750 var args = [].slice.call(arguments, 1);;
2751 promise._fulfill(args);
2752 }
2753 promise = null;
2754 };
2755}
2756
2757module.exports = nodebackForPromise;
2758
2759},{"./errors":12,"./es5":13,"./util":36}],21:[function(_dereq_,module,exports){
2760"use strict";
2761module.exports = function(Promise) {
2762var util = _dereq_("./util");
2763var async = Promise._async;
2764var tryCatch = util.tryCatch;
2765var errorObj = util.errorObj;
2766
2767function spreadAdapter(val, nodeback) {
2768 var promise = this;
2769 if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);
2770 var ret =
2771 tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));
2772 if (ret === errorObj) {
2773 async.throwLater(ret.e);
2774 }
2775}
2776
2777function successAdapter(val, nodeback) {
2778 var promise = this;
2779 var receiver = promise._boundValue();
2780 var ret = val === undefined
2781 ? tryCatch(nodeback).call(receiver, null)
2782 : tryCatch(nodeback).call(receiver, null, val);
2783 if (ret === errorObj) {
2784 async.throwLater(ret.e);
2785 }
2786}
2787function errorAdapter(reason, nodeback) {
2788 var promise = this;
2789 if (!reason) {
2790 var newReason = new Error(reason + "");
2791 newReason.cause = reason;
2792 reason = newReason;
2793 }
2794 var ret = tryCatch(nodeback).call(promise._boundValue(), reason);
2795 if (ret === errorObj) {
2796 async.throwLater(ret.e);
2797 }
2798}
2799
2800Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback,
2801 options) {
2802 if (typeof nodeback == "function") {
2803 var adapter = successAdapter;
2804 if (options !== undefined && Object(options).spread) {
2805 adapter = spreadAdapter;
2806 }
2807 this._then(
2808 adapter,
2809 errorAdapter,
2810 undefined,
2811 this,
2812 nodeback
2813 );
2814 }
2815 return this;
2816};
2817};
2818
2819},{"./util":36}],22:[function(_dereq_,module,exports){
2820"use strict";
2821module.exports = function() {
2822var makeSelfResolutionError = function () {
2823 return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a");
2824};
2825var reflectHandler = function() {
2826 return new Promise.PromiseInspection(this._target());
2827};
2828var apiRejection = function(msg) {
2829 return Promise.reject(new TypeError(msg));
2830};
2831function Proxyable() {}
2832var UNDEFINED_BINDING = {};
2833var util = _dereq_("./util");
2834util.setReflectHandler(reflectHandler);
2835
2836var getDomain = function() {
2837 var domain = process.domain;
2838 if (domain === undefined) {
2839 return null;
2840 }
2841 return domain;
2842};
2843var getContextDefault = function() {
2844 return null;
2845};
2846var getContextDomain = function() {
2847 return {
2848 domain: getDomain(),
2849 async: null
2850 };
2851};
2852var AsyncResource = util.isNode && util.nodeSupportsAsyncResource ?
2853 _dereq_("async_hooks").AsyncResource : null;
2854var getContextAsyncHooks = function() {
2855 return {
2856 domain: getDomain(),
2857 async: new AsyncResource("Bluebird::Promise")
2858 };
2859};
2860var getContext = util.isNode ? getContextDomain : getContextDefault;
2861util.notEnumerableProp(Promise, "_getContext", getContext);
2862var enableAsyncHooks = function() {
2863 getContext = getContextAsyncHooks;
2864 util.notEnumerableProp(Promise, "_getContext", getContextAsyncHooks);
2865};
2866var disableAsyncHooks = function() {
2867 getContext = getContextDomain;
2868 util.notEnumerableProp(Promise, "_getContext", getContextDomain);
2869};
2870
2871var es5 = _dereq_("./es5");
2872var Async = _dereq_("./async");
2873var async = new Async();
2874es5.defineProperty(Promise, "_async", {value: async});
2875var errors = _dereq_("./errors");
2876var TypeError = Promise.TypeError = errors.TypeError;
2877Promise.RangeError = errors.RangeError;
2878var CancellationError = Promise.CancellationError = errors.CancellationError;
2879Promise.TimeoutError = errors.TimeoutError;
2880Promise.OperationalError = errors.OperationalError;
2881Promise.RejectionError = errors.OperationalError;
2882Promise.AggregateError = errors.AggregateError;
2883var INTERNAL = function(){};
2884var APPLY = {};
2885var NEXT_FILTER = {};
2886var tryConvertToPromise = _dereq_("./thenables")(Promise, INTERNAL);
2887var PromiseArray =
2888 _dereq_("./promise_array")(Promise, INTERNAL,
2889 tryConvertToPromise, apiRejection, Proxyable);
2890var Context = _dereq_("./context")(Promise);
2891 /*jshint unused:false*/
2892var createContext = Context.create;
2893
2894var debug = _dereq_("./debuggability")(Promise, Context,
2895 enableAsyncHooks, disableAsyncHooks);
2896var CapturedTrace = debug.CapturedTrace;
2897var PassThroughHandlerContext =
2898 _dereq_("./finally")(Promise, tryConvertToPromise, NEXT_FILTER);
2899var catchFilter = _dereq_("./catch_filter")(NEXT_FILTER);
2900var nodebackForPromise = _dereq_("./nodeback");
2901var errorObj = util.errorObj;
2902var tryCatch = util.tryCatch;
2903function check(self, executor) {
2904 if (self == null || self.constructor !== Promise) {
2905 throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a");
2906 }
2907 if (typeof executor !== "function") {
2908 throw new TypeError("expecting a function but got " + util.classString(executor));
2909 }
2910
2911}
2912
2913function Promise(executor) {
2914 if (executor !== INTERNAL) {
2915 check(this, executor);
2916 }
2917 this._bitField = 0;
2918 this._fulfillmentHandler0 = undefined;
2919 this._rejectionHandler0 = undefined;
2920 this._promise0 = undefined;
2921 this._receiver0 = undefined;
2922 this._resolveFromExecutor(executor);
2923 this._promiseCreated();
2924 this._fireEvent("promiseCreated", this);
2925}
2926
2927Promise.prototype.toString = function () {
2928 return "[object Promise]";
2929};
2930
2931Promise.prototype.caught = Promise.prototype["catch"] = function (fn) {
2932 var len = arguments.length;
2933 if (len > 1) {
2934 var catchInstances = new Array(len - 1),
2935 j = 0, i;
2936 for (i = 0; i < len - 1; ++i) {
2937 var item = arguments[i];
2938 if (util.isObject(item)) {
2939 catchInstances[j++] = item;
2940 } else {
2941 return apiRejection("Catch statement predicate: " +
2942 "expecting an object but got " + util.classString(item));
2943 }
2944 }
2945 catchInstances.length = j;
2946 fn = arguments[i];
2947
2948 if (typeof fn !== "function") {
2949 throw new TypeError("The last argument to .catch() " +
2950 "must be a function, got " + util.toString(fn));
2951 }
2952 return this.then(undefined, catchFilter(catchInstances, fn, this));
2953 }
2954 return this.then(undefined, fn);
2955};
2956
2957Promise.prototype.reflect = function () {
2958 return this._then(reflectHandler,
2959 reflectHandler, undefined, this, undefined);
2960};
2961
2962Promise.prototype.then = function (didFulfill, didReject) {
2963 if (debug.warnings() && arguments.length > 0 &&
2964 typeof didFulfill !== "function" &&
2965 typeof didReject !== "function") {
2966 var msg = ".then() only accepts functions but was passed: " +
2967 util.classString(didFulfill);
2968 if (arguments.length > 1) {
2969 msg += ", " + util.classString(didReject);
2970 }
2971 this._warn(msg);
2972 }
2973 return this._then(didFulfill, didReject, undefined, undefined, undefined);
2974};
2975
2976Promise.prototype.done = function (didFulfill, didReject) {
2977 var promise =
2978 this._then(didFulfill, didReject, undefined, undefined, undefined);
2979 promise._setIsFinal();
2980};
2981
2982Promise.prototype.spread = function (fn) {
2983 if (typeof fn !== "function") {
2984 return apiRejection("expecting a function but got " + util.classString(fn));
2985 }
2986 return this.all()._then(fn, undefined, undefined, APPLY, undefined);
2987};
2988
2989Promise.prototype.toJSON = function () {
2990 var ret = {
2991 isFulfilled: false,
2992 isRejected: false,
2993 fulfillmentValue: undefined,
2994 rejectionReason: undefined
2995 };
2996 if (this.isFulfilled()) {
2997 ret.fulfillmentValue = this.value();
2998 ret.isFulfilled = true;
2999 } else if (this.isRejected()) {
3000 ret.rejectionReason = this.reason();
3001 ret.isRejected = true;
3002 }
3003 return ret;
3004};
3005
3006Promise.prototype.all = function () {
3007 if (arguments.length > 0) {
3008 this._warn(".all() was passed arguments but it does not take any");
3009 }
3010 return new PromiseArray(this).promise();
3011};
3012
3013Promise.prototype.error = function (fn) {
3014 return this.caught(util.originatesFromRejection, fn);
3015};
3016
3017Promise.getNewLibraryCopy = module.exports;
3018
3019Promise.is = function (val) {
3020 return val instanceof Promise;
3021};
3022
3023Promise.fromNode = Promise.fromCallback = function(fn) {
3024 var ret = new Promise(INTERNAL);
3025 ret._captureStackTrace();
3026 var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs
3027 : false;
3028 var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs));
3029 if (result === errorObj) {
3030 ret._rejectCallback(result.e, true);
3031 }
3032 if (!ret._isFateSealed()) ret._setAsyncGuaranteed();
3033 return ret;
3034};
3035
3036Promise.all = function (promises) {
3037 return new PromiseArray(promises).promise();
3038};
3039
3040Promise.cast = function (obj) {
3041 var ret = tryConvertToPromise(obj);
3042 if (!(ret instanceof Promise)) {
3043 ret = new Promise(INTERNAL);
3044 ret._captureStackTrace();
3045 ret._setFulfilled();
3046 ret._rejectionHandler0 = obj;
3047 }
3048 return ret;
3049};
3050
3051Promise.resolve = Promise.fulfilled = Promise.cast;
3052
3053Promise.reject = Promise.rejected = function (reason) {
3054 var ret = new Promise(INTERNAL);
3055 ret._captureStackTrace();
3056 ret._rejectCallback(reason, true);
3057 return ret;
3058};
3059
3060Promise.setScheduler = function(fn) {
3061 if (typeof fn !== "function") {
3062 throw new TypeError("expecting a function but got " + util.classString(fn));
3063 }
3064 return async.setScheduler(fn);
3065};
3066
3067Promise.prototype._then = function (
3068 didFulfill,
3069 didReject,
3070 _, receiver,
3071 internalData
3072) {
3073 var haveInternalData = internalData !== undefined;
3074 var promise = haveInternalData ? internalData : new Promise(INTERNAL);
3075 var target = this._target();
3076 var bitField = target._bitField;
3077
3078 if (!haveInternalData) {
3079 promise._propagateFrom(this, 3);
3080 promise._captureStackTrace();
3081 if (receiver === undefined &&
3082 ((this._bitField & 2097152) !== 0)) {
3083 if (!((bitField & 50397184) === 0)) {
3084 receiver = this._boundValue();
3085 } else {
3086 receiver = target === this ? undefined : this._boundTo;
3087 }
3088 }
3089 this._fireEvent("promiseChained", this, promise);
3090 }
3091
3092 var context = getContext();
3093 if (!((bitField & 50397184) === 0)) {
3094 var handler, value, settler = target._settlePromiseCtx;
3095 if (((bitField & 33554432) !== 0)) {
3096 value = target._rejectionHandler0;
3097 handler = didFulfill;
3098 } else if (((bitField & 16777216) !== 0)) {
3099 value = target._fulfillmentHandler0;
3100 handler = didReject;
3101 target._unsetRejectionIsUnhandled();
3102 } else {
3103 settler = target._settlePromiseLateCancellationObserver;
3104 value = new CancellationError("late cancellation observer");
3105 target._attachExtraTrace(value);
3106 handler = didReject;
3107 }
3108
3109 async.invoke(settler, target, {
3110 handler: util.contextBind(context, handler),
3111 promise: promise,
3112 receiver: receiver,
3113 value: value
3114 });
3115 } else {
3116 target._addCallbacks(didFulfill, didReject, promise,
3117 receiver, context);
3118 }
3119
3120 return promise;
3121};
3122
3123Promise.prototype._length = function () {
3124 return this._bitField & 65535;
3125};
3126
3127Promise.prototype._isFateSealed = function () {
3128 return (this._bitField & 117506048) !== 0;
3129};
3130
3131Promise.prototype._isFollowing = function () {
3132 return (this._bitField & 67108864) === 67108864;
3133};
3134
3135Promise.prototype._setLength = function (len) {
3136 this._bitField = (this._bitField & -65536) |
3137 (len & 65535);
3138};
3139
3140Promise.prototype._setFulfilled = function () {
3141 this._bitField = this._bitField | 33554432;
3142 this._fireEvent("promiseFulfilled", this);
3143};
3144
3145Promise.prototype._setRejected = function () {
3146 this._bitField = this._bitField | 16777216;
3147 this._fireEvent("promiseRejected", this);
3148};
3149
3150Promise.prototype._setFollowing = function () {
3151 this._bitField = this._bitField | 67108864;
3152 this._fireEvent("promiseResolved", this);
3153};
3154
3155Promise.prototype._setIsFinal = function () {
3156 this._bitField = this._bitField | 4194304;
3157};
3158
3159Promise.prototype._isFinal = function () {
3160 return (this._bitField & 4194304) > 0;
3161};
3162
3163Promise.prototype._unsetCancelled = function() {
3164 this._bitField = this._bitField & (~65536);
3165};
3166
3167Promise.prototype._setCancelled = function() {
3168 this._bitField = this._bitField | 65536;
3169 this._fireEvent("promiseCancelled", this);
3170};
3171
3172Promise.prototype._setWillBeCancelled = function() {
3173 this._bitField = this._bitField | 8388608;
3174};
3175
3176Promise.prototype._setAsyncGuaranteed = function() {
3177 if (async.hasCustomScheduler()) return;
3178 var bitField = this._bitField;
3179 this._bitField = bitField |
3180 (((bitField & 536870912) >> 2) ^
3181 134217728);
3182};
3183
3184Promise.prototype._setNoAsyncGuarantee = function() {
3185 this._bitField = (this._bitField | 536870912) &
3186 (~134217728);
3187};
3188
3189Promise.prototype._receiverAt = function (index) {
3190 var ret = index === 0 ? this._receiver0 : this[
3191 index * 4 - 4 + 3];
3192 if (ret === UNDEFINED_BINDING) {
3193 return undefined;
3194 } else if (ret === undefined && this._isBound()) {
3195 return this._boundValue();
3196 }
3197 return ret;
3198};
3199
3200Promise.prototype._promiseAt = function (index) {
3201 return this[
3202 index * 4 - 4 + 2];
3203};
3204
3205Promise.prototype._fulfillmentHandlerAt = function (index) {
3206 return this[
3207 index * 4 - 4 + 0];
3208};
3209
3210Promise.prototype._rejectionHandlerAt = function (index) {
3211 return this[
3212 index * 4 - 4 + 1];
3213};
3214
3215Promise.prototype._boundValue = function() {};
3216
3217Promise.prototype._migrateCallback0 = function (follower) {
3218 var bitField = follower._bitField;
3219 var fulfill = follower._fulfillmentHandler0;
3220 var reject = follower._rejectionHandler0;
3221 var promise = follower._promise0;
3222 var receiver = follower._receiverAt(0);
3223 if (receiver === undefined) receiver = UNDEFINED_BINDING;
3224 this._addCallbacks(fulfill, reject, promise, receiver, null);
3225};
3226
3227Promise.prototype._migrateCallbackAt = function (follower, index) {
3228 var fulfill = follower._fulfillmentHandlerAt(index);
3229 var reject = follower._rejectionHandlerAt(index);
3230 var promise = follower._promiseAt(index);
3231 var receiver = follower._receiverAt(index);
3232 if (receiver === undefined) receiver = UNDEFINED_BINDING;
3233 this._addCallbacks(fulfill, reject, promise, receiver, null);
3234};
3235
3236Promise.prototype._addCallbacks = function (
3237 fulfill,
3238 reject,
3239 promise,
3240 receiver,
3241 context
3242) {
3243 var index = this._length();
3244
3245 if (index >= 65535 - 4) {
3246 index = 0;
3247 this._setLength(0);
3248 }
3249
3250 if (index === 0) {
3251 this._promise0 = promise;
3252 this._receiver0 = receiver;
3253 if (typeof fulfill === "function") {
3254 this._fulfillmentHandler0 = util.contextBind(context, fulfill);
3255 }
3256 if (typeof reject === "function") {
3257 this._rejectionHandler0 = util.contextBind(context, reject);
3258 }
3259 } else {
3260 var base = index * 4 - 4;
3261 this[base + 2] = promise;
3262 this[base + 3] = receiver;
3263 if (typeof fulfill === "function") {
3264 this[base + 0] =
3265 util.contextBind(context, fulfill);
3266 }
3267 if (typeof reject === "function") {
3268 this[base + 1] =
3269 util.contextBind(context, reject);
3270 }
3271 }
3272 this._setLength(index + 1);
3273 return index;
3274};
3275
3276Promise.prototype._proxy = function (proxyable, arg) {
3277 this._addCallbacks(undefined, undefined, arg, proxyable, null);
3278};
3279
3280Promise.prototype._resolveCallback = function(value, shouldBind) {
3281 if (((this._bitField & 117506048) !== 0)) return;
3282 if (value === this)
3283 return this._rejectCallback(makeSelfResolutionError(), false);
3284 var maybePromise = tryConvertToPromise(value, this);
3285 if (!(maybePromise instanceof Promise)) return this._fulfill(value);
3286
3287 if (shouldBind) this._propagateFrom(maybePromise, 2);
3288
3289
3290 var promise = maybePromise._target();
3291
3292 if (promise === this) {
3293 this._reject(makeSelfResolutionError());
3294 return;
3295 }
3296
3297 var bitField = promise._bitField;
3298 if (((bitField & 50397184) === 0)) {
3299 var len = this._length();
3300 if (len > 0) promise._migrateCallback0(this);
3301 for (var i = 1; i < len; ++i) {
3302 promise._migrateCallbackAt(this, i);
3303 }
3304 this._setFollowing();
3305 this._setLength(0);
3306 this._setFollowee(maybePromise);
3307 } else if (((bitField & 33554432) !== 0)) {
3308 this._fulfill(promise._value());
3309 } else if (((bitField & 16777216) !== 0)) {
3310 this._reject(promise._reason());
3311 } else {
3312 var reason = new CancellationError("late cancellation observer");
3313 promise._attachExtraTrace(reason);
3314 this._reject(reason);
3315 }
3316};
3317
3318Promise.prototype._rejectCallback =
3319function(reason, synchronous, ignoreNonErrorWarnings) {
3320 var trace = util.ensureErrorObject(reason);
3321 var hasStack = trace === reason;
3322 if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) {
3323 var message = "a promise was rejected with a non-error: " +
3324 util.classString(reason);
3325 this._warn(message, true);
3326 }
3327 this._attachExtraTrace(trace, synchronous ? hasStack : false);
3328 this._reject(reason);
3329};
3330
3331Promise.prototype._resolveFromExecutor = function (executor) {
3332 if (executor === INTERNAL) return;
3333 var promise = this;
3334 this._captureStackTrace();
3335 this._pushContext();
3336 var synchronous = true;
3337 var r = this._execute(executor, function(value) {
3338 promise._resolveCallback(value);
3339 }, function (reason) {
3340 promise._rejectCallback(reason, synchronous);
3341 });
3342 synchronous = false;
3343 this._popContext();
3344
3345 if (r !== undefined) {
3346 promise._rejectCallback(r, true);
3347 }
3348};
3349
3350Promise.prototype._settlePromiseFromHandler = function (
3351 handler, receiver, value, promise
3352) {
3353 var bitField = promise._bitField;
3354 if (((bitField & 65536) !== 0)) return;
3355 promise._pushContext();
3356 var x;
3357 if (receiver === APPLY) {
3358 if (!value || typeof value.length !== "number") {
3359 x = errorObj;
3360 x.e = new TypeError("cannot .spread() a non-array: " +
3361 util.classString(value));
3362 } else {
3363 x = tryCatch(handler).apply(this._boundValue(), value);
3364 }
3365 } else {
3366 x = tryCatch(handler).call(receiver, value);
3367 }
3368 var promiseCreated = promise._popContext();
3369 bitField = promise._bitField;
3370 if (((bitField & 65536) !== 0)) return;
3371
3372 if (x === NEXT_FILTER) {
3373 promise._reject(value);
3374 } else if (x === errorObj) {
3375 promise._rejectCallback(x.e, false);
3376 } else {
3377 debug.checkForgottenReturns(x, promiseCreated, "", promise, this);
3378 promise._resolveCallback(x);
3379 }
3380};
3381
3382Promise.prototype._target = function() {
3383 var ret = this;
3384 while (ret._isFollowing()) ret = ret._followee();
3385 return ret;
3386};
3387
3388Promise.prototype._followee = function() {
3389 return this._rejectionHandler0;
3390};
3391
3392Promise.prototype._setFollowee = function(promise) {
3393 this._rejectionHandler0 = promise;
3394};
3395
3396Promise.prototype._settlePromise = function(promise, handler, receiver, value) {
3397 var isPromise = promise instanceof Promise;
3398 var bitField = this._bitField;
3399 var asyncGuaranteed = ((bitField & 134217728) !== 0);
3400 if (((bitField & 65536) !== 0)) {
3401 if (isPromise) promise._invokeInternalOnCancel();
3402
3403 if (receiver instanceof PassThroughHandlerContext &&
3404 receiver.isFinallyHandler()) {
3405 receiver.cancelPromise = promise;
3406 if (tryCatch(handler).call(receiver, value) === errorObj) {
3407 promise._reject(errorObj.e);
3408 }
3409 } else if (handler === reflectHandler) {
3410 promise._fulfill(reflectHandler.call(receiver));
3411 } else if (receiver instanceof Proxyable) {
3412 receiver._promiseCancelled(promise);
3413 } else if (isPromise || promise instanceof PromiseArray) {
3414 promise._cancel();
3415 } else {
3416 receiver.cancel();
3417 }
3418 } else if (typeof handler === "function") {
3419 if (!isPromise) {
3420 handler.call(receiver, value, promise);
3421 } else {
3422 if (asyncGuaranteed) promise._setAsyncGuaranteed();
3423 this._settlePromiseFromHandler(handler, receiver, value, promise);
3424 }
3425 } else if (receiver instanceof Proxyable) {
3426 if (!receiver._isResolved()) {
3427 if (((bitField & 33554432) !== 0)) {
3428 receiver._promiseFulfilled(value, promise);
3429 } else {
3430 receiver._promiseRejected(value, promise);
3431 }
3432 }
3433 } else if (isPromise) {
3434 if (asyncGuaranteed) promise._setAsyncGuaranteed();
3435 if (((bitField & 33554432) !== 0)) {
3436 promise._fulfill(value);
3437 } else {
3438 promise._reject(value);
3439 }
3440 }
3441};
3442
3443Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) {
3444 var handler = ctx.handler;
3445 var promise = ctx.promise;
3446 var receiver = ctx.receiver;
3447 var value = ctx.value;
3448 if (typeof handler === "function") {
3449 if (!(promise instanceof Promise)) {
3450 handler.call(receiver, value, promise);
3451 } else {
3452 this._settlePromiseFromHandler(handler, receiver, value, promise);
3453 }
3454 } else if (promise instanceof Promise) {
3455 promise._reject(value);
3456 }
3457};
3458
3459Promise.prototype._settlePromiseCtx = function(ctx) {
3460 this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value);
3461};
3462
3463Promise.prototype._settlePromise0 = function(handler, value, bitField) {
3464 var promise = this._promise0;
3465 var receiver = this._receiverAt(0);
3466 this._promise0 = undefined;
3467 this._receiver0 = undefined;
3468 this._settlePromise(promise, handler, receiver, value);
3469};
3470
3471Promise.prototype._clearCallbackDataAtIndex = function(index) {
3472 var base = index * 4 - 4;
3473 this[base + 2] =
3474 this[base + 3] =
3475 this[base + 0] =
3476 this[base + 1] = undefined;
3477};
3478
3479Promise.prototype._fulfill = function (value) {
3480 var bitField = this._bitField;
3481 if (((bitField & 117506048) >>> 16)) return;
3482 if (value === this) {
3483 var err = makeSelfResolutionError();
3484 this._attachExtraTrace(err);
3485 return this._reject(err);
3486 }
3487 this._setFulfilled();
3488 this._rejectionHandler0 = value;
3489
3490 if ((bitField & 65535) > 0) {
3491 if (((bitField & 134217728) !== 0)) {
3492 this._settlePromises();
3493 } else {
3494 async.settlePromises(this);
3495 }
3496 this._dereferenceTrace();
3497 }
3498};
3499
3500Promise.prototype._reject = function (reason) {
3501 var bitField = this._bitField;
3502 if (((bitField & 117506048) >>> 16)) return;
3503 this._setRejected();
3504 this._fulfillmentHandler0 = reason;
3505
3506 if (this._isFinal()) {
3507 return async.fatalError(reason, util.isNode);
3508 }
3509
3510 if ((bitField & 65535) > 0) {
3511 async.settlePromises(this);
3512 } else {
3513 this._ensurePossibleRejectionHandled();
3514 }
3515};
3516
3517Promise.prototype._fulfillPromises = function (len, value) {
3518 for (var i = 1; i < len; i++) {
3519 var handler = this._fulfillmentHandlerAt(i);
3520 var promise = this._promiseAt(i);
3521 var receiver = this._receiverAt(i);
3522 this._clearCallbackDataAtIndex(i);
3523 this._settlePromise(promise, handler, receiver, value);
3524 }
3525};
3526
3527Promise.prototype._rejectPromises = function (len, reason) {
3528 for (var i = 1; i < len; i++) {
3529 var handler = this._rejectionHandlerAt(i);
3530 var promise = this._promiseAt(i);
3531 var receiver = this._receiverAt(i);
3532 this._clearCallbackDataAtIndex(i);
3533 this._settlePromise(promise, handler, receiver, reason);
3534 }
3535};
3536
3537Promise.prototype._settlePromises = function () {
3538 var bitField = this._bitField;
3539 var len = (bitField & 65535);
3540
3541 if (len > 0) {
3542 if (((bitField & 16842752) !== 0)) {
3543 var reason = this._fulfillmentHandler0;
3544 this._settlePromise0(this._rejectionHandler0, reason, bitField);
3545 this._rejectPromises(len, reason);
3546 } else {
3547 var value = this._rejectionHandler0;
3548 this._settlePromise0(this._fulfillmentHandler0, value, bitField);
3549 this._fulfillPromises(len, value);
3550 }
3551 this._setLength(0);
3552 }
3553 this._clearCancellationData();
3554};
3555
3556Promise.prototype._settledValue = function() {
3557 var bitField = this._bitField;
3558 if (((bitField & 33554432) !== 0)) {
3559 return this._rejectionHandler0;
3560 } else if (((bitField & 16777216) !== 0)) {
3561 return this._fulfillmentHandler0;
3562 }
3563};
3564
3565if (typeof Symbol !== "undefined" && Symbol.toStringTag) {
3566 es5.defineProperty(Promise.prototype, Symbol.toStringTag, {
3567 get: function () {
3568 return "Object";
3569 }
3570 });
3571}
3572
3573function deferResolve(v) {this.promise._resolveCallback(v);}
3574function deferReject(v) {this.promise._rejectCallback(v, false);}
3575
3576Promise.defer = Promise.pending = function() {
3577 debug.deprecated("Promise.defer", "new Promise");
3578 var promise = new Promise(INTERNAL);
3579 return {
3580 promise: promise,
3581 resolve: deferResolve,
3582 reject: deferReject
3583 };
3584};
3585
3586util.notEnumerableProp(Promise,
3587 "_makeSelfResolutionError",
3588 makeSelfResolutionError);
3589
3590_dereq_("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection,
3591 debug);
3592_dereq_("./bind")(Promise, INTERNAL, tryConvertToPromise, debug);
3593_dereq_("./cancel")(Promise, PromiseArray, apiRejection, debug);
3594_dereq_("./direct_resolve")(Promise);
3595_dereq_("./synchronous_inspection")(Promise);
3596_dereq_("./join")(
3597 Promise, PromiseArray, tryConvertToPromise, INTERNAL, async);
3598Promise.Promise = Promise;
3599Promise.version = "3.7.2";
3600_dereq_('./call_get.js')(Promise);
3601_dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug);
3602_dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);
3603_dereq_('./nodeify.js')(Promise);
3604_dereq_('./promisify.js')(Promise, INTERNAL);
3605_dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);
3606_dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);
3607_dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug);
3608_dereq_('./settle.js')(Promise, PromiseArray, debug);
3609_dereq_('./some.js')(Promise, PromiseArray, apiRejection);
3610_dereq_('./timers.js')(Promise, INTERNAL, debug);
3611_dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug);
3612_dereq_('./any.js')(Promise);
3613_dereq_('./each.js')(Promise, INTERNAL);
3614_dereq_('./filter.js')(Promise, INTERNAL);
3615
3616 util.toFastProperties(Promise);
3617 util.toFastProperties(Promise.prototype);
3618 function fillTypes(value) {
3619 var p = new Promise(INTERNAL);
3620 p._fulfillmentHandler0 = value;
3621 p._rejectionHandler0 = value;
3622 p._promise0 = value;
3623 p._receiver0 = value;
3624 }
3625 // Complete slack tracking, opt out of field-type tracking and
3626 // stabilize map
3627 fillTypes({a: 1});
3628 fillTypes({b: 2});
3629 fillTypes({c: 3});
3630 fillTypes(1);
3631 fillTypes(function(){});
3632 fillTypes(undefined);
3633 fillTypes(false);
3634 fillTypes(new Promise(INTERNAL));
3635 debug.setBounds(Async.firstLineError, util.lastLineError);
3636 return Promise;
3637
3638};
3639
3640},{"./any.js":1,"./async":2,"./bind":3,"./call_get.js":5,"./cancel":6,"./catch_filter":7,"./context":8,"./debuggability":9,"./direct_resolve":10,"./each.js":11,"./errors":12,"./es5":13,"./filter.js":14,"./finally":15,"./generators.js":16,"./join":17,"./map.js":18,"./method":19,"./nodeback":20,"./nodeify.js":21,"./promise_array":23,"./promisify.js":24,"./props.js":25,"./race.js":27,"./reduce.js":28,"./settle.js":30,"./some.js":31,"./synchronous_inspection":32,"./thenables":33,"./timers.js":34,"./using.js":35,"./util":36,"async_hooks":undefined}],23:[function(_dereq_,module,exports){
3641"use strict";
3642module.exports = function(Promise, INTERNAL, tryConvertToPromise,
3643 apiRejection, Proxyable) {
3644var util = _dereq_("./util");
3645var isArray = util.isArray;
3646
3647function toResolutionValue(val) {
3648 switch(val) {
3649 case -2: return [];
3650 case -3: return {};
3651 case -6: return new Map();
3652 }
3653}
3654
3655function PromiseArray(values) {
3656 var promise = this._promise = new Promise(INTERNAL);
3657 if (values instanceof Promise) {
3658 promise._propagateFrom(values, 3);
3659 values.suppressUnhandledRejections();
3660 }
3661 promise._setOnCancel(this);
3662 this._values = values;
3663 this._length = 0;
3664 this._totalResolved = 0;
3665 this._init(undefined, -2);
3666}
3667util.inherits(PromiseArray, Proxyable);
3668
3669PromiseArray.prototype.length = function () {
3670 return this._length;
3671};
3672
3673PromiseArray.prototype.promise = function () {
3674 return this._promise;
3675};
3676
3677PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {
3678 var values = tryConvertToPromise(this._values, this._promise);
3679 if (values instanceof Promise) {
3680 values = values._target();
3681 var bitField = values._bitField;
3682 ;
3683 this._values = values;
3684
3685 if (((bitField & 50397184) === 0)) {
3686 this._promise._setAsyncGuaranteed();
3687 return values._then(
3688 init,
3689 this._reject,
3690 undefined,
3691 this,
3692 resolveValueIfEmpty
3693 );
3694 } else if (((bitField & 33554432) !== 0)) {
3695 values = values._value();
3696 } else if (((bitField & 16777216) !== 0)) {
3697 return this._reject(values._reason());
3698 } else {
3699 return this._cancel();
3700 }
3701 }
3702 values = util.asArray(values);
3703 if (values === null) {
3704 var err = apiRejection(
3705 "expecting an array or an iterable object but got " + util.classString(values)).reason();
3706 this._promise._rejectCallback(err, false);
3707 return;
3708 }
3709
3710 if (values.length === 0) {
3711 if (resolveValueIfEmpty === -5) {
3712 this._resolveEmptyArray();
3713 }
3714 else {
3715 this._resolve(toResolutionValue(resolveValueIfEmpty));
3716 }
3717 return;
3718 }
3719 this._iterate(values);
3720};
3721
3722PromiseArray.prototype._iterate = function(values) {
3723 var len = this.getActualLength(values.length);
3724 this._length = len;
3725 this._values = this.shouldCopyValues() ? new Array(len) : this._values;
3726 var result = this._promise;
3727 var isResolved = false;
3728 var bitField = null;
3729 for (var i = 0; i < len; ++i) {
3730 var maybePromise = tryConvertToPromise(values[i], result);
3731
3732 if (maybePromise instanceof Promise) {
3733 maybePromise = maybePromise._target();
3734 bitField = maybePromise._bitField;
3735 } else {
3736 bitField = null;
3737 }
3738
3739 if (isResolved) {
3740 if (bitField !== null) {
3741 maybePromise.suppressUnhandledRejections();
3742 }
3743 } else if (bitField !== null) {
3744 if (((bitField & 50397184) === 0)) {
3745 maybePromise._proxy(this, i);
3746 this._values[i] = maybePromise;
3747 } else if (((bitField & 33554432) !== 0)) {
3748 isResolved = this._promiseFulfilled(maybePromise._value(), i);
3749 } else if (((bitField & 16777216) !== 0)) {
3750 isResolved = this._promiseRejected(maybePromise._reason(), i);
3751 } else {
3752 isResolved = this._promiseCancelled(i);
3753 }
3754 } else {
3755 isResolved = this._promiseFulfilled(maybePromise, i);
3756 }
3757 }
3758 if (!isResolved) result._setAsyncGuaranteed();
3759};
3760
3761PromiseArray.prototype._isResolved = function () {
3762 return this._values === null;
3763};
3764
3765PromiseArray.prototype._resolve = function (value) {
3766 this._values = null;
3767 this._promise._fulfill(value);
3768};
3769
3770PromiseArray.prototype._cancel = function() {
3771 if (this._isResolved() || !this._promise._isCancellable()) return;
3772 this._values = null;
3773 this._promise._cancel();
3774};
3775
3776PromiseArray.prototype._reject = function (reason) {
3777 this._values = null;
3778 this._promise._rejectCallback(reason, false);
3779};
3780
3781PromiseArray.prototype._promiseFulfilled = function (value, index) {
3782 this._values[index] = value;
3783 var totalResolved = ++this._totalResolved;
3784 if (totalResolved >= this._length) {
3785 this._resolve(this._values);
3786 return true;
3787 }
3788 return false;
3789};
3790
3791PromiseArray.prototype._promiseCancelled = function() {
3792 this._cancel();
3793 return true;
3794};
3795
3796PromiseArray.prototype._promiseRejected = function (reason) {
3797 this._totalResolved++;
3798 this._reject(reason);
3799 return true;
3800};
3801
3802PromiseArray.prototype._resultCancelled = function() {
3803 if (this._isResolved()) return;
3804 var values = this._values;
3805 this._cancel();
3806 if (values instanceof Promise) {
3807 values.cancel();
3808 } else {
3809 for (var i = 0; i < values.length; ++i) {
3810 if (values[i] instanceof Promise) {
3811 values[i].cancel();
3812 }
3813 }
3814 }
3815};
3816
3817PromiseArray.prototype.shouldCopyValues = function () {
3818 return true;
3819};
3820
3821PromiseArray.prototype.getActualLength = function (len) {
3822 return len;
3823};
3824
3825return PromiseArray;
3826};
3827
3828},{"./util":36}],24:[function(_dereq_,module,exports){
3829"use strict";
3830module.exports = function(Promise, INTERNAL) {
3831var THIS = {};
3832var util = _dereq_("./util");
3833var nodebackForPromise = _dereq_("./nodeback");
3834var withAppended = util.withAppended;
3835var maybeWrapAsError = util.maybeWrapAsError;
3836var canEvaluate = util.canEvaluate;
3837var TypeError = _dereq_("./errors").TypeError;
3838var defaultSuffix = "Async";
3839var defaultPromisified = {__isPromisified__: true};
3840var noCopyProps = [
3841 "arity", "length",
3842 "name",
3843 "arguments",
3844 "caller",
3845 "callee",
3846 "prototype",
3847 "__isPromisified__"
3848];
3849var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$");
3850
3851var defaultFilter = function(name) {
3852 return util.isIdentifier(name) &&
3853 name.charAt(0) !== "_" &&
3854 name !== "constructor";
3855};
3856
3857function propsFilter(key) {
3858 return !noCopyPropsPattern.test(key);
3859}
3860
3861function isPromisified(fn) {
3862 try {
3863 return fn.__isPromisified__ === true;
3864 }
3865 catch (e) {
3866 return false;
3867 }
3868}
3869
3870function hasPromisified(obj, key, suffix) {
3871 var val = util.getDataPropertyOrDefault(obj, key + suffix,
3872 defaultPromisified);
3873 return val ? isPromisified(val) : false;
3874}
3875function checkValid(ret, suffix, suffixRegexp) {
3876 for (var i = 0; i < ret.length; i += 2) {
3877 var key = ret[i];
3878 if (suffixRegexp.test(key)) {
3879 var keyWithoutAsyncSuffix = key.replace(suffixRegexp, "");
3880 for (var j = 0; j < ret.length; j += 2) {
3881 if (ret[j] === keyWithoutAsyncSuffix) {
3882 throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/MqrFmX\u000a"
3883 .replace("%s", suffix));
3884 }
3885 }
3886 }
3887 }
3888}
3889
3890function promisifiableMethods(obj, suffix, suffixRegexp, filter) {
3891 var keys = util.inheritedDataKeys(obj);
3892 var ret = [];
3893 for (var i = 0; i < keys.length; ++i) {
3894 var key = keys[i];
3895 var value = obj[key];
3896 var passesDefaultFilter = filter === defaultFilter
3897 ? true : defaultFilter(key, value, obj);
3898 if (typeof value === "function" &&
3899 !isPromisified(value) &&
3900 !hasPromisified(obj, key, suffix) &&
3901 filter(key, value, obj, passesDefaultFilter)) {
3902 ret.push(key, value);
3903 }
3904 }
3905 checkValid(ret, suffix, suffixRegexp);
3906 return ret;
3907}
3908
3909var escapeIdentRegex = function(str) {
3910 return str.replace(/([$])/, "\\$");
3911};
3912
3913var makeNodePromisifiedEval;
3914if (!true) {
3915var switchCaseArgumentOrder = function(likelyArgumentCount) {
3916 var ret = [likelyArgumentCount];
3917 var min = Math.max(0, likelyArgumentCount - 1 - 3);
3918 for(var i = likelyArgumentCount - 1; i >= min; --i) {
3919 ret.push(i);
3920 }
3921 for(var i = likelyArgumentCount + 1; i <= 3; ++i) {
3922 ret.push(i);
3923 }
3924 return ret;
3925};
3926
3927var argumentSequence = function(argumentCount) {
3928 return util.filledRange(argumentCount, "_arg", "");
3929};
3930
3931var parameterDeclaration = function(parameterCount) {
3932 return util.filledRange(
3933 Math.max(parameterCount, 3), "_arg", "");
3934};
3935
3936var parameterCount = function(fn) {
3937 if (typeof fn.length === "number") {
3938 return Math.max(Math.min(fn.length, 1023 + 1), 0);
3939 }
3940 return 0;
3941};
3942
3943makeNodePromisifiedEval =
3944function(callback, receiver, originalName, fn, _, multiArgs) {
3945 var newParameterCount = Math.max(0, parameterCount(fn) - 1);
3946 var argumentOrder = switchCaseArgumentOrder(newParameterCount);
3947 var shouldProxyThis = typeof callback === "string" || receiver === THIS;
3948
3949 function generateCallForArgumentCount(count) {
3950 var args = argumentSequence(count).join(", ");
3951 var comma = count > 0 ? ", " : "";
3952 var ret;
3953 if (shouldProxyThis) {
3954 ret = "ret = callback.call(this, {{args}}, nodeback); break;\n";
3955 } else {
3956 ret = receiver === undefined
3957 ? "ret = callback({{args}}, nodeback); break;\n"
3958 : "ret = callback.call(receiver, {{args}}, nodeback); break;\n";
3959 }
3960 return ret.replace("{{args}}", args).replace(", ", comma);
3961 }
3962
3963 function generateArgumentSwitchCase() {
3964 var ret = "";
3965 for (var i = 0; i < argumentOrder.length; ++i) {
3966 ret += "case " + argumentOrder[i] +":" +
3967 generateCallForArgumentCount(argumentOrder[i]);
3968 }
3969
3970 ret += " \n\
3971 default: \n\
3972 var args = new Array(len + 1); \n\
3973 var i = 0; \n\
3974 for (var i = 0; i < len; ++i) { \n\
3975 args[i] = arguments[i]; \n\
3976 } \n\
3977 args[i] = nodeback; \n\
3978 [CodeForCall] \n\
3979 break; \n\
3980 ".replace("[CodeForCall]", (shouldProxyThis
3981 ? "ret = callback.apply(this, args);\n"
3982 : "ret = callback.apply(receiver, args);\n"));
3983 return ret;
3984 }
3985
3986 var getFunctionCode = typeof callback === "string"
3987 ? ("this != null ? this['"+callback+"'] : fn")
3988 : "fn";
3989 var body = "'use strict'; \n\
3990 var ret = function (Parameters) { \n\
3991 'use strict'; \n\
3992 var len = arguments.length; \n\
3993 var promise = new Promise(INTERNAL); \n\
3994 promise._captureStackTrace(); \n\
3995 var nodeback = nodebackForPromise(promise, " + multiArgs + "); \n\
3996 var ret; \n\
3997 var callback = tryCatch([GetFunctionCode]); \n\
3998 switch(len) { \n\
3999 [CodeForSwitchCase] \n\
4000 } \n\
4001 if (ret === errorObj) { \n\
4002 promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\
4003 } \n\
4004 if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n\
4005 return promise; \n\
4006 }; \n\
4007 notEnumerableProp(ret, '__isPromisified__', true); \n\
4008 return ret; \n\
4009 ".replace("[CodeForSwitchCase]", generateArgumentSwitchCase())
4010 .replace("[GetFunctionCode]", getFunctionCode);
4011 body = body.replace("Parameters", parameterDeclaration(newParameterCount));
4012 return new Function("Promise",
4013 "fn",
4014 "receiver",
4015 "withAppended",
4016 "maybeWrapAsError",
4017 "nodebackForPromise",
4018 "tryCatch",
4019 "errorObj",
4020 "notEnumerableProp",
4021 "INTERNAL",
4022 body)(
4023 Promise,
4024 fn,
4025 receiver,
4026 withAppended,
4027 maybeWrapAsError,
4028 nodebackForPromise,
4029 util.tryCatch,
4030 util.errorObj,
4031 util.notEnumerableProp,
4032 INTERNAL);
4033};
4034}
4035
4036function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) {
4037 var defaultThis = (function() {return this;})();
4038 var method = callback;
4039 if (typeof method === "string") {
4040 callback = fn;
4041 }
4042 function promisified() {
4043 var _receiver = receiver;
4044 if (receiver === THIS) _receiver = this;
4045 var promise = new Promise(INTERNAL);
4046 promise._captureStackTrace();
4047 var cb = typeof method === "string" && this !== defaultThis
4048 ? this[method] : callback;
4049 var fn = nodebackForPromise(promise, multiArgs);
4050 try {
4051 cb.apply(_receiver, withAppended(arguments, fn));
4052 } catch(e) {
4053 promise._rejectCallback(maybeWrapAsError(e), true, true);
4054 }
4055 if (!promise._isFateSealed()) promise._setAsyncGuaranteed();
4056 return promise;
4057 }
4058 util.notEnumerableProp(promisified, "__isPromisified__", true);
4059 return promisified;
4060}
4061
4062var makeNodePromisified = canEvaluate
4063 ? makeNodePromisifiedEval
4064 : makeNodePromisifiedClosure;
4065
4066function promisifyAll(obj, suffix, filter, promisifier, multiArgs) {
4067 var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$");
4068 var methods =
4069 promisifiableMethods(obj, suffix, suffixRegexp, filter);
4070
4071 for (var i = 0, len = methods.length; i < len; i+= 2) {
4072 var key = methods[i];
4073 var fn = methods[i+1];
4074 var promisifiedKey = key + suffix;
4075 if (promisifier === makeNodePromisified) {
4076 obj[promisifiedKey] =
4077 makeNodePromisified(key, THIS, key, fn, suffix, multiArgs);
4078 } else {
4079 var promisified = promisifier(fn, function() {
4080 return makeNodePromisified(key, THIS, key,
4081 fn, suffix, multiArgs);
4082 });
4083 util.notEnumerableProp(promisified, "__isPromisified__", true);
4084 obj[promisifiedKey] = promisified;
4085 }
4086 }
4087 util.toFastProperties(obj);
4088 return obj;
4089}
4090
4091function promisify(callback, receiver, multiArgs) {
4092 return makeNodePromisified(callback, receiver, undefined,
4093 callback, null, multiArgs);
4094}
4095
4096Promise.promisify = function (fn, options) {
4097 if (typeof fn !== "function") {
4098 throw new TypeError("expecting a function but got " + util.classString(fn));
4099 }
4100 if (isPromisified(fn)) {
4101 return fn;
4102 }
4103 options = Object(options);
4104 var receiver = options.context === undefined ? THIS : options.context;
4105 var multiArgs = !!options.multiArgs;
4106 var ret = promisify(fn, receiver, multiArgs);
4107 util.copyDescriptors(fn, ret, propsFilter);
4108 return ret;
4109};
4110
4111Promise.promisifyAll = function (target, options) {
4112 if (typeof target !== "function" && typeof target !== "object") {
4113 throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/MqrFmX\u000a");
4114 }
4115 options = Object(options);
4116 var multiArgs = !!options.multiArgs;
4117 var suffix = options.suffix;
4118 if (typeof suffix !== "string") suffix = defaultSuffix;
4119 var filter = options.filter;
4120 if (typeof filter !== "function") filter = defaultFilter;
4121 var promisifier = options.promisifier;
4122 if (typeof promisifier !== "function") promisifier = makeNodePromisified;
4123
4124 if (!util.isIdentifier(suffix)) {
4125 throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/MqrFmX\u000a");
4126 }
4127
4128 var keys = util.inheritedDataKeys(target);
4129 for (var i = 0; i < keys.length; ++i) {
4130 var value = target[keys[i]];
4131 if (keys[i] !== "constructor" &&
4132 util.isClass(value)) {
4133 promisifyAll(value.prototype, suffix, filter, promisifier,
4134 multiArgs);
4135 promisifyAll(value, suffix, filter, promisifier, multiArgs);
4136 }
4137 }
4138
4139 return promisifyAll(target, suffix, filter, promisifier, multiArgs);
4140};
4141};
4142
4143
4144},{"./errors":12,"./nodeback":20,"./util":36}],25:[function(_dereq_,module,exports){
4145"use strict";
4146module.exports = function(
4147 Promise, PromiseArray, tryConvertToPromise, apiRejection) {
4148var util = _dereq_("./util");
4149var isObject = util.isObject;
4150var es5 = _dereq_("./es5");
4151var Es6Map;
4152if (typeof Map === "function") Es6Map = Map;
4153
4154var mapToEntries = (function() {
4155 var index = 0;
4156 var size = 0;
4157
4158 function extractEntry(value, key) {
4159 this[index] = value;
4160 this[index + size] = key;
4161 index++;
4162 }
4163
4164 return function mapToEntries(map) {
4165 size = map.size;
4166 index = 0;
4167 var ret = new Array(map.size * 2);
4168 map.forEach(extractEntry, ret);
4169 return ret;
4170 };
4171})();
4172
4173var entriesToMap = function(entries) {
4174 var ret = new Es6Map();
4175 var length = entries.length / 2 | 0;
4176 for (var i = 0; i < length; ++i) {
4177 var key = entries[length + i];
4178 var value = entries[i];
4179 ret.set(key, value);
4180 }
4181 return ret;
4182};
4183
4184function PropertiesPromiseArray(obj) {
4185 var isMap = false;
4186 var entries;
4187 if (Es6Map !== undefined && obj instanceof Es6Map) {
4188 entries = mapToEntries(obj);
4189 isMap = true;
4190 } else {
4191 var keys = es5.keys(obj);
4192 var len = keys.length;
4193 entries = new Array(len * 2);
4194 for (var i = 0; i < len; ++i) {
4195 var key = keys[i];
4196 entries[i] = obj[key];
4197 entries[i + len] = key;
4198 }
4199 }
4200 this.constructor$(entries);
4201 this._isMap = isMap;
4202 this._init$(undefined, isMap ? -6 : -3);
4203}
4204util.inherits(PropertiesPromiseArray, PromiseArray);
4205
4206PropertiesPromiseArray.prototype._init = function () {};
4207
4208PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {
4209 this._values[index] = value;
4210 var totalResolved = ++this._totalResolved;
4211 if (totalResolved >= this._length) {
4212 var val;
4213 if (this._isMap) {
4214 val = entriesToMap(this._values);
4215 } else {
4216 val = {};
4217 var keyOffset = this.length();
4218 for (var i = 0, len = this.length(); i < len; ++i) {
4219 val[this._values[i + keyOffset]] = this._values[i];
4220 }
4221 }
4222 this._resolve(val);
4223 return true;
4224 }
4225 return false;
4226};
4227
4228PropertiesPromiseArray.prototype.shouldCopyValues = function () {
4229 return false;
4230};
4231
4232PropertiesPromiseArray.prototype.getActualLength = function (len) {
4233 return len >> 1;
4234};
4235
4236function props(promises) {
4237 var ret;
4238 var castValue = tryConvertToPromise(promises);
4239
4240 if (!isObject(castValue)) {
4241 return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a");
4242 } else if (castValue instanceof Promise) {
4243 ret = castValue._then(
4244 Promise.props, undefined, undefined, undefined, undefined);
4245 } else {
4246 ret = new PropertiesPromiseArray(castValue).promise();
4247 }
4248
4249 if (castValue instanceof Promise) {
4250 ret._propagateFrom(castValue, 2);
4251 }
4252 return ret;
4253}
4254
4255Promise.prototype.props = function () {
4256 return props(this);
4257};
4258
4259Promise.props = function (promises) {
4260 return props(promises);
4261};
4262};
4263
4264},{"./es5":13,"./util":36}],26:[function(_dereq_,module,exports){
4265"use strict";
4266function arrayMove(src, srcIndex, dst, dstIndex, len) {
4267 for (var j = 0; j < len; ++j) {
4268 dst[j + dstIndex] = src[j + srcIndex];
4269 src[j + srcIndex] = void 0;
4270 }
4271}
4272
4273function Queue(capacity) {
4274 this._capacity = capacity;
4275 this._length = 0;
4276 this._front = 0;
4277}
4278
4279Queue.prototype._willBeOverCapacity = function (size) {
4280 return this._capacity < size;
4281};
4282
4283Queue.prototype._pushOne = function (arg) {
4284 var length = this.length();
4285 this._checkCapacity(length + 1);
4286 var i = (this._front + length) & (this._capacity - 1);
4287 this[i] = arg;
4288 this._length = length + 1;
4289};
4290
4291Queue.prototype.push = function (fn, receiver, arg) {
4292 var length = this.length() + 3;
4293 if (this._willBeOverCapacity(length)) {
4294 this._pushOne(fn);
4295 this._pushOne(receiver);
4296 this._pushOne(arg);
4297 return;
4298 }
4299 var j = this._front + length - 3;
4300 this._checkCapacity(length);
4301 var wrapMask = this._capacity - 1;
4302 this[(j + 0) & wrapMask] = fn;
4303 this[(j + 1) & wrapMask] = receiver;
4304 this[(j + 2) & wrapMask] = arg;
4305 this._length = length;
4306};
4307
4308Queue.prototype.shift = function () {
4309 var front = this._front,
4310 ret = this[front];
4311
4312 this[front] = undefined;
4313 this._front = (front + 1) & (this._capacity - 1);
4314 this._length--;
4315 return ret;
4316};
4317
4318Queue.prototype.length = function () {
4319 return this._length;
4320};
4321
4322Queue.prototype._checkCapacity = function (size) {
4323 if (this._capacity < size) {
4324 this._resizeTo(this._capacity << 1);
4325 }
4326};
4327
4328Queue.prototype._resizeTo = function (capacity) {
4329 var oldCapacity = this._capacity;
4330 this._capacity = capacity;
4331 var front = this._front;
4332 var length = this._length;
4333 var moveItemsCount = (front + length) & (oldCapacity - 1);
4334 arrayMove(this, 0, this, oldCapacity, moveItemsCount);
4335};
4336
4337module.exports = Queue;
4338
4339},{}],27:[function(_dereq_,module,exports){
4340"use strict";
4341module.exports = function(
4342 Promise, INTERNAL, tryConvertToPromise, apiRejection) {
4343var util = _dereq_("./util");
4344
4345var raceLater = function (promise) {
4346 return promise.then(function(array) {
4347 return race(array, promise);
4348 });
4349};
4350
4351function race(promises, parent) {
4352 var maybePromise = tryConvertToPromise(promises);
4353
4354 if (maybePromise instanceof Promise) {
4355 return raceLater(maybePromise);
4356 } else {
4357 promises = util.asArray(promises);
4358 if (promises === null)
4359 return apiRejection("expecting an array or an iterable object but got " + util.classString(promises));
4360 }
4361
4362 var ret = new Promise(INTERNAL);
4363 if (parent !== undefined) {
4364 ret._propagateFrom(parent, 3);
4365 }
4366 var fulfill = ret._fulfill;
4367 var reject = ret._reject;
4368 for (var i = 0, len = promises.length; i < len; ++i) {
4369 var val = promises[i];
4370
4371 if (val === undefined && !(i in promises)) {
4372 continue;
4373 }
4374
4375 Promise.cast(val)._then(fulfill, reject, undefined, ret, null);
4376 }
4377 return ret;
4378}
4379
4380Promise.race = function (promises) {
4381 return race(promises, undefined);
4382};
4383
4384Promise.prototype.race = function () {
4385 return race(this, undefined);
4386};
4387
4388};
4389
4390},{"./util":36}],28:[function(_dereq_,module,exports){
4391"use strict";
4392module.exports = function(Promise,
4393 PromiseArray,
4394 apiRejection,
4395 tryConvertToPromise,
4396 INTERNAL,
4397 debug) {
4398var util = _dereq_("./util");
4399var tryCatch = util.tryCatch;
4400
4401function ReductionPromiseArray(promises, fn, initialValue, _each) {
4402 this.constructor$(promises);
4403 var context = Promise._getContext();
4404 this._fn = util.contextBind(context, fn);
4405 if (initialValue !== undefined) {
4406 initialValue = Promise.resolve(initialValue);
4407 initialValue._attachCancellationCallback(this);
4408 }
4409 this._initialValue = initialValue;
4410 this._currentCancellable = null;
4411 if(_each === INTERNAL) {
4412 this._eachValues = Array(this._length);
4413 } else if (_each === 0) {
4414 this._eachValues = null;
4415 } else {
4416 this._eachValues = undefined;
4417 }
4418 this._promise._captureStackTrace();
4419 this._init$(undefined, -5);
4420}
4421util.inherits(ReductionPromiseArray, PromiseArray);
4422
4423ReductionPromiseArray.prototype._gotAccum = function(accum) {
4424 if (this._eachValues !== undefined &&
4425 this._eachValues !== null &&
4426 accum !== INTERNAL) {
4427 this._eachValues.push(accum);
4428 }
4429};
4430
4431ReductionPromiseArray.prototype._eachComplete = function(value) {
4432 if (this._eachValues !== null) {
4433 this._eachValues.push(value);
4434 }
4435 return this._eachValues;
4436};
4437
4438ReductionPromiseArray.prototype._init = function() {};
4439
4440ReductionPromiseArray.prototype._resolveEmptyArray = function() {
4441 this._resolve(this._eachValues !== undefined ? this._eachValues
4442 : this._initialValue);
4443};
4444
4445ReductionPromiseArray.prototype.shouldCopyValues = function () {
4446 return false;
4447};
4448
4449ReductionPromiseArray.prototype._resolve = function(value) {
4450 this._promise._resolveCallback(value);
4451 this._values = null;
4452};
4453
4454ReductionPromiseArray.prototype._resultCancelled = function(sender) {
4455 if (sender === this._initialValue) return this._cancel();
4456 if (this._isResolved()) return;
4457 this._resultCancelled$();
4458 if (this._currentCancellable instanceof Promise) {
4459 this._currentCancellable.cancel();
4460 }
4461 if (this._initialValue instanceof Promise) {
4462 this._initialValue.cancel();
4463 }
4464};
4465
4466ReductionPromiseArray.prototype._iterate = function (values) {
4467 this._values = values;
4468 var value;
4469 var i;
4470 var length = values.length;
4471 if (this._initialValue !== undefined) {
4472 value = this._initialValue;
4473 i = 0;
4474 } else {
4475 value = Promise.resolve(values[0]);
4476 i = 1;
4477 }
4478
4479 this._currentCancellable = value;
4480
4481 for (var j = i; j < length; ++j) {
4482 var maybePromise = values[j];
4483 if (maybePromise instanceof Promise) {
4484 maybePromise.suppressUnhandledRejections();
4485 }
4486 }
4487
4488 if (!value.isRejected()) {
4489 for (; i < length; ++i) {
4490 var ctx = {
4491 accum: null,
4492 value: values[i],
4493 index: i,
4494 length: length,
4495 array: this
4496 };
4497
4498 value = value._then(gotAccum, undefined, undefined, ctx, undefined);
4499
4500 if ((i & 127) === 0) {
4501 value._setNoAsyncGuarantee();
4502 }
4503 }
4504 }
4505
4506 if (this._eachValues !== undefined) {
4507 value = value
4508 ._then(this._eachComplete, undefined, undefined, this, undefined);
4509 }
4510 value._then(completed, completed, undefined, value, this);
4511};
4512
4513Promise.prototype.reduce = function (fn, initialValue) {
4514 return reduce(this, fn, initialValue, null);
4515};
4516
4517Promise.reduce = function (promises, fn, initialValue, _each) {
4518 return reduce(promises, fn, initialValue, _each);
4519};
4520
4521function completed(valueOrReason, array) {
4522 if (this.isFulfilled()) {
4523 array._resolve(valueOrReason);
4524 } else {
4525 array._reject(valueOrReason);
4526 }
4527}
4528
4529function reduce(promises, fn, initialValue, _each) {
4530 if (typeof fn !== "function") {
4531 return apiRejection("expecting a function but got " + util.classString(fn));
4532 }
4533 var array = new ReductionPromiseArray(promises, fn, initialValue, _each);
4534 return array.promise();
4535}
4536
4537function gotAccum(accum) {
4538 this.accum = accum;
4539 this.array._gotAccum(accum);
4540 var value = tryConvertToPromise(this.value, this.array._promise);
4541 if (value instanceof Promise) {
4542 this.array._currentCancellable = value;
4543 return value._then(gotValue, undefined, undefined, this, undefined);
4544 } else {
4545 return gotValue.call(this, value);
4546 }
4547}
4548
4549function gotValue(value) {
4550 var array = this.array;
4551 var promise = array._promise;
4552 var fn = tryCatch(array._fn);
4553 promise._pushContext();
4554 var ret;
4555 if (array._eachValues !== undefined) {
4556 ret = fn.call(promise._boundValue(), value, this.index, this.length);
4557 } else {
4558 ret = fn.call(promise._boundValue(),
4559 this.accum, value, this.index, this.length);
4560 }
4561 if (ret instanceof Promise) {
4562 array._currentCancellable = ret;
4563 }
4564 var promiseCreated = promise._popContext();
4565 debug.checkForgottenReturns(
4566 ret,
4567 promiseCreated,
4568 array._eachValues !== undefined ? "Promise.each" : "Promise.reduce",
4569 promise
4570 );
4571 return ret;
4572}
4573};
4574
4575},{"./util":36}],29:[function(_dereq_,module,exports){
4576"use strict";
4577var util = _dereq_("./util");
4578var schedule;
4579var noAsyncScheduler = function() {
4580 throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a");
4581};
4582var NativePromise = util.getNativePromise();
4583if (util.isNode && typeof MutationObserver === "undefined") {
4584 var GlobalSetImmediate = global.setImmediate;
4585 var ProcessNextTick = process.nextTick;
4586 schedule = util.isRecentNode
4587 ? function(fn) { GlobalSetImmediate.call(global, fn); }
4588 : function(fn) { ProcessNextTick.call(process, fn); };
4589} else if (typeof NativePromise === "function" &&
4590 typeof NativePromise.resolve === "function") {
4591 var nativePromise = NativePromise.resolve();
4592 schedule = function(fn) {
4593 nativePromise.then(fn);
4594 };
4595} else if ((typeof MutationObserver !== "undefined") &&
4596 !(typeof window !== "undefined" &&
4597 window.navigator &&
4598 (window.navigator.standalone || window.cordova)) &&
4599 ("classList" in document.documentElement)) {
4600 schedule = (function() {
4601 var div = document.createElement("div");
4602 var opts = {attributes: true};
4603 var toggleScheduled = false;
4604 var div2 = document.createElement("div");
4605 var o2 = new MutationObserver(function() {
4606 div.classList.toggle("foo");
4607 toggleScheduled = false;
4608 });
4609 o2.observe(div2, opts);
4610
4611 var scheduleToggle = function() {
4612 if (toggleScheduled) return;
4613 toggleScheduled = true;
4614 div2.classList.toggle("foo");
4615 };
4616
4617 return function schedule(fn) {
4618 var o = new MutationObserver(function() {
4619 o.disconnect();
4620 fn();
4621 });
4622 o.observe(div, opts);
4623 scheduleToggle();
4624 };
4625 })();
4626} else if (typeof setImmediate !== "undefined") {
4627 schedule = function (fn) {
4628 setImmediate(fn);
4629 };
4630} else if (typeof setTimeout !== "undefined") {
4631 schedule = function (fn) {
4632 setTimeout(fn, 0);
4633 };
4634} else {
4635 schedule = noAsyncScheduler;
4636}
4637module.exports = schedule;
4638
4639},{"./util":36}],30:[function(_dereq_,module,exports){
4640"use strict";
4641module.exports =
4642 function(Promise, PromiseArray, debug) {
4643var PromiseInspection = Promise.PromiseInspection;
4644var util = _dereq_("./util");
4645
4646function SettledPromiseArray(values) {
4647 this.constructor$(values);
4648}
4649util.inherits(SettledPromiseArray, PromiseArray);
4650
4651SettledPromiseArray.prototype._promiseResolved = function (index, inspection) {
4652 this._values[index] = inspection;
4653 var totalResolved = ++this._totalResolved;
4654 if (totalResolved >= this._length) {
4655 this._resolve(this._values);
4656 return true;
4657 }
4658 return false;
4659};
4660
4661SettledPromiseArray.prototype._promiseFulfilled = function (value, index) {
4662 var ret = new PromiseInspection();
4663 ret._bitField = 33554432;
4664 ret._settledValueField = value;
4665 return this._promiseResolved(index, ret);
4666};
4667SettledPromiseArray.prototype._promiseRejected = function (reason, index) {
4668 var ret = new PromiseInspection();
4669 ret._bitField = 16777216;
4670 ret._settledValueField = reason;
4671 return this._promiseResolved(index, ret);
4672};
4673
4674Promise.settle = function (promises) {
4675 debug.deprecated(".settle()", ".reflect()");
4676 return new SettledPromiseArray(promises).promise();
4677};
4678
4679Promise.allSettled = function (promises) {
4680 return new SettledPromiseArray(promises).promise();
4681};
4682
4683Promise.prototype.settle = function () {
4684 return Promise.settle(this);
4685};
4686};
4687
4688},{"./util":36}],31:[function(_dereq_,module,exports){
4689"use strict";
4690module.exports =
4691function(Promise, PromiseArray, apiRejection) {
4692var util = _dereq_("./util");
4693var RangeError = _dereq_("./errors").RangeError;
4694var AggregateError = _dereq_("./errors").AggregateError;
4695var isArray = util.isArray;
4696var CANCELLATION = {};
4697
4698
4699function SomePromiseArray(values) {
4700 this.constructor$(values);
4701 this._howMany = 0;
4702 this._unwrap = false;
4703 this._initialized = false;
4704}
4705util.inherits(SomePromiseArray, PromiseArray);
4706
4707SomePromiseArray.prototype._init = function () {
4708 if (!this._initialized) {
4709 return;
4710 }
4711 if (this._howMany === 0) {
4712 this._resolve([]);
4713 return;
4714 }
4715 this._init$(undefined, -5);
4716 var isArrayResolved = isArray(this._values);
4717 if (!this._isResolved() &&
4718 isArrayResolved &&
4719 this._howMany > this._canPossiblyFulfill()) {
4720 this._reject(this._getRangeError(this.length()));
4721 }
4722};
4723
4724SomePromiseArray.prototype.init = function () {
4725 this._initialized = true;
4726 this._init();
4727};
4728
4729SomePromiseArray.prototype.setUnwrap = function () {
4730 this._unwrap = true;
4731};
4732
4733SomePromiseArray.prototype.howMany = function () {
4734 return this._howMany;
4735};
4736
4737SomePromiseArray.prototype.setHowMany = function (count) {
4738 this._howMany = count;
4739};
4740
4741SomePromiseArray.prototype._promiseFulfilled = function (value) {
4742 this._addFulfilled(value);
4743 if (this._fulfilled() === this.howMany()) {
4744 this._values.length = this.howMany();
4745 if (this.howMany() === 1 && this._unwrap) {
4746 this._resolve(this._values[0]);
4747 } else {
4748 this._resolve(this._values);
4749 }
4750 return true;
4751 }
4752 return false;
4753
4754};
4755SomePromiseArray.prototype._promiseRejected = function (reason) {
4756 this._addRejected(reason);
4757 return this._checkOutcome();
4758};
4759
4760SomePromiseArray.prototype._promiseCancelled = function () {
4761 if (this._values instanceof Promise || this._values == null) {
4762 return this._cancel();
4763 }
4764 this._addRejected(CANCELLATION);
4765 return this._checkOutcome();
4766};
4767
4768SomePromiseArray.prototype._checkOutcome = function() {
4769 if (this.howMany() > this._canPossiblyFulfill()) {
4770 var e = new AggregateError();
4771 for (var i = this.length(); i < this._values.length; ++i) {
4772 if (this._values[i] !== CANCELLATION) {
4773 e.push(this._values[i]);
4774 }
4775 }
4776 if (e.length > 0) {
4777 this._reject(e);
4778 } else {
4779 this._cancel();
4780 }
4781 return true;
4782 }
4783 return false;
4784};
4785
4786SomePromiseArray.prototype._fulfilled = function () {
4787 return this._totalResolved;
4788};
4789
4790SomePromiseArray.prototype._rejected = function () {
4791 return this._values.length - this.length();
4792};
4793
4794SomePromiseArray.prototype._addRejected = function (reason) {
4795 this._values.push(reason);
4796};
4797
4798SomePromiseArray.prototype._addFulfilled = function (value) {
4799 this._values[this._totalResolved++] = value;
4800};
4801
4802SomePromiseArray.prototype._canPossiblyFulfill = function () {
4803 return this.length() - this._rejected();
4804};
4805
4806SomePromiseArray.prototype._getRangeError = function (count) {
4807 var message = "Input array must contain at least " +
4808 this._howMany + " items but contains only " + count + " items";
4809 return new RangeError(message);
4810};
4811
4812SomePromiseArray.prototype._resolveEmptyArray = function () {
4813 this._reject(this._getRangeError(0));
4814};
4815
4816function some(promises, howMany) {
4817 if ((howMany | 0) !== howMany || howMany < 0) {
4818 return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a");
4819 }
4820 var ret = new SomePromiseArray(promises);
4821 var promise = ret.promise();
4822 ret.setHowMany(howMany);
4823 ret.init();
4824 return promise;
4825}
4826
4827Promise.some = function (promises, howMany) {
4828 return some(promises, howMany);
4829};
4830
4831Promise.prototype.some = function (howMany) {
4832 return some(this, howMany);
4833};
4834
4835Promise._SomePromiseArray = SomePromiseArray;
4836};
4837
4838},{"./errors":12,"./util":36}],32:[function(_dereq_,module,exports){
4839"use strict";
4840module.exports = function(Promise) {
4841function PromiseInspection(promise) {
4842 if (promise !== undefined) {
4843 promise = promise._target();
4844 this._bitField = promise._bitField;
4845 this._settledValueField = promise._isFateSealed()
4846 ? promise._settledValue() : undefined;
4847 }
4848 else {
4849 this._bitField = 0;
4850 this._settledValueField = undefined;
4851 }
4852}
4853
4854PromiseInspection.prototype._settledValue = function() {
4855 return this._settledValueField;
4856};
4857
4858var value = PromiseInspection.prototype.value = function () {
4859 if (!this.isFulfilled()) {
4860 throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a");
4861 }
4862 return this._settledValue();
4863};
4864
4865var reason = PromiseInspection.prototype.error =
4866PromiseInspection.prototype.reason = function () {
4867 if (!this.isRejected()) {
4868 throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a");
4869 }
4870 return this._settledValue();
4871};
4872
4873var isFulfilled = PromiseInspection.prototype.isFulfilled = function() {
4874 return (this._bitField & 33554432) !== 0;
4875};
4876
4877var isRejected = PromiseInspection.prototype.isRejected = function () {
4878 return (this._bitField & 16777216) !== 0;
4879};
4880
4881var isPending = PromiseInspection.prototype.isPending = function () {
4882 return (this._bitField & 50397184) === 0;
4883};
4884
4885var isResolved = PromiseInspection.prototype.isResolved = function () {
4886 return (this._bitField & 50331648) !== 0;
4887};
4888
4889PromiseInspection.prototype.isCancelled = function() {
4890 return (this._bitField & 8454144) !== 0;
4891};
4892
4893Promise.prototype.__isCancelled = function() {
4894 return (this._bitField & 65536) === 65536;
4895};
4896
4897Promise.prototype._isCancelled = function() {
4898 return this._target().__isCancelled();
4899};
4900
4901Promise.prototype.isCancelled = function() {
4902 return (this._target()._bitField & 8454144) !== 0;
4903};
4904
4905Promise.prototype.isPending = function() {
4906 return isPending.call(this._target());
4907};
4908
4909Promise.prototype.isRejected = function() {
4910 return isRejected.call(this._target());
4911};
4912
4913Promise.prototype.isFulfilled = function() {
4914 return isFulfilled.call(this._target());
4915};
4916
4917Promise.prototype.isResolved = function() {
4918 return isResolved.call(this._target());
4919};
4920
4921Promise.prototype.value = function() {
4922 return value.call(this._target());
4923};
4924
4925Promise.prototype.reason = function() {
4926 var target = this._target();
4927 target._unsetRejectionIsUnhandled();
4928 return reason.call(target);
4929};
4930
4931Promise.prototype._value = function() {
4932 return this._settledValue();
4933};
4934
4935Promise.prototype._reason = function() {
4936 this._unsetRejectionIsUnhandled();
4937 return this._settledValue();
4938};
4939
4940Promise.PromiseInspection = PromiseInspection;
4941};
4942
4943},{}],33:[function(_dereq_,module,exports){
4944"use strict";
4945module.exports = function(Promise, INTERNAL) {
4946var util = _dereq_("./util");
4947var errorObj = util.errorObj;
4948var isObject = util.isObject;
4949
4950function tryConvertToPromise(obj, context) {
4951 if (isObject(obj)) {
4952 if (obj instanceof Promise) return obj;
4953 var then = getThen(obj);
4954 if (then === errorObj) {
4955 if (context) context._pushContext();
4956 var ret = Promise.reject(then.e);
4957 if (context) context._popContext();
4958 return ret;
4959 } else if (typeof then === "function") {
4960 if (isAnyBluebirdPromise(obj)) {
4961 var ret = new Promise(INTERNAL);
4962 obj._then(
4963 ret._fulfill,
4964 ret._reject,
4965 undefined,
4966 ret,
4967 null
4968 );
4969 return ret;
4970 }
4971 return doThenable(obj, then, context);
4972 }
4973 }
4974 return obj;
4975}
4976
4977function doGetThen(obj) {
4978 return obj.then;
4979}
4980
4981function getThen(obj) {
4982 try {
4983 return doGetThen(obj);
4984 } catch (e) {
4985 errorObj.e = e;
4986 return errorObj;
4987 }
4988}
4989
4990var hasProp = {}.hasOwnProperty;
4991function isAnyBluebirdPromise(obj) {
4992 try {
4993 return hasProp.call(obj, "_promise0");
4994 } catch (e) {
4995 return false;
4996 }
4997}
4998
4999function doThenable(x, then, context) {
5000 var promise = new Promise(INTERNAL);
5001 var ret = promise;
5002 if (context) context._pushContext();
5003 promise._captureStackTrace();
5004 if (context) context._popContext();
5005 var synchronous = true;
5006 var result = util.tryCatch(then).call(x, resolve, reject);
5007 synchronous = false;
5008
5009 if (promise && result === errorObj) {
5010 promise._rejectCallback(result.e, true, true);
5011 promise = null;
5012 }
5013
5014 function resolve(value) {
5015 if (!promise) return;
5016 promise._resolveCallback(value);
5017 promise = null;
5018 }
5019
5020 function reject(reason) {
5021 if (!promise) return;
5022 promise._rejectCallback(reason, synchronous, true);
5023 promise = null;
5024 }
5025 return ret;
5026}
5027
5028return tryConvertToPromise;
5029};
5030
5031},{"./util":36}],34:[function(_dereq_,module,exports){
5032"use strict";
5033module.exports = function(Promise, INTERNAL, debug) {
5034var util = _dereq_("./util");
5035var TimeoutError = Promise.TimeoutError;
5036
5037function HandleWrapper(handle) {
5038 this.handle = handle;
5039}
5040
5041HandleWrapper.prototype._resultCancelled = function() {
5042 clearTimeout(this.handle);
5043};
5044
5045var afterValue = function(value) { return delay(+this).thenReturn(value); };
5046var delay = Promise.delay = function (ms, value) {
5047 var ret;
5048 var handle;
5049 if (value !== undefined) {
5050 ret = Promise.resolve(value)
5051 ._then(afterValue, null, null, ms, undefined);
5052 if (debug.cancellation() && value instanceof Promise) {
5053 ret._setOnCancel(value);
5054 }
5055 } else {
5056 ret = new Promise(INTERNAL);
5057 handle = setTimeout(function() { ret._fulfill(); }, +ms);
5058 if (debug.cancellation()) {
5059 ret._setOnCancel(new HandleWrapper(handle));
5060 }
5061 ret._captureStackTrace();
5062 }
5063 ret._setAsyncGuaranteed();
5064 return ret;
5065};
5066
5067Promise.prototype.delay = function (ms) {
5068 return delay(ms, this);
5069};
5070
5071var afterTimeout = function (promise, message, parent) {
5072 var err;
5073 if (typeof message !== "string") {
5074 if (message instanceof Error) {
5075 err = message;
5076 } else {
5077 err = new TimeoutError("operation timed out");
5078 }
5079 } else {
5080 err = new TimeoutError(message);
5081 }
5082 util.markAsOriginatingFromRejection(err);
5083 promise._attachExtraTrace(err);
5084 promise._reject(err);
5085
5086 if (parent != null) {
5087 parent.cancel();
5088 }
5089};
5090
5091function successClear(value) {
5092 clearTimeout(this.handle);
5093 return value;
5094}
5095
5096function failureClear(reason) {
5097 clearTimeout(this.handle);
5098 throw reason;
5099}
5100
5101Promise.prototype.timeout = function (ms, message) {
5102 ms = +ms;
5103 var ret, parent;
5104
5105 var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() {
5106 if (ret.isPending()) {
5107 afterTimeout(ret, message, parent);
5108 }
5109 }, ms));
5110
5111 if (debug.cancellation()) {
5112 parent = this.then();
5113 ret = parent._then(successClear, failureClear,
5114 undefined, handleWrapper, undefined);
5115 ret._setOnCancel(handleWrapper);
5116 } else {
5117 ret = this._then(successClear, failureClear,
5118 undefined, handleWrapper, undefined);
5119 }
5120
5121 return ret;
5122};
5123
5124};
5125
5126},{"./util":36}],35:[function(_dereq_,module,exports){
5127"use strict";
5128module.exports = function (Promise, apiRejection, tryConvertToPromise,
5129 createContext, INTERNAL, debug) {
5130 var util = _dereq_("./util");
5131 var TypeError = _dereq_("./errors").TypeError;
5132 var inherits = _dereq_("./util").inherits;
5133 var errorObj = util.errorObj;
5134 var tryCatch = util.tryCatch;
5135 var NULL = {};
5136
5137 function thrower(e) {
5138 setTimeout(function(){throw e;}, 0);
5139 }
5140
5141 function castPreservingDisposable(thenable) {
5142 var maybePromise = tryConvertToPromise(thenable);
5143 if (maybePromise !== thenable &&
5144 typeof thenable._isDisposable === "function" &&
5145 typeof thenable._getDisposer === "function" &&
5146 thenable._isDisposable()) {
5147 maybePromise._setDisposable(thenable._getDisposer());
5148 }
5149 return maybePromise;
5150 }
5151 function dispose(resources, inspection) {
5152 var i = 0;
5153 var len = resources.length;
5154 var ret = new Promise(INTERNAL);
5155 function iterator() {
5156 if (i >= len) return ret._fulfill();
5157 var maybePromise = castPreservingDisposable(resources[i++]);
5158 if (maybePromise instanceof Promise &&
5159 maybePromise._isDisposable()) {
5160 try {
5161 maybePromise = tryConvertToPromise(
5162 maybePromise._getDisposer().tryDispose(inspection),
5163 resources.promise);
5164 } catch (e) {
5165 return thrower(e);
5166 }
5167 if (maybePromise instanceof Promise) {
5168 return maybePromise._then(iterator, thrower,
5169 null, null, null);
5170 }
5171 }
5172 iterator();
5173 }
5174 iterator();
5175 return ret;
5176 }
5177
5178 function Disposer(data, promise, context) {
5179 this._data = data;
5180 this._promise = promise;
5181 this._context = context;
5182 }
5183
5184 Disposer.prototype.data = function () {
5185 return this._data;
5186 };
5187
5188 Disposer.prototype.promise = function () {
5189 return this._promise;
5190 };
5191
5192 Disposer.prototype.resource = function () {
5193 if (this.promise().isFulfilled()) {
5194 return this.promise().value();
5195 }
5196 return NULL;
5197 };
5198
5199 Disposer.prototype.tryDispose = function(inspection) {
5200 var resource = this.resource();
5201 var context = this._context;
5202 if (context !== undefined) context._pushContext();
5203 var ret = resource !== NULL
5204 ? this.doDispose(resource, inspection) : null;
5205 if (context !== undefined) context._popContext();
5206 this._promise._unsetDisposable();
5207 this._data = null;
5208 return ret;
5209 };
5210
5211 Disposer.isDisposer = function (d) {
5212 return (d != null &&
5213 typeof d.resource === "function" &&
5214 typeof d.tryDispose === "function");
5215 };
5216
5217 function FunctionDisposer(fn, promise, context) {
5218 this.constructor$(fn, promise, context);
5219 }
5220 inherits(FunctionDisposer, Disposer);
5221
5222 FunctionDisposer.prototype.doDispose = function (resource, inspection) {
5223 var fn = this.data();
5224 return fn.call(resource, resource, inspection);
5225 };
5226
5227 function maybeUnwrapDisposer(value) {
5228 if (Disposer.isDisposer(value)) {
5229 this.resources[this.index]._setDisposable(value);
5230 return value.promise();
5231 }
5232 return value;
5233 }
5234
5235 function ResourceList(length) {
5236 this.length = length;
5237 this.promise = null;
5238 this[length-1] = null;
5239 }
5240
5241 ResourceList.prototype._resultCancelled = function() {
5242 var len = this.length;
5243 for (var i = 0; i < len; ++i) {
5244 var item = this[i];
5245 if (item instanceof Promise) {
5246 item.cancel();
5247 }
5248 }
5249 };
5250
5251 Promise.using = function () {
5252 var len = arguments.length;
5253 if (len < 2) return apiRejection(
5254 "you must pass at least 2 arguments to Promise.using");
5255 var fn = arguments[len - 1];
5256 if (typeof fn !== "function") {
5257 return apiRejection("expecting a function but got " + util.classString(fn));
5258 }
5259 var input;
5260 var spreadArgs = true;
5261 if (len === 2 && Array.isArray(arguments[0])) {
5262 input = arguments[0];
5263 len = input.length;
5264 spreadArgs = false;
5265 } else {
5266 input = arguments;
5267 len--;
5268 }
5269 var resources = new ResourceList(len);
5270 for (var i = 0; i < len; ++i) {
5271 var resource = input[i];
5272 if (Disposer.isDisposer(resource)) {
5273 var disposer = resource;
5274 resource = resource.promise();
5275 resource._setDisposable(disposer);
5276 } else {
5277 var maybePromise = tryConvertToPromise(resource);
5278 if (maybePromise instanceof Promise) {
5279 resource =
5280 maybePromise._then(maybeUnwrapDisposer, null, null, {
5281 resources: resources,
5282 index: i
5283 }, undefined);
5284 }
5285 }
5286 resources[i] = resource;
5287 }
5288
5289 var reflectedResources = new Array(resources.length);
5290 for (var i = 0; i < reflectedResources.length; ++i) {
5291 reflectedResources[i] = Promise.resolve(resources[i]).reflect();
5292 }
5293
5294 var resultPromise = Promise.all(reflectedResources)
5295 .then(function(inspections) {
5296 for (var i = 0; i < inspections.length; ++i) {
5297 var inspection = inspections[i];
5298 if (inspection.isRejected()) {
5299 errorObj.e = inspection.error();
5300 return errorObj;
5301 } else if (!inspection.isFulfilled()) {
5302 resultPromise.cancel();
5303 return;
5304 }
5305 inspections[i] = inspection.value();
5306 }
5307 promise._pushContext();
5308
5309 fn = tryCatch(fn);
5310 var ret = spreadArgs
5311 ? fn.apply(undefined, inspections) : fn(inspections);
5312 var promiseCreated = promise._popContext();
5313 debug.checkForgottenReturns(
5314 ret, promiseCreated, "Promise.using", promise);
5315 return ret;
5316 });
5317
5318 var promise = resultPromise.lastly(function() {
5319 var inspection = new Promise.PromiseInspection(resultPromise);
5320 return dispose(resources, inspection);
5321 });
5322 resources.promise = promise;
5323 promise._setOnCancel(resources);
5324 return promise;
5325 };
5326
5327 Promise.prototype._setDisposable = function (disposer) {
5328 this._bitField = this._bitField | 131072;
5329 this._disposer = disposer;
5330 };
5331
5332 Promise.prototype._isDisposable = function () {
5333 return (this._bitField & 131072) > 0;
5334 };
5335
5336 Promise.prototype._getDisposer = function () {
5337 return this._disposer;
5338 };
5339
5340 Promise.prototype._unsetDisposable = function () {
5341 this._bitField = this._bitField & (~131072);
5342 this._disposer = undefined;
5343 };
5344
5345 Promise.prototype.disposer = function (fn) {
5346 if (typeof fn === "function") {
5347 return new FunctionDisposer(fn, this, createContext());
5348 }
5349 throw new TypeError();
5350 };
5351
5352};
5353
5354},{"./errors":12,"./util":36}],36:[function(_dereq_,module,exports){
5355"use strict";
5356var es5 = _dereq_("./es5");
5357var canEvaluate = typeof navigator == "undefined";
5358
5359var errorObj = {e: {}};
5360var tryCatchTarget;
5361var globalObject = typeof self !== "undefined" ? self :
5362 typeof window !== "undefined" ? window :
5363 typeof global !== "undefined" ? global :
5364 this !== undefined ? this : null;
5365
5366function tryCatcher() {
5367 try {
5368 var target = tryCatchTarget;
5369 tryCatchTarget = null;
5370 return target.apply(this, arguments);
5371 } catch (e) {
5372 errorObj.e = e;
5373 return errorObj;
5374 }
5375}
5376function tryCatch(fn) {
5377 tryCatchTarget = fn;
5378 return tryCatcher;
5379}
5380
5381var inherits = function(Child, Parent) {
5382 var hasProp = {}.hasOwnProperty;
5383
5384 function T() {
5385 this.constructor = Child;
5386 this.constructor$ = Parent;
5387 for (var propertyName in Parent.prototype) {
5388 if (hasProp.call(Parent.prototype, propertyName) &&
5389 propertyName.charAt(propertyName.length-1) !== "$"
5390 ) {
5391 this[propertyName + "$"] = Parent.prototype[propertyName];
5392 }
5393 }
5394 }
5395 T.prototype = Parent.prototype;
5396 Child.prototype = new T();
5397 return Child.prototype;
5398};
5399
5400
5401function isPrimitive(val) {
5402 return val == null || val === true || val === false ||
5403 typeof val === "string" || typeof val === "number";
5404
5405}
5406
5407function isObject(value) {
5408 return typeof value === "function" ||
5409 typeof value === "object" && value !== null;
5410}
5411
5412function maybeWrapAsError(maybeError) {
5413 if (!isPrimitive(maybeError)) return maybeError;
5414
5415 return new Error(safeToString(maybeError));
5416}
5417
5418function withAppended(target, appendee) {
5419 var len = target.length;
5420 var ret = new Array(len + 1);
5421 var i;
5422 for (i = 0; i < len; ++i) {
5423 ret[i] = target[i];
5424 }
5425 ret[i] = appendee;
5426 return ret;
5427}
5428
5429function getDataPropertyOrDefault(obj, key, defaultValue) {
5430 if (es5.isES5) {
5431 var desc = Object.getOwnPropertyDescriptor(obj, key);
5432
5433 if (desc != null) {
5434 return desc.get == null && desc.set == null
5435 ? desc.value
5436 : defaultValue;
5437 }
5438 } else {
5439 return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;
5440 }
5441}
5442
5443function notEnumerableProp(obj, name, value) {
5444 if (isPrimitive(obj)) return obj;
5445 var descriptor = {
5446 value: value,
5447 configurable: true,
5448 enumerable: false,
5449 writable: true
5450 };
5451 es5.defineProperty(obj, name, descriptor);
5452 return obj;
5453}
5454
5455function thrower(r) {
5456 throw r;
5457}
5458
5459var inheritedDataKeys = (function() {
5460 var excludedPrototypes = [
5461 Array.prototype,
5462 Object.prototype,
5463 Function.prototype
5464 ];
5465
5466 var isExcludedProto = function(val) {
5467 for (var i = 0; i < excludedPrototypes.length; ++i) {
5468 if (excludedPrototypes[i] === val) {
5469 return true;
5470 }
5471 }
5472 return false;
5473 };
5474
5475 if (es5.isES5) {
5476 var getKeys = Object.getOwnPropertyNames;
5477 return function(obj) {
5478 var ret = [];
5479 var visitedKeys = Object.create(null);
5480 while (obj != null && !isExcludedProto(obj)) {
5481 var keys;
5482 try {
5483 keys = getKeys(obj);
5484 } catch (e) {
5485 return ret;
5486 }
5487 for (var i = 0; i < keys.length; ++i) {
5488 var key = keys[i];
5489 if (visitedKeys[key]) continue;
5490 visitedKeys[key] = true;
5491 var desc = Object.getOwnPropertyDescriptor(obj, key);
5492 if (desc != null && desc.get == null && desc.set == null) {
5493 ret.push(key);
5494 }
5495 }
5496 obj = es5.getPrototypeOf(obj);
5497 }
5498 return ret;
5499 };
5500 } else {
5501 var hasProp = {}.hasOwnProperty;
5502 return function(obj) {
5503 if (isExcludedProto(obj)) return [];
5504 var ret = [];
5505
5506 /*jshint forin:false */
5507 enumeration: for (var key in obj) {
5508 if (hasProp.call(obj, key)) {
5509 ret.push(key);
5510 } else {
5511 for (var i = 0; i < excludedPrototypes.length; ++i) {
5512 if (hasProp.call(excludedPrototypes[i], key)) {
5513 continue enumeration;
5514 }
5515 }
5516 ret.push(key);
5517 }
5518 }
5519 return ret;
5520 };
5521 }
5522
5523})();
5524
5525var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/;
5526function isClass(fn) {
5527 try {
5528 if (typeof fn === "function") {
5529 var keys = es5.names(fn.prototype);
5530
5531 var hasMethods = es5.isES5 && keys.length > 1;
5532 var hasMethodsOtherThanConstructor = keys.length > 0 &&
5533 !(keys.length === 1 && keys[0] === "constructor");
5534 var hasThisAssignmentAndStaticMethods =
5535 thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0;
5536
5537 if (hasMethods || hasMethodsOtherThanConstructor ||
5538 hasThisAssignmentAndStaticMethods) {
5539 return true;
5540 }
5541 }
5542 return false;
5543 } catch (e) {
5544 return false;
5545 }
5546}
5547
5548function toFastProperties(obj) {
5549 /*jshint -W027,-W055,-W031*/
5550 function FakeConstructor() {}
5551 FakeConstructor.prototype = obj;
5552 var receiver = new FakeConstructor();
5553 function ic() {
5554 return typeof receiver.foo;
5555 }
5556 ic();
5557 ic();
5558 return obj;
5559 eval(obj);
5560}
5561
5562var rident = /^[a-z$_][a-z$_0-9]*$/i;
5563function isIdentifier(str) {
5564 return rident.test(str);
5565}
5566
5567function filledRange(count, prefix, suffix) {
5568 var ret = new Array(count);
5569 for(var i = 0; i < count; ++i) {
5570 ret[i] = prefix + i + suffix;
5571 }
5572 return ret;
5573}
5574
5575function safeToString(obj) {
5576 try {
5577 return obj + "";
5578 } catch (e) {
5579 return "[no string representation]";
5580 }
5581}
5582
5583function isError(obj) {
5584 return obj instanceof Error ||
5585 (obj !== null &&
5586 typeof obj === "object" &&
5587 typeof obj.message === "string" &&
5588 typeof obj.name === "string");
5589}
5590
5591function markAsOriginatingFromRejection(e) {
5592 try {
5593 notEnumerableProp(e, "isOperational", true);
5594 }
5595 catch(ignore) {}
5596}
5597
5598function originatesFromRejection(e) {
5599 if (e == null) return false;
5600 return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) ||
5601 e["isOperational"] === true);
5602}
5603
5604function canAttachTrace(obj) {
5605 return isError(obj) && es5.propertyIsWritable(obj, "stack");
5606}
5607
5608var ensureErrorObject = (function() {
5609 if (!("stack" in new Error())) {
5610 return function(value) {
5611 if (canAttachTrace(value)) return value;
5612 try {throw new Error(safeToString(value));}
5613 catch(err) {return err;}
5614 };
5615 } else {
5616 return function(value) {
5617 if (canAttachTrace(value)) return value;
5618 return new Error(safeToString(value));
5619 };
5620 }
5621})();
5622
5623function classString(obj) {
5624 return {}.toString.call(obj);
5625}
5626
5627function copyDescriptors(from, to, filter) {
5628 var keys = es5.names(from);
5629 for (var i = 0; i < keys.length; ++i) {
5630 var key = keys[i];
5631 if (filter(key)) {
5632 try {
5633 es5.defineProperty(to, key, es5.getDescriptor(from, key));
5634 } catch (ignore) {}
5635 }
5636 }
5637}
5638
5639var asArray = function(v) {
5640 if (es5.isArray(v)) {
5641 return v;
5642 }
5643 return null;
5644};
5645
5646if (typeof Symbol !== "undefined" && Symbol.iterator) {
5647 var ArrayFrom = typeof Array.from === "function" ? function(v) {
5648 return Array.from(v);
5649 } : function(v) {
5650 var ret = [];
5651 var it = v[Symbol.iterator]();
5652 var itResult;
5653 while (!((itResult = it.next()).done)) {
5654 ret.push(itResult.value);
5655 }
5656 return ret;
5657 };
5658
5659 asArray = function(v) {
5660 if (es5.isArray(v)) {
5661 return v;
5662 } else if (v != null && typeof v[Symbol.iterator] === "function") {
5663 return ArrayFrom(v);
5664 }
5665 return null;
5666 };
5667}
5668
5669var isNode = typeof process !== "undefined" &&
5670 classString(process).toLowerCase() === "[object process]";
5671
5672var hasEnvVariables = typeof process !== "undefined" &&
5673 typeof process.env !== "undefined";
5674
5675function env(key) {
5676 return hasEnvVariables ? process.env[key] : undefined;
5677}
5678
5679function getNativePromise() {
5680 if (typeof Promise === "function") {
5681 try {
5682 var promise = new Promise(function(){});
5683 if (classString(promise) === "[object Promise]") {
5684 return Promise;
5685 }
5686 } catch (e) {}
5687 }
5688}
5689
5690var reflectHandler;
5691function contextBind(ctx, cb) {
5692 if (ctx === null ||
5693 typeof cb !== "function" ||
5694 cb === reflectHandler) {
5695 return cb;
5696 }
5697
5698 if (ctx.domain !== null) {
5699 cb = ctx.domain.bind(cb);
5700 }
5701
5702 var async = ctx.async;
5703 if (async !== null) {
5704 var old = cb;
5705 cb = function() {
5706 var args = (new Array(2)).concat([].slice.call(arguments));;
5707 args[0] = old;
5708 args[1] = this;
5709 return async.runInAsyncScope.apply(async, args);
5710 };
5711 }
5712 return cb;
5713}
5714
5715var ret = {
5716 setReflectHandler: function(fn) {
5717 reflectHandler = fn;
5718 },
5719 isClass: isClass,
5720 isIdentifier: isIdentifier,
5721 inheritedDataKeys: inheritedDataKeys,
5722 getDataPropertyOrDefault: getDataPropertyOrDefault,
5723 thrower: thrower,
5724 isArray: es5.isArray,
5725 asArray: asArray,
5726 notEnumerableProp: notEnumerableProp,
5727 isPrimitive: isPrimitive,
5728 isObject: isObject,
5729 isError: isError,
5730 canEvaluate: canEvaluate,
5731 errorObj: errorObj,
5732 tryCatch: tryCatch,
5733 inherits: inherits,
5734 withAppended: withAppended,
5735 maybeWrapAsError: maybeWrapAsError,
5736 toFastProperties: toFastProperties,
5737 filledRange: filledRange,
5738 toString: safeToString,
5739 canAttachTrace: canAttachTrace,
5740 ensureErrorObject: ensureErrorObject,
5741 originatesFromRejection: originatesFromRejection,
5742 markAsOriginatingFromRejection: markAsOriginatingFromRejection,
5743 classString: classString,
5744 copyDescriptors: copyDescriptors,
5745 isNode: isNode,
5746 hasEnvVariables: hasEnvVariables,
5747 env: env,
5748 global: globalObject,
5749 getNativePromise: getNativePromise,
5750 contextBind: contextBind
5751};
5752ret.isRecentNode = ret.isNode && (function() {
5753 var version;
5754 if (process.versions && process.versions.node) {
5755 version = process.versions.node.split(".").map(Number);
5756 } else if (process.version) {
5757 version = process.version.split(".").map(Number);
5758 }
5759 return (version[0] === 0 && version[1] > 10) || (version[0] > 0);
5760})();
5761ret.nodeSupportsAsyncResource = ret.isNode && (function() {
5762 var supportsAsync = false;
5763 try {
5764 var res = _dereq_("async_hooks").AsyncResource;
5765 supportsAsync = typeof res.prototype.runInAsyncScope === "function";
5766 } catch (e) {
5767 supportsAsync = false;
5768 }
5769 return supportsAsync;
5770})();
5771
5772if (ret.isNode) ret.toFastProperties(process);
5773
5774try {throw new Error(); } catch (e) {ret.lastLineError = e;}
5775module.exports = ret;
5776
5777},{"./es5":13,"async_hooks":undefined}]},{},[4])(4)
5778}); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; }
\No newline at end of file