2 * The MIT License (MIT)
4 * Copyright (c) 2013-2015 Petka Antonov
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:
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
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
26 * bluebird build version 2.10.2
27 * Features enabled: core, race, call_get, generators, map, nodeify, promisify, props, reduce, settle, some, cancel, using, filter, any, each, timers
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){
31 module.exports = function(Promise) {
32 var SomePromiseArray = Promise._SomePromiseArray;
33 function any(promises) {
34 var ret = new SomePromiseArray(promises);
35 var promise = ret.promise();
42 Promise.any = function (promises) {
46 Promise.prototype.any = function () {
52 },{}],2:[function(_dereq_,module,exports){
55 try {throw new Error(); } catch (e) {firstLineError = e;}
56 var schedule = _dereq_("./schedule.js");
57 var Queue = _dereq_("./queue.js");
58 var util = _dereq_("./util.js");
61 this._isTickUsed = false;
62 this._lateQueue = new Queue(16);
63 this._normalQueue = new Queue(16);
64 this._trampolineEnabled = true;
66 this.drainQueues = function () {
70 schedule.isStatic ? schedule(this.drainQueues) : schedule;
73 Async.prototype.disableTrampolineIfNecessary = function() {
74 if (util.hasDevTools) {
75 this._trampolineEnabled = false;
79 Async.prototype.enableTrampoline = function() {
80 if (!this._trampolineEnabled) {
81 this._trampolineEnabled = true;
82 this._schedule = function(fn) {
88 Async.prototype.haveItemsQueued = function () {
89 return this._normalQueue.length() > 0;
92 Async.prototype.throwLater = function(fn, arg) {
93 if (arguments.length === 1) {
95 fn = function () { throw arg; };
97 if (typeof setTimeout !== "undefined") {
98 setTimeout(function() {
102 this._schedule(function() {
106 throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/m3OTXk\u000a");
110 function AsyncInvokeLater(fn, receiver, arg) {
111 this._lateQueue.push(fn, receiver, arg);
115 function AsyncInvoke(fn, receiver, arg) {
116 this._normalQueue.push(fn, receiver, arg);
120 function AsyncSettlePromises(promise) {
121 this._normalQueue._pushOne(promise);
125 if (!util.hasDevTools) {
126 Async.prototype.invokeLater = AsyncInvokeLater;
127 Async.prototype.invoke = AsyncInvoke;
128 Async.prototype.settlePromises = AsyncSettlePromises;
130 if (schedule.isStatic) {
131 schedule = function(fn) { setTimeout(fn, 0); };
133 Async.prototype.invokeLater = function (fn, receiver, arg) {
134 if (this._trampolineEnabled) {
135 AsyncInvokeLater.call(this, fn, receiver, arg);
137 this._schedule(function() {
138 setTimeout(function() {
139 fn.call(receiver, arg);
145 Async.prototype.invoke = function (fn, receiver, arg) {
146 if (this._trampolineEnabled) {
147 AsyncInvoke.call(this, fn, receiver, arg);
149 this._schedule(function() {
150 fn.call(receiver, arg);
155 Async.prototype.settlePromises = function(promise) {
156 if (this._trampolineEnabled) {
157 AsyncSettlePromises.call(this, promise);
159 this._schedule(function() {
160 promise._settlePromises();
166 Async.prototype.invokeFirst = function (fn, receiver, arg) {
167 this._normalQueue.unshift(fn, receiver, arg);
171 Async.prototype._drainQueue = function(queue) {
172 while (queue.length() > 0) {
173 var fn = queue.shift();
174 if (typeof fn !== "function") {
175 fn._settlePromises();
178 var receiver = queue.shift();
179 var arg = queue.shift();
180 fn.call(receiver, arg);
184 Async.prototype._drainQueues = function () {
185 this._drainQueue(this._normalQueue);
187 this._drainQueue(this._lateQueue);
190 Async.prototype._queueTick = function () {
191 if (!this._isTickUsed) {
192 this._isTickUsed = true;
193 this._schedule(this.drainQueues);
197 Async.prototype._reset = function () {
198 this._isTickUsed = false;
201 module.exports = new Async();
202 module.exports.firstLineError = firstLineError;
204 },{"./queue.js":28,"./schedule.js":31,"./util.js":38}],3:[function(_dereq_,module,exports){
206 module.exports = function(Promise, INTERNAL, tryConvertToPromise) {
207 var rejectThis = function(_, e) {
211 var targetRejected = function(e, context) {
212 context.promiseRejectionQueued = true;
213 context.bindingPromise._then(rejectThis, rejectThis, null, this, e);
216 var bindingResolved = function(thisArg, context) {
217 if (this._isPending()) {
218 this._resolveCallback(context.target);
222 var bindingRejected = function(e, context) {
223 if (!context.promiseRejectionQueued) this._reject(e);
226 Promise.prototype.bind = function (thisArg) {
227 var maybePromise = tryConvertToPromise(thisArg);
228 var ret = new Promise(INTERNAL);
229 ret._propagateFrom(this, 1);
230 var target = this._target();
232 ret._setBoundTo(maybePromise);
233 if (maybePromise instanceof Promise) {
235 promiseRejectionQueued: false,
238 bindingPromise: maybePromise
240 target._then(INTERNAL, targetRejected, ret._progress, ret, context);
242 bindingResolved, bindingRejected, ret._progress, ret, context);
244 ret._resolveCallback(target);
249 Promise.prototype._setBoundTo = function (obj) {
250 if (obj !== undefined) {
251 this._bitField = this._bitField | 131072;
254 this._bitField = this._bitField & (~131072);
258 Promise.prototype._isBound = function () {
259 return (this._bitField & 131072) === 131072;
262 Promise.bind = function (thisArg, value) {
263 var maybePromise = tryConvertToPromise(thisArg);
264 var ret = new Promise(INTERNAL);
266 ret._setBoundTo(maybePromise);
267 if (maybePromise instanceof Promise) {
268 maybePromise._then(function() {
269 ret._resolveCallback(value);
270 }, ret._reject, ret._progress, ret, null);
272 ret._resolveCallback(value);
278 },{}],4:[function(_dereq_,module,exports){
281 if (typeof Promise !== "undefined") old = Promise;
282 function noConflict() {
283 try { if (Promise === bluebird) Promise = old; }
287 var bluebird = _dereq_("./promise.js")();
288 bluebird.noConflict = noConflict;
289 module.exports = bluebird;
291 },{"./promise.js":23}],5:[function(_dereq_,module,exports){
293 var cr = Object.create;
295 var callerCache = cr(null);
296 var getterCache = cr(null);
297 callerCache[" size"] = getterCache[" size"] = 0;
300 module.exports = function(Promise) {
301 var util = _dereq_("./util.js");
302 var canEvaluate = util.canEvaluate;
303 var isIdentifier = util.isIdentifier;
308 var makeMethodCaller = function (methodName) {
309 return new Function("ensureMethod", " \n\
310 return function(obj) { \n\
312 var len = this.length; \n\
313 ensureMethod(obj, 'methodName'); \n\
315 case 1: return obj.methodName(this[0]); \n\
316 case 2: return obj.methodName(this[0], this[1]); \n\
317 case 3: return obj.methodName(this[0], this[1], this[2]); \n\
318 case 0: return obj.methodName(); \n\
320 return obj.methodName.apply(obj, this); \n\
323 ".replace(/methodName/g, methodName))(ensureMethod);
326 var makeGetter = function (propertyName) {
327 return new Function("obj", " \n\
329 return obj.propertyName; \n\
330 ".replace("propertyName", propertyName));
333 var getCompiled = function(name, compiler, cache) {
334 var ret = cache[name];
335 if (typeof ret !== "function") {
336 if (!isIdentifier(name)) {
339 ret = compiler(name);
342 if (cache[" size"] > 512) {
343 var keys = Object.keys(cache);
344 for (var i = 0; i < 256; ++i) delete cache[keys[i]];
345 cache[" size"] = keys.length - 256;
351 getMethodCaller = function(name) {
352 return getCompiled(name, makeMethodCaller, callerCache);
355 getGetter = function(name) {
356 return getCompiled(name, makeGetter, getterCache);
360 function ensureMethod(obj, methodName) {
362 if (obj != null) fn = obj[methodName];
363 if (typeof fn !== "function") {
364 var message = "Object " + util.classString(obj) + " has no method '" +
365 util.toString(methodName) + "'";
366 throw new Promise.TypeError(message);
371 function caller(obj) {
372 var methodName = this.pop();
373 var fn = ensureMethod(obj, methodName);
374 return fn.apply(obj, this);
376 Promise.prototype.call = function (methodName) {
377 var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}
380 var maybeCaller = getMethodCaller(methodName);
381 if (maybeCaller !== null) {
383 maybeCaller, undefined, undefined, args, undefined);
387 args.push(methodName);
388 return this._then(caller, undefined, undefined, args, undefined);
391 function namedGetter(obj) {
394 function indexedGetter(obj) {
396 if (index < 0) index = Math.max(0, index + obj.length);
399 Promise.prototype.get = function (propertyName) {
400 var isIndex = (typeof propertyName === "number");
404 var maybeGetter = getGetter(propertyName);
405 getter = maybeGetter !== null ? maybeGetter : namedGetter;
407 getter = namedGetter;
410 getter = indexedGetter;
412 return this._then(getter, undefined, undefined, propertyName, undefined);
416 },{"./util.js":38}],6:[function(_dereq_,module,exports){
418 module.exports = function(Promise) {
419 var errors = _dereq_("./errors.js");
420 var async = _dereq_("./async.js");
421 var CancellationError = errors.CancellationError;
423 Promise.prototype._cancel = function (reason) {
424 if (!this.isCancellable()) return this;
426 var promiseToReject = this;
427 while ((parent = promiseToReject._cancellationParent) !== undefined &&
428 parent.isCancellable()) {
429 promiseToReject = parent;
431 this._unsetCancellable();
432 promiseToReject._target()._rejectCallback(reason, false, true);
435 Promise.prototype.cancel = function (reason) {
436 if (!this.isCancellable()) return this;
437 if (reason === undefined) reason = new CancellationError();
438 async.invokeLater(this._cancel, this, reason);
442 Promise.prototype.cancellable = function () {
443 if (this._cancellable()) return this;
444 async.enableTrampoline();
445 this._setCancellable();
446 this._cancellationParent = undefined;
450 Promise.prototype.uncancellable = function () {
451 var ret = this.then();
452 ret._unsetCancellable();
456 Promise.prototype.fork = function (didFulfill, didReject, didProgress) {
457 var ret = this._then(didFulfill, didReject, didProgress,
458 undefined, undefined);
460 ret._setCancellable();
461 ret._cancellationParent = undefined;
466 },{"./async.js":2,"./errors.js":13}],7:[function(_dereq_,module,exports){
468 module.exports = function() {
469 var async = _dereq_("./async.js");
470 var util = _dereq_("./util.js");
471 var bluebirdFramePattern =
472 /[\\\/]bluebird[\\\/]js[\\\/](main|debug|zalgo|instrumented)/;
473 var stackFramePattern = null;
474 var formatStack = null;
475 var indentStackFrames = false;
478 function CapturedTrace(parent) {
479 this._parent = parent;
480 var length = this._length = 1 + (parent === undefined ? 0 : parent._length);
481 captureStackTrace(this, CapturedTrace);
482 if (length > 32) this.uncycle();
484 util.inherits(CapturedTrace, Error);
486 CapturedTrace.prototype.uncycle = function() {
487 var length = this._length;
488 if (length < 2) return;
490 var stackToIndex = {};
492 for (var i = 0, node = this; node !== undefined; ++i) {
496 length = this._length = i;
497 for (var i = length - 1; i >= 0; --i) {
498 var stack = nodes[i].stack;
499 if (stackToIndex[stack] === undefined) {
500 stackToIndex[stack] = i;
503 for (var i = 0; i < length; ++i) {
504 var currentStack = nodes[i].stack;
505 var index = stackToIndex[currentStack];
506 if (index !== undefined && index !== i) {
508 nodes[index - 1]._parent = undefined;
509 nodes[index - 1]._length = 1;
511 nodes[i]._parent = undefined;
512 nodes[i]._length = 1;
513 var cycleEdgeNode = i > 0 ? nodes[i - 1] : this;
515 if (index < length - 1) {
516 cycleEdgeNode._parent = nodes[index + 1];
517 cycleEdgeNode._parent.uncycle();
518 cycleEdgeNode._length =
519 cycleEdgeNode._parent._length + 1;
521 cycleEdgeNode._parent = undefined;
522 cycleEdgeNode._length = 1;
524 var currentChildLength = cycleEdgeNode._length + 1;
525 for (var j = i - 2; j >= 0; --j) {
526 nodes[j]._length = currentChildLength;
527 currentChildLength++;
534 CapturedTrace.prototype.parent = function() {
538 CapturedTrace.prototype.hasParent = function() {
539 return this._parent !== undefined;
542 CapturedTrace.prototype.attachExtraTrace = function(error) {
543 if (error.__stackCleaned__) return;
545 var parsed = CapturedTrace.parseStackAndMessage(error);
546 var message = parsed.message;
547 var stacks = [parsed.stack];
550 while (trace !== undefined) {
551 stacks.push(cleanStack(trace.stack.split("\n")));
552 trace = trace._parent;
554 removeCommonRoots(stacks);
555 removeDuplicateOrEmptyJumps(stacks);
556 util.notEnumerableProp(error, "stack", reconstructStack(message, stacks));
557 util.notEnumerableProp(error, "__stackCleaned__", true);
560 function reconstructStack(message, stacks) {
561 for (var i = 0; i < stacks.length - 1; ++i) {
562 stacks[i].push("From previous event:");
563 stacks[i] = stacks[i].join("\n");
565 if (i < stacks.length) {
566 stacks[i] = stacks[i].join("\n");
568 return message + "\n" + stacks.join("\n");
571 function removeDuplicateOrEmptyJumps(stacks) {
572 for (var i = 0; i < stacks.length; ++i) {
573 if (stacks[i].length === 0 ||
574 ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) {
581 function removeCommonRoots(stacks) {
582 var current = stacks[0];
583 for (var i = 1; i < stacks.length; ++i) {
584 var prev = stacks[i];
585 var currentLastIndex = current.length - 1;
586 var currentLastLine = current[currentLastIndex];
587 var commonRootMeetPoint = -1;
589 for (var j = prev.length - 1; j >= 0; --j) {
590 if (prev[j] === currentLastLine) {
591 commonRootMeetPoint = j;
596 for (var j = commonRootMeetPoint; j >= 0; --j) {
598 if (current[currentLastIndex] === line) {
609 function cleanStack(stack) {
611 for (var i = 0; i < stack.length; ++i) {
613 var isTraceLine = stackFramePattern.test(line) ||
614 " (No stack trace)" === line;
615 var isInternalFrame = isTraceLine && shouldIgnore(line);
616 if (isTraceLine && !isInternalFrame) {
617 if (indentStackFrames && line.charAt(0) !== " ") {
626 function stackFramesAsArray(error) {
627 var stack = error.stack.replace(/\s+$/g, "").split("\n");
628 for (var i = 0; i < stack.length; ++i) {
630 if (" (No stack trace)" === line || stackFramePattern.test(line)) {
635 stack = stack.slice(i);
640 CapturedTrace.parseStackAndMessage = function(error) {
641 var stack = error.stack;
642 var message = error.toString();
643 stack = typeof stack === "string" && stack.length > 0
644 ? stackFramesAsArray(error) : [" (No stack trace)"];
647 stack: cleanStack(stack)
651 CapturedTrace.formatAndLogError = function(error, title) {
652 if (typeof console !== "undefined") {
654 if (typeof error === "object" || typeof error === "function") {
655 var stack = error.stack;
656 message = title + formatStack(stack, error);
658 message = title + String(error);
660 if (typeof warn === "function") {
662 } else if (typeof console.log === "function" ||
663 typeof console.log === "object") {
664 console.log(message);
669 CapturedTrace.unhandledRejection = function (reason) {
670 CapturedTrace.formatAndLogError(reason, "^--- With additional stack trace: ");
673 CapturedTrace.isSupported = function () {
674 return typeof captureStackTrace === "function";
677 CapturedTrace.fireRejectionEvent =
678 function(name, localHandler, reason, promise) {
679 var localEventFired = false;
681 if (typeof localHandler === "function") {
682 localEventFired = true;
683 if (name === "rejectionHandled") {
684 localHandler(promise);
686 localHandler(reason, promise);
693 var globalEventFired = false;
695 globalEventFired = fireGlobalEvent(name, reason, promise);
697 globalEventFired = true;
701 var domEventFired = false;
704 domEventFired = fireDomEvent(name.toLowerCase(), {
709 domEventFired = true;
714 if (!globalEventFired && !localEventFired && !domEventFired &&
715 name === "unhandledRejection") {
716 CapturedTrace.formatAndLogError(reason, "Unhandled rejection ");
720 function formatNonError(obj) {
722 if (typeof obj === "function") {
724 (obj.name || "anonymous") +
727 str = obj.toString();
728 var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/;
729 if (ruselessToString.test(str)) {
731 var newStr = JSON.stringify(obj);
738 if (str.length === 0) {
739 str = "(empty array)";
742 return ("(<" + snip(str) + ">, no stack trace)");
747 if (str.length < maxChars) {
750 return str.substr(0, maxChars - 3) + "...";
753 var shouldIgnore = function() { return false; };
754 var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/;
755 function parseLineInfo(line) {
756 var matches = line.match(parseLineInfoRegex);
759 fileName: matches[1],
760 line: parseInt(matches[2], 10)
764 CapturedTrace.setBounds = function(firstLineError, lastLineError) {
765 if (!CapturedTrace.isSupported()) return;
766 var firstStackLines = firstLineError.stack.split("\n");
767 var lastStackLines = lastLineError.stack.split("\n");
772 for (var i = 0; i < firstStackLines.length; ++i) {
773 var result = parseLineInfo(firstStackLines[i]);
775 firstFileName = result.fileName;
776 firstIndex = result.line;
780 for (var i = 0; i < lastStackLines.length; ++i) {
781 var result = parseLineInfo(lastStackLines[i]);
783 lastFileName = result.fileName;
784 lastIndex = result.line;
788 if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName ||
789 firstFileName !== lastFileName || firstIndex >= lastIndex) {
793 shouldIgnore = function(line) {
794 if (bluebirdFramePattern.test(line)) return true;
795 var info = parseLineInfo(line);
797 if (info.fileName === firstFileName &&
798 (firstIndex <= info.line && info.line <= lastIndex)) {
806 var captureStackTrace = (function stackDetection() {
807 var v8stackFramePattern = /^\s*at\s*/;
808 var v8stackFormatter = function(stack, error) {
809 if (typeof stack === "string") return stack;
811 if (error.name !== undefined &&
812 error.message !== undefined) {
813 return error.toString();
815 return formatNonError(error);
818 if (typeof Error.stackTraceLimit === "number" &&
819 typeof Error.captureStackTrace === "function") {
820 Error.stackTraceLimit = Error.stackTraceLimit + 6;
821 stackFramePattern = v8stackFramePattern;
822 formatStack = v8stackFormatter;
823 var captureStackTrace = Error.captureStackTrace;
825 shouldIgnore = function(line) {
826 return bluebirdFramePattern.test(line);
828 return function(receiver, ignoreUntil) {
829 Error.stackTraceLimit = Error.stackTraceLimit + 6;
830 captureStackTrace(receiver, ignoreUntil);
831 Error.stackTraceLimit = Error.stackTraceLimit - 6;
834 var err = new Error();
836 if (typeof err.stack === "string" &&
837 err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) {
838 stackFramePattern = /@/;
839 formatStack = v8stackFormatter;
840 indentStackFrames = true;
841 return function captureStackTrace(o) {
842 o.stack = new Error().stack;
846 var hasStackAfterThrow;
847 try { throw new Error(); }
849 hasStackAfterThrow = ("stack" in e);
851 if (!("stack" in err) && hasStackAfterThrow &&
852 typeof Error.stackTraceLimit === "number") {
853 stackFramePattern = v8stackFramePattern;
854 formatStack = v8stackFormatter;
855 return function captureStackTrace(o) {
856 Error.stackTraceLimit = Error.stackTraceLimit + 6;
857 try { throw new Error(); }
858 catch(e) { o.stack = e.stack; }
859 Error.stackTraceLimit = Error.stackTraceLimit - 6;
863 formatStack = function(stack, error) {
864 if (typeof stack === "string") return stack;
866 if ((typeof error === "object" ||
867 typeof error === "function") &&
868 error.name !== undefined &&
869 error.message !== undefined) {
870 return error.toString();
872 return formatNonError(error);
880 var fireGlobalEvent = (function() {
882 return function(name, reason, promise) {
883 if (name === "rejectionHandled") {
884 return process.emit(name, promise);
886 return process.emit(name, reason, promise);
890 var customEventWorks = false;
891 var anyEventWorks = true;
893 var ev = new self.CustomEvent("test");
894 customEventWorks = ev instanceof CustomEvent;
896 if (!customEventWorks) {
898 var event = document.createEvent("CustomEvent");
899 event.initCustomEvent("testingtheevent", false, true, {});
900 self.dispatchEvent(event);
902 anyEventWorks = false;
906 fireDomEvent = function(type, detail) {
908 if (customEventWorks) {
909 event = new self.CustomEvent(type, {
914 } else if (self.dispatchEvent) {
915 event = document.createEvent("CustomEvent");
916 event.initCustomEvent(type, false, true, detail);
919 return event ? !self.dispatchEvent(event) : false;
923 var toWindowMethodNameMap = {};
924 toWindowMethodNameMap["unhandledRejection"] = ("on" +
925 "unhandledRejection").toLowerCase();
926 toWindowMethodNameMap["rejectionHandled"] = ("on" +
927 "rejectionHandled").toLowerCase();
929 return function(name, reason, promise) {
930 var methodName = toWindowMethodNameMap[name];
931 var method = self[methodName];
932 if (!method) return false;
933 if (name === "rejectionHandled") {
934 method.call(self, promise);
936 method.call(self, reason, promise);
943 if (typeof console !== "undefined" && typeof console.warn !== "undefined") {
944 warn = function (message) {
945 console.warn(message);
947 if (util.isNode && process.stderr.isTTY) {
948 warn = function(message) {
949 process.stderr.write("\u001b[31m" + message + "\u001b[39m\n");
951 } else if (!util.isNode && typeof (new Error().stack) === "string") {
952 warn = function(message) {
953 console.warn("%c" + message, "color: red");
958 return CapturedTrace;
961 },{"./async.js":2,"./util.js":38}],8:[function(_dereq_,module,exports){
963 module.exports = function(NEXT_FILTER) {
964 var util = _dereq_("./util.js");
965 var errors = _dereq_("./errors.js");
966 var tryCatch = util.tryCatch;
967 var errorObj = util.errorObj;
968 var keys = _dereq_("./es5.js").keys;
969 var TypeError = errors.TypeError;
971 function CatchFilter(instances, callback, promise) {
972 this._instances = instances;
973 this._callback = callback;
974 this._promise = promise;
977 function safePredicate(predicate, e) {
979 var retfilter = tryCatch(predicate).call(safeObject, e);
981 if (retfilter === errorObj) return retfilter;
983 var safeKeys = keys(safeObject);
984 if (safeKeys.length) {
985 errorObj.e = new TypeError("Catch filter must inherit from Error or be a simple predicate function\u000a\u000a See http://goo.gl/o84o68\u000a");
991 CatchFilter.prototype.doFilter = function (e) {
992 var cb = this._callback;
993 var promise = this._promise;
994 var boundTo = promise._boundValue();
995 for (var i = 0, len = this._instances.length; i < len; ++i) {
996 var item = this._instances[i];
997 var itemIsErrorType = item === Error ||
998 (item != null && item.prototype instanceof Error);
1000 if (itemIsErrorType && e instanceof item) {
1001 var ret = tryCatch(cb).call(boundTo, e);
1002 if (ret === errorObj) {
1003 NEXT_FILTER.e = ret.e;
1007 } else if (typeof item === "function" && !itemIsErrorType) {
1008 var shouldHandle = safePredicate(item, e);
1009 if (shouldHandle === errorObj) {
1012 } else if (shouldHandle) {
1013 var ret = tryCatch(cb).call(boundTo, e);
1014 if (ret === errorObj) {
1015 NEXT_FILTER.e = ret.e;
1029 },{"./errors.js":13,"./es5.js":14,"./util.js":38}],9:[function(_dereq_,module,exports){
1031 module.exports = function(Promise, CapturedTrace, isDebugging) {
1032 var contextStack = [];
1033 function Context() {
1034 this._trace = new CapturedTrace(peekContext());
1036 Context.prototype._pushContext = function () {
1037 if (!isDebugging()) return;
1038 if (this._trace !== undefined) {
1039 contextStack.push(this._trace);
1043 Context.prototype._popContext = function () {
1044 if (!isDebugging()) return;
1045 if (this._trace !== undefined) {
1050 function createContext() {
1051 if (isDebugging()) return new Context();
1054 function peekContext() {
1055 var lastIndex = contextStack.length - 1;
1056 if (lastIndex >= 0) {
1057 return contextStack[lastIndex];
1062 Promise.prototype._peekContext = peekContext;
1063 Promise.prototype._pushContext = Context.prototype._pushContext;
1064 Promise.prototype._popContext = Context.prototype._popContext;
1066 return createContext;
1069 },{}],10:[function(_dereq_,module,exports){
1071 module.exports = function(Promise, CapturedTrace) {
1072 var getDomain = Promise._getDomain;
1073 var async = _dereq_("./async.js");
1074 var Warning = _dereq_("./errors.js").Warning;
1075 var util = _dereq_("./util.js");
1076 var canAttachTrace = util.canAttachTrace;
1077 var unhandledRejectionHandled;
1078 var possiblyUnhandledRejection;
1079 var debugging = false || (util.isNode &&
1080 (!!process.env["BLUEBIRD_DEBUG"] ||
1081 process.env["NODE_ENV"] === "development"));
1083 if (util.isNode && process.env["BLUEBIRD_DEBUG"] == 0) debugging = false;
1086 async.disableTrampolineIfNecessary();
1089 Promise.prototype._ignoreRejections = function() {
1090 this._unsetRejectionIsUnhandled();
1091 this._bitField = this._bitField | 16777216;
1094 Promise.prototype._ensurePossibleRejectionHandled = function () {
1095 if ((this._bitField & 16777216) !== 0) return;
1096 this._setRejectionIsUnhandled();
1097 async.invokeLater(this._notifyUnhandledRejection, this, undefined);
1100 Promise.prototype._notifyUnhandledRejectionIsHandled = function () {
1101 CapturedTrace.fireRejectionEvent("rejectionHandled",
1102 unhandledRejectionHandled, undefined, this);
1105 Promise.prototype._notifyUnhandledRejection = function () {
1106 if (this._isRejectionUnhandled()) {
1107 var reason = this._getCarriedStackTrace() || this._settledValue;
1108 this._setUnhandledRejectionIsNotified();
1109 CapturedTrace.fireRejectionEvent("unhandledRejection",
1110 possiblyUnhandledRejection, reason, this);
1114 Promise.prototype._setUnhandledRejectionIsNotified = function () {
1115 this._bitField = this._bitField | 524288;
1118 Promise.prototype._unsetUnhandledRejectionIsNotified = function () {
1119 this._bitField = this._bitField & (~524288);
1122 Promise.prototype._isUnhandledRejectionNotified = function () {
1123 return (this._bitField & 524288) > 0;
1126 Promise.prototype._setRejectionIsUnhandled = function () {
1127 this._bitField = this._bitField | 2097152;
1130 Promise.prototype._unsetRejectionIsUnhandled = function () {
1131 this._bitField = this._bitField & (~2097152);
1132 if (this._isUnhandledRejectionNotified()) {
1133 this._unsetUnhandledRejectionIsNotified();
1134 this._notifyUnhandledRejectionIsHandled();
1138 Promise.prototype._isRejectionUnhandled = function () {
1139 return (this._bitField & 2097152) > 0;
1142 Promise.prototype._setCarriedStackTrace = function (capturedTrace) {
1143 this._bitField = this._bitField | 1048576;
1144 this._fulfillmentHandler0 = capturedTrace;
1147 Promise.prototype._isCarryingStackTrace = function () {
1148 return (this._bitField & 1048576) > 0;
1151 Promise.prototype._getCarriedStackTrace = function () {
1152 return this._isCarryingStackTrace()
1153 ? this._fulfillmentHandler0
1157 Promise.prototype._captureStackTrace = function () {
1159 this._trace = new CapturedTrace(this._peekContext());
1164 Promise.prototype._attachExtraTrace = function (error, ignoreSelf) {
1165 if (debugging && canAttachTrace(error)) {
1166 var trace = this._trace;
1167 if (trace !== undefined) {
1168 if (ignoreSelf) trace = trace._parent;
1170 if (trace !== undefined) {
1171 trace.attachExtraTrace(error);
1172 } else if (!error.__stackCleaned__) {
1173 var parsed = CapturedTrace.parseStackAndMessage(error);
1174 util.notEnumerableProp(error, "stack",
1175 parsed.message + "\n" + parsed.stack.join("\n"));
1176 util.notEnumerableProp(error, "__stackCleaned__", true);
1181 Promise.prototype._warn = function(message) {
1182 var warning = new Warning(message);
1183 var ctx = this._peekContext();
1185 ctx.attachExtraTrace(warning);
1187 var parsed = CapturedTrace.parseStackAndMessage(warning);
1188 warning.stack = parsed.message + "\n" + parsed.stack.join("\n");
1190 CapturedTrace.formatAndLogError(warning, "");
1193 Promise.onPossiblyUnhandledRejection = function (fn) {
1194 var domain = getDomain();
1195 possiblyUnhandledRejection =
1196 typeof fn === "function" ? (domain === null ? fn : domain.bind(fn))
1200 Promise.onUnhandledRejectionHandled = function (fn) {
1201 var domain = getDomain();
1202 unhandledRejectionHandled =
1203 typeof fn === "function" ? (domain === null ? fn : domain.bind(fn))
1207 Promise.longStackTraces = function () {
1208 if (async.haveItemsQueued() &&
1211 throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/DT1qyG\u000a");
1213 debugging = CapturedTrace.isSupported();
1215 async.disableTrampolineIfNecessary();
1219 Promise.hasLongStackTraces = function () {
1220 return debugging && CapturedTrace.isSupported();
1223 if (!CapturedTrace.isSupported()) {
1224 Promise.longStackTraces = function(){};
1233 },{"./async.js":2,"./errors.js":13,"./util.js":38}],11:[function(_dereq_,module,exports){
1235 var util = _dereq_("./util.js");
1236 var isPrimitive = util.isPrimitive;
1238 module.exports = function(Promise) {
1239 var returner = function () {
1242 var thrower = function () {
1245 var returnUndefined = function() {};
1246 var throwUndefined = function() {
1250 var wrapper = function (value, action) {
1252 return function () {
1255 } else if (action === 2) {
1256 return function () {
1263 Promise.prototype["return"] =
1264 Promise.prototype.thenReturn = function (value) {
1265 if (value === undefined) return this.then(returnUndefined);
1267 if (isPrimitive(value)) {
1275 } else if (value instanceof Promise) {
1276 value._ignoreRejections();
1278 return this._then(returner, undefined, undefined, value, undefined);
1281 Promise.prototype["throw"] =
1282 Promise.prototype.thenThrow = function (reason) {
1283 if (reason === undefined) return this.then(throwUndefined);
1285 if (isPrimitive(reason)) {
1294 return this._then(thrower, undefined, undefined, reason, undefined);
1298 },{"./util.js":38}],12:[function(_dereq_,module,exports){
1300 module.exports = function(Promise, INTERNAL) {
1301 var PromiseReduce = Promise.reduce;
1303 Promise.prototype.each = function (fn) {
1304 return PromiseReduce(this, fn, null, INTERNAL);
1307 Promise.each = function (promises, fn) {
1308 return PromiseReduce(promises, fn, null, INTERNAL);
1312 },{}],13:[function(_dereq_,module,exports){
1314 var es5 = _dereq_("./es5.js");
1315 var Objectfreeze = es5.freeze;
1316 var util = _dereq_("./util.js");
1317 var inherits = util.inherits;
1318 var notEnumerableProp = util.notEnumerableProp;
1320 function subError(nameProperty, defaultMessage) {
1321 function SubError(message) {
1322 if (!(this instanceof SubError)) return new SubError(message);
1323 notEnumerableProp(this, "message",
1324 typeof message === "string" ? message : defaultMessage);
1325 notEnumerableProp(this, "name", nameProperty);
1326 if (Error.captureStackTrace) {
1327 Error.captureStackTrace(this, this.constructor);
1332 inherits(SubError, Error);
1336 var _TypeError, _RangeError;
1337 var Warning = subError("Warning", "warning");
1338 var CancellationError = subError("CancellationError", "cancellation error");
1339 var TimeoutError = subError("TimeoutError", "timeout error");
1340 var AggregateError = subError("AggregateError", "aggregate error");
1342 _TypeError = TypeError;
1343 _RangeError = RangeError;
1345 _TypeError = subError("TypeError", "type error");
1346 _RangeError = subError("RangeError", "range error");
1349 var methods = ("join pop push shift unshift slice filter forEach some " +
1350 "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" ");
1352 for (var i = 0; i < methods.length; ++i) {
1353 if (typeof Array.prototype[methods[i]] === "function") {
1354 AggregateError.prototype[methods[i]] = Array.prototype[methods[i]];
1358 es5.defineProperty(AggregateError.prototype, "length", {
1360 configurable: false,
1364 AggregateError.prototype["isOperational"] = true;
1366 AggregateError.prototype.toString = function() {
1367 var indent = Array(level * 4 + 1).join(" ");
1368 var ret = "\n" + indent + "AggregateError of:" + "\n";
1370 indent = Array(level * 4 + 1).join(" ");
1371 for (var i = 0; i < this.length; ++i) {
1372 var str = this[i] === this ? "[Circular AggregateError]" : this[i] + "";
1373 var lines = str.split("\n");
1374 for (var j = 0; j < lines.length; ++j) {
1375 lines[j] = indent + lines[j];
1377 str = lines.join("\n");
1384 function OperationalError(message) {
1385 if (!(this instanceof OperationalError))
1386 return new OperationalError(message);
1387 notEnumerableProp(this, "name", "OperationalError");
1388 notEnumerableProp(this, "message", message);
1389 this.cause = message;
1390 this["isOperational"] = true;
1392 if (message instanceof Error) {
1393 notEnumerableProp(this, "message", message.message);
1394 notEnumerableProp(this, "stack", message.stack);
1395 } else if (Error.captureStackTrace) {
1396 Error.captureStackTrace(this, this.constructor);
1400 inherits(OperationalError, Error);
1402 var errorTypes = Error["__BluebirdErrorTypes__"];
1404 errorTypes = Objectfreeze({
1405 CancellationError: CancellationError,
1406 TimeoutError: TimeoutError,
1407 OperationalError: OperationalError,
1408 RejectionError: OperationalError,
1409 AggregateError: AggregateError
1411 notEnumerableProp(Error, "__BluebirdErrorTypes__", errorTypes);
1416 TypeError: _TypeError,
1417 RangeError: _RangeError,
1418 CancellationError: errorTypes.CancellationError,
1419 OperationalError: errorTypes.OperationalError,
1420 TimeoutError: errorTypes.TimeoutError,
1421 AggregateError: errorTypes.AggregateError,
1425 },{"./es5.js":14,"./util.js":38}],14:[function(_dereq_,module,exports){
1426 var isES5 = (function(){
1428 return this === undefined;
1433 freeze: Object.freeze,
1434 defineProperty: Object.defineProperty,
1435 getDescriptor: Object.getOwnPropertyDescriptor,
1437 names: Object.getOwnPropertyNames,
1438 getPrototypeOf: Object.getPrototypeOf,
1439 isArray: Array.isArray,
1441 propertyIsWritable: function(obj, prop) {
1442 var descriptor = Object.getOwnPropertyDescriptor(obj, prop);
1443 return !!(!descriptor || descriptor.writable || descriptor.set);
1447 var has = {}.hasOwnProperty;
1448 var str = {}.toString;
1449 var proto = {}.constructor.prototype;
1451 var ObjectKeys = function (o) {
1453 for (var key in o) {
1454 if (has.call(o, key)) {
1461 var ObjectGetDescriptor = function(o, key) {
1462 return {value: o[key]};
1465 var ObjectDefineProperty = function (o, key, desc) {
1466 o[key] = desc.value;
1470 var ObjectFreeze = function (obj) {
1474 var ObjectGetPrototypeOf = function (obj) {
1476 return Object(obj).constructor.prototype;
1483 var ArrayIsArray = function (obj) {
1485 return str.call(obj) === "[object Array]";
1493 isArray: ArrayIsArray,
1496 defineProperty: ObjectDefineProperty,
1497 getDescriptor: ObjectGetDescriptor,
1498 freeze: ObjectFreeze,
1499 getPrototypeOf: ObjectGetPrototypeOf,
1501 propertyIsWritable: function() {
1507 },{}],15:[function(_dereq_,module,exports){
1509 module.exports = function(Promise, INTERNAL) {
1510 var PromiseMap = Promise.map;
1512 Promise.prototype.filter = function (fn, options) {
1513 return PromiseMap(this, fn, options, INTERNAL);
1516 Promise.filter = function (promises, fn, options) {
1517 return PromiseMap(promises, fn, options, INTERNAL);
1521 },{}],16:[function(_dereq_,module,exports){
1523 module.exports = function(Promise, NEXT_FILTER, tryConvertToPromise) {
1524 var util = _dereq_("./util.js");
1525 var isPrimitive = util.isPrimitive;
1526 var thrower = util.thrower;
1528 function returnThis() {
1531 function throwThis() {
1534 function return$(r) {
1539 function throw$(r) {
1544 function promisedFinally(ret, reasonOrValue, isFulfilled) {
1546 if (isPrimitive(reasonOrValue)) {
1547 then = isFulfilled ? return$(reasonOrValue) : throw$(reasonOrValue);
1549 then = isFulfilled ? returnThis : throwThis;
1551 return ret._then(then, thrower, undefined, reasonOrValue, undefined);
1554 function finallyHandler(reasonOrValue) {
1555 var promise = this.promise;
1556 var handler = this.handler;
1558 var ret = promise._isBound()
1559 ? handler.call(promise._boundValue())
1562 if (ret !== undefined) {
1563 var maybePromise = tryConvertToPromise(ret, promise);
1564 if (maybePromise instanceof Promise) {
1565 maybePromise = maybePromise._target();
1566 return promisedFinally(maybePromise, reasonOrValue,
1567 promise.isFulfilled());
1571 if (promise.isRejected()) {
1572 NEXT_FILTER.e = reasonOrValue;
1575 return reasonOrValue;
1579 function tapHandler(value) {
1580 var promise = this.promise;
1581 var handler = this.handler;
1583 var ret = promise._isBound()
1584 ? handler.call(promise._boundValue(), value)
1587 if (ret !== undefined) {
1588 var maybePromise = tryConvertToPromise(ret, promise);
1589 if (maybePromise instanceof Promise) {
1590 maybePromise = maybePromise._target();
1591 return promisedFinally(maybePromise, value, true);
1597 Promise.prototype._passThroughHandler = function (handler, isFinally) {
1598 if (typeof handler !== "function") return this.then();
1600 var promiseAndHandler = {
1606 isFinally ? finallyHandler : tapHandler,
1607 isFinally ? finallyHandler : undefined, undefined,
1608 promiseAndHandler, undefined);
1611 Promise.prototype.lastly =
1612 Promise.prototype["finally"] = function (handler) {
1613 return this._passThroughHandler(handler, true);
1616 Promise.prototype.tap = function (handler) {
1617 return this._passThroughHandler(handler, false);
1621 },{"./util.js":38}],17:[function(_dereq_,module,exports){
1623 module.exports = function(Promise,
1626 tryConvertToPromise) {
1627 var errors = _dereq_("./errors.js");
1628 var TypeError = errors.TypeError;
1629 var util = _dereq_("./util.js");
1630 var errorObj = util.errorObj;
1631 var tryCatch = util.tryCatch;
1632 var yieldHandlers = [];
1634 function promiseFromYieldHandler(value, yieldHandlers, traceParent) {
1635 for (var i = 0; i < yieldHandlers.length; ++i) {
1636 traceParent._pushContext();
1637 var result = tryCatch(yieldHandlers[i])(value);
1638 traceParent._popContext();
1639 if (result === errorObj) {
1640 traceParent._pushContext();
1641 var ret = Promise.reject(errorObj.e);
1642 traceParent._popContext();
1645 var maybePromise = tryConvertToPromise(result, traceParent);
1646 if (maybePromise instanceof Promise) return maybePromise;
1651 function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) {
1652 var promise = this._promise = new Promise(INTERNAL);
1653 promise._captureStackTrace();
1654 this._stack = stack;
1655 this._generatorFunction = generatorFunction;
1656 this._receiver = receiver;
1657 this._generator = undefined;
1658 this._yieldHandlers = typeof yieldHandler === "function"
1659 ? [yieldHandler].concat(yieldHandlers)
1663 PromiseSpawn.prototype.promise = function () {
1664 return this._promise;
1667 PromiseSpawn.prototype._run = function () {
1668 this._generator = this._generatorFunction.call(this._receiver);
1670 this._generatorFunction = undefined;
1671 this._next(undefined);
1674 PromiseSpawn.prototype._continue = function (result) {
1675 if (result === errorObj) {
1676 return this._promise._rejectCallback(result.e, false, true);
1679 var value = result.value;
1680 if (result.done === true) {
1681 this._promise._resolveCallback(value);
1683 var maybePromise = tryConvertToPromise(value, this._promise);
1684 if (!(maybePromise instanceof Promise)) {
1686 promiseFromYieldHandler(maybePromise,
1687 this._yieldHandlers,
1689 if (maybePromise === null) {
1692 "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/4Y4pDk\u000a\u000a".replace("%s", value) +
1693 "From coroutine:\u000a" +
1694 this._stack.split("\n").slice(1, -7).join("\n")
1710 PromiseSpawn.prototype._throw = function (reason) {
1711 this._promise._attachExtraTrace(reason);
1712 this._promise._pushContext();
1713 var result = tryCatch(this._generator["throw"])
1714 .call(this._generator, reason);
1715 this._promise._popContext();
1716 this._continue(result);
1719 PromiseSpawn.prototype._next = function (value) {
1720 this._promise._pushContext();
1721 var result = tryCatch(this._generator.next).call(this._generator, value);
1722 this._promise._popContext();
1723 this._continue(result);
1726 Promise.coroutine = function (generatorFunction, options) {
1727 if (typeof generatorFunction !== "function") {
1728 throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/6Vqhm0\u000a");
1730 var yieldHandler = Object(options).yieldHandler;
1731 var PromiseSpawn$ = PromiseSpawn;
1732 var stack = new Error().stack;
1733 return function () {
1734 var generator = generatorFunction.apply(this, arguments);
1735 var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler,
1737 spawn._generator = generator;
1738 spawn._next(undefined);
1739 return spawn.promise();
1743 Promise.coroutine.addYieldHandler = function(fn) {
1744 if (typeof fn !== "function") throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");
1745 yieldHandlers.push(fn);
1748 Promise.spawn = function (generatorFunction) {
1749 if (typeof generatorFunction !== "function") {
1750 return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/6Vqhm0\u000a");
1752 var spawn = new PromiseSpawn(generatorFunction, this);
1753 var ret = spawn.promise();
1754 spawn._run(Promise.spawn);
1759 },{"./errors.js":13,"./util.js":38}],18:[function(_dereq_,module,exports){
1762 function(Promise, PromiseArray, tryConvertToPromise, INTERNAL) {
1763 var util = _dereq_("./util.js");
1764 var canEvaluate = util.canEvaluate;
1765 var tryCatch = util.tryCatch;
1766 var errorObj = util.errorObj;
1771 var thenCallback = function(i) {
1772 return new Function("value", "holder", " \n\
1774 holder.pIndex = value; \n\
1775 holder.checkFulfillment(this); \n\
1776 ".replace(/Index/g, i));
1779 var caller = function(count) {
1781 for (var i = 1; i <= count; ++i) values.push("holder.p" + i);
1782 return new Function("holder", " \n\
1784 var callback = holder.fn; \n\
1785 return callback(values); \n\
1786 ".replace(/values/g, values.join(", ")));
1788 var thenCallbacks = [];
1789 var callers = [undefined];
1790 for (var i = 1; i <= 5; ++i) {
1791 thenCallbacks.push(thenCallback(i));
1792 callers.push(caller(i));
1795 var Holder = function(total, fn) {
1796 this.p1 = this.p2 = this.p3 = this.p4 = this.p5 = null;
1802 Holder.prototype.callers = callers;
1803 Holder.prototype.checkFulfillment = function(promise) {
1806 var total = this.total;
1808 var handler = this.callers[total];
1809 promise._pushContext();
1810 var ret = tryCatch(handler)(this);
1811 promise._popContext();
1812 if (ret === errorObj) {
1813 promise._rejectCallback(ret.e, false, true);
1815 promise._resolveCallback(ret);
1822 var reject = function (reason) {
1823 this._reject(reason);
1828 Promise.join = function () {
1829 var last = arguments.length - 1;
1831 if (last > 0 && typeof arguments[last] === "function") {
1832 fn = arguments[last];
1834 if (last < 6 && canEvaluate) {
1835 var ret = new Promise(INTERNAL);
1836 ret._captureStackTrace();
1837 var holder = new Holder(last, fn);
1838 var callbacks = thenCallbacks;
1839 for (var i = 0; i < last; ++i) {
1840 var maybePromise = tryConvertToPromise(arguments[i], ret);
1841 if (maybePromise instanceof Promise) {
1842 maybePromise = maybePromise._target();
1843 if (maybePromise._isPending()) {
1844 maybePromise._then(callbacks[i], reject,
1845 undefined, ret, holder);
1846 } else if (maybePromise._isFulfilled()) {
1847 callbacks[i].call(ret,
1848 maybePromise._value(), holder);
1850 ret._reject(maybePromise._reason());
1853 callbacks[i].call(ret, maybePromise, holder);
1860 var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];}
1862 var ret = new PromiseArray(args).promise();
1863 return fn !== undefined ? ret.spread(fn) : ret;
1868 },{"./util.js":38}],19:[function(_dereq_,module,exports){
1870 module.exports = function(Promise,
1873 tryConvertToPromise,
1875 var getDomain = Promise._getDomain;
1876 var async = _dereq_("./async.js");
1877 var util = _dereq_("./util.js");
1878 var tryCatch = util.tryCatch;
1879 var errorObj = util.errorObj;
1881 var EMPTY_ARRAY = [];
1883 function MappingPromiseArray(promises, fn, limit, _filter) {
1884 this.constructor$(promises);
1885 this._promise._captureStackTrace();
1886 var domain = getDomain();
1887 this._callback = domain === null ? fn : domain.bind(fn);
1888 this._preservedValues = _filter === INTERNAL
1889 ? new Array(this.length())
1891 this._limit = limit;
1893 this._queue = limit >= 1 ? [] : EMPTY_ARRAY;
1894 async.invoke(init, this, undefined);
1896 util.inherits(MappingPromiseArray, PromiseArray);
1897 function init() {this._init$(undefined, -2);}
1899 MappingPromiseArray.prototype._init = function () {};
1901 MappingPromiseArray.prototype._promiseFulfilled = function (value, index) {
1902 var values = this._values;
1903 var length = this.length();
1904 var preservedValues = this._preservedValues;
1905 var limit = this._limit;
1906 if (values[index] === PENDING) {
1907 values[index] = value;
1911 if (this._isResolved()) return;
1914 if (limit >= 1 && this._inFlight >= limit) {
1915 values[index] = value;
1916 this._queue.push(index);
1919 if (preservedValues !== null) preservedValues[index] = value;
1921 var callback = this._callback;
1922 var receiver = this._promise._boundValue();
1923 this._promise._pushContext();
1924 var ret = tryCatch(callback).call(receiver, value, index, length);
1925 this._promise._popContext();
1926 if (ret === errorObj) return this._reject(ret.e);
1928 var maybePromise = tryConvertToPromise(ret, this._promise);
1929 if (maybePromise instanceof Promise) {
1930 maybePromise = maybePromise._target();
1931 if (maybePromise._isPending()) {
1932 if (limit >= 1) this._inFlight++;
1933 values[index] = PENDING;
1934 return maybePromise._proxyPromiseArray(this, index);
1935 } else if (maybePromise._isFulfilled()) {
1936 ret = maybePromise._value();
1938 return this._reject(maybePromise._reason());
1941 values[index] = ret;
1943 var totalResolved = ++this._totalResolved;
1944 if (totalResolved >= length) {
1945 if (preservedValues !== null) {
1946 this._filter(values, preservedValues);
1948 this._resolve(values);
1954 MappingPromiseArray.prototype._drainQueue = function () {
1955 var queue = this._queue;
1956 var limit = this._limit;
1957 var values = this._values;
1958 while (queue.length > 0 && this._inFlight < limit) {
1959 if (this._isResolved()) return;
1960 var index = queue.pop();
1961 this._promiseFulfilled(values[index], index);
1965 MappingPromiseArray.prototype._filter = function (booleans, values) {
1966 var len = values.length;
1967 var ret = new Array(len);
1969 for (var i = 0; i < len; ++i) {
1970 if (booleans[i]) ret[j++] = values[i];
1976 MappingPromiseArray.prototype.preservedValues = function () {
1977 return this._preservedValues;
1980 function map(promises, fn, options, _filter) {
1981 var limit = typeof options === "object" && options !== null
1982 ? options.concurrency
1984 limit = typeof limit === "number" &&
1985 isFinite(limit) && limit >= 1 ? limit : 0;
1986 return new MappingPromiseArray(promises, fn, limit, _filter);
1989 Promise.prototype.map = function (fn, options) {
1990 if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");
1992 return map(this, fn, options, null).promise();
1995 Promise.map = function (promises, fn, options, _filter) {
1996 if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");
1997 return map(promises, fn, options, _filter).promise();
2003 },{"./async.js":2,"./util.js":38}],20:[function(_dereq_,module,exports){
2006 function(Promise, INTERNAL, tryConvertToPromise, apiRejection) {
2007 var util = _dereq_("./util.js");
2008 var tryCatch = util.tryCatch;
2010 Promise.method = function (fn) {
2011 if (typeof fn !== "function") {
2012 throw new Promise.TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");
2014 return function () {
2015 var ret = new Promise(INTERNAL);
2016 ret._captureStackTrace();
2018 var value = tryCatch(fn).apply(this, arguments);
2020 ret._resolveFromSyncValue(value);
2025 Promise.attempt = Promise["try"] = function (fn, args, ctx) {
2026 if (typeof fn !== "function") {
2027 return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");
2029 var ret = new Promise(INTERNAL);
2030 ret._captureStackTrace();
2032 var value = util.isArray(args)
2033 ? tryCatch(fn).apply(ctx, args)
2034 : tryCatch(fn).call(ctx, args);
2036 ret._resolveFromSyncValue(value);
2040 Promise.prototype._resolveFromSyncValue = function (value) {
2041 if (value === util.errorObj) {
2042 this._rejectCallback(value.e, false, true);
2044 this._resolveCallback(value, true);
2049 },{"./util.js":38}],21:[function(_dereq_,module,exports){
2051 module.exports = function(Promise) {
2052 var util = _dereq_("./util.js");
2053 var async = _dereq_("./async.js");
2054 var tryCatch = util.tryCatch;
2055 var errorObj = util.errorObj;
2057 function spreadAdapter(val, nodeback) {
2059 if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback);
2061 tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val));
2062 if (ret === errorObj) {
2063 async.throwLater(ret.e);
2067 function successAdapter(val, nodeback) {
2069 var receiver = promise._boundValue();
2070 var ret = val === undefined
2071 ? tryCatch(nodeback).call(receiver, null)
2072 : tryCatch(nodeback).call(receiver, null, val);
2073 if (ret === errorObj) {
2074 async.throwLater(ret.e);
2077 function errorAdapter(reason, nodeback) {
2080 var target = promise._target();
2081 var newReason = target._getCarriedStackTrace();
2082 newReason.cause = reason;
2085 var ret = tryCatch(nodeback).call(promise._boundValue(), reason);
2086 if (ret === errorObj) {
2087 async.throwLater(ret.e);
2091 Promise.prototype.asCallback =
2092 Promise.prototype.nodeify = function (nodeback, options) {
2093 if (typeof nodeback == "function") {
2094 var adapter = successAdapter;
2095 if (options !== undefined && Object(options).spread) {
2096 adapter = spreadAdapter;
2110 },{"./async.js":2,"./util.js":38}],22:[function(_dereq_,module,exports){
2112 module.exports = function(Promise, PromiseArray) {
2113 var util = _dereq_("./util.js");
2114 var async = _dereq_("./async.js");
2115 var tryCatch = util.tryCatch;
2116 var errorObj = util.errorObj;
2118 Promise.prototype.progressed = function (handler) {
2119 return this._then(undefined, undefined, handler, undefined, undefined);
2122 Promise.prototype._progress = function (progressValue) {
2123 if (this._isFollowingOrFulfilledOrRejected()) return;
2124 this._target()._progressUnchecked(progressValue);
2128 Promise.prototype._progressHandlerAt = function (index) {
2130 ? this._progressHandler0
2131 : this[(index << 2) + index - 5 + 2];
2134 Promise.prototype._doProgressWith = function (progression) {
2135 var progressValue = progression.value;
2136 var handler = progression.handler;
2137 var promise = progression.promise;
2138 var receiver = progression.receiver;
2140 var ret = tryCatch(handler).call(receiver, progressValue);
2141 if (ret === errorObj) {
2142 if (ret.e != null &&
2143 ret.e.name !== "StopProgressPropagation") {
2144 var trace = util.canAttachTrace(ret.e)
2145 ? ret.e : new Error(util.toString(ret.e));
2146 promise._attachExtraTrace(trace);
2147 promise._progress(ret.e);
2149 } else if (ret instanceof Promise) {
2150 ret._then(promise._progress, null, null, promise, undefined);
2152 promise._progress(ret);
2157 Promise.prototype._progressUnchecked = function (progressValue) {
2158 var len = this._length();
2159 var progress = this._progress;
2160 for (var i = 0; i < len; i++) {
2161 var handler = this._progressHandlerAt(i);
2162 var promise = this._promiseAt(i);
2163 if (!(promise instanceof Promise)) {
2164 var receiver = this._receiverAt(i);
2165 if (typeof handler === "function") {
2166 handler.call(receiver, progressValue, promise);
2167 } else if (receiver instanceof PromiseArray &&
2168 !receiver._isResolved()) {
2169 receiver._promiseProgressed(progressValue, promise);
2174 if (typeof handler === "function") {
2175 async.invoke(this._doProgressWith, this, {
2178 receiver: this._receiverAt(i),
2179 value: progressValue
2182 async.invoke(progress, promise, progressValue);
2188 },{"./async.js":2,"./util.js":38}],23:[function(_dereq_,module,exports){
2190 module.exports = function() {
2191 var makeSelfResolutionError = function () {
2192 return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/LhFpo0\u000a");
2194 var reflect = function() {
2195 return new Promise.PromiseInspection(this._target());
2197 var apiRejection = function(msg) {
2198 return Promise.reject(new TypeError(msg));
2201 var util = _dereq_("./util.js");
2205 getDomain = function() {
2206 var ret = process.domain;
2207 if (ret === undefined) ret = null;
2211 getDomain = function() {
2215 util.notEnumerableProp(Promise, "_getDomain", getDomain);
2217 var UNDEFINED_BINDING = {};
2218 var async = _dereq_("./async.js");
2219 var errors = _dereq_("./errors.js");
2220 var TypeError = Promise.TypeError = errors.TypeError;
2221 Promise.RangeError = errors.RangeError;
2222 Promise.CancellationError = errors.CancellationError;
2223 Promise.TimeoutError = errors.TimeoutError;
2224 Promise.OperationalError = errors.OperationalError;
2225 Promise.RejectionError = errors.OperationalError;
2226 Promise.AggregateError = errors.AggregateError;
2227 var INTERNAL = function(){};
2229 var NEXT_FILTER = {e: null};
2230 var tryConvertToPromise = _dereq_("./thenables.js")(Promise, INTERNAL);
2232 _dereq_("./promise_array.js")(Promise, INTERNAL,
2233 tryConvertToPromise, apiRejection);
2234 var CapturedTrace = _dereq_("./captured_trace.js")();
2235 var isDebugging = _dereq_("./debuggability.js")(Promise, CapturedTrace);
2236 /*jshint unused:false*/
2238 _dereq_("./context.js")(Promise, CapturedTrace, isDebugging);
2239 var CatchFilter = _dereq_("./catch_filter.js")(NEXT_FILTER);
2240 var PromiseResolver = _dereq_("./promise_resolver.js");
2241 var nodebackForPromise = PromiseResolver._nodebackForPromise;
2242 var errorObj = util.errorObj;
2243 var tryCatch = util.tryCatch;
2244 function Promise(resolver) {
2245 if (typeof resolver !== "function") {
2246 throw new TypeError("the promise constructor requires a resolver function\u000a\u000a See http://goo.gl/EC22Yn\u000a");
2248 if (this.constructor !== Promise) {
2249 throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/KsIlge\u000a");
2252 this._fulfillmentHandler0 = undefined;
2253 this._rejectionHandler0 = undefined;
2254 this._progressHandler0 = undefined;
2255 this._promise0 = undefined;
2256 this._receiver0 = undefined;
2257 this._settledValue = undefined;
2258 if (resolver !== INTERNAL) this._resolveFromResolver(resolver);
2261 Promise.prototype.toString = function () {
2262 return "[object Promise]";
2265 Promise.prototype.caught = Promise.prototype["catch"] = function (fn) {
2266 var len = arguments.length;
2268 var catchInstances = new Array(len - 1),
2270 for (i = 0; i < len - 1; ++i) {
2271 var item = arguments[i];
2272 if (typeof item === "function") {
2273 catchInstances[j++] = item;
2275 return Promise.reject(
2276 new TypeError("Catch filter must inherit from Error or be a simple predicate function\u000a\u000a See http://goo.gl/o84o68\u000a"));
2279 catchInstances.length = j;
2281 var catchFilter = new CatchFilter(catchInstances, fn, this);
2282 return this._then(undefined, catchFilter.doFilter, undefined,
2283 catchFilter, undefined);
2285 return this._then(undefined, fn, undefined, undefined, undefined);
2288 Promise.prototype.reflect = function () {
2289 return this._then(reflect, reflect, undefined, this, undefined);
2292 Promise.prototype.then = function (didFulfill, didReject, didProgress) {
2293 if (isDebugging() && arguments.length > 0 &&
2294 typeof didFulfill !== "function" &&
2295 typeof didReject !== "function") {
2296 var msg = ".then() only accepts functions but was passed: " +
2297 util.classString(didFulfill);
2298 if (arguments.length > 1) {
2299 msg += ", " + util.classString(didReject);
2303 return this._then(didFulfill, didReject, didProgress,
2304 undefined, undefined);
2307 Promise.prototype.done = function (didFulfill, didReject, didProgress) {
2308 var promise = this._then(didFulfill, didReject, didProgress,
2309 undefined, undefined);
2310 promise._setIsFinal();
2313 Promise.prototype.spread = function (didFulfill, didReject) {
2314 return this.all()._then(didFulfill, didReject, undefined, APPLY, undefined);
2317 Promise.prototype.isCancellable = function () {
2318 return !this.isResolved() &&
2319 this._cancellable();
2322 Promise.prototype.toJSON = function () {
2326 fulfillmentValue: undefined,
2327 rejectionReason: undefined
2329 if (this.isFulfilled()) {
2330 ret.fulfillmentValue = this.value();
2331 ret.isFulfilled = true;
2332 } else if (this.isRejected()) {
2333 ret.rejectionReason = this.reason();
2334 ret.isRejected = true;
2339 Promise.prototype.all = function () {
2340 return new PromiseArray(this).promise();
2343 Promise.prototype.error = function (fn) {
2344 return this.caught(util.originatesFromRejection, fn);
2347 Promise.is = function (val) {
2348 return val instanceof Promise;
2351 Promise.fromNode = function(fn) {
2352 var ret = new Promise(INTERNAL);
2353 var result = tryCatch(fn)(nodebackForPromise(ret));
2354 if (result === errorObj) {
2355 ret._rejectCallback(result.e, true, true);
2360 Promise.all = function (promises) {
2361 return new PromiseArray(promises).promise();
2364 Promise.defer = Promise.pending = function () {
2365 var promise = new Promise(INTERNAL);
2366 return new PromiseResolver(promise);
2369 Promise.cast = function (obj) {
2370 var ret = tryConvertToPromise(obj);
2371 if (!(ret instanceof Promise)) {
2373 ret = new Promise(INTERNAL);
2374 ret._fulfillUnchecked(val);
2379 Promise.resolve = Promise.fulfilled = Promise.cast;
2381 Promise.reject = Promise.rejected = function (reason) {
2382 var ret = new Promise(INTERNAL);
2383 ret._captureStackTrace();
2384 ret._rejectCallback(reason, true);
2388 Promise.setScheduler = function(fn) {
2389 if (typeof fn !== "function") throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");
2390 var prev = async._schedule;
2391 async._schedule = fn;
2395 Promise.prototype._then = function (
2402 var haveInternalData = internalData !== undefined;
2403 var ret = haveInternalData ? internalData : new Promise(INTERNAL);
2405 if (!haveInternalData) {
2406 ret._propagateFrom(this, 4 | 1);
2407 ret._captureStackTrace();
2410 var target = this._target();
2411 if (target !== this) {
2412 if (receiver === undefined) receiver = this._boundTo;
2413 if (!haveInternalData) ret._setIsMigrated();
2416 var callbackIndex = target._addCallbacks(didFulfill,
2423 if (target._isResolved() && !target._isSettlePromisesQueued()) {
2425 target._settlePromiseAtPostResolution, target, callbackIndex);
2431 Promise.prototype._settlePromiseAtPostResolution = function (index) {
2432 if (this._isRejectionUnhandled()) this._unsetRejectionIsUnhandled();
2433 this._settlePromiseAt(index);
2436 Promise.prototype._length = function () {
2437 return this._bitField & 131071;
2440 Promise.prototype._isFollowingOrFulfilledOrRejected = function () {
2441 return (this._bitField & 939524096) > 0;
2444 Promise.prototype._isFollowing = function () {
2445 return (this._bitField & 536870912) === 536870912;
2448 Promise.prototype._setLength = function (len) {
2449 this._bitField = (this._bitField & -131072) |
2453 Promise.prototype._setFulfilled = function () {
2454 this._bitField = this._bitField | 268435456;
2457 Promise.prototype._setRejected = function () {
2458 this._bitField = this._bitField | 134217728;
2461 Promise.prototype._setFollowing = function () {
2462 this._bitField = this._bitField | 536870912;
2465 Promise.prototype._setIsFinal = function () {
2466 this._bitField = this._bitField | 33554432;
2469 Promise.prototype._isFinal = function () {
2470 return (this._bitField & 33554432) > 0;
2473 Promise.prototype._cancellable = function () {
2474 return (this._bitField & 67108864) > 0;
2477 Promise.prototype._setCancellable = function () {
2478 this._bitField = this._bitField | 67108864;
2481 Promise.prototype._unsetCancellable = function () {
2482 this._bitField = this._bitField & (~67108864);
2485 Promise.prototype._setIsMigrated = function () {
2486 this._bitField = this._bitField | 4194304;
2489 Promise.prototype._unsetIsMigrated = function () {
2490 this._bitField = this._bitField & (~4194304);
2493 Promise.prototype._isMigrated = function () {
2494 return (this._bitField & 4194304) > 0;
2497 Promise.prototype._receiverAt = function (index) {
2498 var ret = index === 0
2502 if (ret === UNDEFINED_BINDING) {
2504 } else if (ret === undefined && this._isBound()) {
2505 return this._boundValue();
2510 Promise.prototype._promiseAt = function (index) {
2513 : this[index * 5 - 5 + 3];
2516 Promise.prototype._fulfillmentHandlerAt = function (index) {
2518 ? this._fulfillmentHandler0
2519 : this[index * 5 - 5 + 0];
2522 Promise.prototype._rejectionHandlerAt = function (index) {
2524 ? this._rejectionHandler0
2525 : this[index * 5 - 5 + 1];
2528 Promise.prototype._boundValue = function() {
2529 var ret = this._boundTo;
2530 if (ret !== undefined) {
2531 if (ret instanceof Promise) {
2532 if (ret.isFulfilled()) {
2542 Promise.prototype._migrateCallbacks = function (follower, index) {
2543 var fulfill = follower._fulfillmentHandlerAt(index);
2544 var reject = follower._rejectionHandlerAt(index);
2545 var progress = follower._progressHandlerAt(index);
2546 var promise = follower._promiseAt(index);
2547 var receiver = follower._receiverAt(index);
2548 if (promise instanceof Promise) promise._setIsMigrated();
2549 if (receiver === undefined) receiver = UNDEFINED_BINDING;
2550 this._addCallbacks(fulfill, reject, progress, promise, receiver, null);
2553 Promise.prototype._addCallbacks = function (
2561 var index = this._length();
2563 if (index >= 131071 - 5) {
2569 this._promise0 = promise;
2570 if (receiver !== undefined) this._receiver0 = receiver;
2571 if (typeof fulfill === "function" && !this._isCarryingStackTrace()) {
2572 this._fulfillmentHandler0 =
2573 domain === null ? fulfill : domain.bind(fulfill);
2575 if (typeof reject === "function") {
2576 this._rejectionHandler0 =
2577 domain === null ? reject : domain.bind(reject);
2579 if (typeof progress === "function") {
2580 this._progressHandler0 =
2581 domain === null ? progress : domain.bind(progress);
2584 var base = index * 5 - 5;
2585 this[base + 3] = promise;
2586 this[base + 4] = receiver;
2587 if (typeof fulfill === "function") {
2589 domain === null ? fulfill : domain.bind(fulfill);
2591 if (typeof reject === "function") {
2593 domain === null ? reject : domain.bind(reject);
2595 if (typeof progress === "function") {
2597 domain === null ? progress : domain.bind(progress);
2600 this._setLength(index + 1);
2604 Promise.prototype._setProxyHandlers = function (receiver, promiseSlotValue) {
2605 var index = this._length();
2607 if (index >= 131071 - 5) {
2612 this._promise0 = promiseSlotValue;
2613 this._receiver0 = receiver;
2615 var base = index * 5 - 5;
2616 this[base + 3] = promiseSlotValue;
2617 this[base + 4] = receiver;
2619 this._setLength(index + 1);
2622 Promise.prototype._proxyPromiseArray = function (promiseArray, index) {
2623 this._setProxyHandlers(promiseArray, index);
2626 Promise.prototype._resolveCallback = function(value, shouldBind) {
2627 if (this._isFollowingOrFulfilledOrRejected()) return;
2629 return this._rejectCallback(makeSelfResolutionError(), false, true);
2630 var maybePromise = tryConvertToPromise(value, this);
2631 if (!(maybePromise instanceof Promise)) return this._fulfill(value);
2633 var propagationFlags = 1 | (shouldBind ? 4 : 0);
2634 this._propagateFrom(maybePromise, propagationFlags);
2635 var promise = maybePromise._target();
2636 if (promise._isPending()) {
2637 var len = this._length();
2638 for (var i = 0; i < len; ++i) {
2639 promise._migrateCallbacks(this, i);
2641 this._setFollowing();
2643 this._setFollowee(promise);
2644 } else if (promise._isFulfilled()) {
2645 this._fulfillUnchecked(promise._value());
2647 this._rejectUnchecked(promise._reason(),
2648 promise._getCarriedStackTrace());
2652 Promise.prototype._rejectCallback =
2653 function(reason, synchronous, shouldNotMarkOriginatingFromRejection) {
2654 if (!shouldNotMarkOriginatingFromRejection) {
2655 util.markAsOriginatingFromRejection(reason);
2657 var trace = util.ensureErrorObject(reason);
2658 var hasStack = trace === reason;
2659 this._attachExtraTrace(trace, synchronous ? hasStack : false);
2660 this._reject(reason, hasStack ? undefined : trace);
2663 Promise.prototype._resolveFromResolver = function (resolver) {
2665 this._captureStackTrace();
2666 this._pushContext();
2667 var synchronous = true;
2668 var r = tryCatch(resolver)(function(value) {
2669 if (promise === null) return;
2670 promise._resolveCallback(value);
2672 }, function (reason) {
2673 if (promise === null) return;
2674 promise._rejectCallback(reason, synchronous);
2677 synchronous = false;
2680 if (r !== undefined && r === errorObj && promise !== null) {
2681 promise._rejectCallback(r.e, true, true);
2686 Promise.prototype._settlePromiseFromHandler = function (
2687 handler, receiver, value, promise
2689 if (promise._isRejected()) return;
2690 promise._pushContext();
2692 if (receiver === APPLY && !this._isRejected()) {
2693 x = tryCatch(handler).apply(this._boundValue(), value);
2695 x = tryCatch(handler).call(receiver, value);
2697 promise._popContext();
2699 if (x === errorObj || x === promise || x === NEXT_FILTER) {
2700 var err = x === promise ? makeSelfResolutionError() : x.e;
2701 promise._rejectCallback(err, false, true);
2703 promise._resolveCallback(x);
2707 Promise.prototype._target = function() {
2709 while (ret._isFollowing()) ret = ret._followee();
2713 Promise.prototype._followee = function() {
2714 return this._rejectionHandler0;
2717 Promise.prototype._setFollowee = function(promise) {
2718 this._rejectionHandler0 = promise;
2721 Promise.prototype._cleanValues = function () {
2722 if (this._cancellable()) {
2723 this._cancellationParent = undefined;
2727 Promise.prototype._propagateFrom = function (parent, flags) {
2728 if ((flags & 1) > 0 && parent._cancellable()) {
2729 this._setCancellable();
2730 this._cancellationParent = parent;
2732 if ((flags & 4) > 0 && parent._isBound()) {
2733 this._setBoundTo(parent._boundTo);
2737 Promise.prototype._fulfill = function (value) {
2738 if (this._isFollowingOrFulfilledOrRejected()) return;
2739 this._fulfillUnchecked(value);
2742 Promise.prototype._reject = function (reason, carriedStackTrace) {
2743 if (this._isFollowingOrFulfilledOrRejected()) return;
2744 this._rejectUnchecked(reason, carriedStackTrace);
2747 Promise.prototype._settlePromiseAt = function (index) {
2748 var promise = this._promiseAt(index);
2749 var isPromise = promise instanceof Promise;
2751 if (isPromise && promise._isMigrated()) {
2752 promise._unsetIsMigrated();
2753 return async.invoke(this._settlePromiseAt, this, index);
2755 var handler = this._isFulfilled()
2756 ? this._fulfillmentHandlerAt(index)
2757 : this._rejectionHandlerAt(index);
2759 var carriedStackTrace =
2760 this._isCarryingStackTrace() ? this._getCarriedStackTrace() : undefined;
2761 var value = this._settledValue;
2762 var receiver = this._receiverAt(index);
2763 this._clearCallbackDataAtIndex(index);
2765 if (typeof handler === "function") {
2767 handler.call(receiver, value, promise);
2769 this._settlePromiseFromHandler(handler, receiver, value, promise);
2771 } else if (receiver instanceof PromiseArray) {
2772 if (!receiver._isResolved()) {
2773 if (this._isFulfilled()) {
2774 receiver._promiseFulfilled(value, promise);
2777 receiver._promiseRejected(value, promise);
2780 } else if (isPromise) {
2781 if (this._isFulfilled()) {
2782 promise._fulfill(value);
2784 promise._reject(value, carriedStackTrace);
2788 if (index >= 4 && (index & 31) === 4)
2789 async.invokeLater(this._setLength, this, 0);
2792 Promise.prototype._clearCallbackDataAtIndex = function(index) {
2794 if (!this._isCarryingStackTrace()) {
2795 this._fulfillmentHandler0 = undefined;
2797 this._rejectionHandler0 =
2798 this._progressHandler0 =
2800 this._promise0 = undefined;
2802 var base = index * 5 - 5;
2807 this[base + 2] = undefined;
2811 Promise.prototype._isSettlePromisesQueued = function () {
2812 return (this._bitField &
2813 -1073741824) === -1073741824;
2816 Promise.prototype._setSettlePromisesQueued = function () {
2817 this._bitField = this._bitField | -1073741824;
2820 Promise.prototype._unsetSettlePromisesQueued = function () {
2821 this._bitField = this._bitField & (~-1073741824);
2824 Promise.prototype._queueSettlePromises = function() {
2825 async.settlePromises(this);
2826 this._setSettlePromisesQueued();
2829 Promise.prototype._fulfillUnchecked = function (value) {
2830 if (value === this) {
2831 var err = makeSelfResolutionError();
2832 this._attachExtraTrace(err);
2833 return this._rejectUnchecked(err, undefined);
2835 this._setFulfilled();
2836 this._settledValue = value;
2837 this._cleanValues();
2839 if (this._length() > 0) {
2840 this._queueSettlePromises();
2844 Promise.prototype._rejectUncheckedCheckError = function (reason) {
2845 var trace = util.ensureErrorObject(reason);
2846 this._rejectUnchecked(reason, trace === reason ? undefined : trace);
2849 Promise.prototype._rejectUnchecked = function (reason, trace) {
2850 if (reason === this) {
2851 var err = makeSelfResolutionError();
2852 this._attachExtraTrace(err);
2853 return this._rejectUnchecked(err);
2855 this._setRejected();
2856 this._settledValue = reason;
2857 this._cleanValues();
2859 if (this._isFinal()) {
2860 async.throwLater(function(e) {
2863 CapturedTrace.unhandledRejection, undefined, e);
2866 }, trace === undefined ? reason : trace);
2870 if (trace !== undefined && trace !== reason) {
2871 this._setCarriedStackTrace(trace);
2874 if (this._length() > 0) {
2875 this._queueSettlePromises();
2877 this._ensurePossibleRejectionHandled();
2881 Promise.prototype._settlePromises = function () {
2882 this._unsetSettlePromisesQueued();
2883 var len = this._length();
2884 for (var i = 0; i < len; i++) {
2885 this._settlePromiseAt(i);
2889 util.notEnumerableProp(Promise,
2890 "_makeSelfResolutionError",
2891 makeSelfResolutionError);
2893 _dereq_("./progress.js")(Promise, PromiseArray);
2894 _dereq_("./method.js")(Promise, INTERNAL, tryConvertToPromise, apiRejection);
2895 _dereq_("./bind.js")(Promise, INTERNAL, tryConvertToPromise);
2896 _dereq_("./finally.js")(Promise, NEXT_FILTER, tryConvertToPromise);
2897 _dereq_("./direct_resolve.js")(Promise);
2898 _dereq_("./synchronous_inspection.js")(Promise);
2899 _dereq_("./join.js")(Promise, PromiseArray, tryConvertToPromise, INTERNAL);
2900 Promise.Promise = Promise;
2901 _dereq_('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);
2902 _dereq_('./cancel.js')(Promise);
2903 _dereq_('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext);
2904 _dereq_('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise);
2905 _dereq_('./nodeify.js')(Promise);
2906 _dereq_('./call_get.js')(Promise);
2907 _dereq_('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection);
2908 _dereq_('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection);
2909 _dereq_('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL);
2910 _dereq_('./settle.js')(Promise, PromiseArray);
2911 _dereq_('./some.js')(Promise, PromiseArray, apiRejection);
2912 _dereq_('./promisify.js')(Promise, INTERNAL);
2913 _dereq_('./any.js')(Promise);
2914 _dereq_('./each.js')(Promise, INTERNAL);
2915 _dereq_('./timers.js')(Promise, INTERNAL);
2916 _dereq_('./filter.js')(Promise, INTERNAL);
2918 util.toFastProperties(Promise);
2919 util.toFastProperties(Promise.prototype);
2920 function fillTypes(value) {
2921 var p = new Promise(INTERNAL);
2922 p._fulfillmentHandler0 = value;
2923 p._rejectionHandler0 = value;
2924 p._progressHandler0 = value;
2925 p._promise0 = value;
2926 p._receiver0 = value;
2927 p._settledValue = value;
2929 // Complete slack tracking, opt out of field-type tracking and
2935 fillTypes(function(){});
2936 fillTypes(undefined);
2938 fillTypes(new Promise(INTERNAL));
2939 CapturedTrace.setBounds(async.firstLineError, util.lastLineError);
2944 },{"./any.js":1,"./async.js":2,"./bind.js":3,"./call_get.js":5,"./cancel.js":6,"./captured_trace.js":7,"./catch_filter.js":8,"./context.js":9,"./debuggability.js":10,"./direct_resolve.js":11,"./each.js":12,"./errors.js":13,"./filter.js":15,"./finally.js":16,"./generators.js":17,"./join.js":18,"./map.js":19,"./method.js":20,"./nodeify.js":21,"./progress.js":22,"./promise_array.js":24,"./promise_resolver.js":25,"./promisify.js":26,"./props.js":27,"./race.js":29,"./reduce.js":30,"./settle.js":32,"./some.js":33,"./synchronous_inspection.js":34,"./thenables.js":35,"./timers.js":36,"./using.js":37,"./util.js":38}],24:[function(_dereq_,module,exports){
2946 module.exports = function(Promise, INTERNAL, tryConvertToPromise,
2948 var util = _dereq_("./util.js");
2949 var isArray = util.isArray;
2951 function toResolutionValue(val) {
2958 function PromiseArray(values) {
2959 var promise = this._promise = new Promise(INTERNAL);
2961 if (values instanceof Promise) {
2963 promise._propagateFrom(parent, 1 | 4);
2965 this._values = values;
2967 this._totalResolved = 0;
2968 this._init(undefined, -2);
2970 PromiseArray.prototype.length = function () {
2971 return this._length;
2974 PromiseArray.prototype.promise = function () {
2975 return this._promise;
2978 PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) {
2979 var values = tryConvertToPromise(this._values, this._promise);
2980 if (values instanceof Promise) {
2981 values = values._target();
2982 this._values = values;
2983 if (values._isFulfilled()) {
2984 values = values._value();
2985 if (!isArray(values)) {
2986 var err = new Promise.TypeError("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a");
2987 this.__hardReject__(err);
2990 } else if (values._isPending()) {
3000 this._reject(values._reason());
3003 } else if (!isArray(values)) {
3004 this._promise._reject(apiRejection("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a")._reason());
3008 if (values.length === 0) {
3009 if (resolveValueIfEmpty === -5) {
3010 this._resolveEmptyArray();
3013 this._resolve(toResolutionValue(resolveValueIfEmpty));
3017 var len = this.getActualLength(values.length);
3019 this._values = this.shouldCopyValues() ? new Array(len) : this._values;
3020 var promise = this._promise;
3021 for (var i = 0; i < len; ++i) {
3022 var isResolved = this._isResolved();
3023 var maybePromise = tryConvertToPromise(values[i], promise);
3024 if (maybePromise instanceof Promise) {
3025 maybePromise = maybePromise._target();
3027 maybePromise._ignoreRejections();
3028 } else if (maybePromise._isPending()) {
3029 maybePromise._proxyPromiseArray(this, i);
3030 } else if (maybePromise._isFulfilled()) {
3031 this._promiseFulfilled(maybePromise._value(), i);
3033 this._promiseRejected(maybePromise._reason(), i);
3035 } else if (!isResolved) {
3036 this._promiseFulfilled(maybePromise, i);
3041 PromiseArray.prototype._isResolved = function () {
3042 return this._values === null;
3045 PromiseArray.prototype._resolve = function (value) {
3046 this._values = null;
3047 this._promise._fulfill(value);
3050 PromiseArray.prototype.__hardReject__ =
3051 PromiseArray.prototype._reject = function (reason) {
3052 this._values = null;
3053 this._promise._rejectCallback(reason, false, true);
3056 PromiseArray.prototype._promiseProgressed = function (progressValue, index) {
3057 this._promise._progress({
3059 value: progressValue
3064 PromiseArray.prototype._promiseFulfilled = function (value, index) {
3065 this._values[index] = value;
3066 var totalResolved = ++this._totalResolved;
3067 if (totalResolved >= this._length) {
3068 this._resolve(this._values);
3072 PromiseArray.prototype._promiseRejected = function (reason, index) {
3073 this._totalResolved++;
3074 this._reject(reason);
3077 PromiseArray.prototype.shouldCopyValues = function () {
3081 PromiseArray.prototype.getActualLength = function (len) {
3085 return PromiseArray;
3088 },{"./util.js":38}],25:[function(_dereq_,module,exports){
3090 var util = _dereq_("./util.js");
3091 var maybeWrapAsError = util.maybeWrapAsError;
3092 var errors = _dereq_("./errors.js");
3093 var TimeoutError = errors.TimeoutError;
3094 var OperationalError = errors.OperationalError;
3095 var haveGetters = util.haveGetters;
3096 var es5 = _dereq_("./es5.js");
3098 function isUntypedError(obj) {
3099 return obj instanceof Error &&
3100 es5.getPrototypeOf(obj) === Error.prototype;
3103 var rErrorKey = /^(?:name|message|stack|cause)$/;
3104 function wrapAsOperationalError(obj) {
3106 if (isUntypedError(obj)) {
3107 ret = new OperationalError(obj);
3108 ret.name = obj.name;
3109 ret.message = obj.message;
3110 ret.stack = obj.stack;
3111 var keys = es5.keys(obj);
3112 for (var i = 0; i < keys.length; ++i) {
3114 if (!rErrorKey.test(key)) {
3115 ret[key] = obj[key];
3120 util.markAsOriginatingFromRejection(obj);
3124 function nodebackForPromise(promise) {
3125 return function(err, value) {
3126 if (promise === null) return;
3129 var wrapped = wrapAsOperationalError(maybeWrapAsError(err));
3130 promise._attachExtraTrace(wrapped);
3131 promise._reject(wrapped);
3132 } else if (arguments.length > 2) {
3133 var $_len = arguments.length;var args = new Array($_len - 1); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}
3134 promise._fulfill(args);
3136 promise._fulfill(value);
3144 var PromiseResolver;
3146 PromiseResolver = function (promise) {
3147 this.promise = promise;
3148 this.asCallback = nodebackForPromise(promise);
3149 this.callback = this.asCallback;
3153 PromiseResolver = function (promise) {
3154 this.promise = promise;
3160 return nodebackForPromise(this.promise);
3163 es5.defineProperty(PromiseResolver.prototype, "asCallback", prop);
3164 es5.defineProperty(PromiseResolver.prototype, "callback", prop);
3167 PromiseResolver._nodebackForPromise = nodebackForPromise;
3169 PromiseResolver.prototype.toString = function () {
3170 return "[object PromiseResolver]";
3173 PromiseResolver.prototype.resolve =
3174 PromiseResolver.prototype.fulfill = function (value) {
3175 if (!(this instanceof PromiseResolver)) {
3176 throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\u000a\u000a See http://goo.gl/sdkXL9\u000a");
3178 this.promise._resolveCallback(value);
3181 PromiseResolver.prototype.reject = function (reason) {
3182 if (!(this instanceof PromiseResolver)) {
3183 throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\u000a\u000a See http://goo.gl/sdkXL9\u000a");
3185 this.promise._rejectCallback(reason);
3188 PromiseResolver.prototype.progress = function (value) {
3189 if (!(this instanceof PromiseResolver)) {
3190 throw new TypeError("Illegal invocation, resolver resolve/reject must be called within a resolver context. Consider using the promise constructor instead.\u000a\u000a See http://goo.gl/sdkXL9\u000a");
3192 this.promise._progress(value);
3195 PromiseResolver.prototype.cancel = function (err) {
3196 this.promise.cancel(err);
3199 PromiseResolver.prototype.timeout = function () {
3200 this.reject(new TimeoutError("timeout"));
3203 PromiseResolver.prototype.isResolved = function () {
3204 return this.promise.isResolved();
3207 PromiseResolver.prototype.toJSON = function () {
3208 return this.promise.toJSON();
3211 module.exports = PromiseResolver;
3213 },{"./errors.js":13,"./es5.js":14,"./util.js":38}],26:[function(_dereq_,module,exports){
3215 module.exports = function(Promise, INTERNAL) {
3217 var util = _dereq_("./util.js");
3218 var nodebackForPromise = _dereq_("./promise_resolver.js")
3219 ._nodebackForPromise;
3220 var withAppended = util.withAppended;
3221 var maybeWrapAsError = util.maybeWrapAsError;
3222 var canEvaluate = util.canEvaluate;
3223 var TypeError = _dereq_("./errors").TypeError;
3224 var defaultSuffix = "Async";
3225 var defaultPromisified = {__isPromisified__: true};
3235 var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$");
3237 var defaultFilter = function(name) {
3238 return util.isIdentifier(name) &&
3239 name.charAt(0) !== "_" &&
3240 name !== "constructor";
3243 function propsFilter(key) {
3244 return !noCopyPropsPattern.test(key);
3247 function isPromisified(fn) {
3249 return fn.__isPromisified__ === true;
3256 function hasPromisified(obj, key, suffix) {
3257 var val = util.getDataPropertyOrDefault(obj, key + suffix,
3258 defaultPromisified);
3259 return val ? isPromisified(val) : false;
3261 function checkValid(ret, suffix, suffixRegexp) {
3262 for (var i = 0; i < ret.length; i += 2) {
3264 if (suffixRegexp.test(key)) {
3265 var keyWithoutAsyncSuffix = key.replace(suffixRegexp, "");
3266 for (var j = 0; j < ret.length; j += 2) {
3267 if (ret[j] === keyWithoutAsyncSuffix) {
3268 throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/iWrZbw\u000a"
3269 .replace("%s", suffix));
3276 function promisifiableMethods(obj, suffix, suffixRegexp, filter) {
3277 var keys = util.inheritedDataKeys(obj);
3279 for (var i = 0; i < keys.length; ++i) {
3281 var value = obj[key];
3282 var passesDefaultFilter = filter === defaultFilter
3283 ? true : defaultFilter(key, value, obj);
3284 if (typeof value === "function" &&
3285 !isPromisified(value) &&
3286 !hasPromisified(obj, key, suffix) &&
3287 filter(key, value, obj, passesDefaultFilter)) {
3288 ret.push(key, value);
3291 checkValid(ret, suffix, suffixRegexp);
3295 var escapeIdentRegex = function(str) {
3296 return str.replace(/([$])/, "\\$");
3299 var makeNodePromisifiedEval;
3301 var switchCaseArgumentOrder = function(likelyArgumentCount) {
3302 var ret = [likelyArgumentCount];
3303 var min = Math.max(0, likelyArgumentCount - 1 - 3);
3304 for(var i = likelyArgumentCount - 1; i >= min; --i) {
3307 for(var i = likelyArgumentCount + 1; i <= 3; ++i) {
3313 var argumentSequence = function(argumentCount) {
3314 return util.filledRange(argumentCount, "_arg", "");
3317 var parameterDeclaration = function(parameterCount) {
3318 return util.filledRange(
3319 Math.max(parameterCount, 3), "_arg", "");
3322 var parameterCount = function(fn) {
3323 if (typeof fn.length === "number") {
3324 return Math.max(Math.min(fn.length, 1023 + 1), 0);
3329 makeNodePromisifiedEval =
3330 function(callback, receiver, originalName, fn) {
3331 var newParameterCount = Math.max(0, parameterCount(fn) - 1);
3332 var argumentOrder = switchCaseArgumentOrder(newParameterCount);
3333 var shouldProxyThis = typeof callback === "string" || receiver === THIS;
3335 function generateCallForArgumentCount(count) {
3336 var args = argumentSequence(count).join(", ");
3337 var comma = count > 0 ? ", " : "";
3339 if (shouldProxyThis) {
3340 ret = "ret = callback.call(this, {{args}}, nodeback); break;\n";
3342 ret = receiver === undefined
3343 ? "ret = callback({{args}}, nodeback); break;\n"
3344 : "ret = callback.call(receiver, {{args}}, nodeback); break;\n";
3346 return ret.replace("{{args}}", args).replace(", ", comma);
3349 function generateArgumentSwitchCase() {
3351 for (var i = 0; i < argumentOrder.length; ++i) {
3352 ret += "case " + argumentOrder[i] +":" +
3353 generateCallForArgumentCount(argumentOrder[i]);
3358 var args = new Array(len + 1); \n\
3360 for (var i = 0; i < len; ++i) { \n\
3361 args[i] = arguments[i]; \n\
3363 args[i] = nodeback; \n\
3366 ".replace("[CodeForCall]", (shouldProxyThis
3367 ? "ret = callback.apply(this, args);\n"
3368 : "ret = callback.apply(receiver, args);\n"));
3372 var getFunctionCode = typeof callback === "string"
3373 ? ("this != null ? this['"+callback+"'] : fn")
3376 return new Function("Promise",
3381 "nodebackForPromise",
3384 "notEnumerableProp",
3385 "INTERNAL","'use strict'; \n\
3386 var ret = function (Parameters) { \n\
3388 var len = arguments.length; \n\
3389 var promise = new Promise(INTERNAL); \n\
3390 promise._captureStackTrace(); \n\
3391 var nodeback = nodebackForPromise(promise); \n\
3393 var callback = tryCatch([GetFunctionCode]); \n\
3395 [CodeForSwitchCase] \n\
3397 if (ret === errorObj) { \n\
3398 promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\
3402 notEnumerableProp(ret, '__isPromisified__', true); \n\
3405 .replace("Parameters", parameterDeclaration(newParameterCount))
3406 .replace("[CodeForSwitchCase]", generateArgumentSwitchCase())
3407 .replace("[GetFunctionCode]", getFunctionCode))(
3416 util.notEnumerableProp,
3422 function makeNodePromisifiedClosure(callback, receiver, _, fn) {
3423 var defaultThis = (function() {return this;})();
3424 var method = callback;
3425 if (typeof method === "string") {
3428 function promisified() {
3429 var _receiver = receiver;
3430 if (receiver === THIS) _receiver = this;
3431 var promise = new Promise(INTERNAL);
3432 promise._captureStackTrace();
3433 var cb = typeof method === "string" && this !== defaultThis
3434 ? this[method] : callback;
3435 var fn = nodebackForPromise(promise);
3437 cb.apply(_receiver, withAppended(arguments, fn));
3439 promise._rejectCallback(maybeWrapAsError(e), true, true);
3443 util.notEnumerableProp(promisified, "__isPromisified__", true);
3447 var makeNodePromisified = canEvaluate
3448 ? makeNodePromisifiedEval
3449 : makeNodePromisifiedClosure;
3451 function promisifyAll(obj, suffix, filter, promisifier) {
3452 var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$");
3454 promisifiableMethods(obj, suffix, suffixRegexp, filter);
3456 for (var i = 0, len = methods.length; i < len; i+= 2) {
3457 var key = methods[i];
3458 var fn = methods[i+1];
3459 var promisifiedKey = key + suffix;
3460 if (promisifier === makeNodePromisified) {
3461 obj[promisifiedKey] =
3462 makeNodePromisified(key, THIS, key, fn, suffix);
3464 var promisified = promisifier(fn, function() {
3465 return makeNodePromisified(key, THIS, key, fn, suffix);
3467 util.notEnumerableProp(promisified, "__isPromisified__", true);
3468 obj[promisifiedKey] = promisified;
3471 util.toFastProperties(obj);
3475 function promisify(callback, receiver) {
3476 return makeNodePromisified(callback, receiver, undefined, callback);
3479 Promise.promisify = function (fn, receiver) {
3480 if (typeof fn !== "function") {
3481 throw new TypeError("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");
3483 if (isPromisified(fn)) {
3486 var ret = promisify(fn, arguments.length < 2 ? THIS : receiver);
3487 util.copyDescriptors(fn, ret, propsFilter);
3491 Promise.promisifyAll = function (target, options) {
3492 if (typeof target !== "function" && typeof target !== "object") {
3493 throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/9ITlV0\u000a");
3495 options = Object(options);
3496 var suffix = options.suffix;
3497 if (typeof suffix !== "string") suffix = defaultSuffix;
3498 var filter = options.filter;
3499 if (typeof filter !== "function") filter = defaultFilter;
3500 var promisifier = options.promisifier;
3501 if (typeof promisifier !== "function") promisifier = makeNodePromisified;
3503 if (!util.isIdentifier(suffix)) {
3504 throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/8FZo5V\u000a");
3507 var keys = util.inheritedDataKeys(target);
3508 for (var i = 0; i < keys.length; ++i) {
3509 var value = target[keys[i]];
3510 if (keys[i] !== "constructor" &&
3511 util.isClass(value)) {
3512 promisifyAll(value.prototype, suffix, filter, promisifier);
3513 promisifyAll(value, suffix, filter, promisifier);
3517 return promisifyAll(target, suffix, filter, promisifier);
3522 },{"./errors":13,"./promise_resolver.js":25,"./util.js":38}],27:[function(_dereq_,module,exports){
3524 module.exports = function(
3525 Promise, PromiseArray, tryConvertToPromise, apiRejection) {
3526 var util = _dereq_("./util.js");
3527 var isObject = util.isObject;
3528 var es5 = _dereq_("./es5.js");
3530 function PropertiesPromiseArray(obj) {
3531 var keys = es5.keys(obj);
3532 var len = keys.length;
3533 var values = new Array(len * 2);
3534 for (var i = 0; i < len; ++i) {
3536 values[i] = obj[key];
3537 values[i + len] = key;
3539 this.constructor$(values);
3541 util.inherits(PropertiesPromiseArray, PromiseArray);
3543 PropertiesPromiseArray.prototype._init = function () {
3544 this._init$(undefined, -3) ;
3547 PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) {
3548 this._values[index] = value;
3549 var totalResolved = ++this._totalResolved;
3550 if (totalResolved >= this._length) {
3552 var keyOffset = this.length();
3553 for (var i = 0, len = this.length(); i < len; ++i) {
3554 val[this._values[i + keyOffset]] = this._values[i];
3560 PropertiesPromiseArray.prototype._promiseProgressed = function (value, index) {
3561 this._promise._progress({
3562 key: this._values[index + this.length()],
3567 PropertiesPromiseArray.prototype.shouldCopyValues = function () {
3571 PropertiesPromiseArray.prototype.getActualLength = function (len) {
3575 function props(promises) {
3577 var castValue = tryConvertToPromise(promises);
3579 if (!isObject(castValue)) {
3580 return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/OsFKC8\u000a");
3581 } else if (castValue instanceof Promise) {
3582 ret = castValue._then(
3583 Promise.props, undefined, undefined, undefined, undefined);
3585 ret = new PropertiesPromiseArray(castValue).promise();
3588 if (castValue instanceof Promise) {
3589 ret._propagateFrom(castValue, 4);
3594 Promise.prototype.props = function () {
3598 Promise.props = function (promises) {
3599 return props(promises);
3603 },{"./es5.js":14,"./util.js":38}],28:[function(_dereq_,module,exports){
3605 function arrayMove(src, srcIndex, dst, dstIndex, len) {
3606 for (var j = 0; j < len; ++j) {
3607 dst[j + dstIndex] = src[j + srcIndex];
3608 src[j + srcIndex] = void 0;
3612 function Queue(capacity) {
3613 this._capacity = capacity;
3618 Queue.prototype._willBeOverCapacity = function (size) {
3619 return this._capacity < size;
3622 Queue.prototype._pushOne = function (arg) {
3623 var length = this.length();
3624 this._checkCapacity(length + 1);
3625 var i = (this._front + length) & (this._capacity - 1);
3627 this._length = length + 1;
3630 Queue.prototype._unshiftOne = function(value) {
3631 var capacity = this._capacity;
3632 this._checkCapacity(this.length() + 1);
3633 var front = this._front;
3634 var i = (((( front - 1 ) &
3635 ( capacity - 1) ) ^ capacity ) - capacity );
3638 this._length = this.length() + 1;
3641 Queue.prototype.unshift = function(fn, receiver, arg) {
3642 this._unshiftOne(arg);
3643 this._unshiftOne(receiver);
3644 this._unshiftOne(fn);
3647 Queue.prototype.push = function (fn, receiver, arg) {
3648 var length = this.length() + 3;
3649 if (this._willBeOverCapacity(length)) {
3651 this._pushOne(receiver);
3655 var j = this._front + length - 3;
3656 this._checkCapacity(length);
3657 var wrapMask = this._capacity - 1;
3658 this[(j + 0) & wrapMask] = fn;
3659 this[(j + 1) & wrapMask] = receiver;
3660 this[(j + 2) & wrapMask] = arg;
3661 this._length = length;
3664 Queue.prototype.shift = function () {
3665 var front = this._front,
3668 this[front] = undefined;
3669 this._front = (front + 1) & (this._capacity - 1);
3674 Queue.prototype.length = function () {
3675 return this._length;
3678 Queue.prototype._checkCapacity = function (size) {
3679 if (this._capacity < size) {
3680 this._resizeTo(this._capacity << 1);
3684 Queue.prototype._resizeTo = function (capacity) {
3685 var oldCapacity = this._capacity;
3686 this._capacity = capacity;
3687 var front = this._front;
3688 var length = this._length;
3689 var moveItemsCount = (front + length) & (oldCapacity - 1);
3690 arrayMove(this, 0, this, oldCapacity, moveItemsCount);
3693 module.exports = Queue;
3695 },{}],29:[function(_dereq_,module,exports){
3697 module.exports = function(
3698 Promise, INTERNAL, tryConvertToPromise, apiRejection) {
3699 var isArray = _dereq_("./util.js").isArray;
3701 var raceLater = function (promise) {
3702 return promise.then(function(array) {
3703 return race(array, promise);
3707 function race(promises, parent) {
3708 var maybePromise = tryConvertToPromise(promises);
3710 if (maybePromise instanceof Promise) {
3711 return raceLater(maybePromise);
3712 } else if (!isArray(promises)) {
3713 return apiRejection("expecting an array, a promise or a thenable\u000a\u000a See http://goo.gl/s8MMhc\u000a");
3716 var ret = new Promise(INTERNAL);
3717 if (parent !== undefined) {
3718 ret._propagateFrom(parent, 4 | 1);
3720 var fulfill = ret._fulfill;
3721 var reject = ret._reject;
3722 for (var i = 0, len = promises.length; i < len; ++i) {
3723 var val = promises[i];
3725 if (val === undefined && !(i in promises)) {
3729 Promise.cast(val)._then(fulfill, reject, undefined, ret, null);
3734 Promise.race = function (promises) {
3735 return race(promises, undefined);
3738 Promise.prototype.race = function () {
3739 return race(this, undefined);
3744 },{"./util.js":38}],30:[function(_dereq_,module,exports){
3746 module.exports = function(Promise,
3749 tryConvertToPromise,
3751 var getDomain = Promise._getDomain;
3752 var async = _dereq_("./async.js");
3753 var util = _dereq_("./util.js");
3754 var tryCatch = util.tryCatch;
3755 var errorObj = util.errorObj;
3756 function ReductionPromiseArray(promises, fn, accum, _each) {
3757 this.constructor$(promises);
3758 this._promise._captureStackTrace();
3759 this._preservedValues = _each === INTERNAL ? [] : null;
3760 this._zerothIsAccum = (accum === undefined);
3761 this._gotAccum = false;
3762 this._reducingIndex = (this._zerothIsAccum ? 1 : 0);
3763 this._valuesPhase = undefined;
3764 var maybePromise = tryConvertToPromise(accum, this._promise);
3765 var rejected = false;
3766 var isPromise = maybePromise instanceof Promise;
3768 maybePromise = maybePromise._target();
3769 if (maybePromise._isPending()) {
3770 maybePromise._proxyPromiseArray(this, -1);
3771 } else if (maybePromise._isFulfilled()) {
3772 accum = maybePromise._value();
3773 this._gotAccum = true;
3775 this._reject(maybePromise._reason());
3779 if (!(isPromise || this._zerothIsAccum)) this._gotAccum = true;
3780 var domain = getDomain();
3781 this._callback = domain === null ? fn : domain.bind(fn);
3782 this._accum = accum;
3783 if (!rejected) async.invoke(init, this, undefined);
3786 this._init$(undefined, -5);
3788 util.inherits(ReductionPromiseArray, PromiseArray);
3790 ReductionPromiseArray.prototype._init = function () {};
3792 ReductionPromiseArray.prototype._resolveEmptyArray = function () {
3793 if (this._gotAccum || this._zerothIsAccum) {
3794 this._resolve(this._preservedValues !== null
3795 ? [] : this._accum);
3799 ReductionPromiseArray.prototype._promiseFulfilled = function (value, index) {
3800 var values = this._values;
3801 values[index] = value;
3802 var length = this.length();
3803 var preservedValues = this._preservedValues;
3804 var isEach = preservedValues !== null;
3805 var gotAccum = this._gotAccum;
3806 var valuesPhase = this._valuesPhase;
3807 var valuesPhaseIndex;
3809 valuesPhase = this._valuesPhase = new Array(length);
3810 for (valuesPhaseIndex=0; valuesPhaseIndex<length; ++valuesPhaseIndex) {
3811 valuesPhase[valuesPhaseIndex] = 0;
3814 valuesPhaseIndex = valuesPhase[index];
3816 if (index === 0 && this._zerothIsAccum) {
3817 this._accum = value;
3818 this._gotAccum = gotAccum = true;
3819 valuesPhase[index] = ((valuesPhaseIndex === 0)
3821 } else if (index === -1) {
3822 this._accum = value;
3823 this._gotAccum = gotAccum = true;
3825 if (valuesPhaseIndex === 0) {
3826 valuesPhase[index] = 1;
3828 valuesPhase[index] = 2;
3829 this._accum = value;
3832 if (!gotAccum) return;
3834 var callback = this._callback;
3835 var receiver = this._promise._boundValue();
3838 for (var i = this._reducingIndex; i < length; ++i) {
3839 valuesPhaseIndex = valuesPhase[i];
3840 if (valuesPhaseIndex === 2) {
3841 this._reducingIndex = i + 1;
3844 if (valuesPhaseIndex !== 1) return;
3846 this._promise._pushContext();
3848 preservedValues.push(value);
3849 ret = tryCatch(callback).call(receiver, value, i, length);
3852 ret = tryCatch(callback)
3853 .call(receiver, this._accum, value, i, length);
3855 this._promise._popContext();
3857 if (ret === errorObj) return this._reject(ret.e);
3859 var maybePromise = tryConvertToPromise(ret, this._promise);
3860 if (maybePromise instanceof Promise) {
3861 maybePromise = maybePromise._target();
3862 if (maybePromise._isPending()) {
3864 return maybePromise._proxyPromiseArray(this, i);
3865 } else if (maybePromise._isFulfilled()) {
3866 ret = maybePromise._value();
3868 return this._reject(maybePromise._reason());
3872 this._reducingIndex = i + 1;
3876 this._resolve(isEach ? preservedValues : this._accum);
3879 function reduce(promises, fn, initialValue, _each) {
3880 if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");
3881 var array = new ReductionPromiseArray(promises, fn, initialValue, _each);
3882 return array.promise();
3885 Promise.prototype.reduce = function (fn, initialValue) {
3886 return reduce(this, fn, initialValue, null);
3889 Promise.reduce = function (promises, fn, initialValue, _each) {
3890 return reduce(promises, fn, initialValue, _each);
3894 },{"./async.js":2,"./util.js":38}],31:[function(_dereq_,module,exports){
3897 var util = _dereq_("./util");
3898 var noAsyncScheduler = function() {
3899 throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/m3OTXk\u000a");
3901 if (util.isNode && typeof MutationObserver === "undefined") {
3902 var GlobalSetImmediate = global.setImmediate;
3903 var ProcessNextTick = process.nextTick;
3904 schedule = util.isRecentNode
3905 ? function(fn) { GlobalSetImmediate.call(global, fn); }
3906 : function(fn) { ProcessNextTick.call(process, fn); };
3907 } else if ((typeof MutationObserver !== "undefined") &&
3908 !(typeof window !== "undefined" &&
3910 window.navigator.standalone)) {
3911 schedule = function(fn) {
3912 var div = document.createElement("div");
3913 var observer = new MutationObserver(fn);
3914 observer.observe(div, {attributes: true});
3915 return function() { div.classList.toggle("foo"); };
3917 schedule.isStatic = true;
3918 } else if (typeof setImmediate !== "undefined") {
3919 schedule = function (fn) {
3922 } else if (typeof setTimeout !== "undefined") {
3923 schedule = function (fn) {
3927 schedule = noAsyncScheduler;
3929 module.exports = schedule;
3931 },{"./util":38}],32:[function(_dereq_,module,exports){
3934 function(Promise, PromiseArray) {
3935 var PromiseInspection = Promise.PromiseInspection;
3936 var util = _dereq_("./util.js");
3938 function SettledPromiseArray(values) {
3939 this.constructor$(values);
3941 util.inherits(SettledPromiseArray, PromiseArray);
3943 SettledPromiseArray.prototype._promiseResolved = function (index, inspection) {
3944 this._values[index] = inspection;
3945 var totalResolved = ++this._totalResolved;
3946 if (totalResolved >= this._length) {
3947 this._resolve(this._values);
3951 SettledPromiseArray.prototype._promiseFulfilled = function (value, index) {
3952 var ret = new PromiseInspection();
3953 ret._bitField = 268435456;
3954 ret._settledValue = value;
3955 this._promiseResolved(index, ret);
3957 SettledPromiseArray.prototype._promiseRejected = function (reason, index) {
3958 var ret = new PromiseInspection();
3959 ret._bitField = 134217728;
3960 ret._settledValue = reason;
3961 this._promiseResolved(index, ret);
3964 Promise.settle = function (promises) {
3965 return new SettledPromiseArray(promises).promise();
3968 Promise.prototype.settle = function () {
3969 return new SettledPromiseArray(this).promise();
3973 },{"./util.js":38}],33:[function(_dereq_,module,exports){
3976 function(Promise, PromiseArray, apiRejection) {
3977 var util = _dereq_("./util.js");
3978 var RangeError = _dereq_("./errors.js").RangeError;
3979 var AggregateError = _dereq_("./errors.js").AggregateError;
3980 var isArray = util.isArray;
3983 function SomePromiseArray(values) {
3984 this.constructor$(values);
3986 this._unwrap = false;
3987 this._initialized = false;
3989 util.inherits(SomePromiseArray, PromiseArray);
3991 SomePromiseArray.prototype._init = function () {
3992 if (!this._initialized) {
3995 if (this._howMany === 0) {
3999 this._init$(undefined, -5);
4000 var isArrayResolved = isArray(this._values);
4001 if (!this._isResolved() &&
4003 this._howMany > this._canPossiblyFulfill()) {
4004 this._reject(this._getRangeError(this.length()));
4008 SomePromiseArray.prototype.init = function () {
4009 this._initialized = true;
4013 SomePromiseArray.prototype.setUnwrap = function () {
4014 this._unwrap = true;
4017 SomePromiseArray.prototype.howMany = function () {
4018 return this._howMany;
4021 SomePromiseArray.prototype.setHowMany = function (count) {
4022 this._howMany = count;
4025 SomePromiseArray.prototype._promiseFulfilled = function (value) {
4026 this._addFulfilled(value);
4027 if (this._fulfilled() === this.howMany()) {
4028 this._values.length = this.howMany();
4029 if (this.howMany() === 1 && this._unwrap) {
4030 this._resolve(this._values[0]);
4032 this._resolve(this._values);
4037 SomePromiseArray.prototype._promiseRejected = function (reason) {
4038 this._addRejected(reason);
4039 if (this.howMany() > this._canPossiblyFulfill()) {
4040 var e = new AggregateError();
4041 for (var i = this.length(); i < this._values.length; ++i) {
4042 e.push(this._values[i]);
4048 SomePromiseArray.prototype._fulfilled = function () {
4049 return this._totalResolved;
4052 SomePromiseArray.prototype._rejected = function () {
4053 return this._values.length - this.length();
4056 SomePromiseArray.prototype._addRejected = function (reason) {
4057 this._values.push(reason);
4060 SomePromiseArray.prototype._addFulfilled = function (value) {
4061 this._values[this._totalResolved++] = value;
4064 SomePromiseArray.prototype._canPossiblyFulfill = function () {
4065 return this.length() - this._rejected();
4068 SomePromiseArray.prototype._getRangeError = function (count) {
4069 var message = "Input array must contain at least " +
4070 this._howMany + " items but contains only " + count + " items";
4071 return new RangeError(message);
4074 SomePromiseArray.prototype._resolveEmptyArray = function () {
4075 this._reject(this._getRangeError(0));
4078 function some(promises, howMany) {
4079 if ((howMany | 0) !== howMany || howMany < 0) {
4080 return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/1wAmHx\u000a");
4082 var ret = new SomePromiseArray(promises);
4083 var promise = ret.promise();
4084 ret.setHowMany(howMany);
4089 Promise.some = function (promises, howMany) {
4090 return some(promises, howMany);
4093 Promise.prototype.some = function (howMany) {
4094 return some(this, howMany);
4097 Promise._SomePromiseArray = SomePromiseArray;
4100 },{"./errors.js":13,"./util.js":38}],34:[function(_dereq_,module,exports){
4102 module.exports = function(Promise) {
4103 function PromiseInspection(promise) {
4104 if (promise !== undefined) {
4105 promise = promise._target();
4106 this._bitField = promise._bitField;
4107 this._settledValue = promise._settledValue;
4111 this._settledValue = undefined;
4115 PromiseInspection.prototype.value = function () {
4116 if (!this.isFulfilled()) {
4117 throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/hc1DLj\u000a");
4119 return this._settledValue;
4122 PromiseInspection.prototype.error =
4123 PromiseInspection.prototype.reason = function () {
4124 if (!this.isRejected()) {
4125 throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/hPuiwB\u000a");
4127 return this._settledValue;
4130 PromiseInspection.prototype.isFulfilled =
4131 Promise.prototype._isFulfilled = function () {
4132 return (this._bitField & 268435456) > 0;
4135 PromiseInspection.prototype.isRejected =
4136 Promise.prototype._isRejected = function () {
4137 return (this._bitField & 134217728) > 0;
4140 PromiseInspection.prototype.isPending =
4141 Promise.prototype._isPending = function () {
4142 return (this._bitField & 402653184) === 0;
4145 PromiseInspection.prototype.isResolved =
4146 Promise.prototype._isResolved = function () {
4147 return (this._bitField & 402653184) > 0;
4150 Promise.prototype.isPending = function() {
4151 return this._target()._isPending();
4154 Promise.prototype.isRejected = function() {
4155 return this._target()._isRejected();
4158 Promise.prototype.isFulfilled = function() {
4159 return this._target()._isFulfilled();
4162 Promise.prototype.isResolved = function() {
4163 return this._target()._isResolved();
4166 Promise.prototype._value = function() {
4167 return this._settledValue;
4170 Promise.prototype._reason = function() {
4171 this._unsetRejectionIsUnhandled();
4172 return this._settledValue;
4175 Promise.prototype.value = function() {
4176 var target = this._target();
4177 if (!target.isFulfilled()) {
4178 throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/hc1DLj\u000a");
4180 return target._settledValue;
4183 Promise.prototype.reason = function() {
4184 var target = this._target();
4185 if (!target.isRejected()) {
4186 throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/hPuiwB\u000a");
4188 target._unsetRejectionIsUnhandled();
4189 return target._settledValue;
4193 Promise.PromiseInspection = PromiseInspection;
4196 },{}],35:[function(_dereq_,module,exports){
4198 module.exports = function(Promise, INTERNAL) {
4199 var util = _dereq_("./util.js");
4200 var errorObj = util.errorObj;
4201 var isObject = util.isObject;
4203 function tryConvertToPromise(obj, context) {
4204 if (isObject(obj)) {
4205 if (obj instanceof Promise) {
4208 else if (isAnyBluebirdPromise(obj)) {
4209 var ret = new Promise(INTERNAL);
4211 ret._fulfillUnchecked,
4212 ret._rejectUncheckedCheckError,
4213 ret._progressUnchecked,
4219 var then = util.tryCatch(getThen)(obj);
4220 if (then === errorObj) {
4221 if (context) context._pushContext();
4222 var ret = Promise.reject(then.e);
4223 if (context) context._popContext();
4225 } else if (typeof then === "function") {
4226 return doThenable(obj, then, context);
4232 function getThen(obj) {
4236 var hasProp = {}.hasOwnProperty;
4237 function isAnyBluebirdPromise(obj) {
4238 return hasProp.call(obj, "_promise0");
4241 function doThenable(x, then, context) {
4242 var promise = new Promise(INTERNAL);
4244 if (context) context._pushContext();
4245 promise._captureStackTrace();
4246 if (context) context._popContext();
4247 var synchronous = true;
4248 var result = util.tryCatch(then).call(x,
4249 resolveFromThenable,
4251 progressFromThenable);
4252 synchronous = false;
4253 if (promise && result === errorObj) {
4254 promise._rejectCallback(result.e, true, true);
4258 function resolveFromThenable(value) {
4259 if (!promise) return;
4260 promise._resolveCallback(value);
4264 function rejectFromThenable(reason) {
4265 if (!promise) return;
4266 promise._rejectCallback(reason, synchronous, true);
4270 function progressFromThenable(value) {
4271 if (!promise) return;
4272 if (typeof promise._progress === "function") {
4273 promise._progress(value);
4279 return tryConvertToPromise;
4282 },{"./util.js":38}],36:[function(_dereq_,module,exports){
4284 module.exports = function(Promise, INTERNAL) {
4285 var util = _dereq_("./util.js");
4286 var TimeoutError = Promise.TimeoutError;
4288 var afterTimeout = function (promise, message) {
4289 if (!promise.isPending()) return;
4292 if(!util.isPrimitive(message) && (message instanceof Error)) {
4295 if (typeof message !== "string") {
4296 message = "operation timed out";
4298 err = new TimeoutError(message);
4300 util.markAsOriginatingFromRejection(err);
4301 promise._attachExtraTrace(err);
4302 promise._cancel(err);
4305 var afterValue = function(value) { return delay(+this).thenReturn(value); };
4306 var delay = Promise.delay = function (value, ms) {
4307 if (ms === undefined) {
4310 var ret = new Promise(INTERNAL);
4311 setTimeout(function() { ret._fulfill(); }, ms);
4315 return Promise.resolve(value)._then(afterValue, null, null, ms, undefined);
4318 Promise.prototype.delay = function (ms) {
4319 return delay(this, ms);
4322 function successClear(value) {
4324 if (handle instanceof Number) handle = +handle;
4325 clearTimeout(handle);
4329 function failureClear(reason) {
4331 if (handle instanceof Number) handle = +handle;
4332 clearTimeout(handle);
4336 Promise.prototype.timeout = function (ms, message) {
4338 var ret = this.then().cancellable();
4339 ret._cancellationParent = this;
4340 var handle = setTimeout(function timeoutTimeout() {
4341 afterTimeout(ret, message);
4343 return ret._then(successClear, failureClear, undefined, handle, undefined);
4348 },{"./util.js":38}],37:[function(_dereq_,module,exports){
4350 module.exports = function (Promise, apiRejection, tryConvertToPromise,
4352 var TypeError = _dereq_("./errors.js").TypeError;
4353 var inherits = _dereq_("./util.js").inherits;
4354 var PromiseInspection = Promise.PromiseInspection;
4356 function inspectionMapper(inspections) {
4357 var len = inspections.length;
4358 for (var i = 0; i < len; ++i) {
4359 var inspection = inspections[i];
4360 if (inspection.isRejected()) {
4361 return Promise.reject(inspection.error());
4363 inspections[i] = inspection._settledValue;
4368 function thrower(e) {
4369 setTimeout(function(){throw e;}, 0);
4372 function castPreservingDisposable(thenable) {
4373 var maybePromise = tryConvertToPromise(thenable);
4374 if (maybePromise !== thenable &&
4375 typeof thenable._isDisposable === "function" &&
4376 typeof thenable._getDisposer === "function" &&
4377 thenable._isDisposable()) {
4378 maybePromise._setDisposable(thenable._getDisposer());
4380 return maybePromise;
4382 function dispose(resources, inspection) {
4384 var len = resources.length;
4385 var ret = Promise.defer();
4386 function iterator() {
4387 if (i >= len) return ret.resolve();
4388 var maybePromise = castPreservingDisposable(resources[i++]);
4389 if (maybePromise instanceof Promise &&
4390 maybePromise._isDisposable()) {
4392 maybePromise = tryConvertToPromise(
4393 maybePromise._getDisposer().tryDispose(inspection),
4398 if (maybePromise instanceof Promise) {
4399 return maybePromise._then(iterator, thrower,
4409 function disposerSuccess(value) {
4410 var inspection = new PromiseInspection();
4411 inspection._settledValue = value;
4412 inspection._bitField = 268435456;
4413 return dispose(this, inspection).thenReturn(value);
4416 function disposerFail(reason) {
4417 var inspection = new PromiseInspection();
4418 inspection._settledValue = reason;
4419 inspection._bitField = 134217728;
4420 return dispose(this, inspection).thenThrow(reason);
4423 function Disposer(data, promise, context) {
4425 this._promise = promise;
4426 this._context = context;
4429 Disposer.prototype.data = function () {
4433 Disposer.prototype.promise = function () {
4434 return this._promise;
4437 Disposer.prototype.resource = function () {
4438 if (this.promise().isFulfilled()) {
4439 return this.promise().value();
4444 Disposer.prototype.tryDispose = function(inspection) {
4445 var resource = this.resource();
4446 var context = this._context;
4447 if (context !== undefined) context._pushContext();
4448 var ret = resource !== null
4449 ? this.doDispose(resource, inspection) : null;
4450 if (context !== undefined) context._popContext();
4451 this._promise._unsetDisposable();
4456 Disposer.isDisposer = function (d) {
4457 return (d != null &&
4458 typeof d.resource === "function" &&
4459 typeof d.tryDispose === "function");
4462 function FunctionDisposer(fn, promise, context) {
4463 this.constructor$(fn, promise, context);
4465 inherits(FunctionDisposer, Disposer);
4467 FunctionDisposer.prototype.doDispose = function (resource, inspection) {
4468 var fn = this.data();
4469 return fn.call(resource, resource, inspection);
4472 function maybeUnwrapDisposer(value) {
4473 if (Disposer.isDisposer(value)) {
4474 this.resources[this.index]._setDisposable(value);
4475 return value.promise();
4480 Promise.using = function () {
4481 var len = arguments.length;
4482 if (len < 2) return apiRejection(
4483 "you must pass at least 2 arguments to Promise.using");
4484 var fn = arguments[len - 1];
4485 if (typeof fn !== "function") return apiRejection("fn must be a function\u000a\u000a See http://goo.gl/916lJJ\u000a");
4488 var spreadArgs = true;
4489 if (len === 2 && Array.isArray(arguments[0])) {
4490 input = arguments[0];
4497 var resources = new Array(len);
4498 for (var i = 0; i < len; ++i) {
4499 var resource = input[i];
4500 if (Disposer.isDisposer(resource)) {
4501 var disposer = resource;
4502 resource = resource.promise();
4503 resource._setDisposable(disposer);
4505 var maybePromise = tryConvertToPromise(resource);
4506 if (maybePromise instanceof Promise) {
4508 maybePromise._then(maybeUnwrapDisposer, null, null, {
4509 resources: resources,
4514 resources[i] = resource;
4517 var promise = Promise.settle(resources)
4518 .then(inspectionMapper)
4519 .then(function(vals) {
4520 promise._pushContext();
4524 ? fn.apply(undefined, vals) : fn.call(undefined, vals);
4526 promise._popContext();
4531 disposerSuccess, disposerFail, undefined, resources, undefined);
4532 resources.promise = promise;
4536 Promise.prototype._setDisposable = function (disposer) {
4537 this._bitField = this._bitField | 262144;
4538 this._disposer = disposer;
4541 Promise.prototype._isDisposable = function () {
4542 return (this._bitField & 262144) > 0;
4545 Promise.prototype._getDisposer = function () {
4546 return this._disposer;
4549 Promise.prototype._unsetDisposable = function () {
4550 this._bitField = this._bitField & (~262144);
4551 this._disposer = undefined;
4554 Promise.prototype.disposer = function (fn) {
4555 if (typeof fn === "function") {
4556 return new FunctionDisposer(fn, this, createContext());
4558 throw new TypeError();
4563 },{"./errors.js":13,"./util.js":38}],38:[function(_dereq_,module,exports){
4565 var es5 = _dereq_("./es5.js");
4566 var canEvaluate = typeof navigator == "undefined";
4567 var haveGetters = (function(){
4570 es5.defineProperty(o, "f", {
4583 var errorObj = {e: {}};
4585 function tryCatcher() {
4587 var target = tryCatchTarget;
4588 tryCatchTarget = null;
4589 return target.apply(this, arguments);
4595 function tryCatch(fn) {
4596 tryCatchTarget = fn;
4600 var inherits = function(Child, Parent) {
4601 var hasProp = {}.hasOwnProperty;
4604 this.constructor = Child;
4605 this.constructor$ = Parent;
4606 for (var propertyName in Parent.prototype) {
4607 if (hasProp.call(Parent.prototype, propertyName) &&
4608 propertyName.charAt(propertyName.length-1) !== "$"
4610 this[propertyName + "$"] = Parent.prototype[propertyName];
4614 T.prototype = Parent.prototype;
4615 Child.prototype = new T();
4616 return Child.prototype;
4620 function isPrimitive(val) {
4621 return val == null || val === true || val === false ||
4622 typeof val === "string" || typeof val === "number";
4626 function isObject(value) {
4627 return !isPrimitive(value);
4630 function maybeWrapAsError(maybeError) {
4631 if (!isPrimitive(maybeError)) return maybeError;
4633 return new Error(safeToString(maybeError));
4636 function withAppended(target, appendee) {
4637 var len = target.length;
4638 var ret = new Array(len + 1);
4640 for (i = 0; i < len; ++i) {
4647 function getDataPropertyOrDefault(obj, key, defaultValue) {
4649 var desc = Object.getOwnPropertyDescriptor(obj, key);
4652 return desc.get == null && desc.set == null
4657 return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined;
4661 function notEnumerableProp(obj, name, value) {
4662 if (isPrimitive(obj)) return obj;
4669 es5.defineProperty(obj, name, descriptor);
4673 function thrower(r) {
4677 var inheritedDataKeys = (function() {
4678 var excludedPrototypes = [
4684 var isExcludedProto = function(val) {
4685 for (var i = 0; i < excludedPrototypes.length; ++i) {
4686 if (excludedPrototypes[i] === val) {
4694 var getKeys = Object.getOwnPropertyNames;
4695 return function(obj) {
4697 var visitedKeys = Object.create(null);
4698 while (obj != null && !isExcludedProto(obj)) {
4701 keys = getKeys(obj);
4705 for (var i = 0; i < keys.length; ++i) {
4707 if (visitedKeys[key]) continue;
4708 visitedKeys[key] = true;
4709 var desc = Object.getOwnPropertyDescriptor(obj, key);
4710 if (desc != null && desc.get == null && desc.set == null) {
4714 obj = es5.getPrototypeOf(obj);
4719 var hasProp = {}.hasOwnProperty;
4720 return function(obj) {
4721 if (isExcludedProto(obj)) return [];
4724 /*jshint forin:false */
4725 enumeration: for (var key in obj) {
4726 if (hasProp.call(obj, key)) {
4729 for (var i = 0; i < excludedPrototypes.length; ++i) {
4730 if (hasProp.call(excludedPrototypes[i], key)) {
4731 continue enumeration;
4743 var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/;
4744 function isClass(fn) {
4746 if (typeof fn === "function") {
4747 var keys = es5.names(fn.prototype);
4749 var hasMethods = es5.isES5 && keys.length > 1;
4750 var hasMethodsOtherThanConstructor = keys.length > 0 &&
4751 !(keys.length === 1 && keys[0] === "constructor");
4752 var hasThisAssignmentAndStaticMethods =
4753 thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0;
4755 if (hasMethods || hasMethodsOtherThanConstructor ||
4756 hasThisAssignmentAndStaticMethods) {
4766 function toFastProperties(obj) {
4767 /*jshint -W027,-W055,-W031*/
4771 while (l--) new f();
4776 var rident = /^[a-z$_][a-z$_0-9]*$/i;
4777 function isIdentifier(str) {
4778 return rident.test(str);
4781 function filledRange(count, prefix, suffix) {
4782 var ret = new Array(count);
4783 for(var i = 0; i < count; ++i) {
4784 ret[i] = prefix + i + suffix;
4789 function safeToString(obj) {
4793 return "[no string representation]";
4797 function markAsOriginatingFromRejection(e) {
4799 notEnumerableProp(e, "isOperational", true);
4804 function originatesFromRejection(e) {
4805 if (e == null) return false;
4806 return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) ||
4807 e["isOperational"] === true);
4810 function canAttachTrace(obj) {
4811 return obj instanceof Error && es5.propertyIsWritable(obj, "stack");
4814 var ensureErrorObject = (function() {
4815 if (!("stack" in new Error())) {
4816 return function(value) {
4817 if (canAttachTrace(value)) return value;
4818 try {throw new Error(safeToString(value));}
4819 catch(err) {return err;}
4822 return function(value) {
4823 if (canAttachTrace(value)) return value;
4824 return new Error(safeToString(value));
4829 function classString(obj) {
4830 return {}.toString.call(obj);
4833 function copyDescriptors(from, to, filter) {
4834 var keys = es5.names(from);
4835 for (var i = 0; i < keys.length; ++i) {
4839 es5.defineProperty(to, key, es5.getDescriptor(from, key));
4847 isIdentifier: isIdentifier,
4848 inheritedDataKeys: inheritedDataKeys,
4849 getDataPropertyOrDefault: getDataPropertyOrDefault,
4851 isArray: es5.isArray,
4852 haveGetters: haveGetters,
4853 notEnumerableProp: notEnumerableProp,
4854 isPrimitive: isPrimitive,
4856 canEvaluate: canEvaluate,
4860 withAppended: withAppended,
4861 maybeWrapAsError: maybeWrapAsError,
4862 toFastProperties: toFastProperties,
4863 filledRange: filledRange,
4864 toString: safeToString,
4865 canAttachTrace: canAttachTrace,
4866 ensureErrorObject: ensureErrorObject,
4867 originatesFromRejection: originatesFromRejection,
4868 markAsOriginatingFromRejection: markAsOriginatingFromRejection,
4869 classString: classString,
4870 copyDescriptors: copyDescriptors,
4871 hasDevTools: typeof chrome !== "undefined" && chrome &&
4872 typeof chrome.loadTimes === "function",
4873 isNode: typeof process !== "undefined" &&
4874 classString(process).toLowerCase() === "[object process]"
4876 ret.isRecentNode = ret.isNode && (function() {
4877 var version = process.versions.node.split(".").map(Number);
4878 return (version[0] === 0 && version[1] > 10) || (version[0] > 0);
4881 if (ret.isNode) ret.toFastProperties(process);
4883 try {throw new Error(); } catch (e) {ret.lastLineError = e;}
4884 module.exports = ret;
4886 },{"./es5.js":14}]},{},[4])(4)
4887 }); ;if (typeof window !== 'undefined' && window !== null) { window.P = window.Promise; } else if (typeof self !== 'undefined' && self !== null) { self.P = self.Promise; }